");--input-focus-border-color:Highlight;--input-focus-outline:1px solid Canvas;--input-unfocused-border-color:transparent;--input-disabled-border-color:transparent;--input-hover-border-color:black;--link-outline:none}@media screen and (forced-colors:active){:root{--input-focus-border-color:CanvasText;--input-unfocused-border-color:ActiveText;--input-disabled-border-color:GrayText;--input-hover-border-color:Highlight;--link-outline:1.5px solid LinkText}}:root{--react-pdf-text-layer:1;--highlight-bg-color:rgba(180, 0, 170, 1);--highlight-selected-bg-color:rgba(0, 100, 0, 1)}@media screen and (forced-colors:active){:root{--highlight-bg-color:Highlight;--highlight-selected-bg-color:ButtonText}}._wrapper_4ijce_1{background-color:#3f51b5;border:1px solid #3f51b5;clear:both}._menubar_4ijce_7{position:sticky;top:-1px;z-index:10;padding-block-start:.2em;padding-block-end:.2em;background-color:#3f51b5;color:#f0f0f0;user-select:none}._menubar_4ijce_7 ._central_4ijce_17{display:flex;gap:.2em;justify-content:center;align-items:baseline;font-variant-numeric:lining-nums tabular-nums}._menubar_4ijce_7 ._left_4ijce_24{position:absolute;left:0;top:.25em;padding-left:.2em}._menubar_4ijce_7 ._right_4ijce_30{position:absolute;right:0;top:.25em;padding-right:.4em}._menubar_4ijce_7 ._page-viewer-container_4ijce_36{display:inline-flex;align-items:stretch;gap:.2em}._menubar_4ijce_7 ._page-viewer_4ijce_36{border:1px solid #f0f0f0;display:inline-block;padding-inline:.2em;padding-block-end:.1em;min-width:1ch;text-align:center;user-select:all}._menubar_4ijce_7 ._page-viewer_4ijce_36:focus{border-color:#ffba67;color:#ffba67;caret-color:#fff}@media (hover:hover){._menubar_4ijce_7 a:hover{color:#ffba67}}._menubar_4ijce_7 button{border:0 solid transparent;background-color:transparent;color:gray;font-size:1rem}._menubar_4ijce_7 button:not([disabled]){color:#f0f0f0;cursor:pointer}@media (hover:hover){._menubar_4ijce_7 button:not([disabled]):hover{color:#ffba67}}._loader_4ijce_76{text-align:center;background-color:#fff;color:gray}._loader_4ijce_76>span{display:inline-block;position:sticky;top:1.5rem;padding-top:2rem}._bibtex_vg9s2_1{display:none;float:right;margin-left:1rem;background-color:#f0f0f0;font-size:.8rem;max-width:min(25em,40vw);position:relative}@media screen and (min-width:38em){._bibtex_vg9s2_1{display:block}}._bibtex_vg9s2_1 ._commands_vg9s2_15{position:absolute;right:0;top:0}._bibtex_vg9s2_1 ._commands_vg9s2_15 ._copy_vg9s2_20{display:inline-block;padding-block-start:.2em;padding-block-end:.3em;padding-inline:.3em;background-color:#fff;border:1px solid #606060;cursor:pointer}._bibtex_vg9s2_1 .highlight{margin:0!important}._bibtex_vg9s2_1 .highlight pre{border:0 none transparent!important;white-space:pre!important;padding-block-start:.2rem;padding-block-end:.4rem;overflow-x:scroll}._bibtex_vg9s2_1 .highlight pre .line-number{display:none!important}body{counter-reset:katexEqnNo mmlEqnNo}:root{--color-prettylights-syntax-comment:#57606a;--color-prettylights-syntax-constant:#0550ae;--color-prettylights-syntax-entity:#6639ba;--color-prettylights-syntax-storage-modifier-import:#24292f;--color-prettylights-syntax-entity-tag:#116329;--color-prettylights-syntax-keyword:#cf222e;--color-prettylights-syntax-string:#0a3069;--color-prettylights-syntax-variable:#953800;--color-prettylights-syntax-brackethighlighter-unmatched:#82071e;--color-prettylights-syntax-invalid-illegal-text:#f6f8fa;--color-prettylights-syntax-invalid-illegal-bg:#82071e;--color-prettylights-syntax-carriage-return-text:#f6f8fa;--color-prettylights-syntax-carriage-return-bg:#cf222e;--color-prettylights-syntax-string-regexp:#116329;--color-prettylights-syntax-markup-list:#3b2300;--color-prettylights-syntax-markup-heading:#0550ae;--color-prettylights-syntax-markup-italic:#24292f;--color-prettylights-syntax-markup-bold:#24292f;--color-prettylights-syntax-markup-deleted-text:#82071e;--color-prettylights-syntax-markup-deleted-bg:#ffebe9;--color-prettylights-syntax-markup-inserted-text:#116329;--color-prettylights-syntax-markup-inserted-bg:#dafbe1;--color-prettylights-syntax-markup-changed-text:#953800;--color-prettylights-syntax-markup-changed-bg:#ffd8b5;--color-prettylights-syntax-markup-ignored-text:#eaeef2;--color-prettylights-syntax-markup-ignored-bg:#0550ae;--color-prettylights-syntax-meta-diff-range:#8250df;--color-prettylights-syntax-brackethighlighter-angle:#57606a;--color-prettylights-syntax-sublimelinter-gutter-mark:#8c959f;--color-prettylights-syntax-constant-other-reference-link:#0a3069}.pl-en{color:var(--color-prettylights-syntax-entity)}.pl-k{color:var(--color-prettylights-syntax-keyword)}.pl-pds,.pl-s{color:var(--color-prettylights-syntax-string)}._header_opib5_1{font-family:Cinzel Variable,serif;font-size:1.25rem;position:relative;color:#fff;background-color:#3f51b5;padding-inline:2.4rem;padding-block-start:.3rem}@media screen and (min-width:38em){._header_opib5_1{padding-inline:3rem;font-size:1.1rem}}._header_opib5_1 ._toggle_opib5_16{font-size:1.5rem;position:absolute;left:.3em;top:.3em;cursor:pointer}@media (hover:hover){._header_opib5_1 ._toggle_opib5_16 :hover{color:#ffba67}}@media screen and (min-width:38em){._header_opib5_1 ._toggle_opib5_16{display:none}}._header_opib5_1>ul{list-style:none;display:flex;flex-direction:column;align-items:center;gap:.2rem}@media screen and (min-width:38em){._header_opib5_1>ul{flex-direction:row;align-items:stretch;gap:1em}}._header_opib5_1>ul>li a{display:flex;align-items:center;height:100%;color:#fff;border-bottom:.2rem solid transparent}@media (hover:hover){._header_opib5_1>ul>li a:hover{color:#ffba67;border-bottom-color:#ffba67}}._header_opib5_1>ul>li:not(:first-child) a{padding-bottom:.2em}@media screen and (min-width:38em){._header_opib5_1>ul>li:not(:first-child) a{padding:0}}._header_opib5_1 ._site-name_opib5_68{position:relative;font-size:1.5rem;font-weight:700;line-height:1.5em}@media not screen and (min-width:38em){._header_opib5_1:not(._open_opib5_75)>ul>li:not(:first-child){display:none}}body,html{position:absolute;inset:0;overflow:hidden}body,h1,h2,html,p,ul{padding:0;margin:0}html{font-size:16px}@media screen and (min-width:58em){html{font-size:24px}}a{color:inherit;text-decoration:inherit}*{box-sizing:border-box}img{max-width:100%;width:auto;height:auto}body{position:absolute;inset:0;display:grid;grid-template-rows:auto 1fr;overflow:hidden}._container_1th49_55{font-family:"Exo 2 Variable",sans-serif;display:flex;flex-direction:column;font-size:1rem;overflow:auto;position:relative}._footer_1th49_64{flex:0 0 auto;color:#fff;background-color:#3f51b5;text-align:center;padding:.2rem .2rem .3rem;position:relative;user-select:none}._footer_1th49_64 ._icons_1th49_74{display:none}@media screen and (min-width:38em){._footer_1th49_64 ._icons_1th49_74{display:flex;gap:.3em;position:absolute;left:3rem;bottom:.25rem;text-align:left}}@media screen and (min-width:58em){._footer_1th49_64{font-size:.8rem}}._footer_1th49_64 a{color:#fff;text-decoration:none}@media (hover:hover){._footer_1th49_64 a:hover{color:#ffba67}}._main_1th49_102{flex:1 0 auto;color:#303030;max-width:100em;margin:1rem}@media screen and (min-width:38em){._main_1th49_102{margin:2rem 3rem}}._main_1th49_102>h1:first-child{margin-top:-2rem;padding-top:2rem}._main_1th49_102 a.a{color:#3f51b5}@media (hover:hover){._main_1th49_102 a.a:hover .a{text-decoration:underline;text-underline-offset:.1em;text-decoration-thickness:.1em}}._main_1th49_102 h1{font-size:2.25rem;padding-top:1.5rem;padding-bottom:.75rem;font-weight:400}._main_1th49_102 h2{font-size:1.75rem;padding-top:1rem;padding-bottom:.5rem;font-weight:400}._main_1th49_102 h1,._main_1th49_102 h2{text-align:center}@media screen and (min-width:38em){._main_1th49_102 h1,._main_1th49_102 h2{text-align:left}}._main_1th49_102 h2>a.a{position:relative;color:#303030;border-bottom:0 solid transparent;margin-bottom:0}@media (hover:hover){._main_1th49_102 h2>a.a:hover:before{content:"§";font-weight:400;color:gray;position:absolute;left:-.8em}}._main_1th49_102 p{text-align:justify;hyphens:auto;margin-bottom:.5em}._main_1th49_102 .highlight{margin-block-end:.75em}._main_1th49_102 .highlight .highlight-header{display:none}._main_1th49_102 .highlight pre{border:1px solid #606060;margin:0;white-space:pre-wrap;user-select:contain}._main_1th49_102 .highlight pre>code{font-family:Roboto Mono Variable,monospace;line-height:1.3em;tab-size:2}._main_1th49_102 .highlight pre:not(.one-line)>code{display:table}._main_1th49_102 .highlight pre:not(.one-line)>code .line{display:table-row}._main_1th49_102 .highlight pre:not(.one-line)>code .line .line-number{border-inline-start:2px solid #F0F0F0;display:table-cell;user-select:none;height:100%;padding-inline-start:1em;padding-inline-end:.5em;color:var(--color-prettylights-syntax-sublimelinter-gutter-mark);background-color:#f0f0f0}._main_1th49_102 .highlight pre:not(.one-line)>code .line .text{display:table-cell;width:100%;padding-inline:.5em;overflow-wrap:anywhere}._main_1th49_102 .highlight pre:not(.one-line)>code .line .text .indent{white-space:pre}@media (hover:hover){._main_1th49_102 .highlight pre:not(.one-line)>code .line:hover{background-color:#f0f0f0}._main_1th49_102 .highlight pre:not(.one-line)>code .line:hover .line-number{color:#000;border-inline-start:2px solid #606060;background-color:#e0e0e0}}._main_1th49_102 ul{list-style:square;padding-left:1.5em}@font-face{font-family:Cinzel Variable;font-style:normal;font-display:swap;font-weight:400 900;src:url(/_astro/cinzel-latin-ext-wght-normal.9_1vLTtc.woff2) format("woff2-variations");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Cinzel Variable;font-style:normal;font-display:swap;font-weight:400 900;src:url(/_astro/cinzel-latin-wght-normal.DS2jhxdi.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:"Exo 2 Variable";font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/exo-2-cyrillic-ext-wght-normal.B5xQCqZ8.woff2) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:"Exo 2 Variable";font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/exo-2-cyrillic-wght-normal.Cho_hbqG.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:"Exo 2 Variable";font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/exo-2-vietnamese-wght-normal.BNOz-EOU.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:"Exo 2 Variable";font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/exo-2-latin-ext-wght-normal.OsFGN4qS.woff2) format("woff2-variations");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:"Exo 2 Variable";font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/exo-2-latin-wght-normal.DllOx71z.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:"Exo 2 Variable";font-style:italic;font-display:swap;font-weight:100 900;src:url(/_astro/exo-2-cyrillic-ext-wght-italic.DWfNeZM3.woff2) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:"Exo 2 Variable";font-style:italic;font-display:swap;font-weight:100 900;src:url(/_astro/exo-2-cyrillic-wght-italic.U6Mqfn83.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:"Exo 2 Variable";font-style:italic;font-display:swap;font-weight:100 900;src:url(/_astro/exo-2-vietnamese-wght-italic.CCZ786PG.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:"Exo 2 Variable";font-style:italic;font-display:swap;font-weight:100 900;src:url(/_astro/exo-2-latin-ext-wght-italic.0wO9IMfB.woff2) format("woff2-variations");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:"Exo 2 Variable";font-style:italic;font-display:swap;font-weight:100 900;src:url(/_astro/exo-2-latin-wght-italic.CbsmNhw9.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Academicons;font-style:normal;font-weight:400;font-display:block;src:url(data:font/woff2;base64,d09GMgABAAAAAARgAAwAAAAABtAAAAQTAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAATAgEEQgKhyiGAAsMAAE2AiQDFAQgBYFmByAbSwXILgpsY9rgDQcEHWs2s/qWB5G3hYd4gF/337mDv7Mmq5SQYCUyOQJM66q076e8zze7nvzvwaoEF/QtaZ1pHVTmbeFjAerk9PqlZZh6gEkUWZRoWqvUNJIDJxxJYLkEGFEEx5tt8lLQ2F/Afvqjv0iCudCPSXlcs5NqRS3Wvjo2lmsFqU9QKah3rN0RQXy3dpCE2yEhJQwKU4C+jv+tvBVFJI3BccV837Ap45LgBnN5EzZ3S5NwDboBYdqp5k+JYpRKachhot03CshEou9zWcTz729yOeqFZWKLWA/W5SxYPPQiYdXuEUhBAZQg9AFhDoCFiIjli1ekbaSiDktG7ZnX2Io2jppe5Ho9OJfSeaFotyQkneoEj6qvy6TjPJ1oRMMqmz8XLTF4aGdj02bepapSmfEamTss1Bxh6tyO2oaNdCWjgpvhFAsVVIclpZZPIoWb88RB+UADk7Wr1lcuqVhXtXQeKgC7yhhY7XgAltQ/KO0ahLGnkNL5UH9SVO+QdWEqxjpv6k6A/Ts0jFXDQEiR0NSdsDNQsGQPXkJoOLoRlpy+cAar+0h1E1IO88MTMp5rWL3WRDi0YK2KXbfpe/ZQtncv1XlwGSl9FJaqTiFl26FxzNjBg9Jz+dBBWFJP0/ZgjCTx3nDsetPc0K9qsl55GCmnLmEMBdfv5+EPGHbec1SL1mD9yqRIKC0Qoc8LB15H86cse1Tz3qRu2jhsWEWzuGDpVjUmNBQXjR58ZUb8o7WppRuX5Cw+fmxQVOveeeOSIpbMT17RIXy3x+6VS8oSxpbWPxkVj2rrO3Uog8LPRabMYTu50W7dXG4pUnb9ErK1CWljKyrKA8tEec3DLWvoFa+detZkYuoZnfCkRW3aF7UMdlT9Ux6Vqt28ebuMDl0y2oW0bJc+e9zLXNnwjyj0tl7rYOyomf5LPduO9kw8RtfyXIp9nCshsLCU/XjTrzO2pt1LNpiPi5WZ3becWLdvHH6vKLv+PL/9RlEMivOtdqClZzx/aW5Vl+m/qp9meUXPHvJx2L4s+GeFNS3Iu36Hvn1au4LjI4jz7FEXmUpcu4+4oHc0YNXcVq3npfyYV6b9xnZ048nn3/uRiodVHhb5tCb6ZJcdl52XP1z5Xcpu/MOfdlPr0wPe6QaonbsdGl2EgPBlyp3v3SfW3ulrVtAD4J17bwR8Hh35/3/uVhToCpCZigPh2kdFY2gGgHuzwRpSVxUPt9SOyIIMpfIbCEiTZOUAEYKAbroD8pnAU0j8AdRKUMZ8JVLENCU2SMh8Mq+kKkHzxi6bL1mBQuly5WipuSbaa6KVavr0aVEeFUiVDEmLcdDMWh1U012ieEmSZUuXaKVVCEbNNdYmhi00e5aWRkiWqliWeAW7TE9OK/dOeQ==) format("woff2")}.ai{font-family:Academicons;font-weight:400;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.ai-doi:before{content:""}.ai-google-scholar:before{content:""}.ai-orcid:before{content:""}:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(data:font/woff2;base64,d09GMgABAAAAAANoAAoAAAAABkQAAAMeAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAAPAqFGIQPCwgAATYCJAMMBCAFgzQHIBsEBciOw3R7I9skyZdJ181/Hk//3JdkcCamg9x1IL/kth+wy8O38/2rIsi7y7M4n/EApz6wYKCbuKa+VgBVLwBHOtGmKp7A9GkBVkCjPP+nra0LhzNvtUsiNtEneiTJWfRrBfDxlKZAANrUCkCajfzGxgiAERIMN7EH5FdRDg5+nPVxDp3VbAPoRRaA2B6LNgKQAAADcABzHAIlzxOgVSSMLmk0IN2M2xi3BqkQR6YF0KV5AOAXGjwZiM7UBVt0HVorQTGUhhRfTTbXS5X6N/K2e6+2BTje6ruORMvcdjvPsduXcapERQt81kRs89rhMzdyhcdKz7IZeuNIrT/ewn2GhdJKbakyj5gBpb6aVHpVV4uJtOya/FDJMsuhBO9xrkvdl9sOtVTt76G2UNqs0h9vNcdqe/Tu0qFWaiuV7Wy7FW7LLIbSCv3xbpO92mKW9UxzpYUSc61Xkmu5Kh2GYAhmeNxQHCm7nnQ483Rp+c2M5ZAei4sh+dXTHlpaAJDWFDJFkq/ct54qkNo3Gmai/5g+ff4QPePDae3bazFkPfs9DW50HtBBztkZ6J+7t/Hhg/BHR/knZ+ueY1kwx2vxjBfYEyZPZFxiU25K5Jkg5+SD2pFCAfwXtUXx9yDbxsSA17eyYmQSGtaTDRyww6S0BTh6ZJGtheW2iF2bOEYp5tXZeyxEcazpwAmmwE2Z9JJO7Pj2ffNYUXTb06GDufF3Qa0+9Ju5ORgKBiZZNg8uoFhKtRw8KQXTy0VnZzG4mcpWMJlEJBeZqUuwjMnEfaKZs/QOFxkAAARcESA/s4Q649hvOvoMAPA46MTIskTzRbONTaGzAHQwIvCdCXZvgA8BtfxXIoZAC6Af4LicB49OBKDjRdoqcSjrAggN9yGQaG8Fxsh9gZNqZjW/FwTNQm+lJRSQqrNOepDrrUV3nXXUIlySbhp00jyTfgqZ1nrq4NhNqRbddNcWdyFJhAgh/AUKEiVMiCDBwkg8vetJuVHSyyEanZlw/sLaDebFNIaTHvMlVfvBuqyU3yyFzrroq5u2WmvDD89TEy+SpjjVn+awAQA=) format("woff2")}.fab{font-weight:400}.fa-github:before{content:""}.fa-twitter:before{content:""}:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(data:font/woff2;base64,d09GMgABAAAAAAIwAAoAAAAABHAAAAHkAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAANAqBXIFhCwYAATYCJAMIBCAFgygHIBu+A8guChxjeQqOf8lQWNbs+FB2huakKB7+fy29byDwJ0QFQgWIjmyFTKoYHKHwXVkg1dqcCsV6/f+f2935S+HFGabNT9fqc+vQiMRA81BpIBNuMScQOP35j4+bxQDbUzf1Sef5g0aa0Bo0li1L6C9aYMsk8NLASjdhus2vHYH4FWSIGKlH0ApFfItrSmJbnAIb6Vv/G+FMpswB6AAAq7d3u/svv8S7esQ7m0BArIw3GA/IkKMHE+jBGw8KheCXusa1L8NBAFLAcwAcA30k5F2jpx9PVbrTl8fd/ir2h7jVs69K1fNZr0dFnOk7EHdSiifTXwxkcX/GyykHnggRIqjixEk3UYoMSSWDp2s8O9xG2/Ala+s73bfzNPOgszN90nPFr+dKJqSePBhEEcCpmeV4dRQKanLUfTMgyMvSrv8xbdu+7H9TlYGfCx6XsbC+srPxDk0yEPzZzYYc8IDAe2YxRNQQyBr/agWBEACg0RFMFM1YnJGLhqX+NNPmO82tcWsWPi2dUD9/g/lgA58nMZJTxXwuVddcRKWqWFDpUo69yIYqEjP5PKSnp6WqrmGgo6WhqYMItV2EPskKrCFgV1VnapMYSbvoKSFqVuJVs46qP5vwBUoRk86QIIIjEcFnWKy+EQAAAAA=) format("woff2")}.far{font-weight:400}:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(data:font/woff2;base64,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) format("woff2")}.fa{font-family:var(--fa-style-family, "Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fab,.far{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.far{font-family:"Font Awesome 6 Free"}.fab{font-family:"Font Awesome 6 Brands"}.fa-4x{font-size:4em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-spin{animation-name:fa-spin;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration, 2s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,linear)}@media (prefers-reduced-motion:reduce){.fa-spin{animation-delay:-1ms;animation-duration:1ms;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@keyframes fa-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.fa-copy:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-bars:before{content:""}.fa-circle-notch:before{content:""}.fa-download:before{content:""}.fa-file-pdf:before{content:""}.fa-link:before{content:""}.fa-list:before{content:""}._header_opib5_1{font-family:Cinzel Variable,serif;font-size:1.25rem;position:relative;color:#fff;background-color:#3f51b5;padding-inline:2.4rem;padding-block-start:.3rem}@media screen and (min-width:38em){._header_opib5_1{padding-inline:3rem;font-size:1.1rem}}._header_opib5_1 ._toggle_opib5_16{font-size:1.5rem;position:absolute;left:.3em;top:.3em;cursor:pointer}@media (hover:hover){._header_opib5_1 ._toggle_opib5_16 :hover{color:#ffba67}}@media screen and (min-width:38em){._header_opib5_1 ._toggle_opib5_16{display:none}}._header_opib5_1>ul{list-style:none;display:flex;flex-direction:column;align-items:center;gap:.2rem}@media screen and (min-width:38em){._header_opib5_1>ul{flex-direction:row;align-items:stretch;gap:1em}}._header_opib5_1>ul>li a{display:flex;align-items:center;height:100%;color:#fff;border-bottom:.2rem solid transparent}@media (hover:hover){._header_opib5_1>ul>li a:hover{color:#ffba67;border-bottom-color:#ffba67}}._header_opib5_1>ul>li:not(:first-child) a{padding-bottom:.2em}@media screen and (min-width:38em){._header_opib5_1>ul>li:not(:first-child) a{padding:0}}._header_opib5_1 ._site-name_opib5_68{position:relative;font-size:1.5rem;font-weight:700;line-height:1.5em}@media not screen and (min-width:38em){._header_opib5_1:not(._open_opib5_75)>ul>li:not(:first-child){display:none}}._bibtex_vg9s2_1{display:none;float:right;margin-left:1rem;background-color:#f0f0f0;font-size:.8rem;max-width:min(25em,40vw);position:relative}@media screen and (min-width:38em){._bibtex_vg9s2_1{display:block}}._bibtex_vg9s2_1 ._commands_vg9s2_15{position:absolute;right:0;top:0}._bibtex_vg9s2_1 ._commands_vg9s2_15 ._copy_vg9s2_20{display:inline-block;padding-block-start:.2em;padding-block-end:.3em;padding-inline:.3em;background-color:#fff;border:1px solid #606060;cursor:pointer}._bibtex_vg9s2_1 .highlight{margin:0!important}._bibtex_vg9s2_1 .highlight pre{border:0 none transparent!important;white-space:pre!important;padding-block-start:.2rem;padding-block-end:.4rem;overflow-x:scroll}._bibtex_vg9s2_1 .highlight pre .line-number{display:none!important}._links_11h5g_1{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:flex-start;align-items:baseline;align-content:flex-start;font-size:1rem;column-gap:.3rem;row-gap:.2rem;padding-bottom:.75rem}._links_11h5g_1>a{border:1px solid #606060;padding-inline:.4em;padding-block:.2em}@media screen and (min-width:38em){._links_11h5g_1>a{padding-inline:.2em;padding-block:0}}._links_11h5g_1>a:hover{background-color:#f0f0f0}:root{--react-pdf-annotation-layer:1;--annotation-unfocused-field-background:url("data:image/svg+xml;charset=UTF-8,");--input-focus-border-color:Highlight;--input-focus-outline:1px solid Canvas;--input-unfocused-border-color:transparent;--input-disabled-border-color:transparent;--input-hover-border-color:black;--link-outline:none}@media screen and (forced-colors:active){:root{--input-focus-border-color:CanvasText;--input-unfocused-border-color:ActiveText;--input-disabled-border-color:GrayText;--input-hover-border-color:Highlight;--link-outline:1.5px solid LinkText}}:root{--react-pdf-text-layer:1;--highlight-bg-color:rgba(180, 0, 170, 1);--highlight-selected-bg-color:rgba(0, 100, 0, 1)}@media screen and (forced-colors:active){:root{--highlight-bg-color:Highlight;--highlight-selected-bg-color:ButtonText}}._wrapper_4ijce_1{background-color:#3f51b5;border:1px solid #3f51b5;clear:both}._menubar_4ijce_7{position:sticky;top:-1px;z-index:10;padding-block-start:.2em;padding-block-end:.2em;background-color:#3f51b5;color:#f0f0f0;user-select:none}._menubar_4ijce_7 ._central_4ijce_17{display:flex;gap:.2em;justify-content:center;align-items:baseline;font-variant-numeric:lining-nums tabular-nums}._menubar_4ijce_7 ._left_4ijce_24{position:absolute;left:0;top:.25em;padding-left:.2em}._menubar_4ijce_7 ._right_4ijce_30{position:absolute;right:0;top:.25em;padding-right:.4em}._menubar_4ijce_7 ._page-viewer-container_4ijce_36{display:inline-flex;align-items:stretch;gap:.2em}._menubar_4ijce_7 ._page-viewer_4ijce_36{border:1px solid #f0f0f0;display:inline-block;padding-inline:.2em;padding-block-end:.1em;min-width:1ch;text-align:center;user-select:all}._menubar_4ijce_7 ._page-viewer_4ijce_36:focus{border-color:#ffba67;color:#ffba67;caret-color:#fff}@media (hover:hover){._menubar_4ijce_7 a:hover{color:#ffba67}}._menubar_4ijce_7 button{border:0 solid transparent;background-color:transparent;color:gray;font-size:1rem}._menubar_4ijce_7 button:not([disabled]){color:#f0f0f0;cursor:pointer}@media (hover:hover){._menubar_4ijce_7 button:not([disabled]):hover{color:#ffba67}}._loader_4ijce_76{text-align:center;background-color:#fff;color:gray}._loader_4ijce_76>span{display:inline-block;position:sticky;top:1.5rem;padding-top:2rem}astro-island{display:contents}
@inproceedings{liewFloatingPointSymbolicExecution2017,
author = {Liew, Daniel and Schemmel, Daniel and Cadar, Cristian and Donaldson, Alastair F. and Zähl, Rafael and Wehrle, Klaus},
title = {{{Floating-Point}} {{Symbolic}} {{Execution}}: {{A}} {{Case}} {{Study}} in {{N-Version}} {{Programming}}},
booktitle = {{{IEEE/ACM}} {{International}} {{Conference}} on {{Automated}} {{Software}} {{Engineering}} {{(ASE}} 2017)},
location = {Urbana-Champaign, IL, USA},
pages = {601--612},
year = {2017},
doi = {10.1109/ASE.2017.8115670},
}
Symbolic execution is a well-known program analysis technique for testing software, which makes intensive use of constraint solvers. Recent support for floating-point constraint solving has made it feasible to support floating-point reasoning in symbolic execution tools. In this paper, we present the experience of two research teams that independently added floating-point support to KLEE, a popular symbolic execution engine. Since the two teams independently developed their extensions, this created the rare opportunity to conduct a rigorous comparison between the two implementations, essentially a modern case study on N-version programming. As part of our comparison, we report on the different design and implementation decisions taken by each team, and show their impact on a rigorously assembled and tested set of benchmarks, itself a contribution of the paper.
Our paper was awarded "Best Experience Paper" at ASE 2017.