commit 52989d4dfff7125b63825a56b4239ee099f0e7e4 Author: xiaozhang Date: Wed Feb 28 15:42:52 2024 +0800 投资黔东南项目 diff --git a/css/01.css b/css/01.css new file mode 100644 index 0000000..583e37d --- /dev/null +++ b/css/01.css @@ -0,0 +1,80 @@ +*{ + margin: 0; + padding: 0; + text-decoration: none !important; + width: 100%; + height: 100%; +} +div,a{ + display: block; +} +p,h5{ + height: auto; + padding: auto; + margin: auto; +} +/* 最大盒子 */ +.container-01{ + max-width: 800px; + width: 100%; + height:100%; + margin: 0 auto; +} +/* 整体盒子大小 */ +.Background{ + max-width:600px; + min-height:680px; + margin:0 auto; + width: 100%; + height:100%; +} +.Background-01{ + background-repeat:round; + background-size: 100% 100%; + background-image: url('../image/backgroudImg.7baac09c.jpg'); +} +.btn_box01{ + height: 60%; +} +.btn_box02{ + height: 40%; +} +.btn_box02_small_01{ + width: 50%; + margin: 0 auto; +} +.btn_01{ + width: 100%; + height: 12%; + text-align: center; + margin-top: 4%; +} +/* 二级页面 */ +.column_01{ + height: 6%; + line-height: 41px; + background-color: #0d6efd; + color:#fff; +} +.return_Arrow{ + height: 15px; + width: 15px; + line-height: 40px; + float: left; +} +.input_01{ + height: 6%; +} +table{ + height: auto; +} + +.erweima{ + width: 120px; + height: 120px; + margin: 40% auto; +} +.erweima_02{ + width: 80px; + height: 80px; +} diff --git a/css/bootstrap.min.css b/css/bootstrap.min.css new file mode 100644 index 0000000..97551fe --- /dev/null +++ b/css/bootstrap.min.css @@ -0,0 +1,7 @@ +@charset "UTF-8";/*! + * Bootstrap v5.1.2 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-color-rgb:33,37,41;--bs-body-bg-rgb:255,255,255;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-bg:#fff}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:#6c757d}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{width:100%;padding-right:var(--bs-gutter-x,.75rem);padding-left:var(--bs-gutter-x,.75rem);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.table{--bs-table-bg:transparent;--bs-table-accent-bg:transparent;--bs-table-striped-color:#212529;--bs-table-striped-bg:rgba(0, 0, 0, 0.05);--bs-table-active-color:#212529;--bs-table-active-bg:rgba(0, 0, 0, 0.1);--bs-table-hover-color:#212529;--bs-table-hover-bg:rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;color:#212529;vertical-align:top;border-color:#dee2e6}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>:not(:first-child){border-top:2px solid currentColor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-accent-bg:var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg:var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover>*{--bs-table-accent-bg:var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg:#cfe2ff;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000;color:#000;border-color:#bacbe6}.table-secondary{--bs-table-bg:#e2e3e5;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000;color:#000;border-color:#cbccce}.table-success{--bs-table-bg:#d1e7dd;--bs-table-striped-bg:#c7dbd2;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000;color:#000;border-color:#bcd0c7}.table-info{--bs-table-bg:#cff4fc;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000;color:#000;border-color:#badce3}.table-warning{--bs-table-bg:#fff3cd;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000;color:#000;border-color:#e6dbb9}.table-danger{--bs-table-bg:#f8d7da;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000;color:#000;border-color:#dfc2c4}.table-light{--bs-table-bg:#f8f9fa;--bs-table-striped-bg:#ecedee;--bs-table-striped-color:#000;--bs-table-active-bg:#dfe0e1;--bs-table-active-color:#000;--bs-table-hover-bg:#e5e6e7;--bs-table-hover-color:#000;color:#000;border-color:#dfe0e1}.table-dark{--bs-table-bg:#212529;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:#fff;border-color:#373b3e}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width:575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#212529;background-color:#fff;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + .5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1.5em;border-radius:.25rem}.form-control-color::-webkit-color-swatch{height:1.5em;border-radius:.25rem}.form-select{display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;-moz-padding-start:calc(0.75rem - 3px);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #212529}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem;border-radius:.2rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:.3rem}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#0d6efd;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid transparent;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media (prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control{padding:1rem .75rem}.form-floating>.form-control::-moz-placeholder{color:transparent}.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(25,135,84,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#198754;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:#198754}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:#198754}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:#198754}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group .form-control.is-valid,.input-group .form-select.is-valid,.was-validated .input-group .form-control:valid,.was-validated .input-group .form-select:valid{z-index:1}.input-group .form-control.is-valid:focus,.input-group .form-select.is-valid:focus,.was-validated .input-group .form-control:valid:focus,.was-validated .input-group .form-select:valid:focus{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:#dc3545}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:#dc3545}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:#dc3545}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group .form-control.is-invalid,.input-group .form-select.is-invalid,.was-validated .input-group .form-control:invalid,.was-validated .input-group .form-select:invalid{z-index:2}.input-group .form-control.is-invalid:focus,.input-group .form-select.is-invalid:focus,.was-validated .input-group .form-control:invalid:focus,.was-validated .input-group .form-select:invalid:focus{z-index:3}.btn{display:inline-block;align-self:center;font-weight:400;line-height:1.5;color:#212529;text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-primary{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-primary:hover{color:#fff;background-color:#0b5ed7;border-color:#0a58ca}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#0b5ed7;border-color:#0a58ca;box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-check:active+.btn-primary,.btn-check:checked+.btn-primary,.btn-primary.active,.btn-primary:active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0a58ca;border-color:#0a53be}.btn-check:active+.btn-primary:focus,.btn-check:checked+.btn-primary:focus,.btn-primary.active:focus,.btn-primary:active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5c636a;border-color:#565e64}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#fff;background-color:#5c636a;border-color:#565e64;box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-check:active+.btn-secondary,.btn-check:checked+.btn-secondary,.btn-secondary.active,.btn-secondary:active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#565e64;border-color:#51585e}.btn-check:active+.btn-secondary:focus,.btn-check:checked+.btn-secondary:focus,.btn-secondary.active:focus,.btn-secondary:active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-success{color:#fff;background-color:#198754;border-color:#198754}.btn-success:hover{color:#fff;background-color:#157347;border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#157347;border-color:#146c43;box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-check:active+.btn-success,.btn-check:checked+.btn-success,.btn-success.active,.btn-success:active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f}.btn-check:active+.btn-success:focus,.btn-check:checked+.btn-success:focus,.btn-success.active:focus,.btn-success:active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#198754;border-color:#198754}.btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{color:#000;background-color:#31d2f2;border-color:#25cff2;box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-check:active+.btn-info,.btn-check:checked+.btn-info,.btn-info.active,.btn-info:active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2}.btn-check:active+.btn-info:focus,.btn-check:checked+.btn-info:focus,.btn-info.active:focus,.btn-info:active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-info.disabled,.btn-info:disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;border-color:#ffc720;box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-check:active+.btn-warning,.btn-check:checked+.btn-warning,.btn-warning.active,.btn-warning:active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720}.btn-check:active+.btn-warning:focus,.btn-check:checked+.btn-warning:focus,.btn-warning.active:focus,.btn-warning:active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#bb2d3b;border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#bb2d3b;border-color:#b02a37;box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-check:active+.btn-danger,.btn-check:checked+.btn-danger,.btn-danger.active,.btn-danger:active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:active+.btn-danger:focus,.btn-check:checked+.btn-danger:focus,.btn-danger.active:focus,.btn-danger:active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#f9fafb;border-color:#f9fafb;box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-check:active+.btn-light,.btn-check:checked+.btn-light,.btn-light.active,.btn-light:active,.show>.btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:active+.btn-light:focus,.btn-check:checked+.btn-light:focus,.btn-light.active:focus,.btn-light:active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-light.disabled,.btn-light:disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#212529;border-color:#212529}.btn-dark:hover{color:#fff;background-color:#1c1f23;border-color:#1a1e21}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#1c1f23;border-color:#1a1e21;box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-check:active+.btn-dark,.btn-check:checked+.btn-dark,.btn-dark.active,.btn-dark:active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f}.btn-check:active+.btn-dark:focus,.btn-check:checked+.btn-dark:focus,.btn-dark.active:focus,.btn-dark:active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#212529;border-color:#212529}.btn-outline-primary{color:#0d6efd;border-color:#0d6efd}.btn-outline-primary:hover{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-check:active+.btn-outline-primary,.btn-check:checked+.btn-outline-primary,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show,.btn-outline-primary:active{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:active+.btn-outline-primary:focus,.btn-check:checked+.btn-outline-primary:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus,.btn-outline-primary:active:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#0d6efd;background-color:transparent}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-check:active+.btn-outline-secondary,.btn-check:checked+.btn-outline-secondary,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show,.btn-outline-secondary:active{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:active+.btn-outline-secondary:focus,.btn-check:checked+.btn-outline-secondary:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus,.btn-outline-secondary:active:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-success{color:#198754;border-color:#198754}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-check:active+.btn-outline-success,.btn-check:checked+.btn-outline-success,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show,.btn-outline-success:active{color:#fff;background-color:#198754;border-color:#198754}.btn-check:active+.btn-outline-success:focus,.btn-check:checked+.btn-outline-success:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus,.btn-outline-success:active:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#198754;background-color:transparent}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-check:active+.btn-outline-info,.btn-check:checked+.btn-outline-info,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show,.btn-outline-info:active{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:active+.btn-outline-info:focus,.btn-check:checked+.btn-outline-info:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus,.btn-outline-info:active:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#0dcaf0;background-color:transparent}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-check:active+.btn-outline-warning,.btn-check:checked+.btn-outline-warning,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show,.btn-outline-warning:active{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:active+.btn-outline-warning:focus,.btn-check:checked+.btn-outline-warning:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus,.btn-outline-warning:active:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-check:active+.btn-outline-danger,.btn-check:checked+.btn-outline-danger,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show,.btn-outline-danger:active{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:active+.btn-outline-danger:focus,.btn-check:checked+.btn-outline-danger:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus,.btn-outline-danger:active:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-check:active+.btn-outline-light,.btn-check:checked+.btn-outline-light,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show,.btn-outline-light:active{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:active+.btn-outline-light:focus,.btn-check:checked+.btn-outline-light:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus,.btn-outline-light:active:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-dark{color:#212529;border-color:#212529}.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-check:active+.btn-outline-dark,.btn-check:checked+.btn-outline-dark,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show,.btn-outline-dark:active{color:#fff;background-color:#212529;border-color:#212529}.btn-check:active+.btn-outline-dark:focus,.btn-check:checked+.btn-outline-dark:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus,.btn-outline-dark:active:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#212529;background-color:transparent}.btn-link{font-weight:400;color:#0d6efd;text-decoration:underline}.btn-link:hover{color:#0a58ca}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropend,.dropstart,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;z-index:1000;display:none;min-width:10rem;padding:.5rem 0;margin:0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:.125rem}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#212529;text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#1e2125;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0d6efd}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#212529}.dropdown-menu-dark{color:#dee2e6;background-color:#343a40;border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item{color:#dee2e6}.dropdown-menu-dark .dropdown-item:focus,.dropdown-menu-dark .dropdown-item:hover{color:#fff;background-color:rgba(255,255,255,.15)}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#0d6efd}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#adb5bd}.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item-text{color:#dee2e6}.dropdown-menu-dark .dropdown-header{color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;color:#0d6efd;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:#0a58ca}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;background:0 0;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6;isolation:isolate}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{background:0 0;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#0d6efd}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:.5rem;padding-bottom:.5rem}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;text-decoration:none;white-space:nowrap}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem;transition:box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas-header{display:none}.navbar-expand-sm .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-sm .offcanvas-bottom,.navbar-expand-sm .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas-header{display:none}.navbar-expand-md .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-md .offcanvas-bottom,.navbar-expand-md .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas-header{display:none}.navbar-expand-lg .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-lg .offcanvas-bottom,.navbar-expand-lg .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas-header{display:none}.navbar-expand-xl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-xl .offcanvas-bottom,.navbar-expand-xl .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-xxl .offcanvas-bottom,.navbar-expand-xxl .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas-header{display:none}.navbar-expand .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand .offcanvas-bottom,.navbar-expand .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.55)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.55);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.55)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.55)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.55);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:1rem 1rem}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.5rem 1rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.5rem;margin-bottom:-.5rem;margin-left:-.5rem;border-bottom:0}.card-header-pills{margin-right:-.5rem;margin-left:-.5rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-group>.card{margin-bottom:.75rem}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:1rem 1.25rem;font-size:1rem;color:#212529;text-align:left;background-color:#fff;border:0;border-radius:0;overflow-anchor:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,border-radius .15s ease}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:#0c63e4;background-color:#e7f1ff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.125)}.accordion-button:not(.collapsed)::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");transform:rotate(-180deg)}.accordion-button::after{flex-shrink:0;width:1.25rem;height:1.25rem;margin-left:auto;content:"";background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-size:1.25rem;transition:transform .2s ease-in-out}@media (prefers-reduced-motion:reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.accordion-header{margin-bottom:0}.accordion-item{background-color:#fff;border:1px solid rgba(0,0,0,.125)}.accordion-item:first-of-type{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.accordion-item:first-of-type .accordion-button{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-body{padding:1rem 1.25rem}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button{border-radius:0}.breadcrumb{display:flex;flex-wrap:wrap;padding:0 0;margin-bottom:1rem;list-style:none}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#6c757d;content:var(--bs-breadcrumb-divider, "/")}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;color:#0d6efd;text-decoration:none;background-color:#fff;border:1px solid #dee2e6;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:#0a58ca;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;color:#0a58ca;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.page-item:not(:first-child) .page-link{margin-left:-1px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#dee2e6}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{position:relative;padding:1rem 1rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{color:#084298;background-color:#cfe2ff;border-color:#b6d4fe}.alert-primary .alert-link{color:#06357a}.alert-secondary{color:#41464b;background-color:#e2e3e5;border-color:#d3d6d8}.alert-secondary .alert-link{color:#34383c}.alert-success{color:#0f5132;background-color:#d1e7dd;border-color:#badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{color:#055160;background-color:#cff4fc;border-color:#b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5}.alert-warning .alert-link{color:#523e02}.alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{color:#636464;background-color:#fefefe;border-color:#fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{color:#141619;background-color:#d3d3d4;border-color:#bcbebf}.alert-dark .alert-link{color:#101214}@-webkit-keyframes progress-bar-stripes{0%{background-position-x:1rem}}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#0d6efd;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:1s linear infinite progress-bar-stripes;animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>li::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.5rem 1rem;color:#212529;text-decoration:none;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#084298;background-color:#cfe2ff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#084298;background-color:#bacbe6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#084298;border-color:#084298}.list-group-item-secondary{color:#41464b;background-color:#e2e3e5}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#41464b;background-color:#cbccce}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#41464b;border-color:#41464b}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:#000;background:transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;border:0;border-radius:.25rem;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25);opacity:1}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.toast{width:350px;max-width:100%;font-size:.875rem;pointer-events:auto;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .5rem 1rem rgba(0,0,0,.15);border-radius:.25rem}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:.75rem}.toast-header{display:flex;align-items:center;padding:.5rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-header .btn-close{margin-right:-.375rem;margin-left:.75rem}.toast-body{padding:.75rem;word-wrap:break-word}.modal{position:fixed;top:0;left:0;z-index:1055;display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1050;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .btn-close{padding:.5rem .5rem;margin:-.5rem -.5rem -.5rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-down .modal-footer{border-radius:0}}.tooltip{position:absolute;z-index:1080;display:block;margin:0;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .tooltip-arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[data-popper-placement^=right],.bs-tooltip-end{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[data-popper-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[data-popper-placement^=left],.bs-tooltip-start{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1070;display:block;max-width:276px;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .popover-arrow{position:absolute;display:block;width:1rem;height:.5rem}.popover .popover-arrow::after,.popover .popover-arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-top>.popover-arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-end>.popover-arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f0f0f0}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-start>.popover-arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem 1rem;margin-bottom:0;font-size:1rem;background-color:#f0f0f0;border-bottom:1px solid rgba(0,0,0,.2);border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:1rem 1rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%;list-style:none}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}@-webkit-keyframes spinner-border{to{transform:rotate(360deg)}}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.offcanvas{position:fixed;bottom:0;z-index:1045;display:flex;flex-direction:column;max-width:100%;visibility:hidden;background-color:#fff;background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1rem}.offcanvas-header .btn-close{padding:.5rem .5rem;margin-top:-.5rem;margin-right:-.5rem;margin-bottom:-.5rem}.offcanvas-title{margin-bottom:0;line-height:1.5}.offcanvas-body{flex-grow:1;padding:1rem 1rem;overflow-y:auto}.offcanvas-start{top:0;left:0;width:400px;border-right:1px solid rgba(0,0,0,.2);transform:translateX(-100%)}.offcanvas-end{top:0;right:0;width:400px;border-left:1px solid rgba(0,0,0,.2);transform:translateX(100%)}.offcanvas-top{top:0;right:0;left:0;height:30vh;max-height:100%;border-bottom:1px solid rgba(0,0,0,.2);transform:translateY(-100%)}.offcanvas-bottom{right:0;left:0;height:30vh;max-height:100%;border-top:1px solid rgba(0,0,0,.2);transform:translateY(100%)}.offcanvas.show{transform:none}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentColor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{-webkit-animation:placeholder-glow 2s ease-in-out infinite;animation:placeholder-glow 2s ease-in-out infinite}@-webkit-keyframes placeholder-glow{50%{opacity:.2}}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{-webkit-mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%;-webkit-animation:placeholder-wave 2s linear infinite;animation:placeholder-wave 2s linear infinite}@-webkit-keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}@keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.link-primary{color:#0d6efd}.link-primary:focus,.link-primary:hover{color:#0a58ca}.link-secondary{color:#6c757d}.link-secondary:focus,.link-secondary:hover{color:#565e64}.link-success{color:#198754}.link-success:focus,.link-success:hover{color:#146c43}.link-info{color:#0dcaf0}.link-info:focus,.link-info:hover{color:#3dd5f3}.link-warning{color:#ffc107}.link-warning:focus,.link-warning:hover{color:#ffcd39}.link-danger{color:#dc3545}.link-danger:focus,.link-danger:hover{color:#b02a37}.link-light{color:#f8f9fa}.link-light:focus,.link-light:hover{color:#f9fafb}.link-dark{color:#212529}.link-dark:focus,.link-dark:hover{color:#1a1e21}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:75%}.ratio-16x9{--bs-aspect-ratio:56.25%}.ratio-21x9{--bs-aspect-ratio:42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentColor;opacity:.25}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:1px solid #dee2e6!important}.border-0{border:0!important}.border-top{border-top:1px solid #dee2e6!important}.border-top-0{border-top:0!important}.border-end{border-right:1px solid #dee2e6!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:1px solid #dee2e6!important}.border-start-0{border-left:0!important}.border-primary{border-color:#0d6efd!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#198754!important}.border-info{border-color:#0dcaf0!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#212529!important}.border-white{border-color:#fff!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-light{font-weight:300!important}.fw-lighter{font-weight:lighter!important}.fw-normal{font-weight:400!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-color-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:#6c757d!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:rgba(255,255,255,.5)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:0.25}.text-opacity-50{--bs-text-opacity:0.5}.text-opacity-75{--bs-text-opacity:0.75}.text-opacity-100{--bs-text-opacity:1}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity:1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(var(--bs-body-bg-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-opacity-10{--bs-bg-opacity:0.1}.bg-opacity-25{--bs-bg-opacity:0.25}.bg-opacity-50{--bs-bg-opacity:0.5}.bg-opacity-75{--bs-bg-opacity:0.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:.25rem!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:.2rem!important}.rounded-2{border-radius:.25rem!important}.rounded-3{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-end{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-start{border-bottom-left-radius:.25rem!important;border-top-left-radius:.25rem!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/css/index.css b/css/index.css new file mode 100644 index 0000000..f831f4a --- /dev/null +++ b/css/index.css @@ -0,0 +1,69 @@ + +*{ + margin: 0; + padding: 0; + text-decoration: none !important; + height: 100%; + width: 100%; +} +div,a{ + display: block; +} +/* 最大盒子 */ +.container-01{ + max-width: 800px; + width: 100%; + height:100%; + margin: 0 auto; +} +/* 整体盒子大小 */ +.Background{ + max-width:600px; + min-height:680px; + margin:0 auto; + width: 100%; + height:100%; +} +.Background-01{ + background-repeat:round; + background-image: url('../image/backgroudImg.7baac09c.jpg'); +} +.btn_box01{ + height: 40%; +} +.btn_box02{ + height: 40%; +} +.btn_box02_small_01{ + width: 50%; + margin: 0 auto; +} +.btn_01{ + width: 100%; + height: 12%; + text-align: center; + margin-top: 4%; +} + +/* 二级页面 */ +.column_01{ + height: 5%; + line-height: 38.55px; + background-color: #0d6efd; + color:#fff; +} +.return_Arrow{ + height: 15px; + width: 15px; + line-height: 38.55px; + float: left; + margin-left: 5px; +} +.input_01{ + height: 40px; +} +.container-02{ + height: 580px; +} + +/*三级页面*/ diff --git a/image/02.jpg b/image/02.jpg new file mode 100644 index 0000000..7fb94b5 Binary files /dev/null and b/image/02.jpg differ diff --git a/image/1679366979689.jpg b/image/1679366979689.jpg new file mode 100644 index 0000000..fb11169 Binary files /dev/null and b/image/1679366979689.jpg differ diff --git a/image/backgroudImg.7baac09c.jpg b/image/backgroudImg.7baac09c.jpg new file mode 100644 index 0000000..205418f Binary files /dev/null and b/image/backgroudImg.7baac09c.jpg differ diff --git a/image/download.png b/image/download.png new file mode 100644 index 0000000..c4bd954 Binary files /dev/null and b/image/download.png differ diff --git a/image/qdn.jpg b/image/qdn.jpg new file mode 100644 index 0000000..244bc70 Binary files /dev/null and b/image/qdn.jpg differ diff --git a/image/soushuo.png b/image/soushuo.png new file mode 100644 index 0000000..8d0cdcc Binary files /dev/null and b/image/soushuo.png differ diff --git a/image/xiangxia.png b/image/xiangxia.png new file mode 100644 index 0000000..2314d9c Binary files /dev/null and b/image/xiangxia.png differ diff --git a/image/xiangyoujiantou.png b/image/xiangyoujiantou.png new file mode 100644 index 0000000..bf69000 Binary files /dev/null and b/image/xiangyoujiantou.png differ diff --git a/image/zuojiantou.png b/image/zuojiantou.png new file mode 100644 index 0000000..1879b6b Binary files /dev/null and b/image/zuojiantou.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..9607fbc --- /dev/null +++ b/index.html @@ -0,0 +1,31 @@ + + + + + + 投资黔东南 + + + + +
+ +
+ + + \ No newline at end of file diff --git a/js/bootstrap.bundle.min.js b/js/bootstrap.bundle.min.js new file mode 100644 index 0000000..e4f2756 --- /dev/null +++ b/js/bootstrap.bundle.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v5.1.2 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t="transitionend",e=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return e},i=t=>{const i=e(t);return i&&document.querySelector(i)?i:null},n=t=>{const i=e(t);return i?document.querySelector(i):null},s=e=>{e.dispatchEvent(new Event(t))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(t):null,a=(t,e,i)=>{Object.keys(i).forEach((n=>{const s=i[n],r=e[n],a=r&&o(r)?"element":null==(l=r)?`${l}`:{}.toString.call(l).match(/\s([a-z]+)/i)[1].toLowerCase();var l;if(!new RegExp(s).test(a))throw new TypeError(`${t.toUpperCase()}: Option "${n}" provided type "${a}" but expected type "${s}".`)}))},l=t=>!(!o(t)||0===t.getClientRects().length)&&"visible"===getComputedStyle(t).getPropertyValue("visibility"),c=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),h=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?h(t.parentNode):null},d=()=>{},u=t=>{t.offsetHeight},f=()=>{const{jQuery:t}=window;return t&&!document.body.hasAttribute("data-bs-no-jquery")?t:null},p=[],m=()=>"rtl"===document.documentElement.dir,g=t=>{var e;e=()=>{const e=f();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(p.length||document.addEventListener("DOMContentLoaded",(()=>{p.forEach((t=>t()))})),p.push(e)):e()},_=t=>{"function"==typeof t&&t()},b=(e,i,n=!0)=>{if(!n)return void _(e);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(i)+5;let r=!1;const a=({target:n})=>{n===i&&(r=!0,i.removeEventListener(t,a),_(e))};i.addEventListener(t,a),setTimeout((()=>{r||s(i)}),o)},v=(t,e,i,n)=>{let s=t.indexOf(e);if(-1===s)return t[!i&&n?t.length-1:0];const o=t.length;return s+=i?1:-1,n&&(s=(s+o)%o),t[Math.max(0,Math.min(s,o-1))]},y=/[^.]*(?=\..*)\.|.*/,w=/\..*/,E=/::\d+$/,A={};let T=1;const O={mouseenter:"mouseover",mouseleave:"mouseout"},C=/^(mouseenter|mouseleave)/i,k=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function L(t,e){return e&&`${e}::${T++}`||t.uidEvent||T++}function x(t){const e=L(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function D(t,e,i=null){const n=Object.keys(t);for(let s=0,o=n.length;sfunction(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};n?n=t(n):i=t(i)}const[o,r,a]=S(e,i,n),l=x(t),c=l[a]||(l[a]={}),h=D(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=L(r,e.replace(y,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(let a=o.length;a--;)if(o[a]===r)return s.delegateTarget=r,n.oneOff&&j.off(t,s.type,e,i),i.apply(r,[s]);return null}}(t,i,n):function(t,e){return function i(n){return n.delegateTarget=t,i.oneOff&&j.off(t,n.type,e),e.apply(t,[n])}}(t,i);u.delegationSelector=o?i:null,u.originalHandler=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function I(t,e,i,n,s){const o=D(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function P(t){return t=t.replace(w,""),O[t]||t}const j={on(t,e,i,n){N(t,e,i,n,!1)},one(t,e,i,n){N(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=S(e,i,n),a=r!==e,l=x(t),c=e.startsWith(".");if(void 0!==o){if(!l||!l[r])return;return void I(t,l,r,o,s?i:null)}c&&Object.keys(l).forEach((i=>{!function(t,e,i,n){const s=e[i]||{};Object.keys(s).forEach((o=>{if(o.includes(n)){const n=s[o];I(t,e,i,n.originalHandler,n.delegationSelector)}}))}(t,l,i,e.slice(1))}));const h=l[r]||{};Object.keys(h).forEach((i=>{const n=i.replace(E,"");if(!a||e.includes(n)){const e=h[i];I(t,l,r,e.originalHandler,e.delegationSelector)}}))},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=f(),s=P(e),o=e!==s,r=k.has(s);let a,l=!0,c=!0,h=!1,d=null;return o&&n&&(a=n.Event(e,i),n(t).trigger(a),l=!a.isPropagationStopped(),c=!a.isImmediatePropagationStopped(),h=a.isDefaultPrevented()),r?(d=document.createEvent("HTMLEvents"),d.initEvent(s,l,!0)):d=new CustomEvent(e,{bubbles:l,cancelable:!0}),void 0!==i&&Object.keys(i).forEach((t=>{Object.defineProperty(d,t,{get:()=>i[t]})})),h&&d.preventDefault(),c&&t.dispatchEvent(d),d.defaultPrevented&&void 0!==a&&a.preventDefault(),d}},M=new Map,H={set(t,e,i){M.has(t)||M.set(t,new Map);const n=M.get(t);n.has(e)||0===n.size?n.set(e,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(n.keys())[0]}.`)},get:(t,e)=>M.has(t)&&M.get(t).get(e)||null,remove(t,e){if(!M.has(t))return;const i=M.get(t);i.delete(e),0===i.size&&M.delete(t)}};class B{constructor(t){(t=r(t))&&(this._element=t,H.set(this._element,this.constructor.DATA_KEY,this))}dispose(){H.remove(this._element,this.constructor.DATA_KEY),j.off(this._element,this.constructor.EVENT_KEY),Object.getOwnPropertyNames(this).forEach((t=>{this[t]=null}))}_queueCallback(t,e,i=!0){b(t,e,i)}static getInstance(t){return H.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.1.2"}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}}const R=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,s=t.NAME;j.on(document,i,`[data-bs-dismiss="${s}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),c(this))return;const o=n(this)||this.closest(`.${s}`);t.getOrCreateInstance(o)[e]()}))};class W extends B{static get NAME(){return"alert"}close(){if(j.trigger(this._element,"close.bs.alert").defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),j.trigger(this._element,"closed.bs.alert"),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=W.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}R(W,"close"),g(W);const $='[data-bs-toggle="button"]';class z extends B{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=z.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}function q(t){return"true"===t||"false"!==t&&(t===Number(t).toString()?Number(t):""===t||"null"===t?null:t)}function F(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}j.on(document,"click.bs.button.data-api",$,(t=>{t.preventDefault();const e=t.target.closest($);z.getOrCreateInstance(e).toggle()})),g(z);const U={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${F(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${F(e)}`)},getDataAttributes(t){if(!t)return{};const e={};return Object.keys(t.dataset).filter((t=>t.startsWith("bs"))).forEach((i=>{let n=i.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1,n.length),e[n]=q(t.dataset[i])})),e},getDataAttribute:(t,e)=>q(t.getAttribute(`data-bs-${F(e)}`)),offset(t){const e=t.getBoundingClientRect();return{top:e.top+window.pageYOffset,left:e.left+window.pageXOffset}},position:t=>({top:t.offsetTop,left:t.offsetLeft})},V={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode;for(;n&&n.nodeType===Node.ELEMENT_NODE&&3!==n.nodeType;)n.matches(e)&&i.push(n),n=n.parentNode;return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(", ");return this.find(e,t).filter((t=>!c(t)&&l(t)))}},K="carousel",X={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},Y={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},Q="next",G="prev",Z="left",J="right",tt={ArrowLeft:J,ArrowRight:Z},et="slid.bs.carousel",it="active",nt=".active.carousel-item";class st extends B{constructor(t,e){super(t),this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._indicatorsElement=V.findOne(".carousel-indicators",this._element),this._touchSupported="ontouchstart"in document.documentElement||navigator.maxTouchPoints>0,this._pointerEvent=Boolean(window.PointerEvent),this._addEventListeners()}static get Default(){return X}static get NAME(){return K}next(){this._slide(Q)}nextWhenVisible(){!document.hidden&&l(this._element)&&this.next()}prev(){this._slide(G)}pause(t){t||(this._isPaused=!0),V.findOne(".carousel-item-next, .carousel-item-prev",this._element)&&(s(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null}cycle(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config&&this._config.interval&&!this._isPaused&&(this._updateInterval(),this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))}to(t){this._activeElement=V.findOne(nt,this._element);const e=this._getItemIndex(this._activeElement);if(t>this._items.length-1||t<0)return;if(this._isSliding)return void j.one(this._element,et,(()=>this.to(t)));if(e===t)return this.pause(),void this.cycle();const i=t>e?Q:G;this._slide(i,this._items[t])}_getConfig(t){return t={...X,...U.getDataAttributes(this._element),..."object"==typeof t?t:{}},a(K,t,Y),t}_handleSwipe(){const t=Math.abs(this.touchDeltaX);if(t<=40)return;const e=t/this.touchDeltaX;this.touchDeltaX=0,e&&this._slide(e>0?J:Z)}_addEventListeners(){this._config.keyboard&&j.on(this._element,"keydown.bs.carousel",(t=>this._keydown(t))),"hover"===this._config.pause&&(j.on(this._element,"mouseenter.bs.carousel",(t=>this.pause(t))),j.on(this._element,"mouseleave.bs.carousel",(t=>this.cycle(t)))),this._config.touch&&this._touchSupported&&this._addTouchEventListeners()}_addTouchEventListeners(){const t=t=>this._pointerEvent&&("pen"===t.pointerType||"touch"===t.pointerType),e=e=>{t(e)?this.touchStartX=e.clientX:this._pointerEvent||(this.touchStartX=e.touches[0].clientX)},i=t=>{this.touchDeltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this.touchStartX},n=e=>{t(e)&&(this.touchDeltaX=e.clientX-this.touchStartX),this._handleSwipe(),"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((t=>this.cycle(t)),500+this._config.interval))};V.find(".carousel-item img",this._element).forEach((t=>{j.on(t,"dragstart.bs.carousel",(t=>t.preventDefault()))})),this._pointerEvent?(j.on(this._element,"pointerdown.bs.carousel",(t=>e(t))),j.on(this._element,"pointerup.bs.carousel",(t=>n(t))),this._element.classList.add("pointer-event")):(j.on(this._element,"touchstart.bs.carousel",(t=>e(t))),j.on(this._element,"touchmove.bs.carousel",(t=>i(t))),j.on(this._element,"touchend.bs.carousel",(t=>n(t))))}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=tt[t.key];e&&(t.preventDefault(),this._slide(e))}_getItemIndex(t){return this._items=t&&t.parentNode?V.find(".carousel-item",t.parentNode):[],this._items.indexOf(t)}_getItemByOrder(t,e){const i=t===Q;return v(this._items,e,i,this._config.wrap)}_triggerSlideEvent(t,e){const i=this._getItemIndex(t),n=this._getItemIndex(V.findOne(nt,this._element));return j.trigger(this._element,"slide.bs.carousel",{relatedTarget:t,direction:e,from:n,to:i})}_setActiveIndicatorElement(t){if(this._indicatorsElement){const e=V.findOne(".active",this._indicatorsElement);e.classList.remove(it),e.removeAttribute("aria-current");const i=V.find("[data-bs-target]",this._indicatorsElement);for(let e=0;e{j.trigger(this._element,et,{relatedTarget:o,direction:d,from:s,to:r})};if(this._element.classList.contains("slide")){o.classList.add(h),u(o),n.classList.add(c),o.classList.add(c);const t=()=>{o.classList.remove(c,h),o.classList.add(it),n.classList.remove(it,h,c),this._isSliding=!1,setTimeout(f,0)};this._queueCallback(t,n,!0)}else n.classList.remove(it),o.classList.add(it),this._isSliding=!1,f();a&&this.cycle()}_directionToOrder(t){return[J,Z].includes(t)?m()?t===Z?G:Q:t===Z?Q:G:t}_orderToDirection(t){return[Q,G].includes(t)?m()?t===G?Z:J:t===G?J:Z:t}static carouselInterface(t,e){const i=st.getOrCreateInstance(t,e);let{_config:n}=i;"object"==typeof e&&(n={...n,...e});const s="string"==typeof e?e:n.slide;if("number"==typeof e)i.to(e);else if("string"==typeof s){if(void 0===i[s])throw new TypeError(`No method named "${s}"`);i[s]()}else n.interval&&n.ride&&(i.pause(),i.cycle())}static jQueryInterface(t){return this.each((function(){st.carouselInterface(this,t)}))}static dataApiClickHandler(t){const e=n(this);if(!e||!e.classList.contains("carousel"))return;const i={...U.getDataAttributes(e),...U.getDataAttributes(this)},s=this.getAttribute("data-bs-slide-to");s&&(i.interval=!1),st.carouselInterface(e,i),s&&st.getInstance(e).to(s),t.preventDefault()}}j.on(document,"click.bs.carousel.data-api","[data-bs-slide], [data-bs-slide-to]",st.dataApiClickHandler),j.on(window,"load.bs.carousel.data-api",(()=>{const t=V.find('[data-bs-ride="carousel"]');for(let e=0,i=t.length;et===this._element));null!==s&&o.length&&(this._selector=s,this._triggerArray.push(e))}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return rt}static get NAME(){return ot}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t,e=[];if(this._config.parent){const t=V.find(ut,this._config.parent);e=V.find(".collapse.show, .collapse.collapsing",this._config.parent).filter((e=>!t.includes(e)))}const i=V.findOne(this._selector);if(e.length){const n=e.find((t=>i!==t));if(t=n?pt.getInstance(n):null,t&&t._isTransitioning)return}if(j.trigger(this._element,"show.bs.collapse").defaultPrevented)return;e.forEach((e=>{i!==e&&pt.getOrCreateInstance(e,{toggle:!1}).hide(),t||H.set(e,"bs.collapse",null)}));const n=this._getDimension();this._element.classList.remove(ct),this._element.classList.add(ht),this._element.style[n]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const s=`scroll${n[0].toUpperCase()+n.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(ht),this._element.classList.add(ct,lt),this._element.style[n]="",j.trigger(this._element,"shown.bs.collapse")}),this._element,!0),this._element.style[n]=`${this._element[s]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(j.trigger(this._element,"hide.bs.collapse").defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,u(this._element),this._element.classList.add(ht),this._element.classList.remove(ct,lt);const e=this._triggerArray.length;for(let t=0;t{this._isTransitioning=!1,this._element.classList.remove(ht),this._element.classList.add(ct),j.trigger(this._element,"hidden.bs.collapse")}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(lt)}_getConfig(t){return(t={...rt,...U.getDataAttributes(this._element),...t}).toggle=Boolean(t.toggle),t.parent=r(t.parent),a(ot,t,at),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=V.find(ut,this._config.parent);V.find(ft,this._config.parent).filter((e=>!t.includes(e))).forEach((t=>{const e=n(t);e&&this._addAriaAndCollapsedClass([t],this._isShown(e))}))}_addAriaAndCollapsedClass(t,e){t.length&&t.forEach((t=>{e?t.classList.remove(dt):t.classList.add(dt),t.setAttribute("aria-expanded",e)}))}static jQueryInterface(t){return this.each((function(){const e={};"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1);const i=pt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}j.on(document,"click.bs.collapse.data-api",ft,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();const e=i(this);V.find(e).forEach((t=>{pt.getOrCreateInstance(t,{toggle:!1}).toggle()}))})),g(pt);var mt="top",gt="bottom",_t="right",bt="left",vt="auto",yt=[mt,gt,_t,bt],wt="start",Et="end",At="clippingParents",Tt="viewport",Ot="popper",Ct="reference",kt=yt.reduce((function(t,e){return t.concat([e+"-"+wt,e+"-"+Et])}),[]),Lt=[].concat(yt,[vt]).reduce((function(t,e){return t.concat([e,e+"-"+wt,e+"-"+Et])}),[]),xt="beforeRead",Dt="read",St="afterRead",Nt="beforeMain",It="main",Pt="afterMain",jt="beforeWrite",Mt="write",Ht="afterWrite",Bt=[xt,Dt,St,Nt,It,Pt,jt,Mt,Ht];function Rt(t){return t?(t.nodeName||"").toLowerCase():null}function Wt(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function $t(t){return t instanceof Wt(t).Element||t instanceof Element}function zt(t){return t instanceof Wt(t).HTMLElement||t instanceof HTMLElement}function qt(t){return"undefined"!=typeof ShadowRoot&&(t instanceof Wt(t).ShadowRoot||t instanceof ShadowRoot)}const Ft={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];zt(s)&&Rt(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});zt(n)&&Rt(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function Ut(t){return t.split("-")[0]}function Vt(t,e){var i=t.getBoundingClientRect();return{width:i.width/1,height:i.height/1,top:i.top/1,right:i.right/1,bottom:i.bottom/1,left:i.left/1,x:i.left/1,y:i.top/1}}function Kt(t){var e=Vt(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Xt(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&qt(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function Yt(t){return Wt(t).getComputedStyle(t)}function Qt(t){return["table","td","th"].indexOf(Rt(t))>=0}function Gt(t){return(($t(t)?t.ownerDocument:t.document)||window.document).documentElement}function Zt(t){return"html"===Rt(t)?t:t.assignedSlot||t.parentNode||(qt(t)?t.host:null)||Gt(t)}function Jt(t){return zt(t)&&"fixed"!==Yt(t).position?t.offsetParent:null}function te(t){for(var e=Wt(t),i=Jt(t);i&&Qt(i)&&"static"===Yt(i).position;)i=Jt(i);return i&&("html"===Rt(i)||"body"===Rt(i)&&"static"===Yt(i).position)?e:i||function(t){var e=-1!==navigator.userAgent.toLowerCase().indexOf("firefox");if(-1!==navigator.userAgent.indexOf("Trident")&&zt(t)&&"fixed"===Yt(t).position)return null;for(var i=Zt(t);zt(i)&&["html","body"].indexOf(Rt(i))<0;){var n=Yt(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function ee(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}var ie=Math.max,ne=Math.min,se=Math.round;function oe(t,e,i){return ie(t,ne(e,i))}function re(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function ae(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const le={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=Ut(i.placement),l=ee(a),c=[bt,_t].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return re("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:ae(t,yt))}(s.padding,i),d=Kt(o),u="y"===l?mt:bt,f="y"===l?gt:_t,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m=r[l]-i.rects.reference[l],g=te(o),_=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=p/2-m/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,E=oe(v,w,y),A=l;i.modifiersData[n]=((e={})[A]=E,e.centerOffset=E-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Xt(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function ce(t){return t.split("-")[1]}var he={top:"auto",right:"auto",bottom:"auto",left:"auto"};function de(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=!0===h?function(t){var e=t.x,i=t.y,n=window.devicePixelRatio||1;return{x:se(se(e*n)/n)||0,y:se(se(i*n)/n)||0}}(r):"function"==typeof h?h(r):r,u=d.x,f=void 0===u?0:u,p=d.y,m=void 0===p?0:p,g=r.hasOwnProperty("x"),_=r.hasOwnProperty("y"),b=bt,v=mt,y=window;if(c){var w=te(i),E="clientHeight",A="clientWidth";w===Wt(i)&&"static"!==Yt(w=Gt(i)).position&&"absolute"===a&&(E="scrollHeight",A="scrollWidth"),w=w,s!==mt&&(s!==bt&&s!==_t||o!==Et)||(v=gt,m-=w[E]-n.height,m*=l?1:-1),s!==bt&&(s!==mt&&s!==gt||o!==Et)||(b=_t,f-=w[A]-n.width,f*=l?1:-1)}var T,O=Object.assign({position:a},c&&he);return l?Object.assign({},O,((T={})[v]=_?"0":"",T[b]=g?"0":"",T.transform=(y.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",T)):Object.assign({},O,((e={})[v]=_?m+"px":"",e[b]=g?f+"px":"",e.transform="",e))}const ue={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:Ut(e.placement),variation:ce(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,de(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,de(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var fe={passive:!0};const pe={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=Wt(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,fe)})),a&&l.addEventListener("resize",i.update,fe),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,fe)})),a&&l.removeEventListener("resize",i.update,fe)}},data:{}};var me={left:"right",right:"left",bottom:"top",top:"bottom"};function ge(t){return t.replace(/left|right|bottom|top/g,(function(t){return me[t]}))}var _e={start:"end",end:"start"};function be(t){return t.replace(/start|end/g,(function(t){return _e[t]}))}function ve(t){var e=Wt(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function ye(t){return Vt(Gt(t)).left+ve(t).scrollLeft}function we(t){var e=Yt(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Ee(t){return["html","body","#document"].indexOf(Rt(t))>=0?t.ownerDocument.body:zt(t)&&we(t)?t:Ee(Zt(t))}function Ae(t,e){var i;void 0===e&&(e=[]);var n=Ee(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=Wt(n),r=s?[o].concat(o.visualViewport||[],we(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Ae(Zt(r)))}function Te(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function Oe(t,e){return e===Tt?Te(function(t){var e=Wt(t),i=Gt(t),n=e.visualViewport,s=i.clientWidth,o=i.clientHeight,r=0,a=0;return n&&(s=n.width,o=n.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(r=n.offsetLeft,a=n.offsetTop)),{width:s,height:o,x:r+ye(t),y:a}}(t)):zt(e)?function(t){var e=Vt(t);return e.top=e.top+t.clientTop,e.left=e.left+t.clientLeft,e.bottom=e.top+t.clientHeight,e.right=e.left+t.clientWidth,e.width=t.clientWidth,e.height=t.clientHeight,e.x=e.left,e.y=e.top,e}(e):Te(function(t){var e,i=Gt(t),n=ve(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=ie(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=ie(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+ye(t),l=-n.scrollTop;return"rtl"===Yt(s||i).direction&&(a+=ie(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(Gt(t)))}function Ce(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?Ut(s):null,r=s?ce(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case mt:e={x:a,y:i.y-n.height};break;case gt:e={x:a,y:i.y+i.height};break;case _t:e={x:i.x+i.width,y:l};break;case bt:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?ee(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case wt:e[c]=e[c]-(i[h]/2-n[h]/2);break;case Et:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function ke(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.boundary,r=void 0===o?At:o,a=i.rootBoundary,l=void 0===a?Tt:a,c=i.elementContext,h=void 0===c?Ot:c,d=i.altBoundary,u=void 0!==d&&d,f=i.padding,p=void 0===f?0:f,m=re("number"!=typeof p?p:ae(p,yt)),g=h===Ot?Ct:Ot,_=t.rects.popper,b=t.elements[u?g:h],v=function(t,e,i){var n="clippingParents"===e?function(t){var e=Ae(Zt(t)),i=["absolute","fixed"].indexOf(Yt(t).position)>=0&&zt(t)?te(t):t;return $t(i)?e.filter((function(t){return $t(t)&&Xt(t,i)&&"body"!==Rt(t)})):[]}(t):[].concat(e),s=[].concat(n,[i]),o=s[0],r=s.reduce((function(e,i){var n=Oe(t,i);return e.top=ie(n.top,e.top),e.right=ne(n.right,e.right),e.bottom=ne(n.bottom,e.bottom),e.left=ie(n.left,e.left),e}),Oe(t,o));return r.width=r.right-r.left,r.height=r.bottom-r.top,r.x=r.left,r.y=r.top,r}($t(b)?b:b.contextElement||Gt(t.elements.popper),r,l),y=Vt(t.elements.reference),w=Ce({reference:y,element:_,strategy:"absolute",placement:s}),E=Te(Object.assign({},_,w)),A=h===Ot?E:y,T={top:v.top-A.top+m.top,bottom:A.bottom-v.bottom+m.bottom,left:v.left-A.left+m.left,right:A.right-v.right+m.right},O=t.modifiersData.offset;if(h===Ot&&O){var C=O[s];Object.keys(T).forEach((function(t){var e=[_t,gt].indexOf(t)>=0?1:-1,i=[mt,gt].indexOf(t)>=0?"y":"x";T[t]+=C[i]*e}))}return T}function Le(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?Lt:l,h=ce(n),d=h?a?kt:kt.filter((function(t){return ce(t)===h})):yt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=ke(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[Ut(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const xe={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,m=i.allowedAutoPlacements,g=e.options.placement,_=Ut(g),b=l||(_!==g&&p?function(t){if(Ut(t)===vt)return[];var e=ge(t);return[be(t),e,be(e)]}(g):[ge(g)]),v=[g].concat(b).reduce((function(t,i){return t.concat(Ut(i)===vt?Le(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y=e.rects.reference,w=e.rects.popper,E=new Map,A=!0,T=v[0],O=0;O=0,D=x?"width":"height",S=ke(e,{placement:C,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),N=x?L?_t:bt:L?gt:mt;y[D]>w[D]&&(N=ge(N));var I=ge(N),P=[];if(o&&P.push(S[k]<=0),a&&P.push(S[N]<=0,S[I]<=0),P.every((function(t){return t}))){T=C,A=!1;break}E.set(C,P)}if(A)for(var j=function(t){var e=v.find((function(e){var i=E.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},M=p?3:1;M>0&&"break"!==j(M);M--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function De(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function Se(t){return[mt,_t,gt,bt].some((function(e){return t[e]>=0}))}const Ne={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=ke(e,{elementContext:"reference"}),a=ke(e,{altBoundary:!0}),l=De(r,n),c=De(a,s,o),h=Se(l),d=Se(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},Ie={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=Lt.reduce((function(t,i){return t[i]=function(t,e,i){var n=Ut(t),s=[bt,mt].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[bt,_t].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},Pe={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=Ce({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},je={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,m=void 0===p?0:p,g=ke(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=Ut(e.placement),b=ce(e.placement),v=!b,y=ee(_),w="x"===y?"y":"x",E=e.modifiersData.popperOffsets,A=e.rects.reference,T=e.rects.popper,O="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,C={x:0,y:0};if(E){if(o||a){var k="y"===y?mt:bt,L="y"===y?gt:_t,x="y"===y?"height":"width",D=E[y],S=E[y]+g[k],N=E[y]-g[L],I=f?-T[x]/2:0,P=b===wt?A[x]:T[x],j=b===wt?-T[x]:-A[x],M=e.elements.arrow,H=f&&M?Kt(M):{width:0,height:0},B=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},R=B[k],W=B[L],$=oe(0,A[x],H[x]),z=v?A[x]/2-I-$-R-O:P-$-R-O,q=v?-A[x]/2+I+$+W+O:j+$+W+O,F=e.elements.arrow&&te(e.elements.arrow),U=F?"y"===y?F.clientTop||0:F.clientLeft||0:0,V=e.modifiersData.offset?e.modifiersData.offset[e.placement][y]:0,K=E[y]+z-V-U,X=E[y]+q-V;if(o){var Y=oe(f?ne(S,K):S,D,f?ie(N,X):N);E[y]=Y,C[y]=Y-D}if(a){var Q="x"===y?mt:bt,G="x"===y?gt:_t,Z=E[w],J=Z+g[Q],tt=Z-g[G],et=oe(f?ne(J,K):J,Z,f?ie(tt,X):tt);E[w]=et,C[w]=et-Z}}e.modifiersData[n]=C}},requiresIfExists:["offset"]};function Me(t,e,i){void 0===i&&(i=!1);var n=zt(e);zt(e)&&function(t){var e=t.getBoundingClientRect();e.width,t.offsetWidth,e.height,t.offsetHeight}(e);var s,o,r=Gt(e),a=Vt(t),l={scrollLeft:0,scrollTop:0},c={x:0,y:0};return(n||!n&&!i)&&(("body"!==Rt(e)||we(r))&&(l=(s=e)!==Wt(s)&&zt(s)?{scrollLeft:(o=s).scrollLeft,scrollTop:o.scrollTop}:ve(s)),zt(e)?((c=Vt(e)).x+=e.clientLeft,c.y+=e.clientTop):r&&(c.x=ye(r))),{x:a.left+l.scrollLeft-c.x,y:a.top+l.scrollTop-c.y,width:a.width,height:a.height}}function He(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var Be={placement:"bottom",modifiers:[],strategy:"absolute"};function Re(){for(var t=arguments.length,e=new Array(t),i=0;ij.on(t,"mouseover",d))),this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Je),this._element.classList.add(Je),j.trigger(this._element,"shown.bs.dropdown",t)}hide(){if(c(this._element)||!this._isShown(this._menu))return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){j.trigger(this._element,"hide.bs.dropdown",t).defaultPrevented||("ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach((t=>j.off(t,"mouseover",d))),this._popper&&this._popper.destroy(),this._menu.classList.remove(Je),this._element.classList.remove(Je),this._element.setAttribute("aria-expanded","false"),U.removeDataAttribute(this._menu,"popper"),j.trigger(this._element,"hidden.bs.dropdown",t))}_getConfig(t){if(t={...this.constructor.Default,...U.getDataAttributes(this._element),...t},a(Ue,t,this.constructor.DefaultType),"object"==typeof t.reference&&!o(t.reference)&&"function"!=typeof t.reference.getBoundingClientRect)throw new TypeError(`${Ue.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return t}_createPopper(t){if(void 0===Fe)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let e=this._element;"parent"===this._config.reference?e=t:o(this._config.reference)?e=r(this._config.reference):"object"==typeof this._config.reference&&(e=this._config.reference);const i=this._getPopperConfig(),n=i.modifiers.find((t=>"applyStyles"===t.name&&!1===t.enabled));this._popper=qe(e,this._menu,i),n&&U.setDataAttribute(this._menu,"popper","static")}_isShown(t=this._element){return t.classList.contains(Je)}_getMenuElement(){return V.next(this._element,ei)[0]}_getPlacement(){const t=this._element.parentNode;if(t.classList.contains("dropend"))return ri;if(t.classList.contains("dropstart"))return ai;const e="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return t.classList.contains("dropup")?e?ni:ii:e?oi:si}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return"static"===this._config.display&&(t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,..."function"==typeof this._config.popperConfig?this._config.popperConfig(t):this._config.popperConfig}}_selectMenuItem({key:t,target:e}){const i=V.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter(l);i.length&&v(i,e,t===Ye,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=hi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(t&&(2===t.button||"keyup"===t.type&&"Tab"!==t.key))return;const e=V.find(ti);for(let i=0,n=e.length;ie+t)),this._setElementAttributes(di,"paddingRight",(e=>e+t)),this._setElementAttributes(ui,"marginRight",(e=>e-t))}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t)[e];t.style[e]=`${i(Number.parseFloat(s))}px`}))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,"paddingRight"),this._resetElementAttributes(di,"paddingRight"),this._resetElementAttributes(ui,"marginRight")}_saveInitialAttribute(t,e){const i=t.style[e];i&&U.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=U.getDataAttribute(t,e);void 0===i?t.style.removeProperty(e):(U.removeDataAttribute(t,e),t.style[e]=i)}))}_applyManipulationCallback(t,e){o(t)?e(t):V.find(t,this._element).forEach(e)}isOverflowing(){return this.getWidth()>0}}const pi={className:"modal-backdrop",isVisible:!0,isAnimated:!1,rootElement:"body",clickCallback:null},mi={className:"string",isVisible:"boolean",isAnimated:"boolean",rootElement:"(element|string)",clickCallback:"(function|null)"},gi="show",_i="mousedown.bs.backdrop";class bi{constructor(t){this._config=this._getConfig(t),this._isAppended=!1,this._element=null}show(t){this._config.isVisible?(this._append(),this._config.isAnimated&&u(this._getElement()),this._getElement().classList.add(gi),this._emulateAnimation((()=>{_(t)}))):_(t)}hide(t){this._config.isVisible?(this._getElement().classList.remove(gi),this._emulateAnimation((()=>{this.dispose(),_(t)}))):_(t)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_getConfig(t){return(t={...pi,..."object"==typeof t?t:{}}).rootElement=r(t.rootElement),a("backdrop",t,mi),t}_append(){this._isAppended||(this._config.rootElement.append(this._getElement()),j.on(this._getElement(),_i,(()=>{_(this._config.clickCallback)})),this._isAppended=!0)}dispose(){this._isAppended&&(j.off(this._element,_i),this._element.remove(),this._isAppended=!1)}_emulateAnimation(t){b(t,this._getElement(),this._config.isAnimated)}}const vi={trapElement:null,autofocus:!0},yi={trapElement:"element",autofocus:"boolean"},wi=".bs.focustrap",Ei="backward";class Ai{constructor(t){this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}activate(){const{trapElement:t,autofocus:e}=this._config;this._isActive||(e&&t.focus(),j.off(document,wi),j.on(document,"focusin.bs.focustrap",(t=>this._handleFocusin(t))),j.on(document,"keydown.tab.bs.focustrap",(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,j.off(document,wi))}_handleFocusin(t){const{target:e}=t,{trapElement:i}=this._config;if(e===document||e===i||i.contains(e))return;const n=V.focusableChildren(i);0===n.length?i.focus():this._lastTabNavDirection===Ei?n[n.length-1].focus():n[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?Ei:"forward")}_getConfig(t){return t={...vi,..."object"==typeof t?t:{}},a("focustrap",t,yi),t}}const Ti="modal",Oi="Escape",Ci={backdrop:!0,keyboard:!0,focus:!0},ki={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean"},Li="hidden.bs.modal",xi="show.bs.modal",Di="resize.bs.modal",Si="click.dismiss.bs.modal",Ni="keydown.dismiss.bs.modal",Ii="mousedown.dismiss.bs.modal",Pi="modal-open",ji="show",Mi="modal-static";class Hi extends B{constructor(t,e){super(t),this._config=this._getConfig(e),this._dialog=V.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollBar=new fi}static get Default(){return Ci}static get NAME(){return Ti}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||j.trigger(this._element,xi,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isAnimated()&&(this._isTransitioning=!0),this._scrollBar.hide(),document.body.classList.add(Pi),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),j.on(this._dialog,Ii,(()=>{j.one(this._element,"mouseup.dismiss.bs.modal",(t=>{t.target===this._element&&(this._ignoreBackdropClick=!0)}))})),this._showBackdrop((()=>this._showElement(t))))}hide(){if(!this._isShown||this._isTransitioning)return;if(j.trigger(this._element,"hide.bs.modal").defaultPrevented)return;this._isShown=!1;const t=this._isAnimated();t&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),this._focustrap.deactivate(),this._element.classList.remove(ji),j.off(this._element,Si),j.off(this._dialog,Ii),this._queueCallback((()=>this._hideModal()),this._element,t)}dispose(){[window,this._dialog].forEach((t=>j.off(t,".bs.modal"))),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new bi({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new Ai({trapElement:this._element})}_getConfig(t){return t={...Ci,...U.getDataAttributes(this._element),..."object"==typeof t?t:{}},a(Ti,t,ki),t}_showElement(t){const e=this._isAnimated(),i=V.findOne(".modal-body",this._dialog);this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0,i&&(i.scrollTop=0),e&&u(this._element),this._element.classList.add(ji),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,j.trigger(this._element,"shown.bs.modal",{relatedTarget:t})}),this._dialog,e)}_setEscapeEvent(){this._isShown?j.on(this._element,Ni,(t=>{this._config.keyboard&&t.key===Oi?(t.preventDefault(),this.hide()):this._config.keyboard||t.key!==Oi||this._triggerBackdropTransition()})):j.off(this._element,Ni)}_setResizeEvent(){this._isShown?j.on(window,Di,(()=>this._adjustDialog())):j.off(window,Di)}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(Pi),this._resetAdjustments(),this._scrollBar.reset(),j.trigger(this._element,Li)}))}_showBackdrop(t){j.on(this._element,Si,(t=>{this._ignoreBackdropClick?this._ignoreBackdropClick=!1:t.target===t.currentTarget&&(!0===this._config.backdrop?this.hide():"static"===this._config.backdrop&&this._triggerBackdropTransition())})),this._backdrop.show(t)}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(j.trigger(this._element,"hidePrevented.bs.modal").defaultPrevented)return;const{classList:t,scrollHeight:e,style:i}=this._element,n=e>document.documentElement.clientHeight;!n&&"hidden"===i.overflowY||t.contains(Mi)||(n||(i.overflowY="hidden"),t.add(Mi),this._queueCallback((()=>{t.remove(Mi),n||this._queueCallback((()=>{i.overflowY=""}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;(!i&&t&&!m()||i&&!t&&m())&&(this._element.style.paddingLeft=`${e}px`),(i&&!t&&!m()||!i&&t&&m())&&(this._element.style.paddingRight=`${e}px`)}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=Hi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}j.on(document,"click.bs.modal.data-api",'[data-bs-toggle="modal"]',(function(t){const e=n(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),j.one(e,xi,(t=>{t.defaultPrevented||j.one(e,Li,(()=>{l(this)&&this.focus()}))}));const i=V.findOne(".modal.show");i&&Hi.getInstance(i).hide(),Hi.getOrCreateInstance(e).toggle(this)})),R(Hi),g(Hi);const Bi="offcanvas",Ri={backdrop:!0,keyboard:!0,scroll:!1},Wi={backdrop:"boolean",keyboard:"boolean",scroll:"boolean"},$i="show",zi=".offcanvas.show",qi="hidden.bs.offcanvas";class Fi extends B{constructor(t,e){super(t),this._config=this._getConfig(e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get NAME(){return Bi}static get Default(){return Ri}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||j.trigger(this._element,"show.bs.offcanvas",{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._element.style.visibility="visible",this._backdrop.show(),this._config.scroll||(new fi).hide(),this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add($i),this._queueCallback((()=>{this._config.scroll||this._focustrap.activate(),j.trigger(this._element,"shown.bs.offcanvas",{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(j.trigger(this._element,"hide.bs.offcanvas").defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.remove($i),this._backdrop.hide(),this._queueCallback((()=>{this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._element.style.visibility="hidden",this._config.scroll||(new fi).reset(),j.trigger(this._element,qi)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_getConfig(t){return t={...Ri,...U.getDataAttributes(this._element),..."object"==typeof t?t:{}},a(Bi,t,Wi),t}_initializeBackDrop(){return new bi({className:"offcanvas-backdrop",isVisible:this._config.backdrop,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:()=>this.hide()})}_initializeFocusTrap(){return new Ai({trapElement:this._element})}_addEventListeners(){j.on(this._element,"keydown.dismiss.bs.offcanvas",(t=>{this._config.keyboard&&"Escape"===t.key&&this.hide()}))}static jQueryInterface(t){return this.each((function(){const e=Fi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}j.on(document,"click.bs.offcanvas.data-api",'[data-bs-toggle="offcanvas"]',(function(t){const e=n(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),c(this))return;j.one(e,qi,(()=>{l(this)&&this.focus()}));const i=V.findOne(zi);i&&i!==e&&Fi.getInstance(i).hide(),Fi.getOrCreateInstance(e).toggle(this)})),j.on(window,"load.bs.offcanvas.data-api",(()=>V.find(zi).forEach((t=>Fi.getOrCreateInstance(t).show())))),R(Fi),g(Fi);const Ui=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Vi=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i,Ki=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i,Xi=(t,e)=>{const i=t.nodeName.toLowerCase();if(e.includes(i))return!Ui.has(i)||Boolean(Vi.test(t.nodeValue)||Ki.test(t.nodeValue));const n=e.filter((t=>t instanceof RegExp));for(let t=0,e=n.length;t{Xi(t,r)||i.removeAttribute(t.nodeName)}))}return n.body.innerHTML}const Qi="tooltip",Gi=new Set(["sanitize","allowList","sanitizeFn"]),Zi={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(array|string|function)",container:"(string|element|boolean)",fallbackPlacements:"array",boundary:"(string|element)",customClass:"(string|function)",sanitize:"boolean",sanitizeFn:"(null|function)",allowList:"object",popperConfig:"(null|object|function)"},Ji={AUTO:"auto",TOP:"top",RIGHT:m()?"left":"right",BOTTOM:"bottom",LEFT:m()?"right":"left"},tn={animation:!0,template:'',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:[0,0],container:!1,fallbackPlacements:["top","right","bottom","left"],boundary:"clippingParents",customClass:"",sanitize:!0,sanitizeFn:null,allowList:{"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},popperConfig:null},en={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"},nn="fade",sn="show",on="show",rn="out",an=".tooltip-inner",ln=".modal",cn="hide.bs.modal",hn="hover",dn="focus";class un extends B{constructor(t,e){if(void 0===Fe)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t),this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this._config=this._getConfig(e),this.tip=null,this._setListeners()}static get Default(){return tn}static get NAME(){return Qi}static get Event(){return en}static get DefaultType(){return Zi}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(t){if(this._isEnabled)if(t){const e=this._initializeOnDelegatedTarget(t);e._activeTrigger.click=!e._activeTrigger.click,e._isWithActiveTrigger()?e._enter(null,e):e._leave(null,e)}else{if(this.getTipElement().classList.contains(sn))return void this._leave(null,this);this._enter(null,this)}}dispose(){clearTimeout(this._timeout),j.off(this._element.closest(ln),cn,this._hideModalHandler),this.tip&&this.tip.remove(),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this.isWithContent()||!this._isEnabled)return;const t=j.trigger(this._element,this.constructor.Event.SHOW),e=h(this._element),i=null===e?this._element.ownerDocument.documentElement.contains(this._element):e.contains(this._element);if(t.defaultPrevented||!i)return;"tooltip"===this.constructor.NAME&&this.tip&&this.getTitle()!==this.tip.querySelector(an).innerHTML&&(this._disposePopper(),this.tip.remove(),this.tip=null);const n=this.getTipElement(),s=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME);n.setAttribute("id",s),this._element.setAttribute("aria-describedby",s),this._config.animation&&n.classList.add(nn);const o="function"==typeof this._config.placement?this._config.placement.call(this,n,this._element):this._config.placement,r=this._getAttachment(o);this._addAttachmentClass(r);const{container:a}=this._config;H.set(n,this.constructor.DATA_KEY,this),this._element.ownerDocument.documentElement.contains(this.tip)||(a.append(n),j.trigger(this._element,this.constructor.Event.INSERTED)),this._popper?this._popper.update():this._popper=qe(this._element,n,this._getPopperConfig(r)),n.classList.add(sn);const l=this._resolvePossibleFunction(this._config.customClass);l&&n.classList.add(...l.split(" ")),"ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach((t=>{j.on(t,"mouseover",d)}));const c=this.tip.classList.contains(nn);this._queueCallback((()=>{const t=this._hoverState;this._hoverState=null,j.trigger(this._element,this.constructor.Event.SHOWN),t===rn&&this._leave(null,this)}),this.tip,c)}hide(){if(!this._popper)return;const t=this.getTipElement();if(j.trigger(this._element,this.constructor.Event.HIDE).defaultPrevented)return;t.classList.remove(sn),"ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach((t=>j.off(t,"mouseover",d))),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1;const e=this.tip.classList.contains(nn);this._queueCallback((()=>{this._isWithActiveTrigger()||(this._hoverState!==on&&t.remove(),this._cleanTipClass(),this._element.removeAttribute("aria-describedby"),j.trigger(this._element,this.constructor.Event.HIDDEN),this._disposePopper())}),this.tip,e),this._hoverState=""}update(){null!==this._popper&&this._popper.update()}isWithContent(){return Boolean(this.getTitle())}getTipElement(){if(this.tip)return this.tip;const t=document.createElement("div");t.innerHTML=this._config.template;const e=t.children[0];return this.setContent(e),e.classList.remove(nn,sn),this.tip=e,this.tip}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),an)}_sanitizeAndSetContent(t,e,i){const n=V.findOne(i,t);e||!n?this.setElementContent(n,e):n.remove()}setElementContent(t,e){if(null!==t)return o(e)?(e=r(e),void(this._config.html?e.parentNode!==t&&(t.innerHTML="",t.append(e)):t.textContent=e.textContent)):void(this._config.html?(this._config.sanitize&&(e=Yi(e,this._config.allowList,this._config.sanitizeFn)),t.innerHTML=e):t.textContent=e)}getTitle(){const t=this._element.getAttribute("data-bs-original-title")||this._config.title;return this._resolvePossibleFunction(t)}updateAttachment(t){return"right"===t?"end":"left"===t?"start":t}_initializeOnDelegatedTarget(t,e){return e||this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return"function"==typeof t?t.call(this._element):t}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"onChange",enabled:!0,phase:"afterWrite",fn:t=>this._handlePopperPlacementChange(t)}],onFirstUpdate:t=>{t.options.placement!==t.placement&&this._handlePopperPlacementChange(t)}};return{...e,..."function"==typeof this._config.popperConfig?this._config.popperConfig(e):this._config.popperConfig}}_addAttachmentClass(t){this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(t)}`)}_getAttachment(t){return Ji[t.toUpperCase()]}_setListeners(){this._config.trigger.split(" ").forEach((t=>{if("click"===t)j.on(this._element,this.constructor.Event.CLICK,this._config.selector,(t=>this.toggle(t)));else if("manual"!==t){const e=t===hn?this.constructor.Event.MOUSEENTER:this.constructor.Event.FOCUSIN,i=t===hn?this.constructor.Event.MOUSELEAVE:this.constructor.Event.FOCUSOUT;j.on(this._element,e,this._config.selector,(t=>this._enter(t))),j.on(this._element,i,this._config.selector,(t=>this._leave(t)))}})),this._hideModalHandler=()=>{this._element&&this.hide()},j.on(this._element.closest(ln),cn,this._hideModalHandler),this._config.selector?this._config={...this._config,trigger:"manual",selector:""}:this._fixTitle()}_fixTitle(){const t=this._element.getAttribute("title"),e=typeof this._element.getAttribute("data-bs-original-title");(t||"string"!==e)&&(this._element.setAttribute("data-bs-original-title",t||""),!t||this._element.getAttribute("aria-label")||this._element.textContent||this._element.setAttribute("aria-label",t),this._element.setAttribute("title",""))}_enter(t,e){e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger["focusin"===t.type?dn:hn]=!0),e.getTipElement().classList.contains(sn)||e._hoverState===on?e._hoverState=on:(clearTimeout(e._timeout),e._hoverState=on,e._config.delay&&e._config.delay.show?e._timeout=setTimeout((()=>{e._hoverState===on&&e.show()}),e._config.delay.show):e.show())}_leave(t,e){e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger["focusout"===t.type?dn:hn]=e._element.contains(t.relatedTarget)),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=rn,e._config.delay&&e._config.delay.hide?e._timeout=setTimeout((()=>{e._hoverState===rn&&e.hide()}),e._config.delay.hide):e.hide())}_isWithActiveTrigger(){for(const t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1}_getConfig(t){const e=U.getDataAttributes(this._element);return Object.keys(e).forEach((t=>{Gi.has(t)&&delete e[t]})),(t={...this.constructor.Default,...e,..."object"==typeof t&&t?t:{}}).container=!1===t.container?document.body:r(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),a(Qi,t,this.constructor.DefaultType),t.sanitize&&(t.template=Yi(t.template,t.allowList,t.sanitizeFn)),t}_getDelegateConfig(){const t={};for(const e in this._config)this.constructor.Default[e]!==this._config[e]&&(t[e]=this._config[e]);return t}_cleanTipClass(){const t=this.getTipElement(),e=new RegExp(`(^|\\s)${this._getBasicClassPrefix()}\\S+`,"g"),i=t.getAttribute("class").match(e);null!==i&&i.length>0&&i.map((t=>t.trim())).forEach((e=>t.classList.remove(e)))}_getBasicClassPrefix(){return"bs-tooltip"}_handlePopperPlacementChange(t){const{state:e}=t;e&&(this.tip=e.elements.popper,this._cleanTipClass(),this._addAttachmentClass(this._getAttachment(e.placement)))}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null)}static jQueryInterface(t){return this.each((function(){const e=un.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}g(un);const fn={...un.Default,placement:"right",offset:[0,8],trigger:"click",content:"",template:''},pn={...un.DefaultType,content:"(string|element|function)"},mn={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"};class gn extends un{static get Default(){return fn}static get NAME(){return"popover"}static get Event(){return mn}static get DefaultType(){return pn}isWithContent(){return this.getTitle()||this._getContent()}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),".popover-header"),this._sanitizeAndSetContent(t,this._getContent(),".popover-body")}_getContent(){return this._resolvePossibleFunction(this._config.content)}_getBasicClassPrefix(){return"bs-popover"}static jQueryInterface(t){return this.each((function(){const e=gn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}g(gn);const _n="scrollspy",bn={offset:10,method:"auto",target:""},vn={offset:"number",method:"string",target:"(string|element)"},yn="active",wn=".nav-link, .list-group-item, .dropdown-item",En="position";class An extends B{constructor(t,e){super(t),this._scrollElement="BODY"===this._element.tagName?window:this._element,this._config=this._getConfig(e),this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,j.on(this._scrollElement,"scroll.bs.scrollspy",(()=>this._process())),this.refresh(),this._process()}static get Default(){return bn}static get NAME(){return _n}refresh(){const t=this._scrollElement===this._scrollElement.window?"offset":En,e="auto"===this._config.method?t:this._config.method,n=e===En?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),V.find(wn,this._config.target).map((t=>{const s=i(t),o=s?V.findOne(s):null;if(o){const t=o.getBoundingClientRect();if(t.width||t.height)return[U[e](o).top+n,s]}return null})).filter((t=>t)).sort(((t,e)=>t[0]-e[0])).forEach((t=>{this._offsets.push(t[0]),this._targets.push(t[1])}))}dispose(){j.off(this._scrollElement,".bs.scrollspy"),super.dispose()}_getConfig(t){return(t={...bn,...U.getDataAttributes(this._element),..."object"==typeof t&&t?t:{}}).target=r(t.target)||document.documentElement,a(_n,t,vn),t}_getScrollTop(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop}_getScrollHeight(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)}_getOffsetHeight(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height}_process(){const t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),i=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=i){const t=this._targets[this._targets.length-1];this._activeTarget!==t&&this._activate(t)}else{if(this._activeTarget&&t0)return this._activeTarget=null,void this._clear();for(let e=this._offsets.length;e--;)this._activeTarget!==this._targets[e]&&t>=this._offsets[e]&&(void 0===this._offsets[e+1]||t`${e}[data-bs-target="${t}"],${e}[href="${t}"]`)),i=V.findOne(e.join(","),this._config.target);i.classList.add(yn),i.classList.contains("dropdown-item")?V.findOne(".dropdown-toggle",i.closest(".dropdown")).classList.add(yn):V.parents(i,".nav, .list-group").forEach((t=>{V.prev(t,".nav-link, .list-group-item").forEach((t=>t.classList.add(yn))),V.prev(t,".nav-item").forEach((t=>{V.children(t,".nav-link").forEach((t=>t.classList.add(yn)))}))})),j.trigger(this._scrollElement,"activate.bs.scrollspy",{relatedTarget:t})}_clear(){V.find(wn,this._config.target).filter((t=>t.classList.contains(yn))).forEach((t=>t.classList.remove(yn)))}static jQueryInterface(t){return this.each((function(){const e=An.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}j.on(window,"load.bs.scrollspy.data-api",(()=>{V.find('[data-bs-spy="scroll"]').forEach((t=>new An(t)))})),g(An);const Tn="active",On="fade",Cn="show",kn=".active",Ln=":scope > li > .active";class xn extends B{static get NAME(){return"tab"}show(){if(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&this._element.classList.contains(Tn))return;let t;const e=n(this._element),i=this._element.closest(".nav, .list-group");if(i){const e="UL"===i.nodeName||"OL"===i.nodeName?Ln:kn;t=V.find(e,i),t=t[t.length-1]}const s=t?j.trigger(t,"hide.bs.tab",{relatedTarget:this._element}):null;if(j.trigger(this._element,"show.bs.tab",{relatedTarget:t}).defaultPrevented||null!==s&&s.defaultPrevented)return;this._activate(this._element,i);const o=()=>{j.trigger(t,"hidden.bs.tab",{relatedTarget:this._element}),j.trigger(this._element,"shown.bs.tab",{relatedTarget:t})};e?this._activate(e,e.parentNode,o):o()}_activate(t,e,i){const n=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?V.children(e,kn):V.find(Ln,e))[0],s=i&&n&&n.classList.contains(On),o=()=>this._transitionComplete(t,n,i);n&&s?(n.classList.remove(Cn),this._queueCallback(o,t,!0)):o()}_transitionComplete(t,e,i){if(e){e.classList.remove(Tn);const t=V.findOne(":scope > .dropdown-menu .active",e.parentNode);t&&t.classList.remove(Tn),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}t.classList.add(Tn),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),u(t),t.classList.contains(On)&&t.classList.add(Cn);let n=t.parentNode;if(n&&"LI"===n.nodeName&&(n=n.parentNode),n&&n.classList.contains("dropdown-menu")){const e=t.closest(".dropdown");e&&V.find(".dropdown-toggle",e).forEach((t=>t.classList.add(Tn))),t.setAttribute("aria-expanded",!0)}i&&i()}static jQueryInterface(t){return this.each((function(){const e=xn.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}j.on(document,"click.bs.tab.data-api",'[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),c(this)||xn.getOrCreateInstance(this).show()})),g(xn);const Dn="toast",Sn="hide",Nn="show",In="showing",Pn={animation:"boolean",autohide:"boolean",delay:"number"},jn={animation:!0,autohide:!0,delay:5e3};class Mn extends B{constructor(t,e){super(t),this._config=this._getConfig(e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get DefaultType(){return Pn}static get Default(){return jn}static get NAME(){return Dn}show(){j.trigger(this._element,"show.bs.toast").defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(Sn),u(this._element),this._element.classList.add(Nn),this._element.classList.add(In),this._queueCallback((()=>{this._element.classList.remove(In),j.trigger(this._element,"shown.bs.toast"),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this._element.classList.contains(Nn)&&(j.trigger(this._element,"hide.bs.toast").defaultPrevented||(this._element.classList.add(In),this._queueCallback((()=>{this._element.classList.add(Sn),this._element.classList.remove(In),this._element.classList.remove(Nn),j.trigger(this._element,"hidden.bs.toast")}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this._element.classList.contains(Nn)&&this._element.classList.remove(Nn),super.dispose()}_getConfig(t){return t={...jn,...U.getDataAttributes(this._element),..."object"==typeof t&&t?t:{}},a(Dn,t,this.constructor.DefaultType),t}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){j.on(this._element,"mouseover.bs.toast",(t=>this._onInteraction(t,!0))),j.on(this._element,"mouseout.bs.toast",(t=>this._onInteraction(t,!1))),j.on(this._element,"focusin.bs.toast",(t=>this._onInteraction(t,!0))),j.on(this._element,"focusout.bs.toast",(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=Mn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return R(Mn),g(Mn),{Alert:W,Button:z,Carousel:st,Collapse:pt,Dropdown:hi,Modal:Hi,Offcanvas:Fi,Popover:gn,ScrollSpy:An,Tab:xn,Toast:Mn,Tooltip:un}})); +//# sourceMappingURL=bootstrap.bundle.min.js.map \ No newline at end of file diff --git a/js/jquery.js b/js/jquery.js new file mode 100644 index 0000000..3e3c8d8 --- /dev/null +++ b/js/jquery.js @@ -0,0 +1,5574 @@ +/*! jQuery v3.6.4 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!(function (e, t) { + 'use strict' + 'object' == typeof module && 'object' == typeof module.exports + ? (module.exports = e.document + ? t(e, !0) + : function (e) { + if (!e.document) + throw new Error('jQuery requires a window with a document') + return t(e) + }) + : t(e) +})('undefined' != typeof window ? window : this, function (C, e) { + 'use strict' + var t = [], + r = Object.getPrototypeOf, + s = t.slice, + g = t.flat + ? function (e) { + return t.flat.call(e) + } + : function (e) { + return t.concat.apply([], e) + }, + u = t.push, + i = t.indexOf, + n = {}, + o = n.toString, + y = n.hasOwnProperty, + a = y.toString, + l = a.call(Object), + v = {}, + m = function (e) { + return ( + 'function' == typeof e && + 'number' != typeof e.nodeType && + 'function' != typeof e.item + ) + }, + x = function (e) { + return null != e && e === e.window + }, + E = C.document, + c = { type: !0, src: !0, nonce: !0, noModule: !0 } + function b(e, t, n) { + var r, + i, + o = (n = n || E).createElement('script') + if (((o.text = e), t)) + for (r in c) + (i = t[r] || (t.getAttribute && t.getAttribute(r))) && + o.setAttribute(r, i) + n.head.appendChild(o).parentNode.removeChild(o) + } + function w(e) { + return null == e + ? e + '' + : 'object' == typeof e || 'function' == typeof e + ? n[o.call(e)] || 'object' + : typeof e + } + var f = '3.6.4', + S = function (e, t) { + return new S.fn.init(e, t) + } + function p(e) { + var t = !!e && 'length' in e && e.length, + n = w(e) + return ( + !m(e) && + !x(e) && + ('array' === n || + 0 === t || + ('number' == typeof t && 0 < t && t - 1 in e)) + ) + } + ;(S.fn = S.prototype = + { + jquery: f, + constructor: S, + length: 0, + toArray: function () { + return s.call(this) + }, + get: function (e) { + return null == e + ? s.call(this) + : e < 0 + ? this[e + this.length] + : this[e] + }, + pushStack: function (e) { + var t = S.merge(this.constructor(), e) + return (t.prevObject = this), t + }, + each: function (e) { + return S.each(this, e) + }, + map: function (n) { + return this.pushStack( + S.map(this, function (e, t) { + return n.call(e, t, e) + }) + ) + }, + slice: function () { + return this.pushStack(s.apply(this, arguments)) + }, + first: function () { + return this.eq(0) + }, + last: function () { + return this.eq(-1) + }, + even: function () { + return this.pushStack( + S.grep(this, function (e, t) { + return (t + 1) % 2 + }) + ) + }, + odd: function () { + return this.pushStack( + S.grep(this, function (e, t) { + return t % 2 + }) + ) + }, + eq: function (e) { + var t = this.length, + n = +e + (e < 0 ? t : 0) + return this.pushStack(0 <= n && n < t ? [this[n]] : []) + }, + end: function () { + return this.prevObject || this.constructor() + }, + push: u, + sort: t.sort, + splice: t.splice, + }), + (S.extend = S.fn.extend = + function () { + var e, + t, + n, + r, + i, + o, + a = arguments[0] || {}, + s = 1, + u = arguments.length, + l = !1 + for ( + 'boolean' == typeof a && ((l = a), (a = arguments[s] || {}), s++), + 'object' == typeof a || m(a) || (a = {}), + s === u && ((a = this), s--); + s < u; + s++ + ) + if (null != (e = arguments[s])) + for (t in e) + (r = e[t]), + '__proto__' !== t && + a !== r && + (l && r && (S.isPlainObject(r) || (i = Array.isArray(r))) + ? ((n = a[t]), + (o = + i && !Array.isArray(n) + ? [] + : i || S.isPlainObject(n) + ? n + : {}), + (i = !1), + (a[t] = S.extend(l, o, r))) + : void 0 !== r && (a[t] = r)) + return a + }), + S.extend({ + expando: 'jQuery' + (f + Math.random()).replace(/\D/g, ''), + isReady: !0, + error: function (e) { + throw new Error(e) + }, + noop: function () {}, + isPlainObject: function (e) { + var t, n + return ( + !(!e || '[object Object]' !== o.call(e)) && + (!(t = r(e)) || + ('function' == + typeof (n = y.call(t, 'constructor') && t.constructor) && + a.call(n) === l)) + ) + }, + isEmptyObject: function (e) { + var t + for (t in e) return !1 + return !0 + }, + globalEval: function (e, t, n) { + b(e, { nonce: t && t.nonce }, n) + }, + each: function (e, t) { + var n, + r = 0 + if (p(e)) { + for (n = e.length; r < n; r++) if (!1 === t.call(e[r], r, e[r])) break + } else for (r in e) if (!1 === t.call(e[r], r, e[r])) break + return e + }, + makeArray: function (e, t) { + var n = t || [] + return ( + null != e && + (p(Object(e)) + ? S.merge(n, 'string' == typeof e ? [e] : e) + : u.call(n, e)), + n + ) + }, + inArray: function (e, t, n) { + return null == t ? -1 : i.call(t, e, n) + }, + merge: function (e, t) { + for (var n = +t.length, r = 0, i = e.length; r < n; r++) e[i++] = t[r] + return (e.length = i), e + }, + grep: function (e, t, n) { + for (var r = [], i = 0, o = e.length, a = !n; i < o; i++) + !t(e[i], i) !== a && r.push(e[i]) + return r + }, + map: function (e, t, n) { + var r, + i, + o = 0, + a = [] + if (p(e)) + for (r = e.length; o < r; o++) + null != (i = t(e[o], o, n)) && a.push(i) + else for (o in e) null != (i = t(e[o], o, n)) && a.push(i) + return g(a) + }, + guid: 1, + support: v, + }), + 'function' == typeof Symbol && (S.fn[Symbol.iterator] = t[Symbol.iterator]), + S.each( + 'Boolean Number String Function Array Date RegExp Object Error Symbol'.split( + ' ' + ), + function (e, t) { + n['[object ' + t + ']'] = t.toLowerCase() + } + ) + var d = (function (n) { + var e, + d, + b, + o, + i, + h, + f, + g, + w, + u, + l, + T, + C, + a, + E, + y, + s, + c, + v, + S = 'sizzle' + 1 * new Date(), + p = n.document, + k = 0, + r = 0, + m = ue(), + x = ue(), + A = ue(), + N = ue(), + j = function (e, t) { + return e === t && (l = !0), 0 + }, + D = {}.hasOwnProperty, + t = [], + q = t.pop, + L = t.push, + H = t.push, + O = t.slice, + P = function (e, t) { + for (var n = 0, r = e.length; n < r; n++) if (e[n] === t) return n + return -1 + }, + R = + 'checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped', + M = '[\\x20\\t\\r\\n\\f]', + I = + '(?:\\\\[\\da-fA-F]{1,6}' + + M + + '?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+', + W = + '\\[' + + M + + '*(' + + I + + ')(?:' + + M + + '*([*^$|!~]?=)' + + M + + '*(?:\'((?:\\\\.|[^\\\\\'])*)\'|"((?:\\\\.|[^\\\\"])*)"|(' + + I + + '))|)' + + M + + '*\\]', + F = + ':(' + + I + + ')(?:\\(((\'((?:\\\\.|[^\\\\\'])*)\'|"((?:\\\\.|[^\\\\"])*)")|((?:\\\\.|[^\\\\()[\\]]|' + + W + + ')*)|.*)\\)|)', + $ = new RegExp(M + '+', 'g'), + B = new RegExp('^' + M + '+|((?:^|[^\\\\])(?:\\\\.)*)' + M + '+$', 'g'), + _ = new RegExp('^' + M + '*,' + M + '*'), + z = new RegExp('^' + M + '*([>+~]|' + M + ')' + M + '*'), + U = new RegExp(M + '|>'), + X = new RegExp(F), + V = new RegExp('^' + I + '$'), + G = { + ID: new RegExp('^#(' + I + ')'), + CLASS: new RegExp('^\\.(' + I + ')'), + TAG: new RegExp('^(' + I + '|[*])'), + ATTR: new RegExp('^' + W), + PSEUDO: new RegExp('^' + F), + CHILD: new RegExp( + '^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(' + + M + + '*(even|odd|(([+-]|)(\\d*)n|)' + + M + + '*(?:([+-]|)' + + M + + '*(\\d+)|))' + + M + + '*\\)|)', + 'i' + ), + bool: new RegExp('^(?:' + R + ')$', 'i'), + needsContext: new RegExp( + '^' + + M + + '*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(' + + M + + '*((?:-\\d)?\\d*)' + + M + + '*\\)|)(?=[^-]|$)', + 'i' + ), + }, + Y = /HTML$/i, + Q = /^(?:input|select|textarea|button)$/i, + J = /^h\d$/i, + K = /^[^{]+\{\s*\[native \w/, + Z = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + ee = /[+~]/, + te = new RegExp('\\\\[\\da-fA-F]{1,6}' + M + '?|\\\\([^\\r\\n\\f])', 'g'), + ne = function (e, t) { + var n = '0x' + e.slice(1) - 65536 + return ( + t || + (n < 0 + ? String.fromCharCode(n + 65536) + : String.fromCharCode((n >> 10) | 55296, (1023 & n) | 56320)) + ) + }, + re = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + ie = function (e, t) { + return t + ? '\0' === e + ? '\ufffd' + : e.slice(0, -1) + + '\\' + + e.charCodeAt(e.length - 1).toString(16) + + ' ' + : '\\' + e + }, + oe = function () { + T() + }, + ae = be( + function (e) { + return !0 === e.disabled && 'fieldset' === e.nodeName.toLowerCase() + }, + { dir: 'parentNode', next: 'legend' } + ) + try { + H.apply((t = O.call(p.childNodes)), p.childNodes), + t[p.childNodes.length].nodeType + } catch (e) { + H = { + apply: t.length + ? function (e, t) { + L.apply(e, O.call(t)) + } + : function (e, t) { + var n = e.length, + r = 0 + while ((e[n++] = t[r++])); + e.length = n - 1 + }, + } + } + function se(t, e, n, r) { + var i, + o, + a, + s, + u, + l, + c, + f = e && e.ownerDocument, + p = e ? e.nodeType : 9 + if ( + ((n = n || []), + 'string' != typeof t || !t || (1 !== p && 9 !== p && 11 !== p)) + ) + return n + if (!r && (T(e), (e = e || C), E)) { + if (11 !== p && (u = Z.exec(t))) + if ((i = u[1])) { + if (9 === p) { + if (!(a = e.getElementById(i))) return n + if (a.id === i) return n.push(a), n + } else if (f && (a = f.getElementById(i)) && v(e, a) && a.id === i) + return n.push(a), n + } else { + if (u[2]) return H.apply(n, e.getElementsByTagName(t)), n + if ( + (i = u[3]) && + d.getElementsByClassName && + e.getElementsByClassName + ) + return H.apply(n, e.getElementsByClassName(i)), n + } + if ( + d.qsa && + !N[t + ' '] && + (!y || !y.test(t)) && + (1 !== p || 'object' !== e.nodeName.toLowerCase()) + ) { + if (((c = t), (f = e), 1 === p && (U.test(t) || z.test(t)))) { + ;((f = (ee.test(t) && ve(e.parentNode)) || e) === e && d.scope) || + ((s = e.getAttribute('id')) + ? (s = s.replace(re, ie)) + : e.setAttribute('id', (s = S))), + (o = (l = h(t)).length) + while (o--) l[o] = (s ? '#' + s : ':scope') + ' ' + xe(l[o]) + c = l.join(',') + } + try { + return H.apply(n, f.querySelectorAll(c)), n + } catch (e) { + N(t, !0) + } finally { + s === S && e.removeAttribute('id') + } + } + } + return g(t.replace(B, '$1'), e, n, r) + } + function ue() { + var r = [] + return function e(t, n) { + return ( + r.push(t + ' ') > b.cacheLength && delete e[r.shift()], + (e[t + ' '] = n) + ) + } + } + function le(e) { + return (e[S] = !0), e + } + function ce(e) { + var t = C.createElement('fieldset') + try { + return !!e(t) + } catch (e) { + return !1 + } finally { + t.parentNode && t.parentNode.removeChild(t), (t = null) + } + } + function fe(e, t) { + var n = e.split('|'), + r = n.length + while (r--) b.attrHandle[n[r]] = t + } + function pe(e, t) { + var n = t && e, + r = + n && + 1 === e.nodeType && + 1 === t.nodeType && + e.sourceIndex - t.sourceIndex + if (r) return r + if (n) while ((n = n.nextSibling)) if (n === t) return -1 + return e ? 1 : -1 + } + function de(t) { + return function (e) { + return 'input' === e.nodeName.toLowerCase() && e.type === t + } + } + function he(n) { + return function (e) { + var t = e.nodeName.toLowerCase() + return ('input' === t || 'button' === t) && e.type === n + } + } + function ge(t) { + return function (e) { + return 'form' in e + ? e.parentNode && !1 === e.disabled + ? 'label' in e + ? 'label' in e.parentNode + ? e.parentNode.disabled === t + : e.disabled === t + : e.isDisabled === t || (e.isDisabled !== !t && ae(e) === t) + : e.disabled === t + : 'label' in e && e.disabled === t + } + } + function ye(a) { + return le(function (o) { + return ( + (o = +o), + le(function (e, t) { + var n, + r = a([], e.length, o), + i = r.length + while (i--) e[(n = r[i])] && (e[n] = !(t[n] = e[n])) + }) + ) + }) + } + function ve(e) { + return e && 'undefined' != typeof e.getElementsByTagName && e + } + for (e in ((d = se.support = {}), + (i = se.isXML = + function (e) { + var t = e && e.namespaceURI, + n = e && (e.ownerDocument || e).documentElement + return !Y.test(t || (n && n.nodeName) || 'HTML') + }), + (T = se.setDocument = + function (e) { + var t, + n, + r = e ? e.ownerDocument || e : p + return ( + r != C && + 9 === r.nodeType && + r.documentElement && + ((a = (C = r).documentElement), + (E = !i(C)), + p != C && + (n = C.defaultView) && + n.top !== n && + (n.addEventListener + ? n.addEventListener('unload', oe, !1) + : n.attachEvent && n.attachEvent('onunload', oe)), + (d.scope = ce(function (e) { + return ( + a.appendChild(e).appendChild(C.createElement('div')), + 'undefined' != typeof e.querySelectorAll && + !e.querySelectorAll(':scope fieldset div').length + ) + })), + (d.cssHas = ce(function () { + try { + return C.querySelector(':has(*,:jqfake)'), !1 + } catch (e) { + return !0 + } + })), + (d.attributes = ce(function (e) { + return (e.className = 'i'), !e.getAttribute('className') + })), + (d.getElementsByTagName = ce(function (e) { + return ( + e.appendChild(C.createComment('')), + !e.getElementsByTagName('*').length + ) + })), + (d.getElementsByClassName = K.test(C.getElementsByClassName)), + (d.getById = ce(function (e) { + return ( + (a.appendChild(e).id = S), + !C.getElementsByName || !C.getElementsByName(S).length + ) + })), + d.getById + ? ((b.filter.ID = function (e) { + var t = e.replace(te, ne) + return function (e) { + return e.getAttribute('id') === t + } + }), + (b.find.ID = function (e, t) { + if ('undefined' != typeof t.getElementById && E) { + var n = t.getElementById(e) + return n ? [n] : [] + } + })) + : ((b.filter.ID = function (e) { + var n = e.replace(te, ne) + return function (e) { + var t = + 'undefined' != typeof e.getAttributeNode && + e.getAttributeNode('id') + return t && t.value === n + } + }), + (b.find.ID = function (e, t) { + if ('undefined' != typeof t.getElementById && E) { + var n, + r, + i, + o = t.getElementById(e) + if (o) { + if ((n = o.getAttributeNode('id')) && n.value === e) + return [o] + ;(i = t.getElementsByName(e)), (r = 0) + while ((o = i[r++])) + if ((n = o.getAttributeNode('id')) && n.value === e) + return [o] + } + return [] + } + })), + (b.find.TAG = d.getElementsByTagName + ? function (e, t) { + return 'undefined' != typeof t.getElementsByTagName + ? t.getElementsByTagName(e) + : d.qsa + ? t.querySelectorAll(e) + : void 0 + } + : function (e, t) { + var n, + r = [], + i = 0, + o = t.getElementsByTagName(e) + if ('*' === e) { + while ((n = o[i++])) 1 === n.nodeType && r.push(n) + return r + } + return o + }), + (b.find.CLASS = + d.getElementsByClassName && + function (e, t) { + if ('undefined' != typeof t.getElementsByClassName && E) + return t.getElementsByClassName(e) + }), + (s = []), + (y = []), + (d.qsa = K.test(C.querySelectorAll)) && + (ce(function (e) { + var t + ;(a.appendChild(e).innerHTML = + ""), + e.querySelectorAll("[msallowcapture^='']").length && + y.push('[*^$]=' + M + '*(?:\'\'|"")'), + e.querySelectorAll('[selected]').length || + y.push('\\[' + M + '*(?:value|' + R + ')'), + e.querySelectorAll('[id~=' + S + '-]').length || y.push('~='), + (t = C.createElement('input')).setAttribute('name', ''), + e.appendChild(t), + e.querySelectorAll("[name='']").length || + y.push('\\[' + M + '*name' + M + '*=' + M + '*(?:\'\'|"")'), + e.querySelectorAll(':checked').length || y.push(':checked'), + e.querySelectorAll('a#' + S + '+*').length || + y.push('.#.+[+~]'), + e.querySelectorAll('\\\f'), + y.push('[\\r\\n\\f]') + }), + ce(function (e) { + e.innerHTML = + "" + var t = C.createElement('input') + t.setAttribute('type', 'hidden'), + e.appendChild(t).setAttribute('name', 'D'), + e.querySelectorAll('[name=d]').length && + y.push('name' + M + '*[*^$|!~]?='), + 2 !== e.querySelectorAll(':enabled').length && + y.push(':enabled', ':disabled'), + (a.appendChild(e).disabled = !0), + 2 !== e.querySelectorAll(':disabled').length && + y.push(':enabled', ':disabled'), + e.querySelectorAll('*,:x'), + y.push(',.*:') + })), + (d.matchesSelector = K.test( + (c = + a.matches || + a.webkitMatchesSelector || + a.mozMatchesSelector || + a.oMatchesSelector || + a.msMatchesSelector) + )) && + ce(function (e) { + ;(d.disconnectedMatch = c.call(e, '*')), + c.call(e, "[s!='']:x"), + s.push('!=', F) + }), + d.cssHas || y.push(':has'), + (y = y.length && new RegExp(y.join('|'))), + (s = s.length && new RegExp(s.join('|'))), + (t = K.test(a.compareDocumentPosition)), + (v = + t || K.test(a.contains) + ? function (e, t) { + var n = (9 === e.nodeType && e.documentElement) || e, + r = t && t.parentNode + return ( + e === r || + !( + !r || + 1 !== r.nodeType || + !(n.contains + ? n.contains(r) + : e.compareDocumentPosition && + 16 & e.compareDocumentPosition(r)) + ) + ) + } + : function (e, t) { + if (t) while ((t = t.parentNode)) if (t === e) return !0 + return !1 + }), + (j = t + ? function (e, t) { + if (e === t) return (l = !0), 0 + var n = + !e.compareDocumentPosition - !t.compareDocumentPosition + return ( + n || + (1 & + (n = + (e.ownerDocument || e) == (t.ownerDocument || t) + ? e.compareDocumentPosition(t) + : 1) || + (!d.sortDetached && t.compareDocumentPosition(e) === n) + ? e == C || (e.ownerDocument == p && v(p, e)) + ? -1 + : t == C || (t.ownerDocument == p && v(p, t)) + ? 1 + : u + ? P(u, e) - P(u, t) + : 0 + : 4 & n + ? -1 + : 1) + ) + } + : function (e, t) { + if (e === t) return (l = !0), 0 + var n, + r = 0, + i = e.parentNode, + o = t.parentNode, + a = [e], + s = [t] + if (!i || !o) + return e == C + ? -1 + : t == C + ? 1 + : i + ? -1 + : o + ? 1 + : u + ? P(u, e) - P(u, t) + : 0 + if (i === o) return pe(e, t) + n = e + while ((n = n.parentNode)) a.unshift(n) + n = t + while ((n = n.parentNode)) s.unshift(n) + while (a[r] === s[r]) r++ + return r ? pe(a[r], s[r]) : a[r] == p ? -1 : s[r] == p ? 1 : 0 + })), + C + ) + }), + (se.matches = function (e, t) { + return se(e, null, null, t) + }), + (se.matchesSelector = function (e, t) { + if ( + (T(e), + d.matchesSelector && + E && + !N[t + ' '] && + (!s || !s.test(t)) && + (!y || !y.test(t))) + ) + try { + var n = c.call(e, t) + if ( + n || + d.disconnectedMatch || + (e.document && 11 !== e.document.nodeType) + ) + return n + } catch (e) { + N(t, !0) + } + return 0 < se(t, C, null, [e]).length + }), + (se.contains = function (e, t) { + return (e.ownerDocument || e) != C && T(e), v(e, t) + }), + (se.attr = function (e, t) { + ;(e.ownerDocument || e) != C && T(e) + var n = b.attrHandle[t.toLowerCase()], + r = n && D.call(b.attrHandle, t.toLowerCase()) ? n(e, t, !E) : void 0 + return void 0 !== r + ? r + : d.attributes || !E + ? e.getAttribute(t) + : (r = e.getAttributeNode(t)) && r.specified + ? r.value + : null + }), + (se.escape = function (e) { + return (e + '').replace(re, ie) + }), + (se.error = function (e) { + throw new Error('Syntax error, unrecognized expression: ' + e) + }), + (se.uniqueSort = function (e) { + var t, + n = [], + r = 0, + i = 0 + if ( + ((l = !d.detectDuplicates), + (u = !d.sortStable && e.slice(0)), + e.sort(j), + l) + ) { + while ((t = e[i++])) t === e[i] && (r = n.push(i)) + while (r--) e.splice(n[r], 1) + } + return (u = null), e + }), + (o = se.getText = + function (e) { + var t, + n = '', + r = 0, + i = e.nodeType + if (i) { + if (1 === i || 9 === i || 11 === i) { + if ('string' == typeof e.textContent) return e.textContent + for (e = e.firstChild; e; e = e.nextSibling) n += o(e) + } else if (3 === i || 4 === i) return e.nodeValue + } else while ((t = e[r++])) n += o(t) + return n + }), + ((b = se.selectors = + { + cacheLength: 50, + createPseudo: le, + match: G, + attrHandle: {}, + find: {}, + relative: { + '>': { dir: 'parentNode', first: !0 }, + ' ': { dir: 'parentNode' }, + '+': { dir: 'previousSibling', first: !0 }, + '~': { dir: 'previousSibling' }, + }, + preFilter: { + ATTR: function (e) { + return ( + (e[1] = e[1].replace(te, ne)), + (e[3] = (e[3] || e[4] || e[5] || '').replace(te, ne)), + '~=' === e[2] && (e[3] = ' ' + e[3] + ' '), + e.slice(0, 4) + ) + }, + CHILD: function (e) { + return ( + (e[1] = e[1].toLowerCase()), + 'nth' === e[1].slice(0, 3) + ? (e[3] || se.error(e[0]), + (e[4] = +(e[4] + ? e[5] + (e[6] || 1) + : 2 * ('even' === e[3] || 'odd' === e[3]))), + (e[5] = +(e[7] + e[8] || 'odd' === e[3]))) + : e[3] && se.error(e[0]), + e + ) + }, + PSEUDO: function (e) { + var t, + n = !e[6] && e[2] + return G.CHILD.test(e[0]) + ? null + : (e[3] + ? (e[2] = e[4] || e[5] || '') + : n && + X.test(n) && + (t = h(n, !0)) && + (t = n.indexOf(')', n.length - t) - n.length) && + ((e[0] = e[0].slice(0, t)), (e[2] = n.slice(0, t))), + e.slice(0, 3)) + }, + }, + filter: { + TAG: function (e) { + var t = e.replace(te, ne).toLowerCase() + return '*' === e + ? function () { + return !0 + } + : function (e) { + return e.nodeName && e.nodeName.toLowerCase() === t + } + }, + CLASS: function (e) { + var t = m[e + ' '] + return ( + t || + ((t = new RegExp('(^|' + M + ')' + e + '(' + M + '|$)')) && + m(e, function (e) { + return t.test( + ('string' == typeof e.className && e.className) || + ('undefined' != typeof e.getAttribute && + e.getAttribute('class')) || + '' + ) + })) + ) + }, + ATTR: function (n, r, i) { + return function (e) { + var t = se.attr(e, n) + return null == t + ? '!=' === r + : !r || + ((t += ''), + '=' === r + ? t === i + : '!=' === r + ? t !== i + : '^=' === r + ? i && 0 === t.indexOf(i) + : '*=' === r + ? i && -1 < t.indexOf(i) + : '$=' === r + ? i && t.slice(-i.length) === i + : '~=' === r + ? -1 < (' ' + t.replace($, ' ') + ' ').indexOf(i) + : '|=' === r && + (t === i || t.slice(0, i.length + 1) === i + '-')) + } + }, + CHILD: function (h, e, t, g, y) { + var v = 'nth' !== h.slice(0, 3), + m = 'last' !== h.slice(-4), + x = 'of-type' === e + return 1 === g && 0 === y + ? function (e) { + return !!e.parentNode + } + : function (e, t, n) { + var r, + i, + o, + a, + s, + u, + l = v !== m ? 'nextSibling' : 'previousSibling', + c = e.parentNode, + f = x && e.nodeName.toLowerCase(), + p = !n && !x, + d = !1 + if (c) { + if (v) { + while (l) { + a = e + while ((a = a[l])) + if ( + x + ? a.nodeName.toLowerCase() === f + : 1 === a.nodeType + ) + return !1 + u = l = 'only' === h && !u && 'nextSibling' + } + return !0 + } + if (((u = [m ? c.firstChild : c.lastChild]), m && p)) { + ;(d = + (s = + (r = + (i = + (o = (a = c)[S] || (a[S] = {}))[a.uniqueID] || + (o[a.uniqueID] = {}))[h] || [])[0] === k && + r[1]) && r[2]), + (a = s && c.childNodes[s]) + while ((a = (++s && a && a[l]) || (d = s = 0) || u.pop())) + if (1 === a.nodeType && ++d && a === e) { + i[h] = [k, s, d] + break + } + } else if ( + (p && + (d = s = + (r = + (i = + (o = (a = e)[S] || (a[S] = {}))[a.uniqueID] || + (o[a.uniqueID] = {}))[h] || [])[0] === k && r[1]), + !1 === d) + ) + while ((a = (++s && a && a[l]) || (d = s = 0) || u.pop())) + if ( + (x + ? a.nodeName.toLowerCase() === f + : 1 === a.nodeType) && + ++d && + (p && + ((i = + (o = a[S] || (a[S] = {}))[a.uniqueID] || + (o[a.uniqueID] = {}))[h] = [k, d]), + a === e) + ) + break + return (d -= y) === g || (d % g == 0 && 0 <= d / g) + } + } + }, + PSEUDO: function (e, o) { + var t, + a = + b.pseudos[e] || + b.setFilters[e.toLowerCase()] || + se.error('unsupported pseudo: ' + e) + return a[S] + ? a(o) + : 1 < a.length + ? ((t = [e, e, '', o]), + b.setFilters.hasOwnProperty(e.toLowerCase()) + ? le(function (e, t) { + var n, + r = a(e, o), + i = r.length + while (i--) e[(n = P(e, r[i]))] = !(t[n] = r[i]) + }) + : function (e) { + return a(e, 0, t) + }) + : a + }, + }, + pseudos: { + not: le(function (e) { + var r = [], + i = [], + s = f(e.replace(B, '$1')) + return s[S] + ? le(function (e, t, n, r) { + var i, + o = s(e, null, r, []), + a = e.length + while (a--) (i = o[a]) && (e[a] = !(t[a] = i)) + }) + : function (e, t, n) { + return (r[0] = e), s(r, null, n, i), (r[0] = null), !i.pop() + } + }), + has: le(function (t) { + return function (e) { + return 0 < se(t, e).length + } + }), + contains: le(function (t) { + return ( + (t = t.replace(te, ne)), + function (e) { + return -1 < (e.textContent || o(e)).indexOf(t) + } + ) + }), + lang: le(function (n) { + return ( + V.test(n || '') || se.error('unsupported lang: ' + n), + (n = n.replace(te, ne).toLowerCase()), + function (e) { + var t + do { + if ( + (t = E + ? e.lang + : e.getAttribute('xml:lang') || e.getAttribute('lang')) + ) + return ( + (t = t.toLowerCase()) === n || 0 === t.indexOf(n + '-') + ) + } while ((e = e.parentNode) && 1 === e.nodeType) + return !1 + } + ) + }), + target: function (e) { + var t = n.location && n.location.hash + return t && t.slice(1) === e.id + }, + root: function (e) { + return e === a + }, + focus: function (e) { + return ( + e === C.activeElement && + (!C.hasFocus || C.hasFocus()) && + !!(e.type || e.href || ~e.tabIndex) + ) + }, + enabled: ge(!1), + disabled: ge(!0), + checked: function (e) { + var t = e.nodeName.toLowerCase() + return ( + ('input' === t && !!e.checked) || ('option' === t && !!e.selected) + ) + }, + selected: function (e) { + return e.parentNode && e.parentNode.selectedIndex, !0 === e.selected + }, + empty: function (e) { + for (e = e.firstChild; e; e = e.nextSibling) + if (e.nodeType < 6) return !1 + return !0 + }, + parent: function (e) { + return !b.pseudos.empty(e) + }, + header: function (e) { + return J.test(e.nodeName) + }, + input: function (e) { + return Q.test(e.nodeName) + }, + button: function (e) { + var t = e.nodeName.toLowerCase() + return ('input' === t && 'button' === e.type) || 'button' === t + }, + text: function (e) { + var t + return ( + 'input' === e.nodeName.toLowerCase() && + 'text' === e.type && + (null == (t = e.getAttribute('type')) || + 'text' === t.toLowerCase()) + ) + }, + first: ye(function () { + return [0] + }), + last: ye(function (e, t) { + return [t - 1] + }), + eq: ye(function (e, t, n) { + return [n < 0 ? n + t : n] + }), + even: ye(function (e, t) { + for (var n = 0; n < t; n += 2) e.push(n) + return e + }), + odd: ye(function (e, t) { + for (var n = 1; n < t; n += 2) e.push(n) + return e + }), + lt: ye(function (e, t, n) { + for (var r = n < 0 ? n + t : t < n ? t : n; 0 <= --r; ) e.push(r) + return e + }), + gt: ye(function (e, t, n) { + for (var r = n < 0 ? n + t : n; ++r < t; ) e.push(r) + return e + }), + }, + }).pseudos.nth = b.pseudos.eq), + { radio: !0, checkbox: !0, file: !0, password: !0, image: !0 })) + b.pseudos[e] = de(e) + for (e in { submit: !0, reset: !0 }) b.pseudos[e] = he(e) + function me() {} + function xe(e) { + for (var t = 0, n = e.length, r = ''; t < n; t++) r += e[t].value + return r + } + function be(s, e, t) { + var u = e.dir, + l = e.next, + c = l || u, + f = t && 'parentNode' === c, + p = r++ + return e.first + ? function (e, t, n) { + while ((e = e[u])) if (1 === e.nodeType || f) return s(e, t, n) + return !1 + } + : function (e, t, n) { + var r, + i, + o, + a = [k, p] + if (n) { + while ((e = e[u])) + if ((1 === e.nodeType || f) && s(e, t, n)) return !0 + } else + while ((e = e[u])) + if (1 === e.nodeType || f) + if ( + ((i = + (o = e[S] || (e[S] = {}))[e.uniqueID] || + (o[e.uniqueID] = {})), + l && l === e.nodeName.toLowerCase()) + ) + e = e[u] || e + else { + if ((r = i[c]) && r[0] === k && r[1] === p) + return (a[2] = r[2]) + if (((i[c] = a)[2] = s(e, t, n))) return !0 + } + return !1 + } + } + function we(i) { + return 1 < i.length + ? function (e, t, n) { + var r = i.length + while (r--) if (!i[r](e, t, n)) return !1 + return !0 + } + : i[0] + } + function Te(e, t, n, r, i) { + for (var o, a = [], s = 0, u = e.length, l = null != t; s < u; s++) + (o = e[s]) && ((n && !n(o, r, i)) || (a.push(o), l && t.push(s))) + return a + } + function Ce(d, h, g, y, v, e) { + return ( + y && !y[S] && (y = Ce(y)), + v && !v[S] && (v = Ce(v, e)), + le(function (e, t, n, r) { + var i, + o, + a, + s = [], + u = [], + l = t.length, + c = + e || + (function (e, t, n) { + for (var r = 0, i = t.length; r < i; r++) se(e, t[r], n) + return n + })(h || '*', n.nodeType ? [n] : n, []), + f = !d || (!e && h) ? c : Te(c, s, d, n, r), + p = g ? (v || (e ? d : l || y) ? [] : t) : f + if ((g && g(f, p, n, r), y)) { + ;(i = Te(p, u)), y(i, [], n, r), (o = i.length) + while (o--) (a = i[o]) && (p[u[o]] = !(f[u[o]] = a)) + } + if (e) { + if (v || d) { + if (v) { + ;(i = []), (o = p.length) + while (o--) (a = p[o]) && i.push((f[o] = a)) + v(null, (p = []), i, r) + } + o = p.length + while (o--) + (a = p[o]) && + -1 < (i = v ? P(e, a) : s[o]) && + (e[i] = !(t[i] = a)) + } + } else (p = Te(p === t ? p.splice(l, p.length) : p)), v ? v(null, t, p, r) : H.apply(t, p) + }) + ) + } + function Ee(e) { + for ( + var i, + t, + n, + r = e.length, + o = b.relative[e[0].type], + a = o || b.relative[' '], + s = o ? 1 : 0, + u = be( + function (e) { + return e === i + }, + a, + !0 + ), + l = be( + function (e) { + return -1 < P(i, e) + }, + a, + !0 + ), + c = [ + function (e, t, n) { + var r = + (!o && (n || t !== w)) || + ((i = t).nodeType ? u(e, t, n) : l(e, t, n)) + return (i = null), r + }, + ]; + s < r; + s++ + ) + if ((t = b.relative[e[s].type])) c = [be(we(c), t)] + else { + if ((t = b.filter[e[s].type].apply(null, e[s].matches))[S]) { + for (n = ++s; n < r; n++) if (b.relative[e[n].type]) break + return Ce( + 1 < s && we(c), + 1 < s && + xe( + e + .slice(0, s - 1) + .concat({ value: ' ' === e[s - 2].type ? '*' : '' }) + ).replace(B, '$1'), + t, + s < n && Ee(e.slice(s, n)), + n < r && Ee((e = e.slice(n))), + n < r && xe(e) + ) + } + c.push(t) + } + return we(c) + } + return ( + (me.prototype = b.filters = b.pseudos), + (b.setFilters = new me()), + (h = se.tokenize = + function (e, t) { + var n, + r, + i, + o, + a, + s, + u, + l = x[e + ' '] + if (l) return t ? 0 : l.slice(0) + ;(a = e), (s = []), (u = b.preFilter) + while (a) { + for (o in ((n && !(r = _.exec(a))) || + (r && (a = a.slice(r[0].length) || a), s.push((i = []))), + (n = !1), + (r = z.exec(a)) && + ((n = r.shift()), + i.push({ value: n, type: r[0].replace(B, ' ') }), + (a = a.slice(n.length))), + b.filter)) + !(r = G[o].exec(a)) || + (u[o] && !(r = u[o](r))) || + ((n = r.shift()), + i.push({ value: n, type: o, matches: r }), + (a = a.slice(n.length))) + if (!n) break + } + return t ? a.length : a ? se.error(e) : x(e, s).slice(0) + }), + (f = se.compile = + function (e, t) { + var n, + y, + v, + m, + x, + r, + i = [], + o = [], + a = A[e + ' '] + if (!a) { + t || (t = h(e)), (n = t.length) + while (n--) (a = Ee(t[n]))[S] ? i.push(a) : o.push(a) + ;(a = A( + e, + ((y = o), + (m = 0 < (v = i).length), + (x = 0 < y.length), + (r = function (e, t, n, r, i) { + var o, + a, + s, + u = 0, + l = '0', + c = e && [], + f = [], + p = w, + d = e || (x && b.find.TAG('*', i)), + h = (k += null == p ? 1 : Math.random() || 0.1), + g = d.length + for ( + i && (w = t == C || t || i); + l !== g && null != (o = d[l]); + l++ + ) { + if (x && o) { + ;(a = 0), t || o.ownerDocument == C || (T(o), (n = !E)) + while ((s = y[a++])) + if (s(o, t || C, n)) { + r.push(o) + break + } + i && (k = h) + } + m && ((o = !s && o) && u--, e && c.push(o)) + } + if (((u += l), m && l !== u)) { + a = 0 + while ((s = v[a++])) s(c, f, t, n) + if (e) { + if (0 < u) while (l--) c[l] || f[l] || (f[l] = q.call(r)) + f = Te(f) + } + H.apply(r, f), + i && + !e && + 0 < f.length && + 1 < u + v.length && + se.uniqueSort(r) + } + return i && ((k = h), (w = p)), c + }), + m ? le(r) : r) + )).selector = e + } + return a + }), + (g = se.select = + function (e, t, n, r) { + var i, + o, + a, + s, + u, + l = 'function' == typeof e && e, + c = !r && h((e = l.selector || e)) + if (((n = n || []), 1 === c.length)) { + if ( + 2 < (o = c[0] = c[0].slice(0)).length && + 'ID' === (a = o[0]).type && + 9 === t.nodeType && + E && + b.relative[o[1].type] + ) { + if (!(t = (b.find.ID(a.matches[0].replace(te, ne), t) || [])[0])) + return n + l && (t = t.parentNode), (e = e.slice(o.shift().value.length)) + } + i = G.needsContext.test(e) ? 0 : o.length + while (i--) { + if (((a = o[i]), b.relative[(s = a.type)])) break + if ( + (u = b.find[s]) && + (r = u( + a.matches[0].replace(te, ne), + (ee.test(o[0].type) && ve(t.parentNode)) || t + )) + ) { + if ((o.splice(i, 1), !(e = r.length && xe(o)))) + return H.apply(n, r), n + break + } + } + } + return ( + (l || f(e, c))( + r, + t, + !E, + n, + !t || (ee.test(e) && ve(t.parentNode)) || t + ), + n + ) + }), + (d.sortStable = S.split('').sort(j).join('') === S), + (d.detectDuplicates = !!l), + T(), + (d.sortDetached = ce(function (e) { + return 1 & e.compareDocumentPosition(C.createElement('fieldset')) + })), + ce(function (e) { + return ( + (e.innerHTML = ""), + '#' === e.firstChild.getAttribute('href') + ) + }) || + fe('type|href|height|width', function (e, t, n) { + if (!n) return e.getAttribute(t, 'type' === t.toLowerCase() ? 1 : 2) + }), + (d.attributes && + ce(function (e) { + return ( + (e.innerHTML = ''), + e.firstChild.setAttribute('value', ''), + '' === e.firstChild.getAttribute('value') + ) + })) || + fe('value', function (e, t, n) { + if (!n && 'input' === e.nodeName.toLowerCase()) return e.defaultValue + }), + ce(function (e) { + return null == e.getAttribute('disabled') + }) || + fe(R, function (e, t, n) { + var r + if (!n) + return !0 === e[t] + ? t.toLowerCase() + : (r = e.getAttributeNode(t)) && r.specified + ? r.value + : null + }), + se + ) + })(C) + ;(S.find = d), + (S.expr = d.selectors), + (S.expr[':'] = S.expr.pseudos), + (S.uniqueSort = S.unique = d.uniqueSort), + (S.text = d.getText), + (S.isXMLDoc = d.isXML), + (S.contains = d.contains), + (S.escapeSelector = d.escape) + var h = function (e, t, n) { + var r = [], + i = void 0 !== n + while ((e = e[t]) && 9 !== e.nodeType) + if (1 === e.nodeType) { + if (i && S(e).is(n)) break + r.push(e) + } + return r + }, + T = function (e, t) { + for (var n = []; e; e = e.nextSibling) + 1 === e.nodeType && e !== t && n.push(e) + return n + }, + k = S.expr.match.needsContext + function A(e, t) { + return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase() + } + var N = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i + function j(e, n, r) { + return m(n) + ? S.grep(e, function (e, t) { + return !!n.call(e, t, e) !== r + }) + : n.nodeType + ? S.grep(e, function (e) { + return (e === n) !== r + }) + : 'string' != typeof n + ? S.grep(e, function (e) { + return -1 < i.call(n, e) !== r + }) + : S.filter(n, e, r) + } + ;(S.filter = function (e, t, n) { + var r = t[0] + return ( + n && (e = ':not(' + e + ')'), + 1 === t.length && 1 === r.nodeType + ? S.find.matchesSelector(r, e) + ? [r] + : [] + : S.find.matches( + e, + S.grep(t, function (e) { + return 1 === e.nodeType + }) + ) + ) + }), + S.fn.extend({ + find: function (e) { + var t, + n, + r = this.length, + i = this + if ('string' != typeof e) + return this.pushStack( + S(e).filter(function () { + for (t = 0; t < r; t++) if (S.contains(i[t], this)) return !0 + }) + ) + for (n = this.pushStack([]), t = 0; t < r; t++) S.find(e, i[t], n) + return 1 < r ? S.uniqueSort(n) : n + }, + filter: function (e) { + return this.pushStack(j(this, e || [], !1)) + }, + not: function (e) { + return this.pushStack(j(this, e || [], !0)) + }, + is: function (e) { + return !!j(this, 'string' == typeof e && k.test(e) ? S(e) : e || [], !1) + .length + }, + }) + var D, + q = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/ + ;((S.fn.init = function (e, t, n) { + var r, i + if (!e) return this + if (((n = n || D), 'string' == typeof e)) { + if ( + !(r = + '<' === e[0] && '>' === e[e.length - 1] && 3 <= e.length + ? [null, e, null] + : q.exec(e)) || + (!r[1] && t) + ) + return !t || t.jquery ? (t || n).find(e) : this.constructor(t).find(e) + if (r[1]) { + if ( + ((t = t instanceof S ? t[0] : t), + S.merge( + this, + S.parseHTML(r[1], t && t.nodeType ? t.ownerDocument || t : E, !0) + ), + N.test(r[1]) && S.isPlainObject(t)) + ) + for (r in t) m(this[r]) ? this[r](t[r]) : this.attr(r, t[r]) + return this + } + return ( + (i = E.getElementById(r[2])) && ((this[0] = i), (this.length = 1)), this + ) + } + return e.nodeType + ? ((this[0] = e), (this.length = 1), this) + : m(e) + ? void 0 !== n.ready + ? n.ready(e) + : e(S) + : S.makeArray(e, this) + }).prototype = S.fn), + (D = S(E)) + var L = /^(?:parents|prev(?:Until|All))/, + H = { children: !0, contents: !0, next: !0, prev: !0 } + function O(e, t) { + while ((e = e[t]) && 1 !== e.nodeType); + return e + } + S.fn.extend({ + has: function (e) { + var t = S(e, this), + n = t.length + return this.filter(function () { + for (var e = 0; e < n; e++) if (S.contains(this, t[e])) return !0 + }) + }, + closest: function (e, t) { + var n, + r = 0, + i = this.length, + o = [], + a = 'string' != typeof e && S(e) + if (!k.test(e)) + for (; r < i; r++) + for (n = this[r]; n && n !== t; n = n.parentNode) + if ( + n.nodeType < 11 && + (a + ? -1 < a.index(n) + : 1 === n.nodeType && S.find.matchesSelector(n, e)) + ) { + o.push(n) + break + } + return this.pushStack(1 < o.length ? S.uniqueSort(o) : o) + }, + index: function (e) { + return e + ? 'string' == typeof e + ? i.call(S(e), this[0]) + : i.call(this, e.jquery ? e[0] : e) + : this[0] && this[0].parentNode + ? this.first().prevAll().length + : -1 + }, + add: function (e, t) { + return this.pushStack(S.uniqueSort(S.merge(this.get(), S(e, t)))) + }, + addBack: function (e) { + return this.add(null == e ? this.prevObject : this.prevObject.filter(e)) + }, + }), + S.each( + { + parent: function (e) { + var t = e.parentNode + return t && 11 !== t.nodeType ? t : null + }, + parents: function (e) { + return h(e, 'parentNode') + }, + parentsUntil: function (e, t, n) { + return h(e, 'parentNode', n) + }, + next: function (e) { + return O(e, 'nextSibling') + }, + prev: function (e) { + return O(e, 'previousSibling') + }, + nextAll: function (e) { + return h(e, 'nextSibling') + }, + prevAll: function (e) { + return h(e, 'previousSibling') + }, + nextUntil: function (e, t, n) { + return h(e, 'nextSibling', n) + }, + prevUntil: function (e, t, n) { + return h(e, 'previousSibling', n) + }, + siblings: function (e) { + return T((e.parentNode || {}).firstChild, e) + }, + children: function (e) { + return T(e.firstChild) + }, + contents: function (e) { + return null != e.contentDocument && r(e.contentDocument) + ? e.contentDocument + : (A(e, 'template') && (e = e.content || e), + S.merge([], e.childNodes)) + }, + }, + function (r, i) { + S.fn[r] = function (e, t) { + var n = S.map(this, i, e) + return ( + 'Until' !== r.slice(-5) && (t = e), + t && 'string' == typeof t && (n = S.filter(t, n)), + 1 < this.length && + (H[r] || S.uniqueSort(n), L.test(r) && n.reverse()), + this.pushStack(n) + ) + } + } + ) + var P = /[^\x20\t\r\n\f]+/g + function R(e) { + return e + } + function M(e) { + throw e + } + function I(e, t, n, r) { + var i + try { + e && m((i = e.promise)) + ? i.call(e).done(t).fail(n) + : e && m((i = e.then)) + ? i.call(e, t, n) + : t.apply(void 0, [e].slice(r)) + } catch (e) { + n.apply(void 0, [e]) + } + } + ;(S.Callbacks = function (r) { + var e, n + r = + 'string' == typeof r + ? ((e = r), + (n = {}), + S.each(e.match(P) || [], function (e, t) { + n[t] = !0 + }), + n) + : S.extend({}, r) + var i, + t, + o, + a, + s = [], + u = [], + l = -1, + c = function () { + for (a = a || r.once, o = i = !0; u.length; l = -1) { + t = u.shift() + while (++l < s.length) + !1 === s[l].apply(t[0], t[1]) && + r.stopOnFalse && + ((l = s.length), (t = !1)) + } + r.memory || (t = !1), (i = !1), a && (s = t ? [] : '') + }, + f = { + add: function () { + return ( + s && + (t && !i && ((l = s.length - 1), u.push(t)), + (function n(e) { + S.each(e, function (e, t) { + m(t) + ? (r.unique && f.has(t)) || s.push(t) + : t && t.length && 'string' !== w(t) && n(t) + }) + })(arguments), + t && !i && c()), + this + ) + }, + remove: function () { + return ( + S.each(arguments, function (e, t) { + var n + while (-1 < (n = S.inArray(t, s, n))) + s.splice(n, 1), n <= l && l-- + }), + this + ) + }, + has: function (e) { + return e ? -1 < S.inArray(e, s) : 0 < s.length + }, + empty: function () { + return s && (s = []), this + }, + disable: function () { + return (a = u = []), (s = t = ''), this + }, + disabled: function () { + return !s + }, + lock: function () { + return (a = u = []), t || i || (s = t = ''), this + }, + locked: function () { + return !!a + }, + fireWith: function (e, t) { + return ( + a || + ((t = [e, (t = t || []).slice ? t.slice() : t]), + u.push(t), + i || c()), + this + ) + }, + fire: function () { + return f.fireWith(this, arguments), this + }, + fired: function () { + return !!o + }, + } + return f + }), + S.extend({ + Deferred: function (e) { + var o = [ + [ + 'notify', + 'progress', + S.Callbacks('memory'), + S.Callbacks('memory'), + 2, + ], + [ + 'resolve', + 'done', + S.Callbacks('once memory'), + S.Callbacks('once memory'), + 0, + 'resolved', + ], + [ + 'reject', + 'fail', + S.Callbacks('once memory'), + S.Callbacks('once memory'), + 1, + 'rejected', + ], + ], + i = 'pending', + a = { + state: function () { + return i + }, + always: function () { + return s.done(arguments).fail(arguments), this + }, + catch: function (e) { + return a.then(null, e) + }, + pipe: function () { + var i = arguments + return S.Deferred(function (r) { + S.each(o, function (e, t) { + var n = m(i[t[4]]) && i[t[4]] + s[t[1]](function () { + var e = n && n.apply(this, arguments) + e && m(e.promise) + ? e + .promise() + .progress(r.notify) + .done(r.resolve) + .fail(r.reject) + : r[t[0] + 'With'](this, n ? [e] : arguments) + }) + }), + (i = null) + }).promise() + }, + then: function (t, n, r) { + var u = 0 + function l(i, o, a, s) { + return function () { + var n = this, + r = arguments, + e = function () { + var e, t + if (!(i < u)) { + if ((e = a.apply(n, r)) === o.promise()) + throw new TypeError('Thenable self-resolution') + ;(t = + e && + ('object' == typeof e || 'function' == typeof e) && + e.then), + m(t) + ? s + ? t.call(e, l(u, o, R, s), l(u, o, M, s)) + : (u++, + t.call( + e, + l(u, o, R, s), + l(u, o, M, s), + l(u, o, R, o.notifyWith) + )) + : (a !== R && ((n = void 0), (r = [e])), + (s || o.resolveWith)(n, r)) + } + }, + t = s + ? e + : function () { + try { + e() + } catch (e) { + S.Deferred.exceptionHook && + S.Deferred.exceptionHook(e, t.stackTrace), + u <= i + 1 && + (a !== M && ((n = void 0), (r = [e])), + o.rejectWith(n, r)) + } + } + i + ? t() + : (S.Deferred.getStackHook && + (t.stackTrace = S.Deferred.getStackHook()), + C.setTimeout(t)) + } + } + return S.Deferred(function (e) { + o[0][3].add(l(0, e, m(r) ? r : R, e.notifyWith)), + o[1][3].add(l(0, e, m(t) ? t : R)), + o[2][3].add(l(0, e, m(n) ? n : M)) + }).promise() + }, + promise: function (e) { + return null != e ? S.extend(e, a) : a + }, + }, + s = {} + return ( + S.each(o, function (e, t) { + var n = t[2], + r = t[5] + ;(a[t[1]] = n.add), + r && + n.add( + function () { + i = r + }, + o[3 - e][2].disable, + o[3 - e][3].disable, + o[0][2].lock, + o[0][3].lock + ), + n.add(t[3].fire), + (s[t[0]] = function () { + return ( + s[t[0] + 'With'](this === s ? void 0 : this, arguments), this + ) + }), + (s[t[0] + 'With'] = n.fireWith) + }), + a.promise(s), + e && e.call(s, s), + s + ) + }, + when: function (e) { + var n = arguments.length, + t = n, + r = Array(t), + i = s.call(arguments), + o = S.Deferred(), + a = function (t) { + return function (e) { + ;(r[t] = this), + (i[t] = 1 < arguments.length ? s.call(arguments) : e), + --n || o.resolveWith(r, i) + } + } + if ( + n <= 1 && + (I(e, o.done(a(t)).resolve, o.reject, !n), + 'pending' === o.state() || m(i[t] && i[t].then)) + ) + return o.then() + while (t--) I(i[t], a(t), o.reject) + return o.promise() + }, + }) + var W = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/ + ;(S.Deferred.exceptionHook = function (e, t) { + C.console && + C.console.warn && + e && + W.test(e.name) && + C.console.warn('jQuery.Deferred exception: ' + e.message, e.stack, t) + }), + (S.readyException = function (e) { + C.setTimeout(function () { + throw e + }) + }) + var F = S.Deferred() + function $() { + E.removeEventListener('DOMContentLoaded', $), + C.removeEventListener('load', $), + S.ready() + } + ;(S.fn.ready = function (e) { + return ( + F.then(e)['catch'](function (e) { + S.readyException(e) + }), + this + ) + }), + S.extend({ + isReady: !1, + readyWait: 1, + ready: function (e) { + ;(!0 === e ? --S.readyWait : S.isReady) || + ((S.isReady = !0) !== e && 0 < --S.readyWait) || + F.resolveWith(E, [S]) + }, + }), + (S.ready.then = F.then), + 'complete' === E.readyState || + ('loading' !== E.readyState && !E.documentElement.doScroll) + ? C.setTimeout(S.ready) + : (E.addEventListener('DOMContentLoaded', $), + C.addEventListener('load', $)) + var B = function (e, t, n, r, i, o, a) { + var s = 0, + u = e.length, + l = null == n + if ('object' === w(n)) for (s in ((i = !0), n)) B(e, t, s, n[s], !0, o, a) + else if ( + void 0 !== r && + ((i = !0), + m(r) || (a = !0), + l && + (a + ? (t.call(e, r), (t = null)) + : ((l = t), + (t = function (e, t, n) { + return l.call(S(e), n) + }))), + t) + ) + for (; s < u; s++) t(e[s], n, a ? r : r.call(e[s], s, t(e[s], n))) + return i ? e : l ? t.call(e) : u ? t(e[0], n) : o + }, + _ = /^-ms-/, + z = /-([a-z])/g + function U(e, t) { + return t.toUpperCase() + } + function X(e) { + return e.replace(_, 'ms-').replace(z, U) + } + var V = function (e) { + return 1 === e.nodeType || 9 === e.nodeType || !+e.nodeType + } + function G() { + this.expando = S.expando + G.uid++ + } + ;(G.uid = 1), + (G.prototype = { + cache: function (e) { + var t = e[this.expando] + return ( + t || + ((t = {}), + V(e) && + (e.nodeType + ? (e[this.expando] = t) + : Object.defineProperty(e, this.expando, { + value: t, + configurable: !0, + }))), + t + ) + }, + set: function (e, t, n) { + var r, + i = this.cache(e) + if ('string' == typeof t) i[X(t)] = n + else for (r in t) i[X(r)] = t[r] + return i + }, + get: function (e, t) { + return void 0 === t + ? this.cache(e) + : e[this.expando] && e[this.expando][X(t)] + }, + access: function (e, t, n) { + return void 0 === t || (t && 'string' == typeof t && void 0 === n) + ? this.get(e, t) + : (this.set(e, t, n), void 0 !== n ? n : t) + }, + remove: function (e, t) { + var n, + r = e[this.expando] + if (void 0 !== r) { + if (void 0 !== t) { + n = (t = Array.isArray(t) + ? t.map(X) + : (t = X(t)) in r + ? [t] + : t.match(P) || []).length + while (n--) delete r[t[n]] + } + ;(void 0 === t || S.isEmptyObject(r)) && + (e.nodeType ? (e[this.expando] = void 0) : delete e[this.expando]) + } + }, + hasData: function (e) { + var t = e[this.expando] + return void 0 !== t && !S.isEmptyObject(t) + }, + }) + var Y = new G(), + Q = new G(), + J = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + K = /[A-Z]/g + function Z(e, t, n) { + var r, i + if (void 0 === n && 1 === e.nodeType) + if ( + ((r = 'data-' + t.replace(K, '-$&').toLowerCase()), + 'string' == typeof (n = e.getAttribute(r))) + ) { + try { + n = + 'true' === (i = n) || + ('false' !== i && + ('null' === i + ? null + : i === +i + '' + ? +i + : J.test(i) + ? JSON.parse(i) + : i)) + } catch (e) {} + Q.set(e, t, n) + } else n = void 0 + return n + } + S.extend({ + hasData: function (e) { + return Q.hasData(e) || Y.hasData(e) + }, + data: function (e, t, n) { + return Q.access(e, t, n) + }, + removeData: function (e, t) { + Q.remove(e, t) + }, + _data: function (e, t, n) { + return Y.access(e, t, n) + }, + _removeData: function (e, t) { + Y.remove(e, t) + }, + }), + S.fn.extend({ + data: function (n, e) { + var t, + r, + i, + o = this[0], + a = o && o.attributes + if (void 0 === n) { + if ( + this.length && + ((i = Q.get(o)), 1 === o.nodeType && !Y.get(o, 'hasDataAttrs')) + ) { + t = a.length + while (t--) + a[t] && + 0 === (r = a[t].name).indexOf('data-') && + ((r = X(r.slice(5))), Z(o, r, i[r])) + Y.set(o, 'hasDataAttrs', !0) + } + return i + } + return 'object' == typeof n + ? this.each(function () { + Q.set(this, n) + }) + : B( + this, + function (e) { + var t + if (o && void 0 === e) + return void 0 !== (t = Q.get(o, n)) + ? t + : void 0 !== (t = Z(o, n)) + ? t + : void 0 + this.each(function () { + Q.set(this, n, e) + }) + }, + null, + e, + 1 < arguments.length, + null, + !0 + ) + }, + removeData: function (e) { + return this.each(function () { + Q.remove(this, e) + }) + }, + }), + S.extend({ + queue: function (e, t, n) { + var r + if (e) + return ( + (t = (t || 'fx') + 'queue'), + (r = Y.get(e, t)), + n && + (!r || Array.isArray(n) + ? (r = Y.access(e, t, S.makeArray(n))) + : r.push(n)), + r || [] + ) + }, + dequeue: function (e, t) { + t = t || 'fx' + var n = S.queue(e, t), + r = n.length, + i = n.shift(), + o = S._queueHooks(e, t) + 'inprogress' === i && ((i = n.shift()), r--), + i && + ('fx' === t && n.unshift('inprogress'), + delete o.stop, + i.call( + e, + function () { + S.dequeue(e, t) + }, + o + )), + !r && o && o.empty.fire() + }, + _queueHooks: function (e, t) { + var n = t + 'queueHooks' + return ( + Y.get(e, n) || + Y.access(e, n, { + empty: S.Callbacks('once memory').add(function () { + Y.remove(e, [t + 'queue', n]) + }), + }) + ) + }, + }), + S.fn.extend({ + queue: function (t, n) { + var e = 2 + return ( + 'string' != typeof t && ((n = t), (t = 'fx'), e--), + arguments.length < e + ? S.queue(this[0], t) + : void 0 === n + ? this + : this.each(function () { + var e = S.queue(this, t, n) + S._queueHooks(this, t), + 'fx' === t && 'inprogress' !== e[0] && S.dequeue(this, t) + }) + ) + }, + dequeue: function (e) { + return this.each(function () { + S.dequeue(this, e) + }) + }, + clearQueue: function (e) { + return this.queue(e || 'fx', []) + }, + promise: function (e, t) { + var n, + r = 1, + i = S.Deferred(), + o = this, + a = this.length, + s = function () { + --r || i.resolveWith(o, [o]) + } + 'string' != typeof e && ((t = e), (e = void 0)), (e = e || 'fx') + while (a--) + (n = Y.get(o[a], e + 'queueHooks')) && + n.empty && + (r++, n.empty.add(s)) + return s(), i.promise(t) + }, + }) + var ee = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, + te = new RegExp('^(?:([+-])=|)(' + ee + ')([a-z%]*)$', 'i'), + ne = ['Top', 'Right', 'Bottom', 'Left'], + re = E.documentElement, + ie = function (e) { + return S.contains(e.ownerDocument, e) + }, + oe = { composed: !0 } + re.getRootNode && + (ie = function (e) { + return ( + S.contains(e.ownerDocument, e) || e.getRootNode(oe) === e.ownerDocument + ) + }) + var ae = function (e, t) { + return ( + 'none' === (e = t || e).style.display || + ('' === e.style.display && ie(e) && 'none' === S.css(e, 'display')) + ) + } + function se(e, t, n, r) { + var i, + o, + a = 20, + s = r + ? function () { + return r.cur() + } + : function () { + return S.css(e, t, '') + }, + u = s(), + l = (n && n[3]) || (S.cssNumber[t] ? '' : 'px'), + c = + e.nodeType && + (S.cssNumber[t] || ('px' !== l && +u)) && + te.exec(S.css(e, t)) + if (c && c[3] !== l) { + ;(u /= 2), (l = l || c[3]), (c = +u || 1) + while (a--) + S.style(e, t, c + l), + (1 - o) * (1 - (o = s() / u || 0.5)) <= 0 && (a = 0), + (c /= o) + ;(c *= 2), S.style(e, t, c + l), (n = n || []) + } + return ( + n && + ((c = +c || +u || 0), + (i = n[1] ? c + (n[1] + 1) * n[2] : +n[2]), + r && ((r.unit = l), (r.start = c), (r.end = i))), + i + ) + } + var ue = {} + function le(e, t) { + for (var n, r, i, o, a, s, u, l = [], c = 0, f = e.length; c < f; c++) + (r = e[c]).style && + ((n = r.style.display), + t + ? ('none' === n && + ((l[c] = Y.get(r, 'display') || null), + l[c] || (r.style.display = '')), + '' === r.style.display && + ae(r) && + (l[c] = + ((u = a = o = void 0), + (a = (i = r).ownerDocument), + (s = i.nodeName), + (u = ue[s]) || + ((o = a.body.appendChild(a.createElement(s))), + (u = S.css(o, 'display')), + o.parentNode.removeChild(o), + 'none' === u && (u = 'block'), + (ue[s] = u))))) + : 'none' !== n && ((l[c] = 'none'), Y.set(r, 'display', n))) + for (c = 0; c < f; c++) null != l[c] && (e[c].style.display = l[c]) + return e + } + S.fn.extend({ + show: function () { + return le(this, !0) + }, + hide: function () { + return le(this) + }, + toggle: function (e) { + return 'boolean' == typeof e + ? e + ? this.show() + : this.hide() + : this.each(function () { + ae(this) ? S(this).show() : S(this).hide() + }) + }, + }) + var ce, + fe, + pe = /^(?:checkbox|radio)$/i, + de = /<([a-z][^\/\0>\x20\t\r\n\f]*)/i, + he = /^$|^module$|\/(?:java|ecma)script/i + ;(ce = E.createDocumentFragment().appendChild(E.createElement('div'))), + (fe = E.createElement('input')).setAttribute('type', 'radio'), + fe.setAttribute('checked', 'checked'), + fe.setAttribute('name', 't'), + ce.appendChild(fe), + (v.checkClone = ce.cloneNode(!0).cloneNode(!0).lastChild.checked), + (ce.innerHTML = ''), + (v.noCloneChecked = !!ce.cloneNode(!0).lastChild.defaultValue), + (ce.innerHTML = ''), + (v.option = !!ce.lastChild) + var ge = { + thead: [1, '', '
'], + col: [2, '', '
'], + tr: [2, '', '
'], + td: [3, '', '
'], + _default: [0, '', ''], + } + function ye(e, t) { + var n + return ( + (n = + 'undefined' != typeof e.getElementsByTagName + ? e.getElementsByTagName(t || '*') + : 'undefined' != typeof e.querySelectorAll + ? e.querySelectorAll(t || '*') + : []), + void 0 === t || (t && A(e, t)) ? S.merge([e], n) : n + ) + } + function ve(e, t) { + for (var n = 0, r = e.length; n < r; n++) + Y.set(e[n], 'globalEval', !t || Y.get(t[n], 'globalEval')) + } + ;(ge.tbody = ge.tfoot = ge.colgroup = ge.caption = ge.thead), + (ge.th = ge.td), + v.option || + (ge.optgroup = ge.option = + [1, "']) + var me = /<|&#?\w+;/ + function xe(e, t, n, r, i) { + for ( + var o, + a, + s, + u, + l, + c, + f = t.createDocumentFragment(), + p = [], + d = 0, + h = e.length; + d < h; + d++ + ) + if ((o = e[d]) || 0 === o) + if ('object' === w(o)) S.merge(p, o.nodeType ? [o] : o) + else if (me.test(o)) { + ;(a = a || f.appendChild(t.createElement('div'))), + (s = (de.exec(o) || ['', ''])[1].toLowerCase()), + (u = ge[s] || ge._default), + (a.innerHTML = u[1] + S.htmlPrefilter(o) + u[2]), + (c = u[0]) + while (c--) a = a.lastChild + S.merge(p, a.childNodes), ((a = f.firstChild).textContent = '') + } else p.push(t.createTextNode(o)) + ;(f.textContent = ''), (d = 0) + while ((o = p[d++])) + if (r && -1 < S.inArray(o, r)) i && i.push(o) + else if ( + ((l = ie(o)), (a = ye(f.appendChild(o), 'script')), l && ve(a), n) + ) { + c = 0 + while ((o = a[c++])) he.test(o.type || '') && n.push(o) + } + return f + } + var be = /^([^.]*)(?:\.(.+)|)/ + function we() { + return !0 + } + function Te() { + return !1 + } + function Ce(e, t) { + return ( + (e === + (function () { + try { + return E.activeElement + } catch (e) {} + })()) == + ('focus' === t) + ) + } + function Ee(e, t, n, r, i, o) { + var a, s + if ('object' == typeof t) { + for (s in ('string' != typeof n && ((r = r || n), (n = void 0)), t)) + Ee(e, s, n, r, t[s], o) + return e + } + if ( + (null == r && null == i + ? ((i = n), (r = n = void 0)) + : null == i && + ('string' == typeof n + ? ((i = r), (r = void 0)) + : ((i = r), (r = n), (n = void 0))), + !1 === i) + ) + i = Te + else if (!i) return e + return ( + 1 === o && + ((a = i), + ((i = function (e) { + return S().off(e), a.apply(this, arguments) + }).guid = a.guid || (a.guid = S.guid++))), + e.each(function () { + S.event.add(this, t, i, r, n) + }) + ) + } + function Se(e, i, o) { + o + ? (Y.set(e, i, !1), + S.event.add(e, i, { + namespace: !1, + handler: function (e) { + var t, + n, + r = Y.get(this, i) + if (1 & e.isTrigger && this[i]) { + if (r.length) + (S.event.special[i] || {}).delegateType && e.stopPropagation() + else if ( + ((r = s.call(arguments)), + Y.set(this, i, r), + (t = o(this, i)), + this[i](), + r !== (n = Y.get(this, i)) || t ? Y.set(this, i, !1) : (n = {}), + r !== n) + ) + return ( + e.stopImmediatePropagation(), e.preventDefault(), n && n.value + ) + } else + r.length && + (Y.set(this, i, { + value: S.event.trigger( + S.extend(r[0], S.Event.prototype), + r.slice(1), + this + ), + }), + e.stopImmediatePropagation()) + }, + })) + : void 0 === Y.get(e, i) && S.event.add(e, i, we) + } + ;(S.event = { + global: {}, + add: function (t, e, n, r, i) { + var o, + a, + s, + u, + l, + c, + f, + p, + d, + h, + g, + y = Y.get(t) + if (V(t)) { + n.handler && ((n = (o = n).handler), (i = o.selector)), + i && S.find.matchesSelector(re, i), + n.guid || (n.guid = S.guid++), + (u = y.events) || (u = y.events = Object.create(null)), + (a = y.handle) || + (a = y.handle = + function (e) { + return 'undefined' != typeof S && S.event.triggered !== e.type + ? S.event.dispatch.apply(t, arguments) + : void 0 + }), + (l = (e = (e || '').match(P) || ['']).length) + while (l--) + (d = g = (s = be.exec(e[l]) || [])[1]), + (h = (s[2] || '').split('.').sort()), + d && + ((f = S.event.special[d] || {}), + (d = (i ? f.delegateType : f.bindType) || d), + (f = S.event.special[d] || {}), + (c = S.extend( + { + type: d, + origType: g, + data: r, + handler: n, + guid: n.guid, + selector: i, + needsContext: i && S.expr.match.needsContext.test(i), + namespace: h.join('.'), + }, + o + )), + (p = u[d]) || + (((p = u[d] = []).delegateCount = 0), + (f.setup && !1 !== f.setup.call(t, r, h, a)) || + (t.addEventListener && t.addEventListener(d, a))), + f.add && + (f.add.call(t, c), c.handler.guid || (c.handler.guid = n.guid)), + i ? p.splice(p.delegateCount++, 0, c) : p.push(c), + (S.event.global[d] = !0)) + } + }, + remove: function (e, t, n, r, i) { + var o, + a, + s, + u, + l, + c, + f, + p, + d, + h, + g, + y = Y.hasData(e) && Y.get(e) + if (y && (u = y.events)) { + l = (t = (t || '').match(P) || ['']).length + while (l--) + if ( + ((d = g = (s = be.exec(t[l]) || [])[1]), + (h = (s[2] || '').split('.').sort()), + d) + ) { + ;(f = S.event.special[d] || {}), + (p = u[(d = (r ? f.delegateType : f.bindType) || d)] || []), + (s = + s[2] && + new RegExp('(^|\\.)' + h.join('\\.(?:.*\\.|)') + '(\\.|$)')), + (a = o = p.length) + while (o--) + (c = p[o]), + (!i && g !== c.origType) || + (n && n.guid !== c.guid) || + (s && !s.test(c.namespace)) || + (r && r !== c.selector && ('**' !== r || !c.selector)) || + (p.splice(o, 1), + c.selector && p.delegateCount--, + f.remove && f.remove.call(e, c)) + a && + !p.length && + ((f.teardown && !1 !== f.teardown.call(e, h, y.handle)) || + S.removeEvent(e, d, y.handle), + delete u[d]) + } else for (d in u) S.event.remove(e, d + t[l], n, r, !0) + S.isEmptyObject(u) && Y.remove(e, 'handle events') + } + }, + dispatch: function (e) { + var t, + n, + r, + i, + o, + a, + s = new Array(arguments.length), + u = S.event.fix(e), + l = (Y.get(this, 'events') || Object.create(null))[u.type] || [], + c = S.event.special[u.type] || {} + for (s[0] = u, t = 1; t < arguments.length; t++) s[t] = arguments[t] + if ( + ((u.delegateTarget = this), + !c.preDispatch || !1 !== c.preDispatch.call(this, u)) + ) { + ;(a = S.event.handlers.call(this, u, l)), (t = 0) + while ((i = a[t++]) && !u.isPropagationStopped()) { + ;(u.currentTarget = i.elem), (n = 0) + while ((o = i.handlers[n++]) && !u.isImmediatePropagationStopped()) + (u.rnamespace && + !1 !== o.namespace && + !u.rnamespace.test(o.namespace)) || + ((u.handleObj = o), + (u.data = o.data), + void 0 !== + (r = ( + (S.event.special[o.origType] || {}).handle || o.handler + ).apply(i.elem, s)) && + !1 === (u.result = r) && + (u.preventDefault(), u.stopPropagation())) + } + return c.postDispatch && c.postDispatch.call(this, u), u.result + } + }, + handlers: function (e, t) { + var n, + r, + i, + o, + a, + s = [], + u = t.delegateCount, + l = e.target + if (u && l.nodeType && !('click' === e.type && 1 <= e.button)) + for (; l !== this; l = l.parentNode || this) + if (1 === l.nodeType && ('click' !== e.type || !0 !== l.disabled)) { + for (o = [], a = {}, n = 0; n < u; n++) + void 0 === a[(i = (r = t[n]).selector + ' ')] && + (a[i] = r.needsContext + ? -1 < S(i, this).index(l) + : S.find(i, this, null, [l]).length), + a[i] && o.push(r) + o.length && s.push({ elem: l, handlers: o }) + } + return ( + (l = this), u < t.length && s.push({ elem: l, handlers: t.slice(u) }), s + ) + }, + addProp: function (t, e) { + Object.defineProperty(S.Event.prototype, t, { + enumerable: !0, + configurable: !0, + get: m(e) + ? function () { + if (this.originalEvent) return e(this.originalEvent) + } + : function () { + if (this.originalEvent) return this.originalEvent[t] + }, + set: function (e) { + Object.defineProperty(this, t, { + enumerable: !0, + configurable: !0, + writable: !0, + value: e, + }) + }, + }) + }, + fix: function (e) { + return e[S.expando] ? e : new S.Event(e) + }, + special: { + load: { noBubble: !0 }, + click: { + setup: function (e) { + var t = this || e + return ( + pe.test(t.type) && t.click && A(t, 'input') && Se(t, 'click', we), + !1 + ) + }, + trigger: function (e) { + var t = this || e + return ( + pe.test(t.type) && t.click && A(t, 'input') && Se(t, 'click'), !0 + ) + }, + _default: function (e) { + var t = e.target + return ( + (pe.test(t.type) && + t.click && + A(t, 'input') && + Y.get(t, 'click')) || + A(t, 'a') + ) + }, + }, + beforeunload: { + postDispatch: function (e) { + void 0 !== e.result && + e.originalEvent && + (e.originalEvent.returnValue = e.result) + }, + }, + }, + }), + (S.removeEvent = function (e, t, n) { + e.removeEventListener && e.removeEventListener(t, n) + }), + (S.Event = function (e, t) { + if (!(this instanceof S.Event)) return new S.Event(e, t) + e && e.type + ? ((this.originalEvent = e), + (this.type = e.type), + (this.isDefaultPrevented = + e.defaultPrevented || + (void 0 === e.defaultPrevented && !1 === e.returnValue) + ? we + : Te), + (this.target = + e.target && 3 === e.target.nodeType + ? e.target.parentNode + : e.target), + (this.currentTarget = e.currentTarget), + (this.relatedTarget = e.relatedTarget)) + : (this.type = e), + t && S.extend(this, t), + (this.timeStamp = (e && e.timeStamp) || Date.now()), + (this[S.expando] = !0) + }), + (S.Event.prototype = { + constructor: S.Event, + isDefaultPrevented: Te, + isPropagationStopped: Te, + isImmediatePropagationStopped: Te, + isSimulated: !1, + preventDefault: function () { + var e = this.originalEvent + ;(this.isDefaultPrevented = we), + e && !this.isSimulated && e.preventDefault() + }, + stopPropagation: function () { + var e = this.originalEvent + ;(this.isPropagationStopped = we), + e && !this.isSimulated && e.stopPropagation() + }, + stopImmediatePropagation: function () { + var e = this.originalEvent + ;(this.isImmediatePropagationStopped = we), + e && !this.isSimulated && e.stopImmediatePropagation(), + this.stopPropagation() + }, + }), + S.each( + { + altKey: !0, + bubbles: !0, + cancelable: !0, + changedTouches: !0, + ctrlKey: !0, + detail: !0, + eventPhase: !0, + metaKey: !0, + pageX: !0, + pageY: !0, + shiftKey: !0, + view: !0, + char: !0, + code: !0, + charCode: !0, + key: !0, + keyCode: !0, + button: !0, + buttons: !0, + clientX: !0, + clientY: !0, + offsetX: !0, + offsetY: !0, + pointerId: !0, + pointerType: !0, + screenX: !0, + screenY: !0, + targetTouches: !0, + toElement: !0, + touches: !0, + which: !0, + }, + S.event.addProp + ), + S.each({ focus: 'focusin', blur: 'focusout' }, function (t, e) { + S.event.special[t] = { + setup: function () { + return Se(this, t, Ce), !1 + }, + trigger: function () { + return Se(this, t), !0 + }, + _default: function (e) { + return Y.get(e.target, t) + }, + delegateType: e, + } + }), + S.each( + { + mouseenter: 'mouseover', + mouseleave: 'mouseout', + pointerenter: 'pointerover', + pointerleave: 'pointerout', + }, + function (e, i) { + S.event.special[e] = { + delegateType: i, + bindType: i, + handle: function (e) { + var t, + n = e.relatedTarget, + r = e.handleObj + return ( + (n && (n === this || S.contains(this, n))) || + ((e.type = r.origType), + (t = r.handler.apply(this, arguments)), + (e.type = i)), + t + ) + }, + } + } + ), + S.fn.extend({ + on: function (e, t, n, r) { + return Ee(this, e, t, n, r) + }, + one: function (e, t, n, r) { + return Ee(this, e, t, n, r, 1) + }, + off: function (e, t, n) { + var r, i + if (e && e.preventDefault && e.handleObj) + return ( + (r = e.handleObj), + S(e.delegateTarget).off( + r.namespace ? r.origType + '.' + r.namespace : r.origType, + r.selector, + r.handler + ), + this + ) + if ('object' == typeof e) { + for (i in e) this.off(i, t, e[i]) + return this + } + return ( + (!1 !== t && 'function' != typeof t) || ((n = t), (t = void 0)), + !1 === n && (n = Te), + this.each(function () { + S.event.remove(this, e, n, t) + }) + ) + }, + }) + var ke = /\s*$/g + function je(e, t) { + return ( + (A(e, 'table') && + A(11 !== t.nodeType ? t : t.firstChild, 'tr') && + S(e).children('tbody')[0]) || + e + ) + } + function De(e) { + return (e.type = (null !== e.getAttribute('type')) + '/' + e.type), e + } + function qe(e) { + return ( + 'true/' === (e.type || '').slice(0, 5) + ? (e.type = e.type.slice(5)) + : e.removeAttribute('type'), + e + ) + } + function Le(e, t) { + var n, r, i, o, a, s + if (1 === t.nodeType) { + if (Y.hasData(e) && (s = Y.get(e).events)) + for (i in (Y.remove(t, 'handle events'), s)) + for (n = 0, r = s[i].length; n < r; n++) S.event.add(t, i, s[i][n]) + Q.hasData(e) && ((o = Q.access(e)), (a = S.extend({}, o)), Q.set(t, a)) + } + } + function He(n, r, i, o) { + r = g(r) + var e, + t, + a, + s, + u, + l, + c = 0, + f = n.length, + p = f - 1, + d = r[0], + h = m(d) + if (h || (1 < f && 'string' == typeof d && !v.checkClone && Ae.test(d))) + return n.each(function (e) { + var t = n.eq(e) + h && (r[0] = d.call(this, e, t.html())), He(t, r, i, o) + }) + if ( + f && + ((t = (e = xe(r, n[0].ownerDocument, !1, n, o)).firstChild), + 1 === e.childNodes.length && (e = t), + t || o) + ) { + for (s = (a = S.map(ye(e, 'script'), De)).length; c < f; c++) + (u = e), + c !== p && + ((u = S.clone(u, !0, !0)), s && S.merge(a, ye(u, 'script'))), + i.call(n[c], u, c) + if (s) + for (l = a[a.length - 1].ownerDocument, S.map(a, qe), c = 0; c < s; c++) + (u = a[c]), + he.test(u.type || '') && + !Y.access(u, 'globalEval') && + S.contains(l, u) && + (u.src && 'module' !== (u.type || '').toLowerCase() + ? S._evalUrl && + !u.noModule && + S._evalUrl( + u.src, + { nonce: u.nonce || u.getAttribute('nonce') }, + l + ) + : b(u.textContent.replace(Ne, ''), u, l)) + } + return n + } + function Oe(e, t, n) { + for (var r, i = t ? S.filter(t, e) : e, o = 0; null != (r = i[o]); o++) + n || 1 !== r.nodeType || S.cleanData(ye(r)), + r.parentNode && + (n && ie(r) && ve(ye(r, 'script')), r.parentNode.removeChild(r)) + return e + } + S.extend({ + htmlPrefilter: function (e) { + return e + }, + clone: function (e, t, n) { + var r, + i, + o, + a, + s, + u, + l, + c = e.cloneNode(!0), + f = ie(e) + if ( + !( + v.noCloneChecked || + (1 !== e.nodeType && 11 !== e.nodeType) || + S.isXMLDoc(e) + ) + ) + for (a = ye(c), r = 0, i = (o = ye(e)).length; r < i; r++) + (s = o[r]), + (u = a[r]), + void 0, + 'input' === (l = u.nodeName.toLowerCase()) && pe.test(s.type) + ? (u.checked = s.checked) + : ('input' !== l && 'textarea' !== l) || + (u.defaultValue = s.defaultValue) + if (t) + if (n) + for (o = o || ye(e), a = a || ye(c), r = 0, i = o.length; r < i; r++) + Le(o[r], a[r]) + else Le(e, c) + return 0 < (a = ye(c, 'script')).length && ve(a, !f && ye(e, 'script')), c + }, + cleanData: function (e) { + for (var t, n, r, i = S.event.special, o = 0; void 0 !== (n = e[o]); o++) + if (V(n)) { + if ((t = n[Y.expando])) { + if (t.events) + for (r in t.events) + i[r] ? S.event.remove(n, r) : S.removeEvent(n, r, t.handle) + n[Y.expando] = void 0 + } + n[Q.expando] && (n[Q.expando] = void 0) + } + }, + }), + S.fn.extend({ + detach: function (e) { + return Oe(this, e, !0) + }, + remove: function (e) { + return Oe(this, e) + }, + text: function (e) { + return B( + this, + function (e) { + return void 0 === e + ? S.text(this) + : this.empty().each(function () { + ;(1 !== this.nodeType && + 11 !== this.nodeType && + 9 !== this.nodeType) || + (this.textContent = e) + }) + }, + null, + e, + arguments.length + ) + }, + append: function () { + return He(this, arguments, function (e) { + ;(1 !== this.nodeType && + 11 !== this.nodeType && + 9 !== this.nodeType) || + je(this, e).appendChild(e) + }) + }, + prepend: function () { + return He(this, arguments, function (e) { + if ( + 1 === this.nodeType || + 11 === this.nodeType || + 9 === this.nodeType + ) { + var t = je(this, e) + t.insertBefore(e, t.firstChild) + } + }) + }, + before: function () { + return He(this, arguments, function (e) { + this.parentNode && this.parentNode.insertBefore(e, this) + }) + }, + after: function () { + return He(this, arguments, function (e) { + this.parentNode && this.parentNode.insertBefore(e, this.nextSibling) + }) + }, + empty: function () { + for (var e, t = 0; null != (e = this[t]); t++) + 1 === e.nodeType && (S.cleanData(ye(e, !1)), (e.textContent = '')) + return this + }, + clone: function (e, t) { + return ( + (e = null != e && e), + (t = null == t ? e : t), + this.map(function () { + return S.clone(this, e, t) + }) + ) + }, + html: function (e) { + return B( + this, + function (e) { + var t = this[0] || {}, + n = 0, + r = this.length + if (void 0 === e && 1 === t.nodeType) return t.innerHTML + if ( + 'string' == typeof e && + !ke.test(e) && + !ge[(de.exec(e) || ['', ''])[1].toLowerCase()] + ) { + e = S.htmlPrefilter(e) + try { + for (; n < r; n++) + 1 === (t = this[n] || {}).nodeType && + (S.cleanData(ye(t, !1)), (t.innerHTML = e)) + t = 0 + } catch (e) {} + } + t && this.empty().append(e) + }, + null, + e, + arguments.length + ) + }, + replaceWith: function () { + var n = [] + return He( + this, + arguments, + function (e) { + var t = this.parentNode + S.inArray(this, n) < 0 && + (S.cleanData(ye(this)), t && t.replaceChild(e, this)) + }, + n + ) + }, + }), + S.each( + { + appendTo: 'append', + prependTo: 'prepend', + insertBefore: 'before', + insertAfter: 'after', + replaceAll: 'replaceWith', + }, + function (e, a) { + S.fn[e] = function (e) { + for (var t, n = [], r = S(e), i = r.length - 1, o = 0; o <= i; o++) + (t = o === i ? this : this.clone(!0)), + S(r[o])[a](t), + u.apply(n, t.get()) + return this.pushStack(n) + } + } + ) + var Pe = new RegExp('^(' + ee + ')(?!px)[a-z%]+$', 'i'), + Re = /^--/, + Me = function (e) { + var t = e.ownerDocument.defaultView + return (t && t.opener) || (t = C), t.getComputedStyle(e) + }, + Ie = function (e, t, n) { + var r, + i, + o = {} + for (i in t) (o[i] = e.style[i]), (e.style[i] = t[i]) + for (i in ((r = n.call(e)), t)) e.style[i] = o[i] + return r + }, + We = new RegExp(ne.join('|'), 'i'), + Fe = '[\\x20\\t\\r\\n\\f]', + $e = new RegExp('^' + Fe + '+|((?:^|[^\\\\])(?:\\\\.)*)' + Fe + '+$', 'g') + function Be(e, t, n) { + var r, + i, + o, + a, + s = Re.test(t), + u = e.style + return ( + (n = n || Me(e)) && + ((a = n.getPropertyValue(t) || n[t]), + s && a && (a = a.replace($e, '$1') || void 0), + '' !== a || ie(e) || (a = S.style(e, t)), + !v.pixelBoxStyles() && + Pe.test(a) && + We.test(t) && + ((r = u.width), + (i = u.minWidth), + (o = u.maxWidth), + (u.minWidth = u.maxWidth = u.width = a), + (a = n.width), + (u.width = r), + (u.minWidth = i), + (u.maxWidth = o))), + void 0 !== a ? a + '' : a + ) + } + function _e(e, t) { + return { + get: function () { + if (!e()) return (this.get = t).apply(this, arguments) + delete this.get + }, + } + } + !(function () { + function e() { + if (l) { + ;(u.style.cssText = + 'position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0'), + (l.style.cssText = + 'position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%'), + re.appendChild(u).appendChild(l) + var e = C.getComputedStyle(l) + ;(n = '1%' !== e.top), + (s = 12 === t(e.marginLeft)), + (l.style.right = '60%'), + (o = 36 === t(e.right)), + (r = 36 === t(e.width)), + (l.style.position = 'absolute'), + (i = 12 === t(l.offsetWidth / 3)), + re.removeChild(u), + (l = null) + } + } + function t(e) { + return Math.round(parseFloat(e)) + } + var n, + r, + i, + o, + a, + s, + u = E.createElement('div'), + l = E.createElement('div') + l.style && + ((l.style.backgroundClip = 'content-box'), + (l.cloneNode(!0).style.backgroundClip = ''), + (v.clearCloneStyle = 'content-box' === l.style.backgroundClip), + S.extend(v, { + boxSizingReliable: function () { + return e(), r + }, + pixelBoxStyles: function () { + return e(), o + }, + pixelPosition: function () { + return e(), n + }, + reliableMarginLeft: function () { + return e(), s + }, + scrollboxSize: function () { + return e(), i + }, + reliableTrDimensions: function () { + var e, t, n, r + return ( + null == a && + ((e = E.createElement('table')), + (t = E.createElement('tr')), + (n = E.createElement('div')), + (e.style.cssText = + 'position:absolute;left:-11111px;border-collapse:separate'), + (t.style.cssText = 'border:1px solid'), + (t.style.height = '1px'), + (n.style.height = '9px'), + (n.style.display = 'block'), + re.appendChild(e).appendChild(t).appendChild(n), + (r = C.getComputedStyle(t)), + (a = + parseInt(r.height, 10) + + parseInt(r.borderTopWidth, 10) + + parseInt(r.borderBottomWidth, 10) === + t.offsetHeight), + re.removeChild(e)), + a + ) + }, + })) + })() + var ze = ['Webkit', 'Moz', 'ms'], + Ue = E.createElement('div').style, + Xe = {} + function Ve(e) { + var t = S.cssProps[e] || Xe[e] + return ( + t || + (e in Ue + ? e + : (Xe[e] = + (function (e) { + var t = e[0].toUpperCase() + e.slice(1), + n = ze.length + while (n--) if ((e = ze[n] + t) in Ue) return e + })(e) || e)) + ) + } + var Ge = /^(none|table(?!-c[ea]).+)/, + Ye = { position: 'absolute', visibility: 'hidden', display: 'block' }, + Qe = { letterSpacing: '0', fontWeight: '400' } + function Je(e, t, n) { + var r = te.exec(t) + return r ? Math.max(0, r[2] - (n || 0)) + (r[3] || 'px') : t + } + function Ke(e, t, n, r, i, o) { + var a = 'width' === t ? 1 : 0, + s = 0, + u = 0 + if (n === (r ? 'border' : 'content')) return 0 + for (; a < 4; a += 2) + 'margin' === n && (u += S.css(e, n + ne[a], !0, i)), + r + ? ('content' === n && (u -= S.css(e, 'padding' + ne[a], !0, i)), + 'margin' !== n && + (u -= S.css(e, 'border' + ne[a] + 'Width', !0, i))) + : ((u += S.css(e, 'padding' + ne[a], !0, i)), + 'padding' !== n + ? (u += S.css(e, 'border' + ne[a] + 'Width', !0, i)) + : (s += S.css(e, 'border' + ne[a] + 'Width', !0, i))) + return ( + !r && + 0 <= o && + (u += + Math.max( + 0, + Math.ceil( + e['offset' + t[0].toUpperCase() + t.slice(1)] - o - u - s - 0.5 + ) + ) || 0), + u + ) + } + function Ze(e, t, n) { + var r = Me(e), + i = + (!v.boxSizingReliable() || n) && + 'border-box' === S.css(e, 'boxSizing', !1, r), + o = i, + a = Be(e, t, r), + s = 'offset' + t[0].toUpperCase() + t.slice(1) + if (Pe.test(a)) { + if (!n) return a + a = 'auto' + } + return ( + ((!v.boxSizingReliable() && i) || + (!v.reliableTrDimensions() && A(e, 'tr')) || + 'auto' === a || + (!parseFloat(a) && 'inline' === S.css(e, 'display', !1, r))) && + e.getClientRects().length && + ((i = 'border-box' === S.css(e, 'boxSizing', !1, r)), + (o = s in e) && (a = e[s])), + (a = parseFloat(a) || 0) + + Ke(e, t, n || (i ? 'border' : 'content'), o, r, a) + + 'px' + ) + } + function et(e, t, n, r, i) { + return new et.prototype.init(e, t, n, r, i) + } + S.extend({ + cssHooks: { + opacity: { + get: function (e, t) { + if (t) { + var n = Be(e, 'opacity') + return '' === n ? '1' : n + } + }, + }, + }, + cssNumber: { + animationIterationCount: !0, + columnCount: !0, + fillOpacity: !0, + flexGrow: !0, + flexShrink: !0, + fontWeight: !0, + gridArea: !0, + gridColumn: !0, + gridColumnEnd: !0, + gridColumnStart: !0, + gridRow: !0, + gridRowEnd: !0, + gridRowStart: !0, + lineHeight: !0, + opacity: !0, + order: !0, + orphans: !0, + widows: !0, + zIndex: !0, + zoom: !0, + }, + cssProps: {}, + style: function (e, t, n, r) { + if (e && 3 !== e.nodeType && 8 !== e.nodeType && e.style) { + var i, + o, + a, + s = X(t), + u = Re.test(t), + l = e.style + if ( + (u || (t = Ve(s)), (a = S.cssHooks[t] || S.cssHooks[s]), void 0 === n) + ) + return a && 'get' in a && void 0 !== (i = a.get(e, !1, r)) ? i : l[t] + 'string' === (o = typeof n) && + (i = te.exec(n)) && + i[1] && + ((n = se(e, t, i)), (o = 'number')), + null != n && + n == n && + ('number' !== o || + u || + (n += (i && i[3]) || (S.cssNumber[s] ? '' : 'px')), + v.clearCloneStyle || + '' !== n || + 0 !== t.indexOf('background') || + (l[t] = 'inherit'), + (a && 'set' in a && void 0 === (n = a.set(e, n, r))) || + (u ? l.setProperty(t, n) : (l[t] = n))) + } + }, + css: function (e, t, n, r) { + var i, + o, + a, + s = X(t) + return ( + Re.test(t) || (t = Ve(s)), + (a = S.cssHooks[t] || S.cssHooks[s]) && + 'get' in a && + (i = a.get(e, !0, n)), + void 0 === i && (i = Be(e, t, r)), + 'normal' === i && t in Qe && (i = Qe[t]), + '' === n || n + ? ((o = parseFloat(i)), !0 === n || isFinite(o) ? o || 0 : i) + : i + ) + }, + }), + S.each(['height', 'width'], function (e, u) { + S.cssHooks[u] = { + get: function (e, t, n) { + if (t) + return !Ge.test(S.css(e, 'display')) || + (e.getClientRects().length && e.getBoundingClientRect().width) + ? Ze(e, u, n) + : Ie(e, Ye, function () { + return Ze(e, u, n) + }) + }, + set: function (e, t, n) { + var r, + i = Me(e), + o = !v.scrollboxSize() && 'absolute' === i.position, + a = (o || n) && 'border-box' === S.css(e, 'boxSizing', !1, i), + s = n ? Ke(e, u, n, a, i) : 0 + return ( + a && + o && + (s -= Math.ceil( + e['offset' + u[0].toUpperCase() + u.slice(1)] - + parseFloat(i[u]) - + Ke(e, u, 'border', !1, i) - + 0.5 + )), + s && + (r = te.exec(t)) && + 'px' !== (r[3] || 'px') && + ((e.style[u] = t), (t = S.css(e, u))), + Je(0, t, s) + ) + }, + } + }), + (S.cssHooks.marginLeft = _e(v.reliableMarginLeft, function (e, t) { + if (t) + return ( + (parseFloat(Be(e, 'marginLeft')) || + e.getBoundingClientRect().left - + Ie(e, { marginLeft: 0 }, function () { + return e.getBoundingClientRect().left + })) + 'px' + ) + })), + S.each({ margin: '', padding: '', border: 'Width' }, function (i, o) { + ;(S.cssHooks[i + o] = { + expand: function (e) { + for ( + var t = 0, n = {}, r = 'string' == typeof e ? e.split(' ') : [e]; + t < 4; + t++ + ) + n[i + ne[t] + o] = r[t] || r[t - 2] || r[0] + return n + }, + }), + 'margin' !== i && (S.cssHooks[i + o].set = Je) + }), + S.fn.extend({ + css: function (e, t) { + return B( + this, + function (e, t, n) { + var r, + i, + o = {}, + a = 0 + if (Array.isArray(t)) { + for (r = Me(e), i = t.length; a < i; a++) + o[t[a]] = S.css(e, t[a], !1, r) + return o + } + return void 0 !== n ? S.style(e, t, n) : S.css(e, t) + }, + e, + t, + 1 < arguments.length + ) + }, + }), + (((S.Tween = et).prototype = { + constructor: et, + init: function (e, t, n, r, i, o) { + ;(this.elem = e), + (this.prop = n), + (this.easing = i || S.easing._default), + (this.options = t), + (this.start = this.now = this.cur()), + (this.end = r), + (this.unit = o || (S.cssNumber[n] ? '' : 'px')) + }, + cur: function () { + var e = et.propHooks[this.prop] + return e && e.get ? e.get(this) : et.propHooks._default.get(this) + }, + run: function (e) { + var t, + n = et.propHooks[this.prop] + return ( + this.options.duration + ? (this.pos = t = + S.easing[this.easing]( + e, + this.options.duration * e, + 0, + 1, + this.options.duration + )) + : (this.pos = t = e), + (this.now = (this.end - this.start) * t + this.start), + this.options.step && + this.options.step.call(this.elem, this.now, this), + n && n.set ? n.set(this) : et.propHooks._default.set(this), + this + ) + }, + }).init.prototype = et.prototype), + ((et.propHooks = { + _default: { + get: function (e) { + var t + return 1 !== e.elem.nodeType || + (null != e.elem[e.prop] && null == e.elem.style[e.prop]) + ? e.elem[e.prop] + : (t = S.css(e.elem, e.prop, '')) && 'auto' !== t + ? t + : 0 + }, + set: function (e) { + S.fx.step[e.prop] + ? S.fx.step[e.prop](e) + : 1 !== e.elem.nodeType || + (!S.cssHooks[e.prop] && null == e.elem.style[Ve(e.prop)]) + ? (e.elem[e.prop] = e.now) + : S.style(e.elem, e.prop, e.now + e.unit) + }, + }, + }).scrollTop = et.propHooks.scrollLeft = + { + set: function (e) { + e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now) + }, + }), + (S.easing = { + linear: function (e) { + return e + }, + swing: function (e) { + return 0.5 - Math.cos(e * Math.PI) / 2 + }, + _default: 'swing', + }), + (S.fx = et.prototype.init), + (S.fx.step = {}) + var tt, + nt, + rt, + it, + ot = /^(?:toggle|show|hide)$/, + at = /queueHooks$/ + function st() { + nt && + (!1 === E.hidden && C.requestAnimationFrame + ? C.requestAnimationFrame(st) + : C.setTimeout(st, S.fx.interval), + S.fx.tick()) + } + function ut() { + return ( + C.setTimeout(function () { + tt = void 0 + }), + (tt = Date.now()) + ) + } + function lt(e, t) { + var n, + r = 0, + i = { height: e } + for (t = t ? 1 : 0; r < 4; r += 2 - t) + i['margin' + (n = ne[r])] = i['padding' + n] = e + return t && (i.opacity = i.width = e), i + } + function ct(e, t, n) { + for ( + var r, + i = (ft.tweeners[t] || []).concat(ft.tweeners['*']), + o = 0, + a = i.length; + o < a; + o++ + ) + if ((r = i[o].call(n, t, e))) return r + } + function ft(o, e, t) { + var n, + a, + r = 0, + i = ft.prefilters.length, + s = S.Deferred().always(function () { + delete u.elem + }), + u = function () { + if (a) return !1 + for ( + var e = tt || ut(), + t = Math.max(0, l.startTime + l.duration - e), + n = 1 - (t / l.duration || 0), + r = 0, + i = l.tweens.length; + r < i; + r++ + ) + l.tweens[r].run(n) + return ( + s.notifyWith(o, [l, n, t]), + n < 1 && i + ? t + : (i || s.notifyWith(o, [l, 1, 0]), s.resolveWith(o, [l]), !1) + ) + }, + l = s.promise({ + elem: o, + props: S.extend({}, e), + opts: S.extend(!0, { specialEasing: {}, easing: S.easing._default }, t), + originalProperties: e, + originalOptions: t, + startTime: tt || ut(), + duration: t.duration, + tweens: [], + createTween: function (e, t) { + var n = S.Tween( + o, + l.opts, + e, + t, + l.opts.specialEasing[e] || l.opts.easing + ) + return l.tweens.push(n), n + }, + stop: function (e) { + var t = 0, + n = e ? l.tweens.length : 0 + if (a) return this + for (a = !0; t < n; t++) l.tweens[t].run(1) + return ( + e + ? (s.notifyWith(o, [l, 1, 0]), s.resolveWith(o, [l, e])) + : s.rejectWith(o, [l, e]), + this + ) + }, + }), + c = l.props + for ( + !(function (e, t) { + var n, r, i, o, a + for (n in e) + if ( + ((i = t[(r = X(n))]), + (o = e[n]), + Array.isArray(o) && ((i = o[1]), (o = e[n] = o[0])), + n !== r && ((e[r] = o), delete e[n]), + (a = S.cssHooks[r]) && ('expand' in a)) + ) + for (n in ((o = a.expand(o)), delete e[r], o)) + (n in e) || ((e[n] = o[n]), (t[n] = i)) + else t[r] = i + })(c, l.opts.specialEasing); + r < i; + r++ + ) + if ((n = ft.prefilters[r].call(l, o, c, l.opts))) + return ( + m(n.stop) && + (S._queueHooks(l.elem, l.opts.queue).stop = n.stop.bind(n)), + n + ) + return ( + S.map(c, ct, l), + m(l.opts.start) && l.opts.start.call(o, l), + l + .progress(l.opts.progress) + .done(l.opts.done, l.opts.complete) + .fail(l.opts.fail) + .always(l.opts.always), + S.fx.timer(S.extend(u, { elem: o, anim: l, queue: l.opts.queue })), + l + ) + } + ;(S.Animation = S.extend(ft, { + tweeners: { + '*': [ + function (e, t) { + var n = this.createTween(e, t) + return se(n.elem, e, te.exec(t), n), n + }, + ], + }, + tweener: function (e, t) { + m(e) ? ((t = e), (e = ['*'])) : (e = e.match(P)) + for (var n, r = 0, i = e.length; r < i; r++) + (n = e[r]), + (ft.tweeners[n] = ft.tweeners[n] || []), + ft.tweeners[n].unshift(t) + }, + prefilters: [ + function (e, t, n) { + var r, + i, + o, + a, + s, + u, + l, + c, + f = 'width' in t || 'height' in t, + p = this, + d = {}, + h = e.style, + g = e.nodeType && ae(e), + y = Y.get(e, 'fxshow') + for (r in (n.queue || + (null == (a = S._queueHooks(e, 'fx')).unqueued && + ((a.unqueued = 0), + (s = a.empty.fire), + (a.empty.fire = function () { + a.unqueued || s() + })), + a.unqueued++, + p.always(function () { + p.always(function () { + a.unqueued--, S.queue(e, 'fx').length || a.empty.fire() + }) + })), + t)) + if (((i = t[r]), ot.test(i))) { + if ( + (delete t[r], + (o = o || 'toggle' === i), + i === (g ? 'hide' : 'show')) + ) { + if ('show' !== i || !y || void 0 === y[r]) continue + g = !0 + } + d[r] = (y && y[r]) || S.style(e, r) + } + if ((u = !S.isEmptyObject(t)) || !S.isEmptyObject(d)) + for (r in (f && + 1 === e.nodeType && + ((n.overflow = [h.overflow, h.overflowX, h.overflowY]), + null == (l = y && y.display) && (l = Y.get(e, 'display')), + 'none' === (c = S.css(e, 'display')) && + (l + ? (c = l) + : (le([e], !0), + (l = e.style.display || l), + (c = S.css(e, 'display')), + le([e]))), + ('inline' === c || ('inline-block' === c && null != l)) && + 'none' === S.css(e, 'float') && + (u || + (p.done(function () { + h.display = l + }), + null == l && ((c = h.display), (l = 'none' === c ? '' : c))), + (h.display = 'inline-block'))), + n.overflow && + ((h.overflow = 'hidden'), + p.always(function () { + ;(h.overflow = n.overflow[0]), + (h.overflowX = n.overflow[1]), + (h.overflowY = n.overflow[2]) + })), + (u = !1), + d)) + u || + (y + ? 'hidden' in y && (g = y.hidden) + : (y = Y.access(e, 'fxshow', { display: l })), + o && (y.hidden = !g), + g && le([e], !0), + p.done(function () { + for (r in (g || le([e]), Y.remove(e, 'fxshow'), d)) + S.style(e, r, d[r]) + })), + (u = ct(g ? y[r] : 0, r, p)), + r in y || + ((y[r] = u.start), g && ((u.end = u.start), (u.start = 0))) + }, + ], + prefilter: function (e, t) { + t ? ft.prefilters.unshift(e) : ft.prefilters.push(e) + }, + })), + (S.speed = function (e, t, n) { + var r = + e && 'object' == typeof e + ? S.extend({}, e) + : { + complete: n || (!n && t) || (m(e) && e), + duration: e, + easing: (n && t) || (t && !m(t) && t), + } + return ( + S.fx.off + ? (r.duration = 0) + : 'number' != typeof r.duration && + (r.duration in S.fx.speeds + ? (r.duration = S.fx.speeds[r.duration]) + : (r.duration = S.fx.speeds._default)), + (null != r.queue && !0 !== r.queue) || (r.queue = 'fx'), + (r.old = r.complete), + (r.complete = function () { + m(r.old) && r.old.call(this), r.queue && S.dequeue(this, r.queue) + }), + r + ) + }), + S.fn.extend({ + fadeTo: function (e, t, n, r) { + return this.filter(ae) + .css('opacity', 0) + .show() + .end() + .animate({ opacity: t }, e, n, r) + }, + animate: function (t, e, n, r) { + var i = S.isEmptyObject(t), + o = S.speed(e, n, r), + a = function () { + var e = ft(this, S.extend({}, t), o) + ;(i || Y.get(this, 'finish')) && e.stop(!0) + } + return ( + (a.finish = a), + i || !1 === o.queue ? this.each(a) : this.queue(o.queue, a) + ) + }, + stop: function (i, e, o) { + var a = function (e) { + var t = e.stop + delete e.stop, t(o) + } + return ( + 'string' != typeof i && ((o = e), (e = i), (i = void 0)), + e && this.queue(i || 'fx', []), + this.each(function () { + var e = !0, + t = null != i && i + 'queueHooks', + n = S.timers, + r = Y.get(this) + if (t) r[t] && r[t].stop && a(r[t]) + else for (t in r) r[t] && r[t].stop && at.test(t) && a(r[t]) + for (t = n.length; t--; ) + n[t].elem !== this || + (null != i && n[t].queue !== i) || + (n[t].anim.stop(o), (e = !1), n.splice(t, 1)) + ;(!e && o) || S.dequeue(this, i) + }) + ) + }, + finish: function (a) { + return ( + !1 !== a && (a = a || 'fx'), + this.each(function () { + var e, + t = Y.get(this), + n = t[a + 'queue'], + r = t[a + 'queueHooks'], + i = S.timers, + o = n ? n.length : 0 + for ( + t.finish = !0, + S.queue(this, a, []), + r && r.stop && r.stop.call(this, !0), + e = i.length; + e--; + + ) + i[e].elem === this && + i[e].queue === a && + (i[e].anim.stop(!0), i.splice(e, 1)) + for (e = 0; e < o; e++) + n[e] && n[e].finish && n[e].finish.call(this) + delete t.finish + }) + ) + }, + }), + S.each(['toggle', 'show', 'hide'], function (e, r) { + var i = S.fn[r] + S.fn[r] = function (e, t, n) { + return null == e || 'boolean' == typeof e + ? i.apply(this, arguments) + : this.animate(lt(r, !0), e, t, n) + } + }), + S.each( + { + slideDown: lt('show'), + slideUp: lt('hide'), + slideToggle: lt('toggle'), + fadeIn: { opacity: 'show' }, + fadeOut: { opacity: 'hide' }, + fadeToggle: { opacity: 'toggle' }, + }, + function (e, r) { + S.fn[e] = function (e, t, n) { + return this.animate(r, e, t, n) + } + } + ), + (S.timers = []), + (S.fx.tick = function () { + var e, + t = 0, + n = S.timers + for (tt = Date.now(); t < n.length; t++) + (e = n[t])() || n[t] !== e || n.splice(t--, 1) + n.length || S.fx.stop(), (tt = void 0) + }), + (S.fx.timer = function (e) { + S.timers.push(e), S.fx.start() + }), + (S.fx.interval = 13), + (S.fx.start = function () { + nt || ((nt = !0), st()) + }), + (S.fx.stop = function () { + nt = null + }), + (S.fx.speeds = { slow: 600, fast: 200, _default: 400 }), + (S.fn.delay = function (r, e) { + return ( + (r = (S.fx && S.fx.speeds[r]) || r), + (e = e || 'fx'), + this.queue(e, function (e, t) { + var n = C.setTimeout(e, r) + t.stop = function () { + C.clearTimeout(n) + } + }) + ) + }), + (rt = E.createElement('input')), + (it = E.createElement('select').appendChild(E.createElement('option'))), + (rt.type = 'checkbox'), + (v.checkOn = '' !== rt.value), + (v.optSelected = it.selected), + ((rt = E.createElement('input')).value = 't'), + (rt.type = 'radio'), + (v.radioValue = 't' === rt.value) + var pt, + dt = S.expr.attrHandle + S.fn.extend({ + attr: function (e, t) { + return B(this, S.attr, e, t, 1 < arguments.length) + }, + removeAttr: function (e) { + return this.each(function () { + S.removeAttr(this, e) + }) + }, + }), + S.extend({ + attr: function (e, t, n) { + var r, + i, + o = e.nodeType + if (3 !== o && 8 !== o && 2 !== o) + return 'undefined' == typeof e.getAttribute + ? S.prop(e, t, n) + : ((1 === o && S.isXMLDoc(e)) || + (i = + S.attrHooks[t.toLowerCase()] || + (S.expr.match.bool.test(t) ? pt : void 0)), + void 0 !== n + ? null === n + ? void S.removeAttr(e, t) + : i && 'set' in i && void 0 !== (r = i.set(e, n, t)) + ? r + : (e.setAttribute(t, n + ''), n) + : i && 'get' in i && null !== (r = i.get(e, t)) + ? r + : null == (r = S.find.attr(e, t)) + ? void 0 + : r) + }, + attrHooks: { + type: { + set: function (e, t) { + if (!v.radioValue && 'radio' === t && A(e, 'input')) { + var n = e.value + return e.setAttribute('type', t), n && (e.value = n), t + } + }, + }, + }, + removeAttr: function (e, t) { + var n, + r = 0, + i = t && t.match(P) + if (i && 1 === e.nodeType) while ((n = i[r++])) e.removeAttribute(n) + }, + }), + (pt = { + set: function (e, t, n) { + return !1 === t ? S.removeAttr(e, n) : e.setAttribute(n, n), n + }, + }), + S.each(S.expr.match.bool.source.match(/\w+/g), function (e, t) { + var a = dt[t] || S.find.attr + dt[t] = function (e, t, n) { + var r, + i, + o = t.toLowerCase() + return ( + n || + ((i = dt[o]), + (dt[o] = r), + (r = null != a(e, t, n) ? o : null), + (dt[o] = i)), + r + ) + } + }) + var ht = /^(?:input|select|textarea|button)$/i, + gt = /^(?:a|area)$/i + function yt(e) { + return (e.match(P) || []).join(' ') + } + function vt(e) { + return (e.getAttribute && e.getAttribute('class')) || '' + } + function mt(e) { + return Array.isArray(e) ? e : ('string' == typeof e && e.match(P)) || [] + } + S.fn.extend({ + prop: function (e, t) { + return B(this, S.prop, e, t, 1 < arguments.length) + }, + removeProp: function (e) { + return this.each(function () { + delete this[S.propFix[e] || e] + }) + }, + }), + S.extend({ + prop: function (e, t, n) { + var r, + i, + o = e.nodeType + if (3 !== o && 8 !== o && 2 !== o) + return ( + (1 === o && S.isXMLDoc(e)) || + ((t = S.propFix[t] || t), (i = S.propHooks[t])), + void 0 !== n + ? i && 'set' in i && void 0 !== (r = i.set(e, n, t)) + ? r + : (e[t] = n) + : i && 'get' in i && null !== (r = i.get(e, t)) + ? r + : e[t] + ) + }, + propHooks: { + tabIndex: { + get: function (e) { + var t = S.find.attr(e, 'tabindex') + return t + ? parseInt(t, 10) + : ht.test(e.nodeName) || (gt.test(e.nodeName) && e.href) + ? 0 + : -1 + }, + }, + }, + propFix: { for: 'htmlFor', class: 'className' }, + }), + v.optSelected || + (S.propHooks.selected = { + get: function (e) { + var t = e.parentNode + return t && t.parentNode && t.parentNode.selectedIndex, null + }, + set: function (e) { + var t = e.parentNode + t && (t.selectedIndex, t.parentNode && t.parentNode.selectedIndex) + }, + }), + S.each( + [ + 'tabIndex', + 'readOnly', + 'maxLength', + 'cellSpacing', + 'cellPadding', + 'rowSpan', + 'colSpan', + 'useMap', + 'frameBorder', + 'contentEditable', + ], + function () { + S.propFix[this.toLowerCase()] = this + } + ), + S.fn.extend({ + addClass: function (t) { + var e, n, r, i, o, a + return m(t) + ? this.each(function (e) { + S(this).addClass(t.call(this, e, vt(this))) + }) + : (e = mt(t)).length + ? this.each(function () { + if ( + ((r = vt(this)), (n = 1 === this.nodeType && ' ' + yt(r) + ' ')) + ) { + for (o = 0; o < e.length; o++) + (i = e[o]), n.indexOf(' ' + i + ' ') < 0 && (n += i + ' ') + ;(a = yt(n)), r !== a && this.setAttribute('class', a) + } + }) + : this + }, + removeClass: function (t) { + var e, n, r, i, o, a + return m(t) + ? this.each(function (e) { + S(this).removeClass(t.call(this, e, vt(this))) + }) + : arguments.length + ? (e = mt(t)).length + ? this.each(function () { + if ( + ((r = vt(this)), + (n = 1 === this.nodeType && ' ' + yt(r) + ' ')) + ) { + for (o = 0; o < e.length; o++) { + i = e[o] + while (-1 < n.indexOf(' ' + i + ' ')) + n = n.replace(' ' + i + ' ', ' ') + } + ;(a = yt(n)), r !== a && this.setAttribute('class', a) + } + }) + : this + : this.attr('class', '') + }, + toggleClass: function (t, n) { + var e, + r, + i, + o, + a = typeof t, + s = 'string' === a || Array.isArray(t) + return m(t) + ? this.each(function (e) { + S(this).toggleClass(t.call(this, e, vt(this), n), n) + }) + : 'boolean' == typeof n && s + ? n + ? this.addClass(t) + : this.removeClass(t) + : ((e = mt(t)), + this.each(function () { + if (s) + for (o = S(this), i = 0; i < e.length; i++) + (r = e[i]), o.hasClass(r) ? o.removeClass(r) : o.addClass(r) + else + (void 0 !== t && 'boolean' !== a) || + ((r = vt(this)) && Y.set(this, '__className__', r), + this.setAttribute && + this.setAttribute( + 'class', + r || !1 === t ? '' : Y.get(this, '__className__') || '' + )) + })) + }, + hasClass: function (e) { + var t, + n, + r = 0 + t = ' ' + e + ' ' + while ((n = this[r++])) + if (1 === n.nodeType && -1 < (' ' + yt(vt(n)) + ' ').indexOf(t)) + return !0 + return !1 + }, + }) + var xt = /\r/g + S.fn.extend({ + val: function (n) { + var r, + e, + i, + t = this[0] + return arguments.length + ? ((i = m(n)), + this.each(function (e) { + var t + 1 === this.nodeType && + (null == (t = i ? n.call(this, e, S(this).val()) : n) + ? (t = '') + : 'number' == typeof t + ? (t += '') + : Array.isArray(t) && + (t = S.map(t, function (e) { + return null == e ? '' : e + '' + })), + ((r = + S.valHooks[this.type] || + S.valHooks[this.nodeName.toLowerCase()]) && + 'set' in r && + void 0 !== r.set(this, t, 'value')) || + (this.value = t)) + })) + : t + ? (r = S.valHooks[t.type] || S.valHooks[t.nodeName.toLowerCase()]) && + 'get' in r && + void 0 !== (e = r.get(t, 'value')) + ? e + : 'string' == typeof (e = t.value) + ? e.replace(xt, '') + : null == e + ? '' + : e + : void 0 + }, + }), + S.extend({ + valHooks: { + option: { + get: function (e) { + var t = S.find.attr(e, 'value') + return null != t ? t : yt(S.text(e)) + }, + }, + select: { + get: function (e) { + var t, + n, + r, + i = e.options, + o = e.selectedIndex, + a = 'select-one' === e.type, + s = a ? null : [], + u = a ? o + 1 : i.length + for (r = o < 0 ? u : a ? o : 0; r < u; r++) + if ( + ((n = i[r]).selected || r === o) && + !n.disabled && + (!n.parentNode.disabled || !A(n.parentNode, 'optgroup')) + ) { + if (((t = S(n).val()), a)) return t + s.push(t) + } + return s + }, + set: function (e, t) { + var n, + r, + i = e.options, + o = S.makeArray(t), + a = i.length + while (a--) + ((r = i[a]).selected = + -1 < S.inArray(S.valHooks.option.get(r), o)) && (n = !0) + return n || (e.selectedIndex = -1), o + }, + }, + }, + }), + S.each(['radio', 'checkbox'], function () { + ;(S.valHooks[this] = { + set: function (e, t) { + if (Array.isArray(t)) + return (e.checked = -1 < S.inArray(S(e).val(), t)) + }, + }), + v.checkOn || + (S.valHooks[this].get = function (e) { + return null === e.getAttribute('value') ? 'on' : e.value + }) + }), + (v.focusin = 'onfocusin' in C) + var bt = /^(?:focusinfocus|focusoutblur)$/, + wt = function (e) { + e.stopPropagation() + } + S.extend(S.event, { + trigger: function (e, t, n, r) { + var i, + o, + a, + s, + u, + l, + c, + f, + p = [n || E], + d = y.call(e, 'type') ? e.type : e, + h = y.call(e, 'namespace') ? e.namespace.split('.') : [] + if ( + ((o = f = a = n = n || E), + 3 !== n.nodeType && + 8 !== n.nodeType && + !bt.test(d + S.event.triggered) && + (-1 < d.indexOf('.') && ((d = (h = d.split('.')).shift()), h.sort()), + (u = d.indexOf(':') < 0 && 'on' + d), + ((e = e[S.expando] + ? e + : new S.Event(d, 'object' == typeof e && e)).isTrigger = r ? 2 : 3), + (e.namespace = h.join('.')), + (e.rnamespace = e.namespace + ? new RegExp('(^|\\.)' + h.join('\\.(?:.*\\.|)') + '(\\.|$)') + : null), + (e.result = void 0), + e.target || (e.target = n), + (t = null == t ? [e] : S.makeArray(t, [e])), + (c = S.event.special[d] || {}), + r || !c.trigger || !1 !== c.trigger.apply(n, t))) + ) { + if (!r && !c.noBubble && !x(n)) { + for ( + s = c.delegateType || d, bt.test(s + d) || (o = o.parentNode); + o; + o = o.parentNode + ) + p.push(o), (a = o) + a === (n.ownerDocument || E) && + p.push(a.defaultView || a.parentWindow || C) + } + i = 0 + while ((o = p[i++]) && !e.isPropagationStopped()) + (f = o), + (e.type = 1 < i ? s : c.bindType || d), + (l = + (Y.get(o, 'events') || Object.create(null))[e.type] && + Y.get(o, 'handle')) && l.apply(o, t), + (l = u && o[u]) && + l.apply && + V(o) && + ((e.result = l.apply(o, t)), + !1 === e.result && e.preventDefault()) + return ( + (e.type = d), + r || + e.isDefaultPrevented() || + (c._default && !1 !== c._default.apply(p.pop(), t)) || + !V(n) || + (u && + m(n[d]) && + !x(n) && + ((a = n[u]) && (n[u] = null), + (S.event.triggered = d), + e.isPropagationStopped() && f.addEventListener(d, wt), + n[d](), + e.isPropagationStopped() && f.removeEventListener(d, wt), + (S.event.triggered = void 0), + a && (n[u] = a))), + e.result + ) + } + }, + simulate: function (e, t, n) { + var r = S.extend(new S.Event(), n, { type: e, isSimulated: !0 }) + S.event.trigger(r, null, t) + }, + }), + S.fn.extend({ + trigger: function (e, t) { + return this.each(function () { + S.event.trigger(e, t, this) + }) + }, + triggerHandler: function (e, t) { + var n = this[0] + if (n) return S.event.trigger(e, t, n, !0) + }, + }), + v.focusin || + S.each({ focus: 'focusin', blur: 'focusout' }, function (n, r) { + var i = function (e) { + S.event.simulate(r, e.target, S.event.fix(e)) + } + S.event.special[r] = { + setup: function () { + var e = this.ownerDocument || this.document || this, + t = Y.access(e, r) + t || e.addEventListener(n, i, !0), Y.access(e, r, (t || 0) + 1) + }, + teardown: function () { + var e = this.ownerDocument || this.document || this, + t = Y.access(e, r) - 1 + t + ? Y.access(e, r, t) + : (e.removeEventListener(n, i, !0), Y.remove(e, r)) + }, + } + }) + var Tt = C.location, + Ct = { guid: Date.now() }, + Et = /\?/ + S.parseXML = function (e) { + var t, n + if (!e || 'string' != typeof e) return null + try { + t = new C.DOMParser().parseFromString(e, 'text/xml') + } catch (e) {} + return ( + (n = t && t.getElementsByTagName('parsererror')[0]), + (t && !n) || + S.error( + 'Invalid XML: ' + + (n + ? S.map(n.childNodes, function (e) { + return e.textContent + }).join('\n') + : e) + ), + t + ) + } + var St = /\[\]$/, + kt = /\r?\n/g, + At = /^(?:submit|button|image|reset|file)$/i, + Nt = /^(?:input|select|textarea|keygen)/i + function jt(n, e, r, i) { + var t + if (Array.isArray(e)) + S.each(e, function (e, t) { + r || St.test(n) + ? i(n, t) + : jt( + n + '[' + ('object' == typeof t && null != t ? e : '') + ']', + t, + r, + i + ) + }) + else if (r || 'object' !== w(e)) i(n, e) + else for (t in e) jt(n + '[' + t + ']', e[t], r, i) + } + ;(S.param = function (e, t) { + var n, + r = [], + i = function (e, t) { + var n = m(t) ? t() : t + r[r.length] = + encodeURIComponent(e) + '=' + encodeURIComponent(null == n ? '' : n) + } + if (null == e) return '' + if (Array.isArray(e) || (e.jquery && !S.isPlainObject(e))) + S.each(e, function () { + i(this.name, this.value) + }) + else for (n in e) jt(n, e[n], t, i) + return r.join('&') + }), + S.fn.extend({ + serialize: function () { + return S.param(this.serializeArray()) + }, + serializeArray: function () { + return this.map(function () { + var e = S.prop(this, 'elements') + return e ? S.makeArray(e) : this + }) + .filter(function () { + var e = this.type + return ( + this.name && + !S(this).is(':disabled') && + Nt.test(this.nodeName) && + !At.test(e) && + (this.checked || !pe.test(e)) + ) + }) + .map(function (e, t) { + var n = S(this).val() + return null == n + ? null + : Array.isArray(n) + ? S.map(n, function (e) { + return { name: t.name, value: e.replace(kt, '\r\n') } + }) + : { name: t.name, value: n.replace(kt, '\r\n') } + }) + .get() + }, + }) + var Dt = /%20/g, + qt = /#.*$/, + Lt = /([?&])_=[^&]*/, + Ht = /^(.*?):[ \t]*([^\r\n]*)$/gm, + Ot = /^(?:GET|HEAD)$/, + Pt = /^\/\//, + Rt = {}, + Mt = {}, + It = '*/'.concat('*'), + Wt = E.createElement('a') + function Ft(o) { + return function (e, t) { + 'string' != typeof e && ((t = e), (e = '*')) + var n, + r = 0, + i = e.toLowerCase().match(P) || [] + if (m(t)) + while ((n = i[r++])) + '+' === n[0] + ? ((n = n.slice(1) || '*'), (o[n] = o[n] || []).unshift(t)) + : (o[n] = o[n] || []).push(t) + } + } + function $t(t, i, o, a) { + var s = {}, + u = t === Mt + function l(e) { + var r + return ( + (s[e] = !0), + S.each(t[e] || [], function (e, t) { + var n = t(i, o, a) + return 'string' != typeof n || u || s[n] + ? u + ? !(r = n) + : void 0 + : (i.dataTypes.unshift(n), l(n), !1) + }), + r + ) + } + return l(i.dataTypes[0]) || (!s['*'] && l('*')) + } + function Bt(e, t) { + var n, + r, + i = S.ajaxSettings.flatOptions || {} + for (n in t) void 0 !== t[n] && ((i[n] ? e : r || (r = {}))[n] = t[n]) + return r && S.extend(!0, e, r), e + } + ;(Wt.href = Tt.href), + S.extend({ + active: 0, + lastModified: {}, + etag: {}, + ajaxSettings: { + url: Tt.href, + type: 'GET', + isLocal: + /^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test( + Tt.protocol + ), + global: !0, + processData: !0, + async: !0, + contentType: 'application/x-www-form-urlencoded; charset=UTF-8', + accepts: { + '*': It, + text: 'text/plain', + html: 'text/html', + xml: 'application/xml, text/xml', + json: 'application/json, text/javascript', + }, + contents: { xml: /\bxml\b/, html: /\bhtml/, json: /\bjson\b/ }, + responseFields: { + xml: 'responseXML', + text: 'responseText', + json: 'responseJSON', + }, + converters: { + '* text': String, + 'text html': !0, + 'text json': JSON.parse, + 'text xml': S.parseXML, + }, + flatOptions: { url: !0, context: !0 }, + }, + ajaxSetup: function (e, t) { + return t ? Bt(Bt(e, S.ajaxSettings), t) : Bt(S.ajaxSettings, e) + }, + ajaxPrefilter: Ft(Rt), + ajaxTransport: Ft(Mt), + ajax: function (e, t) { + 'object' == typeof e && ((t = e), (e = void 0)), (t = t || {}) + var c, + f, + p, + n, + d, + r, + h, + g, + i, + o, + y = S.ajaxSetup({}, t), + v = y.context || y, + m = y.context && (v.nodeType || v.jquery) ? S(v) : S.event, + x = S.Deferred(), + b = S.Callbacks('once memory'), + w = y.statusCode || {}, + a = {}, + s = {}, + u = 'canceled', + T = { + readyState: 0, + getResponseHeader: function (e) { + var t + if (h) { + if (!n) { + n = {} + while ((t = Ht.exec(p))) + n[t[1].toLowerCase() + ' '] = ( + n[t[1].toLowerCase() + ' '] || [] + ).concat(t[2]) + } + t = n[e.toLowerCase() + ' '] + } + return null == t ? null : t.join(', ') + }, + getAllResponseHeaders: function () { + return h ? p : null + }, + setRequestHeader: function (e, t) { + return ( + null == h && + ((e = s[e.toLowerCase()] = s[e.toLowerCase()] || e), + (a[e] = t)), + this + ) + }, + overrideMimeType: function (e) { + return null == h && (y.mimeType = e), this + }, + statusCode: function (e) { + var t + if (e) + if (h) T.always(e[T.status]) + else for (t in e) w[t] = [w[t], e[t]] + return this + }, + abort: function (e) { + var t = e || u + return c && c.abort(t), l(0, t), this + }, + } + if ( + (x.promise(T), + (y.url = ((e || y.url || Tt.href) + '').replace( + Pt, + Tt.protocol + '//' + )), + (y.type = t.method || t.type || y.method || y.type), + (y.dataTypes = (y.dataType || '*').toLowerCase().match(P) || ['']), + null == y.crossDomain) + ) { + r = E.createElement('a') + try { + ;(r.href = y.url), + (r.href = r.href), + (y.crossDomain = + Wt.protocol + '//' + Wt.host != r.protocol + '//' + r.host) + } catch (e) { + y.crossDomain = !0 + } + } + if ( + (y.data && + y.processData && + 'string' != typeof y.data && + (y.data = S.param(y.data, y.traditional)), + $t(Rt, y, t, T), + h) + ) + return T + for (i in ((g = S.event && y.global) && + 0 == S.active++ && + S.event.trigger('ajaxStart'), + (y.type = y.type.toUpperCase()), + (y.hasContent = !Ot.test(y.type)), + (f = y.url.replace(qt, '')), + y.hasContent + ? y.data && + y.processData && + 0 === + (y.contentType || '').indexOf( + 'application/x-www-form-urlencoded' + ) && + (y.data = y.data.replace(Dt, '+')) + : ((o = y.url.slice(f.length)), + y.data && + (y.processData || 'string' == typeof y.data) && + ((f += (Et.test(f) ? '&' : '?') + y.data), delete y.data), + !1 === y.cache && + ((f = f.replace(Lt, '$1')), + (o = (Et.test(f) ? '&' : '?') + '_=' + Ct.guid++ + o)), + (y.url = f + o)), + y.ifModified && + (S.lastModified[f] && + T.setRequestHeader('If-Modified-Since', S.lastModified[f]), + S.etag[f] && T.setRequestHeader('If-None-Match', S.etag[f])), + ((y.data && y.hasContent && !1 !== y.contentType) || t.contentType) && + T.setRequestHeader('Content-Type', y.contentType), + T.setRequestHeader( + 'Accept', + y.dataTypes[0] && y.accepts[y.dataTypes[0]] + ? y.accepts[y.dataTypes[0]] + + ('*' !== y.dataTypes[0] ? ', ' + It + '; q=0.01' : '') + : y.accepts['*'] + ), + y.headers)) + T.setRequestHeader(i, y.headers[i]) + if (y.beforeSend && (!1 === y.beforeSend.call(v, T, y) || h)) + return T.abort() + if ( + ((u = 'abort'), + b.add(y.complete), + T.done(y.success), + T.fail(y.error), + (c = $t(Mt, y, t, T))) + ) { + if (((T.readyState = 1), g && m.trigger('ajaxSend', [T, y]), h)) + return T + y.async && + 0 < y.timeout && + (d = C.setTimeout(function () { + T.abort('timeout') + }, y.timeout)) + try { + ;(h = !1), c.send(a, l) + } catch (e) { + if (h) throw e + l(-1, e) + } + } else l(-1, 'No Transport') + function l(e, t, n, r) { + var i, + o, + a, + s, + u, + l = t + h || + ((h = !0), + d && C.clearTimeout(d), + (c = void 0), + (p = r || ''), + (T.readyState = 0 < e ? 4 : 0), + (i = (200 <= e && e < 300) || 304 === e), + n && + (s = (function (e, t, n) { + var r, + i, + o, + a, + s = e.contents, + u = e.dataTypes + while ('*' === u[0]) + u.shift(), + void 0 === r && + (r = e.mimeType || t.getResponseHeader('Content-Type')) + if (r) + for (i in s) + if (s[i] && s[i].test(r)) { + u.unshift(i) + break + } + if (u[0] in n) o = u[0] + else { + for (i in n) { + if (!u[0] || e.converters[i + ' ' + u[0]]) { + o = i + break + } + a || (a = i) + } + o = o || a + } + if (o) return o !== u[0] && u.unshift(o), n[o] + })(y, T, n)), + !i && + -1 < S.inArray('script', y.dataTypes) && + S.inArray('json', y.dataTypes) < 0 && + (y.converters['text script'] = function () {}), + (s = (function (e, t, n, r) { + var i, + o, + a, + s, + u, + l = {}, + c = e.dataTypes.slice() + if (c[1]) + for (a in e.converters) l[a.toLowerCase()] = e.converters[a] + o = c.shift() + while (o) + if ( + (e.responseFields[o] && (n[e.responseFields[o]] = t), + !u && r && e.dataFilter && (t = e.dataFilter(t, e.dataType)), + (u = o), + (o = c.shift())) + ) + if ('*' === o) o = u + else if ('*' !== u && u !== o) { + if (!(a = l[u + ' ' + o] || l['* ' + o])) + for (i in l) + if ( + (s = i.split(' '))[1] === o && + (a = l[u + ' ' + s[0]] || l['* ' + s[0]]) + ) { + !0 === a + ? (a = l[i]) + : !0 !== l[i] && ((o = s[0]), c.unshift(s[1])) + break + } + if (!0 !== a) + if (a && e['throws']) t = a(t) + else + try { + t = a(t) + } catch (e) { + return { + state: 'parsererror', + error: a + ? e + : 'No conversion from ' + u + ' to ' + o, + } + } + } + return { state: 'success', data: t } + })(y, s, T, i)), + i + ? (y.ifModified && + ((u = T.getResponseHeader('Last-Modified')) && + (S.lastModified[f] = u), + (u = T.getResponseHeader('etag')) && (S.etag[f] = u)), + 204 === e || 'HEAD' === y.type + ? (l = 'nocontent') + : 304 === e + ? (l = 'notmodified') + : ((l = s.state), (o = s.data), (i = !(a = s.error)))) + : ((a = l), (!e && l) || ((l = 'error'), e < 0 && (e = 0))), + (T.status = e), + (T.statusText = (t || l) + ''), + i ? x.resolveWith(v, [o, l, T]) : x.rejectWith(v, [T, l, a]), + T.statusCode(w), + (w = void 0), + g && m.trigger(i ? 'ajaxSuccess' : 'ajaxError', [T, y, i ? o : a]), + b.fireWith(v, [T, l]), + g && + (m.trigger('ajaxComplete', [T, y]), + --S.active || S.event.trigger('ajaxStop'))) + } + return T + }, + getJSON: function (e, t, n) { + return S.get(e, t, n, 'json') + }, + getScript: function (e, t) { + return S.get(e, void 0, t, 'script') + }, + }), + S.each(['get', 'post'], function (e, i) { + S[i] = function (e, t, n, r) { + return ( + m(t) && ((r = r || n), (n = t), (t = void 0)), + S.ajax( + S.extend( + { url: e, type: i, dataType: r, data: t, success: n }, + S.isPlainObject(e) && e + ) + ) + ) + } + }), + S.ajaxPrefilter(function (e) { + var t + for (t in e.headers) + 'content-type' === t.toLowerCase() && + (e.contentType = e.headers[t] || '') + }), + (S._evalUrl = function (e, t, n) { + return S.ajax({ + url: e, + type: 'GET', + dataType: 'script', + cache: !0, + async: !1, + global: !1, + converters: { 'text script': function () {} }, + dataFilter: function (e) { + S.globalEval(e, t, n) + }, + }) + }), + S.fn.extend({ + wrapAll: function (e) { + var t + return ( + this[0] && + (m(e) && (e = e.call(this[0])), + (t = S(e, this[0].ownerDocument).eq(0).clone(!0)), + this[0].parentNode && t.insertBefore(this[0]), + t + .map(function () { + var e = this + while (e.firstElementChild) e = e.firstElementChild + return e + }) + .append(this)), + this + ) + }, + wrapInner: function (n) { + return m(n) + ? this.each(function (e) { + S(this).wrapInner(n.call(this, e)) + }) + : this.each(function () { + var e = S(this), + t = e.contents() + t.length ? t.wrapAll(n) : e.append(n) + }) + }, + wrap: function (t) { + var n = m(t) + return this.each(function (e) { + S(this).wrapAll(n ? t.call(this, e) : t) + }) + }, + unwrap: function (e) { + return ( + this.parent(e) + .not('body') + .each(function () { + S(this).replaceWith(this.childNodes) + }), + this + ) + }, + }), + (S.expr.pseudos.hidden = function (e) { + return !S.expr.pseudos.visible(e) + }), + (S.expr.pseudos.visible = function (e) { + return !!(e.offsetWidth || e.offsetHeight || e.getClientRects().length) + }), + (S.ajaxSettings.xhr = function () { + try { + return new C.XMLHttpRequest() + } catch (e) {} + }) + var _t = { 0: 200, 1223: 204 }, + zt = S.ajaxSettings.xhr() + ;(v.cors = !!zt && 'withCredentials' in zt), + (v.ajax = zt = !!zt), + S.ajaxTransport(function (i) { + var o, a + if (v.cors || (zt && !i.crossDomain)) + return { + send: function (e, t) { + var n, + r = i.xhr() + if ( + (r.open(i.type, i.url, i.async, i.username, i.password), + i.xhrFields) + ) + for (n in i.xhrFields) r[n] = i.xhrFields[n] + for (n in (i.mimeType && + r.overrideMimeType && + r.overrideMimeType(i.mimeType), + i.crossDomain || + e['X-Requested-With'] || + (e['X-Requested-With'] = 'XMLHttpRequest'), + e)) + r.setRequestHeader(n, e[n]) + ;(o = function (e) { + return function () { + o && + ((o = + a = + r.onload = + r.onerror = + r.onabort = + r.ontimeout = + r.onreadystatechange = + null), + 'abort' === e + ? r.abort() + : 'error' === e + ? 'number' != typeof r.status + ? t(0, 'error') + : t(r.status, r.statusText) + : t( + _t[r.status] || r.status, + r.statusText, + 'text' !== (r.responseType || 'text') || + 'string' != typeof r.responseText + ? { binary: r.response } + : { text: r.responseText }, + r.getAllResponseHeaders() + )) + } + }), + (r.onload = o()), + (a = r.onerror = r.ontimeout = o('error')), + void 0 !== r.onabort + ? (r.onabort = a) + : (r.onreadystatechange = function () { + 4 === r.readyState && + C.setTimeout(function () { + o && a() + }) + }), + (o = o('abort')) + try { + r.send((i.hasContent && i.data) || null) + } catch (e) { + if (o) throw e + } + }, + abort: function () { + o && o() + }, + } + }), + S.ajaxPrefilter(function (e) { + e.crossDomain && (e.contents.script = !1) + }), + S.ajaxSetup({ + accepts: { + script: + 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript', + }, + contents: { script: /\b(?:java|ecma)script\b/ }, + converters: { + 'text script': function (e) { + return S.globalEval(e), e + }, + }, + }), + S.ajaxPrefilter('script', function (e) { + void 0 === e.cache && (e.cache = !1), e.crossDomain && (e.type = 'GET') + }), + S.ajaxTransport('script', function (n) { + var r, i + if (n.crossDomain || n.scriptAttrs) + return { + send: function (e, t) { + ;(r = S(' + + + + + \ No newline at end of file diff --git a/kc/show-kc.html b/kc/show-kc.html new file mode 100644 index 0000000..1804841 --- /dev/null +++ b/kc/show-kc.html @@ -0,0 +1,247 @@ + + + + + + + 投资黔东南 + + + + + + + +
+
+ +
+
+ + + +
+
+ +
+
+
+ +
+
+
+
+ + + \ No newline at end of file diff --git a/mc/list.html b/mc/list.html new file mode 100644 index 0000000..a3f2761 --- /dev/null +++ b/mc/list.html @@ -0,0 +1,113 @@ + + + + + + + 投资黔东南 + + + + +
+
+ +
+
+ + + +
+ 木材加工及家具制造 +
+ +
+
+ +
+
+ +
+
+ + + +
+
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/mc/show-mc.html b/mc/show-mc.html new file mode 100644 index 0000000..a665497 --- /dev/null +++ b/mc/show-mc.html @@ -0,0 +1,246 @@ + + + + + + + 投资黔东南 + + + + + + + +
+
+ +
+
+ + + +
+
+ +
+
+
+ +
+
+
+
+ + + \ No newline at end of file diff --git a/qdntz/css/bootstrap.min.css b/qdntz/css/bootstrap.min.css new file mode 100644 index 0000000..97551fe --- /dev/null +++ b/qdntz/css/bootstrap.min.css @@ -0,0 +1,7 @@ +@charset "UTF-8";/*! + * Bootstrap v5.1.2 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-color-rgb:33,37,41;--bs-body-bg-rgb:255,255,255;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-bg:#fff}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:#6c757d}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{width:100%;padding-right:var(--bs-gutter-x,.75rem);padding-left:var(--bs-gutter-x,.75rem);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.table{--bs-table-bg:transparent;--bs-table-accent-bg:transparent;--bs-table-striped-color:#212529;--bs-table-striped-bg:rgba(0, 0, 0, 0.05);--bs-table-active-color:#212529;--bs-table-active-bg:rgba(0, 0, 0, 0.1);--bs-table-hover-color:#212529;--bs-table-hover-bg:rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;color:#212529;vertical-align:top;border-color:#dee2e6}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>:not(:first-child){border-top:2px solid currentColor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-accent-bg:var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg:var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover>*{--bs-table-accent-bg:var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg:#cfe2ff;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000;color:#000;border-color:#bacbe6}.table-secondary{--bs-table-bg:#e2e3e5;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000;color:#000;border-color:#cbccce}.table-success{--bs-table-bg:#d1e7dd;--bs-table-striped-bg:#c7dbd2;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000;color:#000;border-color:#bcd0c7}.table-info{--bs-table-bg:#cff4fc;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000;color:#000;border-color:#badce3}.table-warning{--bs-table-bg:#fff3cd;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000;color:#000;border-color:#e6dbb9}.table-danger{--bs-table-bg:#f8d7da;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000;color:#000;border-color:#dfc2c4}.table-light{--bs-table-bg:#f8f9fa;--bs-table-striped-bg:#ecedee;--bs-table-striped-color:#000;--bs-table-active-bg:#dfe0e1;--bs-table-active-color:#000;--bs-table-hover-bg:#e5e6e7;--bs-table-hover-color:#000;color:#000;border-color:#dfe0e1}.table-dark{--bs-table-bg:#212529;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:#fff;border-color:#373b3e}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width:575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#212529;background-color:#fff;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + .5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1.5em;border-radius:.25rem}.form-control-color::-webkit-color-swatch{height:1.5em;border-radius:.25rem}.form-select{display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;-moz-padding-start:calc(0.75rem - 3px);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #212529}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem;border-radius:.2rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:.3rem}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#0d6efd;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid transparent;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media (prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control{padding:1rem .75rem}.form-floating>.form-control::-moz-placeholder{color:transparent}.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(25,135,84,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#198754;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:#198754}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:#198754}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:#198754}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group .form-control.is-valid,.input-group .form-select.is-valid,.was-validated .input-group .form-control:valid,.was-validated .input-group .form-select:valid{z-index:1}.input-group .form-control.is-valid:focus,.input-group .form-select.is-valid:focus,.was-validated .input-group .form-control:valid:focus,.was-validated .input-group .form-select:valid:focus{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:#dc3545}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:#dc3545}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:#dc3545}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group .form-control.is-invalid,.input-group .form-select.is-invalid,.was-validated .input-group .form-control:invalid,.was-validated .input-group .form-select:invalid{z-index:2}.input-group .form-control.is-invalid:focus,.input-group .form-select.is-invalid:focus,.was-validated .input-group .form-control:invalid:focus,.was-validated .input-group .form-select:invalid:focus{z-index:3}.btn{display:inline-block;align-self:center;font-weight:400;line-height:1.5;color:#212529;text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-primary{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-primary:hover{color:#fff;background-color:#0b5ed7;border-color:#0a58ca}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#0b5ed7;border-color:#0a58ca;box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-check:active+.btn-primary,.btn-check:checked+.btn-primary,.btn-primary.active,.btn-primary:active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0a58ca;border-color:#0a53be}.btn-check:active+.btn-primary:focus,.btn-check:checked+.btn-primary:focus,.btn-primary.active:focus,.btn-primary:active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5c636a;border-color:#565e64}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#fff;background-color:#5c636a;border-color:#565e64;box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-check:active+.btn-secondary,.btn-check:checked+.btn-secondary,.btn-secondary.active,.btn-secondary:active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#565e64;border-color:#51585e}.btn-check:active+.btn-secondary:focus,.btn-check:checked+.btn-secondary:focus,.btn-secondary.active:focus,.btn-secondary:active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-success{color:#fff;background-color:#198754;border-color:#198754}.btn-success:hover{color:#fff;background-color:#157347;border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#157347;border-color:#146c43;box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-check:active+.btn-success,.btn-check:checked+.btn-success,.btn-success.active,.btn-success:active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f}.btn-check:active+.btn-success:focus,.btn-check:checked+.btn-success:focus,.btn-success.active:focus,.btn-success:active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#198754;border-color:#198754}.btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{color:#000;background-color:#31d2f2;border-color:#25cff2;box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-check:active+.btn-info,.btn-check:checked+.btn-info,.btn-info.active,.btn-info:active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2}.btn-check:active+.btn-info:focus,.btn-check:checked+.btn-info:focus,.btn-info.active:focus,.btn-info:active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-info.disabled,.btn-info:disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;border-color:#ffc720;box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-check:active+.btn-warning,.btn-check:checked+.btn-warning,.btn-warning.active,.btn-warning:active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720}.btn-check:active+.btn-warning:focus,.btn-check:checked+.btn-warning:focus,.btn-warning.active:focus,.btn-warning:active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#bb2d3b;border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#bb2d3b;border-color:#b02a37;box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-check:active+.btn-danger,.btn-check:checked+.btn-danger,.btn-danger.active,.btn-danger:active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:active+.btn-danger:focus,.btn-check:checked+.btn-danger:focus,.btn-danger.active:focus,.btn-danger:active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#f9fafb;border-color:#f9fafb;box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-check:active+.btn-light,.btn-check:checked+.btn-light,.btn-light.active,.btn-light:active,.show>.btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:active+.btn-light:focus,.btn-check:checked+.btn-light:focus,.btn-light.active:focus,.btn-light:active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-light.disabled,.btn-light:disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#212529;border-color:#212529}.btn-dark:hover{color:#fff;background-color:#1c1f23;border-color:#1a1e21}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#1c1f23;border-color:#1a1e21;box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-check:active+.btn-dark,.btn-check:checked+.btn-dark,.btn-dark.active,.btn-dark:active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f}.btn-check:active+.btn-dark:focus,.btn-check:checked+.btn-dark:focus,.btn-dark.active:focus,.btn-dark:active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#212529;border-color:#212529}.btn-outline-primary{color:#0d6efd;border-color:#0d6efd}.btn-outline-primary:hover{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-check:active+.btn-outline-primary,.btn-check:checked+.btn-outline-primary,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show,.btn-outline-primary:active{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:active+.btn-outline-primary:focus,.btn-check:checked+.btn-outline-primary:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus,.btn-outline-primary:active:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#0d6efd;background-color:transparent}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-check:active+.btn-outline-secondary,.btn-check:checked+.btn-outline-secondary,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show,.btn-outline-secondary:active{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:active+.btn-outline-secondary:focus,.btn-check:checked+.btn-outline-secondary:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus,.btn-outline-secondary:active:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-success{color:#198754;border-color:#198754}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-check:active+.btn-outline-success,.btn-check:checked+.btn-outline-success,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show,.btn-outline-success:active{color:#fff;background-color:#198754;border-color:#198754}.btn-check:active+.btn-outline-success:focus,.btn-check:checked+.btn-outline-success:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus,.btn-outline-success:active:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#198754;background-color:transparent}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-check:active+.btn-outline-info,.btn-check:checked+.btn-outline-info,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show,.btn-outline-info:active{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:active+.btn-outline-info:focus,.btn-check:checked+.btn-outline-info:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus,.btn-outline-info:active:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#0dcaf0;background-color:transparent}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-check:active+.btn-outline-warning,.btn-check:checked+.btn-outline-warning,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show,.btn-outline-warning:active{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:active+.btn-outline-warning:focus,.btn-check:checked+.btn-outline-warning:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus,.btn-outline-warning:active:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-check:active+.btn-outline-danger,.btn-check:checked+.btn-outline-danger,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show,.btn-outline-danger:active{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:active+.btn-outline-danger:focus,.btn-check:checked+.btn-outline-danger:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus,.btn-outline-danger:active:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-check:active+.btn-outline-light,.btn-check:checked+.btn-outline-light,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show,.btn-outline-light:active{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:active+.btn-outline-light:focus,.btn-check:checked+.btn-outline-light:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus,.btn-outline-light:active:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-dark{color:#212529;border-color:#212529}.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-check:active+.btn-outline-dark,.btn-check:checked+.btn-outline-dark,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show,.btn-outline-dark:active{color:#fff;background-color:#212529;border-color:#212529}.btn-check:active+.btn-outline-dark:focus,.btn-check:checked+.btn-outline-dark:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus,.btn-outline-dark:active:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#212529;background-color:transparent}.btn-link{font-weight:400;color:#0d6efd;text-decoration:underline}.btn-link:hover{color:#0a58ca}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropend,.dropstart,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;z-index:1000;display:none;min-width:10rem;padding:.5rem 0;margin:0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:.125rem}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#212529;text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#1e2125;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0d6efd}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#212529}.dropdown-menu-dark{color:#dee2e6;background-color:#343a40;border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item{color:#dee2e6}.dropdown-menu-dark .dropdown-item:focus,.dropdown-menu-dark .dropdown-item:hover{color:#fff;background-color:rgba(255,255,255,.15)}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#0d6efd}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#adb5bd}.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item-text{color:#dee2e6}.dropdown-menu-dark .dropdown-header{color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;color:#0d6efd;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:#0a58ca}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;background:0 0;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6;isolation:isolate}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{background:0 0;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#0d6efd}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:.5rem;padding-bottom:.5rem}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;text-decoration:none;white-space:nowrap}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem;transition:box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas-header{display:none}.navbar-expand-sm .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-sm .offcanvas-bottom,.navbar-expand-sm .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas-header{display:none}.navbar-expand-md .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-md .offcanvas-bottom,.navbar-expand-md .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas-header{display:none}.navbar-expand-lg .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-lg .offcanvas-bottom,.navbar-expand-lg .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas-header{display:none}.navbar-expand-xl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-xl .offcanvas-bottom,.navbar-expand-xl .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-xxl .offcanvas-bottom,.navbar-expand-xxl .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas-header{display:none}.navbar-expand .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand .offcanvas-bottom,.navbar-expand .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.55)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.55);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.55)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.55)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.55);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:1rem 1rem}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.5rem 1rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.5rem;margin-bottom:-.5rem;margin-left:-.5rem;border-bottom:0}.card-header-pills{margin-right:-.5rem;margin-left:-.5rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-group>.card{margin-bottom:.75rem}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:1rem 1.25rem;font-size:1rem;color:#212529;text-align:left;background-color:#fff;border:0;border-radius:0;overflow-anchor:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,border-radius .15s ease}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:#0c63e4;background-color:#e7f1ff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.125)}.accordion-button:not(.collapsed)::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");transform:rotate(-180deg)}.accordion-button::after{flex-shrink:0;width:1.25rem;height:1.25rem;margin-left:auto;content:"";background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-size:1.25rem;transition:transform .2s ease-in-out}@media (prefers-reduced-motion:reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.accordion-header{margin-bottom:0}.accordion-item{background-color:#fff;border:1px solid rgba(0,0,0,.125)}.accordion-item:first-of-type{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.accordion-item:first-of-type .accordion-button{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-body{padding:1rem 1.25rem}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button{border-radius:0}.breadcrumb{display:flex;flex-wrap:wrap;padding:0 0;margin-bottom:1rem;list-style:none}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#6c757d;content:var(--bs-breadcrumb-divider, "/")}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;color:#0d6efd;text-decoration:none;background-color:#fff;border:1px solid #dee2e6;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:#0a58ca;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;color:#0a58ca;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.page-item:not(:first-child) .page-link{margin-left:-1px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#dee2e6}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{position:relative;padding:1rem 1rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{color:#084298;background-color:#cfe2ff;border-color:#b6d4fe}.alert-primary .alert-link{color:#06357a}.alert-secondary{color:#41464b;background-color:#e2e3e5;border-color:#d3d6d8}.alert-secondary .alert-link{color:#34383c}.alert-success{color:#0f5132;background-color:#d1e7dd;border-color:#badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{color:#055160;background-color:#cff4fc;border-color:#b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5}.alert-warning .alert-link{color:#523e02}.alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{color:#636464;background-color:#fefefe;border-color:#fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{color:#141619;background-color:#d3d3d4;border-color:#bcbebf}.alert-dark .alert-link{color:#101214}@-webkit-keyframes progress-bar-stripes{0%{background-position-x:1rem}}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#0d6efd;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:1s linear infinite progress-bar-stripes;animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>li::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.5rem 1rem;color:#212529;text-decoration:none;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#084298;background-color:#cfe2ff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#084298;background-color:#bacbe6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#084298;border-color:#084298}.list-group-item-secondary{color:#41464b;background-color:#e2e3e5}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#41464b;background-color:#cbccce}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#41464b;border-color:#41464b}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:#000;background:transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;border:0;border-radius:.25rem;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25);opacity:1}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.toast{width:350px;max-width:100%;font-size:.875rem;pointer-events:auto;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .5rem 1rem rgba(0,0,0,.15);border-radius:.25rem}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:.75rem}.toast-header{display:flex;align-items:center;padding:.5rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-header .btn-close{margin-right:-.375rem;margin-left:.75rem}.toast-body{padding:.75rem;word-wrap:break-word}.modal{position:fixed;top:0;left:0;z-index:1055;display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1050;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .btn-close{padding:.5rem .5rem;margin:-.5rem -.5rem -.5rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-down .modal-footer{border-radius:0}}.tooltip{position:absolute;z-index:1080;display:block;margin:0;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .tooltip-arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[data-popper-placement^=right],.bs-tooltip-end{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[data-popper-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[data-popper-placement^=left],.bs-tooltip-start{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1070;display:block;max-width:276px;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .popover-arrow{position:absolute;display:block;width:1rem;height:.5rem}.popover .popover-arrow::after,.popover .popover-arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-top>.popover-arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-end>.popover-arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f0f0f0}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-start>.popover-arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem 1rem;margin-bottom:0;font-size:1rem;background-color:#f0f0f0;border-bottom:1px solid rgba(0,0,0,.2);border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:1rem 1rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%;list-style:none}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}@-webkit-keyframes spinner-border{to{transform:rotate(360deg)}}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.offcanvas{position:fixed;bottom:0;z-index:1045;display:flex;flex-direction:column;max-width:100%;visibility:hidden;background-color:#fff;background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1rem}.offcanvas-header .btn-close{padding:.5rem .5rem;margin-top:-.5rem;margin-right:-.5rem;margin-bottom:-.5rem}.offcanvas-title{margin-bottom:0;line-height:1.5}.offcanvas-body{flex-grow:1;padding:1rem 1rem;overflow-y:auto}.offcanvas-start{top:0;left:0;width:400px;border-right:1px solid rgba(0,0,0,.2);transform:translateX(-100%)}.offcanvas-end{top:0;right:0;width:400px;border-left:1px solid rgba(0,0,0,.2);transform:translateX(100%)}.offcanvas-top{top:0;right:0;left:0;height:30vh;max-height:100%;border-bottom:1px solid rgba(0,0,0,.2);transform:translateY(-100%)}.offcanvas-bottom{right:0;left:0;height:30vh;max-height:100%;border-top:1px solid rgba(0,0,0,.2);transform:translateY(100%)}.offcanvas.show{transform:none}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentColor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{-webkit-animation:placeholder-glow 2s ease-in-out infinite;animation:placeholder-glow 2s ease-in-out infinite}@-webkit-keyframes placeholder-glow{50%{opacity:.2}}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{-webkit-mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%;-webkit-animation:placeholder-wave 2s linear infinite;animation:placeholder-wave 2s linear infinite}@-webkit-keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}@keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.link-primary{color:#0d6efd}.link-primary:focus,.link-primary:hover{color:#0a58ca}.link-secondary{color:#6c757d}.link-secondary:focus,.link-secondary:hover{color:#565e64}.link-success{color:#198754}.link-success:focus,.link-success:hover{color:#146c43}.link-info{color:#0dcaf0}.link-info:focus,.link-info:hover{color:#3dd5f3}.link-warning{color:#ffc107}.link-warning:focus,.link-warning:hover{color:#ffcd39}.link-danger{color:#dc3545}.link-danger:focus,.link-danger:hover{color:#b02a37}.link-light{color:#f8f9fa}.link-light:focus,.link-light:hover{color:#f9fafb}.link-dark{color:#212529}.link-dark:focus,.link-dark:hover{color:#1a1e21}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:75%}.ratio-16x9{--bs-aspect-ratio:56.25%}.ratio-21x9{--bs-aspect-ratio:42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentColor;opacity:.25}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:1px solid #dee2e6!important}.border-0{border:0!important}.border-top{border-top:1px solid #dee2e6!important}.border-top-0{border-top:0!important}.border-end{border-right:1px solid #dee2e6!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:1px solid #dee2e6!important}.border-start-0{border-left:0!important}.border-primary{border-color:#0d6efd!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#198754!important}.border-info{border-color:#0dcaf0!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#212529!important}.border-white{border-color:#fff!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-light{font-weight:300!important}.fw-lighter{font-weight:lighter!important}.fw-normal{font-weight:400!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-color-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:#6c757d!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:rgba(255,255,255,.5)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:0.25}.text-opacity-50{--bs-text-opacity:0.5}.text-opacity-75{--bs-text-opacity:0.75}.text-opacity-100{--bs-text-opacity:1}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity:1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(var(--bs-body-bg-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-opacity-10{--bs-bg-opacity:0.1}.bg-opacity-25{--bs-bg-opacity:0.25}.bg-opacity-50{--bs-bg-opacity:0.5}.bg-opacity-75{--bs-bg-opacity:0.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:.25rem!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:.2rem!important}.rounded-2{border-radius:.25rem!important}.rounded-3{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-end{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-start{border-bottom-left-radius:.25rem!important;border-top-left-radius:.25rem!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/qdntz/images/001.jpg b/qdntz/images/001.jpg new file mode 100644 index 0000000..fc1e108 Binary files /dev/null and b/qdntz/images/001.jpg differ diff --git a/qdntz/images/002.jpg b/qdntz/images/002.jpg new file mode 100644 index 0000000..085349c Binary files /dev/null and b/qdntz/images/002.jpg differ diff --git a/qdntz/images/bbg10.jpg b/qdntz/images/bbg10.jpg new file mode 100644 index 0000000..48796fc Binary files /dev/null and b/qdntz/images/bbg10.jpg differ diff --git a/qdntz/images/hdtop.jpg b/qdntz/images/hdtop.jpg new file mode 100644 index 0000000..a6e8db2 Binary files /dev/null and b/qdntz/images/hdtop.jpg differ diff --git a/qdntz/images/qdnz.mp4 b/qdntz/images/qdnz.mp4 new file mode 100644 index 0000000..9a0e20f Binary files /dev/null and b/qdntz/images/qdnz.mp4 differ diff --git a/qdntz/inc/qdngk.html b/qdntz/inc/qdngk.html new file mode 100644 index 0000000..af42cbb --- /dev/null +++ b/qdntz/inc/qdngk.html @@ -0,0 +1,606 @@ + + + + 黔东南州概况 + + + + + + + + + + + + + + + + + +
+

黔东南州概况

+

咨询服务热线:4008-799399

+ +

  黔东南苗族侗族自治州位于贵州省东南部,辖1市15县,国土面积3.03万平方公里,总人口489.86万,少数民族人口占总人口的81.8%,是全国苗侗文化的核心地。……

+

+
+ + + + + +
+ +
+
+

咨询服务热线:0855-8068237

+

  凯里市是黔东南苗族侗族自治州州府所在地,是全州政治、经济、文化中心,是中国西部百强县和贵州省经济强县。全市辖11个镇9个街道,辖区面积1569.69平方公里,建成区面积74.74平方公里,常住人口70.9万,少数民族占户籍人口的81.6%,是一个以苗族为主、多民族聚居的新兴城市,被誉为“苗侗明珠”。近年来,先后荣获“全国文明城市”、“中国优秀旅游城市”、“国家卫生城市”、“国家节水型城市”和“苗侗医药养生之乡”、“中国酸汤美食之都”、“中国绿水青山生态强县”等称号。入列全国中小城市综合改革试点、第三批国家新型城镇化试点、国家公交都市建设第一批创建城市,入选全国首批创新型县(市)建设名单、“2020年全国县域旅游综合实力百强县”等榜单。

+

  区位交通情况:沪昆高铁、湘黔铁路和沪昆高速公路贯穿全境,凯里黄平机场直通成都、杭州等地,经高铁西抵贵阳仅需半小时,东达长沙、北至重庆都在3小时之内,经厦蓉高速公路和贵广高铁可直达广西、广东、福建等地,已构建了集高速铁路、高速公路、航空及城市主干道为一体外联内畅的交通体系,成为黔中经济区重要交通枢纽,加快了凯里融入长江经济带、粤桂黔高铁经济带的步伐。

+

  生态环境情况:凯里市地处云贵高原向中部丘陵过度地带,属亚热带湿润气候。四季气候温和,处于最适宜人类居住20—3纬度之间,年平均气温16℃左右,平均海拔在1000米左右,森林覆盖率达57%,空气清新,市区空气质量达标天数比例达98.1%,城市(县城)环境空气质量达标率96.8%, 空气负氧离子含量为全国平均水平的20倍。中心城市和千人以上集中式饮用水水源地水质达标率均为100%。

+

  资源禀赋情况:凯里是贵州东线旅游集散中心,是全省对接沿海发达地区的桥头堡、对外开放的排头兵和产业承接的示范区。凯里是资源优越的黄金宝地,已探明的矿藏有铁、铅、锌、重晶石、铝矶土、石英石、硅石岩等,其中铝土矿7000万吨、石英砂矿10000万吨、水泥用灰岩矿8130万吨、白云岩2502万吨。硅石中二氧化硅含量高达98%,名列西南之冠;铝土矿储量位居贵州省第二位。

+

  园区及产业情况:凯里市辖黔东南高新技术开发区和贵州炉碧经济开发区两个省级开发区。其中:黔东南高新技术产业开发区规划面积为8.18平方公里,重点发展大健康医药为主,电子信息、银饰刺绣文化创意为辅的产业体系,同时,围绕“一轴五区”开展新城建设,促进产城融合;炉碧经济开发区规划面积118平方公里,重点发展玻璃及玻璃深加工为主,铝及陶瓷产业、酸汤和蓝莓等生态特色食品为辅的产业体系。

+
+
+
+ + + + +
+ +
+
+

咨询服务热线:0855-3695381

+

  丹寨县位于贵州省东部、黔东南州西部,因海拔较高,自然气候凉爽,素有“云上丹寨”的美誉。全县国土面积940平方公里,辖4镇、2乡、1个街道,1个省级经济开发区和1个省级农业园区,122个村(居、社区),总人口17.9万人,是一个以苗族为主,水、汉等多民族聚居县,少数民族占89.33%。

+

  丹寨民族文化底蕴厚重。丹寨是历史上数支苗族迁徙路线上的居留地,是全国唯一完整保留祭祀蚩尤的“祭尤节”的地方,民族风情浓郁,民族节日众多,民族文化底蕴深厚,拥有苗族贾理、锦鸡舞、古法造纸等8项国家级、22项省级、34项州级非物质文化遗产,有17个国家级传统村落、9个中国少数民族特色村寨,被誉为苗族文化的活态博物馆。

+

  丹寨气候独特资源丰富。地处长江、珠江流域的清水江、都柳江水系上游分水岭,海拔在600-1700米之间,森林覆盖率达70.68%,属亚热带季风性湿润气候,夏季平均气温22.8℃,冬无严寒,夏无酷暑,自然气候得天独厚,是理想的旅游、避暑、休闲胜地和天然氧吧。境内有汞、金、重晶石、硒等15种矿产资源;境内河道总长367.3公里,水能蕴藏量为3.47万千瓦;野生植物资源丰富,已定名的木本植物91科239属519种。这里土壤富含人体必需的硒、锌微量元素,盛产优质硒米、硒锌茶,是“中国硒米之乡”和“中国富硒锌茶之乡”。县内有寒武系古生物化石,有距今1500多年的省级文物石桥白皮纸作坊,有天下奇泉打鼓井,有千姿百态的彩色金瓜洞,有被誉为“黔东第一瀑”的排廷大瀑布,有龙泉山万亩杜鹃,有国家4A级旅游景区丹寨万达小镇,2012年获得“全国休闲农业和乡村旅游示范县”称号。

+

  丹寨交通区位优势明显。面向珠三角、背靠大西南,贵广高铁、沪昆高铁和厦蓉高速、沪昆高速穿过县境周边。凯羊高速穿城而过并连通两条高铁和两条高速。县城距省会贵阳市110公里,距凯里市50公里、都匀市40公里,深度融入“凯里半小时经济圈”和“贵阳1小时经济圈”,是贵阳、重庆等地通往“珠三角”及东南沿海的“桥头堡”,成为贵州省南下通道经济带和承接泛珠三角产业转移的“前沿基地”。

+

  经济社会持续健康发展。丹寨是万达集团“企业帮县、整体脱贫”社会扶贫创新试点县。2021 年,丹寨县实现地区生产总值 44.89 亿元, 同比增长 7.7%,高于全州水平 2.5 个百分点。其中,第一产业增加值 9.99 亿元,增长 7.3%;第二产业增加值 10.35 亿元,增长 15.6%;第三产业增加值 24.56 亿元,增长 4.8%。城镇和农村居民人均可支配收入分别为37532.89元、12094.36元,同比分别增长8.2%、10.8%。

+
+
+
+ + + + + + + + + +
+ +
+
+

咨询服务热线:0855-2621151

+

  麻江县地处贵州省中部,清水江上游,是黔东南苗族侗族自治州西大门。辖4镇1乡2街道,面积约960平方公里,总人口17.66万人。县城西距省会贵阳市和龙洞堡国际机场109公里,东距黔东南州府凯里市40公里,南距黔南州府都匀市23公里,北距瓮福磷矿基地福泉市21公里。沪昆铁路、沪昆高速公路、兰海高速公路和沪昆高速铁路、贵广高速铁路专线、佛山大道贯穿县境,是贵州乃至我国大西南南下东进的咽喉要塞。

+

  麻江县围绕建设山地高效农业园区,结合交通优势和地理环境,深入推进农村产业革命,全力打好“1258”主导产业(1万亩花卉、2万亩锌硒米、5万亩商品蔬菜、8万亩蓝莓),是第七批全国农业标准化优秀示范区、国家出口食品农产品质量安全示范区、中国蓝莓产业科技创新十强县、国家有机产品认证示范区,享有“中国红蒜之乡”“中国锌硒米之乡”等美誉。围绕创建乡村旅游精品县目标,按照全域旅游、农文旅一体化的发展思路,结合“魅力麻江·田园康旅”功能定位,充分利用交通区位优势、自然资源禀赋、少数民族特色文化,积极推动农旅、工旅、文旅、康旅、体旅深度融合发展,产业成效凸显。

+

  麻江县依托佛山大道建成后的交通区位优势,做好承接粤港澳大湾区建设,围绕佛山大道两侧打造黔中经济区、凯麻产城融合发展示范区,围绕“四新”主攻“四化”,成立“四化”产业招商专班、“蓝莓”产业招商专班、“酸汤”产业招商专班重点推进“四化”及蓝莓、酸汤产业规模化突破,培育形成一批亿元龙头企业和农业产业示范基地。依托现状国家现代农业产业园、蓝莓工坊、蓝莓物流交易中心、康养基地、酸汤加工等产业,谋划农业现代化、新型城镇化发展新格局,布局约16.5 平方公里建设用地打造 3 个特色小镇,即:酸汤小镇、康养小镇、蓝莓小镇。

+
+
+
+ + + + + + + + + +
+ +
+
+

咨询服务热线:0855-3931911

+

  黄平县位于贵州省东南部,黔东南州西北部,辖8镇3乡,2020年,全县总人口39.19万人,常住人口24.4万人,2021年全县地区生产总值72.67亿元,财政收入4.87亿元,城镇、农村居民人均可支配收入分别为37113元、11757元。

+

  黄平历史悠久,文化厚重。自古素有“云贵最秀地、且兰古国都”之称,是2300多年前的春秋战国时期且兰酋长国都城所在地,县内有国家级重点文物保护单位4处,国家级非物质文化遗产4个,有人文景观48处,自然景观52处。由浪洞森林温泉、飞云崖古寺、旧州古镇、舞阳湖、重安江、野洞河峡谷、飞云大峡谷、飞虎队抗战史和红军二过黄平构成的“一泉一寺一古城,两河两谷两传奇”,形成了春游、夏漂、秋赏、冬泡的旅游格局,体现了黄平独具魅力的旅游资源。

+

  黄平山川秀美,资源丰富。是国家重点生态功能区,年平均气温15.4℃,年平均降雨量1200mm,雨量充沛,气候温和,冬无严寒,夏无酷暑,全年无霜期300天以上,耕地面积达70万亩,蔬菜种植面积20万亩,太子参、白芨、前胡等中药材种植面积达13万亩。全县劳动力资源20万人。是著名的“长寿之乡”。县境内矿产资源丰富。其中,蕴藏量大的有重晶石、石灰石、石膏、铝钒土、汞矿。汞的储量为1.09万吨,重晶石的储量为39.98万吨,铀、钇等稀有金属储量为1150吨,铝钒土储量为600万吨。

+

  黄平交通便利,通达自如。黄平交通四通八达是黔东中心,现已融入贵阳1小时经济区,重庆3小时经济区,杭州5小时经济区。沪昆高铁凯里南站距黄平县仅半个小时的车程,贵阳至黄平(119公里)预计2022年7月全面建成通车。凯里黄平机场距县城仅10余公里,已开通贵阳、杭州、天津、昆明、福州、南宁等航线,形成了航空、铁路、公路相互补充的现代立体交通网络。

+

  黄平开放发展,服务便利。黄平始终坚持把开放作为发展重要前提,全面把握新一轮西部大开发历史机遇,加快融入凯里城市群和黔中贵阳、黔北遵义1小时经济圈,积极融入扩大开放总格局。不断建设好园区发展平台,推动园区基础设施建设提档升级,为企业安心落户、加快投产、高效生产提供便利,已建成黄平工业园区,规划总面积28.14平方公里,已实现“七通一平”。将不折不扣落实好优惠政策措施,全心全意营造优质高效的营商环境,为在我县投资的企业提供“贵人服务”,实行保姆式代办,帮助企业解决具体问题,让大家在黄平投资放心、创业安心、发展顺心。

+
+
+
+ + + + + + + + + + + + + + + + + + +
+ +
+
+

咨询服务热线:0855-4228995

+

  施秉地处贵州东部、黔东南州西北部、㵲阳河国家级风景名胜区中心腹地,全县国土面积1543.8平方公里,辖5镇3乡64个行政村12个社区,总人口18万人,聚居着汉、苗、侗等19个民族。

+

  一、资源优势

+

  (一)风光旖旎,环境优美。境内生态良好,气候宜人,森林覆盖率达59.46%,冬无严寒,夏无酷暑,是旅游、休闲、度假的理想之地,拥有世界自然遗产地、国家级风景名胜区、国家地质公园等响亮名片。县城坐落在一块三江汇流、三面环水、三面临山的平川上,是一座融山、水、园、林为一体的宜居“江南小镇”。

+

  (二)资源富集,独具特色。境内土地、水能、矿产、生物等资源丰富,建有5个省级高效农业示范园区。是全省现代烟草业主产园区和黔东南烤烟生产主产县;中药材种植面积常年保持在10万亩以上,施秉太子参、头花蓼、何首乌3个品种已通过国家GAP认证,施秉太子参、施秉头花蓼获得国家地理标志证明,太子参常年产量占全国总产量的二分之一,施秉也被誉为“中国太子参之乡”。

+

  (三)民风淳朴,社会和谐。境内民族文化丰富多彩,民族风情浓郁,苗族“刻道”被列入国家非物质文化遗产。群众生活健康向上,社会事业快速发展,先后被省委、省政府评为“全省文明城市”“省级卫生县城”,被中国科协命名为“全国科普示范县”。

+

  二、工业园区发展情况

+

  施秉工业园区总体布局为“一区三园”即:硅系高新材料一体化循环经济产业园、桃子湾轻工建材产业园、新红生物医药及农产品产业园。目前,主要建设发展施秉新红大健康产业园和桃子湾轻工建材产业园。

+

  (一)施秉新红大健康产业园。施秉新红大健康产业园位于城关镇新红村,距县城约8公里,距三施高速施秉西匝道仅700米,距凯里黄平机场仅9公里,规划面积4平方公里,以“工业+旅游”的发展模式,按照“一厂一景一特色”、高起点规划、高标准建设进行打造,建设成为集加工、旅游、文化创意、电子物流等为一体的大健康旅游综合体,主要以生态特色食品、保健品加工、冷链物流、电商服务等业态为主,是食品安全透明化的“观光工厂”。目前,已建设标准厂房2.83万平方米,配套用房1.14万平方米,已完成路网、停车场、绿化、宿舍楼和高管楼等配套基础设施建设, 实现了供水、供电、供气等“九通一平”。

+

  (二)桃子湾轻工建材产业园。桃子湾轻工建材产业园位于城关镇小河村,距县城1.2公里,规划面积1.6平方公里,主要以特色食品加工、特色民族绣品、特色旅游商品等轻工业为主导。目前,已建设标准厂房3.22万平米,职工宿舍、展厅、食堂等生活配套设施齐全,产业园道路交通网络、给排水网络、能源网络和信息网络已基本形成,已实现“九通一平”。

+

  三、特色产业

+

  中药材:全县常年种植中药材面积达10万亩以上,品种30多个,其中太子参、头花蓼、何首乌3个品种已通过国家GAP认证,“施秉太子参”、“施秉头花蓼”已获得国家地理标志证明商标。施秉太子参年产量达5000吨以上,是全国最大的太子参生产基地,被誉为“西南药城”、“中国太子参之乡”。

+

  特色养殖:形成以绿壳蛋鸡、林下虫草鸡、白洗黑毛猪、优质肉牛羊等为主的各种畜禽特色养殖超过140万只(头),其中“施秉白洗猪”获得国家地理标志证明。目前,我县生猪存栏30万头,“十四五”规划发展成为100万头生猪大县。

+

  林下魔芋:魔芋被誉为“肠道清道夫”,具有降血糖、降血脂、散毒、养颜、减肥、通便、开胃等多种功能,是一种绿色健康养生食品,全县发展林下魔芋种植2万多亩。

+

  精品水果:建设有精品水果现代高效农业示范园区,为贵州省100个省级农业示范园区之一,已建成以猕猴桃、紫秋葡萄、脆红李和优势时令水果为主导的精品水果规范化基地2.65万亩,带动全县发展精品水果种植7万亩以上,年产值达3亿元以上。

+

  四、投资方向

+

  (一)新型工业化项目。依托园区产业承载主阵地,重点引进健康医药、食品加工、特色轻工、新型建材等项目。

+

  (二)新型城镇化项目。结合“城景一体化”建设要求,丰富城市经营业态,不断配套完善县城休闲娱乐功能,着力引进住宿餐饮、文化创意、休闲娱乐、商业综合体等项目。

+

  (三)现代农业化项目。围绕太子参、生猪养殖、魔芋、精品水果等农特产品资源优势,重点引进特色食品加工、牲畜饲料生产及太子参精深加工等项目。同时,依托现代农业产业资源,引进农业观光园、采摘园、休闲农场等农文旅体验项目。

+

  (四)旅游产业化项目。结合施秉县生态优势,着力构建“旅游+”多业态发展模式,重点引进“旅游+工业”、“旅游+城镇”、“旅游+农业”、“旅游+民生”、生态+养生、传统村落+田园观光等旅游产业项目。

+
+
+
+ + + + + + + + + +
+ +
+
+

咨询服务热线:0855-5722848

+

  镇远,位于贵州省东部,隶属于黔东南苗族侗族自治州,地处湘黔两省三地(湖南怀化,我省黔东南、铜仁)交界地区,与湖南新晃,铜仁石阡、玉屏,我州岑巩、三穗、剑河、施秉七县接壤,素有“滇楚锁钥、黔东门户”之称。全县总面积1878平方公里,辖8镇4乡、1个省级经济开发区(贵州黔东经济开发区)、110个行政村、12个社区和4个居委会。总人口27.76万人,苗、侗、土家等少数民族人口占48%;

+

  一、交通区位突显。镇远是贵州省东部最重要的交通枢纽,湘黔铁路、株六复线穿境而过,沪昆高铁,沪昆高速、松从高速、思剑高速、天黄高速纵横全境,与贵广高铁、厦蓉高速等交汇贯通,是大西南东出华东、南下华南的交通咽喉。在100公里半径内有凯里黄平机场、黎平机场、铜仁凤凰机场 、怀化芷江机场 、贵阳龙洞堡机场、高铁三穗站。形成与贵阳、长沙、桂林周边主要城市3小时经济圈,与珠三角、长三角、成渝地区5小时经济圈。便捷的现代交通网络体系为镇远县的发展提供了坚实的基础。

+

  二、产业资源丰富。工业:镇远工业以黔东经济开发区为主战场,贵州黔东经济开发区位于贵州省东部,规划总面积24.4平方公里,以酿酒为首位产业,电子信息为主导产业进行重点培育打造,构建了以“酿酒、电子信息、新型建材、物流、特色食品”产业为支撑,采矿、冶金、饮用水为辅助的多元化、专业化、高端化、绿色化工业产业格局,现全区共入驻各类企业180余户,其中招商入驻各类生产型企业64户,2000万元以上规模工业企业14户(含贵州省百强企业2户,贵州省百强民营企业3户)。旅游:镇远自汉高祖五年(公元前202年)至今,已有2200多年的置县历史,1986年被国务院命名为中国历史文化名城。镇远拥有5A级中国历史文化名城、舞阳河、重点文物保护单位青龙洞古建筑群、在华日本人民反战同盟镇远“和平村”旧址等8张国家级旅游品牌,有省级风景名胜区高过河-森林康养示范基地,被誉为一条会唱歌的河,是贵州高原上的一颗明珠。有明清风貌的古民居、古巷道、古码头等省、县文物古迹160处,“百节之乡”的侗族“三月三”情人节、苗族“六月六”吃新节、土家族“八月八”唢呐节等传统民族民俗活动交相辉映,煜煜生辉。镇远拥有“中国最美十大古城、中国低碳旅游示范基地、中国十佳城市慢游地”等荣誉称号,已然成为人们向往的旅游胜地。生态资源:全县森林资源面积约13.06万公顷,森林覆盖率62.79%。2020年,县城环境空气质量优良天数比例为100%,环境空气质量综合指数为1.68,在贵州省88个县(区)中排名第一,南方红豆杉、香果树、榉木等国家一级保护植物栖地而生,野生植物十分丰富,49.5万亩耕地上茶叶、珍贵药材、油菜、烟叶等经济作物纵横交错,特色红桃、脆李、稻米等果蔬四季飘香。

+

  三、镇远优惠政策叠加,营商环境优越。镇远县在省州出台的招商引资政策下,结合我县实际情况出台了标准产房入驻、优强企业装修、高管补贴等“一事一议”相关政策。近年来,镇远县致力打造省内一流的营商环境,着力创造“贵人服务”营商品牌,全力打造镇远营商环境新高地。

+
+
+
+ + + + + + + + + + + +
+ +
+
+

咨询服务热线:0855-3578588

+

一、岑巩历史文化悠久,区位优势明显。岑巩位于贵州省东部,辖9镇2乡1个街道,1个省级经济开发区,国土面积1486平方公里,总人口24万人。岑巩古称思州,迄今已有1400多年的历史,是贵州政治、经济、文化的最先发祥地之一。320国道、沪昆、江玉、石玉高速、湘黔铁路穿境而过,县城距铜仁凤凰机场90公里、湖南芷江机场80公里、黄平机场80公里,距沪昆高铁铜仁南站25公里、三穗站30公里,区位优越、交通便捷,是贵州东联战略的前沿阵地。

+

二、园区软硬环境优越,基础设施完备。岑巩经济开发区为省级经济开发区,总体规划面积30.23平方公里,已完成10平方公里核心区“九通一平”,建成标准厂房23万平方米,配套建有员工公寓、职业学校、中小学、幼儿园、医疗服务中心等。全县工业企业78户,其中规模以上企业32户,年度规上工业总产值达30亿元以上。岑巩县坚持把经济开发区作为推动新型工业化发展的主战场,综合竞争力、辐射带动力、区域协同力不断增强,已逐步建设成为工业经济“聚宝盆”。

+

三、产业集聚效应凸显,发展后劲十足。“十四五”时期,岑巩县坚定不移把加速推动新型工业化进程作为岑巩高质量发展的首要任务。被誉为“黑色黄金”的碳基材料产业,以兴隆碳素、黔楚碳业为龙头的“黑色黄金”碳基材料产业集聚发展版图正在徐徐铺开;以“从农业中长出工业”为思路,特色食品产业园为平台的生态特色食品产业正在强势汇聚;以打火机、电子信息、香精香料等特色产业正在蓬勃崛起;以思州温泉、龙鳌河、玉门洞等为“暴点”的景区,正在不断丰富旅游发展业态,县域旅游产业化正在持续推进;以智慧停车场、产业大道、商业综合体、美食街、休闲娱乐场所等基础设施的不断完善和融合发展,岑巩的新型城镇化稳步推进,城镇品质不断提升。

+

四、营商环境持续提升,投资创业首选。岑巩县始终坚持把优化营商环境当作高质量发展“生命线”来抓,承诺拿出最高的效率、最好的政策、最实的举措,确保项目第一时间落地,让企业第一时间获益,在岑巩投资放心、创业安心、发展顺心。

+
+
+
+ + + + + + + + + + +
+ +
+
+

咨询服务热线:0855-4525831

+

  三穗县位于贵州省东部,黔东南苗族侗族自治州东北部,与湖南省新晃县毗邻,国土总面积1035平方公里,全县辖7镇2乡2街道,159个行政村(合并为90个中心村),8个居民社区,1个省级经济开发区,总人口23万人,境内有苗、侗等14个世居民族,少数民族占总人口的67.2%,是一个以苗族、侗族为主体的多民族聚居县。

+

  优势聚集 禀赋天成

+

  这里区位优势明显,是西部陆海新通道重要节点城市,县境内沪昆高速、三黎三施高速、320国道、310省道纵横全境,沪昆高铁过境设站,半径100公里范围内有4个机场,形成与贵阳、长沙、桂林2小时经济圈,粤港澳大湾区、长三角、成渝地区5小时经济圈,上海、北京8小时经济圈,开放发展的新三穗正迅速崛起。

+

  高点布局 擘画新篇

+

  进入新时代,三穗以活力新姿谋划未来,围绕“四新”主攻“四化”,建设商贸物流中心、旅游集散中心、医养康养中心、产业承接中心,打造黔东中心城市。

+

  深入实施“工业强县、城镇带县、商贸活县”主战略,以做精老城核心区、丰富经济开发区、拓展高铁新区的宏大手笔,打造出“区城互动、产城一体、融合发展”的三区联动发展之局。

+

  高质量统揽、高起点规划,跨越发展的三穗正积极抢抓新国发2号政策机遇,全力推动新型工业化、新型城镇化、农业现代化、旅游产业化突围发展。

+

  投资沃土 活力迸发

+

  这里,投资政策量身定制。国家财政部对西部地区的鼓励类产业企业按15%的税率征收企业所得税;经济开发区标准厂房实行“三免两减半”,县委县政府制定出台的高质量发展政策措施、42条支持工业发展政策措施等优惠政策,让企业得到土地优惠、金融支持、入规奖励、稳岗就业、税收优惠......

+

  这里,贵人服务无微不致。所有到三穗投资的企业均可享受“穗(随)时办”“一企一专班”、企业绿卡、全程代办和领导挂帮等贵人服务。

+

  这里,投资环境只有最好。三穗先后荣获“全国民族团结示范县”、“平安中国建设示范县”、全省“政府服务环境十佳县”“招商引资项目推进优良十佳县”“全省首批医养结合示范县”......亲商、安商、富商正成为三穗最亮丽的品牌。

+

  携手未来 合作共赢

+

  未来的三穗,将瞄准高质量发展目标不松劲,凝心聚力打造乡村振兴示范区、创新创业示范区

+

  迎着新的历史节点,今天的三穗,将以更加开放进取的姿态,在八方资源的汇聚中,在欣欣向荣的宝地上,期待与您相遇,愿为四海有识之士搭建投资兴业的广阔平台!

+
+
+
+ + + + + + + + + + + + + + + +
+ +
+
+

咨询服务热线:0855-3850088

+

  一、区位交通

+

  天柱县地处黔东湘西结合部,因城郊“石柱擎天”胜景而得名,全县总面积2201平方公里,总人口43万,清水江川流不息,不仅孕育了两岸勤劳奋进的苗侗人民,丰富的水能资源也奠定了天柱“黔东第一关”的历史地位,自古就是川渝黔通两广、江浙重要门户。

+

  即将规划建设的天柱至会同、天柱至新晃高速公路,将使天柱成为沪昆、包茂、厦蓉三条高速公路交汇的重要枢纽,南下珠三角及北部湾地区将更加快捷便利。天柱将抢抓沪昆高速、贵广高铁、黎平机场1小时交通经济圈机遇,主动融入四通八达大交通格局。

+

  二、资源优势

+

  这里矿产资源丰富,素有“中国重晶石之乡”“贵州高原黄金城”之称。重晶石探明储量1.78亿吨,远景储量3亿吨,是我国目前已探明的最大重晶石矿床,占全球储量的三分之一。黄金已探明储量80吨以上,是贵州省首个“吨金县”。

+

  这里农林条件优越,有万亩大坝2个,5000亩大坝3个,是贵州重要粮食主产区,享有“黔东粮仓”的美誉,是全国三大“清香型”烤烟基地之一。森林面积197万亩,活立木蓄积量达800万立方米,林业综合总产值15亿元。天柱油茶林种植面积38万亩,是中国林下经济脱贫攻坚试验区、国家林下经济示范基地、国家油茶林示范基地试点县,“天柱茶油”被评为了国家地理标志保护产品。土鸡产业,2020年已具备1000万羽的养殖能力、1800万羽的屠宰能力。

+

  这里旅游前景广阔,天柱正依托厚重的古祠家风文化和国家级非物质文化遗产“世界上最长的歌会——四十八寨歌节”等人文优势,开发三十里水景长廊、清水江百里画廊、金凤山、九龙山、温泉地热、溶洞等自然资源,狠抓旅游产业化,全力实现旅游收入三年倍增计划。

+

  三、发展规划

+

  天柱立足资源优势,紧紧围绕实现“四化”目标奋力迈进。大力推进新型工业化,依托重晶石资源,重点建设重晶石系列粉体、高端钡盐系列产品、钡盐填料系列产品等生产基地,打造中国百亿级钡盐产业;兼顾发展碳、锂等新型材料产业,服装、电子等特色轻工产业。大力推进新型城镇化,按照“一园两区、产城互动”新格局,打造教育文化、医疗卫生、健康养老、智慧管理等公共服务区域高地,建成黔东湘西接边中心城市,实现“撤县设市”目标。大力推进农业现代化,围绕林地、坝区资源,重点推动竹木加工向高端产成品方向发展;营造高标准油茶林,建设茶油产品研发生产基地,推动茶油产品向健康、医药方向发展;招引土鸡养殖企业,食品加工企业,引导土鸡产业向“亿羽”目标迈进,兼顾推动包括林下中药材在内的林下复合经济;大力发展坝区经济,打造面向沿海发达地区为目标的绿色、有机蔬菜基地。大力推进旅游产业化,重点规划环托口、白市电站库区、金凤山环线旅游精品线路,推进清水江百里画廊、三十里水景长廊、金凤山、环九龙山(塘龙)等旅游景区主体功能建设,打造全域旅游示范县。

+
+
+
+ + + + + + + + + + + + + +
+ +
+
+

咨询服务热线:0855-7225677

+

  锦屏,青山似锦、秀丽如屏!这里因“青山绿水养眼、蓝天净土养肺、传统饮食养颜、民族文化养心、田园生活养神”而享誉国内外。是集少数民族文化、军屯文化、木商文化、红色文化于一体的多元文化聚集地,是休闲度假的天然大氧吧,是人类疲惫心灵栖息的理想家园,更是聚贤聚才、投资兴业的大乐土!

+

  锦屏县为要津之城,属泛珠三角区域和长江经济带,北可达重庆、成都经济圈,东部可达长沙、武汉经济圈,南部可达珠三角地区。1小时车程均达黎平机场、贵广高铁从江站、沪昆高铁三穗站,已形成航空、高铁、高速三位一体交通格局。

+

  全县林业面积182.6万亩,活立木蓄积量927万立方米,被誉为中国南方林区“皇冠上的明珠”;青石储量1.3亿立方米,是贵州省“十大石材”产业县之一。林木、青石、水能等资源丰富,素有“杉木之乡”、“青石之乡”、“水电之乡”美誉。锦屏有600余年历史的明代军事城堡,国家4A级旅游景区——隆里古城旅游景区,中国环保第一村——文斗苗寨,省级森林公园——春蕾林场等优秀旅游资源。

+

  “一个羽毛球”:推动“康养之都、运动之城”快速发展。以贵州亚狮龙体育文化产业发展有限公司为“龙头”,实现以“鹅”为链,锦屏县的生态鹅全产业链综合年产值已超过10亿元,不断吸引投资者建厂创业,亚狮龙羽毛球月产达羽毛球30万打,新建亚狮龙博物馆、羽毛球小镇,同步配套羽毛球球头、球筒、球拍、球服、运动装备制造、体育赛事、文旅康养、生态养殖、屠宰加工、肉制品加工、冷链物流、羽绒服饰等项目,形成构建综合产业链发展,打造绿色、生态、运动、和谐锦屏。

+

  “一株石斛草”:破解林下经济产业发展难题。全县中药材种植约10万亩,近野生铁皮石斛种植1.2万亩,种植规模居全国第一,逐渐形成种、产、研、学、旅“五位一体”林下经济新模式。立足林业资源优势,深入挖掘林下种养殖、道地药材种植、中药材加工、中药饮片、制剂、森林康养等产业项目,打造有机锦屏、健康锦屏。

+

  “一个产业园”:快速发展中的省级经济开发区基本实现“八通一平”,建成十万平方米标准厂房,以县委书记为首席服务员的服务团队,为承接发达地区劳动密集型、农特产品精深加工、电子科研开发等优质项目提供了良好的投资环境,确保每个项目考察就能投资、投资就能落地、落地就能建设。

+

  锦屏是一方海纳百川、开放创业的热土,先后出台了“首席服务员”、营商环境八条、“五零服务”、“一站式”全程代办等制度,打造更优、更简、更好的投资环境,锦屏县营商环境评估连续五年在全省排位前列。

+

  锦屏,正以崭新的姿态,纵横于锦绣清江之上,屹立于神州大地之间。诚信和谐、创新奋进的锦屏人民深情期待着更多有识之士,走进锦屏,投资锦屏、共赢锦屏,合力推动锦屏经济社会裂变式发展!携手开创锦屏更加华美的新篇章!

+
+
+
+ + + + + + + + + + + + + + + + + + +
+ +
+
+

咨询服务热线:0855-6227627

+

  黎平意为“黎民百姓、平安幸福”,位于贵州省东南部,地处黔、湘、桂三省区交界。全县国土面积4441平方公里,辖9乡14镇、3个街道,321个行政村(社区),总人口58.04万人,其中侗族人口40.16万人,占全县总人口的69.2%,是全国侗族人口聚居最多的县,也是全省面积第二和全州最大的县。黎平是侗文化的窗口,是全国侗族人口第一大县,是国家级侗乡风景名胜区,这里侗文化元素最齐全、资源最丰富、底蕴最深厚,98个传统村落星罗棋布,世界非物质文化遗产侗族大歌从这里走向世界、唱响全球。黎平是中国革命伟大转折的起点,红军曾三次经过黎平,1934年12月18日在这里召开长征途中第一次中央政治局会议,从根本上实现战略转兵,为遵义会议奠定了基础,拉开了中国革命走向胜利的序幕。黎平是府署古城,是贵州省历史文化名城,中国历史文化名街、贵州省历史文化街区——翘街,记载着600余年的府衙历史。黎平是一方“净土绿地”,森林覆盖率超过72%,境内有国家森林公园、国家湿地公园,被誉为“中国百佳深呼吸小城”“中国森林氧吧”。这里是“饭养身、歌养心”的圣地,是人与自然和谐共生的家园。

+

  2021年,全县生产总值实现103.85亿元,同比增长5.6%(其中一、二、三分别增加7.4%、10.6%、2.6%),规上工业增加值同比下降12.6%,500万元以上固定资产投资预计增速12.7%,城镇、农村居民人均可支配收入完成37001元、11610元,增长 8.2%、10.8%。

+
+
+
+ + + + + + + + + + + + + + + + + + +
+ +
+
+

咨询服务热线:0855-3910178

+

  从江县位于贵州省东南部,素有“黔南门户、桂北要津”之称,是两广和港珠澳进入贵州的第一站、第一城、第一区。全县国土面积3244平方公里,总人口39万,其中苗、侗、壮、瑶、水等少数民族占总人口的94.8%,是澳门特区政府、广东佛山南海区、中国贸促会和江南大学的对口帮扶县。有“中国民间文化艺术之乡”“中国侗族大歌之乡”“中国香猪之乡”“中国优质椪柑之乡”“全球重要农业(稻鱼鸭)文化遗产保护地”“全国双拥模范县”“全国民族团结进步县”和“全国双拥模范县”的美誉,被誉为“养心圣地·神秘从江”。

+

  从江生态资源让人心生惊羡:从江四季分明,冷暖适宜。年平均气温18.4℃,年平均无霜期326天,年平均降水量1183.6毫米。从江生态环境优良,森林覆盖率69.39%,空气质量优良率100%,负氧离子含量1万-3万个/立方厘米,是全国平均数的22倍,被誉为“天然大氧吧”。优美宜居的生态环境成就了从江被授予“贵州省长寿之乡”的美誉,现有百岁老人38人,全县人口平均寿命高居于全省之上,在全国屈指可数。

+

  从江农特资源让人心生渴望:从江农特资源较为丰富,从江香猪、香禾米、油茶、小香辣、壮族煨酒等数以百计的特色优质农产品香飘苗乡侗寨,誉满海内外。全县拥有国家级农业产品地理标志和重点保护的农特资源名录国家级5个,省级2个。从江香猪、从江椪柑、从江瑶浴已取得国家原产地标记注册认证。境内独有的山区土壤气候让这个“国家植物基因库”3000多种各类植物生机蓬勃,其中已知的药用野生植物达400余种,如钩藤、天麻、杜仲、淫羊藿、铁皮石斛以及瑶药等系列。

+

  从江旅游资源让人心生向往:从江县生态环境和民族文化保持完好,是旅游资源原生性最强、资源保存最完整的县份之一,被誉为“养心圣地·神秘从江”。全县有世界级历史文化资源2处,国家级历史文化资源12处,A级景区6个。世界非物质文化遗产——小黄侗族大歌、中国最后一个枪手部落——岜沙苗寨、全球重要农业文化遗产保护地——加榜梯田、中国人口与生育文化第一村——占里侗寨、世界三大洗浴文化——瑶族瑶浴等旅游景区和民族村寨惊艳世人,享有世界十大“返璞归真、回归自然”旅游目的地之一的美称实至名归。

+

  从江交通区位让人心生赞叹:从江水陆空交通较为发达,对外交通十分便捷。G321、G242国道由南向北穿越县境,厦蓉高速、松从高速、贵广高铁在从江交汇。附近有龙洞堡机场、桂林两江国际机场。贯穿县境的都柳江由北向南,经广西三江、融安、柳州直达广州,拟规划提升为五级的航道可承载500吨轮船航行。

+

  这里农业现代化蓄势待发:围绕特色优势产业,我县将重点打造“从江大道”沿线产业带,以百香果、从江香猪、淫羊藿、油茶等为主导产业,大力引进和培育龙头企业,抓好农特产品基地建设和精深加工,全力开拓粤港澳大湾区市场,努力打造粤港澳地区的“菜篮子”。我县将重点引进农特产品精深加工、从江香猪精深加工、油茶种植及加工、精品水果种植及加工、中药材种植及加工、河湖水面生态渔业养殖等项目,带动产业兴、百姓富。

+

  这里新型工业化呼之欲出:围绕资源优势和产业基础,以贵州侗乡大健康产业示范区(贵州洛贯经济开发区)为主平台和聚集区,大力发展新型建材、清洁能源、木材加工、民族医药、特色食品加工、电子信息、民族民间工艺品等产业,着力打造从江特色的工业体系和制造业产业集群,奋力推动工业实现大突破。一批大数据电子信息、装备制造、新能源、新材料等战略性新兴产业集群和产业精深加工项目向国内外有识之士呈递落户名片。

+

  这里旅游产业化方兴未艾:紧盯“养心圣地·神秘从江”旅游品牌优势,通过市场运作,引入社会资本,持续推进岜沙原生态苗族文化、侗族大歌、瑶族药浴、月亮山百里梯田等重点旅游资源开发、旅游项目建设和景区运营管理、“从江礼物”旅游商品研发等,全力打造国内外知名民族文化旅游目的地。一批效益凸显的旅游精品民宿、旅游康养、景区运营管理、旅游集散中心、旅游商品研发等项目等候国内外有识之士到来。

+

  这里新型城镇化蓝图绘就:围绕做大县城(一城两区)、带动周边、辐射乡村的发展思路,构建“组团式”城镇空间格局,努力推动形成县城区、示范区(开发区)、乡镇村功能衔接互补的城乡融合发展格局。着力将老城区建设成为宜居、宜业、宜游的江滨旅游城市;将洛贯新城区建设成为县城的副中心、全县的经济中心和黔东南南部重要旅游集散中心、农产品集散中心、汽贸中心。一批小而精、小而美、小而特的绿色小镇、文化小镇和城市商业综合开发项目向国内外有识之士抛出绣球。

+

  这里大健康产业雏鹏欲飞:坐落于从江县境内贵州侗乡大健康产业示范区,于2015年4月20日贵州省人民政府批准设立,是全国首个以民族文化旅游和健康养生深度融合发展的省级示范区。建设贵州侗乡大健康示范区大健康医药康养产业是从江县实现加快发展的重头戏,也是招商搭建的稳实平台。园区划分新型建材产业园、农特食品加工产业园、大健康医药产业园、轻工家纺产业园、电子商务信息产业园五大产业园。园内地广人旺,财蕴厚实。贵州侗乡大健康康养城建设项目、洛香湖旅游城市综合体项目、东方斗牛城建设项目、侗乡生态康养公园等项目期待有识之士合作共赢。

+

  从江县将抢抓国发〔2022〕2号《关于支持贵州在新时代西部大开发上闯新路的意见》重大历史机遇和中国贸促会、澳门特区、对口帮扶城市帮扶契机,持续提升对外开放水平,主动融入“一带一路”、长江经济带、粤港澳大湾区、贵广高铁经济带等国家、省级战略,着力开展营商环境提升行动计划,全力打造政策最优、成本最低、服务最好、办事最快的一流营商环境。热诚欢迎各界精英、企业关注和支持从江,投资从江、深化合作,实现共赢发展!

+
+
+
+ + + + + + + + + + + + + + + + + + + +
+ +
+
+

咨询服务热线:0855-6628219

+

  榕江,旧称古州,位于黔东南苗族侗族自治州南部,都柳江中上游,地跨月亮山、雷公山和珠江、长江两大水系,全县国土面积3316平方公里,辖22个乡镇(街道),261个行政村(社区),总人口38.5万,苗、侗、水、瑶等少数民族占总人口的80%以上。

+

  榕江区位优越,交通便捷,是贵州省区域性支点城市、贵州面向粤港澳大湾区的桥头堡主阵地。2小时内可直达贵阳、凯里、桂林、柳州,4小时内可达重庆、长沙、广州、深圳、厦门。公路方面,厦蓉高速、荔榕高速、剑榕高速纵横交织,榕江至雷山高速公路正在加快推进;榕江至广西融安高速公路、榕江至广西宜州高速公路、榕江至黎平高速公路正在规划建设。铁路方面,贵广高铁已经开通,可直达贵阳、重庆、成都、桂林、广州、深圳等城市。目前还规划建设的贵阳至厦门高铁、重庆涪陵至广西柳州货运铁路均在榕江设站。

+

  林业方面,榕江县森林覆盖率为74.18%,全省排名第三、全州排名第一,是贵州省十个重点林业县之一。全县杉木总面积为234.48万亩,活立木总蓄积1815.43万立方米。

+

  水能资源方面,榕江县地跨我国长江、珠江两大水系。以色同向斜为分水岭,北部为长江水系,南部为珠江水系。全县有长10公里、集水面积20平方公里以上的河流67条,县境地表水多属中性水,适宜工、农业生产及生活用水、地下水质好、有开发价值。

+

  农业方面,榕江地形地貌以山地为主,土壤多为中厚层红黄壤,PH值为5.5-6.5左右,土壤肥沃,土层深厚,富含硒、锗等微量元素,适宜多种农作物生长,目前以百香果、脐橙、西瓜为主发展精品水果,以车江坝区辐射周边发展精品蔬菜,以草珊瑚、板蓝根、金钩藤为主发展中药材,禽类主要发展小黄牛、小香鸡、香羊,种植油茶、白茶等产业。

+

  旅游方面,榕江自古有“黔省东南锁钥,苗疆第一要区”之称,是世界超短裙之乡,苗侗祖源文化集散地,中国南部侗语标准音所在地,被授予“革命老区”“全国县域足球典型”和“贵州省体操之乡”称号,目前,已建成加宜月亮山居和大利井上洞天等精品民宿,旅游资源有待进一步开发。

+

  工业方面,榕江工业园区与县城紧密连接,总规划建设面积16.38平方公里,建成面积2.31平方公里,建成标准厂房面积17.2万平方米,初步形成以林产品深加工为首位主导产业,以特色农产品加工为重要产业,以电子信息、轻纺、民族工艺品为辅助产业的产业体系。

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

咨询服务热线:0855-3333103

+

  一、基本情况

+

  雷山县位于贵州省黔东南州西南部,是一个生态资源大县、民族文化大县、传统村落大县和旅游大县,县境内有国家级自然保护区、国家森林公园雷公山,森林覆盖率达72.8%,是全国生态文明建设试点县。全县总面积1218.5平方公里,其中耕地总面积22.51万亩。辖5镇3乡,共154个行政村,总人口16.53万人。集中式饮用水源地水质达标率100%,县城环境空气质量优良天数率达99%以上,县城污水处理率85.6%,农村家家户户通自来水,供电可靠率达99.8%,全县实现光纤、宽带、4G网络和数字电视村村通、“广电云”户户用工程全覆盖。

+

  二、区位优势

+

  雷山县位于贵州省黔东南州西南部,地处东经107°55′~108°22′和北纬26°02′~26°34′之间,东临台江、剑河、榕江县,南抵黔南自治州三都水族自治县,西连丹寨县,北与凯里市接壤。距省府贵阳180公里,距州府凯里28公里。距贵阳龙洞堡机场165公里,距黔东南黄平机场78公里,凯雷高速公路21.9公里,处于“凯里半小时经济圈”、“贵阳一小时经济圈”和“昆明、南宁、广州、长沙、重庆、成都一日经济圈”。

+

  三、产业发展

+

  (一)推动旅游产业化大提质。坚持全域旅游发展方向,丰富旅游生态和人文内涵,高品质开发旅游新业态,加快推进旅游基础设施标准化、服务标准化、监管标准化、产品标准化。全力打造国际一流山地旅游目的地、国内一流度假康养目的地。

+

  (二)推动农业现代化大发展。坚持保障群众“米袋子”“菜篮子”“肉盘子”有效供给。集中精力打造茶叶、天麻“两张名片”。种好“一叶茶”,大力提升茶产业规模化、标准化、品牌化水平,打响银球茶、做强清明茶、壮大白茶、做优红茶,引导企业集团式发展,统一雷公山茶系列品牌。着力打响“苗侗山珍·茶麻菇稻·蜂蜜黔求”品牌,申报雷山鱼酱酸获得国家地理标志产品。强化产销对接,推动黔货出山。

+

  (三)推动新型工业化大突破。坚持绿色生态工业发展格局,建设“茶麻菇稻”农文旅融合现代农业产业园、农文旅融合产业示范带、乡村振兴田园综合体示范园“一座园”,研发打造一批茶衍生品、天麻制品、“双乌”煲汤、菌菇制品、鱼酱酸系列产品、糯米酒等“茶麻菇稻”伴手礼,形成一批具有较强影响力和竞争力的产业集群。

+

  (四)推动新型城镇化大增效。坚持城镇带县,秉持城镇景区化理念,打好中央定点帮扶和东西部协作政策“一张牌”、开发陶尧温泉“一眼泉”、提升县城“一座城”,围绕文化旅游业推进现代特色新型城镇化。持续推进棚户区、老旧小区改造。以全省城市设计试点为契机,进一步加强城市规划设计,完善城镇功能。

+
+
+
+ + + + + + + + + + + + + + + + + + + + +
+ +
+
+

咨询服务热线:0855-5324777

+

  台江县位于贵州省东南部、黔东南苗族侗族自治州中部,全县辖4镇3乡2街道,总面积1108平方公里,总人口17.3万,是一个苗族、侗族等多民族聚居的苗疆风情特色山水园林城市,其中苗族人口占98%,被誉为“天下苗族第一县”。

+

  区位优越,交通便利——沪昆高铁、G60沪昆高速横贯东西,320国道横穿腹地,半小时车程可抵达凯里及高铁南站,1小时车程可达凯里黄平机场,2小时车程可达贵阳及龙洞堡机场,是北上川渝、南下粤港澳、东出闽浙、西进贵阳的交通要道,地理位置优越,区位优势明显。

+

  生态优良,气候宜人——台江地处云贵高原东部苗岭主峰雷公山北麓、清水江中游南岸。平均海拔717.5米,年平均气温15.9℃,空气质量指数优良率达100%,森林覆盖率达69.34%,负氧离子浓度超过全国平均水平,是全省10个重点林业县之一,被列入国家重点生态功能区范围,先后被授予中国绿色名县、中国十大品质休闲县、贵州长寿之乡等荣誉称号。

+

  风景优美,文化荟萃——台江境内9个苗族支系文化各具特色,有苗族姊妹节、苗族刺绣、苗族银饰锻制技艺等14项国家级非物质文化遗产,有反排村、长滩村等41个国家级传统村落,有国家森林公园、国家地质公园、国家湿地公园各1个,有AAA级景区6个,AA级5个,年接待游客359万人次以上,先后被评为世界著名文化旅游县、中国十佳最具原生态旅游大县、全国休闲农业和乡村旅游示范县、中国苗绣之乡。

+

  服务优质,发展强劲——台江县高度重视营商环境建设工作,坚持“营商环境只有更好,没有最好”,为入驻企业实行全程代办、提供“贵人服务”。近年来,台江县以贵州台江经济开发区为工业发展主战场,积极创建国家级循环经济示范园区,逐步形成北部(革一工业园区)以汽车动力电池制造为主和南部(台盘轻工业园区)以银饰、特色食品加工、民族服饰为主的“一园两区”工业格局,发展势头强劲有力。

+
+
+
+ + + + + + + + + + + + + + + + + + + + +
+ +
+
+

咨询服务热线:0855-5220166

+

  一、剑河县基本概况

+

  剑河县贵州省东南部,黔东南州中部,全县国土面积2176平方公里,总人口28万人,其中,苗族、侗族占96%,辖11镇1乡1街道办。县内最高海拔1626.3米,最低海拔348米,属中亚热带“湿润季风气候区”,冬无严寒,夏无酷暑,年平均温度16.7℃,雨量充沛,年降水量900-1400毫米。全县森林覆盖率72.8%,有“绿色王国”、“天然氧吧” 之美誉。2020年全县地区生产总值54.82亿元,财政总收入4.64亿元。

+

  二、剑河县交通情况

+

  剑河位于处于贵州“一纵线(酉阳—榕江线)”和“二横线(沪昆线)”交通大动脉的交叉点,是西南通往华南、华中地区的枢纽。沪昆、思剑、剑榕高速穿境而过。随着贵州进入高铁时代,剑河的区位交通越发显得优越,形成了至贵阳、昆明、重庆、怀化2 小时高铁交通圈,至长沙、桂林、广州 4 小时高铁交通圈,至长三角高铁 8 小时交通圈。其中剑河至贵阳机场2小时车程、距凯里高铁站65公里约50分钟车程、剑河距三穗高铁站30公里约25分钟车程。

+

  三、剑河县招商优势资源

+

  (1)工业有基础、承接能力强。①剑河工业园区基本情况。剑河工业园区位于岑松镇屯州村,规划面积6平方公里。交通便利,沪昆、思剑高速公路、320国道从园区穿过,园区配套设施完善,建有14万平方米标准厂房,374套廉租房,配套建有学校、医院、银行网点、加油站、商店等公共服务设施,已实现“七通一平”,达到四代工业园区标准。工业园区主要承接东部产业梯度转移以及当地资源为原材料的木材深加工、食品加工、医药加工、电子产品等高附加值绿色环保产业项目。目前入驻的木材加工企业主要有荣达木业、章氏古典家具有限公司、贵州鸿盛木业有限公司、贵州弘毅家居有限公司、贵州多来美豪爽实木家居用品有限公司、剑河县银峰木业有限责任公司、贵州森环活性炭有限公司等;食品加工企业有剑荣菌业有限公司、建江菌业有限公司、剑河老蔡食品有限公司、黔味味食品有限公司、贵州剑荣生物科技有限公司等;医药类企业有贵州泰和本草中药材科技发展有限公司、贵州省盛立本草科技有限责任公司、贵州省博康乐科技有限公司、贵州苗里医药创新科技有限公司、苗泰健康产业(贵州)有限公司、贵州苗飨健康产业有限公司、贵州苗大伯健康产业发展有限责任公司等企业。②工业土地储备情况。目前,剑河工业园区工业储备用地为165亩(已征用),分成三块,一是北大门地块100亩,为山坡,需要开挖平整;二是产镇大道地块15亩(相邻北大门往岑松方向)地块15亩,为山坡,需要开挖平整;三是蒋家湾地块35亩,已开挖平整。③下步招商目标:一是打造林产林化十亿级以上产业集群。大力发展“育苗-菌材培育-林木加工-新型装配式生态房屋”等为一体的林产林化全产业链,加快形成十亿级以上林产林化产业集群。二是打造特色食品加工十亿级以上产业集群。围绕食用菌、生态水产、油茶、肉类制品打造特色食品加工十亿级以上产业集群。三是打造中药材加工十亿级以上产业集群。大力发展以钩藤、佛手、天南星等中药材品种为主的现代中医药产业,打造集育苗、种植、研发、交易、加工、养生、医药、康养为一体的全产业链,形成十亿级以上现代中医药产业集群。

+

  (2)旅游资源得天独厚、民族文化丰富多彩。剑河县是全国28个重点集体林区和贵州省10个重点林业县之一,森林覆盖率达72.8%,森林覆盖率远远超出全国20%、全球30%的平均水平,有“绿色王国”的美誉。县境内有“苗疆圣水”之称的剑河温泉,水温常年保持在38-50℃之间,温泉富含氡、硫、锂、铁、钙等元素,为国内稀有的氡硫温泉,其理化指标和法国著名的维稀温泉相似。目前,投资10亿元打造的剑河温泉城已全面对外开放。县境内有迄今贵州省保护最为完整、生物多样性保存最为完好的百里原始阔叶林区,有仰阿莎国家森林公园,是“生态天堂,天然氧吧”。县境内还有贵州最大的高山平湖—仰阿莎湖,面积120平方公里,沿岸撒落100多个民族传统村寨,自然景观非常优美,在仰阿莎湖畔还有距今5.3亿年、见证生命起源的八郎寒武纪古生物化石遗址。剑河民族文化多彩,是苗族美神——仰阿莎的诞生地;有着源远流长、绚丽多彩的民族文化,被称为“中国现代民间绘画之乡”“中国民间文化艺术之乡”;有国家级非物质文化遗产7项,有苗族武术、苗族招龙、苗族水鼓舞、苗族姊妹节等13项省级非物质文化遗产;有近20种民族盛装服饰,被称为研究民族历史的活化石、“穿在身上的史书”;有传承千年的姊妹节、牯藏节、二月二祭桥节、高雍苗族三月三、六月六民歌节、抬狗节等民俗节日。

+

  (3)农林资源丰富、生态环境好。剑河是贵州省10个林业重点县之一,盛产松、杉、樟、楠等林木,有秃杉、鹅掌楸、红豆杉、水杉、剑柏、银杏等国家一、二、三级珍稀保护树种,有活力木蓄积量900万立方米。境内野生动物繁多,有33目64类183种,其中猕猴、娃娃鱼、穿山甲等是国家重点保护动物。剑河有“天然药物园”之称,有钩藤、杜仲、黄柏、灵芝、黄金、天麻、重楼、白芨、淫羊藿、天南星、茯苓等中草药材1024种,占全国药用植物总数的14.28%。是贵州十五个中药材种植基地建设县之一,基中“剑河钩藤”获得国家地理标识产品。

+

  (4)拥有天然绿色农产品。剑河特色农产品种类繁多,有12个农产品获得无公害农产品认证。①好山好水出好“菌”。剑河县把食用菌产业作为“一县一业”的重点产业来发展,剑河的食用菌种植技术日趋成熟,成立了林菌研发中心,建成新型菌材林示范基地、野生抚育与仿野生栽培基地、名贵野生菌生态培育基地。主打产品有黑木耳、秀珍菇、海鲜菇、鹿茸菇、双胞菇、大球盖菇、茶树菇、羊肚菌、红托竹荪等近9个品种。②好山好水出好“材”。“剑河钩藤”“剑河白香猪”“剑河稻花鲤”“剑白香猪”成为国家地理标志保护产品,“剑河小香鸡”获得国家地理注册证明商标,剑河小香鸡等8个产品入选全国首批扶贫产品。同时,剑河小黄牛、蜂蜜、辣椒等农特产品质量也非常好,只要有订单需要,我们都可以批量生产提供。③好山好水出好“鱼”。剑河水资源丰富,全县有大小河流301条,水资源有河(溪)流、水库、山塘等。全县滩涂水域面积46.21万亩, 总水面约18万亩,实际可开发养鱼(含增殖放流)面积12.88万亩(不含稻田面积)。全县现有水库21座,总面积7.52万亩,实际可养鱼面积7.1万亩,其主要功能为发电、灌溉和养殖。其中最大的水库为仰阿莎湖水库,面积6.64万亩。拥有国家地理标志保护产品“剑河稻花鲤”。也称稻田鱼、稻香鱼,是每年4月种水稻时放进水田之中,食稻花长大,到了10月收获稻谷时,一起收获,可煮酸汤鱼、可制成腌鱼。剑河稻渔综合面积6.33万亩,稻鱼年产量可达1945吨以上。

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+

黔东南州投资促进局
技术支持:工诚云网

+

+ + diff --git a/qdntz/inc/qdnzgk.html b/qdntz/inc/qdnzgk.html new file mode 100644 index 0000000..ce78229 --- /dev/null +++ b/qdntz/inc/qdnzgk.html @@ -0,0 +1,28 @@ + + + + 黔东南州概况 + + + + + + + +
+

黔东南州概况

+

咨询服务热线:4008-799399

+

  黔东南苗族侗族自治州位于贵州省东南部,辖1市15县,国土面积3.03万平方公里,总人口489.86万,少数民族人口占总人口的81.8%,是全国苗侗文化的核心地。全州现有1个省级高新区和10个省级经济开发区。黔东南生态环境“秀丽怡人”,森林覆盖率高达68%,983条河流水质达到一二类标准,城市空气质量优良天数占全年的98.9%,冬无严寒、夏无酷暑,处处是青山绿水、蓝天净土。黔东南民族文化“浸润心灵”,各族人民与山相安生、与水共流长,创造了各美其美、美美与共的民族文化,侗族大歌被列为世界非物质文化遗产,56项78个保护点列入国家非物质文化遗产名录,被誉为“歌舞海洋、百节之乡、非遗之冠、银饰之都”和“原生态民族文化博物馆”。黔东南的自然资源“丰富多样”,全州重晶石储量为1.9亿吨,占全国储量的三分之一以上;有铝土矿1.5亿吨,高岭土1亿吨以上,玻璃用石英砂1.7亿吨,活立木蓄积量1.69亿立方米;州境内有中药资源2831种,植物药用2656种,药用动物154种,药用矿物21种,被誉为“天然药库”“苗侗药都”,是全国、全省道地药材主产区。黔东南的交通网络“日新月异”,拥有凯里黄平和黎平两个支线机场,贵广高速高铁、沪昆高速高铁穿境而过,县县通高速,州内高速连接线不断加密,是贵州南下粤港澳、东进长三角的桥头堡。2022年,全州生产总值1293.08亿元,城镇居民人均可支配收入39299元,农村居民人均可支配收入13148元,财政总收入67.44亿元。

+

  新时代的黔东南,将围绕“四新”主攻“四化”,集中力量扩大有效投资,做大做强主导产业。着力构建“5+N”现代工业产业体系,大力推动矿产资源精深加工、再生资源循环材料、特色食品、木材加工及家具制造、大健康医药等主导产业集群发展,大力支持新能源电池材料、白酒、轻纺工业、运动装备制造等特色产业做大做强。热忱欢迎各地企业家前来投资考察、洽谈项目。

+ + + +
+ + + +
+

黔东南州投资促进局
技术支持:工诚云网

+

+ + \ No newline at end of file diff --git a/qdntz/inc/tzzc.html b/qdntz/inc/tzzc.html new file mode 100644 index 0000000..f38d79b --- /dev/null +++ b/qdntz/inc/tzzc.html @@ -0,0 +1,1551 @@ + + + + + + + + + + + + + + + + + + +
+
黔东南州产业大招商
政策摘编
黔东南州投资促进局
二零二三年
+
一、精选八
二、综合保障类政策
(一)综合性政策 .......................................... 3
(二)支持民族地区政策 ................................... 10
(三)土地利用政策 ....................................... 10
(四)财政金融政策 ....................................... 15
(五)科技创新政策 ....................................... 20
(六)税收支持政策 ....................................... 29
(七)人才扶持政策 ....................................... 36
(八)用电、物流政策 ..................................... 51
三、产业类政策
(一)大数据信息产业 ..................................... 55
(二)大健康医药产业 ..................................... 60
(三)新型建材产业 ....................................... 63
(四)生态特色食品加工产业 ............................... 65
(五)农业特色产业 ....................................... 66
(六)特色林业 ........................................... 68
(七)文化和旅游产业 ..................................... 71
(八)现代服务业 ......................................... 75
(九)新能源汽车及电池材料 ............................... 76
(十)酱香白酒 ........................................... 77
(十一)生猪 ............................................. 78
+
(十二)生态渔业 ......................................... 79
四、基金类政策
一、新型工业化基金 ....................................... 81
二、新型城镇化基金 ....................................... 86
三、农业现代化基金 ....................................... 89
四、旅游产业化基金 ....................................... 93
五、新动能产业发展基金 ................................... 96
六、生态环保发展基金 ..................................... 98
七、“桥头堡”专项资金使用办法 .......................... 102
五、东西部协作政策
(一)国家政策 .......................................... 102
(二)省级政策 .......................................... 103
(三)州级政策 .......................................... 107
六、县市政
(一)凯里市(黔东南高新区、贵州炉碧经济开发区) ........ 107
(二)丹寨县 ............................................ 115
(三)黄平县 ............................................ 118
(四)镇远县 ............................................ 119
(五)三穗县 ............................................ 120
(六)天柱县 ............................................ 131
(七)台江县 ............................................ 132
(八)从江县 ............................................ 141
(九)岑巩县 ............................................ 144
(十)榕江县 ............................................ 152
(十一)黎平县 .......................................... 163
七、营商服务类政策
(一)贵州省优化营商环境条例 ............................ 165
(二)“贵人服务”政策 .................................. 167
+
(三)贵州省2023年度优化营商环境重点任务清单 ............ 170
(四)项目投资服务政策 .................................. 179
(五)贵州省招商引资项目代办服务暂行办法 ................ 183
(六)贵州省生态环境厅关于生态环境保护优化推动产业高质量发展
的指导意见 .................................................. 183
+
黔东南州产业大招商政策
摘编
·1·
(一)自202111日至20301231日,对设在西部地区
的鼓
励类产业企业减按1
5
%的税率征收企业所得税;对从事民族
业、特色食
品生产的企业,符合国家重点扶持的高新技术企业条件
15
%
的税企业税;资额
1000
元(1000元)上的
药企业,从企产之日起3年内,企业所交纳的增值税地方分成部
助给持企
3
以上
5
年以以减
方式给予扶持。经认定为高新技术企业的,减按1
5
%率征收企业所税;
经认定的高新术企业来
可按15%
所得税和15%的优惠税率
内外纳税;对技术
型企业,减按1
5%
税率征收企业所得税。
政策依据:财政部税务总局国家发展改革委关于延续西部大开发企业
所得税政的公告(
2020
年第
23
号)省政民族业和特色
食品产业发展的意见(黔府发
2
012
32
号);贵州省关于加快推进新
医药产业发展的指导意见(黔府发〔
2014
24
号);贵州省人民政府关
的实意见(黔府发2019
7号)
(二)对首次入评中国500的民营企业,省级给予300元奖
励,次入中国民
5
00
”的民营业,省级给予
200
万元
门分别给予
300万元或100万元的补助。
政策依据:省委、省政府关于《进一步促进民营经济加快发展的若干
一、精选政策八条
+
黔东南州产业大招商政策
摘编
·2·
意见》(黔党发〔201616号)
亿亿亿级、亿给予
500
万元
400万元、300万元、200
万元的一次性奖励。
进到贵州落户发展总部经济的批零住餐、电商等现代商贸服务企业,年销
售额首次突破
100
亿元、50亿元10
亿元且入统的,别给予
500
万元、
300万元、100
万元的一次性奖励。
业,
400
万元,在创业板、科创板、北京证券
交易所上市的一次性奖励350万元,在新三板挂牌的一次性奖励50万元。
政策依据:省人民政府关于印发贵州省培育壮大市场主体行动方案
(20222025)的通知(黔府发〔20228号)
业项目,在确定土地出让底价时可按不低于所在地土地等别相对应《全国
工业用地出让最低价标准》的70%执行。以农、林、牧、渔业产品初加工
为主的工业项目,在确定土地出让底价时可按不低于所在地土地等别相对
应《全国工业用地出让最低价标准》的70%执行。
政策依据:省自然资源厅关于进一步做好新型工业化用地保障的若干
意见(黔自然资函〔2021541号)
1
亿元
支持民贸民品企业发展。统筹安排财政衔接推进乡村振兴补助资金等相
关转移支付支持低氟边销茶等民族地区农业产业发展。
政策依据:关于支持民族地区高质量发展若干政策措施的意见(黔党
+
黔东南州产业大招商政策
摘编
·3·
发〔202134号)
广广
产生业固1
5
%总限
500万元。
政策依据:州人民政府关于印发黔东南州东西部协作以奖代补鼓励
广
2021117
号)
(一)综合性政策
政策一
支持贵州积极接融入粤港澳大湾区建设,探索“大湾区总部+贵州
基地”、“大区研+贵州制造等合作模式,支持粤黔合作建产业
园区;积极对接成渝地区双城经济圈建设,推进交通、能源、大数据、文
化和旅游等领域合作。支持贵州加大磷、铝、锰、金、萤石、重晶石等资
源绿色勘探开发利用,加快磷化工精细化、有色冶金高端化发展,打造全
国重要的资源精深加工基地;支持布局建设关键零部件、关键材料、关键
设备等产业备份基地;支持建设产地冷链物流设施,鼓励农业产业化龙头
企业、农产品流通企业和大型商超在贵州建设绿色农产品供应基地,推动
“黔货出山”。推进特色食品、中药材精深加工产业发展,支持将符合要
求的贵州苗药等民族医药列入《中华人民共和国药典》。
政策依据:国务院关于支持贵州在新时代西部大开发上闯新路的意见
(国发〔20222号)
二、综合保障类政
+
黔东南州产业大招商政策
摘编
·4·
政策二
省级财政连续5年每年安排专项资金5亿元,按照“资金跟着项目走
的原则,用于支持“桥头堡”建设。加大对融入大湾区重大建设项目、旅
游产业化项目等的支持力度,支持黔东南州储备一批补齐短板、增强发展
后劲的优质项目。支持黔东南州在财税体制改革上先行先试,贯彻落实民
族自治地方企业所得税减免政策,提高黔东南州企业发展的动力。明确支
持黔东南州重大工程项目103个,重大政策117项,试点示范21个。
政策依据:关于支持黔东南自治州“黎从榕”打造对接融入港澳大
湾区“桥头堡”的实施意见(黔府发〔20227号)
政策三
5
00
3
00
万元奖励,
首次入评中国民营
500
强”民营企业,省级给
200
万元
300
元或100万元的补助。
政策依据:省委、省政府关于《进一步促进民营经济加快发展的若干
意见》(黔党发〔201829号)
政策四
1.做大做强龙头企业。通过省工业和信息化发展专项资金,对营
突破亿亿级亿亿级的
500
400万元、300万元、200
励。通过省级服
务业促进工业化城镇化专项资金,对本省和引进到贵州落户发展总部经济
的批零住餐、电商等现代商贸服务企业,年销售额首次突
100
亿元、50
亿元、10
亿元且入统的,分别给予
500
万元、300万元、100
万元的一次
性奖励。
2.大力培育上市企业。通过省级金融业态发展奖补资金,对注册地在
+
黔东南州产业大招商政策
摘编
·5·
我省的企业,在境内主板上的一次性奖400万元,在板、科创板、
北京证券交易上市的一次性奖励350元,在新三板牌的一次性奖
50万元。
3.
资金,对新增上规入库的规模以上工业企业、规模以上服务业企业、限额
以上批零住餐企业,分别按照每户
20
万元、1
0
万元、1
0
万元标准给予一
次性奖励。
政策依据:省人民政府关于印发贵州省培育壮大市场主体行动方案
(20222025)的通知(黔府发〔20228号)
政策五
1.定的新技术企业来源于境外所得按照15%的优惠税率
企业所得税和15%优惠率计算境内外应纳税总额;对经认定的技
进型企业,减按15%的税率征收企业所得税。
2.对外商在黔设立的独立法人研发机构,以及出资设立或参与设立的
国家工程研究中心、国家技术创新中心、国家重点实验室、国家工程实验
省相现有
300万元至500万元补助。外商投资企业提供技术转让、技术开发及与之相
关的技术咨询、技术服务,可按规定免征增值税。
3.关部门现有专项对在主板上的外商投资企业给400万元
励,在中小板创业板上市的给予350万元奖励,对纳省级上市后备
源库并在新三板挂牌的给予一次性奖励50万元。
政策依据:贵州省人民政府关于加大利用外资力度推动经济高质量发
展的实施意见(黔府发〔20197号)
政策六
1.小规模纳税人增值税起征点从月销售额10万元提高到15元;对小
+
黔东南州产业大招商政策
摘编
·6·
微企业和个体商户年应纳税所得额不100元的部分,在行优
策基础上,再减半征收所得税延续执行企业研发费用加计扣除75%政策,
将制造业企业加计扣除比例提高到100%
2.纳税人在资产重组过程中,通过合并、分立、出售、置换等方式,
将全部或者部分实物资产以及与其相关联的债权、负债和劳动力一并转让
给其他企业和个人,对其中符合条件的货物、不动产、土地使用权转让行
为,不征收增值税。
3.对新增上规入库的规模以上工业企业,按照每户20万元的标准给予
企业一次性奖励;对新增上规入库的规模以上服务业企业,按照每户10
元的标准给予企业一次性奖励;对新增上限入库的限上批零住餐企业,按
照每户10万元的标准给予企业一次性奖励。
4.册地在我省,且在境内主板市的企业,奖400万元;在
业板、科创板市的企业,奖350元;对纳入省级上市后资源库并
在新三板挂牌的企业,一次性奖励50万元。
政策依据省发展改革委5关于印发《关于深人实施贵省市
场主体培育“四转”工程的若干政策措施》的通知(黔发改服务〔2021
394号)
政策七
1.新引的外商投资工项目,对其实际发生的项目备的/
安装费、设备转移的搬迁运输费、厂房装修设计费、环评费、规划设计和
施工图设计费、项目地质勘察费等费用按实际发生费用给予一定比例资金
支持。
2.对符合条件的外商投资工业企业生产经营成本中实际发生的物流费、
认证费、房产税、土地使用税、环评费、生产经营场所租赁费等费用按实
际发生费用给予一定比例资金支持。
+
黔东南州产业大招商政策
摘编
·7·
3.支持外资跨国公司地区总部和功能性机构做强对在黔新设的外资跨
国公司总部或地区总部对省级财政年度贡献首次超过5000万元人民币的,
按其当年对地方税收贡献的增量部分给予一定比例的支持;对符合条件的
外资跨国公司地区总部和功能性机构年度营业收入作为基数给予分档支持。
4.对中东部加工贸易企业搬迁至贵州的工业企业,在搬迁费用、产线
提质增效等方面给予一定比例资金支持。
5.支持工业企业布局海外仓拓展业务,在运营费用等方面给予一定比
例资金支持。支持工业企业扩大进口,对进口《贵州省鼓励进口产品和技
术目录》中的关键设备、关键零部件、重要原材料给予一定比例资金支持。
支持工业企业通过陆海新通道及中欧(中亚)班列开展进出口业务,有效
降低物流成本。
6.对工业企业出口国家准许的技术,以及进口国家鼓励的技术按一定
比例给予贷款贴息支持。
7.支持工业企业开展境外实业投资、海外并购和国际产能合作,对境
外项目给予一定比例资金支持。
8.对参加境外展会的工业企业,展位费给予一定比例的支持;对属于
脱贫地区的参加中国进出口商品交易会的工业企业,展位费全免;对参加
省商务厅组团参加中-盟博览会、中国国际服务贸易、中国(上海)
国际技术进出口交易会等境内外知名展会的工业企业,展位费全免。
9.支持工业企业参加中国国际进口博览会贵州经贸交流会、中国国际
投资贸易洽谈会等重大投资促进活动,围绕产业链开展补链强链招商。
10.将符条件的外资工业企业纳贵州重点外商投资企业名单
及时有效处理外资工业企业投诉,保护外资工业企业合法权益,持续优化
外商投资环境。
政策依据:省商务厅关于印发《关于支持新型工业化高质量发展的若
+
黔东南州产业大招商政策
摘编
·8·
干措施》的通知(黔商发〔202113号)
政策八
202211日至20241231对增值税规模税人继续50%
建设税、使
(不含证券交易印花税)、耕地占用税和教育费附加、地方教育附加,并将
小型微利企业和个体工商户纳入政策适用范围。增值税小规模纳税人、小
型微利企业和个体工商户已依法享受资源税、城市维护建设税、房产税、
城镇土地使用税、印花税(不含证券交易印花税)、耕地占用税和教育费附
加、地方教育附加其他优惠政策的,可叠加享受上述“六税两费”减免政
策。
积极落实小型微利企业所得税优惠政策。自202211日至202412
31日,对年应纳税所得额超100万元但不超过300万元的部分,减按25%
计入应纳税所额,20%的税率缴纳企业所得税。完善小型微利企
标监控,实时跟踪管理,及时纠正应享未享、不应享而享受、超额享受、
未足额享受等。
加快推进新型工业化各项政策落实落地。支持工业企业主导或参与制
订技术标准。对牵头制定并获批准发布国家标准和地方标准,符合法律法
规规定且符合省委省政府确定的重点支持发展产业和项目、对贵州经济社
会发展有较大的促进作用的企,给予省级相应资20万元5万元的补
助。切实发挥知识产权激励制度作用。对省级和国家级知识产权优势或示
范企业给予20万元—50万元资助;对获得中国专利金奖、中国外观设计金
奖、中国驰名商标(行政认定)的各一次性奖励50万元;对获得贵州省专利
金奖、贵州省外观设计金奖的各一次性奖励10万元;支持创新型企业运用
专利商标进行质押融资,给予企业最高10万元贴息资助,给予银行贷款金
0.2%的风险资助,知识产权证券化每单最高给予200万元资助。
+
黔东南州产业大招商政策
摘编
·9·
政策依据:省人民政府办公厅关于印发贵州省工业企业纾困解难实施
方案的通知(黔府办函〔202241号)
政策
20251231日前,对符合规定的重点群体人员,从事个体经营的,
自办理个体工商户登记当月起,在3(36个月)内按每户每年14400元为限
额依次扣减其当年实际应缴纳增值税、城市维护建设税、教育费附加、地
方教育附加和个人所得税。企业招用符合规定的重点群体人员,与其签订
1以上期限劳动合同并依法缴纳社会保险费的,自签订劳动合同并缴
社会保险当月,在3内按照实际招用人数给予定额每每年7800元依
次扣减增值税、城市维护建设税、教育费附加、地方教育附加和企业所得
税。
加大规上(限上)服务业企业支持力度,对新入统的企业每户给予10
元奖补。
政策依据:省人民政府办公厅关于印发贵州省促进服务业领域困难行
业恢复发展实施方案的通知(黔府办函〔202242号)
政策
继续推进减税降费。切实落实常态化疫情防控各项措施,严格落实物
流企业大宗商品仓储用地城镇土地使用税减半征收等政策。在政策期内,
允许符合条件物流辅助服务业纳税人按照当期可抵扣进项税加计10%
抵减应纳税额。
进一步降低用电成本。深化电价机制改革,落实好第二监管周期输配
电价,切实降低实体经济输配电价。有序放开竞争性环节上网电价,推动
各类用户参与电力市场交易,实行峰谷分时电价。落实降低贵安新区数据
中心和省内5G基站用电成本政策。
政策依据:省人民政府办公厅关于印发贵州省支持民营企业加快改革
+
黔东南州产业大招商政策
摘编
·10·
发展与转型升级政策措施的通知(黔府办发〔202113号)
(二)支持民族地区政策
1.支持民族地区有条件的开发区升级为省级或国家级开发区。重点支
持黔东南高新技术产业开发区等加快转型升级发展,2025年主要经济指标
力争实现倍增。支持黔东南州大健康医药产业集群等加快建设。
2.支持天柱钡化工产业园、兴仁化工产业园等创建省级化工园区。
3.支持麻江县、安龙县等创建国家现代农业产业园,支持民族地区其
他县()积极申报创建农业产业融合发展项(家现代农业产业园、
势特色产业集群、农业产业强镇)
4.加大对“苗绣”“贵银”产业高质量发展资金支持,省现代服务业
发展专项资金、省文化产业发展专项资金、省中小企业发展专项资金、省
特色手工产业锦绣计划专项资金向“苗绣”“贵银”产业项目倾斜支持。
5.打造100个民族特色村,推进民特色村寨和传统村落旅
产业融合发展。支持民族地区发展养老产业,重点打造20个康养示范基地。
6.支持民族地区发展林业经济,创建10个以上国家林下经济产业示范
基地。支持黔东南州创建国家级林下经济示范区。
7.在满足国家、省相关能耗双控、双碳以及产业政策的基础上,对民
族地区优势产业能耗增量和能耗强度指标给予差异化支持和倾斜。支持民
族地区电解铝等高载能优势产业购买产能指标。
8.优先支持符合条件的民族地区企业在主板、创业板、科创板和新三
板上市或挂牌。
政策依据:关于支持民族地区高质量发展若干政策措施的意见(黔党
发〔202134号)
(三)土地利用政策
+
黔东南州产业大招商政策
摘编
·11·
政策一
纳入国家重大项目清单的项目用地,以及纳入省重大项目清单的单独
选址的能源、交通、水利、军事设施、产业项目用地,在用地审批时直接
配置计划指标。农业十二大特色优势产业、十大工业产业、服务业创新发
展十大工程,以及教育、医疗等公共服务和基础设施重点项目用地优先保
障,“六稳”“六保”项目应保尽保。
政策依据:省人民政府办公厅《关于进一步做好用地审批和计划管理
的通知》(黔府办函〔202070号)
政策二
1.落实出让要求。市、县人民政府出让土地前,应完成地块内土地及
房屋征收、补偿等工作,处理好土地、矿权、房屋产权、安置补偿等法律
经济关系,防止因政府及政府有关部门的行为造成土地闲置。拟出让的土
地应土地权利清晰,安置补偿到位,没有法律经济纠纷,具备施工设备与
人员进场的道路、施工所需的供水和供电等动工开发必需的基本条件。
2.规范出让方式。符合《划拨用地目录》的建设用地项目,可以按划
拨方式供应土地。对能源、环境保护、保障性安居工程和非营利性的养老、
教育、文化等项目,除可按划拨方式供应外,鼓励以出让、租赁等方式供
应土地。工业、商业、旅游、娱乐和商品住宅等经营性用地以及同一宗地
2个以上意向用地者的,应当以招标、拍卖或者挂牌方式出让。不得把
应当进行招标拍卖挂牌方式出让的经营性用地,违反规定通过划拨方式或
协议方式出让。
3.范土出让金管理。地出让合同签订后1月内,受让人
纳出让价款的50%,余款要按照合同约定及时缴纳,最迟付款时间不得超
过一年。属国家、省确定的优先发展产业且用地集约的特殊工业项目,经
当地出让协调决策机构集体认定,土地出让金可约定在两年内全部缴清,
+
黔东南州产业大招商政策
摘编
·12·
首次缴纳比例不得低于出让价款的50%。受让人付清全部土地出让价款后,
方可申请办理不动产登记。未按出让合同约定缴清全部土地出让价款的,
不得发放不动产权证书,也不得按出让价款缴纳比例分割发放不动产权证
书,不得少征、减免土地出让收入和违约金,也不得以任何形式变相减免
土地出让收入。
4.开展存量土地处置。未动工开发满一年的闲置土地,市、县自然资
源主管部门应报经本级人民政府批准后,依法向国有建设用地使用权人征
缴土地出让或者划拨价款20%的土地闲置费;属未动工开发满两年的闲置
土地,市、县自然资源主管部门按照相关规定,报经有批准权的人民政府
批准后,依法无偿收回国有建设用地使用权。会同市场监管、发展改革、
金融监管部门建立土地市场诚信体系,对失信企业实施联合惩戒。
政策据:
省人民政府办公厅印发关于进一步加强国有建设用地出让
和供后监管工作的意见(试行)的通知(黔府办发〔202135号)
政策
优先保障工业用地指标。推进新增建设用地计划分配与存量建设用地
盘活挂钩,根据各地处置批而未供和闲置土地情况配置新增建设用地年度
计划指标,优先保障开发区工业项目用地。纳入省级以上重点项目清单的
工业项目,由省级统筹优先保障用地计划指标。工业项目新增用地,一般
不安排使用增减挂钩节余指标。开发区工业用地项目,按照“特事特办、
急事急办”的原则,开辟绿色通道,优先审批,即到即办,快捷报批。
优先出让工业用地。有序推进开发区内建设用地供应,优先出让工业
用地,引导和支持有条件的企业,特别是大中型工业企业参与工业用地招
标拍卖挂牌。各地按照“以投定供”的原则,合理确定大型工业项目建设
时序,根据项目投产计划,制定分期供地计划,优先保障项目首期建设用
地,定期对已供地项目亩均投资强度、单位面积产值等进行效益评估,决
+
黔东南州产业大招商政策
摘编
·13·
定是否继续供地或调整后续供地规模。分期建设的工业项目,不得改变土
地用途。
推进“标准地”出让。鼓励“标准地”改革试点地区和有条件的开发
区,在完成环境影响、节能、压覆重要矿产资源、地质灾害危险性等相关
区域评估基础上,因地制宜建立新增工业项目“标准地”的投资、能耗、
环境、建设、亩均产出等引导性指标体系,并将具体指标纳入项目投资建
设协议和国有建设用地使用权出让合同,强化前期服务,加快办理用地审
批等相关手续,切实提高土地资源配置效率。
提高标准厂房利用率。各地要引导无特殊工艺要求的中小微型企业租
赁或购买存量标准厂房,对于投资额小于5000万元或用地面积小于30亩的
工业企业,原则上入驻标准厂房,不提倡单独供地。鼓励企业通过建设用
地使用权分割或合并转让方式盘活闲置厂房和国有建设用地使用权。
创新工业用地供应方式。鼓励各地采取长期租赁、先租后让、租让结
合、弹性年期出让等方式供应工业用地,出让土地需依法以招标拍卖挂牌
方式供应。达到土地出让合同约定的固定资产投资强度、亩均税收等条件
后,经出租人同意,可申请将承租的全部或部分土地按协议方式办理出让
手续。在弹性年期土地使用权期满时,达到出让合同约定的固定资产投资
强度、亩均税收等条件的,可申请延长土地使用年期,经批准并按相关规
定补缴土地出让金后,办理不动产变更登记。
引导工业用地混合使用。经市、县自然资源主管部门充分论证,新增
工业项目用地,生产服务、行政办公、生活服务设施建筑面积占项目总建
筑面积比例不15%的,仍按工业用管理,兼容用途的土地、房
得分割转让。出让兼容用途的土地,按主用途确定供应方式,在现有建设
用地上增加兼容的,可以协议方式办理用地手续。
政策依据:省自然资源厅省工业和信息化厅省科技厅省商务厅关于强
+
黔东南州产业大招商政策
摘编
·14·
化开发区规划引领推动土地节约集约利用的指导意见(黔自然资发〔2021
14号)
政策
推进土地供应方式改革。各地要大力推行长期租赁、先租后让、租让
结合、弹性年期出让的方式,降低企业用地成本。对确定为优先发展产业
和以农、林、牧、渔业产品初加工为主的脱贫攻坚工业项目,在符合集约
用地标准前提下,土地出让底价可按不低于所在地土地等别相对应的工业
用地最低价标准的70%执行,但不得低于实际各项成本费用之和。
允许项目建设先行用地。对疫情防控及抢险救灾急需使用的土地,可
根据需要先行使用,对难以避让永久基本农田和生态保护红线的,视作重
大项目允许占用。属临时用地的,使用结束后恢复原状,交还原土地使用
者;属永久性建设用地的,依法办理建设用地审批手续。对符合先行用地
规定的重大工程,可按程序申报办理先行用地审批手续,保障依法用地。
光伏方阵用地不得占用耕地,占用其他农用地的,应节约集约用地,
避免对生态和农业生产造成影响。光伏方阵用地涉及使用林地的,须采用
林光互补模式可使用年降水400米以下区域的灌木林地及其他区
域覆盖
度低于50%的灌木林地;光伏支架最低点应高于灌木高度1米以上。光
伏方阵用地不得改变地表形态,以第三次全国国土调查及后续开展的年度
国土变更调查成果为底版进行管理,实行用地备案,不需按非农建设用地
审批。
政策依据:省自然资源厅关于进一步加强建设用地保障服务推动经济
社会高质发展的通(黔自然函〔2020392)、自然资源部办
厅国家林业和草原局办公室国家能源局综合司关于支持光伏发电产业发展
规范用地管理有关工作的通知(自然资办发〔202312号)
+
黔东南州产业大招商政策
摘编
·15·
(四)财政金融政策
政策一
支持商业金融、合作金融等更好为西部地区发展服务。引导金融机构
加大对西部地区小微企业融资支持力度。落实无还本续贷、尽职免责等监
管政策,在风险总体可控前提下加大对西部地区符合条件的小微企业续贷
支持力度。引导和鼓励银行业金融机构合理调配信贷资源,加大对西部贫
困地区扶贫产业支持力度。支持轻资产实体经济企业或项目以适当方式融
资。增加绿色金融供给,推动西部地区经济绿色转型升级。依法合规探索
建立西部地区基础设施领域融资风险分担机制。
政策依据:中共中央国务院关于新时代推进西部大开发形成新格局的
指导意见(中发〔201913号)
政策二
对注册地在我省的企业,上市挂牌后切实发挥产业集群引领、科技创
新引领等作用,有力推动地方经济社会高质量发展的,经评定后给予奖励。
其中,境内主上市的企业,奖励400万元;在创业板科创板、北京
券交易所上市企业,奖350万元;对在新三板挂牌的企业奖励50
元。
政策依据:民政公厅印发省推市高
量发展三年行动方案的通知》(黔府办发〔202132号)
政策三
1.省应用技术研究与开发资金以财政后补助方式对入选创新型领军企
业给予500-1000万元补助,对入选科技型小巨人企业给予50万元补助,
对入选科技型小巨人成长企业给予20万元补助,对入选科技型种子企业给
15万元补助,对经认定的大学生创业企业给予5-10万元补助。
2.对具有外贸经营权的工业生产、仓储、物流、电子商务等企业到境
+
黔东南州产业大招商政策
摘编
·16·
外参展会生的展位费、人员费按有关定给50%-70%金支持,
对出企业出口信用保险机构投保发生保险费给50%-80%的资
(单个企业最高支持金额100万元)
政策依据:省政府关于进一步支持工业企业加快发展若干政策措施的
通知(黔府发〔201512号)
政策四
符合我省特色优势产业发展导向,年实际外资金额(不含外方股东贷
款,下同)超过3000万美元的新项目(房地产业、金融业及类金融业项目
除外,下同)或超过1000万美元的跨国公司总部或地区总部;新引进符合
我省产业发展向的境外世界500强投资项目;已在我省落户属于我省
特色优势产业的生产性外资项目,年实际外资金额超过2000万美元的增资
项目。上述项目落地我省的,按其当年对省级财政贡献量的一定比例给予
支持。外资跨国公司总部或地区总部对省级财政年度贡献首次超过5000
元人民币的,按其当年对省级财政贡献量的一定比例加大支持力度。
政策依据:贵州省引进重大外资项目支持办法(暂行)(黔府办函
201949号)
政策五
1.通过贵州省工业和信息化发展专项资金,支持“千企改造”工程,
按项目实施单位在同一年度获专项资金支持额度原则上不超过2000万元、
单个项目获支持额度原则上不超过1000万元的标准给予支持。
2.通过贵州省应用技术研究与开发专项资金、贵州省工业和信息化发
展专项资金,对我省高新技术产业和战略性新兴产业发展中的重要核心技
术攻关、重点装备研发、重点引进技术(装备)的消化吸收再创新项目,
给予最高1000万元的补助。
3.通过贵州省工业和信息化发展专项资金、贵州省能源结构调整专项
+
黔东南州产业大招商政策
摘编
·17·
资金,按照十大工业产业分类,在“十四五”期间,对营业收入首次突破
1000亿级、500亿级、100亿级、10亿级的企业,分档分别给予一次性奖励,
单户企业(一级企业)奖励不低于200万元,最高不超过1000万元。
4.落实企业上市挂牌专项奖励措施。对注册地在我省,且在境内主板
上市的工业企,奖400万元;在中小板、创业板、科创板上市的
企业,奖350元;对纳入省上市后备资源库并在新三板挂牌的工
企业,一次性奖励50万元。省内企业境外上市和并购重组上市可参照执行。
5.通过贵州省工业和信息化发展专项资金,对新认定的国家级企业技
术中心国家级术创新示范企业、国家工业设计中心给予一次补助100
万元,对新认定的省级企业技术中心、技术创新示范企业、工业设计中心
给予一次性补助50万元。
6.通过贵州省商务发展专项资金,对新认定的省级创业创新示范基地
等分别给予一次性补助。企业在同一年度获得专项资金支持额度原则上不
超过1000万元。
7.通过贵州省工业和信息化发展专项资金,对新增上规入统工业企业
按每户20万元的标准实施奖励;利用贵州省中小企业发展专项资金,对新
认定为国家级精特“小巨人”的企业,按每户100万元标准给予
一次性奖励;对新认定国家级中小企业公共服务示范平台,按照每户40
元的标准给予一次性奖励,对新认定省级中小企业公共服务示范平台,按
照每户20万元的标准给予一次性奖励。
政策依据:省财政厅关于印发《支持新型工业化若干财政政策措施》
的通知(黔财工〔202146号)
政策六
1.对文化旅游重点项目贷款贴息。
省级财政1亿元文化旅游重点项目贷款贴息资金,要支促进
+
黔东南州产业大招商政策
摘编
·18·
农村产业融合发展、实施休闲农业和乡村旅游精品工程、助力全省乡村振
兴的文化旅游重点项目,着力巩固脱贫攻坚成果,助推乡村产业兴旺,推
动旅游产业提质增效。
2.对新评定的高星级酒店给予奖励。对新评定上规入统的五星级饭店、
四星级饭店,省级财政分别一次性奖励100万元、30万元。
3.对新增上规入统旅游企业给予奖励。
省级财政统筹文化和旅游发展专项等相关资金对当年新增上规入统的
旅游企业给予奖励。2021年对新增上规入统的旅游企业给予1000万元激励
支持。
4.实施旅游企业上市挂牌奖励政策。
对注地在省,且在境内主板上市的旅企业,一次性奖励400
京证上市
350万元;对在新三板挂牌的旅游企业,一次性奖励50万元。
政策依据:省财政厅关于印发《省财政厅支持旅游产业化的若干政策
措施》的通知(黔财教〔2021178号)
政策七
1.建设补贴。对非财政性资金投资、符合国家标准的公用或专用充电
设施,按直流桩200/千瓦、交流桩100/千瓦的标准给予一定补贴。
2.符合贵州省电动汽充电基础设施示范项目管理(暂行
规定条件,并经省能源局会同有关部门确定为充电基础设施建设示范的项
目,按照本办规定程序实施奖补,奖补金100万元,单个企业奖
金最高不超过200万元。
政策依据:省财政厅省能源局关于印发《充电基础设施建设补助资金
绩效承诺奖补办法》的通知(黔财工〔2019114号)
+
黔东南州产业大招商政策
摘编
·19·
政策八
创新试点目的总投资,226比例构成即地方国企业出20%、
社会资本出资20%、银行贷60%。其中,地方国有企业出资部分可申请
省级资金200-3000元(超过投资20%,由创新点项
报单位所在地人民政府授权地方国有企业履行出资人职责。
政策依据:贵州省农业农村厅关于开展农银企产业共同体创新试点的
通知(黔农发〔201937号)
政策
支持市场主体做大做强
()激发就业创业活力。省市财政在分配就业专项资金时将城镇常住
人口和城镇新增就业人口作为分配因素。省级通过中小企业发展专项资金、
妇女儿童专项资金、锦绣计划专项资金等,大力支持中小企业星光培训及
人才培训、中小企业服务体系建设、中小企业发展及巾帽家政、妇女手工
特色产业等发展。
()推进产城融合发展。以工业大突破助推新型城镇化,
统筹省工业和信息化发展专项资金、省中小企业发展专项资金及新型
工业化基金等,采取直接补助、贷款贴息、投贷联动、股权投资等方式支
持培育壮大市场主体。
()支持实施人才新政。充分用好省级人才发展专项资金,支持符合
条件的人才引进和培养,对引进的高层次紧缺人才、重点产业高端人才团
队等,在推动新型城镇化建设、促进地方经济社会发展方面有突出贡献的,
重点给予奖励。
提升政府投资基金引导作用
充分发挥贵州省新型城镇化投资基金的引领、撬动作用,省级财政在
20212025年,连续5年每年出资30亿元-50亿元,注入贵州省新型城镇化
+
黔东南州产业大招商政策
摘编
·20·
发展基金,重点围绕我省新型城镇化建设工作,以经营城市的理念、商业
化的模式、市场化的手段,经营盘活城市资产、丰富城市功能、满足市民
需求,改善城乡人居环境,重点投向城市更新、产城融合、特色小镇、特
色小城镇和绿色小镇等项目,以产业化促进城镇化。通过贵州省新型城镇
化投资基金与贵州省新型工业化发展基金、贵州省文化旅游产业投资基金
等省级政府投资基金间的相互联动,形成财政出资合力,引导金融机构等
社会资本进一步加大对新型城镇化的投入。
政策依据:省财政厅关于印发《支持新型城镇化若干财政政策措施》
的通知(黔财建〔202164号)
(五)科技创新政策
政策一
一、一般资助标准
(一)国内发明专利实施。发明专利权利人(不包括自然人)将其国
内授权发明专利(包括以受让或被许可方式引进的省内外授权发明专利)
实际运用于本单位生产经营,每件实施的发明专利资助3000元。
(二)高价值发明专利授权。新授权的高价值发明专利,尚未实施的,
每件资助1500元;已实施的,按照本条第(一)项标准资助。高价值发明
专利的范围,按照国家知识产权局明确的范围为准。
(三)高价值发明专利维持。对申请日起满10年的高价值发明专利,
自届满10年之日起6个月内提出资助申请,每件资助3000元。
(四)国外发明专利授权。对国外授权发明专利,一个国家或地区每
件资助1.5万元,每件发明专利资助不超过3个国家或地区。
(五)地理标志注册(批准、登记)。获得地理标志注册(批准、登
记),每件资助2万元,仅资助一个渠道。
(六)集成电路布图设计专有权登记。获得集成电路布图设计专有权
+
黔东南州产业大招商政策
摘编
·21·
登记,每件资助2000元。
(七)植物新品种授权。获得植物新品种授权,每件资助5000元。
(八)地理标志产品专用标志使用核准。对经核准使用地理标志产品
专用标志的市场主体,每家资助5000元。
二、知识产权运用项目资助标准
(一)首通过知识产权理体系认证的,资3万元。每家单
资助一次。
(二)购买知识产权保险的保费金额在2万元以上的,资助3000元。
(三)知识产权权利人向银行申请专利、商标等知识产权质押贷款本
息还清后,按照贷款市场报价利率(LPR)计算利息的20%给予贴息资助,每
个资助对象每年最高资助10万元;贴息资助时对知识产权评估中介服务费
按实际支出给予不超过2万元资助。
(四)银行向我省知识产权权利人发放一年期以上专利、商标质押贷
款,按照质押贷款额的0.2%给予风险资助,同一银行对同一知识产权权利
人发放的专利、商标质押贷款,年度风险资助金额最高不超过20万元。全
年风险资助总额以当年预算资金为限,用完即止。
(五)知识产权运营资助:
1.高校院所、企业等创新主体建立健全专利运营激励机制,积极探索
方法利转
300万元以上的资助20万元。
2.知识产权运营服务机构创新知识产权运营方法,建设并有效运行知
识产权运营服平台知识产权运营交易主营业务年收300万元以上
资助20万元。
(六)对以知识产权为基础资产公开发行资产证券化产品的融资企业
给予一次性资,资助金额为发行规模5%,最高不超过200元。每年
+
黔东南州产业大招商政策
摘编
·22·
按发行规模排序资助不超过3单。
三、知识产权服务项目资助标准
(一)经国家知识产权局批准在贵州设立满3年、拥有2名以上在贵州
省备案执业的专利代理师、上年度代理贵州申请人的国内发明专利授权50
件以上的专利代理机构(含外在贵州省设立的分支机构)资助2万元
不重复资助。
(二)在家知识产权局标局备案成立3年,并且在代理的
注册申请中上年度被核准的商标注册500件以上的商标代理机构,资助2
元,不重复资助。
(三)对获得专利代理师资格证书在国家知识产权局《专利代理管理
系统》进行首次执业备案,并在贵州省内专利代理机构(含外省在贵州省
设立的分支机构)执业满1年的专利代理师,资助2000元。
(四)对获得知识产权师中级以上(含中级)专业技术职称、国家级
知识产权人才、受聘为国家级知识产权专家的自然人,资助2000元。
(五)对承担省知识产权局组织开展的贵州省重大经济活动知识产权
分析评议、专利导航、知识产权战略研究项目的承担单位,每个项目资助
15万元。
(六知识权服务机构开展知识产权托服务,帮500家以上中
小微企业开展知识产权管理制度制定、战略规划编制、专利技术挖掘、知
识产权申请与维护、许可转让、知识产权评估、知识产权维权援助等服务
一年以上的,给予30万元资助。
四、知识产权发展项目资助标准
(一)对获得批准的国家知识产权强国建设示范城市(县、园区)、
国家知识产权示范企业、国家技术与创新支持中(TISC)、国家知识产权
示范高校和科研机构、国家知识产权信息服务中心、全国中小学知识产权
+
黔东南州产业大招商政策
摘编
·23·
教育示范学校等国家级示范项目,以及贵州省高价值核心专利项目、贵州
省地理标志产品产业化促进项目,给予一次性资助50万元。
(二)对获得批准的国家知识产权强国建设试点城市(县、园区)、
国家知识产权优势企业、国家知识产权试点高校和科研机构、全国中小学
知识产权教育试点学校、全国知识产权服务品牌机构、国家知识产权信息
公共服务网点等国家级试点项目,给予一次性资助30万元。
(三)对贵州省知识产权优势企业、县域(园区)经济知识产权战略
推进工程、贵州省知识产权信息公共服务网点,以及其他省级知识产权试
点或示范项目,给予一次性资助20万元。
政策依据:省知识产权局关于印发《贵州省知识产权高质量发展资助
办法》的通知(黔知发〔20221号)
政策二
1.中国专利金奖、中国外观设计金奖、中国驰名商标(行政认定)各一
次性奖励50万元。
2.中国专利银奖、中国外观设计银奖各一次性奖励20万元。
3.中国专利优秀奖、中国外观设计优秀奖各一次性奖励10万元。
4.贵州省专利金奖、贵州省外观设计金奖各一次性奖励10万元,且每
届评选名额贵州省专利金奖不超过2个,贵州省外观设计金奖不超过1个。
5.州省利银奖、贵州外观设计银奖各一次性奖励5元,且每
届评选名额贵州省专利银奖不超过6个,贵州省外观设计银奖不超过3个。
6.州省利优秀奖、贵州省外观设计优秀奖,各一次性奖励3元,
且每届评选名额贵州省专利优秀奖不超过20个、贵州省外观设计优秀奖不
超过5个。
同一专利、商标,不能重复申报奖励。获得贵州省专利奖后申报中国
专利奖的除外。
+
黔东南州产业大招商政策
摘编
·24·
本省专利权人与省外专利权人共同获得中国专利奖的,按照本办法奖
励标准对本省专利权人给予奖励。
政策依据:贵州省知识产权局贵州省人力资源和社会保障厅贵州省财
政厅关于印发《贵州省知识产奖励办法》的通知(黔知发20213号)
政策三
对在我州建立院士工作站和博士后科研流动工作站,并组建有高层次
科技人才团队的单位,州级财政一次性给予10万元建站资助。
(一)积极支持知识产权创造及应用。
1.请并获受理的发明专利,州财政给予1000/资助;对
权的实用新型和外观设计专利州级财政给予300/件资助。
2.对中小微企业通过专利权质押方式获得银行贷款,按正常还贷期的
贷款年利息额50%予贴补助,年度内贴息额度最高不超20万元
息年限不超过2年。
(二)积极支持科技成果转化。
对新认定的科技和知识产权品牌服务机构,州级财政给予一次性20
元补助。对新认定的国家级科技服务机构,州级财政给予一次性10万元补
助。
政策依据:中共黔东南州办公室黔东南州人民政府办公室关于印发
《黔东南州促进科技创新加快科技进步奖励补助办法》的通知(黔东南党
办通〔201677号)
政策
对新认定的国家级科技企业孵化器,给予300万元补助。
采取省、市、区三级财政共同资助的方式对拟上市企业分阶段给予共
150万元的补助。
对获国家技财政拨款的重大科技项目给予国家拨款50%、最
+
黔东南州产业大招商政策
摘编
·25·
高不超过1000万元的补助。
支持大型科学仪器共享平台的建设,向公众开放成效显著的共享平台
每年给予10万元—30万元的运行维修服务补助。
政策依据:贵州省加强科技创新加快科技进步奖励补助办法实施细则
(暂行)(黔科通〔2012114号)
政策
()基础研究
基础研究计划项目包括一般项目和重点项目。一般项目资助经费不超
10万元,重点项目资助经费不超过30万元,重大基础研究“一事一议”。
()科技支撑项目
一般目资经费不低50元,不超100元;重点项目
事一议”,资助经费不超过500万元。产业关键共性技术研究目申报主
体为企业。
()科技成果应用及产业化项目。
适用于企业的,包括科技成果转化、创新券和科技金融等3类。
1.成果转化项目。一般项目不50万元,但不超100万元
重点项目“一事一议”,资助经费一般不超过1000万元。
2.创新券。创新券用于支持企业向高校、科研院所、新型研发机构购
买科技创新服务或技术成果。资助经费不超过50万元,其中对技术服务合
同、技术咨询合同的资助经费不超过20万元。
3.科技保险、科技贷款贴息对高新技术企业和科技部备案的科技型中
小企业研发活动的贷款和保险进行补助。
(1)科技险。对新研发和推广给予30%50%的保费助,
具体补助比例视险种、年度保费总额、科技保险补助资金总预算确定。每
个企业每年补助额度不超过15万元。
+
黔东南州产业大招商政策
摘编
·26·
(2)科技贷款贴息。按超过企支付同期银行贷款市场报价
(LPR)计算的利息额20给予业贴息,个企业每年贴息额度不
10万元。对已享受专利权质押贷款贴息补助的企业,不再享受该项贴息。
()科技重大专项
科技重大专项项目下设课题,每个课题资助一般不超过1000万元,承
担单位须提供1.5倍以上配套资金。首次拨付资助额的30%,通过中期评估
后拨付70%对省内资源不能解决的重大项目实行揭榜挂帅,采
向省内外发布技术榜单的方式,竞争择优遴选承担单位。参与科技重大专
项的省外单位的项目经费,从企业配套经费中支出。科技重大专项实施周
期一般为3年,最多不超过5年。
()科技平台及人才团队建设项目。
1.创新基地:
(1)重点实验室。企业类重点实验室建设项目资助经费不超过200万元。
(2)技术创新中心。资助经费不超过200万元。
2.创新创业载体:
(1)科技企业孵化器。资助经费不超过100万元。
(2)众创空间。资助经费不超过100万元。
(3)星创天地:资助经费不超过100万元。
3.高新技术企业。对认定的高新技术企业,一次性资助30万元。其中,
重新认定的高新技术企业须核实其研发投入。
4.其他:
(1)院士工作站:建设项目资助经费不超过50万元。
(2)技术转移机构。资助经费不超过30万元。
(3)科技创新人才团队。资助经费50万元。
(4)科普示范基地。项目资助经费不超过50万元。
+
黔东南州产业大招商政策
摘编
·27·
(5)国际科技合作基地。资助经费不超过50万元。
上述科技计划项目详细申报条件以年度项目申报通知或指南为准。
政策依据:省科技厅权责事项运行规定2023年修改版
政策
201711日起,经认定的技术先进型服务企业可享受下列税收优
惠:
1.减按15%的税率征收企业所得税;
2.企业发生的职工教育经费支出,不超过工资薪金总额8%的部分,准
予在计算应纳税所得额时扣除;超过部分,准予在以后纳税年度结转扣除。
政策依据:贵州省技术先进型服务企业认定管理办法(试行)(黔科通
2017178号)
政策
支持方向:符合国家和省对产业发展的方向,聚焦省委省政府围绕
“四新”推动“四化”高质量发展需求,以研制实用化、商品化的产品为
目标,支持重大科技成果在贵州落地转化和产业化。
支持方式:对每个根据有关标准可独立鉴定(定型)的系统/分系统/
键技术元素,可各给予不高1000万元的无偿资助。项目立项后按研制阶
段推进,各研阶段先拨付该阶段资助金额30%,阶段验收后拨付
70%尾款。
政策依据:《贵州省工业领域重大科技成果转化项目工作指引(试行)
(黔科通〔202137号)
政策
调整专利费减缴条件。《财政部国家发展改革委关印发<专利
收费减缴办法>的通知》(财税〔201678)第三条规定可以申请减缴专
利收费的专利请人和专利权人条件,由上年度月均收入低于3500(
+
黔东南州产业大招商政策
摘编
·28·
4.2万元)的个人,调整为上年度月均收入低5000(6万元)的个人;
由上年度企业应纳税所得额低于30万元的企业,调整为上年度企业应纳税
所得额低于100万元的企业。
政策依据:省财政厅省发展改革委关于转发《财政部国家发展改革委
关于减免部分行政事业性收费有关政策的通知》的通知(黔财非税〔2019
21号)
政策
强化政策扶持。落实国家和省委、省政府促进中小企业发展的各项政
策措施,对获得省级认定的“专精特新”中小企业,在申报省新型工业化
发展基金和专项资金相关项目时予以重点支持。每年在省“专精特新”中
小企业中择优支持一批贵州省专精特新“小巨人”企业,在省中小专项资
金中安排经费给予一次性奖励。
每年按要求选择部分省专精特新“小巨人”企业推荐为国家专精特新
“小巨人”企业,获国家专精特新“小巨人”企业认定的,在省中小专项
资金中安排经费给予一次性奖励,同时获省和国家专精特新“小巨人”企
业认定的按就高原则进行奖励。
政策依据:贵州省工业和信息化厅贵州省财政厅关于印发《贵州省中
小企业“专精特新”培育实施方案》的通知(黔工信中小〔202137号)
政策
1.奖补对象为贵州省内注册的规模以上工业企业,具有独立法人资格、
健全的财务管理机构和财务管理制度,诚信经营、依法纳税的。企业无财
政资金使用违纪、违规、违法行为,近三年未发生较大及以上安全事故或
者违法失信行为的。
2.按照“分类施策、综合扶持”的原则,对企业(不含集团公司)按有
研发活动和无研发活动两类进行奖补。
+
黔东南州产业大招商政策
摘编
·29·
(1)2020研发活动规上工业业:2022根据2021年相对于
2020年研发投入增量奖补2023年根据2021年、2022年分别相对于2020
研发投入各自增量的合计额奖补;2024年,续三年分
2020研发入各自增量的合计奖补。每年分别对100家企业进
补。分为档:研发投入量合计额1-10,每家奖500元;研发
入增量合计额11-100位,每家奖补100万元;其中年度研发投入增量超过1
亿元(),每家奖补1000万元,以上奖补同一年度同一企业按就高原则执
行。
(2)2020年无活动的规上工企业,以2020年后才的业企
业:2022年根据2021年研发投入进行奖补;2023年根据2021年、2022年研
发投入合计额奖补;2024年,按此前连续三年合计额奖补。每年分别对前
150家进行奖补。分为四档:年度研发经费总1-5位,每家奖励300万元
年度经费总量6-50,每家100万元;年研发经费总量51-100
位,每家奖励80万元;年度研发经费总量101-150位,每家奖励30万元。
3.综合施策鼓励规上工业企业研发活动。
(1)给予平台扶持:年度研发投入经费超过5亿元,或研发投入占比高
5%投入经费超过2亿元的企业,支持设立省级重点实验室、省级技
创新中心、院士工作站等创新平台,择优推荐申建国家创新平台。
(2)给予项目扶持:对连续两年研发经费超1亿元、且排名前10强的,
定向安排一个省级科技重大专项;对连续三年进入激励名单且研发投入占
比高于5%的企业,定向安排一个省级重大科技项目。
政策依据:《贵州省规上工业企业研发活动扶持计划实施办法(试行)
(黔科通〔202251号)
(六)税收支持政策
+
黔东南州产业大招商政策
摘编
·30·
政策一
对设在西部地区的鼓励类产业企业所得税优惠政策到期后继续执行。
赋予西部地区具备条件且有需求的海关特殊监管区域内企业增值税一般纳
税人资格。对西部地区鼓励类产业项目在投资总额内进口的自用设备,在
政策规定范围内免征关税。
政策依据:中共中央国务院关于新时代推进西部大开发形成新格局的
指导意见(中发〔201913号)
政策
科技型中小企业开展研发活动中实际发生的研发费用,未形成无形资
产计入当期损益的,在按规定据实扣除的基础上,202211日起,再
按照实际发生额的100%在税前加计扣除;形成无形资产的,自202211
日起,按照无形资产成本的200%在税前摊销。
政策依据:财政部税务总局科技部关于进一步提高科技型中小企业研
发费用税前加计扣除比例的公告(2022年第16号)
政策
一、增值税一般纳税人(以下称纳税人)发生增值税应税销售行为或者
进口货物原适16%率的,税率调13%原适10%税率的,
调整为9%
二、税人进农产品,原适用10%扣除率的扣除率调整为9%。纳
税人购进用于生产或者委托加工13%税率货物的农产品,按照10%的扣除率
计算进项税额。
三、原适用16%税率且出口退税率为16%的出口货物劳务,出口退税
率调整为13%原适10%率且出口退税率10%出口货物
应税行为,出口退税率调整为9%
四、适用13%税率的境外旅客购物离境退税物品,退税率为11%;适用
+
黔东南州产业大招商政策
摘编
·31·
9%税率的境外旅客购物离境退税物品,退税率为8%
五、自201941日起,《营业税改征增值税试点有关事项的规定》
(财税〔201636号印发)第一条第()项第1点、第二条第()项第1点停
止执行,纳税人取得不动产或不动产在建工程的进项税额不再分2年抵
扣。此前按照述规定尚未抵扣完毕的待抵扣进项税额,可自20194
税款所属期起从销项税额中抵扣。
六、纳税人购进国内旅客运输服务,其进项税额允许从销项税额中抵
扣。()纳税人未取得增值税专用发票的,暂按照以下规定确定进项税额:
1.取得增值税电子普通发票的,为发票上注明的税额;
2.取得注明旅客身份信息的航空运输电子客票行程单的,为按照下列
=( 票价+ 燃油附加
费)÷(1+9%)×9%
3.取得注明旅客身份信息的铁路车票的,为按照下列公式计算的进项
税额:铁路旅客运输进项税额=票面金额÷(1+9%)×9%
4.取得注明旅客身份信息的公路、水路等其他客票的,按照下列公式
计算进项税额:公路、水路等其他旅客运输进项税额= 票面金额
÷(1+3%)×3%
()《营业税改征增值税试点实施办法》(税〔201636号印发)
二十七条第()(财税
201636号印发)第二条第()项第5点中“购进的旅客运输服务、贷款
服务、餐饮服务、居民日常服务和娱乐服务”修改为“购进的贷款服务、
餐饮服务、居民日常服务和娱乐服务”。
政策依据:财政部税务总局海关总署关于深化增值税改革有关政策的
公告(2019年第39号)
+
黔东南州产业大招商政策
摘编
·32·
政策
202211日至20241231日,对小型微利企业年应纳税所得额
超过100万元但不超过300万元的部分,减按25%计入应纳税所得额,按20%
的税率缴纳企业所得税。
202311日至20241231日,对小型微利企业年应纳税所得额
不超过100元的部分,减25%入应税所得额,按20%的税率缴
业所得税。
政策依据:财政部税务总局关于进一步实施小微企业所得税优惠政策
的公告(2022年第13号)、财政部税务总局关于小微企业和个体工商户所
得税优惠政策的公告(2023年第6号)
政策
一、自202311日至20231231,对月销售额10元以(
本数)的增值税小规模纳税人,免征增值税。
二、自202311日至20231231日,增值税小规模纳税人适用3%
征收率的应税销售收入,减按1%征收率征收增值税;适用3%
征率的预缴增值税项目,减按1%预征率预缴增值税。
三、自202311日至20231231日,增值税加计抵减政策按照以
下规定执行:
()允许生产性服务业纳税人按照当期可抵扣进项税额加计5%抵减应
纳税额。生产性服务业纳税人,是指提供邮政服务、电信服务、现代服务、
生活服务取得的销售额占全部销售额的比重超过50%的纳税人。
()允许生活性服务业税人按当期可抵扣进项税额加10%抵减
应纳税额。生活性服务业纳税人,是指提供生活服务取得的销售额占全部
销售额的比重超过50%的纳税人。
()纳税人适用加计抵减政策的其他有关事项,按照《财政部税务总
+
黔东南州产业大招商政策
摘编
·33·
局海关总署关于深化增值税改有关政策的公告》(财政税务总局海
总署公告2019年第39)《财部税务总局关于明确生活性务业增值
税加计抵减政策的公告》(财政部税务总局公告2019年第87)等有关规定
执行。
政策依据:财政部税务总局关于明确增值税小规模纳税人减免增值税
等政策的公告(2023年第1号)
政策
企业开展研发活动中实际发生的研发费用,未形成无形资产计入当期
损益的,在按规定据实扣除的基础上,自202311日起,再按照实际发
生额的100%在税前加计扣除;形成无形资产的,2023l1日起,按照
无形资产成本的200%在税前摊销。
政策依据:财政部税务总局关于进一步完善研发费用税前加计扣除政
策的公告(2023年第7号)
政策
一、加大小微企业增值税期末留抵退税政策力度,将先进制造业按月
全额退还增值税增量留抵税额策范围扩大至符合条件的小微企业(含个
体工商户,下同),并一次性退还小微企业存量留抵税额。
()符合条件的小微企,可以20224月纳税申期起向主
务机关申请退还增量留抵税额。在20221231日前,退税条件按照第三
条规定执行。
()符合条件的微型企,可以20224月纳税申期起向主
务机关申请一次性退还存量留抵税额;符合条件的小型企业,可以自2022
5月纳税申报期起向主管税务机关申请一次性退还存量留抵税额。
二、加大“制造业”、“科学研究和技术服务业”、“电力、热力、
燃气及水生产和供应业”、“软件和信息技术服务业”、“生态保护和环
+
黔东南州产业大招商政策
摘编
·34·
境治理业”、“交通运输、仓储和邮政业”“批发和零售业”、“农、林、
宿业”服务
“教育”、“卫生和社会工作和“文化、体育和娱乐业”(以下称制
业等行)值税期末留抵退税政策力度,将先进制造业按月全额退还增
值税增量留抵税额政策范围扩至符合条件的制造业等行业企业(含个
工商户,下同),并一次性退还制造业等行业企业存量留抵税额。
()符合条件的制造业行业企,可以自20224纳税申报
向主管税务机关申请退还增量留抵税额。
()符合条件的制造业行业中企业,可以自20225纳税
期起向主管税务机关申请一次性退还存量留抵税额;符合条件的制造业等
行业大型企业可以20226纳税申报期起向主管税务机关申请一
性退还存量留抵税额。
三、适用政策纳税人需同时符合以下条件()纳税信用等A
级或者B级;
()申请退税前36个月未发生骗取留抵退税、骗取出口退税或虚开增
值税专用发票情形;
( ) 退 36
()201941日起未享受即征即退、先征后返(退)政策。
政策依据:财政部税务总局关于进一步加大增值税期末留抵退税政策
实施力度的公告(2022年第14号)、财政部税务总局关于扩大全额退还增
值税留抵税额政策行业范围的公告财政部税务总局公告(2022年第21号)
政策
202311日起20271231止,物流企业自有(包括自用
和出租)或承租的大宗商品仓储设施用地,减按所属土地等级适用额标
准的50%计征城镇土地使用税。
+
黔东南州产业大招商政策
摘编
·35·
财政部税务总局关于继续实施物流企业大宗商品仓储设施用地城镇土
地使用税优惠政策的公告
政策依据:财政部税务总局公告(2023年第5
政策
一、个体商户经营所得年应纳税所得不超100万元的分,
在现行优惠政策基础上,再减半征收个人所得税。个体工商户不区分征收
方式,均可享受。
二、个体工商户在预缴税款时即可享受,其年应纳税所得额暂按截至
本期申报所属期末的情况进行判断,并在年度汇算清缴时按年计算、多退
少补。若个体工商户从两处以上取得经营所得,需在办理年度汇总纳税申
报时,合并个体工商户经营所得年应纳税所得额,重新计算减免税额,多
退少补。
三、个体工商户按照以下方法计算减免税额:减免税额=(个体工商户
经营所得应纳税所得额不超100万元部分的应纳税额-其他政策减免税额
×个体工户经营所得应纳税所得额不超过100万元部分÷经所得应纳
税所得额)×(1-50%)
四、个体工商户需将按上述方法计算得出的减免税额填入对应经营所
栏次《个
表》。对于通过电子税务局申报的个体工商户,税务机关将提供该优惠政
策减免税额和报告表的预填服务。实行简易申报的定期定额个体工商户,
税务机关按照减免后的税额进行税款划缴。
五、本公告自202311日起施行,20241231日终止执行。
202311日至本公告发布前,个体工商户已经缴纳经营所得个人所
得税的,可自动抵减以后月份的税款,当年抵减不完的可在汇算清缴时办
理退税;也可直接申请退还应减免的税款。
+
黔东南州产业大招商政策
摘编
·36·
政策依据:国家税务总局关于落实支持个体工商户发展个人所得税优
惠政策有关事项的公告(国家税务总局公告<2023年第5>
(七)人才扶持政策
政策一
1.对引进并在我省服务一定年限的“两院”院士、国家最高科学技术
奖获得者,国家自然科学奖、技术发明奖、科学技术进步一等奖获得者,
以及长江学者、国家杰出青年科学基金获得者等高层次创新创业人才,根
据情分别100-500万元的科启动经费和创创业资金资助。对
每个获批的省级人才基地、高技能人才培训基地,给予50-200万元建设经
费;对每个获批的省级人才团队,给予50-100万元的项目经费资助;对于
被列入“两院”院士候选人才培养工程的人才及其团队,由省给予一次性
120万元经费支持。
2.实行“高层次人才服务绿卡”制度,向经认定的高层次创新创业人
才和急需紧缺特殊人才发放绿卡,持卡者在户籍、住房、经费资助、家属
就业、子女入学及保险、就医、职称评聘、出入境等方面,享受优惠政策
和便捷服务。
3.对引进并在我省服务一定年限的“两院”院士,国家“千人计划”
和“万人计划”入选者、长江学者、国家有突出贡献中青年专家、国家杰
出专业技术人才、国家杰出青年科学基金获得者和国家级重点学科、重点
实验室学术技带头人,具有学历学位的博士,分别提供100万元60
元、15万元的购房补贴。
4.对我省管理期内的省管专家,每月补贴1200元;对高级技师每月补
500元;对在企事业单位工作的具有学历学位的博士,每月补贴800元;
对在机关工作的具有学历学位的博士,每月补贴300元。
5.对在县(市、区)及以下工作的正高职称专家、具有学历学位的博
+
黔东南州产业大招商政策
摘编
·37·
士,每月分别补贴1000元。对在乡镇及以下工作的各类人才,每月按本人
基本工资的20%发放基层工作津贴。
6.对于获得国家科技进步奖奖励的,省给予同国家奖励额度相当的奖
励;对于新当选“两院”院士、入选国家“万人计划”和教育部“长江学
者奖励计划”、获得全国杰出专业技术人才、国家杰出青年科学基金者,
分别奖励10万元。对于贡献特别突出的,由省委、省政府授予“黔灵科技
贡献奖”等称号,并给予100万元的奖励。
政策依据:省委关于进一步实施科教兴黔战略大力加强人才队伍建设
的决定(黔党发〔201231号)
政策
本细则涉及发放对象包括六个类别:
第一类:国科学院院士、中国工程院士,国家最高学技术奖
得者。第二:家自然科奖、技术发明奖、科学技术进步奖一等奖获
得者前三位完成人;国际科技合作奖获得者,全国杰出专业技术人才、国
家杰出青年科学基金获得者;国家级人才计划入选者,教育部“长江学者”
奖励计划入选者、“国家百千万人才工程”国家级人选、国家有突出贡献
的中青年专家、科技部创新人才推进计划入选者、中宣部文化名家暨“四
个一批”人才;国家级重点学科、重点实验室、技术创新中心、工程研究
中心学术技术带头人;国医大师、全国名中医、国家卫生健康突出贡献中
青年专家;教育部“国培计划”中小学名师名校长领航工程入选者;中华
技能大奖获得者、世界技能大赛获奖者。
第三类:理期内的贵州省核心专家,“贵州杰出人才奖获得者。
第四类:管理期内的贵州省省管专家,全国技术能手。
第五类:企事业单位从事工艺加工、术改造、生产造、复杂
备管理等工作,具有一级技能等级证书或职业资格证书的高级技师;具有
+
黔东南州产业大招商政策
摘编
·38·
学历学位证书的博士。
第六类:由市()省级行业主管门推荐,经省委人才工作领
组办公室认定的其他高层次人才。
发放标准。
第一人才2万元津贴;第、第三类才每5000津贴
四类人才1200元津贴;第五人才,高级技师每500元津贴,
企事业单位工作的博士每月800元津贴,在行政单位工作的博士每月300
津贴。
政策依据:贵州省委人才工作领导小组关于印发《贵州省高层次人才
津贴发放实施细则》的通知(黔委人领发〔20212号)
政策
一、创业人才项目
1.住房保障。由创办企业所在地政府或园区管委会为创业人才及其团
队成员就近提供人才公寓,并收取较低的房屋租金,引进人才可一直入住
到离开贵州或在贵州购房或退休。创业人才在企业所在地购买商品房,且
未享受过购房地政府给予的人才住房补贴让利等政策的,企业所在地可结
合实际给予购房政策优惠。
2.场地保障。创办企业所在地政府或园区管委会根据企业需要为创业
人才及其创办企业提供办公场所,由地方财政给予一定的场租补贴,补贴
最高可达场租的70%,补贴期最高可达3年。
3.贴息支持。支持创业人才创办的企业申请银行贷款用于企业生产经
营,省级对不超过100万元的银行贷款部分给予贴息支持,贴息比例50%
贴息期最高可达3年。
4.贡献激励。设立贵州创业人才奖,省级对作出重要贡献的创业人才
给予最高250万元奖励。
+
黔东南州产业大招商政策
摘编
·39·
5.推荐申报国家计划项目。创业人才符合申报条件的,优先推荐申报
国家高层次人才特殊支持计划科技创业领军人才等国家级计划项目。
6.其他支持。鼓励政府投资基金按市场化方式跟投。组织创业指导机
构和创业导师为创业人才提供市场、融资、生产、管理等辅导服务。创业
人才作出突出贡献的,可发放人才服务卡,用于解决创业人才及团队成员
子女入学、医疗保障等方面的问题。
省内创业人才达到人才项目认定条件的,享受引进人才相关支持政策。
国内()500企业、省外上市公司、国家专精特新“小巨人企业到贵
州创建分公司和子公司,在人才认定、奖励、服务保障等方面按照“一事
一议”进行支持。
二、企业科技创新人才项目
1.住房保障。由企业所在地政府或园区管委会为引进人才及其团队成
员就近提供人才公寓,并收取较低的房屋租金,引进人才可一直入住到离
开贵州或在贵州购房或退休。引进人才在企业所在地购买商品房,且未享
受过购房地政府给予的人才住房补贴让利等政策的,企业所在地可结合实
际给予购房政策优惠。
2.人才“蓄水池”政策。企业按照《贵州省重点人才“蓄水池”管理
办法(试行)》引进的人才,按规定可享受相关政策支持。
3.才激。企业引进科技创新人才认3内,黔税前30
万元至36万元之间的,省级财政每年按税前年薪的4%进行奖励;在黔税前
年薪36万元(36万元)50万元之间的,省级财政每年按5%进行奖励;在
黔税前年薪50万元(50万元)80万元之间的,省级财政每年按6%进行奖
励;在黔税前年薪80万元(80万元)120万元之间的,省级财政每年按7%
进行奖励;在黔税前年薪120万元以上(120万元)的,省级财政每年按8%
进行奖励。
+
黔东南州产业大招商政策
摘编
·40·
4.贡献奖励。设立贵州企业科技创新人才奖,对作出重要贡献的科技
创新人才给予奖励。一是经济贡献奖励,引进人才研发成果使企业经营效
益显著提升,地方经济作出重大贡献的,省级给予最高100万元奖励
二是科研贡献奖励,对获得国家级、省()级科技奖、专利奖的,按其个
人所获奖金可给予1:1配套奖励或一定配套奖励。
5.服务政策。按照省级相关政策发放人才服务卡,给予医疗待遇、子
女入学、配偶安置、旅游服务等方面的优惠待遇。不符合发放省级人才服
务卡的,由企业所在地政府按规定为引进人才做好子女入学等方面的服务。
三、高技能人才项目
1.设立工作室。引进的“技能大师”“优秀技能人才”,用人单位可
结合实际设立以人才姓名命名的工作室。对“技能大师”“优秀技能人才”
分别按照我省国家级和省级技能大师工作室补助标准进行补助,优先支持
申报设立国家级、省级大师工作室,获批后不重复享受补助。
2.住房保障。用人单位、企业所在地县级政府或园区管委会向引进人
才提供人才公寓,并收取较低的房屋租金,引进人才可一直入住到离开贵
州或在贵州购房或退休。
3.才激。企业引进技能人才认定后3内,在黔税前年薪30万元
36万元之间的,省级财政每年按税前年薪的4%进行奖励;在黔税前年薪
36万元(36万元)50万元之间的,省级财政每年按5%进行奖励;在黔税
前年薪50万元(50万元)80万元之间的,省级财政每年按6%进行奖励;
在黔税前年80万元(80万元)120万元之间的,省级财政每年按7%
行奖励;在黔税前年薪120万元以上(120万元)的,省级财政每年按8%
行奖励。
4.贡献奖励。引进的“技能大师”“优秀技能人才”作出重要贡献的,
给予最高20万元奖励。
+
黔东南州产业大招商政策
摘编
·41·
5.服务政策。按规定条件向认定人才颁发省级人才服务卡,按政策给
予医疗服务、子女入学、配偶安置、旅游服务、金融服务等方面的优惠待
遇。
政策依据:关于优化整合贵州省百千万人才引进计划的指导意见(黔
党办发〔20231号)
政策
享受人才公寓政策的对象。
()持有我省省级“优才卡”的高层次人才;
()通过“一事一议”方式引的产业重点人(进的产业重点
才团队其他成员住房由用人单位保障,确有困难需申请租住省级人才公寓
的,由用人单位向省委人才工作领导小组办公室申请,可采取多人合租一
套人才公寓的方式解决)
()经省委人才工作领导小组办公室认定的重点领域、重点行业、重
点学科等各类发展急需高层次人才。
以上人才需全职在我省工作,或通过“柔性引进”方式在我省每年累
计工作6个月以上,且在贵阳市区(特指不含三县一市的区)无自有产
住房。
免费租住。
()符合第七条规定条件的人才可申请免费租住人才公寓,首次申请
租住期限原则上不超过5年。5年期满后,需继续租住的,根据人才的业绩
贡献情况,可申请不超过3年的续租期。
()人才公寓提供简装环境和基本生活保障,包含通水、通电、通气、
通网,配置床、沙发、衣柜等家具,以及电视、冰箱、洗衣机等家电,配
置标准由省机关事务管理局另行确定。人才可自行购置自身所需的其他生
活用具,退出时带走。
+
黔东南州产业大招商政策
摘编
·42·
()人才租住公寓后产生的物业、水、电、燃气、有线电视、网络等
相关费用,由租住人才自行承担。
人才公寓出售。
符合第七条规定条件,且未享受过我省高层次人才住房(购房)补贴,
在我省全职工作5年以上且内无自有产权住房,对我省经济社会发展作
出突出贡献的人才,经省委人才工作领导小组认定,可按不高于购置价格
向其出售一套人才公(售时市场价格低于购置价格,按照不高于
出售时市场价格向其出售)
人才公寓奖励。
符合第七条规定条件,且未享受过我省高层次人才住房(购房)补贴,
在我省全职工作8年以上且内无自有产权住房,对我省经济社会发展作
出重大贡献的人才,经省委人才工作领导小组认定,可奖励一套人才公寓。
我省奖励给高层次人才的人才公寓,视同省级人民政府颁发的科学、教育、
技术、文化、卫生、体育、环境保护等方面的奖励,享受免征个人所得税
优惠政策。
政策依据:贵州省委人才工作领导小组关于印发《贵州省省级人才公
寓管理办法(试行)》的通知(黔委人领发〔20213号)
政策
改进设站和培养方式。鼓励和支持中小型高科技企业特别是民营中小
型高科技企业设立工作站。对我省高校、科研院所、企业、事业单位、产
业园区建立流动站、工作站并开展相关工作,省级一次性给予设站单位建
站补助50万元,所需经费从省级应用技术研究与开发资金中列支。
完善博士后科研经费和生活资助经费投入机制。按照《贵州省博士后
管理工作实施办法(试行)》《贵州省博士后工作经费资助管理办法(试行)
有关规定,给予进站博士后研究人员连续两年生活资助经费补助,所需经
+
黔东南州产业大招商政策
摘编
·43·
费从全省高层次创新创业人才培养引进专项经费中列支。
政策依据:省人民政府办公厅关于改革完善博士后制度的实施意见
(黔府办发〔20186号)
政策
高层次留学人才创新创业项目择优资助经费,从贵州省“高层次创新
创业人才培养引进专项经费”中列支,每年不超过200万元。
按照分类资助原则对留学人员创新创业项目进行资助,其中重大项目
资助30万元、优秀项目资助20万元、启动项目资助10万元。对已通过其他
渠道获得省级财政资金支持的项目,原则上不再给予资助。
()重大项目:申报项目为申请人参与的国家科技重大专项、国家重
点研发计划等科技项目、国家自然科学基金委员会重点项目、国家重大技
术改造/创新项目,或者申请人主持的国家科技计划和国家自然科基金
委员会项目;或者投资总额大于500万以上的创业项目。
()秀项目:申报项目为申请人主持的省()级科技计项目(
省科学技术基金一般项目)、省级技术改造项目其他省级技术创新项
目;或者投资总额大于300万以上的创业项目。
()启动项目:申报项目为申请人主持的市()级以上并具有较好应
用开展前景的创新项目;或者投资总额大于100万以上的创业项目。
政策依据:省人力资源社会保障厅关于印发《贵州省高层次留学人才
创新创业项目优资助管理办(试行)的通(黔人社通〔2018271
号)
政策
就业困难人员社会保险补贴。
对招用就业困难人员并缴纳社会保险费的单位,以及通过公益性岗位
安置就业困难人员并缴纳社会保险费的单位,按其为就业困难人员实际缴
+
黔东南州产业大招商政策
摘编
·44·
纳的基本养老保险费、基本医疗保险费、失业保险费和工伤保险费给予补
贴,不包括就业困难人员个人应缴纳的基本养老保险费、基本医疗保险费
和失业保险费,以及单位和个人应缴纳的其他社会保险费。对就业困难人
员灵活就业后缴纳的社会保险费的,按不超过以全省上年度全口径城镇单
位就业人员平均工资100%为缴费基数缴费的2/3给予灵活就业人员社会保
险补贴。就业困难人员社会保补贴期限,除距法定退休年龄不足5
就业困难人员可延长至退休外,其余人员最长不超过3(以初次核定其享
受社会保险补贴时年龄为准)
高校毕业生社会保险补贴。
鼓励企业吸纳高校毕业生就业,小微企业、民营经济组织和社会组织
吸纳离校2年内未就业的高校毕业生就业并与其签订1年以上劳动合同和缴
纳社会保险费的,给予最1年的社会保险补贴。贴范围为基本养老保
险费、基本医疗保险费、失业保险费、生育保险费和工伤保险费单位缴纳
部分(不包括高校毕业生个人应缴纳部分),补贴期限为企业吸纳高校毕业
生就业当月起的12月,由人社部门会同财部门组织实施。对离2
内未就业的高校毕业生灵活就业后缴纳的社会保险费的,按不超过以全省
上年度全口径城镇单位就业人员平均工资100%为缴费基数缴费的2/3给予
灵活就业人员社会保险补贴,补贴期限最长不超过2年。
创业补贴。
重点用于扶持小微企业、民营经济组织和社会组织发展,补贴优秀创
业项目、劳动者自主创业、创业场所租赁费用等支出。
()小微企业、民营经济组织和社会组织每吸1名登记失业高校
毕业生就业并签订1以上劳动合同且缴纳社会保险费的,给予800元的一
次性补贴。
()鼓励举办各类创业创新大赛,对获奖的新技术、新成果、新工艺
+
黔东南州产业大招商政策
摘编
·45·
等优秀创业项目,采取以奖代、贷款贴息等方式,给予最高不超3
元的支持。
()自主创业补贴。对首次创办小微企业或从事个体经营,且所办企
业或个体工商户自工商登记注册之日起正常经营1年以上的离校2年内高校
毕业生、就业困难人员、农民工、复员退伍军人,按规定给予一次性5000
元创业补贴。
()创业场所租赁补贴。对租用符合规划、安全和环保要求的经营场
地创业,并且未享受场地租赁费用减免的高校毕业生、就业困难人员、农
民工、复员退伍军人给予每500元场租补贴,对实际月租金低于500元的,
据实补贴,补贴期限最长不超过3年。
就业见习补贴。
吸纳离校2内未业高校毕生和1624岁失业青年,艰苦远地
区、国家乡村振兴重点帮扶县扩大至离2内未就业的中职毕业生参
加就业见的单位给予就见习补贴。见习时间为312个月,最长不
过一年。见习期间,见习人员生活补助费不低于当地最低工资标准,其中
最低工资标准60%就业补助金中列支。见习期间,办理身意外伤
害与住院医疗业保险,保险费用从就业补助资金中按每300元的
进行补贴。
对见习期留用率达50%的见习单位,适当提高习补贴标准,
按最低工资标准80%进行补贴。对见习单位(基地)留用见习期满人员的,
1000/标准给予单位一次补助。将对见习期未满与见习人员签
劳动合同的,给予见习单位剩余期限见习补贴政策延续至2023年底。对见
习期满留用率50%以上的见习单位适当提高见习补贴标准,按
工资标准的80%进行补贴,对见习单位(基地)留用见习期满人员的按500
/人标准给予单位一次性补助。
+
黔东南州产业大招商政策
摘编
·46·
求职创业补贴。
对省内普通高等院校、中等职业学校、技工院校在毕业年度有就业创
业意愿并积极求职创业的就业困难应届毕业生,一次性给予每人1000元的
求职创业补贴。2023届就业困难高校毕业生求职创业补贴发放标准提高到
1500/人。补贴对象包括贵州城镇零就业家庭、享受最低生活保障
庭、脱贫家庭、享受特困人员救助供养待遇、在校期间申请并获得国家助
学贷款、父母双方(单方)持《残疾人证》且全部或部分丧失劳动能力或本
人持《残疾人证》、孤儿7类困难毕业生,以及省籍在黔就读享受城
乡居民最低生活保障家庭、在期间申请并获得国家助学贷2类困
毕业生。
高技能人才培养补助。
重点用于高技能人才培训基地建设和技能大师工作室建设。对国家级
高技能人才基地和技能大师工作室,从中央就业补助资金中按规定分别补
500万元和10万元,从省级就业补助资金中分别补助200万元和10万元;
对省级高技能才培训基地和技能大师工作室,省级分别补助100万元和
10万元。地方政府要对高技能人才培训基地和技能大师工作室建设给予专
项经费支持,所需资金从地方财政部门安排的就业补助资金中列支。鼓励
行业、企业对高技能人才培训基地和技能大师工作室建设给予经费支持。
技能人才奖励补助。
对通过技能大赛或全国评比获得全国技术能手、中华技能大奖获得者
分别给5元和10元奖励。参加世界技能大赛获得金、银、铜牌和
胜奖的选手,可分别给予每人不超过20万元、10万元、5万元2万元的奖
励。获得国家级一类竞赛各职(工种)一、二、三等奖的选手分别给予每
2万元1万元0.5元奖;获得国家级二类竞赛一等奖的选手给
每人1元奖励。对世界技大赛国家级、省级选拔集训基以外单位培
+
黔东南州产业大招商政策
摘编
·47·
训选手在国家队中依次晋级的,按照最终阶段给予所在单位2万元、3万元、
5元奖励。对每届世界技能大赛省级选拔集训基地项照主基地不
过每个50万元、辅基地不超过每个20万元的标准进行补助。
就业创业平台创建补助。
各地开展创业型城市、创业孵化示范基地、农民工创业示范园()
就业见习基地等创建工作,认定为国家级、省级创业型城市的,分别给予
500万元、200万元一次性补助;认定为国家级、省级创业孵化示范基地的,
分别给100万元、50元一次性补助;认定为省级农民工创业示范园的,
给予一次性补助50万元,认定为省级农民工创业示范点的,给予一次性补
5万元;认定为国家级、省级就业见习基地的,分别给予10万元、5万元
一次性补助;认定为国家级、省级充分就业(星级)社区的,分别给予10
元、5元一次性补助;各可参照省级创业示范基地、省级农民
示范园()、就业见习基地、充分就业(星级)社区等认定管理办法和补助
标准,自行制定当地认定管理办法及补助标准和范围,但补助不高于省的
标准,资金从同级就业补助资金中列支。
政策依据:贵州省财政厅贵州省人力资源和社会保障厅关于印发《贵
州省就业补助资金管理办法》的通知(黔财社〔2019119号)
政策
职业技能培训。支持企业规范开展企业职工岗前培训、转岗培训、在
岗技能提升培训,支持高危行业企业开展安全技能培训。按职业(工种)
不同,每名员工补贴1500元至4500元。
高技能人才培训成果。支持企业通过购买高技能人才培训成果方式大
力培养技师、高级技师,按照“谁支出培训成本,补贴谁”原则补贴企业
或企业职工,每名技师或高级技师补贴4000元至8000元。
企业新型学徒制培训。支持企业大力开展新型学徒制。支持企业和技
+
黔东南州产业大招商政策
摘编
·48·
工学校校企合作开展学徒制培训,按培养标准不同,每培养一名学徒补贴
企业4000元至6000元。
短平快培训。支持龙头企业、合作社、扶贫车间等开展短平快培训。
按照培训人数和培训天数的不同,每培养一名职工或社员补贴企业60元至
180元。
企业职工证书直补。企业职工证书直补,符合申领失业保险参保职工
技能提升补贴条件的企业职工,按照黔人社厅发201711号文件规定到
参保地失业保险经办机构申领技能提升补贴:职工取得初级(五级)职业资
格证书或职业技能等级证书的,补贴标准为1000元;职工取得中级(四级)
职业资格证书或职业技能等级证书的,补贴标准1500元;职工取得高级
(三级)职业资格证书或职业技能等级证书的,补贴标准为2000元。
政策依据:省人力资源社会保障厅省财政厅关于提高职业技能培训资
金效能高质量开展职业技能培训的通知(黔人社通〔202139号)
政策
推进劳务输出。
对新跨省务工且稳定就业3月及以上的贫人(含监帮扶对)
适当安排一次交通补助,最高不超过500元,具体补助标准由各地结
实际制定,补助资金按规定从衔接推进乡村振兴补助资金列支。人力资源
服务机构、劳务公司、劳务合作社、劳务经纪人等组织三类人员就业,协
助签订1年以上劳动合同并依法缴纳社会保险费满3个月及以上的,按照每
500元的标准给予一次性跟踪服务补贴。
促进稳定就业。
按规定落实失业保险稳岗返还、培训补贴等政策,引导支持优先留用
三类人员。对吸纳三类人员就业的农民合作社、种养大户、家庭农场、就
业帮扶车间、微企业等生产经营主体,按规定给予每人500元的吸纳
+
黔东南州产业大招商政策
摘编
·49·
业一次性补贴,落实社会保险补贴、创业担保贷款及贴息等政策。
发展就业帮扶车间等就业载体。
延续支持就业帮扶车间等各类就业载体的费用减免以及地方实施的各
项优惠政策。对吸纳三类人员就业数量多、成效好的就业帮扶基地和就业
帮扶车间,按规定分别给予3万元和1万元一次性奖补,认定为省级就业帮
扶示范基地的,给予10元一性补助,所需资金由所在县(市、区、特
)从就业补助资金列支。
加强返乡创业载体建设。
有条件的地方可根据入驻实体数量、孵化效果和带动就业成效给予农
民工创业园()创业孵化基地奖补。认定为省级、国家级创业孵化示范
基地的,分别50元、100万元一次性补助,认定省级农民工创
示范园、示范点的,分别给予50万元、5元一性补助。支持各地设立
一批特色鲜明、带动就业作用明显的非遗就业工坊。
精准实施技能提升。
实施劳动力职业技能提升工程,重点围绕三类人员和农村转移劳动力
等精准开展职业技能培训,所需资金按规定从职业技能提升行动专账资金、
衔接推进乡村振兴补助资金和就业补助资金中列支。落实每人每天40元的
培训生活费补贴,所需资金按规定从衔接推进乡村振兴补助资金和就业补
助资金中列支。继续实施“雨露计划”,按规定给予相应补助。扩大技工
院校招生和职业培训规模,支持脱贫户、农村低收入家庭“两后生”就读
技工院校,按规定享受国家免学费和奖助学金政策。
本政策执行期限截止20251231日,未明确的原有就业创业扶持政
策继续执行。
政策依据:省人力资源社会保障厅等六部门关于切实加强就业帮扶巩
固拓展脱贫攻坚成果助力乡村振兴的实施意见(黔人社发〔202111号)
+
黔东南州产业大招商政策
摘编
·50·
政策
支持新业态新职业企业培训技能人才。围绕“大数据”战略实施数字
技能培训,加强互联网、共享经济、人工智能等新业态新职业培训,按国
家职业标准和企业职工就业情况不同,每名培训职工补贴企业500元至
3000元。
政策依据:省人力资源社会保障厅省财政厅关于高质量做好2022年职
业技能培训和技工教育工作大力培养技能人才的通知(黔人社通〔2022
33号)
政策十一
针对退役军人实际控制的小微企业或个体工商户,线上模式可获得
0.5万元—300万元纯信用方式经营类贷款;符合建行抵质押、担保要求贷
款金额最高可达到1000万元。针对符合建行系统授信条件的退役军人,线
上模式可获得0.1万元—20万元纯信用方式个人消费类贷款。
政策依据:省退役军人事务厅建行贵州省分行关于印发《贵州省“退
役军人拥军贷”实施方案》的通知(黔退役军人通〔202123号)
政策十二
有创业意并符合政策规的退役军(主择业军干部、
部、自主就业退役士兵等)由退役军人事务部门审核荐。同时满足,
年龄在18周岁()以上,申请贷款时年龄与贷款期限之和最长不超过65
();品行良好,申请贷款时无逾期未还贷款、无不良信用记录,具有创
业经营能力,有一定还款来源等贷款条件。
单户贷款额度3000()起,最高不超过50万元()。超过50万元,
引入抵押、保证等担保方式,以其他信贷产品按需支持。
政策依据:省退役军人事务厅中国农业银行贵州省分行关于印发《贵
州省“退役军人创业e”实施意见》的通知(黔退役军人发〔20212号)
+
黔东南州产业大招商政策
摘编
·51·
(八)用电、物流政策
政策一
一、第三监管周期贵州电网各用户类别各电压等级输配电价( 含增值
税、对居民和农业用户的基期交叉补贴)生活农业生用电
执行现行目录销售电价政策。
贵州省电网销售价格
用电分类
不满 1 千伏
10 千伏
20 千伏
35 千伏
“一户一表”
用电户
第一档用电
0.4556
0.4456
0.4456
0.4456
第二档用电
0.5056
0.4956
0.4956
0.4956
第三档用电
0.7556
0.7456
0.7456
0.7456
合表用户、执行居民电价的
非居民用户
0.482
0.472
0.472
0.472
农业生产用电
0.4754
0.4654
0.4604
0.4554
其中:农业排灌用电
0.3254
0.3204
0.3179
0.3154
注:1.表所列价格,除农业生产用电中的农业排灌用电外,均含国家重大水利工程建设
基金0.1125分钱。
2.上表所列价格,除农业生产用电外,含大中型水库移民后期扶持资金0.42分钱
贵州省电网销售电价表
用电分类
电度电价(元/千瓦时)
容(需)量电价
最大需量(元/千瓦·月)
变压器容量
(元/千伏安·月)
不满
1 千伏
110
20
千伏
35
千伏
110
千伏
220
110
20
千伏
35
千伏
110
千伏
220
千伏
110
20
千伏
35
千伏
110
千伏
220
千伏
工商业
用电
单一制
0.2186
0.2062
0.1805
两部制
0.128
0.1143
0.077
0.0529
35
33
31
30
22
21
20
19
注:1.中各电价含增值税、对居民和农业用户的基期交叉补贴,不含政府性基金及附加、
上网环节线损费用
2.原包含在输配电价内的上网环节线损费用在输配电价外单列,上网环节综合线损率
+
黔东南州产业大招商政策
摘编
·52·
4.73%
3.工商业用户执行上述输配电价表,居民生活、农业生产用电继续执行现行目录销售
电价政策。
4.政府性基金及附加包括:国家市大水利工程建设基金每千瓦时01125分钱,大中利水
库移民后期扶持资金每瓦时0.47分钱,可再生能源电价附加千瓦1.9钱,地方水库
民后期扶持资金每千瓦0.05分钱。
5.网对网送电省外购电用户承担的输电价格为:500 千伏( 含黔电送粤、兴义2
号机送广西)每千0.03(税、含线损,下同)220伏每千瓦0.0718元,110伏每
千瓦时0.0966元,35千伏每千瓦时0.1332元。10千伏每千瓦时0.1469元。
二、执行商业用电价格用户(指除执行居民生活农业生
价格以外的用户,以下简称工商业用户),用电容量在100千伏安及以下的,
执行单一制电价;100千伏安至315千伏安之间的,可选择执行单一制或两
部制电价,单制和两部制变更周期不得少于三个月315千伏安及
的,执行两部制电价,现执行单一制电价的用户可选择执行单一制或两部
制电价。上述可选择执行单一制或两部制电价的工商业用户,在每月20
前自行向电网企业申请办理,并自申请后的下一计费周期执行。
两部制工商业用户可选择执行容量电价或需量电价计费方式,按季度
进行变更,用户须提前15个工作日向电网企业申请变更下一季度的基本电
费计费方式。选择执行需量电价计费方式的两部制用户,每月每千伏安用
电量达到260千瓦时及以上的,当月需量电价按本通知核定标90%执行。
每月每千伏安用电量为用户所属全部计量点当月总用电量除以合同变压器
容量。
三、除居民生活、农业生产用电外,工商业用户用电价格通过市场化
形成,用电价格由上网电价、上网环节线损费用、输配电价、系统运行费
用、政府性基金及附加组成。
上网环节线损费用按实际购电上网电价和综合线损率计算,所有电压
等级用户量均按综合线4.73%行。在电力市场不具备户直接采
+
黔东南州产业大招商政策
摘编
·53·
购线损电量条件时,继续暂由电网企业代理采购线损电量,代理采购损益
按月向全体工商业用户分摊或分享。
系统运行费用包括辅助服务费用、保障居民农业用电价格稳定新增损
益等相关损益、抽水蓄能容量电费等。
对大气污染物排放浓度基本符合燃气机组排放限制要求,并取得我委
超低排放电价政策文件的燃煤发电机组,其上网电量继续由电网企业按规
定标准单独结算超低排放电费给煤电企业,按月由全体工商业用户分摊。
四、因居民、农业用电量增长及优先发电计划放开等因素,电网企业
每月保障居民、农业用电发生的实际损益,与当月基准电价交叉补贴总额
的差额,作为电价交叉补贴新增损益,按月由全体工商业用户分摊或分享。
五、电网企业要严格执行本通知核定的输配电价,统筹推进电网均衡
发展。全面做好营销、计量等信息系统的适应性改造,加强政策宣传和客
户沟通服务,引导用户合理配置容量,提升用电负荷率;对各电压等级的
资产、费用、收入、输配售电量、负荷、用户报装容量、线损率、投资计
划完成进度等与输配电价相关基础数据进行统计归集,每5底前
我委及国家发展改革委。
六、贵州电力交易中心要严格按本通知要求,研究完善市场交易规则,
做好电力交易系统的适应性改造,加强对市场主体的政策宣传和服务。
七、各级价格主管部门要按照本通知要求,与有关部门加强配合,精
心组织,周密安排,加强监管,确保输配电价平稳执行,确保本通知要求
的各项政策措施得到全面落实执行中发现的问题,请及时报告我(
格管理处)
电网企业代理购电机制、电力市场交易规则等要与本通知做好有效衔
接。本通知自202361日起执行,原有政策规定与本通知不符的,以本
通知规定为准。
+
黔东南州产业大招商政策
摘编
·54·
政策依据:省发展改革委关于第三监管周期贵州电网输配电价和销售
电价有关事项的通知(黔发改价格〔2023359号)
政策二
一、降低非居民用气价格
由省级定价的贵阳市城区及与其共用同一配气管网区域非居民用气价
(最高指导价,下同)3.96/立方米下调为3.72/立方米。
属于市县级定价的,各地应在确保将低价气源优先保障居民生活用气
基础上,抓紧测算非居民用气气源采购成本(测算时应考虑4月份应降未降
金额)并根据当地天然气下游价格联动机制,尽快组织施非居民用
气降价工作。
二、执行时间
本个联动周期执行时间为202351日至1031日。
三、有关工作要求
()精心做好组织实施。各地要认真组织、周密安排,确保非居民用
气降价政策精准落地,降价红充分释放。降价文件于531日前抄送我
委,并附气源采购成本测算报告。
()压实履约保供责任。各供气企业和燃气企业要切实加强供需衔接,
全面履行天然气购销合同,按双方签订的月度合同气量足额履约,持续做
好天然气供应保障工作。
()严格落实价格政策。各燃气企业要通过营业大厅、门户网站、微
信公众号等及时公示调整后的非居民用气价格,让广大用户知晓降价信息;
要切实强化气源采购成本约束,严禁通过不当关联交易推高采购成本;要
认真做好气源来源和采购成本的台账记录、收集和汇总,并按照价格主管
部门要求按时、准确报送,确保内容完整、数据真实。各供气企业需自觉
配合做好有关信息、数据的复核工作。我委将适时了解各地气源采购成本
监测情况。
+
黔东南州产业大招商政策
摘编
·55·
政策依据:省发展改革委关于降低非居民用气价格及有关事项的通知
(黔发改价格〔2023364号)
政策
对新晋国家1A级至3A级物流企业分别给予一次性奖励10万元、新晋国
4A级物流企业给予一次性奖50万元、新晋国家5A级物流企业给予一次
性奖励100万元。
政策依据省发展改革委8关于印发《贵州省进一步降物流
成本若干政策措施》的通知(黔发改经贸〔2021249号)
政策
对新晋国家1A级至3A级物流企业分别给予一次性奖励10万元、新晋国
4A级物流企业给予一次性奖50万元、新晋国家5A级物流企业给予一次
性奖励100万元。奖补资金通过省级现代服务业专项资金安排。
已获得较低等级奖励的,在获得较高等级奖励时,给予补足相应的奖
励差额。
革委《贵A级物
流企业奖补方案(试行)》的通知(黔发改经贸〔2022428号)
(一)大数据信息产业
政策一
1.支持龙头企业打造智能工厂、灯塔工厂。支持工业企业按照智能制
造国家标准打造数字产线、无人车间、智能工厂、灯塔工厂,对符合条件
30%、最高不超过1000
三、产业类政策
+
黔东南州产业大招商政策
摘编
·56·
《智能制造能力成熟度模型》(GB/T39116-2020)3级、4级、5级的工业企
业,分别200元、500万元800万元的奖励;对获评世经济
“灯塔工厂”的工业企业,给予1000万元的奖励。
2.支持中小企业普及应用数字技术。重点支持“专精特新”中小企业
开展生产管理、营销服务等环节数字化改造,对符合条件的项目,给予不
超过总投资30%、最高不超过500万元的补助。
3.支持工业企业上云用云。通过“云使用券”补助方式支持工业企业
上云用云,对购买计算资源、储存资源、安全防护等基础设施类“云服务
的,补助比例超过购买费用40%对购买数据库、物联网软件开发
等平台系统类,以及研发设计、生产管理、财务管理等业务应用类“云服
务”,补助比例不超过购买费用60%单个工业企业当年计补
额不超过5万元。
4.支持智慧开发区建设。支持开发区建设5G基础设施,打造工业互联
网公共服平台,推动工企业打造“5G+工业互联”典型应用场
对符合条件的慧开发区建设项目,给予不超过总投10%、最高不
1000的补。对获批国家工业联网示范区、“5G+工业互网”
合应用先导区开发区,给予500万元的奖励。支持智慧开发建设项目
申报新型工业化基金,积极争取地方政府专项债券。
5.支持标准起草编制和推广应用。对牵头起草编制数字化转型领域国
际、国家、团体标准的企业,别给100万元、50元、30万元的奖励
对参与起草编制数字化转型领域国际、国家、团体标准的企业,分别给予
50万元、30万元、10万元的奖励。对首次通过《信息化和工业化融合管理
体系要求》(GB/T23001-2017)升级版贯标评定的工业企业,给予20万元的
奖励。对首次通过《信息安全管理体系标准》(ISO27001)认证的企业,给
10
+
黔东南州产业大招商政策
摘编
·57·
(GB/T36073-2018)证并达到2级、3级、4级及的企业,分别20
万元、30万元、50万元的奖励。
6.支持数字化创新平台建设。支持矿产、轻工、新材料、航天航空等
产业领域建设国家级、行业级工业互联网平台,支持建设数字化转型促进
中心、工业互联网应用推广中心等创新平台,对符合条件的项目,给予不
超过总投资30%、最高不超过500万元的补助;对获批国家级创新平台项目
资金支持的单,给500万元的奖励。支持企业开展数字经济融合
应用,对符合条件的项目,给予不超过总投资30%、最高不超过500万元的
补助。
7.支持数字基础设施建设。支持5G网络规模化部署,对完成年度5G
站建设任务的运营商,按照实际建设并验收合格的基站数量,以每个基站
0.2万元的标准给予一次性事后补助;鼓励各州对本地区内的新5G
站配套给予补助。支持建设数字丝绸之路国际数据港,对使用国际数据专
用通道的企业,每年给予使用成本100%的补助,单个企业累计补助金额不
超过20万元。支持5G等数字技术创新应用,对符合条件的项目,给予最高
不超过50万元的补助。对5G站、数据中心等新型基础设施建设项目,在
用能方面按照有关规定予以支持。
8.支持打造国家级试点示范。对获批数字化转型领域国家专项资金支
持的项目,给予牵头企业不超过国家奖补资金30%、最高不超过500万元的
奖励。对获批数字化转型领域国家级试点示范的企业,给予20万元的奖励。
9.通过基金支持重大项目建设。省新型工业化基金、新动能产业发展
基金与财政专项资金联动,对亿元以上数字化改造、技术改造同步推进的
项目进行重点支持。
政策依据:省工业和信息化厅省财政厅省发展改革委省能源局省大数
据局关于印发支持工业领域数字化转型的若干政策措施的通知(黔工信信
+
黔东南州产业大招商政策
摘编
·58·
发〔202225号)
政策二
子基金主要投资贵州省内高成长性、具有良好发展潜力的大数据企业,
重点支持数字产业化、产业数字化、数字经济与实体经济产业融合、云计
算、人工智能、区块链等领域。
主要方向为:
(1)引领性、应用性、支撑性大数据项目。
(2)具有良好发展前景的种子期、初创期、成长期大数据企业。
(3)贵州省数字经济发展要求的重点大数据企业。
(4)省大数据局确定的其他投资。
原则上省级财政出资部分投资省内企业,基金在贵州省境内的投资额
不得低于实际资额51%,对大数据相关行业的投资比例不低于基
模的60%。被投资的大数据企业应符合以下条件:
(1)符合国家相关法律规及产策规定,符合本办法规定的
投资方向。
(2)企业股权清晰,财务管理规范。
(3)企业银行资信和财状况良无行政主管机关或司法机关
处罚的不良记录。
(4)省大数据局确定的其他条件。
政策依据:省大数据局关于印发《贵州省大数据产业基金管理办法》
(2021修订)《贵州省大数据产基金效考评管理办法》(2021修订
)的通知(黔数〔20217号)
政策
符合条件的上云企业可随时在线申领云使用券。上云企业领用云使用
券不能超过两次,初领云使用券的最高补贴额度为5元,再次申
+
黔东南州产业大招商政策
摘编
·59·
时,最高补贴额度为3万元上云企业提交云使用券申领申请,经系统运
营方审通过,获得当年云使用券使用额度。
上云企业可在线选择云服务商提供的产品进行购买,确定是否使用云
使用券,其中础设施层云服务的最高支持比例40%,平台系统层
务、业务应用云服务的最高支持比例60%优先“万企融大行
动带动的实体经济企业倾斜。购买时需阅读并确认《贵州省上云企业上云
服务交易协议》。
政策依据:省大数据局关于印发《贵州省“企业上云”云使用券管理
实施细则(2020年修订版)》的通知(黔数〔202020号)
政策
1.经评估确定的贵州省软件名园,授予“贵州省软件名园”称号,符
合培育条件的列为贵州省软件名园培育园区。
2.省大数据局视年度资金预算情况给予省软件名园运营主体一定资金
奖励。优先支持软件名园和培育园区运营主体发行地方政府债,省级大数
体、业项
()对落户在当地的省软件名园和培育园区给予政策、资金支持。
3.用好“百企引领”“万企融合”等抓手,在省级和国家级试点示范
申报中,向省软件名园和培育园区内企业项目给予倾斜。
4.支持省软件名园和培育园区企业入选贵州上市挂牌后备企业资源库,
优先助推相关企业上市。
5.支持省软件名园和培育园区纳入全国一体化大数据中心体系,推动
公共数据向园区软件企业互联互通、共享开放。加快5G网络在园区内覆盖。
支持园区公共服务平台建设。
6.省大数据局“点对点”帮助省软件名园和培育园区开展招商引资、
政策培训、供需对接、人才培养等,支持园区企业技术转移、成果转化、
+
黔东南州产业大招商政策
摘编
·60·
场景应用及宣传推广。
政策依据:省大数据发展管理局关于印发《贵州省软件名园评估规范
(试行)》的通知(黔数〔202120号)
(二)大健康医药产业
政策一
对认定为新技术企业的育企业,减按15%税率征收企业得税。
对符合西部大发税收优惠条件的体育企业减按15%的优惠税率征收企
所得税。
政策依据:省政府办公厅关于加快发展健身休闲产业的实施意见(黔
府办发〔20177号)
政策二
1.省内企业成功并购省外企业并将工厂搬迁到我省的,省级一次性奖
200万元,项目所在地市、县政府奖励300万元;省内优强企业并购省内
企业的,省级一次性奖励100万元,项目所在地市、县政府奖励200万元;
通过国家中药再评价的大品种省级一次性奖100万元,企业所在地市、
县政府奖200万元;进入中国药典(2015年版或增补本)的种,
一次性奖励50元。取得国家新药证书的品种,省级一次奖励100万元,
企业所在地市县政府奖200万元;对首仿专利到期的原研转移
省生产且获得新版GMP认证的,每个品种省级一次性奖励50-80万元;并购、
激活省内“休眠”、“半休眠”品种且销售收入达到2000万元的,省级一
次性奖励50万元。
2.企业外包研发成果在我省投产后年销售收入达3000万元的,企业
所在地县级政府给予一次性50万元奖励;对投资超过5000万元的专业化公
共研发技术服务平台,项目所在地市级政府认定后给予投资额5%的一次性
奖励,最高不超过1000万元。
+
黔东南州产业大招商政策
摘编
·61·
3.资额3000万美元或5亿以上项目由省级优先保障建设用
计划指标,实行“点供”。在我省新投资注册的医药企业,投资额在1000
万元(含1000万元)以上的,从企业投产之日3年内,企业交纳的增
值税地方分成部分,由企业所在地市、县政府全额补助给企业,用于支持
企业发展。
4.项目投产3年以上、5年以内的,以减半方式给予扶持。经认定为高
新技术企业的减按15%率征企业所得税。对企业引进先技术和设
备的,按有关规定享受税收优政策;年销售收入5亿元上且增幅超
30%的成长型企业,由所在地县级政府对企业领导班子给予50万元奖励。
5.国内外行业领军人才在我省新办医药企业投产后年销售收入达到
2000万元的,企业所在地县级政府给予个人一次性20万元奖励。
政策依据:贵州省关于加快推进新医药产业发展的指导意见(黔府发
201424号)
政策
养老机构按照国家和省有关规定享受税收优惠和行政事业性收费减免
政策。养老机构用电、用水执行居民生活用电、用水价格,用气价格按照
居民生活用气、非居民用气价的较低者执行。安装固定电话、有线(
)电视、宽带互联网,按照国家和省有关规定减免收费。
政策依据:贵州省养老服务条例 贵州省人民代表大会常务委员会大
(202115)
政策
一、压缩审评审批工作时限。
注册人申请第二类医疗器械首次注册、变更注册、延续注册,提交的
申请资料完整,无需补证的,办理时限压缩至42个工作日。
+
黔东南州产业大招商政策
摘编
·62·
二、优化审评工作程序。
全面加快注册申报进程、提高注册审评效率。将设计成熟、产品技术
要求明晰的产品采取内部审评模式;对省内未申请过、无审评指导原则、
产品结构原理及适用范围复杂、需进行临床试验及其他具有一定安全风险
的产品(如有源类医疗器械、体外诊断试剂等产品),需聘请外部专家参与
审评的,建立与外聘专家先期沟通协调机制,技术审评压缩至30个工作日
内完成。
三、优化现场检查工作程序。
()首次注册时通过质量管理体系核查并取得注册证的,两年内在原
生产地址再次申请相同生产范(《医疗器械分类目录)级产品类)
产品注册,或者申请首次注册产品与企业已取得注册证的产品具有相同生
产条件、生产工艺的,可免于现场核查或简化现场核查项目,重点关注产
品追溯信息及生产检验能力。
()除“属于新开办企业首次注册的产品、新增生产范围的产品、提
供注册自检报告的产品、委托生产的产品”之外,医疗器械注册质量管理
体系核查通过资料审查方式开展,必要时开展现场体系考核。
()注册人同时申报多个产品首次注册时,需开展医疗器械注册质量
管理体系现场核查并在同一生产地址的,并联为一次现场核查。
四、开展套餐服务。
注册人申请第二类医疗器械产品首次注册时,在原生产地址申请医疗
器械生产许可或者增加生产范围事项的,及注册人申请第二类医疗器械产
品延续注册时,申请此产品变更注册的,试行同步申请,并联审批。
五、建立研审联动沟通服务机制。
注册人在产品研发过程中,建立与注册人沟通协调和联络员工作机制,
通过提前介入、专人负责、现场指导、全程跟踪等方式给予注册人技术帮
+
黔东南州产业大招商政策
摘编
·63·
扶,在产品研发、注册申报、现场检查等方面点对点帮助企业,减少补正
工作,提高注册审评效率。
六、支持外省市优质医疗器械产品落地贵州。
已在外省市取得产品注册证医疗器械生产企业,携已注册产品迁入本
省生产的,在我省申请此类产品首次注册时,除产品检验报告、生物相容
性等研究性试验资料外,可使用原产品注册时的有关申报材料。
七、支持第三方检验检测机构发展。
支持第三方检验检测机构能力建设和发展,强化与第三方检验检测机
构的合作,与省医疗器械检测中心检验能力形成互补,扩大我省医疗器械
检验检测范围覆盖面,提高检验效率。
政策依据:省药品监管局关于印发《关于优化贵州省第二类医疗器械
审评审批的若干措施》的通知(黔药监发〔202212号)
政策
养老托育服务机构可按规定享受《关于养老、托育、家政等社区家庭
服务业税费优惠政策的公告》(财政部税务总局发改革委民政部商务部
卫生健康委公告2019年第76)规定的税费优惠政策。
养老托育行业纳税人可按规定享受按月全额退还增量留抵税额、一次
性全额退还存量留抵税额的留抵退税政策。
政策依据:国家发展改革委等部门印发《养老托育服务业纾困扶持若
干政策措施》的通知(发改财金〔20221356号)
(三)新型建材产业
政策一
对投资额5亿元以上的项目,由省级直接安排下达年度划指,各
委会保障
“点供”。支持企业以矿山资源、荒料、产品、订单等进行动产或不动产
+
黔东南州产业大招商政策
摘编
·64·
抵押、股权质押、仓单质押、商标质押,申请银行贷款。
政策依据:省政府办公厅关于加快推进新型建筑建材业发展的意见
(黔府办发〔201635号)
政策二
1.建立矿业权登记制度。将矿业权审批登记制改革为矿业权出让合同
约定登记制,矿业权人与权限内自然资源主管部门签订矿业权出让合同,
按规定缴纳(处置)矿业权出让收益(价款)后,即可登记颁发勘查许可
证或采矿许可证。
2.取消划定矿区范围审批事项。矿业权招拍挂出让、协议出让、探矿
权转采矿权、扩大矿区范围等,不再受理、审批划定矿区范围事项。矿区
范围在签订的矿业权出让合同中约定。
3.取消单独申请采矿权变更生产规模登记事项。矿山企业按矿山资源
储量规模与规划生产规模相匹配、不低于矿种最低准入开采规模的原则确
定生产规模,最终以相关行业主管部门批复的设计(核准)规模为准。
4.绿
DB52T1433-2019固体矿产绿色勘查技术规范》要求编制的矿产资源绿色
勘查实施方案,纳入矿业权人勘查开采信息公示实地核查内容。
政策依据:黔东南州自然资源局关于印发贯彻落实《贵州省自然资源
厅关于深入推进矿产资源管理改革若干事项的意见(试行)》的实施意见
的通知(黔东南自然资通〔202029号)
政策三
重点支持石材产业重大项目、生产基地、交易市场、会展平台和检验
检测中心建设。
安顺市、铜仁市、黔西南自治州等重点石材产区每年要分别配套不低
2000万元的财政资金,支持石材产业发展;贵州正大力发展石材产业,
+
黔东南州产业大招商政策
摘编
·65·
在支持项目建设方面,优先保重点项目建设用地需求,对投资额3亿元
以上项目实行“点供”;支持企业以拥有的矿山资源、荒料、产品等进行
动产抵押、股权质押、仓单质押、订单质押、商标权质押,申请银行贷款。
依托商会信用,建立担保机制。
政策依据:省政府办公厅关于加快石材产业发展的意见(黔府办发
201523
(四)生态特色食品加工产业
政策一
1.投资额3千万美元或5亿元人民币以上的项目,在建设用地计划指标
上予以优先保障。开发国有荒山、荒地、荒滩从事天然饮用水生产的,土
地使用权按规定程序确定给开发单位或个人长期使用,使用期限不超过50
年。以招拍挂方式取得的矿业权,首次缴纳矿业权出让收益不低于一定比
例,其余部分在采矿权有效期内分年度缴纳。
2.对涉及天然饮用水企业的行政事业性收费,收费标准有上下限幅度
的,一律按下限标准执行。对销售收入达到5亿元、10亿元以上的企业
由省工业和信息化发展专项资金对企业分别给予一次性30万元、50万元奖
励。国内外行业领军人才在我省新办饮用水企业,投产后增加值达到2000
万元以上的,由省工业和信息化发展专项资金对个人给予一次性20万元奖
励。
政策依据:省政府办公厅关于印发《贵州省促进天然饮用水产业加快
发展的意见》的通知(黔府办函〔201772号)
政策二
1.支持对象为从江县百香果产业、麻江县蓝莓产业上从事水果相关生
产、加工、销售等经营主体,州省水果行业协会会员单位。包括企业、合
作社、家庭农场、种植大户等。
+
黔东南州产业大招商政策
摘编
·66·
2.贷款额度原则上在10-300万元()之间,龙头企业贷款额度最高不
超过1000万元。
3.单笔贷款利率原则在5%以内;贷款金额在10-300万元()以下的
项目,担费率不超0.8%贷款金额300元以上的项目担保
不超过1%
政策依据:省水果产业发展领导小组办公室关于进一步优化水果产业
金融支农服务方案的通知
(五)农业特色产业
政策一
税务部门对金融机构提供给“三变”农户单笔且该农户贷款余额总额
10万元(含本数)以下的贷款利息收入,免征增值税。同时,上述利息
收入在计算应税所得额时,90%入收入总额;对符合条的担保机
构为“三变”改革经营主体提供信用担保或再担保业务取得的收入(不含
信用评级、咨询、培训等收入3年内免征增值税。采取贷款贴息、不良
贷款补偿、担保损失补偿、保险损失补偿等方式,对“三变”改革经营主
体给予贷款风险补偿。
政策依据:省政府办公厅关于印发《金融支持我省“三变”改革十条
政策措施》的通知(黔府办函〔2016176号)
政策二
1.台湾同胞和台资企业通过流转取得的农村土地经营权受国家法律保
护,在土地经营权流转合同到期后同等条件下可优先继续租赁。
2.台湾同胞和台资企业通过流转取得的林地经营权受法律保护,可依
法进行登记、办理权属证书和流转,并按照国家和地方政策进行经营管理。
3.台湾同胞和台资企业从事农业种植养殖配建的与生产农产品直接关
联的烘干晾晒、分拣包装、保鲜存储、粪污处置、检验检疫,以及为生产
+
黔东南州产业大招商政策
摘编
·67·
服务的看护房、农资农机具存放场所等设施用地纳入设施农业用地管理,
可依法依规使用一般耕地。
4.台湾同胞和台资企业从事农业生产经营可申请农业保险保费补贴,
同等享受农业信贷担保和创业担保贷款贴息支持。鼓励有条件的地区提供
贷款贴息补助,重点支持农业生产基地建设、农产品加工设施、农业投入
品采购及农产品收购等生产经营贷款。
5.台资农业企业可发行公司信用类债券,进行直接融资。鼓励商业银
行创新信用评价模式,提高台湾同胞和台资农业企业信用贷款比重,根据
台湾同胞和台资农业企业融资需求特点设计个性化融资产品。
6.符合条件的台湾同胞和台资企业可依法依规申请相关涉农补助资金
支持。
7.台湾同胞和台资企业在实施农机深松整地和免()耕播种的项目地
区开展作业,可按规定同等申请作业补助;依照有关规定报废危及人身财
产安全的农业机械,可同等申请补贴。
8.台湾同胞和台资企业可参与城乡冷链物流基础设施建设和批发市场
等项目建设运营,参与产地分拣包装、冷藏保鲜、仓储运输、初加工等设
施建设,对其在农村建设的保鲜仓储设施用电实行农业生产用电价格。
9.支持台湾同胞和台资企业参与重型农机、渔业装备、智慧农业、绿
色投入品等领域的研发创新、成果转化与技术服务。
10.鼓励台资企业申请物新品。台湾同胞和台资企业依法
畜牧水产养殖业、苗种场等,同等享受农业支持政策和优惠措施;在自由
贸易试验区范围内可投资水产品捕捞行业。
11.台湾同胞和台资企可依法从事林草重点生态工程建设
木良种培育、造林种草、防沙治沙、经济林生产经营、林草种苗生产经营,
可同等参与林草业重点龙头企业推荐、国家林业产业示范园区申报。
+
黔东南州产业大招商政策
摘编
·68·
12.台资企业可按规定农垦企展合作,促进资源资产整合
业优化升级。
13.台湾同胞在大陆从农渔业,可申请接受创业培训,扎
村、服务农业、带动农民的纳入农村创新创业带头人培育行动范围。
14.从事水利领域设备产的台业可将符合条件的产品和技
报纳入水利先进实用技术重点推广指导目录。
15.台湾同胞和台资企可同等茶叶、水果、花卉等农林产
国家标准起草工作,共同促进两岸标准互联互通。
政策依据:国务院台办、农业农村部、国家林草局等部门《关于支持
台湾同胞台资企业在大陆农业林业领域发展的若干措施》
(六)特色林业
政策一
()完善资源管理政策。
允许利用二级国家公益林和地方公益林适当发展林下经济。鼓励利用
退耕还林政策实施林相改造等方式,建设林下经济基地。适度利用自然保
护地核心区以外的天然林发展生态旅游。科学调整抚育间伐强度,优先安
排采伐指标,依法简化采伐审批手续。
()放活林地等土地流转政策。
推进集体林地所有权、承包权、经营权“三权”分置。进一步放活集
体林地经营权,鼓励社会资本流转林地经营权发展林下经济。鼓励通过土
地流转以及招标、拍卖、公开协商等方式,合法流转集体所有荒山、荒丘、
荒地等未利用地经营权。允许通过租赁等方式有偿使用国有森林资源资产,
用于建设林下经济产业基地。符合政策的可向不动产登记机构依法登记造
册,颁发不动产权证书,切实保障土地流转各方合法权益。
+
黔东南州产业大招商政策
摘编
·69·
()落实配套用地政策。
允许放置移动类设施或利用林间空地建设必要的生产管护设施、生产
资料库房和采集产品临时储藏室等临时设施,相关用地可按设施农用地管
理,并办理相关手续。在不破坏土地、生态和不影响地质安全的前提下,
利用林中空地,为开展林下经济生产经营活动(森林生态旅游和康养)修筑
的非永久性构筑物、建筑物、木屋、移动房屋设施、森林(康养)步道,可
不征收(收回)、不转用,按现用途管理;修筑符合相关规划的永久性构筑
物、建筑物,优先安排建设用地计划指标,依法办理建设用地手续。
()加大财税金融支持力度。
各级财政每年安排专项资金,采取先建后补、贴息补助、资本金补助、
融资风险保证金等形式支持林下经济发展。财政专项资金、政府投资基金
等要优先支持林下经济全产业链发展和配套基础设施建设。符合条件的林
下经济加工企业、创业人员,按规定给予税费减免、创业补贴、创业担保
贷款及贴息等扶持。加大对低产低效改造、良种良艺良机补贴的支持力度,
将种植、养殖、采集和初加工常用机械列入农机购置补贴范围。支持国家
储备林项目建设单位利用国家备林40%以内贷款资金实施林下济项目。
将林下经济产业贷款担保纳入全国农业信贷担保体系中省级农担公司服务
范围,引导市场主体对林权抵押贷款进行担保,建立健全抵押林权收储制
度体系。创新林合作模式,推进“林业保+”度,完善策性保险
保费补贴政策,将森林保险范围扩大至林下经济产业。
政策依据:中共贵州省委贵州省人民政府关于加快推进林下经济高质
量发展的意见(黔党发〔202120号)
政策
1.保障生产用地。
利用2100万亩低效茶园、低效人工商品林地、疏林地、灌木林地等各
+
黔东南州产业大招商政策
摘编
·70·
类适宜的非耕地国土资源,保障扩大油茶种植、改造提升低产林任务落地。
2.创新金融服务。
在已将油茶纳入《国家储备林树种目录》范围的基础上,支持各类金
融机构结合油茶发展特点和需求,按照市场化原则提供各类金融服务,加
大金融支持力度。地方可按规定采用以奖代补、贷款贴息等方式支持油茶
林种植和改造项目。引导金融机构按市场化原则,加大对油茶营造、加工
经营和基础设施配套建设等全产业链的信贷投放,为油茶产品提供各类贷
款。用好再贷款政策,引导地方法人金融机构支持发展油茶等特色产业。
鼓励各地通过发行地方政府债券等方式支持符合条件的油茶项目。鼓励和
引导金融机构加大对适度规模经营主体发展油茶产业的信贷担保支持力度。
鼓励油茶产区将油茶纳入地方特色农产品保险以奖代补政策范围,有条件
的地方可探索完全成本保险,提升保险风险保障水平。
政策依据:关于印发《加快油茶产业发展三年行动方案(20232025
)》的通知(林改发〔2022130号)
政策
1.改善生产经营基础设施。在林地上修筑直接为竹林及竹产品生产经
营服务的工程设施,符合《森林法》有关规定的,不需要办理建设用地审
批手续。
2.完善投入机制。鼓励符合条件的社会资本规范有序设立竹产业发展
基金。将符合条件的竹产业关键技术研发纳入国家科技计划。落实好企业
研发费用加计扣除、高新技术企业所得税优惠、小微企业普惠性税收减免
等政策。地方可将符合条件的竹林培育,按规定纳入造林补助、森林抚育
补助等范围。
3.加大金融支持。完善金融服务机制,引导金融机构开发符合竹产业
特色的金融产品。将符合条件的竹产业贷款纳入政府性融资担保服务范围。
+
黔东南州产业大招商政策
摘编
·71·
鼓励地方建立竹产业投融资项目储备库,助推竹产品企业与金融机构对接。
拓展直接融资渠道,支持符合条件的竹产品企业在境内外上市和发行债券。
鼓励各类创业投资、私募基金投资竹产业。
政策依据:关于加快推进竹产业创新发展的意见(林改发〔2021
104号)
政策
对发展山桐子等木本粮油品优先办理林木采伐审批手续;对“国储林
+山桐子”的国项目,优先给予项目审查批复。支持金融机构开发木本粮
油金融产品,撬动金融和社会资本,支持全产业链发展。山桐子产业发展
纳入政策性地方特色农业保险,支持保发山桐子产业从育苗、种植、加工
到市场的全产业链山桐子油纳入粮油储备,全力保障山桐子产业发展。
政策依据:贵州省特色林业产业发展领导小组关于印发《贵州省山桐
子产业发展行动方案》的通知(黔特林产领发〔20222号)
政策
()促进投资主体多元化,鼓励社会资本以合资、合作、租赁、承包
等形式依法合规进入森林康养产业,引导其与林场、合作社、农户等经营
主体建立利益联结机制,实现资源优化配置和集约化、规范化经营。支持
社会力量结合森林康养资源建设特色养老机构。
()市场主体利用旧的闲置管护房和办公房等进行改造利用,经有关
部门批准临时改变建筑使用功能从事非营利性森林康养产业服务且连续经
营一年以上的,五年内土地使用性质可暂不作变更。
政策依据:省林业局省民政厅省卫生健康委员会省中医药管理局关于
印发《关推进森林康养业发展的意见》的通知(黔林发2019208
号)
(七)文化和旅游产业
+
黔东南州产业大招商政策
摘编
·72·
政策一
1.开展游包机、专列年接待入境旅游者1万人次以上的
企业给予流动资金贷款贴息支持。对新增世界遗产地、5A级旅游景区、国
家生态旅游示范区、国家旅游度假区和全国“百强旅行社”,从省旅游发
展专项资金中给予一次性建设奖励。加大对新开航线航班的资金支持力度。
2.将重点旅游项目建设用地计划纳入全省年度用地计划中统筹安排。
在安排国家下的年度新增建设用地指标时,优先保100个旅游景
省委、省政府确定的其他重大旅游项目建设用地。为旅游配套的公益性基
础设施建设按划拨方式供地。
3.利用林地、水面、湿地、山头兴办的旅游项目,可以通过承包、租
赁等形式取得使用权或经营权。对旅游企业自用土地、房产,缴纳房产税、
城镇土地使用税确有困难的,按规定申请减免。对旅游景区内的宗教寺庙、
公园、名胜古迹自用的房产和土地,免征房产税和城镇土地使用税。对经
批准开山整治和改造废弃土地用于开发旅游项目的,从土地使用的月份起
免缴城镇土地使用税5年。经营采摘、观光农业的单位和个人,其直接
用于采摘、观光的种植、养殖、饲养的土地,免征城镇土地使用税。
4.演艺项目可参照文化产业税优惠政策享受优惠100个旅
景区新建旅游项目减免有关行政事业性收费,除税法明确规定实行审批的
减免税外,对其他减免税实行备案管理。旅游企业宣传促销费、旅游商品
生产企业研发费和技术改造费纳入企业成本(费用),按照有关规定在税前
扣除。乡村旅游经营户税费征收有上下限的,按下限收取。
5.支持旅游企业采取项目特许权、运营权、景区门票质押担保等方式
扩大融资规模。
6.建立旅游企业融资协调机制,支持符合条件的旅游企业通过多层次
资本市场,以债权、股权等多种形式融资。
+
黔东南州产业大招商政策
摘编
·73·
政策依据:《省政府关于深化改革开放加快旅游业转型发展的若干意
见》(黔府发〔20143号)
政策
强化政策保障。
对文旅企业的宣传促销、商品研发和技术改造等费用,按照有关规定
在税前扣除。文旅企业缴纳房产税、城镇土地使用税确有困难的,可以按
规定对符合条件的纳税人给予减免。对在城镇土地使用税征收范围内,直
接用于采摘和农业观光的种植、养殖、饲养的土地,免征城镇土地使用税。
对利用经批准的开山整治土地及改造废弃土地发展的休闲农业、共享农庄
和乡村旅游项目,报经县级税机关审查后,可从使用的月份起免5
城镇土地使用税。
强化用地保障。
文化和旅游发展规划符合国土空间规划。对列入省级以上重大工程和
重点项目的文化旅游和乡村振兴项目,属于单独选址的在用地批准时直接
安排计划指标。属于自然景观用地及农牧渔业种植、养殖用地的文旅项目,
在不破坏生态、景观环境和不影响地质安全的前提下,不征收、不转用,
按现用途管理。鼓励以长期租赁、先租后让、租让结合方式供应文旅项目
建设用地。在符合规划、不改变土地用途的前提下,利用闲置土地兴办住
宿、餐饮等文旅接待服务设施的,经市()、县级人民政府批准,可执行
5年内继续按原用途和土地权利类型使用土地的过渡期政策。支持利用
集团经营性建设用地入市的方式保障文旅项目建设用地。农村集体经济组
织可依法使用建设用地自办或以土地使用权入股、联营等方式开办文旅企
业。城乡居民可以利用
自有住宅依法从事民宿等文化旅游经营。市()做好地热(温泉)矿业
权设置、出让、审批、登记等工作。建设项目涉及使用林地的,在符合用
+
黔东南州产业大招商政策
摘编
·74·
地条件下,依法优先办理使用林地审批审核手续。
政策依据:中共贵州省委贵州省人民政府关于推动旅游业高质量发展
加快旅游产业化建设多彩贵州旅游强省的意见(黔党发〔202027号)
政策
对省级以上重点重大旅游产业项目用地,土地利用年度计划指标由省
级统筹落实。未纳入省级以上重点重大项目清单的旅游产业项目和乡村旅
游项目,由各地统筹安排使用好年度新增建设用地计划指标、增减挂钩指
标,优先保障用地需求。
鼓励以长期租赁、先租后让、租让结合方式供应文旅项目建设用地。
在符合国土空间规划的前提下,支持利用集体经营性建设用地入市保障文
旅项目建设用地。
政策依据:中共中央省委贵州省人民政府关于加快推进旅游产业化奋
力实现旅游大提质的实施意见(黔党发〔202122号)
政策
加大用地支持。
盘活存量和低效建设用地,利用城乡建设用地增减挂钩政策,促进特
色小镇和小城镇加快建设发展。按“人地挂钩”政策,保障特色小镇和小
城镇新增城镇建设用地规模,对于鼓励类、支持类产业用地需求,给予年
度计划指标倾斜。对符合国家供地政策的项目,在建设用地审批中应保尽
保。
加大产业支持。
对符合产业发展方向,落户特色小镇和小城镇的企业、人才,享有省
级层面关于农村产业革命、旅游业、服务业、养老业等优惠政策的支持。
支持特色小镇和小城镇中小企业创业基地建设,省工业和信息化发展专项
资金向特色食品、旅游商品等特色产业倾斜,对符合国家产业结构调整的
+
黔东南州产业大招商政策
摘编
·75·
指导目录鼓励类产业企业,按规定享受西部大开发所得税优惠政策。
政策依据:省人民政府办公厅关于加快推动特色小镇和小城镇高质量
发展的实施意见(黔府办发〔201920号)
政策
对符合小型微利企业条件的文化创意和设计服务企业实行小型微利企
业所得税优惠政策。对国家重点鼓励的文化产品出口实行增值税零税率。
文化创意和设计服务企业在申报专利权时可申请省科技厅专利申请资助资
金、省科技专利专项资金给予补助。
政策依据:省政府办公厅关于推进文化创意和设计服务与相关产业融
合发展的实施意见(黔府办发〔201552号)
(八)现代服务业
政策一
省现代服务业专项资金每年安排5000万元以上支持现代服务业集聚区
建设发展;对经认定的省级服务业集聚区给予15万元规划编制补助;对入
选的示范集聚通过绩效奖补方式给予300万元一次性奖励资金,用于
持产业公共服务平台或重点企业项目建设。
政策依据:省服务业创新发展十大工程领导小组《关于印发贵州省现
2020-2022
20202号)
政策二
领导小组办公室每年遴选50户左右省级服务业龙头企业,由十大工程
牵头部门联合授牌,从省级服务业发展引导资金中给予每户50万元奖励。
省级服务业发展专项资金将优先支持龙头企业项目建设。
政策依据:省发展改革委关于印发《贵州省服务业创新发展十大工程
省级龙头企业认定管理办法》(黔发改服务〔2023146号)
+
黔东南州产业大招商政策
摘编
·76·
(九)新能源汽车及电池材料
政策一
()鼓励物业部门与有资质的充电桩建设运营企业合作在小区公共停
车位建设充电设施。
()持续推进综合充能项目建设。支持集加油、加气、加氢、加甲醇、
充换电等综合能源服务于一体的综合充能项目建设,重点推进贵州海上丝
路公司贵阳经开区“二合一”综合充能站、贵州渝富公司毕节综合充能站、
华油天然气公司大方“五站合一”综合充能站等项目建设。
()降低充电设施建设用地成本。独立占地的集中式充换电站用地鼓
励采取长期租赁、先租后让、租让结合、弹性年期出让等方式供应。与其
他建设项目共用土地的充换电项目可以采取配建方式供地。鼓励在村集体
用地建设充换电基础设施。除可按出让方式供应土地外,鼓励市、县政府
以国有建设用地使用权作价出资或者入股方式提供土地,与社会资本合作,
降低建设充电基础设施用地综合成本。
()保障电力供应。对向供电企业直接报装接电的经营性集中式充换
电设施用电,执行工商业及其他两部制电价,到2023年,免收基本电费。
其他充电设施按其所在场所执行分类目录电价。
()加大资金支持。鼓励金融机构在商业可持续原则下创新金融产品,
支持充电设施建设运营。支持符合条件的充电设施企业按照市场化原则通
过发行企业债券、公司债券、非金融企业债券融资工具等方式扩大融资,
防止形成隐性债务。
政策依据:省人民政府办公厅关于印发贵州省电动汽车充电基础设施
建设三年行动方案(20212023)的通知(黔府办函〔202156号)
政策二
完善资金清算制度,提高补贴精度。从2020年起,新能源乘用车、商
+
黔东南州产业大招商政策
摘编
·77·
用车业单申报清算车辆数量应分别达10000辆、1000辆;贴政
结束后,对未达到清算车辆数量要求的企业,将安排最终清算。
新能源乘用车补贴前售价须30万元以下(30万元),为鼓励“换电”
新型商业模式发展,加快新能源汽车推广,“换电模式”车辆不受此规定。
政策依据:省财政厅、省工业和信息化厅、省科学技术厅、省发展和
改革委省财政厅等四部门关于转发《财政部工业和信息化部科技部发展改
革委关于完善新能源汽车推广应用财政补贴政策的通知》的通知(黔财工
202038
(十)酱香白酒
强化融资保障。
鼓励银行业金融机构实行名单制管理,适当提高不良贷款容忍度。对
面临暂时流动资金困难的企业不降低现有授信额度;对资产负债率较高,
但在警戒线以下的白酒企业不降低信用等级;对出现清偿性风险,但长期
盈利能力强、工艺先进的企业,不搞“一刀切”式抽贷和断贷;大力开展
资信评估体系建设,对市场前景好、风险小的白酒企业,通过资信调查认
定,适当放宽贷款限额控制,扩大白酒企业抵()押品范围。支持地方金
融机构开展基酒抵、质押融资业务。
强化财税支持。
1.省工业和信息化发展专项资金每年安排2000万元以上,重点支持白
酒工业园区、酒糟循环利用、企业结构调整及改扩建项目建设。
2.推动符合条件的白酒企业启动和加快上市进程,对上市或挂牌融资
的企业给予奖励,其中,对在境内主板、中小板、创业板和境外市场上市
融资的企业,给予100万元至150万元的一次性奖励;对在“新三板”上市
融资的企业,给予50万元的一次性奖励。
3.鼓励和支持白酒企业与高校、科研院所构建产学研技术创新平台,
+
黔东南州产业大招商政策
摘编
·78·
对白酒企业设立的技术部门,被新认定为国家工程技术研究中心、重点实
验室的,分别予一次性500补助;新认定为国家级企业术中心、
技术创新示范业的,分别给予一次性100万元补助;新认定为高新技
企业的白酒企业,给予一次性30万元奖励。
4.鼓励和支持白酒企业运用知识产权参与市场竞争,对获得中国专利
金奖、中国外观设计金奖的各一次性奖励50万元;对获得中国专利优秀奖、
中国外观设计优秀奖的一次性奖励10万元。对获得贵州省专利金奖、贵州
省外观设计金奖的各一次性奖励10万元;对获得贵州省专利优秀奖、贵州
省外观设计优秀奖的各一次性3元。对获得中国驰名商标、贵州省
著名商标、贵州省名牌产品、贵州省服务业名牌等国家级和省级品牌的白
酒企业,由企业所在市县政府给予一定奖励。
政策依据:省政府办公厅关于印发《贵州省推动白酒行业供给侧结构
性改革促进产业转型升级的实施意见》的通知(黔府办发〔201633号)
(十一)生猪
政策一
能繁猪、肥猪政策性保险保费财政补占总保费85%,提高省
级财政保费承担比例,保费补贴按照中央50%,省级25%,市级5%,县级5%
的比例承担。
政策依据:省财政厅关于印发《贵州省政策性农业保险保费补贴资金
管理办法》的通知(黔财金〔202231号)
政策二
一、生猪养殖用地按农用地管理,不需办理建设用地审批手续,在不
占用永久基本农田前提下,合理安排生猪养殖用地空间,允许多层建筑发
展生猪养殖,允许生猪养殖用地使用一般耕地,作为养殖用途不需耕地占
补平衡。
+
黔东南州产业大招商政策
摘编
·79·
二、畜禽养殖设施农用地范围:
1、生产设施用地。畜禽养殖圈、养殖池(车间)、饲料存放和
化投料、进排水渠道等设施用地,以及场区内通道、绿化隔离带用地。
2、辅助设施用地。与养殖生产接关联的粪污处置、检验检检测
疫病防控、冷冻保鲜、病死畜隔离、洗消转运等设施用地及必要的管理用
房用地。
三、直接用于养殖的生产设施用地规模根据养殖规模,按照国家及农
业行业标准合确定。辅助设施用地规模控制在养殖设施用地积的15%
以内,取消15亩上限规定,保障生猪养殖生产的废弃物处理等设施用地需
求。养殖设施符合相关规划、建设安全和生物防疫等要求的,可以建设多
层建筑。
四、养殖设施原则上不得使用永久基本农田,涉及少量永久基本农田
确实难以避让的,允许使用但必须补划,使用面积原则上不得超过养殖设
施用地面积的15%,其中对生猪养殖的可适当扩大,原则上不得超过20%
对于永久基本农田地块特别零星破碎的,经县自然资源主管部门会同农业
农村主管部门组织论证同意后可略增加使用比例。
五、生猪养殖设施用地可通过与农村集体经济组织签定协议等方式获
取,鼓励利用农村集体建设用地和荒山、荒沟、荒丘、荒滩发展生猪生产。
政策依据:贵州省自然资源厅贵州省农业农村厅关于设施农业用地管
理有关问题的通知(黔自然资规〔20201号)
(十二)生态渔业
()加大财政扶持。
对国家级科研院所或院士带团队、带技术、带项目在贵州创办企业或
科研基地并实现绩效目标的,省级给予一定奖补。
对获国家原良种场认定的企业,省级次性给予500万元补,
+
黔东南州产业大招商政策
摘编
·80·
资金从部门预算中统筹安排。对获得中国驰名商标行政认定的,省级财政
一次性奖励50万元。
对生态渔业精深加工企业开展市场融资,符合财政专项资金支持要求
的,给予支持。对牵头制定标准的单位或个人,按国家标准20万元、地方
标准5万元的标准,省级给予资金补助。
()完善金融服务。
积极拓宽涉农贷款抵质押物范围,鼓励银行等金融机构在信贷审批流
程、授信权限、产品研发方面对生态渔业予以政策倾斜。
对符关条件的企业,省农业贷融资担公司10万元300
万元贷款担保增信,按照不高于0.8(脱贫类项目不高于0.5)的低费率
收取担保费。
探索开展渔业保险试点,将渔业保险纳入地方特色险种补贴支持范围,
完善水产养殖气象指数保险、价格保险、养殖设施保险等政策,鼓励发展
商业性渔业保险。
()加强法治保障。
完善养殖证、水产苗种生产许可证制度,全面实施水产苗种产地检疫
制度。发展大水面增殖渔业,必须依法办理养殖证,放养和起捕必须符合
有关管理规定。
水产养殖设施用地符合设施农业用地政策的,按照国家和省有关规定
执行。水产养殖用水在限额以内不征收水资源费。
对渔业养殖、捕捞用电,执行农业生产用电价格。
政策依据:省人民政府办公厅关于加快推进生态渔业高质量发展的意
见(黔府办发〔202129号)
+
黔东南州产业大招商政策
摘编
·81·
一、新型工业化基金
贵州省新型工业化发展基金。省级财政2021年预算安排70亿元(工业
发展专项资金60亿元、大数据发展专项资金10亿元),带动金融和社会资
本投资不低于140亿元,在项目端实现总投入不低于210亿元。
(一)工业化项目
1.重点支持领域,包括先进装备制造、现代制造服务业、前沿技术产
业、现代能源、新能源汽车、基础材料、现代化工、特色食品、优质烟酒、
健康医药、新型建材、民族特色轻工、电子信息制造业和节能与资源综合
利用业等产业项目或科技成果转化项目。
2.申报主体要求,应为经工商行政管理机关或主管机关核准登记的公
司或企业,如申报主体为已存续企业,具体要求如下:
1应为贵州省内注册的企业、金拟投资的省外企注册地迁
贵州的、被贵州省内企业控股收购的省外企业等;
2)原则上项目申报主体与实施主体应保持一致;
3公司实收资本则上不低1000万元,法人治理结构完
产经营或业务开展情况良好。连续经营须在两年以上,净资产原则上不低
3000万元;
4)申请基金投资金额原则上不得低于3000万元;
5财务管理制度健全,财务况经会计师事务所审计,会信用
纳税信用、银行信用良好;
6企业具备为投资人的投资实保值增值,并提供好退出通
四、基金类政策
+
黔东南州产业大招商政策
摘编
·82·
保障的基本条件;
7)企业未列入有关部门发布的负面清单或限批名单,且原则上近3
年未因财政、环保、财务及其他违法、违规行为受到县级以上财政部门及
相关行政执法、监管部门的处理处罚;
8不存在重大偿债风险、影响续经营的担保、诉及仲裁等
大或有事项。
3.新设立SPV要求
如申报主体为新设立的SPV公司,具体要求如下:
1应为经工商行政管理机关或管机关核准登记的立在贵州
公司;
2公司注册资本则上不低1000万元,基金完成投资后
股东方应在规定时间内实缴到位;
3具备为投资人的投资实现保增值,并提供良好退出通道保
的基本条件。
4.申报项目要求
1项目应符合本指南规定的投领域,市场潜力较,辐射带
能力强,具有较强的产业化属性和市场化特征,产品或服务有明确的目标
市场,具有较强的市场竞争力、稳定现金流和可持续经营能力;
2项目应符合我省国民经济和会发展规划、产业划、土地
用总体规划、环境保护规划等;
3)项目应具备开工建设的必要条件;
4)项目自筹资金不得低于项目总投资的10%;原则上所实施项目应
与申报主体主营业务一致;
5项目所处行业市场空间较大具备一定的核心竞优势;高
管理人员和核心技术人员具有一定的稳定性。
+
黔东南州产业大招商政策
摘编
·83·
6项目实施有助于当地社会稳与经济的健康可持发展,对
方产业结构转型升级具有明显的促进作用,投入运营后预计可新增带动一
批就业岗位和创造新增税收。
7牢牢守住生态和发展两条底线,项目建设具有良的生态性
不涉及高耗能高污染,不会对生态环境产生不可逆的影响;项目建设不涉
及生态红线,符合国土空间开发规划。
(二)大数据相关企业
1.重点支持领域
1数字基础设施:包括宽带网建设及运营;5G建设、运
及技术开发应用;北斗等卫星通信系统、地球站系统的建设、运营及技术
应用服务;移动互联网;智慧广电等。
2新一代信息技术:包括人工能、物联网、工业联网、产
互联网、区块链、信息安全技术等开发、应用及服务。
3软件开发服务:包括基应用软件、嵌入式软件数据库、
DCS、可编程逻辑制器(PLC、数据采集与控(SCADA)、先进
控制系统(APC)等工业控制系统;制造执行系统(MES),计算机辅助设
计(CAD)、辅助工程(CAE)、工艺规划(CAPP)、产品全生命周期管理
PLM、工业云平台、工APP工业件;能源管理统(EMS)、建
筑信息模型系统(BIM)、城市信息模型系统(CIM)等专用系统。
4数据技术开发及服务:括数据采、存、算、管用全生命
期相关技术研发及应用;在线数据处理;数据交易流通的交易平台、加工
分析、资本运营、中介咨询、上市服务等产业;云服务、软件外包服务等
数据增值服务;信息化解决方案开发、软件开发和测试服务;信息系统集
成、咨询、运营维护;数据挖掘;数据恢复和灾备服务等。
+
黔东南州产业大招商政策
摘编
·84·
5数据中心产业:数据中建设及运营,其中绿色据中心、
算、超大型数据中心在同等条件下优先支持;围绕数据中心相关的服务器、
机架、数据采集、数据标注、数据传输、数据开发等上下游产业。
6数字经济新业态:信创产业研发、适配及应用数据技术
产化;网络货运产业;数字化平台经济、共享共济。
7)大数据与工业融合:工业互联网、工APP;智慧车间、智慧工
厂;建材、航空航天、生物、汽车、电力等行业数字化改造。
8大数据与农业融合:农产品量追溯、农业生产能化、农
电商、农业大数据、农业产销智慧对接技术及应用。
9大数据与服务业融合:移动付、电子票据等金现代化技
开发及应用;电子商务和跨境电商;数字内容创作生产、网络游戏、数字
媒体、短视频、数字出版、直播、在线文化娱乐等信息服务;智慧旅游、
智慧物流、智慧医疗健康、智慧教育、智慧交通、智慧家居等。
10)贵州省大数据和数字经济“十四五”发展相关规划明确的其他
发展方向。
2.申报主体要求
1)省内注册登记的独立法人企业,成立时间超1年,实缴注册资
本不低于500万元;
2)基金投资后注册地拟迁往贵州省的省外企业;
3基金投资后拟在我省落地区总部、功能性总部省外优强
业;
4)被我省企业控股收购的省外企业;
5)申请基金投资金额原则上不得低于500万元。
3.内部管理要求
1)企业法人治理结构完善且与企业规模相匹配,治理机制健全;
+
黔东南州产业大招商政策
摘编
·85·
2)股权结构清晰,不存在重大股权纠纷;
3不存在企业股东、实际控制滥用支配地位,随抽逃出资
大额占用企业资金且未归还等情形;
4企业无重大不良信用记录,股东及核心团队人最近三年
不存在犯罪、重大违法违规行为;
5)未被列入有关部门发布的负面清单或限制名单。
4.产品及业务要求
1企业经营及发展良好,主业务明晰,有较为成熟的商模式
2企业提供的产品或服务与市上已存在的同类产和服务有
别优势,有望成长为细分行业核心。
5.财务状况要求
1企业财务管理制度健全,主资产权属清晰,原上资产负
率不高于75%
2近一年内没有因财政、环保财务、税务及其他法、违规
为受到县级以上有关部门的处理、处罚;
3不存在重大偿债风险(如影持续经营的担保、裁及诉讼
重大或有事项)和尚未了结的对企业财务、经营及资产状况造成实质影响
的诉讼、仲裁等情况。
6.技术研发能力
1)企业有从事研究开发的核心技术团队及研发能力;
2拥有与企业主营业务相关的利技术及知识产权具有一定
术创新能力。
7.申请较大额投资(3000万元以上)须同时具备以下条件:
1)申报主体属于统计局或大数据局上规入统企业,成立时间超过3
年;
+
黔东南州产业大招商政策
摘编
·86·
2)实缴注册资本不低于1000万元或净资产不低于5000万元。
3)企业最近3年连续盈利且年均净利润不低于1000万元,或企业最
2年平均营业收入不低于5000万元,营业收入增长率不低于10%且年均净
利润不低于500元;或者企业上一年度营业收入1亿以上,未来3
内有上市计划且已制定明确的上市方案,已开展上市前准备工作。
4技术型企业拥有专职从事研开发的核心技术团,企业从
研究开发的技术人员占职工总人数的20%以上,管理团队中50%以上核心管
理人员或技术队中50%上核技术人员从事相关行业的工时间不少
3年。
(三)优先支持的企业(项目)
(一)涉及贵州省委省政府确定的新型工业化发展部署的产业的企业
(项目)。
(二)能够对贵州辖区显著增加税收、就业及经济社会价值的省级以
上龙头企业。
(三)拥有一流的核心技术或具有创新型商业模式的企业(项目)。
(四)细分行业排名前十在贵州落地的企业(项目)。
(五)贵州省软件名园、培育园区内重点企业及园区运营企业。
(六)获国家或省级大数据、数字经济相关试点示范企业。
(七)贵州省委省政府重要工作涉及的重点项目。
政策依据:关于印发《贵州省新型工业化发展基金项目遴选标准及申
报指南(试行)》的通知(贵鑫瑞和发〔202220号)
二、新型城镇化基金
贵州省新型城镇化投资基金。省级财政2021年预算安排30亿元(新型
城镇化专项资金),带动金融和社会资本投资不低60亿元,在项目端实
现总投入不低于90亿元。
+
黔东南州产业大招商政策
摘编
·87·
项目投资领域
(一)城市更新领域。重点支持城镇棚户区、老旧小区、背街小巷、
地下管网改造和城市智慧化改造以及保障性租赁住房、城市轨道交通、公
水供暖等
(不含民办义务教育)、医疗、社会福利、殡葬服务、文化、旅游、体育、
托育等公共服务设施建设,垃圾无害化资源化处理设施、污水集中处理设
施等环境卫生设施建设。
(二)产城融合领域。重点支持标准化厂房、智能标准生产设施、技
术研发转化设施、检验检测认证设施、职业技能培训设施、仓储集散回收
设施、文化旅游体育产业服务设施、供水排水供气供电供暖设施、污水垃
圾处理设施等产业平台公共配套设施建设,物流设施建设和农贸市场建设
改造等。
(三)养老服务领域。重点支持养老医疗、餐饮、教育、旅游、康复
等养老服务产业和养老服务设施建设。
(四)特色小镇领域。重点支持有一定收益的特色小镇基础设施、公
共服务设施、环境卫生设施、产业培育设施等建设。
项目申报企业
(一)在贵州省内注册的企业;注册地拟迁往贵州的企业,或被贵州
省内企业控股收购的省外企业;通过设立子公司的形式将重要业务板块落
户贵州的企业。
(二)股权结构清晰,实际控制人和最终受益人可识别,股权不存在
权属纠纷。
(三)法人治理结构完善,生产经营或业务开展情况良好,有清晰的
商业模式。
(四)未入有关部门发的负面清单或限批名单,且3年没有因
+
黔东南州产业大招商政策
摘编
·88·
财政、环保、财务及其他违法、违规行为受到县级以上财政部门及相关行
政执法、监管部门的处理处罚。
(五)申报企业、股东及核心团队经营合法合规,征信情况良好,近
5内不存在犯罪、重大违法违规行为;不存在将会实质性影响公司财务、
经营及资产状况的未结诉讼、仲裁等。
(六)不存在重大偿债风险、影响持续经营的担保、诉讼及仲裁等重
大或有事项。
(七项目报企业若为新设立SPV司(即发起方和投资方
的项目公司)具体要求如下:
1.应为经工商行政管理机关或主管机关核准登记的设立在贵州的公司;
2.公司注册资本原则上不低于1000万元,基金完成投资后,其他股东
方应在规定时间内实缴到位;
3.具备为投资人的投资实现保值增值,并提供良好退出通道保障的基
本条件。
项目申报要求
(一)项目应符合国家相关规定及行业政策标准。
(二)项目应符合本指南规定的投资领域,市场潜力较大,辐射带动
能力强,具备较强的市场化特征和市场竞争力。
(三)项目建设应守住生态和发展两条底线,不得对生态环境产生不
可逆的影响、不得涉及生态红线,应符合国土空间开发规划。
(四)不得新增地方政府债会稳定与经济的健康可持续发展,对地方
新型城镇化转型升级具有促进作用,可带动就业和创造税收。
(五)项目盈利模式应包含资产自持经营,通过资产管理和运营来提
供稳定现金流。
(六)项目应有完整的商业计划书或可行性研究报告,项目建设应有
+
黔东南州产业大招商政策
摘编
·89·
切实可行的资金筹集计划和使用计划,项目运营应有合理的现金流支撑,
项目投资应有合理的资金收益及退出机制,保障城镇化投资基金投资收益
和按期退出。
(七)公司核心团队成员需具有与项目实施相匹配的行业背景与技术
能力,至少3成员须具从事相关行业的经验或背景,高级管理人员
和核心技术人员具有一定的稳定性。
(八)城市更新类项目,须符合《住房和城乡建设部关于在实施城市
更新行动中防止大拆大建问题的通知》(建科〔202163号)有关规定。
(九)涉及棚户区、老旧小区、背街小巷、城市管网改造和保障性租
赁住房项目的,原则上应纳入主管部门确定的计划任务。
(十)PPP目须进入全国PPP合信平台项目管理库和州省PPP
监测服务平台。
(十一)满足行业主管部门、基金管理人的其他要求。
政策依据:印发州省镇化基金标准
申报指南(试行)》的通知(贵鑫瑞和发〔202219号)
三、农业现代化基金
贵州省农业农村现代化发展基金。省级财政2021年预算安排45亿元
(农业现代化专项资金),带动金融和社会资本投资不低于90亿元,在项
目端实现总投入不低于135亿元。
(一)重点支持领域
重点投向粮食生产和重要农产品供给、现代特色农业、农业生产及流
通服务、绿色循环产业、农业科技装备业、现代化智慧农业、特色林业及
林下经济、农村人居环境整治、高标准农田建设、农村饮水安全工程等项
目。
+
黔东南州产业大招商政策
摘编
·90·
(二)项目申报要求
1.项目申报范围:
符合《省人民政府办公厅关于印发省级政府投资基金优化整合实施方
案的通知》(府办发〔20219号)和《省级政府投资基金管委会办
室关于深化“放管服”改革优化完善“四化”及生态环保基金运行体制机
制的实施意见(黔基金办〔20222号)规定的投资范围,未被列入
基金负面清单的项目。
2.企业申报条件:
1组织形式:应为依法设立具独立法人资格的有责任公司
股份有限公司或有限合伙企业;原则上不投资上市企业(上市公司定增除
外)。
2主营业务:公司应具有明确主营业务,相关经业务不得
《贵州省农业农村现代化发展基金管理暂行办法》中基金投向相违背。
3注册地:贵州省内外的企业农业基金投资省外业资金规
原则上不超过金实缴规模的30%。基金投资省外企业认定标:被贵州
省内企业控股收购的省外企业;企业通过设立子公司的形式将重要业务板
块地落户贵州,子公司资产须不低于农业基金对该企业的对应投资金额中
贵州政府出资部分;经农业基金工作协调组办公室审议通过的贵州省农业
现代化产业中具有重要带动作用或发展前景好、盈利能力强的省外项目。
4核心团队:核心团队成员需有与项目实施相匹的行业背
与技术能力;至少有3名成员须具备从事相关行业的经验或背景。
5规范性:法人治理结构健全股权关系清晰,不在重大股
纠纷的情况;公司资产权属清晰,权证合规;建立了现代化企业管理制度,
包括生产、管理、财务等;特许行业经营项目应具备项目必须的运营资质。
6)财务指标:总资产不低于3000万元;净资产不低于1000万元。
+
黔东南州产业大招商政策
摘编
·91·
7技术与研发:应拥有权属清、完整的专利技术相关知识
权,具有较强的技术研发或创新能力。
8诉讼、仲裁与行政处罚:公及股东最近五年内存在犯罪
重大违法违规行为,无尚未了结的将会实质性影响公司经营等情况;企业
未列入有关部门发布的负面清或限批名单,且近3年没有因财政、环保、
税务及其他重大违法、违规行为受到县级以上财政部门及相关行政执法、
监管部门的处理处罚(是否属于重大违法、违规行为由当地相关执法部门
出具认定函)。
9信用情况:公司及股东征信况良好,不存在被入失信人
等情况。
10)市场与商业模式:产品或服务有明确的目标市场,具有较强的
市场竞争力与可持续的经营能力,产品或服务应具有创新且盈利的商业模
式。
11)关联交易:关联交易清晰,价格公允。
12)劳动用工与社会保险:项目实施主体应按法律规定与员工签订
劳动合同,并缴纳社会保险。
13)新设SPV司:应为经工商行管理机关或主管机核准
登记的设立在贵州的公司;公司注册资本原则上不低于1000万元,需实缴
到位;具备为农业基金的投资本金实现保值增值,并提供良好退出通道保
障的基本条件。
3.项目申报条件:
1产业政策:产业项目应具有确的主营业务或主产品、清
的商业模式,符合国家及我省产业政策导向。
2项目规划:项目需具有清晰发展规划与实施计,有完整
商业计划书或可行性研究报告。
+
黔东南州产业大招商政策
摘编
·92·
3)项目条件:项目应具备开工建设的必要条件。
4投资计划:项目资金需求使用计划合理可行,前期工到位
资金来源明确,筹措方式可行项目自筹资金原则不低于项目总投15%
5项目收益:具备产业化条件市场化属性,具有持续的现
流及稳定的项目收益,主要经营指标原则上应保持在行业合理范围内:项
目净现值NPV>0;项目内部收益率原则上需大于4.6%/年;项目的静态投资
回收期不得高于农业基金的投资期。
6社会效益:项目实施有助于方经济社会持续健发展,有
巩固拓展脱贫攻坚成果与乡村振兴有效衔接,投入运营后可新增带动就业、
促进农户增收。
7生态性:项目建设具有良好生态性,不会对生环境产生
可逆影响;项目建设不涉及生态红线,符合国土空间开发规划。
4.投资要素:
1)投资主体:原则上与申报主体保持一致。
2)投资模式:主要以股权投资方式进行投资。
3)投资方式:增资扩股/股权转让。
4投资限额:基金原则上对受企业股权投资不控、不作第
大股东;基金单个项目的投资比例,不超过基金设立规模的30%
(三)优先支持的企业(项目)
1.涉及国家粮油安全、种源安全、农产品供给保障的企业(项目);
2.巩固拓展脱贫攻坚成果与乡村振兴有效衔接的企业(项目);
3.对区域产值、税收、就业等经济社会效益有重大带动的企业(项
目);
4.12个特色产业(茶叶、食用菌、蔬菜、牛羊、特色林业、水果、生
猪、中药材、刺梨、生态渔业、辣椒、生态家禽)中做优做精特色优势农
+
黔东南州产业大招商政策
摘编
·93·
产品的头部企业(项目);
5.拥有一流的核心技术或具有创新型商业模式的农业企业(项目);
6.农业产业化龙头企业、农产品流通企业、农机装备企业和大型商超
等在贵州落地的招商引资项目。
政策依据:关于印发《贵州省农业农村现代化发展基金项目遴选标准
及申报指南(试行)》的通知(贵鑫瑞和发〔202216号)
四、旅游产业化基金
贵州省文化旅游产业投资基金。省级财政2021年预算安排45亿元(旅
游专项资金),带动金融和社会资本投资不低于90亿元,在项目端实现总
投入不低于135亿元。
点支持文化旅游装备制造、红色旅游、山地旅游、体
育旅游融合发展、‘旅游+’‘+旅游’融合发展、避暑度假旅游、康养旅
游、森林生态旅游、乡村旅游、智慧旅游、文化旅游新业态、文化旅游景
区、文化旅游园区和街区建设运营、文化大数据、媒体融合、出版影视、
创意设计、会展、演艺等产业项目。申报条件
(一)项目实施主体要求
1.组织形式。应为依法设立具有独立法人资格的有限责任公司或股份
有限公司。
2.注册地。基金原则上应投资在贵州省内注册的企业,包括基金拟投
资的省外企业注册地迁往贵州的以及被贵州省内企业控股收购的省外企业
等。
为强化基金招商引资作用,撬动大型、优质项目落地贵州,基金可投
资通过设立子公司的形式将重要业务板块地落户贵州(子公司资产须不低
于基金对该企业的对应投资金额中贵州政府出资部分)的省外企业,投资
省外企业资金规模原则上不超过基金实缴规模的30%
+
黔东南州产业大招商政策
摘编
·94·
3.核心团队。核心团队成员需具有与项目实施相匹配的行业背景与技
术能力;至少有3名成员须具备从事相关行业的经验或背景。
4.范性1建立法人治理结构,不存在股东、实控制违法
情形;2明确资产权属系,具有清晰的项目公司股权结构设计,不
存在重大股权纠纷的情况;(3)具有规范的财务理制度,具备项目融
资和吸引社会资本的条件。
5.诉讼、仲裁与行政处罚。公司、股东及核心团队最近五年内不存在
犯罪、重大违法违规行为,无尚未了结的将会实质性影响公司财务、经营
及资产状况的诉讼、仲裁等情况。
6.信用情况及劳动用工与社会保险。公司、股东及核心团队征信情况
良好;项目实施主体应按法律规定与员工签订劳动合同,并缴纳社会保险
等。
7.财务情况:企业总资产不低于5000万元,净资产不低于3000万元。
8.新设立的项目SPV公司:
1公司注册资本则上不低3000万元,其他出资人须与
金同步实缴到位;
2具备为文旅基金的投资本金现保值增值,并提良好退出
道保障的基本条件。
(二)申报项目具体要求
1.产业政策。项目应具有明确的主营业务或产品,符合国家及我省文
化旅游体育产业政策导向,具备产业化条件和市场化属性,实现社会效益
与经济效益相统一。
2.期工。(1)原则上项目需获得项目实施必须的文或续:
基本建设类项目需获得项目审批或核准、备案手续等;非基本建设类项目
需获得有关主管部门立项批复文件;PPP类项目必须进入全国PPP综合信息
+
黔东南州产业大招商政策
摘编
·95·
平台项目管理库,并已设立相应的SPV公司。
2项目需具有清晰的发展规划实施计划,有完整商业计划
或可行性研究报告。
3.项目模式。项目具有较强的产业化属性和市场化特征,产品或服务
有明确的目标市场,具有较强的市场竞争力、稳定现金流和可持续经营能
力。项目实施主体应具备权属清晰的资产,完善明确的产权手续,具备开
放合作的股权结构,具有股权投资基金进入的良好条件。
4.预期经济效益。项目主要经营指标原则上应保持在行业合理范围内。
1项目净现NPV>0;(2的预期投资收益率原则上需
文旅基金门槛收益要求4.65%/);3项目的静态投回收
得长于文旅基金的投资期。
5.社会效益:项目实施有助于当地社会稳定与经济的健康可持续发展,
对地方产业结构转型升级具有明显的促进作用,投入运营后预计可新增带
动一批就业岗位和创造新增税收。
6.生态性:牢牢守住生态和发展两条底线,项目建设具有良好的生态
性,不会对生态环境产生不可逆的影响;项目建设不涉及生态红线,符合
国土空间开发规划。
7.退出机制。项目应具有清晰的股权投资基金退出机制,在投资协议
等相关协议里进行明确约定。
8.要求项目资本金原则上不得低于目总投资20%。项目资
金需求与使用计划合理可行,融资来源明确,筹措方式可行。原则上对项
目实施主体股权投资占比不超过该主体总股权的50%
优先支持的项目
(一)具有良好的社会效益和经济效益,承接国家层面安排部署的重
大产业项目。
+
黔东南州产业大招商政策
摘编
·96·
(二)有利于引进补齐贵州文化旅游体育产业短板和弱项,具有产业
引领性和带动性的项目。
(三)具有投资实力和管理能力的社会资本以投资、建设、经营等一
体化方式入股的项目。
(四)拥有国际国内一流的核心技术或具有创新型商业模式的项目。
(五)在国内文旅体行业有较强的影响力和带动力的企业在贵州落地
的项目。
(六)市场前景好的重大闲置低效旅游(资产)的盘活提升项目。
(七)有利于盘活存量、做优增量、提升质量的重大文旅体产业项目。
政策依据:关于印发《贵州省文化旅游产业投资基金项目遴选标准及
申报指南(试行)》的通知(贵鑫瑞和发〔202218号)
五、新动能产业发展基金
一、组建新动能产业发展基金
省级财政资设立贵州省动能产业发展基金(工商登记为准
下简称新动能基)重点持新能源电池及材料、酱酒、战略性新兴产
业等工业产业发展。
二、新动能基金的基本要素
()基金出资人代表。省人民政府授权省工业和信息化厅
作为出资,委托贵州省晟国有资产经营有限责任公(以下简称
省黔晟国资公司)作为出资人代表。
()资金来源。由省级财政统筹年度预算予以列支,按照出资人申请
拨付。
()基金管理人。贵州黔晟股权投资基金管理有限公司(以下称黔
晟基金公司)
()基金存续期限。基金存续期原则上不超过15年,具体年限由出资
+
黔东南州产业大招商政策
摘编
·97·
人协商确定,基金到期后可视情况按程序延长。
()基金管理费。直接资项目理费按照当年新增投资1%/
计提,今后视情况可作适当调整,原则上不超过基金本金产生的利息与收
益之和。管理费的兑现与年度绩效考核挂钩,当年先兑现50%,剩余50%
据年度绩效考核结果次年兑现。
()基金组织形式。采用有限合伙型,通过财政出资,撬动银行等金
融机构贷款和社会资本投资,支持工业产业发展。
三、基金管理及运营
()项目管理及决策机构。
1.设立新动能基金投资决策委员会(以下简称基金投委会)。对新动能
基金投资活动的管理、控制、运营、退出等作出审议及决策。基金投委会
由省工业和信息化厅、省国资委、省黔晟国资公司、黔晟基金公司各委派
一名,及一名投资专家共5名委员组成,实行票决制,票决2/3及以上同意
的视为通过。
2.设立新动能基金风险控制委员会(以下简称基金风控委)。审核项目
投资风险,完善风控措施,为基金投委会提供关于项目投资风险控制的客
观意见。基金风控委以行业专家为主。
()项目申报管理。各省级行业主管部门、金融机构、企业等可向省
工业和信息化厅申报项目,基金管理人也可按照市场化方式主动寻找项目,
统一由省工业和信息化厅梳理、汇总后向基金管理人推荐。由基金管理人
组织尽调及评审,出具尽调报告,报基金风控委及投委会审议决策。
()投资模式。通过直接投资及参股专项基金等方式。
()基金托管。新动能基金由省工业和信息化厅选取依法设立并取得
托管或监管资质的商业银行担任基金托管人或监管人。
()基金收益分配。基金存续期内收回的投资本金和净收益原则上滚
+
黔东南州产业大招商政策
摘编
·98·
动投资;存续期满后,按有关规定进行分配。
政策依据:贵州省工业和信息化厅贵州省财政厅关于印发《贵州省新
动能产业发展基金设立方案(修订版)》《贵州省新动能产业发展基金管理
暂行办法(修订版)》的通知(黔工信办〔20233号)
六、生态环保发展基金
贵州省生态环保发展基金,省级财政2021年预算安排10亿元(大生态
战略专项资金),带动金融和社会资本投资不低于20亿元,在项目端实现
总投入不低于30亿元。
项目申报要求
(一)重点支持领域。围绕我省生态环保产业,重点投向流域治理、
供排建设
(危)废无害化、资源化、减量化处理,土壤修复,林下经济、林业开发,
清洁生产、循环经济、节能环保、产业绿色升级等领域。
(二)申报主体要求。应为经工商行政管理机关或主管机关核准登记
的公司或企业,如申报主体为已存续企业,具体要求如下:
1.则上目申报主体与施主体应保持一致;人治理结构完
生产经营或业务开展情况良好;财务管理制度健全,财务状况经会计师事
务所审计,会计信用、纳税信用、银行信用良好。
2.公司实收资本原则上不低于1000万元,法人治理结构完善,生产经
营或业务开展情况良好。
3.企业具备为投资人的投资实现保值增值,并提供良好退出通道保障
的基本条件。
4.业未入有关部门发的负面清单或限批名单;原上近3年未
因财政、环保、财务及其他违法、违规行为受到县级以上财政部门及相关
行政执法、监管部门的处理处罚。
+
黔东南州产业大招商政策
摘编
·99·
5.不存在重大偿债风险影响持续经营的担保、诉讼及仲裁等重大或有
事项。
(三)新设立SPV要求。如申报主体为新设立的SPV公司,具体要求如
下:
1.应为经工商行政管理机关或主管机关核准登记的设立在贵州的公司。
2.公司注册资本原则上不低于1000万元,基金完成投资后,其他股东
方应在规定时间内实缴到位。
3.具备为投资人的投资实现保值增值,并提供良好退出通道保障的基
本条件。
(四)基金投资区域。基金原则上应投资在贵州省内注册的企业,包
括基金拟投资的省外企业注册地迁往贵州的以及被贵州省内企业控股收购
的省外企业等。为强化基金招商引资作用,撬动大型、优质项目落地贵州,
基金可投资通过设立子公司的形式将重要业务板块地落户贵州(子公司资
产须不低于基金对该企业的对应投资金额中贵州政府出资部分)的省外企
业,投资省外企业资金规模原则上不超过基金实缴规模的30%
行业准入要求
(一)绿色低碳循环发展的生产体系类。
1.工业企业绿色化、清洁化改造,工业固体废物无害化、减量化综合
利用等工业绿色升级相关企业;
2.生态种植、生态养殖、生态循环大生态、林业循环经济、林业开发
等大生态绿色发展相关企业;
3.能源管理、节水管理、环境污染第三方治理、环境托管服务、能源
托管服务等绿色环保产业相关企业;
4.公共设施共建共享、能源梯级利用、资源循环利用和污染物集中安
全处置、危险废物集中处置设施等产业园区和产业集群循环化服务企业;
+
黔东南州产业大招商政策
摘编
·100·
5.绿色设计、绿色材料、绿色采购、绿色制造工艺、绿色包装、绿色
运输、废弃产品回收处理等绿色供应链企业;
(二)绿色低碳循环发展的流通体系类。
1.新能源或清洁能源汽车、智慧仓储、智慧运输、标准化托盘循环共
用等绿色物流企业;
2.再生资源区域交易中心,废纸、废塑料、废旧轮胎、废金属、废玻
璃、废旧家电等再生资源回收利用企业;
(三)基础设施绿色升级类。
1.石漠化、荒漠化生态修复,区域流域环境要素整治,山水林田湖草
系统修复、污染场地及矿山修复等生态环境修复企业;
2.风电、光伏、水能、地热能、海洋能、氢能、生物质能、光热等新
能源,低污染煤电机、生物质耦合供热、天然气基础设施建设等绿色能源
企业;
3.城乡污水管网、污水收集处理设施、污泥无害化资源化处置设施、
生活垃圾焚烧发电、危险废物集中处置、医疗废物、餐厨垃圾资源化利用
等城镇环境基础设施相关企业;
4.新能源汽车充换电、加氢等配套基础设施,温拌沥青、智能通风、
辅助动力替代和节能灯具、隔声屏障等基础生态环保交通基础设施相关企
业。
(四)生态环境导向的开发模式(EOD)类
生态文明思想为引领,以可持续发展为目标,以生态保护和环境治理
为基础,以特色产业运营为支撑,以区域综合开发为载体,
采取产业链延伸、联合经营、组合开发等方式,将公益性较强、收益
性差的生态环境治理项目与收益较好的关联产业有效融合,统筹推进,一
体化实施的相关企业。
+
黔东南州产业大招商政策
摘编
·101·
项目准入要求
1.项目应符合本指南规定的投资领域,市场潜力较大,辐射带动能力
强,预期效益好;
2.项目应符合我省国民经济和社会发展规划、产业规划、土地利用总
体规划、环境保护规划等;
3.项目应完成立项、环评审批等相关手续。对因特殊原因未及时办理
相关手续的,可先行申报,但需补充情况说明(正式投资协议签署前必须
完成相关手续);
4.有完整的商业计划书或可行性研究报告,项目建设应有切实可行的
资金筹集计划和使用计划,项目运营应有合理的现金流支撑,项目投资应
有合理的资金收益及退出,保障基金投资收益和按期退出;5.项目自筹资
金不得低于项目总投资的10%;所实施项目应与申报主体主营业务一致;
6.上基金投资按照项目总投的20%匹配,金投金额最不超
过项目总投的50%,且不超过项目申报主体净资产的50%
7.核心团队成员需具有与项目实施相匹配的行业背景与技术能力;至
少有3成员须具备从事相行业的经验或背景。高级管理员和核心技
术人员具有一定的稳定性;
8.主营业务明晰、有清晰的商业模式(含生产、采购、销售、盈利模
式等)拥有权属清晰、完的专利技术及相关知识产权、有一定的技
术研发或创新能力;
9.项目财务指标可预期、可持续,能够实现生态基金预期投资收益,
项目预期经济效益主要指标原则上应保持在行业合理范围内。
10.态保护和环境理类项目优先投资EOD模式的项目;PPP
项目,必须进入全国PPP综合信息平台项目管理库。
政策依据:关于印发《贵州省生态环保发展基金项目遴选标准及申报
+
黔东南州产业大招商政策
摘编
·102·
指南(试行)》的通知(贵鑫瑞和发〔202217号)
七、“桥头堡”专项资金使用办法
1.投资区域。以凯里市、黎平县、从江县、榕江县为重点,辐射全
各县。
2.基金投向。重点围绕“十大工程”建设(产业承接聚集工程、旅
康养提升工程、特色农产品基地建设工程、综合物流体系建设工程、基础
疗组程、
“桥头堡”核心区提升工程、营商环境提升工程、人才引进提升工程等)
中市场化的重点项目、引领项目、潜力项目、招商引资项目。
3.项目申报。一是行业推送方式,主要投资区域内的县级行业主管
门重点围绕“十大工程”筛选项目,初选后向州级行业主管部门推送,州
级行业主管部门审核后向基金管理人进行推荐,同时报州发展改革委备案。
二是其他方式,由基金管理人多渠道、多途径主动寻找、发掘市场化的优
质项目,同时帮助开展产业谋划、培育在全省、在区域、在全国甚至全球
具有影响力的龙头企业和龙头项目。
政策依据:州人民政府办公室关于印发《省级财政支持黔东南州打造
对接融入粤港澳大湾区桥头堡”专项资金使用办法方案》的通知(黔东
南州办函〔202234号)
(一)国家政策
在建设用地增减挂钩节余指标跨省域调剂使用时予以倾斜支持。新增
五、东西部协作政
+
黔东南州产业大招商政策
摘编
·103·
建设用地计划指标予以倾斜支持,过渡期内,为国家乡村振兴重点帮扶县
每年每县安排划指600亩,专项用于巩固拓展脱攻坚成果和乡村
用地需求,不得挪用。在规划审批、土地利用、耕地保护等方面予以倾斜
支持。(注:国家乡村振兴重点帮扶县160个,贵州省20个,黔东南州4
个,分别是:从江县、榕江县、剑河县、锦屏县)
政策依据:关于支持国家乡村振兴重点帮扶县的实施意见
(二)省级政策
政策一
1.在“十四五”期间,对营业收入首次突破1000亿级、500亿级、100
亿级、10亿级的企业,分档分别给予一次性奖励,单户企业(一级企业)
奖励不低于200万元,最高不超过1000万元;
对新认定的国家级企业技术中心国家级技术创新示范企业、国家工业
设计中心给予次性补助100;对新认定的省级企业技术心、技术
创新示范企业、工业设计中心给予一次性补助50万元;
对新增上规入统工业企业按每户20万元的标准实施奖励;对新认定为
国家级专精特“小巨人的企业,按照每户100万元的标准给予一
奖励;
对新认定国家级中小企业公共服务示范平台,按照每户40万元的标准
给予一次性奖励;
对新认定省级中小企业公共服务示范平台,按照每户20万元的标准给
予一次性奖励;对新认定的国家级或省级民营科技企业孵化器,由科技部
门分别给予300万元或100万元的补助。
2.册地贵州省,且在境内主板成功市的企业奖励400元;
在创业板、科板上市的企业奖励350万元;对纳入省上市后备资源
并在新三板挂牌的企业,一次性奖励50万元;省内企业境外上市和并购重
+
黔东南州产业大招商政策
摘编
·104·
组上市可参照执行。
3.业投企业采取股权资方式投资于未上市中小高技术2
年(24个月)以上,凡符合《国家税务总局关于实施创业投资企业所得税
优惠问题的通知》规定的,可按照其对中小高新技术企业投资额70%
在股权持有2的当年抵该创业投资企业的应纳税所得额;当年不足
抵扣的,可在以后纳税年度结转抵扣。
4.制造业企业在开展研发活动中实际发生的研发费用,未形成无形资
产计入当期损益的,在按规定据实扣除的基础上,202111日起,再
按照实际发生额的100%在税前加计扣除;形成无形资产的,在上述期间按
照无形资产成本的200%在税前摊销。
5.按规定落实物流企业大宗商品仓储用地城镇土地使用税减半征收政
策。在政策期内,符合条件的物流辅助服务业纳税人依据有关规定,按照
当期可抵扣进税额加计10%增值税应纳税额。符合条件物流企业
可按规定享受西部大开发税收政策,按15%征收企业所得税。
6.在我省新投资注册的医药企业,投资额在1000万元(含1000万元)
以上的,从企业投产之日3年内,企业所交纳的值税地方分成部分,
由企业所在地市、县政府全额补助给企业,用于支持企业发展。项目投产
3年以上、5年以内的,以减半方式给予扶持。经认定为高新技术企业的,
减按15%税率征收企业所得税。
7.广东旅企业一次性组120()上的旅行,从江苏省、
江省、广东省、湖北省、福建省、陕西省、江西省、河南省、山东省、北
京市、上海市、天津市、重庆市境内乘包机来黔旅游(游客从同一出发地
乘坐同一包机入黔),包机在贵州省境内机场进港,旅行团在贵州住宿时
间不低于3晚且游览贵州省境内至少24A级(含)以上景区的,给予旅游
企业每架次3万元奖励。
+
黔东南州产业大招商政策
摘编
·105·
8.广旅游企业一次性组400人(含)以上的旅团,从江苏省
浙江省、广东省、湖北省、湖南省、江西省、山东省、福建省、广西壮族
自治区、四川省、云南省、河南省、上海市、重庆市境内乘旅游专列或包
车厢来黔旅游(从同一出发地乘坐同一车次火车入黔),旅游专列在贵州
省境内进站,旅行团在贵州住宿时间不低于3晚且游览贵州省境内至少2
4A级(含)以上景区的,给予旅游企每车6元奖励;旅行团在贵州
住宿时间不低于4晚且游览贵州省境内至少34A级(含)以上景区的,给
予旅游企业每车次7万元奖励;旅行团在贵州住宿时间不低于5晚且游览贵
州省境内至少44A级(含)以上景区的,给予旅游企业每车8万元奖励。
9.对社会力量兴办的非营利性养老机构,床位数达到30张及以上、符
合相关资质条件的,由省级按每张床位3000元的标准给予一次性建设补助;
市、县两级要同时给予一次性建设补助,合计补助金额不低于3000元,并
逐步提高运营补贴标准。
10.社会力量投资5000万以上兴养老机构,由市、县两政府
结合实际给予一次性奖励。
11.202111日至20301231日,对设贵州省的鼓励产业
企业减按15%
《西部地区鼓励类产业目录》中规定的产业项目为主营业务,且其主营业
务收入占企业收入总额60%以上的企业。
12.“百人领军人才”和“千人创新创业人才”入选当年分别给予100
万元、50万元奖励;考核期满后一次性对第二年、第三年的履行合同情况、
目标任务完成情况、取得业绩成果情况等进行考核,考核为“优秀”的分
别给予200万元、100万元奖励。经考核,若“百人领军人才”年度纳税达
100元至300元、千人创新创业才”年度纳税50万元150
万元的,且其他考核指标都达优秀要求的,一次性给70%的奖励。
+
黔东南州产业大招商政策
摘编
·106·
入选人员经考核为“达标”、“不合格”的,不再给予奖励。
13.招商资项目广东籍引资人奖。第产业、第三产业类项目
实际完成固定产投资额2‰给予奖励;第二产业类项目按实际完
定资产投资额的3‰给予奖励;单个项目最高引资奖励500万元。对引进世
500企业、国500强企业、国内民企500强企业到省投资兴办的
符合奖励条件要求的项目,分再一次性给予30元、15元、5元奖
励(如引进企业同时符合以上两项或三项条件的,以高限进行奖励)。
政策依据:省产业大招商工作领导小组办公室关于印发《粤黔协作产
业招商优惠政策汇编(2021年版)》的通知
政策二
广东旅游业一次性组织120()上的旅行团,江苏省
省、广东省、湖北省、福建省、陕西省、江西省、河南省、山东省、北京
市、上海市、天津市、重庆市内乘包机来黔旅游(游客同一出发地
坐同一包机入黔),包机在州省境内机场进港,旅行团在贵州住宿时间
不低于3晚且游览贵州省境内至少24A()以上景区的,给予旅游企业
每架次3万元奖励。广东旅游企业一次性组织400()以上的旅行团,从
江苏省、浙江省、广东省、湖北省、湖南省、江西省、山东省、福建省、
广西壮族自治区、四川省、云南省、河南省、上海市、重庆市境内乘旅游
专列或包车厢来黔旅游(从同一出发地乘坐同一车次火车入黔),旅游专列
在贵州省境内进站,旅行团在州住宿时间不低于3晚且览贵州省境
至少24A()以上景区的,给予旅游企业每车次6元奖励;旅行团在
贵州住宿时间不低于4且游览贵州省境内至少34A()以上景区的,
给予旅游企业每车次7元奖励;旅行团在贵州住宿时间不低于5晚且游览
贵州省境内至少44A()以上景区的,给予旅游企业每车8万元奖励。
对全职在贵州工作的广东企业高层次人才,符合条件的办理省级“优
+
黔东南州产业大招商政策
摘编
·107·
才卡”或“高层次人才服务绿卡”,和省内持卡高层次人才同等享受在子
女入学、医疗保障、旅游出行、金融服务、落户等方面的服务;鼓励申报
贵州省高层次人才引进计划,经评审入选后,按规定享受相关政策支持和
优惠待遇。
政策依据:《粤黔协作产业招商优惠政策汇编(2022年版)
(三)州级政策
广东企业到黔东南州注册的子公司或广东企业参股的黔东南公司,按
所产生的产业固定资产投资的15%予以奖补,总限额不超过500万元。
政策依据:州人民政府关于印发《黔东南州东西部协作以奖代补鼓励
广东企业投资管理办法(暂行)的通知》(黔东南府函2021117号)
(一)凯里市(黔东南高新区、贵州炉碧经济开发区
政策一
第一条
土地支持。工业企业入驻黔东南高新区或炉碧经济开发区,土
地优惠措施具体以黔东南高新区和炉碧经济开发区制定的标准执行。其他
用地:除商业、住宅项目外,新引进固定资产投资(不含购地款)在3000
万元以上的项目用地,按土地收储成本加上级提留部分作为土地挂牌出让
价格的起始价,但不得低于基准地价的70%
第二条农业支持。对新引进在凯里市注册的首次申报获得国家级、省
级、州级农业龙头企业的招商引资农业企业,分别一次性奖励20万元、10
万元、5万元;首次获国家有机食品认证、国家绿色食品认证的,别一
六、县市政
+
黔东南州产业大招商政策
摘编
·108·
次性奖10万元5元;首次获得国家农产品原产地保护标志、农产
地理标志的一次性奖励10万元;首次获得省级以上良种场、原种场或优质
种苗规模化繁育场称号的单位,一次性奖励10万元。
第三条旅游业支持。对新办固定资产投资(不含购地款)达3000万元
以上的招商引资旅游企业,从税年度起3年内,按本地县级财政收入贡
献的30%奖励给企业。通过招商资引进并新建的酒店,新评定为五星
旅游星级饭店给予500元的次性资金奖励;新评定为四级旅游星
级饭店,给100万元的一次性资金奖励;新评定为三星级旅游星级饭
给予20万元的一次性资金奖励。通过招商引资引进并新建的民宿,首次通
过国家旅游民宿标准评审并达到金宿级标准的,给50万元的一次性资金
奖励;首次通过国家旅游民宿标准评审并达到银宿级标准的,给予30万元
的一次性资金奖励。引进国际国内知名民宿品牌(安缦、悦榕庄、文华等
(或)具有相应知名度和影响的品牌),连续正常经营满3年后一次
扶持人民币100万元品牌资金。对投资额5亿元以上的国际品牌酒店项目可
采取一事一议的方式给予扶持。企业只有一次扶持机会,不能重复申报。
流业支持。新引进的在凯里市进行税务登记,据实申报营
业收入,并开具货物运输发票的招商引资物流企业,在凯里市运营三年内,
按第一年本地级财政收入贡献部分的50%;第二年本地县级财政收入
献部分的40%;第三年本地县级财政收入贡献部分的30%作为参考标准,给
予资金奖励,每户企业每年最高奖励金额不超过100万元。
他产业扶持。对新引进的商贸流通业(批零住餐业)、健
康养老、教育文化娱乐、体育休闲等招商引资服务企业,在凯里市注册成
立法人企业纳入限额以上或规模以上进行统计,年销售额(营业收入)达
5000万元(其中,教育、住宿业和餐饮业1000万元以上,康养产业营业收
2000以上)、10000万元以上其中住宿业和餐饮2000万元以
+
黔东南州产业大招商政策
摘编
·109·
上,康养产业业收5000万元上),分别给予一次性奖励5万元10
万元,以每跨10000元台阶的,给予一次性奖励10万元,每户企
累计奖励最高不超过100万元。
500强、中国500强、民营
500强和独角兽企业,投资额达20亿元以上,投产三年内实现累计
税收超过1亿元以上(增值税和所得税),给予一次性财政奖励500万元。
第七条100
后前3年可在现有省、州补贴的基础上,按照1美元奖励0.01元人民币的标
准给予奖励,单户当年最高奖励不超过50万元。
第八条上市支持。鼓励和支持注册地在凯里市的企业挂牌上市,企业
成功上市后,除省、州奖励外,对在国内主板或海外其他证券交易市场上
市的企业,给总额200万元的一次性资金奖励;在国内中小板和
板上市的企业给予总额150万元的一次性资金奖励;在新三板”
市的企业,给予总额为80万元的一次性资金奖励。对在凯里市注册成功上
市的高新技术企业,另外再给予一次性100万元补助。
第九条一事一议。凡是凯里市新引进的重大招商引资项目,可根据
“一企一策”实行“一事一议”原则决定优惠政策。
第十条其他。凡是凯新引进签订商引资协的企业(
黔东南高新区和炉碧经济开发区优惠措施不能覆盖的其他产业),可遵照
本措施执行。
政策依据:凯里市招商引资十条优惠措施(试行)
政策二
第一条对总投资3000元以上、投资200元以上、亩均
10万元以上、面积不少于15的工业类项目优先保障供地,按评估价挂牌
出让;可以按项目实际,用长期租赁、先租后让、租让合、弹性出
+
黔东南州产业大招商政策
摘编
·110·
让等方式供地。
第二条进入黔东南高新区标准厂房进行生产经营的工业生产加工企业,
自投产后12月内,年产值达到5000/(民族文化创意企业4000/
)的,给予当年所交租金的等额奖励,执行三年。第四、五年达到投资
协议约定条件,可给予当年所交租金50%额度的奖励。同时根据企业
展需要,支持企业按照折旧后评估价回购所租赁的标准厂房及土地。
第三条对在黔东南高新区缴纳个人所得税的企业高级管理人才、高层
次人才、行业尖人才,参照不高于县级地方财政贡20%的标准予
励,每人每年最高不超过50万元,每个企业不高于10人,奖励时间为投产
后连续3年。同时,上述人员在教育医疗等方面享受优先待遇。
第四条在协议约定时间内到规模以上工业企业标(或规上企
改扩能项目),且年产值在上年度基础上增长30%以上、县级地方财政贡献
增长10%以上的规模以上工业企,可以给予不高于县级地方财政贡献
量部分50%的奖励,最高不超100万元。连续三年达到经济贡献奖励条件的,
第三年可以给不高于县级地方财政贡献增量部90%的奖励,最高
300万元。
第五条对主营业务收入达2000万元以上的招商引资企业,对生产厂
房及除办公楼、宿舍以外配套辅助设施的城市基础设施配套费鼓励企业先
出资办理,所产生全部费用按其县级地方财政贡献由财政资金进行补贴扶
持,直至补贴完毕。
第六条区内通过认定的高技术企业一次性给5万元奖励;高
术企业迁移到黔东南高新区落户的,一次性给予5万元奖励。上年度R&D
200500万元、5001000万元、1000万元以上的企业,按照相关文件
规定的允许加计扣除的研发费用分别给予3%5%8%的资助,最高不超过
100万元。
+
黔东南州产业大招商政策
摘编
·111·
第七条拥有3项以上()自主知识产权,且其中至少2项为有效发明专
利,企业产值达到2000万元及以上且纳税额达100元的企业
次性给予5万元奖励;拥有4项以上()自主知识产权,且其中至少有3项为
有效发明利,企业年产达到5000万元以上且年纳税额达200万元
的企业,一次性给予10万元奖励。
在黔东南高新区投资大健康医药产业、大数据电子信息产
业、民族文化创意产业的企业,可通过帮助其申请贵州省中小企业信贷通、
协调凯里市级担保公司给予融资支持。
第九条对落户区内的大健康医药企业可给予以下扶持:
1.对从省外新引进医药企业及其上下游配套产业,签订投资协议5000
万元(含以上),建成投产后。按照固定投资额的3%给予企业补助,最高不
超过200万元。对固定投资3000万元(以上)技改扩能项目,按
济贡献地方增量部分的30%予以一次性奖励,最高不超过200万元。
2.对将药品生产批件的生产地址变更到区内的大健康医药企业,该药
品上年度营业1000万元()2000元的,给予最20万元奖励;
药品上年度营业收入2000万元(含以上)的,给予最高30万元奖励。单个企
业年度最高奖励200万元。
3.对新获得保健食品批准字号(卫食健字号或备案号)、特殊用途化
妆品和特殊医学用途配方食品批准文号的特色健康产品,在本地投产并上
市销售1年,未出现质量、安全等事故,单品销售收入超过500万元,按单
品销售收入给予1%的扶持奖励。
4.对新获批国家标准的中药配方颗粒品种,单品补助30万元;对在国
家药典委员会新完成备案的省中药配方颗粒标准,单品种补助3万元,
每个企业每年高不超过200补助。对医药企业引进独家药品种、
独家医保品种、新药、全国独家产品,在本地投产并上市销售的,按照企
+
黔东南州产业大招商政策
摘编
·112·
业当年县级地方财政贡献的50%给予奖励,最高不超过200万元。
5.对在区内投资建设苗侗民族医药的国家级、省级研究机构分别按照
固定资产总投资的20%10%给予科研经费支持,对成功转化且市场销售额
达到2000万元以上的,一次性给予50万元奖励。重点支持医疗器械、医疗
辅料、苗侗医药制剂等成果转化,经认定,按该品种实际销售金额的5%
予奖励,最高200万元,单个企业每年最高500万元。
6.支持顶尖科技人才和创新团队入驻黔东南高新区,对重点实验室等
重大创新平台、重点生物医药企业或机构引进的优秀青年人才,经认定,
对其在区内购买的凯里市首套住房给予10万元一次性补贴。
对成功申报为规模以上工业企业的大数据电子信息类企业,
可享受物流补贴或免费物流专线运输支持。物流补贴标准为企业县级地方
本级贡献10%30%补贴年限1-3年,年最补贴不超50万元。
享受免费物流专线运输支持的数据电子信息类企业,年限最长不超过3
年。
第十一条凡是黔东南高新区新引进的重大招商引资项目,可根据“一
企一策”实行“一事一议”原则决定优惠政策。
第十二条本措施自发布之日起施行,由黔东南高新区管委会负责组织
实施,并由其负责进行解释。遇国家、省、州相关政策调整另有规定的,
从其规定。
政策依据:黔东南高新区招商引资十二条优惠措施(试行)
政策三
第一条 土地支持
1.凡新引进的符合凯里市城镇建设和土地利用规划,且固定资产投资
3000万元以上、投资强度在200万元/亩以上,亩均税收高于10万元//
年,供地面积不少于15亩以上的工业类项目优先保障供地需求,出让地价
+
黔东南州产业大招商政策
摘编
·113·
按《全国工业用地出让最低价标准》执行。对于以玻璃加工为重点的新型
建材产业,铝及铝加工为主的基础材料产业和以酸汤、蓝莓加工为重点的
特色生态食品加工业等重点扶持产业,对应的项目用地出让价按照《全国
工业用地出让最低价标准》的10%70%执行。
2.供地方式。鼓励采取长期租赁、先租后让、租让结合、弹性年期出
让等方式供应工业用地,出让土地依法需以招标拍卖挂牌方式供应。以租
赁方式供应土地的,承租方可凭土地租赁合同和缴款凭证办理有关规划、
报建等手续。使用租赁土地达到合同约定转为出让土地的条件后,经出租
人同意,可将承租的全部或部分土地按协议方式办理出让手续。工业用地
弹性年期出让,出让年限原则上按1030年确定,工业用地在取得弹性年
期土地使用权期满时,企业可申请延长土地使用年期并签订出让合同的补
充协议,经批准并按相关规定补缴土地出让金后,办理不动产变更登记。
第二条 标准厂房支持
鼓励企业进驻标准厂房,在园区设立中小企业孵化园,凡入驻标准厂
房的企业,自目投产后12个月,一楼产值强度达5000/(年·
方米),二、、四楼产值强度达3000/(年·平方米)企业达到
协议约定条件后,实行政策奖励“三免两减半”(前三年免缴全额租金,
后两年租金减半缴纳)。具体执行方式:先交后奖(投资协议书签订之日
起三个月后开始计算,前三年以当年当月进行收缴,次年当月进行奖励,
4年、第5年租金减免50%奖励;免租期内,项目方仍需缴纳物业费)。
第三条 城市基础设施配套费支持
主营业务收入达到2000万元以上的招商引资企业,对生产厂房及除办
公楼、宿舍以外配套辅助设施的城市基础设施配套费由企业自行缴纳,所
产生全部费用按其所缴纳地方财政贡献值由财政资金进行奖励,直至奖励
完毕。
+
黔东南州产业大招商政策
摘编
·114·
第四条 人才支持
1.对在炉碧经济开发区缴纳个人所得税的企业高级管理人员(包括董
事长、副董事长、总经理、副总经理、监事会主席、总经济师、总会计师
或相当层职务的人员,个企510人),按照实纳个人所得税
县级财政收入献的50%标准以奖励,每人每年最高不超50万元,
奖励时间为投产后连续3年。
2.外来投资者、高层次人才及行业顶尖专业技术人才在子女入托就学
等方面享受优先待遇。
第五条 升规入统支持
对新申报规模以上工业业且连续2年达到规模以工业企
的,在省、州奖励基础上一次性给予20万元的入规奖励。奖励资金经统计、
工信等有关部门认定后兑现。
第六条 科技创新支持
拥有2项以上(含)自主知识产权,且其中至少1项为有效发明专利,
企业年产达到2000元及上且年纳额达100元的企业,一
给予5元奖励;拥有4以上含)自主知识产权,且其至少有2项为
有效发明利,企业年产达到5000万元以上且年纳税额达200万元
的企业,一次性给予10万元奖励。
第七条 企业壮大支持
在协议约定时间内达到规模以上工业企业标准(或规上企业技改扩能
项目),且年值在上年度基础上增长25%以上、县级地方财政贡献增
10%以上的规模以上主导产业、优势产业和特产业企业,可以给予不
于县级地方财政贡献增量部50%的奖励,最高不超100万元。连续三年达
到经济贡献奖励条件的,第三年可以给予不高于县级地方财政贡献增量部
90%的奖励,最高不超300万元。
+
黔东南州产业大招商政策
摘编
·115·
第八条 融资支持
凡在炉碧经济开发区投资玻璃产业、陶瓷产业、铝及铝加工产业、特
色食品的企业,可通过帮助其申请贵州省中小企业信贷通、绿色发展基金、
协调凯里市级担保公司给予融资支持。
第九条 一事一议
凡是炉碧经济开发区新引进的重大招商引资项目,可根据“一企一策”
实行“一事一议”原则决定优惠政策。
第十条 其他
本措施自发布之日起施行,由炉碧经济开发区管委会负责组织实施,
并由其负责进行解释。遇国家、省、州相关政策调整另有规定的,从其规
定。
政策依据:贵州炉碧经济开发区招商引资十条优惠措施(试行)
(二)丹寨县
政策一
1.对装备制造产业和电子信息产业企业的物流费用进行补贴。县域内
的装备制造企业和电子信息企业产生的物流费用县人民政府给予补贴,按
企业当年所交值税总额30%额度进行补贴,当年增值税额10万元
及以上的即可享受补贴,一年结算一次,每年最高补助200万元。
2.鼓励装备制造企业和电子信息企业采购丹寨县境内的原材料和产品,
凡是采购丹寨境内企业生产的原材料(包括企业生产的产品),县政府按
成交总价款10%补助(以在县国税局开票的数据为准),一年结算一
每年最高补助100万元。
政策依据:丹寨县人民政府关于支持装备制造和电子信息产业加快发
展的通知(丹府发〔20155号)
+
黔东南州产业大招商政策
摘编
·116·
政策二
1.对被授予国家级、省级电子商务示范园(基地)或项目,国家级给
50万元、省级给予20万元的一次性奖励。
2.平台建设补助。为我县企业、网上商城、网店提供服务的第三方电
子商务公共服务平台,与本县实际合作单位(含网店)达50户以上,且软
硬件总投资达30万元(以发票及实际工程量、实物等为依据)以上的,按
投资总额的50%给予一次性补助,最高不超过30万元。
3.O2O体验馆装修补助。主要示和销售丹寨特产文化旅产品
营业面积200方米以上、装方案及预算经县电商办审核通过的企
或个人,按装修投入金额的50%给予补助,最高不超过30万元。
4.对利用各类平台代运营、代推广、代销售等方式,与本县企业(网
店)合作达50家以上,产品上线数达500个以上,年网上销售额达500万元
以上的第三方运营服务商,当年按网上销售额的2%进行奖励,最高不超过
100万元;对年网上销售额实现200万元以上的各类网店,当年按网上销售
额的2%进行奖励,最高不超过50万元;对年网上销售额实现100200万元
的网店或服务中心,当年按网上销售额的1%进行奖励。
5.对每年帮助在册贫困户10户以上,利用网络实现销售总额达10万元
以上的企业,按销售总额的10%进行奖励,最高不超过20万元。
6.凡落户本县的知名电子商务平台,或对本县电子商务发展有重大影
响的项目,实行“一事一议”政策。
政策依据:县人民政府办公室关于印发丹寨县促进电子商务发展奖励
补助实施办法(试行)的通知(丹府办发〔201640号)
政策三
1.业入第一年,从签协议之日起的7个工作日,根据本
中第三条第一款要求按实际使用厂房情况,向政府指定账户汇入拟投项目
+
黔东南州产业大招商政策
摘编
·117·
的厂房预付租金。入驻协议签订之日起一年为期,企业所产生的企业所得
税高于所预付的厂房租金数额时,将预付的租金全额返还;企业所产生的
企业所得税不等或小于所预付的厂房租金数额,预付的厂房租金则冲抵厂
房使用租金,不予退还。
2.企业生产第二年起,根据本办法中第三条第一、二、三款按实际使
用面积缴纳厂房租金。入驻协议签订之日起每满一年为一期,企业所产生
的企业所得税高于所预付的厂房租金数额时,将预付的租金全额返还;企
业所产生的企业所得税不等或小于所预付的厂房租金数额,预付的厂房租
金则冲抵厂房使用租金,不予退还。
3.为支持企业发展,入驻的企业前三年在本县所交纳企业所得税金额
高于所使用厂房租金数额时,将享受零租金政策。三年期满后,按市场价
交纳厂房租金,不再享受零租金的优惠政策。
4.企业订协议起7工作日内,根本办法中第三条第款要
求按实际使用厂房情况,向政府指定账户汇入厂房的预付租金作为拟实施
项目的保证金协议签订之日起一年为期,企业在本县发展基建设800
亩以上,带动合作社8个或动贫困30户以上,将预付的厂房租金全额
退还;若发展基地建设500亩以上,带动合作社5个或带动贫困20户以上,
则退还所预付厂房租金的一半数额;若发展基地建300亩以,带动合
作社3或带动贫困户10上,则退还所预付的厂房租金的三分之一数
额;若企业没有在本县发展基地,没有带动合作社或贫困户,根据本办法
第四条第一款之规定减免。
5.企业生产一年后,根据本办法中第三条第一、二、三款按实际使用
面积缴纳厂房租金。入驻协议签订之日起满一年为一期,企业在原基础上
在本县继续发展基地建设500亩以上,带动合作社5或带动贫困户30户以
上,则全额退还;若发展基地建设300亩以上,带动合作社3个或带动贫困
+
黔东南州产业大招商政策
摘编
·118·
20户以上,则退还交租金的一半数额;若发展基地建设100以上
带动合作社2个或带动贫困户10户以上,则退还所交租金的三分之一数额
若企业没有在本县发展基地,没有带动合作社或贫困户,根据本办法第四
条第一款之规定减免。
6.为支持企业发展,入驻的企业前三年在本县所发展的基地、带动合
作社或贫困户达到本规定第四条第二款时,将享受零租金优惠政策。三年
期满后,按市场价交纳厂房租金,不再享受零租金优惠政策。
7.结合企业实际需要,由企业向金钟经济开发区招商引资和投资促进
局或丹寨县金建投资发展有限责任公司申请,根据企业生产经营的状况,
厂房租金可享受“三免两减半”政策。
政策依据:县人民政府办公室关于印发《贵州金钟经济开发区标准厂
房入驻管理规定(试行)的通知》(丹府办发〔201750号)
(三)黄平县
1.电子、软件及其上下游配套产业,文化创意、旅游产品制造及其上
下游配套产业;食品药品及其上下游配套产业,符合环保要求、环境保护
规划和相关法律法规。投资强度不低于500/㎡,或提供就业岗位不低于
1/30㎡,或产出强度不低于1000//年(按实际使用建筑面积计算)。
与贵州省黄平县舞源投资开发有限责任公司签订标准厂房租赁合同,并每
年预缴一年的租金(满一年后按照本办法第四条第一款给予结算)和物业
管理费。
2.1-3年,按第一层5//月,第二层4//月,第三层以上3
//收取;4-5,按第一层6//,第二层5//,第三层
以上4//月收取;第6年开始,每两年按上年租金递增10%收取。
3.3年内,每年达到本办法二条第三款条件其中一条件的,
免当年租金,达不到条件的,按完成比例退还租金。
+
黔东南州产业大招商政策
摘编
·119·
政策依据:黄平县槐花工业区标准厂房管理办法(试行)(黄工管通
20144号)
(四)镇远县
政策一
1.企业投资新建厂房,需征收工业用地的企业,按固定资产投资额度
给予土地挂牌价格地方留存部分不同比例的资金支持:固定资产投资1000
万元至2000元的企业投产后参土地挂牌价格地方留存部分30%以内额
度给予项目建设资金补贴2000万元至5000万元的参照土地挂牌价格地方
留存部分40%内额度给项目建设资金补贴5000万元以上照土地挂
牌价格地方留部分60%内额给予项目建设资金补贴;属新技术项
目参照土地挂牌价格地方留存部分80%以内额度给予项目建设资金补贴。
2.业按约定时间投产产的,自投产之日3年内,每年给
业实际缴纳增值税地方留存部分不同比例的资金扶持:增值税1000万元以
下的视企业贡献参照所缴税款地方留存部分的30%以内额度给予项目建设
资金贴,2000万元5000万元参照所缴税款地方存部分40%以内
额度给予项目建设资金补贴5000万元以上的参照所缴税款地方留存部分
50%内额度给予项目建设资金补,属高新技术项目参照所缴税款
方留存部分的60%以内额度给予项目建设资金补贴。
政策依据:县人民政府办公室关于印发《镇远县工业发展资金设立管
理暂行办法的通知》(镇府办函〔2019121号)
政策二
1.条开发区标准厂房实行"租售并举"政策,鼓励入驻企业购买,售价
原则上按照厂房评估价进行出售,也可结合入驻企业的固定资产投资、产
业带动和税收贡献等情况"一企一策"进行商议。
2.厂房租金优惠。入驻企业达到投资合同约定的投资效益,厂房租金
+
黔东南州产业大招商政策
摘编
·120·
原则上实行"三免两减半"政策(前3年免费租用,后2年减半收取)。入驻
企业达不到投资合同约定的投资效益,厂房租金无优惠。厂房年租金实行
预交,入驻企业投产一年后,发区组织相关部门对入驻企业进行"年产
对月"考核,考核达标,工经公司在5个工作日内将厂房预交租金无息退还
入驻企业,下一年度租赁周期参照上一年度租赁周期执行。
3.符合开发区首位产业及上下游配套产业的项目入驻标准厂房可采取
“一事一议”方式给予优惠奖励。
4.鼓励入驻企业积极申报高新技术企业、入库等,达到条件给予省、
州、县优惠政策奖励。
政策依据:县人民政府办公室关于印发《贵州黔东经济开发区标准厂
房管理办法(试行)的通知》(镇府办发〔202113号)
(五)三穗县
政策一
1.对于农业产业结构调整和林下经济主导产业自主投入5000万元以上,
覆盖带动全县发展的优强企业,县级采用联营、入股等方式,按照不低于
总投入资金30%的原则整合资金共同发展。
2.对创建“百千万”产业示范基地,主导产业集中连片,流转土地面
积在200499亩之间,按100/亩的标准给予土地流转补助费;流转土地
面积在500999亩之间,按150/亩的标准给予土地流转补助费;流转土
地面积在1000亩以上,按200/亩的标准给予土地流转补助费;对创建坝
区“百千万”产业示范基地,主导产业集中连片,土地流转率达到100%
单品连片种植覆盖率达80%以上、基地亩产值达13000元以上的“百千万”
产业基地,分别按照百亩产业5元、千亩产业基地20元、万亩产
业基地50万元的标准给予产业示范基地一次性奖励。
3.积极发展林下经济,鼓励做大猴头菇产业。对集中连片种植基地,
+
黔东南州产业大招商政策
摘编
·121·
菌棒达30万棒以上100万棒以内、100万棒以上500万棒以内、500万棒以上
的,分别按5元、10万元、50万元的标准给予产业示范基地一次性奖
励。
4.对符合县级产业规划的经营主体通过扶贫再贷款对其提供低成本资
金支持,县级政按企业实际获得贷款给予贴息50%,贴息期限不超过
年;鼓励保险机构稳步拓展农业保险品种,扩大农业保险覆盖面。
5.对符合扶贫项目扶持的坝区和林下经济“百千万”产业示范基地,
经专家评审后,积极帮助按程序分别申请200元以500万元以内、
500万元以上的扶贫项目扶持。
6.鼓励和支持“党社联建”打造林下经济产业示范基地,对基地建设
自筹资金大于目总投入资金30%的,剩余缺口资金可按照财扶贫项目
资金申报程序申请扶贫项目资金支持。
7.对无财政扶贫项目资金支持,林业产业实施主体自行发展林下经济
主导产业(猴头菇)的示范基地,种植规模30万棒以上,带动农户就业20
户以上,持续种1以上,林业产业发展基地实施主体可按大棚建设
投入资金30%请产业一次性展资金补助,每个基地最高补助累计
超过20万元。
8.鼓励各经营主体规模化发展猴头菇、羊肚菌“两菌”产业,对无财
政扶贫项目资金、无大棚建设补助资金的“两菌”产业基地,集中连片种
植猴头30万棒以上,带动农户就20户以上,持续种植1年以上,每棒
可申请0.1产业一次性补助资金,每个基地最高补助不超10元;
中连片种植羊100亩以上的产业发基地,带动农户就50户以
每亩产鲜菇300斤以上,持续种植1年以上的,每亩可申请1000元的产业一
次性补助资金,每个基地最高补助不超过10万元。
9.加大5008000
+
黔东南州产业大招商政策
摘编
·122·
(含8000)以上不12000元的,每亩补助1000元;12000元(含12000
元)以上不足20000,每亩补1200元;20000元(含20000)以
的每亩补助1400元,由经营主体所在乡镇(街道)积极帮助按程序进行奖
补申报。
10.对农企业自行投资建设的环设备施,竣工验收合格后,
环保部门认可,正常运行的,按实际投资额的5%给予一次性补助。
11.鼓励业产业化经营企业进行产品深加工,对年内新增主
涉农产业加工产值收入达2000万元以上的农业产业化经营加工企业,按主
营涉农加工产值产业收入的1%给予一次性奖励。
12.对当被评为国家级龙头涉农业、级龙头涉农企业、州级
头涉农企业,分别予以一次性奖励企业100万元、20万元、5万元。同一企
业同年多级获评的,按最高标准一次奖励。
13.对当获得国家驰名商标、贵省省质量奖、贵州省省长质
提名奖的规模以上的涉农企业,分别一次性奖励企50万元、30万元、10
万元;对当年获得有机认证、绿色认证、地理标志保护产品的企业(有机
认证种植300以上,有机畜禽类产品养殖企业需连续认证三以上
一次性奖励企业30万元。同一企业的产品同年多级获评的,按最高标准一
次性奖励。
14.对于持制定国际标准、国家准、业标准(含贵州省地方
准)、黔东南地方标准并发布实施的单位,一次性每项分别给予主持单位
30万元、20万元、10万元、6万元奖励。
15.对吸建档立卡贫困劳动力、地扶搬迁劳动力就业、就业
难人员、零就业家庭人员稳定业,并签1以上劳动合同的,按每人
500元的标准,给予生产经营主体一次性补贴。
16.对吸建档立卡贫困劳动力、地扶搬迁劳动力就业的和参
+
黔东南州产业大招商政策
摘编
·123·
企业吸纳就业困难人员、零就业家庭成员等四类人员,给予经营主体一定
期限职业培训贴,按照原则上每人每月不超过500元,按实际吸纳就
月数进行核算,最长不超过6个月。
17.
(含两年)以上的国家认可的高级职称人员(除在职国家工作人员外),
5000/年·人的标准给予生活补助。
政策依据:中共三穗县委三穗县人民政府关于支持农业产业化和林下
经济产业发展的若干意见(穗党发〔20204号)
政策二
1.对使用土地自建生产用房,年均产值达到150万元/亩,且年均纳税
达到3万元/亩及以上的工业企业,按1万元/亩的标准连续奖励三年。
2.对企业新建固定资产投资达1000万元以上的工业项目,按固定资产
投资总额的2%一次性给予补助,补助资金额度上限500万元。
3.利用工业发展基金、扶贫资金、上级专项资金等,以股权等方式重
点支持有发展潜力的规上、拟入规、其他中小微企业,作为项目资本金投
入在穗工业投资项目。积极为企业办理不动产权证,利于企业融资担保抵
押。
4.依托省设立的贷款代偿和补偿资金池,对中小微企业的银行融资,
由政策性担保机构实行无资产抵押担保服务。
5.将企业的纳税额与银行授信有机结合,采取差别化的贷款额度设计。
根据不同的区域、税种、客户纳税信用等级、在相关银行开立基本结算户
及纳税账户情况,为企业设置数倍于缴税金额的贷款额度上限,扩大企业
的融资渠道,缓解融资。
6.对新引进的外商投资企业,开工建设生产经营场地建设费(含环保
设备等费用)给予30%的支持。
+
黔东南州产业大招商政策
摘编
·124·
7.对规上企业和拟入规企业,可凭订单合同或企业应收账款等,借用
工业发展专项金不超过300用于企业流动资金周转(免息),借
款期限不超过6个月。
8.对新入规上工业统计库的企业,后续年度保规的分两个年度共奖励
100万元,入规当年奖励50万元,第二年产值实现正增长再奖50万元。
9.产值2000万元1亿元上工业企业,年产值较上年
增长20%以上的,奖励30万元,年产值较上年同比增长30%以上的,奖励50
万元。对年产值达到亿元及以上的规上工业企业,且年产值较上年同比增
10%以上的,奖励40万元,年产值较上年同比增20%以上的,奖励60
元。
10.对工企业扩大产能实际发生设备迁安装、生产线改造、
房租赁装修等费用实行“一事一议”给予支持,上限支持500万元。
11.对规企业和拟入规企业,对业企实行产品运输物流补助
按照企业实际物流运输费用的10%进行补助。
12.对三籍工人新进工业企业持就业过一个自然年的,一般
人和建档立卡困户(含易搬安置户)分别按照0.12万元/人和0.2万元/
人标准一次性补助给企业。
政策依据:县人民政府印发《关于进一步支持工业经济高质量发展的
政策措施》的通知(穗府发〔202013号)
政策三
1.入驻企业享受国家新一轮西部大开发和我县招商引资相关优惠政策。
2.入驻企业,积极申报入库,纳入规上企业进行管理的,可根据合同
约定,按其投资行业分类、年产值及税收等条件指标给予具体优惠。
3.驻企年产值达到租合同约定产值的,1-3年租金全返还,
4-5年返还一半,具体以租赁合同约定为准。
+
黔东南州产业大招商政策
摘编
·125·
4.的生型企业经营三年后,同时满以下条件的,4-6年租
金实行全额返还。一是固定资产投资强度达到每平方米3000元。二是年度
缴纳税收实现平方100元以上。三是就业人数100平方不低5
或总人数200以上(高新企除外)。四是年主营业务收入达到每
方米3000元。
5.具备本条34款条件的企业其租金交由园投公司代管,年终由开发
区管委会组织相关部门考核兑现。
政策依据:县人民政府关于印发贵州三穗经济开发区标准厂房管理办
法的通知(穗府发〔20186号)
政策四
1.进驻园区工业企业的“五通一平”由经济开发区负责,原招商落户
园区内的工业企业按原签订相关合同、协议执行。
2.工业企业自行投资建设的环保设备设施,经环保部门竣工验收合格
额的5%性给
外)。
3.对投资强度150万元/亩-250万元/亩的工业项目,在符合城镇建设
和土地利用规的前提下,优先保障工业项目用地,且对投资度达250
万元/及以上的工业项目实行点供”方式供地。对优先发展产业且
用地集约的工项目,可按不低于所在地土地等别最低标准的70%执行,
并按程序办理工业用地登记手续。
4.项目地挂牌出让保证金,按应缴总保证金额度50%进行
缴纳,工业项目用地一次性缴纳土地出让价款有困难的,允许分期缴纳,
但原则上不得超过1年,特殊项目可以约定在2年内全部缴清。重点工业企
业和重点工业项目用地申报可参照批次用地方式依法报批。支持工业企业
采用长期租用、先租后让、租让结合的工业用地供给方式。
+
黔东南州产业大招商政策
摘编
·126·
5.对租赁园区国有厂房的工业企业,按《贵州三穗经济开发区标准厂
房管理办法》文件执行。
6.税务机关每年定期向社会公布全县工业企业税费清单和税费优惠清
单,严禁在清单之外向企业收取任何税费,认真落实税法规定范围的增值
税抵扣或减免、所得税减免、出口退税、其他行政事业性收费等税费优惠
政策,工业企业行政事业性收费项目一律按最低标准执行。
7.入园工业企业新建工业生产性建筑,所收取城市建设配套费由县财
政全额安排用于企业基础设施建设。
8.对年纳税所得额低于50万元(含50万元)的小型微利企业,其所得
按减50%计入应纳税所得额,按20%的税率缴纳企业所得税。安置残疾人小
微企业,单位支付给残疾人的工资可在企业所得税前据实扣除,并可按支
付给残疾人实际工资的100%加计扣除。
9.企业办的各类学校、托儿所、幼儿园、非营利性医疗机构、敬老院
自用的房产,免征房产税。对营利性医疗机构,自其取得执业登记之日起,
3年内对自用的房产免征房产税,3年免税期满后恢复征税。
10.经批开山填海整治的土地和造的弃土地,从使用的月份
免征土地使用税5年,第6年至第10年减半征收。
11.安置疾人就业的单位(包括利企、盲人按摩机构、医疗
构和其他单位,不包括个人),在一个纳税年度内凡同时满足规定的条件,
可免征其自用土地该年度城镇土地使用税。
12.工业业应缴纳的土地使用税额缴后,按照地方所得部分
80%的标准用县工业企业发展基金予以奖励。
13.对纳人销售自产的利用风力产的力产品,实现增值税即
即退50%的政策。出口货物劳务企业实行免征和退还增值税。
14.对年税金增长15%以上且年纳税额在50万元以上的工业企业,其主
+
黔东南州产业大招商政策
摘编
·127·
营业务收2000元以上,按新税收级所得部分的50%的标准用
业企业发展基金给予奖励,最高奖励金额不超过50万元。
15.工业业从县级以上(含县级各级府财政部门及其他部门
得的专项财政资金,凡符合相关条件的,可作为不征税收入进行企业所得
税处理。确因短期资金周转困难的工业企业,经省级以上税务机关依法批
准后,可延期缴纳税款,延缴限最长不得超3月。禁提前向工
企业重复征税、征过头税、提前征税。
16.被认定为经营1困难、不能按照当地最低职工工资标准发放工资的
企业,可申请缓缴社会保险费工伤保险除外),缓缴期不超过3个月,
缓缴期间不影响参保人员享受社会保险待遇。
17.自工商登记注册之日起3年内,对安排残疾人就业未达到规定比例、
在职职工总数30人以下(含30人)的小微企业,免征残疾人就业保证金。
18.县财设立工业企业发展专项金,行县级财政扶持机制,
依法生产经营且税收缴纳和产值贡献较大的工业企业给予扶持。我县工业
企业发展专项基金从2018年起安排2000万元,并纳入财政预算。之后的年
份按不低于上一年的实际应扶持基数纳入预算,若实际需要超出当年预算,
县财政按程序予以据实追加拨付。
19.对有场、有销路、有订单,暂时乏流动资金的工业企业
企业可用不动产、动产、订单等方式抵押,可从工业企业发展专项基金中
借支不超过200万元的资金用于生产周转。
20.县内金融构采取第三方担保款等方式支持工业业融资贷款,
实行“最高额抵押登记、一次授信循环使用”贷款服务。
21.县内融机构对面临暂时流动金困的重点工业企业不降低
有授信额度,对资产负债率较高,但在警戒线以下的重点工业企业不降低
信用等级。对长期盈利能力强、技术先进的企业,不搞“一刀切”抽贷。
+
黔东南州产业大招商政策
摘编
·128·
22.对新园的国家工信部、科技、省信委、科技厅等部门认
的新兴产业、高新技术产业的工业企业贷款实行财政贴息三年政策优惠,
第一年按照同期贷款基准利率计算利息金额的50%给予贴息,第二年按照
同期贷款基准利率计算利息金额的40%给予贴息,第三年按照同期贷款基
30给予年度
l00万元。
23.销售收入1000元并比上增幅20%以、税收基50
元以上且增幅15%以上的工业企业,当年内新增流动资金银行贷款,按照
同期贷款基准利率计算利息金额的30%给予贴息,单户企业贴息总额不超
l00万元。
24.工业业注册商标时,除享受家、、州政策外,县财政再
予注册费50%补贴。鼓励工企业积极申报各类质量管理体系认证
对当年获得省级以上质量认证的,一次性奖励企业50万元;对当年获得国
家级著名商标、名牌产品的工业企业,一次性奖励企业50万元;对当年获
得省级著名商标、名牌产品的工业企业,一次性奖励企业30万元;对当年
获得省级以上绿色食品、有机产品认证的企业,一次性奖励企业20万元。
同一企业的产品同年多级获评的,按最高标准一次奖励。
25.对被新认为国家或省级技术新中心、重点实验的工业企业,
除享受国家、省、州政策外,财政再一次性分别奖励100万元、50元,
新认定为国家或省级企业技术中心、技术创新示范企业的,除享受国家、
省、州政策外县财政再一次性分别奖100元、50元,新认定为
新技术企业的工业企业,除享受国家、省、州政策外,县财政再一次性奖
20万元。
26.对入创新型领军企业、科技小巨企业、科技型小巨人成
企业、科技型种子企业、经认定的大学生创业企业,除享受国家、省、州
+
黔东南州产业大招商政策
摘编
·129·
政策外,一次性分别奖励300万元、30万元、15万元、10万元、5万元。
27.支持创空间建设,除享受国、省州政策外,县财政再一
性奖励3万元;对经认定为国家级或省级的众创空间(新型孵化器,除
享受国家、省、州政策外,县财政再一次性分别给50万元、25万元的能
力建设资金支持。
28.鼓励业企业建立技术中心、品研中心等研发机构,提升
业研发能力,经县工信、科技、发改等部门认定,除享受国家、省、州政
策外,县财政再给予建中心(站)5万元补助。
29.对符电力直接交易条件的工企业积极协助客户办理电力
供交易手续,降低工业企业生产成本。
30.县级培训构有计划有组织地工业企业用工开展费技能培训;
对企业新录用人员,与企业签6个月以上期限劳动合同,在劳动合同签
订之日起6个月内,企业自主开展培训的,经县级培训机构核准,按500
/人的标准补助给企业。
31.对与业企业签订劳动合同,在同工业企业务工两年(含
年)以上的高级技师、高级工程师、高级经济师等国家认可的高级职称人
员,经县人社门核准认可,5000/、人的标准给予生补助
在企业工作一年以上,新评定高级工程师、工程师、高级技师、高级技工
职称的评定费用实行全额补贴。
32.鼓励业企业技能人才参加国、省州行政机构(委托)举
各类技能大赛,对获得国家级技能大赛一、二、三等奖的分别给予个人10
万元、8万元、6元一次性奖励,对获得省级技能大赛一、二、三等奖的
分别给予个7万元、5万元3元一次性奖励。获得州级技能大赛一
二、三等奖的分别给予个3万元、2元、1元一次性奖励。对工业企
业董事长、总经理参加省级以上工业企业行业生产或经营类提升管理培训
+
黔东南州产业大招商政策
摘编
·130·
(不含学历教育和商学院),经工信部门核实认定,凭证书和发票给予培训
学费全额补助。
33.工业企业法人代表、职工及其家属的户口可以自愿迁入或者迁出,
其家属就业及子女在入学等方面与本县居民享有同等的权利。
34.对在县企业工作的全日制硕研究以上学历人员,为其提
不少于100的住房租赁补贴。同时,一次性给予所在企业加社会保
一年以上的硕士2万元、博士3万元的生活补助。
35.工业业参加由国家、省、州县各政府部门组织的省内外
境外各类工业产品展览展销会议或活动,对企业人员交通费、食宿费、产
品运输费、企业展位费等费用给予80%补贴。
36.积极织推荐县域工业企业产进入黔东南州中小企业推荐
录》,县直各部门、事业单位、人民团体和国有企业在实施项目时,需优
先采购本县中小企业产品。
37.支持业企创安”。新创安全准化三级、二级、一级
业企业(矿山、烟花和危化品企业除外),规模以上的工业企业由县财政分
别补贴3万元5万元7万元工作经费,规模以下的工业企业,由县财政
分别补贴1万元、3万元、5万元工作经费。
38.支持工业企业“入规”。对当年新“入规”的企业(注销后新注册
的除外),除州级奖励10万元外,县财政再奖励40万元。
39.支持工业企业技改。工业企业当年引进单台价款达10万元以上(
10万元,不含税)的先进装备,给予10的财政补贴,单个企业(集团)
补贴金额不超过100万元。
40.支持业企业上市。对注册在县,在境内主板成功上市的
业奖励200万元;在中小板、创业板成功上市的企业奖励150万元;对纳入
州级上市后备资源库并在新三板挂牌的企业奖励30万元。
+
黔东南州产业大招商政策
摘编
·131·
41.实行县级领导干部系服务企业制度,重点解决企业(
目)准入落地问题、订单服务问题、市场开拓问题、物流成本问题、招工
用工问题、资金短缺问题、乱摊派乱收费等服务事项。鼓励工业企业生产、
复产、满产、达产,提高工业产值和增加值。
42.建立行业主管部门务工业制度,各行业主管部门主动
工业企业并制定具体服务工业企业措施报县委县政府督查室备案。
政策依据:中共三穗县委办公室三穗县人民政府办公室关于印发《三
穗县支持工业企业发展42条政策措施》的通知(穗党办发〔201824号)
(六)天柱县
1.对当年申报成功的四上”企业给予一次性奖励。一是对工业企业
给予一次性奖励。规模以上特色食品加工企业,每户奖励资金30万元;规
模以上民族工艺品加工企业,每户奖励资金50万元;其他规模以上工业企
业,每户奖励资金20万元。
2.对商贸企业给予一次性奖励。限上批发企业奖励资金65万元;限上
零售企业奖励资金15万元;限上住宿和餐饮及大的个体企业奖励资金10
元。
3.资质等级以上建筑和房地产开发经营企业、规模以上服务业企业分
别奖励资金5万元。
4.规模以上工业企业产能提升奖补标准产值在2000万元至5000万元
(不含5000万元)之间的规模以上工业企业,工业增加值较上年全年同比
增长20%以上的,每户企业给予补资20万元;工业增加较上年全
同比增长30%上的,每企业再增加奖补资10元;产值5000万元
(含5000万元)至1亿元(不含1亿元)之间的规模以上工业企业,工业增
加值较上年全同比增长20%的,每户企业给予奖补资金30万元;
业增加值较上度累计同比增30%上的,每户企业再增加补资20
+
黔东南州产业大招商政策
摘编
·132·
万元。产值在1亿元(含1亿元)至5亿元(不5亿元)之间的规模以上工
业企业,工业加值较上年全年同比增20%上的,每户企给予
资金50元;业增加值较上年度累计同比增长30%以上的,每户企业
增加奖补资金30万元。产值在5亿元(含5亿元)以上的规模以上工业企业,
工业增加值较年度累计同比增长20%以上的,每户企给予奖补资金80
万元;工业增值较上年度累计同比增30%上的,每户企再增
补资金50万元。
5.上年产值3亿元以上,且符合我县主导产的工业企,一
次性给予100万元的奖励。
政策依据:县人民政府办公室关于印发《天柱县“四上”企业扶持奖
励办法(暂行)》的通知(天府办发〔202113号)
(七)台江
政策一
一、项目用地支持
1.对固定资产投资在2000万元以上(不含开发前期已垫付的土地征收
补偿费)且投资强度不低于《贵州省产业园区工业项目建设用地控制指标》
相关标准的意向企业,鼓励其通过招标拍卖挂牌出让方式取得国有建设用
地使用权,土地价款优惠政策照《贵州省国土资源厅关于印发<贵州
产业园区工业建设项目用地控制指标(试行)><贵州省产业园区工业地
价优惠办法(行)>通知》(黔国土资发〔201148)相关标
行。
2.鼓励工业企业通过长期租赁、租让结合、先租后让和弹性出让等多
地使县内
2000万元以上的意向用地企业,缴款方式可以调整为:保证金不低于出让
起始价款的20%,自签订出让合同之日起,一个月内缴纳成交价款50%,一
+
黔东南州产业大招商政策
摘编
·133·
年内缴清所有成交价款。
3.对投资强度达250万元/亩及以上的工业项目,纳入重点项目优先保
障项目用地。
二、厂房租赁及代建政策
4.入驻园区标准厂房进行生产经营的企业,自投产后12个月内,年产
值达到5000/的,给予当年交租金的等额奖励,执行三年。第四
五年达到投资议约定条件的,可给予当年所交租金50%额度奖励。同
时根据企业发展需要,支持企业按照评估价回购所租赁的标准厂房及土地
(国有土地尚未出让的除外)。
5.鼓励社会资本建设标准厂房,统一由园区承租,再由园区按相关标
准转租给第三方企业使用,第三方企业同样享受标准厂房优惠政策。
6.符合发区主导或特色产业,固定产投3亿以上,科技
含量高、产业带动力强的工业项目,确需代建厂的,由开发区根据项目需
要出资代建厂,投资方须交纳不低于10%的代建保证金并与开发区通
合同约定回购期,投资方每年还需缴纳资金占用费,资金占用费按总投资
额的中国人民银行授权全国银行间同业拆借中心公布的同期市场报价利率
计算,回购时限最长不超过5年。
三、财政扶持政策
7.县财政设立产业发展专项基金,实行县级财政扶持机制,对依法生
产经营且对县级财政和产值贡献较大的企业给予扶持。
8.对新引进的产业类企业,按实际固定资产投资达到5000万元以上、
1亿元以上、3亿元以上、5亿元以上的,投产达产后经认定分别给予100
元、300万元、500万元、800万元奖励。
9.对新引进的产业类企业,投产后前五年根据产值情况予以相应奖励。
对年产值2000万元及以上的前三按照企业对县级财政贡献的50%
+
黔东南州产业大招商政策
摘编
·134·
予以奖励,后年按照企业对县级财政贡献25%予以奖励;对年产
5000元及以上的,前三年按企业对县级财政贡献的60%予以奖励
后两年按照企业对县级财政贡献的30%予以奖励;对年产值达到1亿元及以
上的,前三年照企业对县级财政贡献70%以奖励,后两按照
对县级财政贡献的35%予以奖励;对年产值达到5亿元及以上的,前三年按
照企业对县级政贡献的80%奖励,后两年按照企业对县财政贡献
40%以奖励;对年产值达到10亿元及以上的,前三年按照企业对
财政贡献的90%予以奖励,后两年按照企业对县级财政贡献的45%予以奖励。
10.对新引进的企业达规模以业标准,且年产值在上年度基础
上增长30%以上、县级地方财政贡献增长10%以上的规模以上企业,给予县
级地方财政贡献增量部分50%的奖励。连续三年达到经济贡献奖励条件的
第三年给予县级地方财政贡献增量部分90%的奖励。
11.对新引进的世界500强、中国500强、独角兽企业、民营500强、其
他优强企业,际投资额达到10亿元以上的,分别给予一次性500
元、400万元、300万元、200万元、100万元。鼓励和支持注册地在台江县
的企业挂牌上,对在境内主板上市成功的奖励200万元,在创业板、
创板、北京证券交易所上市的100万元,在新三板挂牌的奖50元。
13.对企业到我县投资发展年上缴税收200万元以上的国家高新技术企
业在省内融资机构贷款的,由县财政按人民银行公布的LPR利率的50%给予
贴息1年,每个项目贴息总额不超过100万元。
四、创新支持
14.对新认定的高新技术企业,给予一次性10万元补助。
15.对于落户我县的省高新技业,投资高新技术产业和战略性
新兴产业链缺失环节或薄弱环节的,给予实际到位投资额2%的一次性补助,
最高不超过100万元。
+
黔东南州产业大招商政策
摘编
·135·
五、引资人奖励
16.鼓励全社会参与招商引资工作,对社会引资人(括商会、协会、
专业机构、办事机构等法人组或其它组织机构及自然)成功引进固
资产投资(不含土地出让金,下同)3000万以上项目到我县落地投产的,
按固定资产投资的3‰给予奖励,单个项目奖励最高不超过50万元。
17.引进项目固定资产资在3000万元上、1亿元以5亿元以上
的县内党政机关、企事业单位分别给予5万元10万元15元奖励,
用于奖补受奖单位的招商引资作经费。引进项目固定资产投资在1亿元
以上的县内党政机关、企事业单位,不存在其他影响评优问题的,年度目
标考核推荐列为“一等奖”。
18.引进项目固定产投资在3000元以上的县内职人员,存在
其他影响评优问题的,向引资人所在单位推荐评为年度考核“优秀”等次,
同时视情况推荐给予嘉奖或记功。
19.对在引进项目上作突出贡符合条件的县内公职人员,在职
务和职级晋升方面给予优先考虑。
六、投资服务
20.凡在我县投资落地招商引目,将实“一项目,一个专
班,一条龙服务”的工作推进方式,均享受全程代办服务,符合政策规定
且资料完备的,一次性办结相关手续。
21.在我县投资落地列省重大和重点项目的投资企业高管,在
台江缴纳的个所得税,2年按县级财政所得部分100%额奖励给
个人,后3年按照县级财政所得部分的50%奖励给个人,其奖励的人数不超
过企业总人数的15%(含15%)。
22.在我县投资落地列省重大和重点项目的投资企业高管,在
我县购买自用住房的,给予购房安家补助10万元。
+
黔东南州产业大招商政策
摘编
·136·
23.凡在我县有投资落项目的企业高管,在户籍、子女入
学就医、职称评定等方面享有与我县居民同等待遇。
七、其他
24.对投资数额较大,对财源和经济社会发展有较强拉动
的重大招商引资项目,涉及的相关优惠政策,实行“一企一策”“一事一
议”。享受“一企一策”“一事一议”政策的,不再重复享受其他同类政
策。
25.县人民政府因推动业发展的其他扶持奖励政策与本政策如
有重复、重叠的,投资人可自行择优选择,不得重复享受。
26.以上措施如因国家和上级相政策整,按国家和上级执行,
并对相关条款作相应修订;如与国家、省、州其他政策条款内容重复,按
“从高不重复”原则执行。
政策依据:中共台江县委办公室台江县人民政府办公室关于印发《台
江县招商引资优惠措施(试行)》的通知(2022-46
政策二
第一章总则
第一条为全面推动我县特色农产品产业发展,招引农产品生产及加工
企业到我县投资兴业,实现招商成效大突破,助推全县特色农产品产业高
质量发展,特制定本优惠扶持政策。
第二条县人民政府及相关部门统筹农产品生产及加工产业招商引资工
作,做好招商引资及产业发展政策兑现工作。
第三条县人民政府及相关部门负责指导和协助入驻产业园企业(机构)
享受省、州已出台的各项优惠政策,推动政策有效落实。
第四条县人民政府及相关部门对农产品生产及加工产业招商项目实行
专人跟踪服务,积极协调行政审批部门,促进政府与企业、服务与需求无
+
黔东南州产业大招商政策
摘编
·137·
缝衔接。
第二章扶持对象
第五条国家和省政府确认的农业龙头企业(含列入培育对象)在同等
条件下优先给予支持。重点针对新迁入、新设立,已落户产业园的加工企
业和种养殖企业。
(一)在台江本地注册的企业;
(二)经营状况和信誉良好,诚实守信,守法经营的企业;
(三)联农带农作用发挥好的企业;
(四)符合国家相关规定和农业产业规划布局的企业。
第三章优惠政策
第六条固定资产投资扶持政策
(一)厂房租赁补贴。对来台江县租用现有厂房的农产品加工企业,
投资额达2000万元且稳定生产一年以上的,实行“三免三减半”“先缴后
返”,即投产后前三年对企业进行奖励,奖励标准为实际缴纳给园区管理
公司租金价款的100%,第4年、第5年、第6年按市场价租金减50%的优惠
政策。支持企业按评估价回购厂房。
(二)投资补贴。在台江投资建厂房或修建设施大棚并稳定生产一年
以上的,可以享受以下政策1.投资建厂房。支持有实力的农产品加工企
业自行投资新建厂房,总投资额达到2000万元以上的,项目竣工后,按实
际投资额50%给予补助,补助金额最不超5000元;2.建设施大
棚。经县农业部门和建设方共同认定确定的标准修建钢架大棚工建设完成
50-100、修建智能化连体玻璃10亩以上的,实际投资45%
予以补助;超过100200亩的,按实际投资额的50%予以补助;200亩以上
的,按实际投资额的55%予以补助。补助金额最高不超5000万元。
第七条生产扶持政策
+
黔东南州产业大招商政策
摘编
·138·
(一)产业支持。投资规模达5000万元以上的,积极申报贵州省农业
产业发展专项资金给予支持。帮助申报国家农产品加工产业示范基地或者
示范园,申报所得项目补助资金按照产业园内所有参与申报企业投资比例
全部补贴给企业。
(二)用地支持。1.工业用地。以农、林、牧、渔业产品深加工为主
的工业项目所在地,土地等别相对应《全国工业用地出让最低价标准》的
70%执行2.农业用地。企或投资主体带动村集体经济发展50万元以
上,带动农户增收15%上,以享受以下支持。种植类:台江县农
业产业规划要求,凡是集中利土地用于发展农业种植稳定3年以上,
地流转费按先流转实施后验收补助的原则给予补助。荒山荒坡林地种植规
模达500亩以上的,每年每亩补助80元;旱地种植规模达500亩以上的,每
年每补助1000元;水田植规100亩以的每年每亩补1100元。
第四年开始补助,连续补助三年,超出部分自行支付。养殖类:按台江县
农业产业规划要求,凡是集中利用土地、林地及租用山塘水库用于养殖产
3年以上,以实际流转费用标准参照种植类的予以补助,第四年开始补
助,连续补助三年,超出部分自行支付。3.用厂房和圈舍。租用厂房和圈
舍等从事种养殖,达到合同规定养殖规模以上且产值达2000万元以上的,
租金实行“三免三减半”即投产后前三年对企业进行奖励,奖励标准为实
际缴纳给园区管理公司租金价100%,第4年、5年、6年按市场
租金减免50%的优惠政策。支持企业按评估价回购厂房。
(三)金支持。在台江册企业并生产经营1以上企业,并
农带农富农能力强,可申报衔接资金、贵州民贸民品优惠政策等给予贷款
贴息。其中衔资金贴息标准1.带动就业贴息。贴息对象每100
元贷款贴息,最低承诺年发放农民工工资20万元以上或吸纳我县10名以上
农村劳动力稳定就业(签订1年以上劳动合同)。最高贴息资金50万元/年,
+
黔东南州产业大招商政策
摘编
·139·
最多贴息3年。2.带动订单贴息。被贴息企业每申请100万元贷款贴息,带
动台江中小企业、合作社、家庭农场、种养殖大户、农户发展农业,并订
单收购被带动象产不低100万元(以实际完成订单为准,最高贴
息资金50万元/年,最多贴息3年。3.盘活资产贴息。按台江县农业产业规
划要求,凡到我县自筹资金承包农业资产(包括农业大棚、厂房、圈舍、
冷库等),以及农业园区等其他农业资产的,按实际投资金额给予申请贷
款贴息,最高贴息资金50万元/年,最多贴息3年。
(四)财政贡献奖补。对入驻台江的企业,除享受国家现行税收优惠
政策外,可享受地方财政奖补政策。对新引进的产业类企业,投产后前五
年根据产值情况予以相应奖励。对年产值达到2000万元及以上的,前三年
按照企业对县财政贡献50%予以奖励,后两年按照企业对级财
献的25%予以励;对年产值达到5000万元及以上的,前年按照企
县级财政贡献的60%予以奖励,后两年按照企业对县级财政贡献的30%予以
奖励;对年产值达到1亿元及以上的,前三年按照企业对县级财政贡献的70%
予以奖励,后两年按照企业对县级财政贡献的35%予以奖励;对年产值达到
5亿元及以上的,前三年按照企业对县级财政贡献的80%予以奖励,后两年
按照企业对县级财政贡献的40%予以奖励;对年产值达到10亿元及以上的,
前三年按照企对县级财政贡献的90%予以奖励,后两按照企业对县
财政贡献的45%予以奖励。
第八条其他扶持政策
(一)优强企业支持。对新引进世界500强企业、国500强企业、央
企或国内民企500强企业到我县投资达到1亿元以上的并符合奖励条件要求
的项目,别一次性给予500万元、300万元、200元奖励(引进企业
同时符合以上两项或三项条件的,以高限进行奖励)。
(二)品牌申报奖励。1.申报名品牌奖励支持。对入驻台江县的企业,
+
黔东南州产业大招商政策
摘编
·140·
优先申报国家名牌产品和贵州省名牌产品;对新获得中国名牌、中国驰名
商标认定的企业给予奖励60万元,对新获得贵州省名牌产品给予奖励30
元。2.申报龙头企业奖励支持。成功申报为国家级、省级龙头企业,对符
合条件的企业分别给予一次性奖励60万元、30万元。3.“二品一标”申报
奖励支持。首次获国家有机食品认证、国家绿色食品认证的,分别一次性
给予奖励20万元、10万元。4.管理体系认证:新获得ISO9000HACCP等管
理体系认证的企业,每个认证给予企业一次性20万元奖励。
5.创新科技技术支持。在农业种植技术、栽培管理技术、农业设备等
农业领域创新科技技术获得国家发明专利认定的,按照创新技术专利认定
价值予以发明人奖励5-20万元。同时,鼓励涉农企业、农业部门积极参与
申请国家、省等相关科技奖等,获得国家、省级科技奖的按影响度予以参
与人(参与单位)3-10万元奖励。
(三)招商推介扶持。鼓励全社会参与招商引资工作,对社会引资人
(包括商会、协会、专业机构、办事机构等法人组织或其它组织机构及自
然人)成功引进固定资产投资(不含土地出让金,下同)3000万以上项目
到我县落地投的,按固定资产投资的3‰予奖励,单个项目奖励
不超过50万元。
(四)优质品种引育奖励。针对县内注册企业在县域内开展优质高效
新品种选育及示范种植,获得农业部认定的国家新品种的,选育周期小于
5年,每一个品种一次性奖励企业20万元;选育周期达5年以上,每一个品
种一次性奖励企业100万元。
(五)一一议范围。对资数额达1亿元以上,对财源
经济社会发展有较强拉动作用的重大招商引资项目,涉及的相关优惠政策,
实行“一企一策”、“一事一议”。
政策依据:县人民政府办公室关于印发台江县特色农产品产业招商优
+
黔东南州产业大招商政策
摘编
·141·
惠政策的通知(台府办发〔20226号)
(八)从江
第一条 补助对象
入驻佛山—黔东南东西部协作产业园(以下简称“产业园”)的企业。
第二条 补助内容
1.厂房和办公用房(含生活配套用房)租金补助;
2.厂房和办公用房(含生活配套用房)购置补助;
3.企业产品物流运输费用补助。
第三条 资金来源
补助资金由县人民政府纳入年度财政预算。
第四条 补助标准
(一)厂房和办公用房(含生活配套用房)租金补助
1.按固定资产投资大小分级补助
1固定产投资在500-1000(含1000万元)的业,3/
月·㎡进行补助;
2)固定资产投资1000-3000万元(含3000万元)的企业,按4/
月·㎡进行补助;
3)固定资产投资3000-5000万元(含5000万元)的企业,按5/
月·㎡进行补助;
4固定资产投资5000万元上的企业,按6/月·㎡进行补助。
单个业补金额100万元/年为限,超过100万元/年的按100
/年补助。厂房和办公用房(含生活配套用房)租金补助按实际租用厂
房和办公用房(含生活配套用房)面积及实际投资固定资产的金额为依据
进行核算。
2.按产业类别分级奖补。产业园主导产业(生物医药生产研发类、中
+
黔东南州产业大招商政策
摘编
·142·
药材精深加工、药食同源产品精深加工、生态特色食品精深加工)、高新
企业按照6/月·㎡进行补助;以上补助条件必须是固定资产投资达1000
万元以上和租用厂房面
3000㎡(含)以上。
3.上述第1、第2项补助为同一企业时只执行其中一项。
4.纳入固定资产投资计算的范围。
1)生产设备和相关的设备设施;
2)购置办公设备、交通工具;
3)厂房和办公用房(含生活配套用房)的装修;
4)生产设备的运输安装。
5.租金补助日期从企业正式投产之日开始计算,每半年兑现补助一次。
(二)厂房和办公用房(含生活配套用房)购置补助
按照购置资金的总额的10%一次性补助,单个企业以300
万元为上限,超过300万元的按300万元补助。该项补助资金每年总额
1000万元,按企业申报顺序兑现,本年度资金无法覆盖的,推迟到下一
年度兑现,以此类推。使用各类财政资金购买的不享受此项补助。
(三)物流运输费补助
入驻产业园的企业,所生产的产品运往粤港澳大湾区指定城市,按实
际发生费用的30%行补,单个企业每年补助封顶为30元。结算
为年度申报结算。与物流企业合作进行运输的,提供相关支付证明材料;
企业自购车辆进行运输的,企业提供相关费用证明材料再由县工信商务局
进行核定。
(四)设立一次性奖补政策。
入驻园区12个月内实现主营业务收入达到2000万元并上规入统的工业
企业,除了享受上述补助外,另给予一次性奖励30万元。
+
黔东南州产业大招商政策
摘编
·143·
第五条 补助期限
租金和物流运输补助期限为3年,如在3企业务收
2000万元并且上规入统的工业企业,则再补助2年租金和物流运输费。5
期满后,再视实际情况另行研究是否继续实施。
第六条 入驻县人民政府或贵州侗乡大健康产业示范区(贵州洛贯经
济开发区)指定其他产业园的广东籍企业(含其设立的子公司、分公司),
租用(购置)厂房面积3000㎡(含)以上的,参照上述补助规定执行。
第七条 申领补助须具备以下条件
1.符合国家产业政策及从江县产业导向的生产型、环保、节能、技术
创新等企业;
2.符合安全生产、环境保护规划和相关法律法规,项目在运营期间相
关指标达到国家标准;
3.入驻企业必须在从江县登记注册并在本地依法纳税。
第八条 申报补助资金材料
1.补助申报表(见附件);
2.企业营业执照的复印件;
3.企业固定资产投资的证明材料,凭合同、发票、转账记录等资料核
;
4.与当地的企业、合作社、自然人等成立的合资企业,申报企业需提
供公司章程、入股证明及记录;
5.租用或购置厂房及办公用房(含生活配套用房)的合同复印件;
6.材料真实性声明。
第九条 申报流程
1.县工业信息化和商务局负责受理申报,会同黔东南州金锐产业开发
有限公司进行初审,初审通过后将企业申报资料报县人民政府;县人民政
+
黔东南州产业大招商政策
摘编
·144·
府成立或委托第三方评审机构对其进行评审,评审结果在县人民政府网站
予以公示。
2.审结公示7(自然日)且无异后,由县财政公示结束
之日起一个月内拨付补助资金至申报企业。
第十条 企业须保证申报事项及材料的真实性,凡弄虚作假者,一经
查证核实,取消申报资格,追缴已拨资金并追究相关责任。
第十一条 本办法自202311日起执行。
第十二条 本办法由县工业信息化和商务局负责解释。
政策依据从江县人民政办公关于印发入驻佛山-黔东南东西
协作产业园企业补助办法(试行)的通知(从府办发〔202258号)
(九)岑巩
政策一
第一条 财政金融政策
(一)规模以上投产企业技术改造购置新设备或扩大产能新增投资,
根据其用于新增投资获得银行贷款的额度,按照人民银行同期贷款基准利
率的50%给予贴息,贴息期限不超过三年。新增投资额500万元(含)-
1000万元以内,年产值1亿元以下,累计贴息不超100万元;新增投资额
1000万元(含)-20001亿元-3亿
150万元;新增投资额2000万元(含)以上,年产值3亿元以上,累计贴息
不超过200万元。
(二)强化对企业的融资担保支持。鼓励县属融资担保公司按市场化
原则优先为招商引资投产中小微企业提供融资担保;对中小微工业企业保
持较低担保费率,担保费率不超过1%;对认定为省级以上专精特新的中小
企业给予信用担保贷款支持,无需提供反担保措施。
第二条 税收支持政策
+
黔东南州产业大招商政策
摘编
·145·
(一)投我县企业所使的应税土地,2-8/平方/年征收城
镇土地使用税。
(二鼓励产业企业减按15%的税征收企业所得税。本条称鼓
励类产业企业是指以《西部地区鼓励类产业目录》中规定的产业项目为主
营业务,且其主营业务收入占企业收入总额60%以上的企业。
(三)截止20221231日,对小型微利企业年应纳税所得额不超过
100万元的部分,减按12.5%计入纳税所得额,20%的税率纳企业所
得税;截20241231,对型微利企业年应纳税所得额100
元但不超300万元的部分,减按25%入应纳税所得,按20%的税率缴
纳企业所得税。
第三条 吸纳就业和人才扶持政策
(一)对新引进的企业投产后,吸纳50人及以上劳动力实现就业,并
按要求签订6个月及以上期限劳动合同,且连续稳岗3个月及以上,由企业
自主开展技能提升培训,经县级有关行业部门核准,给予企业500/人的
一次性培训补助。
(二)招商引资企业中具有技师、高级技师及副高级以上专业技术职
称的人员,在我县工作期间可以给予用人单位租房租金补贴,租金补贴按
实际租金费用的80%拨付,租金标准最高参照100㎡社会住房市场租金价格。
第四条 “四上”企业扶持政策
对新引进的企业自投产之日,年主营业务达到规模以上企业标准,
被纳入四上企业统计后正常生产经营一年以上的,工业业在省、州
奖励基础上县级给予一次性扶持10万元,其他类企业在省、州奖励基础上
县级给予一次性扶持5万元。
第五条 工业类政策
(一)工业项目选址集中到岑巩经济开发区,优先保障工业项目新增
+
黔东南州产业大招商政策
摘编
·146·
建设用地指标,工业用地出让价不得低于国家制定的最低标准。同时,不
得低于土地取得成本、土地前期开发成本和按规定收取的相关费用之和。
工业用地出让期限内,在符合规划、不改变土地用途的前提下增加容积率
的,不再征收土地价款。
(二)新落户工业项目需使用土地的,固定资产投资须达到2000万元
以上,固定资投资强度须达100万元/以上,年出强度须达到120
万元/以上,可采用先租后让、租让结合、弹性年限方式供地,降
低企业投资成本。
(三)“九通”配套支持政策。对新落户工业项目自建厂房的,提供
“九通”配套支持。通过相关部门的项目实施,解决落地企业的通路、通
电、给水、排水、排污、通天然气、通有线电视、通宽带网络、通讯到项
目红线边缘。
(四)场平补助政策(只含挖填土方)。企业自正常投产后产值在2000
万元(含)以的,用县级工业发展基金补助场平工程费30%;值在1
亿元(含)以上的,补助场平工程费的40%。支付方式:企业投产后,产值
200050001005000万元
(含)1亿元以内,补助超过150万元;产1亿元(含)以上,补助
不超过200万元。
(五)自建厂房融资贴息政策。新落户工业项目自建厂房的,单层层
高不低于3.9,给予厂房建设融资贴息。根据企业获得银行目建
款额度,按照民银行同期贷款基准利率的50%用县级工业发展基金给
贴息产值2000万元(含)至5000万元以内贴息不超100万元产值
5000元()至1亿元以内,息不超过150万元;产1亿(含)以
上,贴息不超200元。企业房验收合格,并纳入规模企统计后予
以兑现。
+
黔东南州产业大招商政策
摘编
·147·
(六)支持工业企业固定资产投资建设。对新落户工业项目一次性投
1亿元(含)以上,固定资产投资强度不低100万元/亩,年均产值达
150万元/亩,且年均纳税达到3万元/亩及以上的工业企业,根据已取得
土地不动产登记证上的面积,用县级工业发展基金,按2万元/亩的标准连
续奖励三年。
(七)加大争取工业企业信贷支持力度。争取专项资金对新入园的经
国家工信部、科技部、省经信委、科技厅等部门认定的新兴产业、高新技
术产业的工业企业贷款实行财政贴息三年政策优惠,第一年按照同期贷款
基础利率计算息金额的50%贴息,第二年按照同期贷款础利率计
算利息金额的40%予贴,第三年按照同期贷款基础利率计算利息
30%给予贴息,每年度单户企业贴息总额不超过200万元。
(八)支持工业企业降低物流成本。对新落户工业项目投产后一年内
申报成为规模企业的,企业投产后三年(从投产之日起,以12个月为一年)
物流给予扶持,分别按照企业当年度向税务部门申报销售收入的0.3%用县
级工业发展基金给予扶持,第一、二、三年补助标准分别不超过60万元、
50万元、40万元。
(九)支持工业企业快速发展。对投产工业企业年主营业务收入分别
2000万元-5000万元(含下限不含上限,下同)、5000万元-1亿元、1亿
-2亿元、2亿元-3亿元、3亿元以上的,分别以上一次获奖励主营业务收
入为基数(首次衡量标准以上年度主营业务收入为基数),同比增速分别
35%30%25%20%15%上,按照业当年增量的0.3%用县级工
业发展基金给予扶持,每户企业最高产业扶持资金不超过50万元且不超过
企业当年缴纳县级留存部分税款。
(十)支持工业企业科技创新。企业产品获得贵州省名牌产品、著名
商标或国家级名牌产品、驰名商标、国家地理标志品牌,或被认定为省级、
+
黔东南州产业大招商政策
摘编
·148·
国家级技术中心的工业企业,得省级、国家级的分别给予一次性扶持5
万元、10万元。
(十一)支持工业企业上市。对注册在我县,且在境内主板成功上市
的企业用县级业发展基金扶200元;在中小板、创业板功上市的
企业用县级工发展基金扶持150万元;对纳入省、州级上市备资源库
并在新三板挂牌的企业用县级工业发展基金扶持50万元。组建岑巩县助力
企业上市专家服务团队,为上市后备企业提供税务+银行+资本+法律+政策
的全方位指导服务。
(十二)标准厂房政策。(对新引进入驻岑巩经济开发区标准厂房的
企业)
1.租金标准:按照岑巩经济开发区标厂房出租5/平方/月标准,
从起租当月一次性缴纳全年租金。企业租赁标准厂房以层为单位,投资强
度达2500/方米以上,产出强度达5000/平方/以上并且企业
投产后12个月内销售收入达2000万元(含)以上的,第一年按缴纳租金比
100%予企业产业扶持;第二三年按缴纳租金比80%给予企业
扶持;第四、年按缴纳租金比例60%给予企业产业扶;第六年及以
年度按缴纳租比例40%予企产业扶持。达不到前述条件但为经开
区主导产业提供配套服务的企业,或科技含量高、发展潜力好的企业,可
实行“一事一议”。
2.厂房装修费和设备搬运费补助:对新落户项目租用岑巩经济开发区
标准厂房,落户后半年内建成投产,且投产后一年内申报成为2000万元以
上规模企业的,用县级工业发展基金给予厂房装修费和设备搬运费补助。
厂房装修费补助金额为企业申报成为2000万元以上规模企业当年所实现销
售收入的1%,最高补助不超过40万元。设备搬运费补助金额为企业所购置
新设备金额的4%(以设备购置发票为准),最高补助不超过20万元。
+
黔东南州产业大招商政策
摘编
·149·
(十三)对新引入国家和省战略性新兴产业、重点龙头企业实行“一
事一议”研究确定。
第六条 农业类政策
对新引进在岑巩县注册的首次申报获得国家级、省级农业龙头企业的
招商引资农业企业,分别一次性扶持20万元、10万元;首次获国家有机食品
认证、国家绿色食品认证的,分别一次性扶持l0万元、5万元;首次获得国
家农产品地理标志的一次性扶持10万元;首次获得省级以上良种场、原种
场或优质种苗规模化繁育场称号的单位,一次性扶10万元(获得其中一
项奖补10万,不叠加)。
第七条 文化和旅游产业政策
对新引进的旅游企业,建设旅游景区(点)获评为国家3A级、4A级、
5A级旅游景区的企业,县财政分别一次性扶持10万元、20元、30万元。
建设旅游饭店(酒店、宾馆)新获评为三星级旅游饭店、四星级、五星级
(酒店、宾馆)且能按照旅游主管部门要求加强管理的,县财政分别给予
一次性扶持5万元10万元15元;建设农家乐、乡村栈新获评为
星级、五星级的农家乐、乡村客栈且通过验收合格的,县财政分别给予一
次性扶持3万元/户,4万元/户。
第八条 投资服务政策
(一)凡在我县投资企业均享受“一站受理、全程代办、服务到底”
代办服务。
(二)进步优化营商环,审批程序。投资者办理与其资有
关的各项行政审批手,机关一律实“首问负责制。投资项目
料齐全,属县内办理的手,实行“一站受理、并联审批、限时办结、进度
可查询”,确保在公开承诺办结时限内办理完毕。
(三)外企业投资项目入省、州重点项目调度管理,按照
+
黔东南州产业大招商政策
摘编
·150·
个项目、一名领导、一套班子、一个方案、一抓到底”的“五个一”工作
机制推进服务。
政策依据:县人民政府办公室关于印发《岑巩县招商引资优惠政策暂
行办法》的通知(岑府办发〔202257号)
政策二
第一条 新落户主导产业及其配套项目,一次性投资1亿元以上(其中
固定资产投资3000万元以上),固定资产投资强度不低于100万元/亩,并
且申报成为2000万元以上规模企业的,根据已取得土地不动产登记证上的
面积,按照每亩固定资产实际投资强度的6%给予基础设施建设奖励扶持,
每亩扶持不超过7万元。
第二条 对投资强度达300万元/亩及以上的工业项目,纳入重点项目
优先保障项目用地。
第三条 新落户主导产业及其配套项目,补助场平费总额(只含挖填土
)90%,补助金额不超过200元。场平费总额以场平实施前企业所
定场平方案经双方审定的场平工程量、单价和场平完成后企业送双方认可
的第三方审计机构依法审计的额为依据。企业投产并持续生产达3个月
的次月补助60%,纳入规模企业统计后的当年补助40%
第四条 新落户主导产业及其配套项目自建厂房的,单层层高达3.9
米以上,给予厂房建设融资贴息。根据企业获得岑巩县行政区域金融机构
项目建设贷款度,按照人民银行同期贷款基准利率50%用县级工
展基金给予贴息,贴息期限不5,贴息额不超过200元。企业厂
房竣工验收合格,并且被纳入规模企业统计后予以兑现。
第五条 新落户主导产业及其配套项目,按照投资合同约定时限建成
投产,投产前完成建设阶段规划许可、环保、安全等行政审批手续并经竣
工验收的,项目投产后(固定资产投资额达3000万元以上)按照实际建筑
+
黔东南州产业大招商政策
摘编
·151·
面积30/平方米给予项目建设奖励扶持。
第六条 对落户的主导产业及配套项目,年用气量1万立方米及以上
的,生产用气补助0.2/立方米。对符合县级主导产业使用的天然气用气
量自项目投产后一年内给予一次性补助,补助标准0.2/立方米。其中
产值5000万元(含)-1亿元,补助标准不超过30万元;产值1亿元(含)-
1.5亿元,补助标准不超过50万元;产值1.5亿元(含)-2亿元,补助标准
不超过80万元;产值达到2亿元(含)以上,补助标准不超过100万元。
第七条 对租用岑巩经济开发区标准厂房生产且固定资产投资达5000
万元以上的新引进企业确需供电增容的,供电增容所产生的费用由所在岑
巩经济开发区承担;对固定资产投资强度达300万元/亩以上的,且年产值
达到5亿元以上的企业,实用电量补助,各级电价补贴自目投产后一
计补0.01/,
300万元。
第八条 对新落户主导产业及配套项目年用水量达5万吨以上,企业
严格履“环保三同时且废水达标排放的,按照超出5吨部分给予
1.2/吨奖励扶持,每户企业每年最高奖励不超过10万元。
第九条 对新落户主导产业及配套项目达到规模以上企业标准,且年
产值在上年度基础上增长30%以上、县级地方财政贡献增长10%以上的规模
以上企业,给县级地方财政贡献增量部分50%的奖励。连续三年达到
济贡献奖励条件的,第三年给予县级地方财政贡献增量部分90%的奖励。
第十条 投产企业在岑巩县注册成立外贸企业并开展自营出口业务,
每完成1元出口额奖励人民币0.01元,每户企业个年度奖励不超过30
万元。
第十一条 鼓励以商招商、中介招商。对帮助岑巩县引进固定资产投
资达5000万元以上主导产业项目的中介人(含团队或个人),在项目引荐、
+
黔东南州产业大招商政策
摘编
·152·
考察、洽谈、签约中做了实实在在工作,并且促成项目按投资合同约定时
限落地建设并竣工验收投产的,经招商部门认定,按项目实际固定资产投
资额的万分之十奖励,单个项目奖励累计不超过30万元。
政策依据:县人民政府办公室关于印发《关于进一步支持工业主导产
业发展的政策措施》的通知(岑府办发〔20237号)
(十)榕江
政策一
第一条 鼓励社会资本参与乡村振兴,对在本县社会经济发展中作出
突出贡献、投资强度大、经济效益高、市场前景好的社会资本投资企业,
除享受本办法相关支持外,可按照“一事一议”“一企一策”确定优惠政
策。
第二条 为支持外来企业投资本县规划发展的重点产业链和培育产业
链相关项目,鼓励产业链内龙头、骨干企业牵头引进集群配套、强链补链
项目,符合奖励条件的按《贵州省招商引资奖励办法(试行)》向省、州
申报给予牵头引进企业或自然人奖励。
第三条 发挥产业链龙头企业示范带动作用,鼓励企业与本县中小企
业开展分工协作,推动产业链协同制造和协同创新。龙头、骨干企业每增
1家本地配套企业(指与龙头企业在我县发生开票销售收入500万元及以
上的企业),奖励龙头、骨干企业7万元。
第四条 社会资本投资5000万元以上旅游资源开发(景区景点建设、
乡村旅游开发、旅游商品开发等)、农旅融合、文旅融合、文体融合等产
业项目,建成投产运营后按固定资产投资的5%给予一次性奖励,固定资产
以我县评估认定数据为准。
第五条 支持商(协)会组织、企业与本县合作开展委托招商,对在
招商引资工作中做出突出贡献的商(协)会组织、企业的主要负责人,县
+
黔东南州产业大招商政策
摘编
·153·
人民政府可聘为招商专员,并颁发证书。
第六条 鼓励和支持围绕本县主导产业面向国内外商(协)会、跨国
集团、行业龙头企业进行集团式招商、产业集群招商。跨国集团、行业龙
头企业按本办法第十三条中500强企业和民营企业500强支持政策给予优
惠。对投资强度、经济效益达到约定标准的企业,前三年按该企业年度参
考税收县级留存部分金额的100%予以奖励,后两年按该企业年度参考税收
县级留存部分额的50%以奖,由财政预算中的招商引资策兑现经
费拨付。
第七条 在本县注册并经认定为总部企业的,自2022年起,首次被评
为世界500,给1亿元励;首次被评中国500强,给予5000万元
励;首次评为民营企业500强,2000万元奖励。上述奖自达
励标准后一次性兑现。
第八条 在本县投资并经省认定为首次入500强企业,投资除基础
设施建设、地产开发、能源开外项目且固定资产投资1亿元以上的,
目建成投产后,在享受其他优惠政策支持的基础上,世界500强、中国500
强、营企500再分别给1000元、500元、200万元励,
企业发展。上述奖励自项目建成投产后一次性兑现。
第九条 社会资本投资学校、幼儿园、养老院、医院占用耕地,免征
耕地占用税;建设直接为农业生产服务的生产设施占用林地、牧草地、农
田水利用地、养殖水面以及渔业水域滩涂等其他农用地,不征收耕地占用
税;从事农林牧渔业项目的所得,依法免征、减征企业所得税。农业生产
者销售的自产农产品,免征增值税。产品在《农业产品征收范围注释》内
的其他农特产品在流通环节适用11%增值税税率。
第十条 鼓励和支持农业产业项目扶持,社会资本投资3000万元以上
农业产业项目,享受以下扶持政策。
+
黔东南州产业大招商政策
摘编
·154·
一、土地(指耕地)流转财政奖补
(一)享受财政奖补政策的农业项目必须符合以下条件
1.农业产业化龙头企业,流转土地规模须在600亩以上。
2.流转合同期限在5年以上。
3.土地流转合同已在所辖乡镇人民政府或农村土地承包经营权管理部
门备案登记。
4.流转收益按合同已经向出让方兑现过一次以上。
(二)财政奖补标准
600亩(含600亩)至1000亩(含1000亩)的,按
400//年的标准给予奖补;转面积在1000亩(不含1000亩)以上的,
500//年的标准给予奖补,连续奖补五年。
二、农业基础设施奖补
1.县农业产业规划修建钢架标大棚4000以上,按15/
㎡一次性补贴;修建智能化连栋玻璃景观温室、生态餐饮温室1000㎡以上
的,按300/㎡一次性补贴。
2.县农业产业规划及设计标准设喷灌设施达500亩以上的,按
500/亩一次性补贴。
三、投资标准化畜禽养殖的企业,修建标准化圈1000平方米以上、
20010001000
10000羽以上),对其所修建标准化圈验收达标后按实际投资圈舍
额的20%一次性给予补助。
第十一条 自本办法发布之日起,投资项目上年度主营业务收入首次
突破1亿元的,按主营业务收入的0.5%给予一次性奖励。
第十二条 对引进省级、国家级研发平台在本县落户的企业,引导支
持民营企业建立工程技术研究中心、重点实验室、企业技术中心、技术创
+
黔东南州产业大招商政策
摘编
·155·
新战略联盟,提高企业科学技术创新能力,增强企业核心竞争力。一是对
新认定的国家级工程技术研究中心、重点实验室,在州给予补助的基础上
由县级财政分别给予一次性20万元的补助;获得省级工程技术研究中心、
重点实验室,在州给予补助的基础上由县级财政分别给予一次性10万元的
补助。二是对新认定的国家级、省级技术中心、检测中心、技术创新示范
企业,在州给予补助的基础上由县财政再分别一次性给予25万元、10万元
补助;对新认定的国家级、省级科技企业孵化器、产业技术创新战略联盟,
在州给予补助的基础上由县财再分别一次性给予15元、5万元补助。
三是对新认定的科技型小巨人企业、小巨人成长企业、科技型种子企业
大学生创业企业,在省级补助基础上,由县财政局分别按13万元、5
元、4万元、3万元给予一次性补助。四是对新认定的省级创新型领军企业,
由县财政给予次性100元补。五是对来我县落户的省外新技术企
业,投资高新技术产业和战略性新兴产业链缺失环节或薄弱环节的,县财
政给予实际到投资2%最高超过100万元的一次性补助新认定的
高新技术企业在省补助的基础上,再一次性补助5万元。
第十三条 在本县行政县域内工商注册和税务登记,具备独立法人资
格并纳入榕江县统计的企业在主板和在境外资本市场成功上市的,除享受
省、州优惠政策外,另给300元补助;在中小板、创业板成功上市的,
给予200万元补助;企业在新三板成功上市的,给予75万元补助。
第十四条 对新引进的国家、省、州鼓励类项目企业实行工业纳税奖
励。上年度实税收金额(按实际入库计算)达100万元以上、解
100以上的企业,县人民政府将奖代补的形式,按税收县级留存
分的10%给予奖励,连续奖励不超过5年。
第十五条 拓宽融资渠道,鼓励企业做强做大,鼓励政府支持的融资
性担保机构降低担保费用,为企业融资性贷款提供担保服务收取担保费率
+
黔东南州产业大招商政策
摘编
·156·
2%下的新增担保发生额,由县财政按担保服务费50%补偿担保机构
支持中小微企业应收账款、存货、设备、知识产权质押、金融资产等动产
融资。宣传、推广贵州省中小企业“信贷通”,提供2000万元以内无抵押
贷款政策,解决企业融资贵、融资难问题。
第十六条 入驻园区标准厂房的工业项目享受政策须满足的条件和内
容:
一、入驻工业园区项目享受政策,必须符合下列条件
(一)项目符合国家产业政策,符合园区发展规划。产业导向、产业
布局,符合节能环保要求。
(二)入驻标准厂房的项目,实际投资必须达到0.4万元/㎡;独立建
厂的项目,实际投资不低于300万元/亩。
(三)工业项目所需行政办公及生活服务设施用地面积不得超过工业
项目总用地面积的7%。严禁在工业项目用地范围内建造成套住宅、专家楼、
宾馆、招待所和培训中心等非生产性配套设施;容积率、建筑系数、绿地
率,按中央和有关规定执行。单GDP业增加值综合能耗有关
执行。
(四)依法经营、依法纳税,不拖欠农民工工资,有良好的社会信誉
度和责任感。
(五)服从园区等职能部门管理。
(六)项目建成投产后,产品外贸出口必须以工商、税务关系在本县
注册企业名义报关。
二、入驻工业园区项目,满足以上条件可享受的政策
(一)供水、供电、道路、通信设施建设安装到道路规划红线处。
(二)达产后(从投产后第二年起)工业产值(营业收入)不低于
1.5万元//年,税收不低于0.05万元//年,享有以下优惠政策。
+
黔东南州产业大招商政策
摘编
·157·
1.一次性装修补贴:普通厂房200/㎡(仓库除外)。
2.物流补贴:根据项目生产实际产生的物流费用(以正式的货物运输
发票为凭)总额的,每年一次按3%给予补贴。
(三)达产后(从投产后第二年起)发展前景好、带动性强的企业,
需技改和增加新设备的,优先支持申报贵州省工业和信息化发展专项扶持
资金。
(四)企业享受的装修补贴、物流补贴等总额不超过企业同期缴纳税
金县级留存部分的总额。
第十七条 独立建厂工业项目,享受优惠政策的条件和内容。
一、独立建厂工业项目享受政策,必须符合下列条件
(一)对投资5000万元以上,年产值不低于2000万元的独立建厂项目,
由自然资源部门依法按招拍挂或先租后供方式优先提供工业用地。
(二)对符合国家产业政策的项目,需符合我县产业发展规划。
(三)达产后工业产值(营业收入)不低于450万元//年。
二、独立建厂工业项目,满足以上条件可享受的政策
1.生产厂房建设补贴100/㎡。
2.物流补贴:根据项目生产实际产生的物流费用(以正式的货物运输
发票为凭)总额的,每年一次按3%给予补贴。
(四)达产后发展前景好、带动性强的企业,需技改和增加新设备的,
将优先申报项目给予支持。
第十八条 投资主体与县人民政府正式签订《项目投资建设协议书》
和《项目建设投产承诺书》并依法取得土地使用权后,明确项目各项准入
指标、双方权利和义务,列明投资内容、投资额度、投资方式、建设进度、
建成时间、投产时间,以及其他约定事项。项目建成投产后,各项约定指
标未达到要求,不得享受优惠政策,已获得扶持资金全额退回。
+
黔东南州产业大招商政策
摘编
·158·
第十九条 项目必须按约定期限开工建设、建成投产。每宗用地动工
开发建设时间原则上不得超过两年,超过两年未开工建设的,无偿收回土
地使用权。
第二十条 投资强度、产出强度、缴纳税收、用工人数达不到要求的,
不得享受上述优惠政策。已兑现的优惠政策应退回。
第二十一条 入驻本县项目因不可抗力因素造成项目开工建设延迟的,
企业应在开工建设期限届满前1个月内向园区管委或县民政府提出
期开工书面申请,经同意延期开工的可顺延计算开工日期,但顺延时间不
得超过1年。
第二十二条 实行按时开工建设、按时竣工投产、(农民工工资)保
证金制度。投资主体在签订《项目投资建设协议书》和《项目建设投产承
诺书》时,必须向县人民政府缴纳履约保证金,保证金在项目依约建成投
产后退还(不计利息)。
第二十三条 有下列情况之一的,严格依据《中华人民共和国土地管
理法》《中华人民共和国城市房地产管理法》、闲置土地处置办法等法律
法规,以及其他相关政策法规处理。
一、合同2后仍未动工建设,或因投资方自身原项目建设
停工1年以上,未再进行投资建设的。
二、不按项目建设规划、建设程序和《榕江县项目投资建设协议书》
的要求建设,擅自改变土地用途性质和改变容积率的。三、不按环保要求
进行建设,达不到环评标准,拒不改正的。
四、不按有关安全规定进行建设,存在重大安全隐患,拒不改正的。
五、国有土地使用权转让、出租以及抵押合同违反国家法律、法规规
定或出让合同约定,拒不改正的。
六、恶意拖欠农民工工资的。
+
黔东南州产业大招商政策
摘编
·159·
第二十四条 实行差别化土地政策。农业项目生产设施、附属设施和
配套设施用地直接用于或服务于农业生产,其性质属于农用地的,按设施
农用地有关要求办理相关手续;工业项目用地按照《中共中央国务院关于
深入实施西部大开发战略的若干意见》规定,全县范围内工业用地出让金
按《全国工业用地出让最低价标准》执行。工业项目用地在符合规划、土
地用途不改变的前提下增加容积率的,经核准不增收地价款。教育、医疗、
社会福利设施等非营利性公益事业用地,凡是符合国土资源部公布的《划
拨用地目录》范围的,可以按划拨方式供地;不符合《划拨用地目录》,
但符合《协议出让国有土地使用权规定》范围的,可以按协议出让方式供
地。
第二十五条 对在本县社会经济发展中有突出贡献、投资强度大、经
济效益高、市场前景好的工业项目,保障用地要素,探索标准地出让,推
行先租后供方式,优先为项目供地,有效推进项目建设进度。
第二十六条 在县内重点行业规模以上企业,建立高校毕业生见习基
地,对到见习基地见习的高校毕业生,由就业补助资金给予见习补贴。见
习对象为毕2内仍未就的全日制普通高等学校专科以上应往届毕业
生,见习间为3―12个月,最长不超过一年,见习期学生活补助费
不低于当地最工资标准,其60%就业补助资金给予补贴见习期间
办理人身意外害与住院医疗商业保险,保险费用从就业补助金按300
/人的标准进行补贴,对见习单位(基地)留用见习期满高校毕业生的
给予每人500元的一次性奖励。
第二十七条 小微企业和民营经济组织吸纳高校毕业生就业奖励。小
微企业和民营经济组织每吸纳1名登记失业高校毕生就业并签订一年以
上劳动合同且缴纳社会保险费的,给予800元的一次性奖励。
第二十八条 依托高等院校、中等职业技术学校及社会培训
+
黔东南州产业大招商政策
摘编
·160·
机构开展的各类技能培训,培训合格后取得相应等级证书的,按有关
规定给予培训补贴。
第二十九 招用残疾人达职工总人数1.5%以上的企业,可免缴残
疾人保障金,并可享受国家规定的有关税费优惠政策。
第三十条 凡在本县投资企业均享受“一站受理、全程代办、服务到
底”代办服务,但投资方须及时、真实提供代办行政审批和公共服务事项
需要的材料,若相应事项必须由投资方自身亲自办理的应由投资方自行办
理。
第三十一条 投资者在户籍、子女入托入学、职称评聘等方面享有与
本县居民同等待遇。
第三十二条 投资项目纳入省、州重点项目调度管理的,按照“一个
项目、一名领导、一套班子”工作方式跟踪推进服务。
政策依据:榕江县人民政府办公室关于印发《榕江县招商引资优惠政
策暂行办法(修订)》的通知(榕府办发〔202241号)
政策二
一、奖励对象
社会引资团体、引资组织或引资人:县内外的商会、协会、专业机构、
办事机构等法人组织、其他组织机构及自然人。
公职人员:本县在编公务员、国企工作人员及事业单位工作人员。
二、奖励原则
对成功招引项目的引资组织、引资团体或引资人实行分类奖励原则,
符合条件的社会引资组织、引资团体或引资人给予物质奖励,符合条件的
我县公职人员给予行政奖励。
三、奖励条件
(一)项目符合国家环保要求及我县产业政策,不属于禁止类或限制
+
黔东南州产业大招商政策
摘编
·161·
类产业项目;
(二)以独资、合资、合作等方式引进项目落地,投资方项目投资金
额单独核算;
(三)项目引进资金系引入省外、境外资金;
(四)在本县市场监督管理局注册公司并建设、经营、正常纳税的招
商引资产业项目,注册公司股东须含有省外企业或个人占股;
(五)项目正常投产经营且效益达到合同约定内容的招商引资项目;
(六)项目引进资金以招商引资合同投资总额或项目发改备案金额为
依据,第一产项目引进资金须在2000元以,第二产业项目引进
须在5000万元以上,第三产业项目引进资金须在8000万元以上(引进境外
资金,外币按投资项目符合政策条件正式提交申请后核查资金到位当日的
国家外汇汇率折合人民币计算);
(七)捐资项目、基础设施(社会资本投资的项目除外)、公共设施、
房地产、煤矿项目等不属于奖励范围;
(八)项目引资组织、引资团体或引资人未收取项目投资方或资金接
受方佣金;
(九)申领奖励的项目,应是正式投产、正常运营一年内的项目,凡
超出项目备案或项目核准文件规定的建设期限,对引资人不再予以奖励。
四、奖励标准
(一)社会引资奖励
1.社会引资组织、引资团体或引资人成功引进产业项目落地投产,可
参照统计部门联网直报平台中的固定资产投资额给予一定奖励。投资项目
为第一产业项,按该项目固定资产投资额4‰予奖励;资项目为
第二产业项目按该项目固定资产投资额的5‰予奖励;投资项目
三产业项目,该项目固定资产投资额4‰予奖励,单个目最高引
+
黔东南州产业大招商政策
摘编
·162·
资奖励不超过500万元。
2.引资组织、引资团体或引资成功引进世界500强企业、国内
500强企业、民企500强企业到我县投资兴办并符合奖励条件要求的产业项
目,分别再一次性给予30万元、15万元、5万元奖励。
3.若社会引资组织、引资团体或引资人引进项目主体同时符合以上两
种情况,则可叠加享受以上政策。
(二)公职人员激励
对本县成功招引产业项目落地的公职人员,可按照其招引项目的规模、
效益等情况,授予相关的荣誉;评优评先、职称评聘和职级晋升等
方面,符合条件的给予优先考虑。
五、招商引资身份认定
原则上同一个项目只认定一个社会引资主体或一个公职人员给予奖励,
引资身份以投资方初次考察时的引资主体为准,同一个项目招商引资奖励
资金总额不变,与引资主体人数多少无关。
六、认定程序
(一)社会引资主体认定程序
1.备案。项目引资主体填写《榕江县招商引资登记表》,由县投促部
门认定项目引资主体申请资格。
2.申报。在项目签约落地并正常投产后,符合申请招商引资奖励的引
资主体填写《榕江县招商引资奖励申请表》,由县投促部门进行初审后提
交县人民政府审定。
3.公示。经审定通过后,将拟奖励的项目引资主体信息、项目名称、
拟奖励金额等情况在榕江县人政府网站进行公示,公示5工作日。
4.拨付。对公示期无异议的,由县投促部门按程序向县级财政申请拨
付奖金。
+
黔东南州产业大招商政策
摘编
·163·
(二)公职人员认定程序
1.备案。项目引资主体填写《榕江县招商引资登记表》,由县投促部
门认定项目引资主体申请资格。
2.申请。在项目签约落地并正常投产后,符合申请招商引资奖励的引
资主体填写《榕江县招商引资奖励申请表》。
3.审定。由县投促部门进行初审后提交县人民政府审定,由县人民政
府将会议确定奖励结果以公文形式发文至公职人员所在单位、县委组织部
及县人社局,按程序予以奖励。
七、撤销奖励情形
对弄虚作假或相互串通恶意骗取招商引资奖励资金的,一经查实,立
即撤销奖励,追回奖励资金,并视情节追究相关人员纪律及法律责任。
八、实施期限
本办法自发布之日起实施,由榕江县招商引资扩大开放领导小组办公
室负责解释,试行2年。
政策依据:榕江县招商引资扩大开放领导小组办公室关于印发《榕江
县招商引资奖励暂行办法》的通知榕招商办通〔20231
(十一)黎平县
一、奖励对象及条件
(一)奖励对象。本办法的奖励对象为在黎平县行政区域内登记注册
并进行税务登记,从事外贸、服务贸易相关领域工作或生产经营活动,并
202211日至20231231日期间(每个自然年即为一个申报年度)
发生本办法所涉及奖励事项的独立法人企业。
(二)奖励条件
企业申报奖励需满足以下基本条件:
1.未被“信用中国(贵州)”网列入失信惩戒名单;
+
黔东南州产业大招商政策
摘编
·164·
2.企业货物进出口额、服务贸易收入额、跨境电子商务进出口额须达
到第三条规定的规模,且数据统计在黎平县;
3.申请服务外包奖励的企业须在商务部服务外包业务管理和统计系统
注册,并按时填报服务外包统计数据信息。
二、奖励标准及依据
(一)奖励标准
1.货物贸易进出口奖励。申报年度企业货物贸易进出口总额达到(含)
50美元以上,每50万美元奖励0.5元(人民币,同)。单户企
奖励金额最高不超过3万元。
2.服务贸易进出口奖励。申报年度企业服务贸易进出口总额达到(含)
10美元以上,每10万美元奖励0.5元。单户企业励金额最高不
3万元。
3.跨境电子商务奖励。经省商务厅认定的跨境电商重点企业,申报年
到(5050万美元奖励
0.5万元。单户企业奖励金额最高不超过3万元。
(二)奖励依据
货物进出口和跨境电商企业数据以海关统计数据为准;服务贸易企业
进出口数据以外汇管理局统计数据和结汇单为准。
三、奖励申请及资金拨付
(一)每2月底前由相关企业向县商务部门提交上一奖励申请
及相关必需材料(申报指南另行印发),县工信和商务局联合相关部门组
织审核,并按照程序拨付奖励资金。
(二)申报年度专项资金安排不超过30万元,若企业申报奖励资金规
模总和大于申报年度安排的专项资金规模,在专项资金规模内统一确定申
报项目资金核批比例。
+
黔东南州产业大招商政策
摘编
·165·
(三)申报年度企业不重复享受县级财政扶持奖励,享受标准就高不
就低。
政策依据:县人民政府办公室关于印发《黎平县加快促进外贸高质量
发展奖励办法(试行)》的通知(黎府办发〔202251号)
(一)贵州省优化营商环境条
1.优化营商环境应当坚持市场化、法治化、国际化原则,以市场主体
需求为导向,持续深化简政放权、放管结合、优化服务改革,践行有求必
应、无事不扰的服务理念,打造以企业为贵、以契约为贵、以效率为贵、
以法治为贵的贵人服务品牌,营造稳定、公平、透明、可预期的营商环境。
2.本省加大对中小投资者权益的保护力度,完善中小投资者权益保护
机制,依法保障中小投资者的知情权、参与权,提升中小投资者维护合法
权益的便利度。
3.各级人民政府及其有关部门应当实行全国统一的市场准入负面清单
制度,不得另行制定市场准入性质的负面清单。市场准入负面清单以外的
领域,各类市场主体均可以依法平等进入。
4.外商投资实行准入前国民待遇加负面清单管理制度。外商投资准入
负面清单以外的领域,按照内外资一致的原则实施管理。县级以上人民政
府可以根据法律、法规的规定,在法定权限内制定外商投资促进和便利化
政策措施。
5.按照国家有关规定推进证照分离和多证合一,将涉企经营许可事项
纳入证照分离改革范围,依法通过直接取消审批、审批改为备案、实行告
七、营商服务类政
+
黔东南州产业大招商政策
摘编
·166·
知承诺、优化审批服务等方式分类推进改革。除法律、行政法规规定的特
定领域外,涉企经营许可事项不得作为企业登记的前臵条件。
6.人力资源社会保障部门应当加大主导产业紧缺人才培养力度,支持
困难企业开展职工在岗培训,健全就业需求调查、动态监测和失业监测预
警机制,及时公布人力资源供给与市场需求信息。组织实施急需职业和工
种的人才培养开发计划,构建技能人才终身培训体系,培育技艺精湛、门
类齐全、结构合理、素质优良的工匠人才。
7.发展改革、财政、税务等有关部门应当及时公布惠企政策清单,做
好政策宣传和辅导,主动精准向市场主体推送惠企政策,及时研究解决政
策落实中的具体问题,确保政策全面、及时惠及各类市场主体。
8.实行惠企政策免申即享,通过政府部门信息共享等方式,实现符合
条件的企业免予申报、直接享受政策。确需市场主体提出申请的惠企政策,
应当合理设臵并公开申请条件,简化申报手续,实现一次申报、全程网办、
快速兑现。
9.城镇内的市场主体报装水、电、气需要在红线外新增配套设施建设
的,由供水、供电、供气等企承担的部分,纳入企业经营成本;按规
由政府承担的部分,应当及时拨款委托供水、供电、供气等企业建设,或
者由政府直接投资建设。
10.本省格控制新设行政许可,止以案、登记、注册、目录
规划、年检、年报、监制、认定、认证、审定以及其他任何形式变相设定
或者实施行政许可。对通过事中事后监管或者市场机制能够解决以及行政
许可法和国务院规定不得设立行政许可的事项,一律不得设立行政许可。
11.在确保质安全前提下,对社投资的小型低风险程建设项目,
由有关部门发布统一的企业项目范围、开工条件。项目单位取得用地、满
足开工条件后作出相关承诺,有关部门直接发放相关证书,项目即可开工。
+
黔东南州产业大招商政策
摘编
·167·
社会投资的小型低风险工程建设项目工程规划许可和施工许可依法可以合
并办理的,应当合并办理。从立项到不动产登记全流程审批时间累计不超
15日。房屋建筑工程类社会投资项目审批时间不超过40日。
(二)“贵人服务”政策
1.大力提升政务服务水平。实施政务服务事项标准化攻坚工程,实现
省内所有事项“全省通办”。除涉密和特别复杂事项外,“一窗办”全省
全覆盖,企业开办、不动产登记、水电气视讯等涉企事项“一窗进”“一
窗出”。规范编制“一次办”办事指南,实现全省政务服务事项“一件事
一次办”。在贵州政务服务网开设人才服务、重点产业、乡村振兴、财政
支持、项目投资、金融服务、知识产权、科技创新等专区20个以上,精准
服务重点领域和产业。
2.优化企业开办服务和简易注销。优化升级企业开办“一网通办”系
统和企业注销网上服务专区,力争打造企业开办和企业注销最佳服务链。
登录一个网站即可一次性办理营业执照、刻制印章、申领发票和税控设备、
员工参保登记、住房公积金企业缴存登记,1天内办结;银行开户1天。进
一步简化企业注销登记程序和材料,加强跨部门业务协同,提供“套餐式
企业注销服务。
3.提高工程建设项目审批服务效率。从立项到竣工验收全流程审批时
间:政府投资类工程项目不超过70个工作日;带方案出让的社会投资项目
不超过35个工作日;小型社会投资项目不超过45个工作日,一般社会投资
工程建设项目不超过50个工作日;既有建筑改造项目中基础类不超过15
工作日、完善类不超过18个工作日、提升类不超过23个工作日。探索研究
审批服务机构合并,提升工程建设项目审批服务能力和水平。
4.提升不动产登记便利度。各市州专设企业登记窗口,实现“一窗受
理、内部流转、即时办结、同窗出证”。逐步推进与公安、市场监管、法
+
黔东南州产业大招商政策
摘编
·168·
院、税务等部门业务协同信息共享,最大限度减少纸质资料收取。推动省
不动产登记云平台与省税务核税缴税系统、省财政非税收费系统业务协同,
企业间办理转移登记当场缴税费、缴登记费后,当场发证,企业最多跑一
次。
5.严格兑现政策承诺。把各级政府部门兑现政策、履行承诺、执行联
合信用奖惩情况纳入政务诚信监督考核内容,强化政务诚信建设,依法依
规处理“新官不理旧账”问题。
6.强化要素保障。围绕国家级开放平台“两主一特”(即两个主导产
经开区、一主一特
(即一个主导产业、一个特色产业)产业发展,强化用地、用电、用水、
用气等资源要素向园区倾斜,引导企业向园区集聚,切实降低企业要素成
本。
7.提升获得电力服务水平。进一步优化公用事业接入服务办理方式,
实现接入办理全过程网通办”集成服务。低压无外线工3工作
接电,小微企业低压无外线工极速报装2个工作日接电、有外线工程10
个工作日接电,高压单电源平均接电时间压缩20%
8.提高用水用气保障。加快推进用水用气报装信息化建设,提升用户
体验满意度。出台用水用气报装标准,统一流程、要件、时限等要素,缩
短通水通气受理答复和验收供应时间。建立完善报装投诉监管、纠纷解决
及回访机制2023年,线工程不超过30,水表口径在DN100以下
涉及行政审批时间不超过2.5工作日的,在8个工作日接表通水。
9.持续改善获得信贷水平。推动普惠小微企业贷款同比增速高于各项
贷款增速,有贷款余额的户数逐年增加。简化贷款办理流程,贷款办理时
间进一步压缩。推动区域性股权市场规范健康发展,做大做强登记、托管、
挂牌等股权业务,扩大中小微企业股权直接融资规模。建成贵州综合金融
+
黔东南州产业大招商政策
摘编
·169·
服务平台,持续优化升级,不断提升服务能力和水平。
10.优化动力市场监管。进一步强就监测平台建设,依据大
据监测促进实现更加充分的就业。健全劳动力市场调解与仲裁衔接机制,
通过调解组织协助申请和送达、一次性告知、仲裁机构就近就地开庭等措
施简化流程和缩短处理期限。把灵活就业、共享用工岗位信息纳入公共就
业服务范围,对设立劳务市场、零工市场或在各类招聘会开设灵活就业专
区给予支持、提供便利。
11.不断化纳税服务水平。在五种综申报基础上,进一步研
扩大税费缴纳综合申报范围,简并申报表,减轻税费缴纳负担。拓展“非
接触式”办税缴费服务,2023年实现企业所有办税缴费事项网上办,平均
时间缩短至80小时。
12.深化招标标改革。建立健全投标领域优化营商境长效机制,
全面清理招标投标制度规则、对同一事项有多个规定的,视情作出合并、
衔接、替代、废止等处理。对省、市(州)两级保留的招标投标地方性法
规、规章、规范性文件实行目录管理,并动态更新,未列入目录的,一律
不得作为行政监管依据。优化公共资源交易服务流程,推进公共资源交易
全流程电子化,建立“公开透明、公平公正、规范高效”的公共资源交易
市场。
13.提升包容普惠创新境。优层次人才引进计划,利用贵
才博览会等平台,工程化、项目化引进一批高层次创新创业人才(团队)
和急需紧缺专业技术技能人才,加快建成省级“人才之家”服务平台,升
级完善省人才服务绿卡制度,推行贵州“优才卡”。整合科技资源,支持
产、学、研组成市场化联合体,打通从基础研发到应用技术、再到产业化
的全过程通道。实施创新示范工程,为企业开展技术、产品创新搭建载体
平台。完善公共服务保障体系,切实解决好企业居住、交通、医疗、教育、
+
黔东南州产业大招商政策
摘编
·170·
社会保障等实际问题,提高企业满意度。
政策依据:打造“贵人服务”品牌建设国内一流营商环境三年行动计
划(20212023)黔委厅字〔20219
(三)贵州2023年度优化营商环境重点任务清单
()进一步打造开放透明的市场准入环境
1.提升企业开办“一网通办”服务效能。企业设立登记时,同步推送
税务、公安部门进行身份认证,并申领发票、免费发放电子发票公共服务
平台身份认证及信息加密设(税务Ukey)、刻制印章,企业登记完成后,
可通过“一网通办”平台办理医保登记、社保登记、住房公积金缴纳等服
务事项,推进同步发放及应用电子营业执照、电子发票,生成企业电子登
记档案,提高全程网办水平,续确保企业开办全流程办理时间不超过1
个工作日。
2.深入推进“一照多址”改革。经营范围不需前置许可的市场主体在
其住所所在县级辖区内增设经营场所,可不办理设立登记。在同一企业登
记机关管辖区域内,允许大型企业分支机构、连锁门店集中统一办理不涉
及新办许可证的信息变更。
4.持续提升工程项目审批效率。按照全领域、全覆盖、全流程要求,
强化“一个系统”功能,依托贵州政务服务网,全面归并单部门事项办理
入口,实现工程建设项目“全程网办”,推进全省工改系统从“能用”到
好用”“愿用”。实施“1+N”并联审批、联图、联合验收式,
按照“一家牵头、并联审批、限时办结”开展审批,并联审批率和联合验
收率分别达到30%35%。政府投资项目审批时限不超过70个工作日,社会
投资项目不超过40个工作日。
5.推进工程建设项目审批流程电子化试点工作。在有条件的市()
行工程建设项目审批流程电子证照“一次生成、统一流转、互认共用”。
+
黔东南州产业大招商政策
摘编
·171·
工程建设项目审批涉及的建设工程规划许可证、建设项目用地预审与选址
意见书、建筑工程施工许可证、人防工程质量监督手续、人防工程竣工验
收备案、房屋建筑和市政基础设施工程竣工验收备案等环节在试点地区实
现电子证照全面应用。
6.推进项目代码应用全覆盖。规范工程建设领域项目代码管理和应用,
投资项目在线审批监管平台生成的项目代码作为项目整个建设周期的唯一
身份标识,依法实现“一项一码”。
7.推进工业用地“标准地”改革。指导有条件的开发区、产业园区开
展“标准地改革,实“拿地即开工”。贵市、遵义市分别完5
以上“标准地”出让,其他市()分别完成2-3宗“标准地”出让。
8.提升电力服务水平。供电报装全面实现居民用户和低压小微企业办
电“三零”(零上门、零审批、投资)服务,高压用户办电三省”(
力、省时、省钱)服务。对合条件的低压短距离电力接入工程,探索实
行告知承诺和审批改备案。20千伏及以下短距离电力接入工程实现并联审
批,办理总时限不超过5个工作日。用电报装业务扩充时限达标率达97%
上,供电可靠率达99.87%以上综合电压合格99.7%上,
提升供电可靠性和稳定性。
9.提升用水用气便利度。用水、用气报装全过程审批时限分别压缩至
2.55个工作日以内。严格执行建筑区划红线外用户水气接入“零负担”
政策。强化企业一对一专人负责制,提供全天候24小时供水供气维修、抢
修等服务。
10.推动公用设施服务一件事一次办。完善水电气(宽带)联合
报装机制,实现一表申请、一窗受理、一站服务。推行水电气报装占掘路
并联审批、10个工作日内办结。
()进一步打造公平公正的企业经营环境
+
黔东南州产业大招商政策
摘编
·172·
11.降低企业税费负担全面推广字化电子发票,优化电子税
配套功能。推行全国车船税缴纳信息联网查询与核验。推进增值税留抵退
税、出口退税、企业所得税汇算清缴退税、误收多缴退税办理流程改造提
速,制造业纳税人增值税留抵退税时间压缩至2个工作日,办理正常出
口退税平均时间压缩6作日内,其中一类、二类出口业办理正常
出口退税平均时间压缩至3工作日内。严格落实各项税降费政策,切
实降低企业负担。
12.提升纳税缴费便利。完善互动平台,主动甄别符合享
惠政策条件的纳税人缴费人,推行“实时提醒、精准推送、智能应答、办
税引导、互动交流、决策支持、服务评价、全程管控”的征纳互动服务模
式,“非接触式”办税缴费事项比例达95%以上、金额比例达80%以上,领
用发票的新办税人电子发票领用比例80%依托自助办税端、
机构等,打造“15分钟办税服务圈”,为纳税人缴费人提供一体化、智慧
化、差异化涉税()服务。
13.拓展企业涉税数据放维度成辖区内欠税公告信息、非
户信息、骗取退税、虚开发票等高风险纳税人名单等信息归集。向国家税
务总局申请开放查询接口,实现与其他省级税务机关涉税信息共享共用。
14.推进跨部门综合监。对食药品、医疗器械、危险化学
燃气、特种设备、建筑工程质量等直接关系人民群众生命财产安全、公共
安全和潜在风险大、社会风险高的重点领域及新兴领域中涉及多部门监管
的事项,由行业主管部门或法律法规规定的主管部门会同相关监管部门梳
理实施跨部门综合监管事项,形成监管合力,在强化监管的同时,最大限
度减少对市场主体正常生产经营活动的干扰。
15.提升事中事后监管能。在建设、市场监管、生态环境
域建立企业信用风险分级分类管理指标体系和系统,完善“双随机、一公
+
黔东南州产业大招商政策
摘编
·173·
开”监管平台,推动“双随机、一公开”监管和企业信用风险分类管理深
度融合,“双随机、一公开”监管数据及时反馈回信用风险分类管理系统,
实现抽查监管全流程整合。“双随机、一公开”监管常态化,实现抽查事
项覆盖率达100%,非涉密检查结果公示率达100%
16.完善柔性执法和包审慎监度。推动非现”监管
接触”执法改革,健全“首违免罚”“柔性执法”“分级监管”等制度,
探索出“一目录五清单”(分类检查目录“不予、免予、减轻、从轻、
从重”处罚五清单)规范行政裁量权,精准高效监管执法。常态化开
展人民群众最不满意的行政执法问题整改活动。
17.加快推进政府采购电子化建。优升级政府采购监督管理系统
完善采购数据分析统计功能,将政府采购政策要求嵌入监管系统,进一步
压实采购主体责任,推动政府采购监督管理系统实现省市县全覆盖。推动
贵州省公共资源交易网与贵州省政府采购网互联互通。
18.加强招标投标信息开。严实《公共资源交易领域基层
公开标准指引》要求,依法必须招标项目的招标人及时主动公开合同订立
信息。完善各级公共资源交易平台、省招标投标公共服务平台合同签订和
监督功能,推动合同订立信息公开。
19.强化招标投标监管按照双随机、公开”监模式,地各
部门随机抽查例不低于本年度依法必须招标项目总量的10%,重点检
招标文件(资格预审文件)是否设立隐形壁垒、招标代理机构代理行为是否
扰乱市场秩序以及异议投诉办理等情况。
20.提升金融服务水平加快推广用贵州省大数据综合金融服
台,进一步完善政金企常态化对接机制,对重点企业、重点项目融资需求
给予精准化支持。完善风险分担补偿机制,促进银行、担保、保险机构合
作联动。推动金融机构成立首贷、续贷中心,并提高首贷、续贷审批效率
+
黔东南州产业大招商政策
摘编
·174·
和申贷获得率。用好科技创新再贷款、碳减排支持工具和支持煤炭清洁高
效利用专项再贷款政策,持续推动科技金融、绿色金融发展。力争全省制
造业贷款增速低于10%制造中长期贷款增量不低于80亿元,绿色
款增量不低于500亿元。
21.加大对中小微企业贷支持导金融机构依托金融科技加
字化转型,运用纳税、水电气、社保等信用信息,开发针对中小微企业的
金融产品。积极发展供应链金融,支持中小微企业开展应收账款融资。进
一步落实中小企业信贷通政策,扩大贷款规模。完善尽职免责、审批权限
下放、绩效考核等金融机构内部政策,推动金融机构“敢贷愿贷能贷会贷
长效机制建设。
22.大力推进创新创业扎实开千企对面”科服务,施规
上企业研发机扶持计划,新认定高新技术企业500家。深化科技管理
制改革,培育建设一批创业孵化载体,孵化一批初创企业。持续推进国家
级、省级“双创示范基地”建设。工程化、项目化引进一批高层次创新创
业人才(团队)和急需紧缺专业技术技能人才。
23.持续提升基本公共服务。推优质育资源均衡覆盖,缩小区域
城乡、校际教育资源差距。推动贵阳市、遵义市、安顺市、铜仁市区域内
医学检查检验结果互通共享。加大养老服务体系建设资金投入。持续打好
污染防治攻坚“五场战役”。实施森林质量精准提升工程。
24.
“公转铁”“公转水”等多式联运改革,推进铁路专用线建设,降低综合
货运成本。建成兰海高速重庆至遵义段(贵州境)扩容工程,加快沪昆高速
贵阳至盘州段扩容工程、贵阳至北海高速贵阳至平塘段建设,持续推进乌
江航道改造提升工程。
()进一步打造高效便捷的政务服务环境
+
黔东南州产业大招商政策
摘编
·175·
25.深化政务数据共享系统融深入实施政务服务数据融通
工程,除公安等部门自建业务系统外,完成省内自建业务系统与贵州政务
服务网整合,打通各部门之间、部门与企业之间的数据壁垒,推动政务数
据汇集上传系统和反流下沉基层,实现一般政务服务事项100%全程网办
(法律法规明确必须到现场办理或者申请资料涉密的事项除外)。打造贵州
自然人、法人数据云,依法收集与法人、个人有关的高频使用信息,对于
数据云中已有的信息,政务服务窗口原则上不再查看和收取纸质材料。
26.提升政务服务效能依托政务“张网”,鉴一窗合受
理模式,推动“一网一窗通办”改革,深入推进企业办事“一次告知、一
次办理、一次补证”。依托大数据、人工智能等前沿技术开展智能审批服
务,加强“移动办”“自助办”能力,做强多端服务,开展“一网一窗”
前端多渠道办理,赋能社会化平台多渠道应用,实现个人“移动办”事项
占比达70%在现有跨省线下通基础上,续推动跨线上办”“
动办”“自助办”。
27.全面推进政务服务电子化改革。推出100个高频事项“一证通办”,
实现户籍、婚姻、社保、医保、低保等20个行业证明通过数据核验在线开
具,在全省范围互认通用。加强电子证照归集与应用,省直各部门要梳理
本行业证照清,制定电子证照标准,实现70%以上的证照在贵州政务
务网数字证照系统同步制发应用。各地各部门按照全省统一要求,全面落
实事项办结后电子证照和纸质证照同步制发应用,充分利用电子证照利企
便民。全省电子印章使用率提升到70%以上。
28.推进不动产登记、易和缴线上线下一窗受理、并行办理
善不动产登记平台和税务信息系统业务联办、政务服务身份认证等功能,
在贵阳、遵义等城市开展房屋交易信息共享,推进与法院、公安、市场监
管、税务等部门业务协同、信息共享,初步实现贵阳、遵义主要城区不动
+
黔东南州产业大招商政策
摘编
·176·
产登记、交易和缴税线上线下一窗受理、并行办理。
29.提升公共资源交易台便利务水平。全面建成公共资源
“全省一张网”,优化平台系统基础功能、增值功能、智慧功能,升级网
上交易大厅。积极探索省际区域性协作,破除交易隐性壁垒。推广电子保
函代替投标保证金,鼓励招标人接受保函(含电子保函)等非现金交易担保
方式。
30.提升口岸通关率。鼓励业采“提申报”“两步申
方式理通手续,实“7×24小时预约通关,利国际贸易单一
窗口”为企业提供进出口货物全流程单证查询服务。对符合备案要求的,
报关单位备案时限控制在3个工作日内。
31.提升12345热线工单诉求办结率。进一步畅通各地各部门诉求“一
号通办”“电话办”渠道,年底前实现各市()数据全量汇聚。加强对各
地各部门诉求办理处置全过程监管和考核评价,提升诉求一次办结率。
()进一步打造健全规范的法治保障环境
32.提升涉企案件审判效。推民法院在线服务平台运用,
法院网上立案率同比提升5百分点。建立涉企超18个月未结一审案件台
账,制定清结案,实现全省法院长期未结一审案件清结率达85%。持
续深化诉源治理,依托88个人民法庭观测点,大力开展诉前调解和巡回审
判。
33.提升就业服务保障平。深业员工录一件事和就业参
保登记一体化改革,推广运用电子劳动合同。完善劳动投诉申诉处理、争
议解决等工作机制。推进企业吸纳就业社会保险补贴“直补快办”。
34.加强劳动者合法权保护。建立劳动仲裁与法律援助工
接机制,在劳动人事争议仲裁机构设立法律援助工作站。完善政府部门、
工会、企业共同参与的协商协调机制。推进劳动关系“云调解”“云庭审”
+
黔东南州产业大招商政策
摘编
·177·
建设,实现申请劳动人事争议调解仲裁“零跑动”。加大劳动监察执法力
度,加强灵活就业人员权益保护,逐步提高灵活就业人员获得医疗、养老
等社会保障的覆盖面。
35.健全知识产权全链保护体严厉打击侵犯知识产权和制
冒伪劣商品行为,年底前实现全省知识产权纠纷行政机关办理案件法定期
限内综合案率100%知识产权纠纷法案件法定审限内结案率达90%
以上。
36.加强知识产权质押资。推行等金融机构与市场主体开
接,提升知识产权质押登记便利化水平,将知识产权质押登记完成时限缩
短至5个工作日内。
37.优化知识产权服务指导知权代理机构为中小微企业提
识产权咨询、基础代理、维权等专业化服务,引导企业建立完善知识产权
管理制度。对首次通过知识产权管理规范国家标准认证的企业给予资助。
年底全省高价值发明专利同比增长5%
38.保护中小投资者合权益。全省各类市场主体监管,依
处证券期货违法违规行为和非法证券期货活动。推动投资者教育基地建设,
对辖区内市场主体开展保护投者宣传及证券机构合规经营培训不少于2
次。健全全省证券期货纠纷多元化解机制,提升中小投资者纠纷调解能力
和效率。
39.推动企业上市挂牌加强上牌后备企业资源库建设,主
企业开展资本市场业务培训,指导企业按照上市挂牌公司标准规范运作,
推动符合条件的企业在沪深北证券交易所和境外上市挂牌。
40.推进破产案件分流制定破件简化审理工作机制,按简
度分为无产可破、简单、普通三类,除特殊情况外,无产可破、简单案件
于裁定受理之日起6个月内审结,普通案件于24个月内审结。
+
黔东南州产业大招商政策
摘编
·178·
41.加快清理长期未结产案件定三年以上未结案件清理方
结案计划,年前完80%的清理工作。省法院、省公安厅和省检察
合建立打击逃废债工作机制,加强对破产企业财产的追查和管理,有效保
护债权人合法权益。推动“贵州智破云平台”运用,实现全省破产案件平
台化管理。
()进一步打造以企业为贵的“贵人服务”营商环境品牌
42.打造企业家”。围绕企业全生命期、全经链条、生产
要素保障,依托各级政务服务中心,打造集政务服务、商务服务、投诉接
处、惠企政策兑现等功能于一体的“企业之家”。
43.着力消除营商环境点堵点展“局长走流”活动通过
各级审批、执法和公共服务部门主要负责人体验企业办事流程、跟踪执法、
处理投诉等全过程,查找政策、流程、服务差距和不足,优化顶层设计。
持续聘用企业家担任“义务监督员”“政务服务体验官”,对营商环境进
行常态化社会监督。
44.开展企业包保代办务。深进网格化企业服务机制,建
全属地党政、行业部门主要负责人倾听企业发展需求常态化机制。围绕企
业“全生命周期”事项,梳理形成创业“一件事”、工程项目审批“一件
事”、复工复产政策兑现“一件事”等事项,实现一站式代办服务。持续
开展项目全程代办服务,制定标准化服务清单和个性化服务清单,提供全
程免费代办服务。
45.提高惠企政策获取。定期公布惠企政策清单,利用贵
务服务网、“贵商易”企业综合服务平台等精准推送。简化惠企政策申报
材料、流程,推进惠企政策在贵州政务服务网和政务大厅“一网办”“一
窗办”。推进部分惠企政策“免申即享”,让政策红利精准直达企业。
46.开展法律暖企服务动。汇师、公证、人民调解、仲裁
+
黔东南州产业大招商政策
摘编
·179·
律服务资源,加强对中小微企业普惠性法律服务。深化涉企矛盾纠纷源头
治理,发挥司法在商事调解工作中的推动和保障作用。
47.强化诚信政府建设开展政资项目拖欠账款或以不签合
不开发票、不验收、不结算等方式变相拖欠账款的专项清理行动。公开曝
光整治新官不理旧账”“ 招商引资承诺不兑现”“政策落实不到
位”“不作为、乱作为”等突出问题。开展以党政机关为被执行人的特殊
主体案件专项执行行动,督促党政机关及时履行法律文书确定义务。
三、组织保障
48.加强组织领导。落各级各主要负责人营商环境建设第
任人制度,坚持各级各部门主要负责人牵头研究部署、分管负责人协调推
动、相关部门协同推进机制。各级各部门要配齐配强营商环境工作队伍,
强化业务培训,抓好梯队建设,保持队伍的稳定性和延续性。
49.强化调度考核。各营商环设主管部门要落实“月调、季
通报、年考核”工作推进机制,加强上下联动,形成省市县三级协同优化
营商环境的良好局面。建立以企业家获得感为导向的营商环境考核制度,
优化营商环境评价指标体系,将企业家评价权重提升至80%
50.营造良好社会氛围鼓励各展优秀企业家评选表彰活动
用各级各部门网站、新媒体平台,开设“营商环境”专栏,广泛宣传优化
营商环境政策措施、经验做法,曝光损害营商环境的负面行为和典型案件,
营造良好社会氛围。
政策依据:省人民政府办公厅关于印发贵州省2023年度优化营商环境
重点任务清单的通知(黔府办函〔202316号)
(四)项目投资服务政策
()大力推进企业开办“一网通办、一窗通办”
1.企业开办线上“一网通办”。完善全省企业开办“一网通办”平台
+
黔东南州产业大招商政策
摘编
·180·
(以下简称“一网通办”平台),将企业设立登记后首次办理公章刻制、申
领发票和税控设备、员工参保登记、医保登记、住房公积金企业缴存登记、
银行开户等事项纳入“一网通办”平台覆盖范围。深化贵州政务服务网与
“一网通办”平台融通,各地应鼓励和引导申请人通过贵州政务服务网在
线申请办理,对申请人需要线下现场办理的,各级市场监管部门要积极引
导、指导申请人在线办理。公安、税务、社保、医保、住房公积金管理、
开户银行等部门要在“一网通办”平台实现企业开办有关业务办理,不得
要求申请人重复提交纸质申请材料。
2.企业开办线下“一窗通办”。根据《贵州省政务服务“一窗通办
工作规(试行)(放管组办发20201)、《省场监管局等
部门关于进一步完善企业开办"一网通办、一窗通"作的通知》(黔市
监办发〔202137)求,县级以上政务服务大厅要调设置企业
专窗,由政务服务中心通过增加编制、调剂原部门进驻人员、购买服务等
方式配备人员。企业开办专窗承担现场咨询、前台收件、一窗发放等工作,
各业务部门派驻实体政务大厅后台负责相关事项审批决定,通过前后台全
程无缝对接,实现企业开办线下“一窗受理,一窗发放”。新开办企业通
过线上或线下方式申请办理相关业务,并选择领取纸质营业执照、免费公
章、纸质发票和税控设备等全套实体办件的,可由新开办企业法定代表人
持本人身份证原件到企业开办专窗领取,也可由新办企业填报的委托代理
人持本人身份证原件到企业开办专窗领取。
()大力推动企业开办要素电子化
1.推广电子营业执照应用。依托贵州政务服务网电子证照库,推广电
子营业执照在政务领域应用,实现企业申请办理政务服务事项时使用电子
营业执照“可登录、可核验、免提交”。将电子营业执照作为企业开办相
关业务的合法有效身份证明和电子签名手段。拓展电子营业执照在商务领
+
黔东南州产业大招商政策
摘编
·181·
域应用,加大电子营业执照数据共享力度,为涉企银行业务提供电子营业
执照查询、存档、校验等服务能力,推动商业银行使用电子营业执照作为
企业身份凭证办理开户业务,企业免于提交纸质营业执照原件或复印件。
2.继续推动电子发票应用。继续推行增值税电子普通发票,在新办纳
税人中实行增值税专用发票电子化。
3.明确企业亮照经营方式。企业在经营场所中公开展示电子营业执照,
等同于悬挂纸质营业执照,视为已履行亮照经营义务。
4.完善身份验证方式。优化“一网通办”平台身份验证功能,企业开
办相关自然人通过“一网通办”平台一次身份验证后,其他业务部门共享
使用“一网通办”平台身份验证信息,在相关业务审批办理、证照发放等
工作中不再重复进行身份验证。
5.强化部门信息共享。省级层面实现“一网通办”平台与市场监管、
公安、税务、社保、医保、公积金、开户银行等部门相关业务办理系统的
共享对接,实现申请事项信息的“实时流转、及时反馈”。
①市场监部门应当0.5作日内办结新开办企业立登记申请,
“一网通”平台将相关信息实时(“网通办”台与部门业务办理
统之间的数据推送和接收间隔应小于10分钟)共享给相关部门。
②各相关部门获取信息后,公安部门通过系统将有关信息即时推送至
印章刻制单位印章刻制单位应当0.5工作日内办结;税部门
0.5工作日内办结发票和税控设申请;社保、医保、公积金管理
门收到相关信0.5个工作日内办结关业务;开户银行收到相关
0.5工作日内生成企业账预约账号,并通过平台推送给税务、社保、
医保、住房公积金管理等部门。③各业务办理部门应当及时将相关业务受
理、核准等办理状态信息反馈至“一网通办”平台,申请人可通过“一网
通办”平台即时查阅办理进度。
+
黔东南州产业大招商政策
摘编
·182·
()大力简化企业开办业务流程
1.企业设立登记再简化。
有序推进企业住所(营场所)告知承诺制,新开办企业选择通过告知
承诺方式办理住所(经营场所)登记并按要求做出承诺的,市场监管部门不
再收取住所(经营场所)合法使用证明。全面实行经营范围规范化登记,将
经营范围由登记叙述文字优化调整为登记规范条目,由申请人从规范目录
中自由选择规范条目申请登记,进一步优化经营范围登记方式和内容,降
低企业经营范登记的制度性成本。市场监管部门应当在0.5个工作日
办结企业设立登记申请,并及时将纸质营业执照送达企业所在地政务服务
中心企业开办专窗,由企业开办专窗统一发放。
2.公章刻制程序再优化。
新开办企业可以通过“一网通办”平台选择免费实物印章,由企业所
在地政府提供一次免费刻章服务。提供免费刻章服务的印章刻制企业应当
0.5工作日内完成印章制作、备,并及时将实物印章送达企业所
地政务服务中心企业开办专窗,由企业开办专窗统一发放。对于印章刻制
企业未按本《通知》要求按时刻制印章或引起较多投诉的,“一网通办”
平台管理部门有权将其移除平台。
3.涉税事项办理再提升。
新开办企业通过“一网通办”平台申请办理申领发票和税控设备的,
税务部门应当0.5工作日内成,并及时将发票和税控设送达企业
所在地政务服务中心企业开办专窗,由企业开办专窗统一发放。
4.员工参保登记(含医保)、住房公积金企业缴存登记再整合。
在已实现新开办企业就业参保登记、住房公积金企业缴存登记“一网
通办”基础上,进一步将医保登记整合纳入“一网通办”平台覆盖范围。
新开办企业通过“一网通办”平台填报的申请信息在企业设立登记后实时
+
黔东南州产业大招商政策
摘编
·183·
共享至社保、保、公积金管理部门,相关部门应当0.5个工作日
结业务。
5.银行开户再提速。
新开办企通过“一网通"申请办理银行开户的,开户行应
当在0.5个工作日内生成企业账预约账号,并同步通过网通办”
台反馈申请人。后续开户银行根据预约需求及时联系申请人,按照规定为
企业开立账户。推动开户银行使用电子营业执照作为企业身份凭证开设银
行账户,企业免于提交纸质营业执照原件或复印件。
政策依据:省市场监管局等九部门关于进一步加大改革力度不断提升
企业开办服务水平的通知(黔市监办发〔202153号)
(五)贵州省招商引资项目代办服务暂行办法
在省、市、县三级投资促进机构和省级以上经济开发区管委会,设立
利用外资和招商引资项目代办服务中心受理招商引资项目代办事项。
对符合产导向的利用外和境内省外的招商引资项目(含国
观调控项目“两高一资”房地产开发项目)项目立项到项目开工、
投产全过程中所涉及的行政审批事项,以及供电、供水、供气、消防、排
水、通讯、网络等公共服务事项,投资者均可委托代办服务中心代为办理
相关手续,并可根据自身需要选择全程代办或部分代办,特殊情况也可申
请延伸代办服务。
质量发展的指导意见
引导产业项目符合生态红线管控要求。
在项目规划、招商、设计阶段,通过强化“三线一单”提前介入,指
导项目业主避让生态保护红线,避让不利地质条件,优化选择建设用地。
+
黔东南州产业大招商政策
摘编
·184·
实施清单管理。
建立重点支持重大项目清单,实施台账制管理,按月调度项目环评审
批工作进展,对完成项目环评审批的逐一销号;强化技术评估同步介入和
专班专人服务,通过加强企业、环评单位、技术评估单位和审批部门的联
动,切实保障编制质量,确保一次受理,一次评估、一次审批,全过程做
实跟踪指导服务。
简化资料和程序。
全面梳理生态环境准入正面清单,及时调整豁免清单。深入实施环评、
排污许可和入河排污口设置“三合一”行政审批制度,实行一次审批。实
施“一站式服务”,做到“一窗通办”“全省通办”、“一网通办”和排
污许可“全国通办”。严格落实评估时间纳入审批时间的要求,先受理后
评估,评估费用纳入财政预算,严格报告书审批时15个工作日,报告表
7个工作日的要求(不含规定的公示时间)
政策依据:贵州省生态环境厅关于印发《贵州省生态环境厅关于生态
环境保护优化推动产业高质量发展的指导意见》的通知(黔环发〔2021
6号)
+
黔东南州产业大招商政策
摘编
·185·
黔东南州各县市(区)招商电话
黔东南州招商热线:4008-799399
凯里市投资促进局:0855-8068237
丹寨县投资促进局:0855-3695381
麻江县投资促进局:0855-2678228
黄平县投资促进局:0855-2438559
施秉县投资促进局:0855-4222036
镇远县投资促进局:0855-5722848
岑巩县投资促进局:0855-3576046
三穗县投资促进局:0855-4525831
天柱县投资促进局:0855-3850088
锦屏县投资促进局:0855-7225677
黎平县投资促进局:0855-6227627
从江县投资促进局:0855-6419038
榕江县投资促进局:0855-6620368
雷山县投资促进局:0855-3333103
台江县投资促进局:0855-5324777
剑河县投资促进局:0855-5220166
黔东南高新区投资促进局:0855-8559108
+
《黔东南州招商》微信公众号
黔东南招商项目信息
招商热线:4008-799399
址:http://tzcj.qdn.gov.cn/
+
+
+ +
+ + diff --git a/qdntz/inc/tzzc/LICENSE b/qdntz/inc/tzzc/LICENSE new file mode 100644 index 0000000..5c93f45 --- /dev/null +++ b/qdntz/inc/tzzc/LICENSE @@ -0,0 +1,13 @@ + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (C) 2004 Sam Hocevar + + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. diff --git a/qdntz/inc/tzzc/README.md b/qdntz/inc/tzzc/README.md new file mode 100644 index 0000000..643006b --- /dev/null +++ b/qdntz/inc/tzzc/README.md @@ -0,0 +1,9 @@ +# PDFViewer +在前端显示PDF文件,针对PDFObject库不支持的浏览器可以使用Canvas绘制PDF文件内容。 + +使用了PDFObject和PDF.js这两个库。 + +# 官网链接: +PDFObject:https://pdfobject.com/ + +PDF.js:http://mozilla.github.io/pdf.js/ diff --git a/qdntz/inc/tzzc/canvas/index.html b/qdntz/inc/tzzc/canvas/index.html new file mode 100644 index 0000000..349278d --- /dev/null +++ b/qdntz/inc/tzzc/canvas/index.html @@ -0,0 +1,86 @@ + + + + Show PDF + + + + + + + diff --git a/qdntz/inc/tzzc/canvas/pdf.js b/qdntz/inc/tzzc/canvas/pdf.js new file mode 100644 index 0000000..6cea4c9 --- /dev/null +++ b/qdntz/inc/tzzc/canvas/pdf.js @@ -0,0 +1,9052 @@ +/* Copyright 2012 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +(function (root, factory) { + 'use strict'; + if (typeof define === 'function' && define.amd) { + define('pdfjs-dist/build/pdf', ['exports'], factory); + } else if (typeof exports !== 'undefined') { + factory(exports); + } else { + factory(root['pdfjsDistBuildPdf'] = {}); + } +}(this, function (exports) { + 'use strict'; + var pdfjsVersion = '1.7.225'; + var pdfjsBuild = '17d135f'; + var pdfjsFilePath = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : null; + var pdfjsLibs = {}; + (function pdfjsWrapper() { + (function (root, factory) { + factory(root.pdfjsSharedUtil = {}); + }(this, function (exports) { + var globalScope = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : this; + var FONT_IDENTITY_MATRIX = [ + 0.001, + 0, + 0, + 0.001, + 0, + 0 + ]; + var TextRenderingMode = { + FILL: 0, + STROKE: 1, + FILL_STROKE: 2, + INVISIBLE: 3, + FILL_ADD_TO_PATH: 4, + STROKE_ADD_TO_PATH: 5, + FILL_STROKE_ADD_TO_PATH: 6, + ADD_TO_PATH: 7, + FILL_STROKE_MASK: 3, + ADD_TO_PATH_FLAG: 4 + }; + var ImageKind = { + GRAYSCALE_1BPP: 1, + RGB_24BPP: 2, + RGBA_32BPP: 3 + }; + var AnnotationType = { + TEXT: 1, + LINK: 2, + FREETEXT: 3, + LINE: 4, + SQUARE: 5, + CIRCLE: 6, + POLYGON: 7, + POLYLINE: 8, + HIGHLIGHT: 9, + UNDERLINE: 10, + SQUIGGLY: 11, + STRIKEOUT: 12, + STAMP: 13, + CARET: 14, + INK: 15, + POPUP: 16, + FILEATTACHMENT: 17, + SOUND: 18, + MOVIE: 19, + WIDGET: 20, + SCREEN: 21, + PRINTERMARK: 22, + TRAPNET: 23, + WATERMARK: 24, + THREED: 25, + REDACT: 26 + }; + var AnnotationFlag = { + INVISIBLE: 0x01, + HIDDEN: 0x02, + PRINT: 0x04, + NOZOOM: 0x08, + NOROTATE: 0x10, + NOVIEW: 0x20, + READONLY: 0x40, + LOCKED: 0x80, + TOGGLENOVIEW: 0x100, + LOCKEDCONTENTS: 0x200 + }; + var AnnotationFieldFlag = { + READONLY: 0x0000001, + REQUIRED: 0x0000002, + NOEXPORT: 0x0000004, + MULTILINE: 0x0001000, + PASSWORD: 0x0002000, + NOTOGGLETOOFF: 0x0004000, + RADIO: 0x0008000, + PUSHBUTTON: 0x0010000, + COMBO: 0x0020000, + EDIT: 0x0040000, + SORT: 0x0080000, + FILESELECT: 0x0100000, + MULTISELECT: 0x0200000, + DONOTSPELLCHECK: 0x0400000, + DONOTSCROLL: 0x0800000, + COMB: 0x1000000, + RICHTEXT: 0x2000000, + RADIOSINUNISON: 0x2000000, + COMMITONSELCHANGE: 0x4000000 + }; + var AnnotationBorderStyleType = { + SOLID: 1, + DASHED: 2, + BEVELED: 3, + INSET: 4, + UNDERLINE: 5 + }; + var StreamType = { + UNKNOWN: 0, + FLATE: 1, + LZW: 2, + DCT: 3, + JPX: 4, + JBIG: 5, + A85: 6, + AHX: 7, + CCF: 8, + RL: 9 + }; + var FontType = { + UNKNOWN: 0, + TYPE1: 1, + TYPE1C: 2, + CIDFONTTYPE0: 3, + CIDFONTTYPE0C: 4, + TRUETYPE: 5, + CIDFONTTYPE2: 6, + TYPE3: 7, + OPENTYPE: 8, + TYPE0: 9, + MMTYPE1: 10 + }; + var VERBOSITY_LEVELS = { + errors: 0, + warnings: 1, + infos: 5 + }; + var OPS = { + dependency: 1, + setLineWidth: 2, + setLineCap: 3, + setLineJoin: 4, + setMiterLimit: 5, + setDash: 6, + setRenderingIntent: 7, + setFlatness: 8, + setGState: 9, + save: 10, + restore: 11, + transform: 12, + moveTo: 13, + lineTo: 14, + curveTo: 15, + curveTo2: 16, + curveTo3: 17, + closePath: 18, + rectangle: 19, + stroke: 20, + closeStroke: 21, + fill: 22, + eoFill: 23, + fillStroke: 24, + eoFillStroke: 25, + closeFillStroke: 26, + closeEOFillStroke: 27, + endPath: 28, + clip: 29, + eoClip: 30, + beginText: 31, + endText: 32, + setCharSpacing: 33, + setWordSpacing: 34, + setHScale: 35, + setLeading: 36, + setFont: 37, + setTextRenderingMode: 38, + setTextRise: 39, + moveText: 40, + setLeadingMoveText: 41, + setTextMatrix: 42, + nextLine: 43, + showText: 44, + showSpacedText: 45, + nextLineShowText: 46, + nextLineSetSpacingShowText: 47, + setCharWidth: 48, + setCharWidthAndBounds: 49, + setStrokeColorSpace: 50, + setFillColorSpace: 51, + setStrokeColor: 52, + setStrokeColorN: 53, + setFillColor: 54, + setFillColorN: 55, + setStrokeGray: 56, + setFillGray: 57, + setStrokeRGBColor: 58, + setFillRGBColor: 59, + setStrokeCMYKColor: 60, + setFillCMYKColor: 61, + shadingFill: 62, + beginInlineImage: 63, + beginImageData: 64, + endInlineImage: 65, + paintXObject: 66, + markPoint: 67, + markPointProps: 68, + beginMarkedContent: 69, + beginMarkedContentProps: 70, + endMarkedContent: 71, + beginCompat: 72, + endCompat: 73, + paintFormXObjectBegin: 74, + paintFormXObjectEnd: 75, + beginGroup: 76, + endGroup: 77, + beginAnnotations: 78, + endAnnotations: 79, + beginAnnotation: 80, + endAnnotation: 81, + paintJpegXObject: 82, + paintImageMaskXObject: 83, + paintImageMaskXObjectGroup: 84, + paintImageXObject: 85, + paintInlineImageXObject: 86, + paintInlineImageXObjectGroup: 87, + paintImageXObjectRepeat: 88, + paintImageMaskXObjectRepeat: 89, + paintSolidColorImageMask: 90, + constructPath: 91 + }; + var verbosity = VERBOSITY_LEVELS.warnings; + function setVerbosityLevel(level) { + verbosity = level; + } + function getVerbosityLevel() { + return verbosity; + } + function info(msg) { + if (verbosity >= VERBOSITY_LEVELS.infos) { + console.log('Info: ' + msg); + } + } + function warn(msg) { + if (verbosity >= VERBOSITY_LEVELS.warnings) { + console.log('Warning: ' + msg); + } + } + function deprecated(details) { + console.log('Deprecated API usage: ' + details); + } + function error(msg) { + if (verbosity >= VERBOSITY_LEVELS.errors) { + console.log('Error: ' + msg); + console.log(backtrace()); + } + throw new Error(msg); + } + function backtrace() { + try { + throw new Error(); + } catch (e) { + return e.stack ? e.stack.split('\n').slice(2).join('\n') : ''; + } + } + function assert(cond, msg) { + if (!cond) { + error(msg); + } + } + var UNSUPPORTED_FEATURES = { + unknown: 'unknown', + forms: 'forms', + javaScript: 'javaScript', + smask: 'smask', + shadingPattern: 'shadingPattern', + font: 'font' + }; + function isSameOrigin(baseUrl, otherUrl) { + try { + var base = new URL(baseUrl); + if (!base.origin || base.origin === 'null') { + return false; + } + } catch (e) { + return false; + } + var other = new URL(otherUrl, base); + return base.origin === other.origin; + } + function isValidProtocol(url) { + if (!url) { + return false; + } + switch (url.protocol) { + case 'http:': + case 'https:': + case 'ftp:': + case 'mailto:': + case 'tel:': + return true; + default: + return false; + } + } + function createValidAbsoluteUrl(url, baseUrl) { + if (!url) { + return null; + } + try { + var absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url); + if (isValidProtocol(absoluteUrl)) { + return absoluteUrl; + } + } catch (ex) { + } + return null; + } + function shadow(obj, prop, value) { + Object.defineProperty(obj, prop, { + value: value, + enumerable: true, + configurable: true, + writable: false + }); + return value; + } + function getLookupTableFactory(initializer) { + var lookup; + return function () { + if (initializer) { + lookup = Object.create(null); + initializer(lookup); + initializer = null; + } + return lookup; + }; + } + var PasswordResponses = { + NEED_PASSWORD: 1, + INCORRECT_PASSWORD: 2 + }; + var PasswordException = function PasswordExceptionClosure() { + function PasswordException(msg, code) { + this.name = 'PasswordException'; + this.message = msg; + this.code = code; + } + PasswordException.prototype = new Error(); + PasswordException.constructor = PasswordException; + return PasswordException; + }(); + var UnknownErrorException = function UnknownErrorExceptionClosure() { + function UnknownErrorException(msg, details) { + this.name = 'UnknownErrorException'; + this.message = msg; + this.details = details; + } + UnknownErrorException.prototype = new Error(); + UnknownErrorException.constructor = UnknownErrorException; + return UnknownErrorException; + }(); + var InvalidPDFException = function InvalidPDFExceptionClosure() { + function InvalidPDFException(msg) { + this.name = 'InvalidPDFException'; + this.message = msg; + } + InvalidPDFException.prototype = new Error(); + InvalidPDFException.constructor = InvalidPDFException; + return InvalidPDFException; + }(); + var MissingPDFException = function MissingPDFExceptionClosure() { + function MissingPDFException(msg) { + this.name = 'MissingPDFException'; + this.message = msg; + } + MissingPDFException.prototype = new Error(); + MissingPDFException.constructor = MissingPDFException; + return MissingPDFException; + }(); + var UnexpectedResponseException = function UnexpectedResponseExceptionClosure() { + function UnexpectedResponseException(msg, status) { + this.name = 'UnexpectedResponseException'; + this.message = msg; + this.status = status; + } + UnexpectedResponseException.prototype = new Error(); + UnexpectedResponseException.constructor = UnexpectedResponseException; + return UnexpectedResponseException; + }(); + var NotImplementedException = function NotImplementedExceptionClosure() { + function NotImplementedException(msg) { + this.message = msg; + } + NotImplementedException.prototype = new Error(); + NotImplementedException.prototype.name = 'NotImplementedException'; + NotImplementedException.constructor = NotImplementedException; + return NotImplementedException; + }(); + var MissingDataException = function MissingDataExceptionClosure() { + function MissingDataException(begin, end) { + this.begin = begin; + this.end = end; + this.message = 'Missing data [' + begin + ', ' + end + ')'; + } + MissingDataException.prototype = new Error(); + MissingDataException.prototype.name = 'MissingDataException'; + MissingDataException.constructor = MissingDataException; + return MissingDataException; + }(); + var XRefParseException = function XRefParseExceptionClosure() { + function XRefParseException(msg) { + this.message = msg; + } + XRefParseException.prototype = new Error(); + XRefParseException.prototype.name = 'XRefParseException'; + XRefParseException.constructor = XRefParseException; + return XRefParseException; + }(); + var NullCharactersRegExp = /\x00/g; + function removeNullCharacters(str) { + if (typeof str !== 'string') { + warn('The argument for removeNullCharacters must be a string.'); + return str; + } + return str.replace(NullCharactersRegExp, ''); + } + function bytesToString(bytes) { + assert(bytes !== null && typeof bytes === 'object' && bytes.length !== undefined, 'Invalid argument for bytesToString'); + var length = bytes.length; + var MAX_ARGUMENT_COUNT = 8192; + if (length < MAX_ARGUMENT_COUNT) { + return String.fromCharCode.apply(null, bytes); + } + var strBuf = []; + for (var i = 0; i < length; i += MAX_ARGUMENT_COUNT) { + var chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length); + var chunk = bytes.subarray(i, chunkEnd); + strBuf.push(String.fromCharCode.apply(null, chunk)); + } + return strBuf.join(''); + } + function stringToBytes(str) { + assert(typeof str === 'string', 'Invalid argument for stringToBytes'); + var length = str.length; + var bytes = new Uint8Array(length); + for (var i = 0; i < length; ++i) { + bytes[i] = str.charCodeAt(i) & 0xFF; + } + return bytes; + } + function arrayByteLength(arr) { + if (arr.length !== undefined) { + return arr.length; + } + assert(arr.byteLength !== undefined); + return arr.byteLength; + } + function arraysToBytes(arr) { + if (arr.length === 1 && arr[0] instanceof Uint8Array) { + return arr[0]; + } + var resultLength = 0; + var i, ii = arr.length; + var item, itemLength; + for (i = 0; i < ii; i++) { + item = arr[i]; + itemLength = arrayByteLength(item); + resultLength += itemLength; + } + var pos = 0; + var data = new Uint8Array(resultLength); + for (i = 0; i < ii; i++) { + item = arr[i]; + if (!(item instanceof Uint8Array)) { + if (typeof item === 'string') { + item = stringToBytes(item); + } else { + item = new Uint8Array(item); + } + } + itemLength = item.byteLength; + data.set(item, pos); + pos += itemLength; + } + return data; + } + function string32(value) { + return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff); + } + function log2(x) { + var n = 1, i = 0; + while (x > n) { + n <<= 1; + i++; + } + return i; + } + function readInt8(data, start) { + return data[start] << 24 >> 24; + } + function readUint16(data, offset) { + return data[offset] << 8 | data[offset + 1]; + } + function readUint32(data, offset) { + return (data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]) >>> 0; + } + function isLittleEndian() { + var buffer8 = new Uint8Array(2); + buffer8[0] = 1; + var buffer16 = new Uint16Array(buffer8.buffer); + return buffer16[0] === 1; + } + function isEvalSupported() { + try { + new Function(''); + return true; + } catch (e) { + return false; + } + } + var Uint32ArrayView = function Uint32ArrayViewClosure() { + function Uint32ArrayView(buffer, length) { + this.buffer = buffer; + this.byteLength = buffer.length; + this.length = length === undefined ? this.byteLength >> 2 : length; + ensureUint32ArrayViewProps(this.length); + } + Uint32ArrayView.prototype = Object.create(null); + var uint32ArrayViewSetters = 0; + function createUint32ArrayProp(index) { + return { + get: function () { + var buffer = this.buffer, offset = index << 2; + return (buffer[offset] | buffer[offset + 1] << 8 | buffer[offset + 2] << 16 | buffer[offset + 3] << 24) >>> 0; + }, + set: function (value) { + var buffer = this.buffer, offset = index << 2; + buffer[offset] = value & 255; + buffer[offset + 1] = value >> 8 & 255; + buffer[offset + 2] = value >> 16 & 255; + buffer[offset + 3] = value >>> 24 & 255; + } + }; + } + function ensureUint32ArrayViewProps(length) { + while (uint32ArrayViewSetters < length) { + Object.defineProperty(Uint32ArrayView.prototype, uint32ArrayViewSetters, createUint32ArrayProp(uint32ArrayViewSetters)); + uint32ArrayViewSetters++; + } + } + return Uint32ArrayView; + }(); + exports.Uint32ArrayView = Uint32ArrayView; + var IDENTITY_MATRIX = [ + 1, + 0, + 0, + 1, + 0, + 0 + ]; + var Util = function UtilClosure() { + function Util() { + } + var rgbBuf = [ + 'rgb(', + 0, + ',', + 0, + ',', + 0, + ')' + ]; + Util.makeCssRgb = function Util_makeCssRgb(r, g, b) { + rgbBuf[1] = r; + rgbBuf[3] = g; + rgbBuf[5] = b; + return rgbBuf.join(''); + }; + Util.transform = function Util_transform(m1, m2) { + return [ + m1[0] * m2[0] + m1[2] * m2[1], + m1[1] * m2[0] + m1[3] * m2[1], + m1[0] * m2[2] + m1[2] * m2[3], + m1[1] * m2[2] + m1[3] * m2[3], + m1[0] * m2[4] + m1[2] * m2[5] + m1[4], + m1[1] * m2[4] + m1[3] * m2[5] + m1[5] + ]; + }; + Util.applyTransform = function Util_applyTransform(p, m) { + var xt = p[0] * m[0] + p[1] * m[2] + m[4]; + var yt = p[0] * m[1] + p[1] * m[3] + m[5]; + return [ + xt, + yt + ]; + }; + Util.applyInverseTransform = function Util_applyInverseTransform(p, m) { + var d = m[0] * m[3] - m[1] * m[2]; + var xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d; + var yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d; + return [ + xt, + yt + ]; + }; + Util.getAxialAlignedBoundingBox = function Util_getAxialAlignedBoundingBox(r, m) { + var p1 = Util.applyTransform(r, m); + var p2 = Util.applyTransform(r.slice(2, 4), m); + var p3 = Util.applyTransform([ + r[0], + r[3] + ], m); + var p4 = Util.applyTransform([ + r[2], + r[1] + ], m); + return [ + Math.min(p1[0], p2[0], p3[0], p4[0]), + Math.min(p1[1], p2[1], p3[1], p4[1]), + Math.max(p1[0], p2[0], p3[0], p4[0]), + Math.max(p1[1], p2[1], p3[1], p4[1]) + ]; + }; + Util.inverseTransform = function Util_inverseTransform(m) { + var d = m[0] * m[3] - m[1] * m[2]; + return [ + m[3] / d, + -m[1] / d, + -m[2] / d, + m[0] / d, + (m[2] * m[5] - m[4] * m[3]) / d, + (m[4] * m[1] - m[5] * m[0]) / d + ]; + }; + Util.apply3dTransform = function Util_apply3dTransform(m, v) { + return [ + m[0] * v[0] + m[1] * v[1] + m[2] * v[2], + m[3] * v[0] + m[4] * v[1] + m[5] * v[2], + m[6] * v[0] + m[7] * v[1] + m[8] * v[2] + ]; + }; + Util.singularValueDecompose2dScale = function Util_singularValueDecompose2dScale(m) { + var transpose = [ + m[0], + m[2], + m[1], + m[3] + ]; + var a = m[0] * transpose[0] + m[1] * transpose[2]; + var b = m[0] * transpose[1] + m[1] * transpose[3]; + var c = m[2] * transpose[0] + m[3] * transpose[2]; + var d = m[2] * transpose[1] + m[3] * transpose[3]; + var first = (a + d) / 2; + var second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2; + var sx = first + second || 1; + var sy = first - second || 1; + return [ + Math.sqrt(sx), + Math.sqrt(sy) + ]; + }; + Util.normalizeRect = function Util_normalizeRect(rect) { + var r = rect.slice(0); + if (rect[0] > rect[2]) { + r[0] = rect[2]; + r[2] = rect[0]; + } + if (rect[1] > rect[3]) { + r[1] = rect[3]; + r[3] = rect[1]; + } + return r; + }; + Util.intersect = function Util_intersect(rect1, rect2) { + function compare(a, b) { + return a - b; + } + var orderedX = [ + rect1[0], + rect1[2], + rect2[0], + rect2[2] + ].sort(compare), orderedY = [ + rect1[1], + rect1[3], + rect2[1], + rect2[3] + ].sort(compare), result = []; + rect1 = Util.normalizeRect(rect1); + rect2 = Util.normalizeRect(rect2); + if (orderedX[0] === rect1[0] && orderedX[1] === rect2[0] || orderedX[0] === rect2[0] && orderedX[1] === rect1[0]) { + result[0] = orderedX[1]; + result[2] = orderedX[2]; + } else { + return false; + } + if (orderedY[0] === rect1[1] && orderedY[1] === rect2[1] || orderedY[0] === rect2[1] && orderedY[1] === rect1[1]) { + result[1] = orderedY[1]; + result[3] = orderedY[2]; + } else { + return false; + } + return result; + }; + Util.sign = function Util_sign(num) { + return num < 0 ? -1 : 1; + }; + var ROMAN_NUMBER_MAP = [ + '', + 'C', + 'CC', + 'CCC', + 'CD', + 'D', + 'DC', + 'DCC', + 'DCCC', + 'CM', + '', + 'X', + 'XX', + 'XXX', + 'XL', + 'L', + 'LX', + 'LXX', + 'LXXX', + 'XC', + '', + 'I', + 'II', + 'III', + 'IV', + 'V', + 'VI', + 'VII', + 'VIII', + 'IX' + ]; + Util.toRoman = function Util_toRoman(number, lowerCase) { + assert(isInt(number) && number > 0, 'The number should be a positive integer.'); + var pos, romanBuf = []; + while (number >= 1000) { + number -= 1000; + romanBuf.push('M'); + } + pos = number / 100 | 0; + number %= 100; + romanBuf.push(ROMAN_NUMBER_MAP[pos]); + pos = number / 10 | 0; + number %= 10; + romanBuf.push(ROMAN_NUMBER_MAP[10 + pos]); + romanBuf.push(ROMAN_NUMBER_MAP[20 + number]); + var romanStr = romanBuf.join(''); + return lowerCase ? romanStr.toLowerCase() : romanStr; + }; + Util.appendToArray = function Util_appendToArray(arr1, arr2) { + Array.prototype.push.apply(arr1, arr2); + }; + Util.prependToArray = function Util_prependToArray(arr1, arr2) { + Array.prototype.unshift.apply(arr1, arr2); + }; + Util.extendObj = function extendObj(obj1, obj2) { + for (var key in obj2) { + obj1[key] = obj2[key]; + } + }; + Util.getInheritableProperty = function Util_getInheritableProperty(dict, name, getArray) { + while (dict && !dict.has(name)) { + dict = dict.get('Parent'); + } + if (!dict) { + return null; + } + return getArray ? dict.getArray(name) : dict.get(name); + }; + Util.inherit = function Util_inherit(sub, base, prototype) { + sub.prototype = Object.create(base.prototype); + sub.prototype.constructor = sub; + for (var prop in prototype) { + sub.prototype[prop] = prototype[prop]; + } + }; + Util.loadScript = function Util_loadScript(src, callback) { + var script = document.createElement('script'); + var loaded = false; + script.setAttribute('src', src); + if (callback) { + script.onload = function () { + if (!loaded) { + callback(); + } + loaded = true; + }; + } + document.getElementsByTagName('head')[0].appendChild(script); + }; + return Util; + }(); + var PageViewport = function PageViewportClosure() { + function PageViewport(viewBox, scale, rotation, offsetX, offsetY, dontFlip) { + this.viewBox = viewBox; + this.scale = scale; + this.rotation = rotation; + this.offsetX = offsetX; + this.offsetY = offsetY; + var centerX = (viewBox[2] + viewBox[0]) / 2; + var centerY = (viewBox[3] + viewBox[1]) / 2; + var rotateA, rotateB, rotateC, rotateD; + rotation = rotation % 360; + rotation = rotation < 0 ? rotation + 360 : rotation; + switch (rotation) { + case 180: + rotateA = -1; + rotateB = 0; + rotateC = 0; + rotateD = 1; + break; + case 90: + rotateA = 0; + rotateB = 1; + rotateC = 1; + rotateD = 0; + break; + case 270: + rotateA = 0; + rotateB = -1; + rotateC = -1; + rotateD = 0; + break; + default: + rotateA = 1; + rotateB = 0; + rotateC = 0; + rotateD = -1; + break; + } + if (dontFlip) { + rotateC = -rotateC; + rotateD = -rotateD; + } + var offsetCanvasX, offsetCanvasY; + var width, height; + if (rotateA === 0) { + offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX; + offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY; + width = Math.abs(viewBox[3] - viewBox[1]) * scale; + height = Math.abs(viewBox[2] - viewBox[0]) * scale; + } else { + offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX; + offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY; + width = Math.abs(viewBox[2] - viewBox[0]) * scale; + height = Math.abs(viewBox[3] - viewBox[1]) * scale; + } + this.transform = [ + rotateA * scale, + rotateB * scale, + rotateC * scale, + rotateD * scale, + offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, + offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY + ]; + this.width = width; + this.height = height; + this.fontScale = scale; + } + PageViewport.prototype = { + clone: function PageViewPort_clone(args) { + args = args || {}; + var scale = 'scale' in args ? args.scale : this.scale; + var rotation = 'rotation' in args ? args.rotation : this.rotation; + return new PageViewport(this.viewBox.slice(), scale, rotation, this.offsetX, this.offsetY, args.dontFlip); + }, + convertToViewportPoint: function PageViewport_convertToViewportPoint(x, y) { + return Util.applyTransform([ + x, + y + ], this.transform); + }, + convertToViewportRectangle: function PageViewport_convertToViewportRectangle(rect) { + var tl = Util.applyTransform([ + rect[0], + rect[1] + ], this.transform); + var br = Util.applyTransform([ + rect[2], + rect[3] + ], this.transform); + return [ + tl[0], + tl[1], + br[0], + br[1] + ]; + }, + convertToPdfPoint: function PageViewport_convertToPdfPoint(x, y) { + return Util.applyInverseTransform([ + x, + y + ], this.transform); + } + }; + return PageViewport; + }(); + var PDFStringTranslateTable = [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0x2D8, + 0x2C7, + 0x2C6, + 0x2D9, + 0x2DD, + 0x2DB, + 0x2DA, + 0x2DC, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0x2022, + 0x2020, + 0x2021, + 0x2026, + 0x2014, + 0x2013, + 0x192, + 0x2044, + 0x2039, + 0x203A, + 0x2212, + 0x2030, + 0x201E, + 0x201C, + 0x201D, + 0x2018, + 0x2019, + 0x201A, + 0x2122, + 0xFB01, + 0xFB02, + 0x141, + 0x152, + 0x160, + 0x178, + 0x17D, + 0x131, + 0x142, + 0x153, + 0x161, + 0x17E, + 0, + 0x20AC + ]; + function stringToPDFString(str) { + var i, n = str.length, strBuf = []; + if (str[0] === '\xFE' && str[1] === '\xFF') { + for (i = 2; i < n; i += 2) { + strBuf.push(String.fromCharCode(str.charCodeAt(i) << 8 | str.charCodeAt(i + 1))); + } + } else { + for (i = 0; i < n; ++i) { + var code = PDFStringTranslateTable[str.charCodeAt(i)]; + strBuf.push(code ? String.fromCharCode(code) : str.charAt(i)); + } + } + return strBuf.join(''); + } + function stringToUTF8String(str) { + return decodeURIComponent(escape(str)); + } + function utf8StringToString(str) { + return unescape(encodeURIComponent(str)); + } + function isEmptyObj(obj) { + for (var key in obj) { + return false; + } + return true; + } + function isBool(v) { + return typeof v === 'boolean'; + } + function isInt(v) { + return typeof v === 'number' && (v | 0) === v; + } + function isNum(v) { + return typeof v === 'number'; + } + function isString(v) { + return typeof v === 'string'; + } + function isArray(v) { + return v instanceof Array; + } + function isArrayBuffer(v) { + return typeof v === 'object' && v !== null && v.byteLength !== undefined; + } + function isSpace(ch) { + return ch === 0x20 || ch === 0x09 || ch === 0x0D || ch === 0x0A; + } + function createPromiseCapability() { + var capability = {}; + capability.promise = new Promise(function (resolve, reject) { + capability.resolve = resolve; + capability.reject = reject; + }); + return capability; + } + (function PromiseClosure() { + if (globalScope.Promise) { + if (typeof globalScope.Promise.all !== 'function') { + globalScope.Promise.all = function (iterable) { + var count = 0, results = [], resolve, reject; + var promise = new globalScope.Promise(function (resolve_, reject_) { + resolve = resolve_; + reject = reject_; + }); + iterable.forEach(function (p, i) { + count++; + p.then(function (result) { + results[i] = result; + count--; + if (count === 0) { + resolve(results); + } + }, reject); + }); + if (count === 0) { + resolve(results); + } + return promise; + }; + } + if (typeof globalScope.Promise.resolve !== 'function') { + globalScope.Promise.resolve = function (value) { + return new globalScope.Promise(function (resolve) { + resolve(value); + }); + }; + } + if (typeof globalScope.Promise.reject !== 'function') { + globalScope.Promise.reject = function (reason) { + return new globalScope.Promise(function (resolve, reject) { + reject(reason); + }); + }; + } + if (typeof globalScope.Promise.prototype.catch !== 'function') { + globalScope.Promise.prototype.catch = function (onReject) { + return globalScope.Promise.prototype.then(undefined, onReject); + }; + } + return; + } + var STATUS_PENDING = 0; + var STATUS_RESOLVED = 1; + var STATUS_REJECTED = 2; + var REJECTION_TIMEOUT = 500; + var HandlerManager = { + handlers: [], + running: false, + unhandledRejections: [], + pendingRejectionCheck: false, + scheduleHandlers: function scheduleHandlers(promise) { + if (promise._status === STATUS_PENDING) { + return; + } + this.handlers = this.handlers.concat(promise._handlers); + promise._handlers = []; + if (this.running) { + return; + } + this.running = true; + setTimeout(this.runHandlers.bind(this), 0); + }, + runHandlers: function runHandlers() { + var RUN_TIMEOUT = 1; + var timeoutAt = Date.now() + RUN_TIMEOUT; + while (this.handlers.length > 0) { + var handler = this.handlers.shift(); + var nextStatus = handler.thisPromise._status; + var nextValue = handler.thisPromise._value; + try { + if (nextStatus === STATUS_RESOLVED) { + if (typeof handler.onResolve === 'function') { + nextValue = handler.onResolve(nextValue); + } + } else if (typeof handler.onReject === 'function') { + nextValue = handler.onReject(nextValue); + nextStatus = STATUS_RESOLVED; + if (handler.thisPromise._unhandledRejection) { + this.removeUnhandeledRejection(handler.thisPromise); + } + } + } catch (ex) { + nextStatus = STATUS_REJECTED; + nextValue = ex; + } + handler.nextPromise._updateStatus(nextStatus, nextValue); + if (Date.now() >= timeoutAt) { + break; + } + } + if (this.handlers.length > 0) { + setTimeout(this.runHandlers.bind(this), 0); + return; + } + this.running = false; + }, + addUnhandledRejection: function addUnhandledRejection(promise) { + this.unhandledRejections.push({ + promise: promise, + time: Date.now() + }); + this.scheduleRejectionCheck(); + }, + removeUnhandeledRejection: function removeUnhandeledRejection(promise) { + promise._unhandledRejection = false; + for (var i = 0; i < this.unhandledRejections.length; i++) { + if (this.unhandledRejections[i].promise === promise) { + this.unhandledRejections.splice(i); + i--; + } + } + }, + scheduleRejectionCheck: function scheduleRejectionCheck() { + if (this.pendingRejectionCheck) { + return; + } + this.pendingRejectionCheck = true; + setTimeout(function rejectionCheck() { + this.pendingRejectionCheck = false; + var now = Date.now(); + for (var i = 0; i < this.unhandledRejections.length; i++) { + if (now - this.unhandledRejections[i].time > REJECTION_TIMEOUT) { + var unhandled = this.unhandledRejections[i].promise._value; + var msg = 'Unhandled rejection: ' + unhandled; + if (unhandled.stack) { + msg += '\n' + unhandled.stack; + } + warn(msg); + this.unhandledRejections.splice(i); + i--; + } + } + if (this.unhandledRejections.length) { + this.scheduleRejectionCheck(); + } + }.bind(this), REJECTION_TIMEOUT); + } + }; + var Promise = function Promise(resolver) { + this._status = STATUS_PENDING; + this._handlers = []; + try { + resolver.call(this, this._resolve.bind(this), this._reject.bind(this)); + } catch (e) { + this._reject(e); + } + }; + Promise.all = function Promise_all(promises) { + var resolveAll, rejectAll; + var deferred = new Promise(function (resolve, reject) { + resolveAll = resolve; + rejectAll = reject; + }); + var unresolved = promises.length; + var results = []; + if (unresolved === 0) { + resolveAll(results); + return deferred; + } + function reject(reason) { + if (deferred._status === STATUS_REJECTED) { + return; + } + results = []; + rejectAll(reason); + } + for (var i = 0, ii = promises.length; i < ii; ++i) { + var promise = promises[i]; + var resolve = function (i) { + return function (value) { + if (deferred._status === STATUS_REJECTED) { + return; + } + results[i] = value; + unresolved--; + if (unresolved === 0) { + resolveAll(results); + } + }; + }(i); + if (Promise.isPromise(promise)) { + promise.then(resolve, reject); + } else { + resolve(promise); + } + } + return deferred; + }; + Promise.isPromise = function Promise_isPromise(value) { + return value && typeof value.then === 'function'; + }; + Promise.resolve = function Promise_resolve(value) { + return new Promise(function (resolve) { + resolve(value); + }); + }; + Promise.reject = function Promise_reject(reason) { + return new Promise(function (resolve, reject) { + reject(reason); + }); + }; + Promise.prototype = { + _status: null, + _value: null, + _handlers: null, + _unhandledRejection: null, + _updateStatus: function Promise__updateStatus(status, value) { + if (this._status === STATUS_RESOLVED || this._status === STATUS_REJECTED) { + return; + } + if (status === STATUS_RESOLVED && Promise.isPromise(value)) { + value.then(this._updateStatus.bind(this, STATUS_RESOLVED), this._updateStatus.bind(this, STATUS_REJECTED)); + return; + } + this._status = status; + this._value = value; + if (status === STATUS_REJECTED && this._handlers.length === 0) { + this._unhandledRejection = true; + HandlerManager.addUnhandledRejection(this); + } + HandlerManager.scheduleHandlers(this); + }, + _resolve: function Promise_resolve(value) { + this._updateStatus(STATUS_RESOLVED, value); + }, + _reject: function Promise_reject(reason) { + this._updateStatus(STATUS_REJECTED, reason); + }, + then: function Promise_then(onResolve, onReject) { + var nextPromise = new Promise(function (resolve, reject) { + this.resolve = resolve; + this.reject = reject; + }); + this._handlers.push({ + thisPromise: this, + onResolve: onResolve, + onReject: onReject, + nextPromise: nextPromise + }); + HandlerManager.scheduleHandlers(this); + return nextPromise; + }, + catch: function Promise_catch(onReject) { + return this.then(undefined, onReject); + } + }; + globalScope.Promise = Promise; + }()); + (function WeakMapClosure() { + if (globalScope.WeakMap) { + return; + } + var id = 0; + function WeakMap() { + this.id = '$weakmap' + id++; + } + WeakMap.prototype = { + has: function (obj) { + return !!Object.getOwnPropertyDescriptor(obj, this.id); + }, + get: function (obj, defaultValue) { + return this.has(obj) ? obj[this.id] : defaultValue; + }, + set: function (obj, value) { + Object.defineProperty(obj, this.id, { + value: value, + enumerable: false, + configurable: true + }); + }, + delete: function (obj) { + delete obj[this.id]; + } + }; + globalScope.WeakMap = WeakMap; + }()); + var StatTimer = function StatTimerClosure() { + function rpad(str, pad, length) { + while (str.length < length) { + str += pad; + } + return str; + } + function StatTimer() { + this.started = Object.create(null); + this.times = []; + this.enabled = true; + } + StatTimer.prototype = { + time: function StatTimer_time(name) { + if (!this.enabled) { + return; + } + if (name in this.started) { + warn('Timer is already running for ' + name); + } + this.started[name] = Date.now(); + }, + timeEnd: function StatTimer_timeEnd(name) { + if (!this.enabled) { + return; + } + if (!(name in this.started)) { + warn('Timer has not been started for ' + name); + } + this.times.push({ + 'name': name, + 'start': this.started[name], + 'end': Date.now() + }); + delete this.started[name]; + }, + toString: function StatTimer_toString() { + var i, ii; + var times = this.times; + var out = ''; + var longest = 0; + for (i = 0, ii = times.length; i < ii; ++i) { + var name = times[i]['name']; + if (name.length > longest) { + longest = name.length; + } + } + for (i = 0, ii = times.length; i < ii; ++i) { + var span = times[i]; + var duration = span.end - span.start; + out += rpad(span['name'], ' ', longest) + ' ' + duration + 'ms\n'; + } + return out; + } + }; + return StatTimer; + }(); + var createBlob = function createBlob(data, contentType) { + if (typeof Blob !== 'undefined') { + return new Blob([data], { type: contentType }); + } + warn('The "Blob" constructor is not supported.'); + }; + var createObjectURL = function createObjectURLClosure() { + var digits = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + return function createObjectURL(data, contentType, forceDataSchema) { + if (!forceDataSchema && typeof URL !== 'undefined' && URL.createObjectURL) { + var blob = createBlob(data, contentType); + return URL.createObjectURL(blob); + } + var buffer = 'data:' + contentType + ';base64,'; + for (var i = 0, ii = data.length; i < ii; i += 3) { + var b1 = data[i] & 0xFF; + var b2 = data[i + 1] & 0xFF; + var b3 = data[i + 2] & 0xFF; + var d1 = b1 >> 2, d2 = (b1 & 3) << 4 | b2 >> 4; + var d3 = i + 1 < ii ? (b2 & 0xF) << 2 | b3 >> 6 : 64; + var d4 = i + 2 < ii ? b3 & 0x3F : 64; + buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4]; + } + return buffer; + }; + }(); + function MessageHandler(sourceName, targetName, comObj) { + this.sourceName = sourceName; + this.targetName = targetName; + this.comObj = comObj; + this.callbackIndex = 1; + this.postMessageTransfers = true; + var callbacksCapabilities = this.callbacksCapabilities = Object.create(null); + var ah = this.actionHandler = Object.create(null); + this._onComObjOnMessage = function messageHandlerComObjOnMessage(event) { + var data = event.data; + if (data.targetName !== this.sourceName) { + return; + } + if (data.isReply) { + var callbackId = data.callbackId; + if (data.callbackId in callbacksCapabilities) { + var callback = callbacksCapabilities[callbackId]; + delete callbacksCapabilities[callbackId]; + if ('error' in data) { + callback.reject(data.error); + } else { + callback.resolve(data.data); + } + } else { + error('Cannot resolve callback ' + callbackId); + } + } else if (data.action in ah) { + var action = ah[data.action]; + if (data.callbackId) { + var sourceName = this.sourceName; + var targetName = data.sourceName; + Promise.resolve().then(function () { + return action[0].call(action[1], data.data); + }).then(function (result) { + comObj.postMessage({ + sourceName: sourceName, + targetName: targetName, + isReply: true, + callbackId: data.callbackId, + data: result + }); + }, function (reason) { + if (reason instanceof Error) { + reason = reason + ''; + } + comObj.postMessage({ + sourceName: sourceName, + targetName: targetName, + isReply: true, + callbackId: data.callbackId, + error: reason + }); + }); + } else { + action[0].call(action[1], data.data); + } + } else { + error('Unknown action from worker: ' + data.action); + } + }.bind(this); + comObj.addEventListener('message', this._onComObjOnMessage); + } + MessageHandler.prototype = { + on: function messageHandlerOn(actionName, handler, scope) { + var ah = this.actionHandler; + if (ah[actionName]) { + error('There is already an actionName called "' + actionName + '"'); + } + ah[actionName] = [ + handler, + scope + ]; + }, + send: function messageHandlerSend(actionName, data, transfers) { + var message = { + sourceName: this.sourceName, + targetName: this.targetName, + action: actionName, + data: data + }; + this.postMessage(message, transfers); + }, + sendWithPromise: function messageHandlerSendWithPromise(actionName, data, transfers) { + var callbackId = this.callbackIndex++; + var message = { + sourceName: this.sourceName, + targetName: this.targetName, + action: actionName, + data: data, + callbackId: callbackId + }; + var capability = createPromiseCapability(); + this.callbacksCapabilities[callbackId] = capability; + try { + this.postMessage(message, transfers); + } catch (e) { + capability.reject(e); + } + return capability.promise; + }, + postMessage: function (message, transfers) { + if (transfers && this.postMessageTransfers) { + this.comObj.postMessage(message, transfers); + } else { + this.comObj.postMessage(message); + } + }, + destroy: function () { + this.comObj.removeEventListener('message', this._onComObjOnMessage); + } + }; + function loadJpegStream(id, imageUrl, objs) { + var img = new Image(); + img.onload = function loadJpegStream_onloadClosure() { + objs.resolve(id, img); + }; + img.onerror = function loadJpegStream_onerrorClosure() { + objs.resolve(id, null); + warn('Error during JPEG image loading'); + }; + img.src = imageUrl; + } + /* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + (function checkURLConstructor(scope) { + var hasWorkingUrl = false; + try { + if (typeof URL === 'function' && typeof URL.prototype === 'object' && 'origin' in URL.prototype) { + var u = new URL('b', 'http://a'); + u.pathname = 'c%20d'; + hasWorkingUrl = u.href === 'http://a/c%20d'; + } + } catch (e) { + } + if (hasWorkingUrl) { + return; + } + var relative = Object.create(null); + relative['ftp'] = 21; + relative['file'] = 0; + relative['gopher'] = 70; + relative['http'] = 80; + relative['https'] = 443; + relative['ws'] = 80; + relative['wss'] = 443; + var relativePathDotMapping = Object.create(null); + relativePathDotMapping['%2e'] = '.'; + relativePathDotMapping['.%2e'] = '..'; + relativePathDotMapping['%2e.'] = '..'; + relativePathDotMapping['%2e%2e'] = '..'; + function isRelativeScheme(scheme) { + return relative[scheme] !== undefined; + } + function invalid() { + clear.call(this); + this._isInvalid = true; + } + function IDNAToASCII(h) { + if (h === '') { + invalid.call(this); + } + return h.toLowerCase(); + } + function percentEscape(c) { + var unicode = c.charCodeAt(0); + if (unicode > 0x20 && unicode < 0x7F && [ + 0x22, + 0x23, + 0x3C, + 0x3E, + 0x3F, + 0x60 + ].indexOf(unicode) === -1) { + return c; + } + return encodeURIComponent(c); + } + function percentEscapeQuery(c) { + var unicode = c.charCodeAt(0); + if (unicode > 0x20 && unicode < 0x7F && [ + 0x22, + 0x23, + 0x3C, + 0x3E, + 0x60 + ].indexOf(unicode) === -1) { + return c; + } + return encodeURIComponent(c); + } + var EOF, ALPHA = /[a-zA-Z]/, ALPHANUMERIC = /[a-zA-Z0-9\+\-\.]/; + function parse(input, stateOverride, base) { + function err(message) { + errors.push(message); + } + var state = stateOverride || 'scheme start', cursor = 0, buffer = '', seenAt = false, seenBracket = false, errors = []; + loop: + while ((input[cursor - 1] !== EOF || cursor === 0) && !this._isInvalid) { + var c = input[cursor]; + switch (state) { + case 'scheme start': + if (c && ALPHA.test(c)) { + buffer += c.toLowerCase(); + state = 'scheme'; + } else if (!stateOverride) { + buffer = ''; + state = 'no scheme'; + continue; + } else { + err('Invalid scheme.'); + break loop; + } + break; + case 'scheme': + if (c && ALPHANUMERIC.test(c)) { + buffer += c.toLowerCase(); + } else if (c === ':') { + this._scheme = buffer; + buffer = ''; + if (stateOverride) { + break loop; + } + if (isRelativeScheme(this._scheme)) { + this._isRelative = true; + } + if (this._scheme === 'file') { + state = 'relative'; + } else if (this._isRelative && base && base._scheme === this._scheme) { + state = 'relative or authority'; + } else if (this._isRelative) { + state = 'authority first slash'; + } else { + state = 'scheme data'; + } + } else if (!stateOverride) { + buffer = ''; + cursor = 0; + state = 'no scheme'; + continue; + } else if (EOF === c) { + break loop; + } else { + err('Code point not allowed in scheme: ' + c); + break loop; + } + break; + case 'scheme data': + if (c === '?') { + this._query = '?'; + state = 'query'; + } else if (c === '#') { + this._fragment = '#'; + state = 'fragment'; + } else { + if (EOF !== c && '\t' !== c && '\n' !== c && '\r' !== c) { + this._schemeData += percentEscape(c); + } + } + break; + case 'no scheme': + if (!base || !isRelativeScheme(base._scheme)) { + err('Missing scheme.'); + invalid.call(this); + } else { + state = 'relative'; + continue; + } + break; + case 'relative or authority': + if (c === '/' && input[cursor + 1] === '/') { + state = 'authority ignore slashes'; + } else { + err('Expected /, got: ' + c); + state = 'relative'; + continue; + } + break; + case 'relative': + this._isRelative = true; + if ('file' !== this._scheme) { + this._scheme = base._scheme; + } + if (EOF === c) { + this._host = base._host; + this._port = base._port; + this._path = base._path.slice(); + this._query = base._query; + this._username = base._username; + this._password = base._password; + break loop; + } else if (c === '/' || c === '\\') { + if (c === '\\') { + err('\\ is an invalid code point.'); + } + state = 'relative slash'; + } else if (c === '?') { + this._host = base._host; + this._port = base._port; + this._path = base._path.slice(); + this._query = '?'; + this._username = base._username; + this._password = base._password; + state = 'query'; + } else if (c === '#') { + this._host = base._host; + this._port = base._port; + this._path = base._path.slice(); + this._query = base._query; + this._fragment = '#'; + this._username = base._username; + this._password = base._password; + state = 'fragment'; + } else { + var nextC = input[cursor + 1]; + var nextNextC = input[cursor + 2]; + if ('file' !== this._scheme || !ALPHA.test(c) || nextC !== ':' && nextC !== '|' || EOF !== nextNextC && '/' !== nextNextC && '\\' !== nextNextC && '?' !== nextNextC && '#' !== nextNextC) { + this._host = base._host; + this._port = base._port; + this._username = base._username; + this._password = base._password; + this._path = base._path.slice(); + this._path.pop(); + } + state = 'relative path'; + continue; + } + break; + case 'relative slash': + if (c === '/' || c === '\\') { + if (c === '\\') { + err('\\ is an invalid code point.'); + } + if (this._scheme === 'file') { + state = 'file host'; + } else { + state = 'authority ignore slashes'; + } + } else { + if ('file' !== this._scheme) { + this._host = base._host; + this._port = base._port; + this._username = base._username; + this._password = base._password; + } + state = 'relative path'; + continue; + } + break; + case 'authority first slash': + if (c === '/') { + state = 'authority second slash'; + } else { + err('Expected \'/\', got: ' + c); + state = 'authority ignore slashes'; + continue; + } + break; + case 'authority second slash': + state = 'authority ignore slashes'; + if ('/' !== c) { + err('Expected \'/\', got: ' + c); + continue; + } + break; + case 'authority ignore slashes': + if ('/' !== c && '\\' !== c) { + state = 'authority'; + continue; + } else { + err('Expected authority, got: ' + c); + } + break; + case 'authority': + if (c === '@') { + if (seenAt) { + err('@ already seen.'); + buffer += '%40'; + } + seenAt = true; + for (var i = 0; i < buffer.length; i++) { + var cp = buffer[i]; + if (cp === '\t' || cp === '\n' || cp === '\r') { + err('Invalid whitespace in authority.'); + continue; + } + if (cp === ':' && this._password === null) { + this._password = ''; + continue; + } + var tempC = percentEscape(cp); + if (null !== this._password) { + this._password += tempC; + } else { + this._username += tempC; + } + } + buffer = ''; + } else if (c === EOF || c === '/' || c === '\\' || c === '?' || c === '#') { + cursor -= buffer.length; + buffer = ''; + state = 'host'; + continue; + } else { + buffer += c; + } + break; + case 'file host': + if (c === EOF || c === '/' || c === '\\' || c === '?' || c === '#') { + if (buffer.length === 2 && ALPHA.test(buffer[0]) && (buffer[1] === ':' || buffer[1] === '|')) { + state = 'relative path'; + } else if (buffer.length === 0) { + state = 'relative path start'; + } else { + this._host = IDNAToASCII.call(this, buffer); + buffer = ''; + state = 'relative path start'; + } + continue; + } else if (c === '\t' || c === '\n' || c === '\r') { + err('Invalid whitespace in file host.'); + } else { + buffer += c; + } + break; + case 'host': + case 'hostname': + if (c === ':' && !seenBracket) { + this._host = IDNAToASCII.call(this, buffer); + buffer = ''; + state = 'port'; + if (stateOverride === 'hostname') { + break loop; + } + } else if (c === EOF || c === '/' || c === '\\' || c === '?' || c === '#') { + this._host = IDNAToASCII.call(this, buffer); + buffer = ''; + state = 'relative path start'; + if (stateOverride) { + break loop; + } + continue; + } else if ('\t' !== c && '\n' !== c && '\r' !== c) { + if (c === '[') { + seenBracket = true; + } else if (c === ']') { + seenBracket = false; + } + buffer += c; + } else { + err('Invalid code point in host/hostname: ' + c); + } + break; + case 'port': + if (/[0-9]/.test(c)) { + buffer += c; + } else if (c === EOF || c === '/' || c === '\\' || c === '?' || c === '#' || stateOverride) { + if ('' !== buffer) { + var temp = parseInt(buffer, 10); + if (temp !== relative[this._scheme]) { + this._port = temp + ''; + } + buffer = ''; + } + if (stateOverride) { + break loop; + } + state = 'relative path start'; + continue; + } else if (c === '\t' || c === '\n' || c === '\r') { + err('Invalid code point in port: ' + c); + } else { + invalid.call(this); + } + break; + case 'relative path start': + if (c === '\\') { + err('\'\\\' not allowed in path.'); + } + state = 'relative path'; + if ('/' !== c && '\\' !== c) { + continue; + } + break; + case 'relative path': + if (c === EOF || c === '/' || c === '\\' || !stateOverride && (c === '?' || c === '#')) { + if (c === '\\') { + err('\\ not allowed in relative path.'); + } + var tmp; + if (tmp = relativePathDotMapping[buffer.toLowerCase()]) { + buffer = tmp; + } + if (buffer === '..') { + this._path.pop(); + if ('/' !== c && '\\' !== c) { + this._path.push(''); + } + } else if (buffer === '.' && '/' !== c && '\\' !== c) { + this._path.push(''); + } else if ('.' !== buffer) { + if (this._scheme === 'file' && this._path.length === 0 && buffer.length === 2 && ALPHA.test(buffer[0]) && buffer[1] === '|') { + buffer = buffer[0] + ':'; + } + this._path.push(buffer); + } + buffer = ''; + if (c === '?') { + this._query = '?'; + state = 'query'; + } else if (c === '#') { + this._fragment = '#'; + state = 'fragment'; + } + } else if ('\t' !== c && '\n' !== c && '\r' !== c) { + buffer += percentEscape(c); + } + break; + case 'query': + if (!stateOverride && c === '#') { + this._fragment = '#'; + state = 'fragment'; + } else if (EOF !== c && '\t' !== c && '\n' !== c && '\r' !== c) { + this._query += percentEscapeQuery(c); + } + break; + case 'fragment': + if (EOF !== c && '\t' !== c && '\n' !== c && '\r' !== c) { + this._fragment += c; + } + break; + } + cursor++; + } + } + function clear() { + this._scheme = ''; + this._schemeData = ''; + this._username = ''; + this._password = null; + this._host = ''; + this._port = ''; + this._path = []; + this._query = ''; + this._fragment = ''; + this._isInvalid = false; + this._isRelative = false; + } + function JURL(url, base) + { + if (base !== undefined && !(base instanceof JURL)) { + base = new JURL(String(base)); + } + this._url = url; + clear.call(this); + var input = url.replace(/^[ \t\r\n\f]+|[ \t\r\n\f]+$/g, ''); + parse.call(this, input, null, base); + } + JURL.prototype = { + toString: function () { + return this.href; + }, + get href() { + if (this._isInvalid) { + return this._url; + } + var authority = ''; + if ('' !== this._username || null !== this._password) { + authority = this._username + (null !== this._password ? ':' + this._password : '') + '@'; + } + return this.protocol + (this._isRelative ? '//' + authority + this.host : '') + this.pathname + this._query + this._fragment; + }, + set href(href) { + clear.call(this); + parse.call(this, href); + }, + get protocol() { + return this._scheme + ':'; + }, + set protocol(protocol) { + if (this._isInvalid) { + return; + } + parse.call(this, protocol + ':', 'scheme start'); + }, + get host() { + return this._isInvalid ? '' : this._port ? this._host + ':' + this._port : this._host; + }, + set host(host) { + if (this._isInvalid || !this._isRelative) { + return; + } + parse.call(this, host, 'host'); + }, + get hostname() { + return this._host; + }, + set hostname(hostname) { + if (this._isInvalid || !this._isRelative) { + return; + } + parse.call(this, hostname, 'hostname'); + }, + get port() { + return this._port; + }, + set port(port) { + if (this._isInvalid || !this._isRelative) { + return; + } + parse.call(this, port, 'port'); + }, + get pathname() { + return this._isInvalid ? '' : this._isRelative ? '/' + this._path.join('/') : this._schemeData; + }, + set pathname(pathname) { + if (this._isInvalid || !this._isRelative) { + return; + } + this._path = []; + parse.call(this, pathname, 'relative path start'); + }, + get search() { + return this._isInvalid || !this._query || this._query === '?' ? '' : this._query; + }, + set search(search) { + if (this._isInvalid || !this._isRelative) { + return; + } + this._query = '?'; + if (search[0] === '?') { + search = search.slice(1); + } + parse.call(this, search, 'query'); + }, + get hash() { + return this._isInvalid || !this._fragment || this._fragment === '#' ? '' : this._fragment; + }, + set hash(hash) { + if (this._isInvalid) { + return; + } + this._fragment = '#'; + if (hash[0] === '#') { + hash = hash.slice(1); + } + parse.call(this, hash, 'fragment'); + }, + get origin() { + var host; + if (this._isInvalid || !this._scheme) { + return ''; + } + switch (this._scheme) { + case 'data': + case 'file': + case 'javascript': + case 'mailto': + return 'null'; + } + host = this.host; + if (!host) { + return ''; + } + return this._scheme + '://' + host; + } + }; + var OriginalURL = scope.URL; + if (OriginalURL) { + JURL.createObjectURL = function (blob) { + return OriginalURL.createObjectURL.apply(OriginalURL, arguments); + }; + JURL.revokeObjectURL = function (url) { + OriginalURL.revokeObjectURL(url); + }; + } + scope.URL = JURL; + }(globalScope)); + exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX; + exports.IDENTITY_MATRIX = IDENTITY_MATRIX; + exports.OPS = OPS; + exports.VERBOSITY_LEVELS = VERBOSITY_LEVELS; + exports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES; + exports.AnnotationBorderStyleType = AnnotationBorderStyleType; + exports.AnnotationFieldFlag = AnnotationFieldFlag; + exports.AnnotationFlag = AnnotationFlag; + exports.AnnotationType = AnnotationType; + exports.FontType = FontType; + exports.ImageKind = ImageKind; + exports.InvalidPDFException = InvalidPDFException; + exports.MessageHandler = MessageHandler; + exports.MissingDataException = MissingDataException; + exports.MissingPDFException = MissingPDFException; + exports.NotImplementedException = NotImplementedException; + exports.PageViewport = PageViewport; + exports.PasswordException = PasswordException; + exports.PasswordResponses = PasswordResponses; + exports.StatTimer = StatTimer; + exports.StreamType = StreamType; + exports.TextRenderingMode = TextRenderingMode; + exports.UnexpectedResponseException = UnexpectedResponseException; + exports.UnknownErrorException = UnknownErrorException; + exports.Util = Util; + exports.XRefParseException = XRefParseException; + exports.arrayByteLength = arrayByteLength; + exports.arraysToBytes = arraysToBytes; + exports.assert = assert; + exports.bytesToString = bytesToString; + exports.createBlob = createBlob; + exports.createPromiseCapability = createPromiseCapability; + exports.createObjectURL = createObjectURL; + exports.deprecated = deprecated; + exports.error = error; + exports.getLookupTableFactory = getLookupTableFactory; + exports.getVerbosityLevel = getVerbosityLevel; + exports.globalScope = globalScope; + exports.info = info; + exports.isArray = isArray; + exports.isArrayBuffer = isArrayBuffer; + exports.isBool = isBool; + exports.isEmptyObj = isEmptyObj; + exports.isInt = isInt; + exports.isNum = isNum; + exports.isString = isString; + exports.isSpace = isSpace; + exports.isSameOrigin = isSameOrigin; + exports.createValidAbsoluteUrl = createValidAbsoluteUrl; + exports.isLittleEndian = isLittleEndian; + exports.isEvalSupported = isEvalSupported; + exports.loadJpegStream = loadJpegStream; + exports.log2 = log2; + exports.readInt8 = readInt8; + exports.readUint16 = readUint16; + exports.readUint32 = readUint32; + exports.removeNullCharacters = removeNullCharacters; + exports.setVerbosityLevel = setVerbosityLevel; + exports.shadow = shadow; + exports.string32 = string32; + exports.stringToBytes = stringToBytes; + exports.stringToPDFString = stringToPDFString; + exports.stringToUTF8String = stringToUTF8String; + exports.utf8StringToString = utf8StringToString; + exports.warn = warn; + })); + (function (root, factory) { + factory(root.pdfjsDisplayDOMUtils = {}, root.pdfjsSharedUtil); + }(this, function (exports, sharedUtil) { + var removeNullCharacters = sharedUtil.removeNullCharacters; + var warn = sharedUtil.warn; + var deprecated = sharedUtil.deprecated; + var createValidAbsoluteUrl = sharedUtil.createValidAbsoluteUrl; + var DEFAULT_LINK_REL = 'noopener noreferrer nofollow'; + var CustomStyle = function CustomStyleClosure() { + var prefixes = [ + 'ms', + 'Moz', + 'Webkit', + 'O' + ]; + var _cache = Object.create(null); + function CustomStyle() { + } + CustomStyle.getProp = function get(propName, element) { + if (arguments.length === 1 && typeof _cache[propName] === 'string') { + return _cache[propName]; + } + element = element || document.documentElement; + var style = element.style, prefixed, uPropName; + if (typeof style[propName] === 'string') { + return _cache[propName] = propName; + } + uPropName = propName.charAt(0).toUpperCase() + propName.slice(1); + for (var i = 0, l = prefixes.length; i < l; i++) { + prefixed = prefixes[i] + uPropName; + if (typeof style[prefixed] === 'string') { + return _cache[propName] = prefixed; + } + } + return _cache[propName] = 'undefined'; + }; + CustomStyle.setProp = function set(propName, element, str) { + var prop = this.getProp(propName); + if (prop !== 'undefined') { + element.style[prop] = str; + } + }; + return CustomStyle; + }(); + var hasCanvasTypedArrays; + hasCanvasTypedArrays = function hasCanvasTypedArrays() { + var canvas = document.createElement('canvas'); + canvas.width = canvas.height = 1; + var ctx = canvas.getContext('2d'); + var imageData = ctx.createImageData(1, 1); + return typeof imageData.data.buffer !== 'undefined'; + }; + var LinkTarget = { + NONE: 0, + SELF: 1, + BLANK: 2, + PARENT: 3, + TOP: 4 + }; + var LinkTargetStringMap = [ + '', + '_self', + '_blank', + '_parent', + '_top' + ]; + function addLinkAttributes(link, params) { + var url = params && params.url; + link.href = link.title = url ? removeNullCharacters(url) : ''; + if (url) { + var target = params.target; + if (typeof target === 'undefined') { + target = getDefaultSetting('externalLinkTarget'); + } + link.target = LinkTargetStringMap[target]; + var rel = params.rel; + if (typeof rel === 'undefined') { + rel = getDefaultSetting('externalLinkRel'); + } + link.rel = rel; + } + } + function getFilenameFromUrl(url) { + var anchor = url.indexOf('#'); + var query = url.indexOf('?'); + var end = Math.min(anchor > 0 ? anchor : url.length, query > 0 ? query : url.length); + return url.substring(url.lastIndexOf('/', end) + 1, end); + } + function getDefaultSetting(id) { + var globalSettings = sharedUtil.globalScope.PDFJS; + switch (id) { + case 'pdfBug': + return globalSettings ? globalSettings.pdfBug : false; + case 'disableAutoFetch': + return globalSettings ? globalSettings.disableAutoFetch : false; + case 'disableStream': + return globalSettings ? globalSettings.disableStream : false; + case 'disableRange': + return globalSettings ? globalSettings.disableRange : false; + case 'disableFontFace': + return globalSettings ? globalSettings.disableFontFace : false; + case 'disableCreateObjectURL': + return globalSettings ? globalSettings.disableCreateObjectURL : false; + case 'disableWebGL': + return globalSettings ? globalSettings.disableWebGL : true; + case 'cMapUrl': + return globalSettings ? globalSettings.cMapUrl : null; + case 'cMapPacked': + return globalSettings ? globalSettings.cMapPacked : false; + case 'postMessageTransfers': + return globalSettings ? globalSettings.postMessageTransfers : true; + case 'workerSrc': + return globalSettings ? globalSettings.workerSrc : null; + case 'disableWorker': + return globalSettings ? globalSettings.disableWorker : false; + case 'maxImageSize': + return globalSettings ? globalSettings.maxImageSize : -1; + case 'imageResourcesPath': + return globalSettings ? globalSettings.imageResourcesPath : ''; + case 'isEvalSupported': + return globalSettings ? globalSettings.isEvalSupported : true; + case 'externalLinkTarget': + if (!globalSettings) { + return LinkTarget.NONE; + } + switch (globalSettings.externalLinkTarget) { + case LinkTarget.NONE: + case LinkTarget.SELF: + case LinkTarget.BLANK: + case LinkTarget.PARENT: + case LinkTarget.TOP: + return globalSettings.externalLinkTarget; + } + warn('PDFJS.externalLinkTarget is invalid: ' + globalSettings.externalLinkTarget); + globalSettings.externalLinkTarget = LinkTarget.NONE; + return LinkTarget.NONE; + case 'externalLinkRel': + return globalSettings ? globalSettings.externalLinkRel : DEFAULT_LINK_REL; + case 'enableStats': + return !!(globalSettings && globalSettings.enableStats); + default: + throw new Error('Unknown default setting: ' + id); + } + } + function isExternalLinkTargetSet() { + var externalLinkTarget = getDefaultSetting('externalLinkTarget'); + switch (externalLinkTarget) { + case LinkTarget.NONE: + return false; + case LinkTarget.SELF: + case LinkTarget.BLANK: + case LinkTarget.PARENT: + case LinkTarget.TOP: + return true; + } + } + function isValidUrl(url, allowRelative) { + deprecated('isValidUrl(), please use createValidAbsoluteUrl() instead.'); + var baseUrl = allowRelative ? 'http://example.com' : null; + return createValidAbsoluteUrl(url, baseUrl) !== null; + } + exports.CustomStyle = CustomStyle; + exports.addLinkAttributes = addLinkAttributes; + exports.isExternalLinkTargetSet = isExternalLinkTargetSet; + exports.isValidUrl = isValidUrl; + exports.getFilenameFromUrl = getFilenameFromUrl; + exports.LinkTarget = LinkTarget; + exports.hasCanvasTypedArrays = hasCanvasTypedArrays; + exports.getDefaultSetting = getDefaultSetting; + exports.DEFAULT_LINK_REL = DEFAULT_LINK_REL; + })); + (function (root, factory) { + factory(root.pdfjsDisplayFontLoader = {}, root.pdfjsSharedUtil); + }(this, function (exports, sharedUtil) { + var assert = sharedUtil.assert; + var bytesToString = sharedUtil.bytesToString; + var string32 = sharedUtil.string32; + var shadow = sharedUtil.shadow; + var warn = sharedUtil.warn; + function FontLoader(docId) { + this.docId = docId; + this.styleElement = null; + this.nativeFontFaces = []; + this.loadTestFontId = 0; + this.loadingContext = { + requests: [], + nextRequestId: 0 + }; + } + FontLoader.prototype = { + insertRule: function fontLoaderInsertRule(rule) { + var styleElement = this.styleElement; + if (!styleElement) { + styleElement = this.styleElement = document.createElement('style'); + styleElement.id = 'PDFJS_FONT_STYLE_TAG_' + this.docId; + document.documentElement.getElementsByTagName('head')[0].appendChild(styleElement); + } + var styleSheet = styleElement.sheet; + styleSheet.insertRule(rule, styleSheet.cssRules.length); + }, + clear: function fontLoaderClear() { + var styleElement = this.styleElement; + if (styleElement) { + styleElement.parentNode.removeChild(styleElement); + styleElement = this.styleElement = null; + } + this.nativeFontFaces.forEach(function (nativeFontFace) { + document.fonts.delete(nativeFontFace); + }); + this.nativeFontFaces.length = 0; + } + }; + var getLoadTestFont = function () { + return atob('T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQAFQ' + 'AABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAAALwA' + 'AAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgAAAAGbm' + 'FtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1AAsD6AAA' + 'AADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD6AAAAAAD6A' + 'ABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACMAooCvAAAAeAA' + 'MQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4DIP84AFoDIQAAAA' + 'AAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAAAAEAAQAAAAEAAAAA' + 'AAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUAAQAAAAEAAAAAAAYAAQ' + 'AAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgABAAMAAQQJAAMAAgABAAMA' + 'AQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABYAAAAAAAAAwAAAAMAAAAcAA' + 'EAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAAAC7////TAAEAAAAAAAABBgAA' + 'AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAA' + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAA' + 'AAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAAAAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgc' + 'A/gXBIwMAYuL+nz5tQXkD5j3CBLnEQACAQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWF' + 'hYWFhYWFhYAAABAQAADwACAQEEE/t3Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQA' + 'AAAAAAABAAAAAMmJbzEAAAAAzgTjFQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAg' + 'ABAAAAAAAAAAAD6AAAAAAAAA=='); + }; + Object.defineProperty(FontLoader.prototype, 'loadTestFont', { + get: function () { + return shadow(this, 'loadTestFont', getLoadTestFont()); + }, + configurable: true + }); + FontLoader.prototype.addNativeFontFace = function fontLoader_addNativeFontFace(nativeFontFace) { + this.nativeFontFaces.push(nativeFontFace); + document.fonts.add(nativeFontFace); + }; + FontLoader.prototype.bind = function fontLoaderBind(fonts, callback) { + var rules = []; + var fontsToLoad = []; + var fontLoadPromises = []; + var getNativeFontPromise = function (nativeFontFace) { + return nativeFontFace.loaded.catch(function (e) { + warn('Failed to load font "' + nativeFontFace.family + '": ' + e); + }); + }; + var isFontLoadingAPISupported = FontLoader.isFontLoadingAPISupported && !FontLoader.isSyncFontLoadingSupported; + for (var i = 0, ii = fonts.length; i < ii; i++) { + var font = fonts[i]; + if (font.attached || font.loading === false) { + continue; + } + font.attached = true; + if (isFontLoadingAPISupported) { + var nativeFontFace = font.createNativeFontFace(); + if (nativeFontFace) { + this.addNativeFontFace(nativeFontFace); + fontLoadPromises.push(getNativeFontPromise(nativeFontFace)); + } + } else { + var rule = font.createFontFaceRule(); + if (rule) { + this.insertRule(rule); + rules.push(rule); + fontsToLoad.push(font); + } + } + } + var request = this.queueLoadingCallback(callback); + if (isFontLoadingAPISupported) { + Promise.all(fontLoadPromises).then(function () { + request.complete(); + }); + } else if (rules.length > 0 && !FontLoader.isSyncFontLoadingSupported) { + this.prepareFontLoadEvent(rules, fontsToLoad, request); + } else { + request.complete(); + } + }; + FontLoader.prototype.queueLoadingCallback = function FontLoader_queueLoadingCallback(callback) { + function LoadLoader_completeRequest() { + assert(!request.end, 'completeRequest() cannot be called twice'); + request.end = Date.now(); + while (context.requests.length > 0 && context.requests[0].end) { + var otherRequest = context.requests.shift(); + setTimeout(otherRequest.callback, 0); + } + } + var context = this.loadingContext; + var requestId = 'pdfjs-font-loading-' + context.nextRequestId++; + var request = { + id: requestId, + complete: LoadLoader_completeRequest, + callback: callback, + started: Date.now() + }; + context.requests.push(request); + return request; + }; + FontLoader.prototype.prepareFontLoadEvent = function fontLoaderPrepareFontLoadEvent(rules, fonts, request) { + function int32(data, offset) { + return data.charCodeAt(offset) << 24 | data.charCodeAt(offset + 1) << 16 | data.charCodeAt(offset + 2) << 8 | data.charCodeAt(offset + 3) & 0xff; + } + function spliceString(s, offset, remove, insert) { + var chunk1 = s.substr(0, offset); + var chunk2 = s.substr(offset + remove); + return chunk1 + insert + chunk2; + } + var i, ii; + var canvas = document.createElement('canvas'); + canvas.width = 1; + canvas.height = 1; + var ctx = canvas.getContext('2d'); + var called = 0; + function isFontReady(name, callback) { + called++; + if (called > 30) { + warn('Load test font never loaded.'); + callback(); + return; + } + ctx.font = '30px ' + name; + ctx.fillText('.', 0, 20); + var imageData = ctx.getImageData(0, 0, 1, 1); + if (imageData.data[3] > 0) { + callback(); + return; + } + setTimeout(isFontReady.bind(null, name, callback)); + } + var loadTestFontId = 'lt' + Date.now() + this.loadTestFontId++; + var data = this.loadTestFont; + var COMMENT_OFFSET = 976; + data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId); + var CFF_CHECKSUM_OFFSET = 16; + var XXXX_VALUE = 0x58585858; + var checksum = int32(data, CFF_CHECKSUM_OFFSET); + for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) { + checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0; + } + if (i < loadTestFontId.length) { + checksum = checksum - XXXX_VALUE + int32(loadTestFontId + 'XXX', i) | 0; + } + data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, string32(checksum)); + var url = 'url(data:font/opentype;base64,' + btoa(data) + ');'; + var rule = '@font-face { font-family:"' + loadTestFontId + '";src:' + url + '}'; + this.insertRule(rule); + var names = []; + for (i = 0, ii = fonts.length; i < ii; i++) { + names.push(fonts[i].loadedName); + } + names.push(loadTestFontId); + var div = document.createElement('div'); + div.setAttribute('style', 'visibility: hidden;' + 'width: 10px; height: 10px;' + 'position: absolute; top: 0px; left: 0px;'); + for (i = 0, ii = names.length; i < ii; ++i) { + var span = document.createElement('span'); + span.textContent = 'Hi'; + span.style.fontFamily = names[i]; + div.appendChild(span); + } + document.body.appendChild(div); + isFontReady(loadTestFontId, function () { + document.body.removeChild(div); + request.complete(); + }); + }; + FontLoader.isFontLoadingAPISupported = typeof document !== 'undefined' && !!document.fonts; + var isSyncFontLoadingSupported = function isSyncFontLoadingSupported() { + if (typeof navigator === 'undefined') { + return true; + } + var supported = false; + var m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(navigator.userAgent); + if (m && m[1] >= 14) { + supported = true; + } + return supported; + }; + Object.defineProperty(FontLoader, 'isSyncFontLoadingSupported', { + get: function () { + return shadow(FontLoader, 'isSyncFontLoadingSupported', isSyncFontLoadingSupported()); + }, + enumerable: true, + configurable: true + }); + var IsEvalSupportedCached = { + get value() { + return shadow(this, 'value', sharedUtil.isEvalSupported()); + } + }; + var FontFaceObject = function FontFaceObjectClosure() { + function FontFaceObject(translatedData, options) { + this.compiledGlyphs = Object.create(null); + for (var i in translatedData) { + this[i] = translatedData[i]; + } + this.options = options; + } + FontFaceObject.prototype = { + createNativeFontFace: function FontFaceObject_createNativeFontFace() { + if (!this.data) { + return null; + } + if (this.options.disableFontFace) { + this.disableFontFace = true; + return null; + } + var nativeFontFace = new FontFace(this.loadedName, this.data, {}); + if (this.options.fontRegistry) { + this.options.fontRegistry.registerFont(this); + } + return nativeFontFace; + }, + createFontFaceRule: function FontFaceObject_createFontFaceRule() { + if (!this.data) { + return null; + } + if (this.options.disableFontFace) { + this.disableFontFace = true; + return null; + } + var data = bytesToString(new Uint8Array(this.data)); + var fontName = this.loadedName; + var url = 'url(data:' + this.mimetype + ';base64,' + btoa(data) + ');'; + var rule = '@font-face { font-family:"' + fontName + '";src:' + url + '}'; + if (this.options.fontRegistry) { + this.options.fontRegistry.registerFont(this, url); + } + return rule; + }, + getPathGenerator: function FontFaceObject_getPathGenerator(objs, character) { + if (!(character in this.compiledGlyphs)) { + var cmds = objs.get(this.loadedName + '_path_' + character); + var current, i, len; + if (this.options.isEvalSupported && IsEvalSupportedCached.value) { + var args, js = ''; + for (i = 0, len = cmds.length; i < len; i++) { + current = cmds[i]; + if (current.args !== undefined) { + args = current.args.join(','); + } else { + args = ''; + } + js += 'c.' + current.cmd + '(' + args + ');\n'; + } + this.compiledGlyphs[character] = new Function('c', 'size', js); + } else { + this.compiledGlyphs[character] = function (c, size) { + for (i = 0, len = cmds.length; i < len; i++) { + current = cmds[i]; + if (current.cmd === 'scale') { + current.args = [ + size, + -size + ]; + } + c[current.cmd].apply(c, current.args); + } + }; + } + } + return this.compiledGlyphs[character]; + } + }; + return FontFaceObject; + }(); + exports.FontFaceObject = FontFaceObject; + exports.FontLoader = FontLoader; + })); + (function (root, factory) { + factory(root.pdfjsDisplayMetadata = {}, root.pdfjsSharedUtil); + }(this, function (exports, sharedUtil) { + var error = sharedUtil.error; + function fixMetadata(meta) { + return meta.replace(/>\\376\\377([^<]+)/g, function (all, codes) { + var bytes = codes.replace(/\\([0-3])([0-7])([0-7])/g, function (code, d1, d2, d3) { + return String.fromCharCode(d1 * 64 + d2 * 8 + d3 * 1); + }); + var chars = ''; + for (var i = 0; i < bytes.length; i += 2) { + var code = bytes.charCodeAt(i) * 256 + bytes.charCodeAt(i + 1); + chars += code >= 32 && code < 127 && code !== 60 && code !== 62 && code !== 38 ? String.fromCharCode(code) : '&#x' + (0x10000 + code).toString(16).substring(1) + ';'; + } + return '>' + chars; + }); + } + function Metadata(meta) { + if (typeof meta === 'string') { + meta = fixMetadata(meta); + var parser = new DOMParser(); + meta = parser.parseFromString(meta, 'application/xml'); + } else if (!(meta instanceof Document)) { + error('Metadata: Invalid metadata object'); + } + this.metaDocument = meta; + this.metadata = Object.create(null); + this.parse(); + } + Metadata.prototype = { + parse: function Metadata_parse() { + var doc = this.metaDocument; + var rdf = doc.documentElement; + if (rdf.nodeName.toLowerCase() !== 'rdf:rdf') { + rdf = rdf.firstChild; + while (rdf && rdf.nodeName.toLowerCase() !== 'rdf:rdf') { + rdf = rdf.nextSibling; + } + } + var nodeName = rdf ? rdf.nodeName.toLowerCase() : null; + if (!rdf || nodeName !== 'rdf:rdf' || !rdf.hasChildNodes()) { + return; + } + var children = rdf.childNodes, desc, entry, name, i, ii, length, iLength; + for (i = 0, length = children.length; i < length; i++) { + desc = children[i]; + if (desc.nodeName.toLowerCase() !== 'rdf:description') { + continue; + } + for (ii = 0, iLength = desc.childNodes.length; ii < iLength; ii++) { + if (desc.childNodes[ii].nodeName.toLowerCase() !== '#text') { + entry = desc.childNodes[ii]; + name = entry.nodeName.toLowerCase(); + this.metadata[name] = entry.textContent.trim(); + } + } + } + }, + get: function Metadata_get(name) { + return this.metadata[name] || null; + }, + has: function Metadata_has(name) { + return typeof this.metadata[name] !== 'undefined'; + } + }; + exports.Metadata = Metadata; + })); + (function (root, factory) { + factory(root.pdfjsDisplaySVG = {}, root.pdfjsSharedUtil); + }(this, function (exports, sharedUtil) { + var FONT_IDENTITY_MATRIX = sharedUtil.FONT_IDENTITY_MATRIX; + var IDENTITY_MATRIX = sharedUtil.IDENTITY_MATRIX; + var ImageKind = sharedUtil.ImageKind; + var OPS = sharedUtil.OPS; + var Util = sharedUtil.Util; + var isNum = sharedUtil.isNum; + var isArray = sharedUtil.isArray; + var warn = sharedUtil.warn; + var createObjectURL = sharedUtil.createObjectURL; + var SVG_DEFAULTS = { + fontStyle: 'normal', + fontWeight: 'normal', + fillColor: '#000000' + }; + var convertImgDataToPng = function convertImgDataToPngClosure() { + var PNG_HEADER = new Uint8Array([ + 0x89, + 0x50, + 0x4e, + 0x47, + 0x0d, + 0x0a, + 0x1a, + 0x0a + ]); + var CHUNK_WRAPPER_SIZE = 12; + var crcTable = new Int32Array(256); + for (var i = 0; i < 256; i++) { + var c = i; + for (var h = 0; h < 8; h++) { + if (c & 1) { + c = 0xedB88320 ^ c >> 1 & 0x7fffffff; + } else { + c = c >> 1 & 0x7fffffff; + } + } + crcTable[i] = c; + } + function crc32(data, start, end) { + var crc = -1; + for (var i = start; i < end; i++) { + var a = (crc ^ data[i]) & 0xff; + var b = crcTable[a]; + crc = crc >>> 8 ^ b; + } + return crc ^ -1; + } + function writePngChunk(type, body, data, offset) { + var p = offset; + var len = body.length; + data[p] = len >> 24 & 0xff; + data[p + 1] = len >> 16 & 0xff; + data[p + 2] = len >> 8 & 0xff; + data[p + 3] = len & 0xff; + p += 4; + data[p] = type.charCodeAt(0) & 0xff; + data[p + 1] = type.charCodeAt(1) & 0xff; + data[p + 2] = type.charCodeAt(2) & 0xff; + data[p + 3] = type.charCodeAt(3) & 0xff; + p += 4; + data.set(body, p); + p += body.length; + var crc = crc32(data, offset + 4, p); + data[p] = crc >> 24 & 0xff; + data[p + 1] = crc >> 16 & 0xff; + data[p + 2] = crc >> 8 & 0xff; + data[p + 3] = crc & 0xff; + } + function adler32(data, start, end) { + var a = 1; + var b = 0; + for (var i = start; i < end; ++i) { + a = (a + (data[i] & 0xff)) % 65521; + b = (b + a) % 65521; + } + return b << 16 | a; + } + function encode(imgData, kind, forceDataSchema) { + var width = imgData.width; + var height = imgData.height; + var bitDepth, colorType, lineSize; + var bytes = imgData.data; + switch (kind) { + case ImageKind.GRAYSCALE_1BPP: + colorType = 0; + bitDepth = 1; + lineSize = width + 7 >> 3; + break; + case ImageKind.RGB_24BPP: + colorType = 2; + bitDepth = 8; + lineSize = width * 3; + break; + case ImageKind.RGBA_32BPP: + colorType = 6; + bitDepth = 8; + lineSize = width * 4; + break; + default: + throw new Error('invalid format'); + } + var literals = new Uint8Array((1 + lineSize) * height); + var offsetLiterals = 0, offsetBytes = 0; + var y, i; + for (y = 0; y < height; ++y) { + literals[offsetLiterals++] = 0; + literals.set(bytes.subarray(offsetBytes, offsetBytes + lineSize), offsetLiterals); + offsetBytes += lineSize; + offsetLiterals += lineSize; + } + if (kind === ImageKind.GRAYSCALE_1BPP) { + offsetLiterals = 0; + for (y = 0; y < height; y++) { + offsetLiterals++; + for (i = 0; i < lineSize; i++) { + literals[offsetLiterals++] ^= 0xFF; + } + } + } + var ihdr = new Uint8Array([ + width >> 24 & 0xff, + width >> 16 & 0xff, + width >> 8 & 0xff, + width & 0xff, + height >> 24 & 0xff, + height >> 16 & 0xff, + height >> 8 & 0xff, + height & 0xff, + bitDepth, + colorType, + 0x00, + 0x00, + 0x00 + ]); + var len = literals.length; + var maxBlockLength = 0xFFFF; + var deflateBlocks = Math.ceil(len / maxBlockLength); + var idat = new Uint8Array(2 + len + deflateBlocks * 5 + 4); + var pi = 0; + idat[pi++] = 0x78; + idat[pi++] = 0x9c; + var pos = 0; + while (len > maxBlockLength) { + idat[pi++] = 0x00; + idat[pi++] = 0xff; + idat[pi++] = 0xff; + idat[pi++] = 0x00; + idat[pi++] = 0x00; + idat.set(literals.subarray(pos, pos + maxBlockLength), pi); + pi += maxBlockLength; + pos += maxBlockLength; + len -= maxBlockLength; + } + idat[pi++] = 0x01; + idat[pi++] = len & 0xff; + idat[pi++] = len >> 8 & 0xff; + idat[pi++] = ~len & 0xffff & 0xff; + idat[pi++] = (~len & 0xffff) >> 8 & 0xff; + idat.set(literals.subarray(pos), pi); + pi += literals.length - pos; + var adler = adler32(literals, 0, literals.length); + idat[pi++] = adler >> 24 & 0xff; + idat[pi++] = adler >> 16 & 0xff; + idat[pi++] = adler >> 8 & 0xff; + idat[pi++] = adler & 0xff; + var pngLength = PNG_HEADER.length + CHUNK_WRAPPER_SIZE * 3 + ihdr.length + idat.length; + var data = new Uint8Array(pngLength); + var offset = 0; + data.set(PNG_HEADER, offset); + offset += PNG_HEADER.length; + writePngChunk('IHDR', ihdr, data, offset); + offset += CHUNK_WRAPPER_SIZE + ihdr.length; + writePngChunk('IDATA', idat, data, offset); + offset += CHUNK_WRAPPER_SIZE + idat.length; + writePngChunk('IEND', new Uint8Array(0), data, offset); + return createObjectURL(data, 'image/png', forceDataSchema); + } + return function convertImgDataToPng(imgData, forceDataSchema) { + var kind = imgData.kind === undefined ? ImageKind.GRAYSCALE_1BPP : imgData.kind; + return encode(imgData, kind, forceDataSchema); + }; + }(); + var SVGExtraState = function SVGExtraStateClosure() { + function SVGExtraState() { + this.fontSizeScale = 1; + this.fontWeight = SVG_DEFAULTS.fontWeight; + this.fontSize = 0; + this.textMatrix = IDENTITY_MATRIX; + this.fontMatrix = FONT_IDENTITY_MATRIX; + this.leading = 0; + this.x = 0; + this.y = 0; + this.lineX = 0; + this.lineY = 0; + this.charSpacing = 0; + this.wordSpacing = 0; + this.textHScale = 1; + this.textRise = 0; + this.fillColor = SVG_DEFAULTS.fillColor; + this.strokeColor = '#000000'; + this.fillAlpha = 1; + this.strokeAlpha = 1; + this.lineWidth = 1; + this.lineJoin = ''; + this.lineCap = ''; + this.miterLimit = 0; + this.dashArray = []; + this.dashPhase = 0; + this.dependencies = []; + this.activeClipUrl = null; + this.clipGroup = null; + this.maskId = ''; + } + SVGExtraState.prototype = { + clone: function SVGExtraState_clone() { + return Object.create(this); + }, + setCurrentPoint: function SVGExtraState_setCurrentPoint(x, y) { + this.x = x; + this.y = y; + } + }; + return SVGExtraState; + }(); + var SVGGraphics = function SVGGraphicsClosure() { + function opListToTree(opList) { + var opTree = []; + var tmp = []; + var opListLen = opList.length; + for (var x = 0; x < opListLen; x++) { + if (opList[x].fn === 'save') { + opTree.push({ + 'fnId': 92, + 'fn': 'group', + 'items': [] + }); + tmp.push(opTree); + opTree = opTree[opTree.length - 1].items; + continue; + } + if (opList[x].fn === 'restore') { + opTree = tmp.pop(); + } else { + opTree.push(opList[x]); + } + } + return opTree; + } + function pf(value) { + if (value === (value | 0)) { + return value.toString(); + } + var s = value.toFixed(10); + var i = s.length - 1; + if (s[i] !== '0') { + return s; + } + do { + i--; + } while (s[i] === '0'); + return s.substr(0, s[i] === '.' ? i : i + 1); + } + function pm(m) { + if (m[4] === 0 && m[5] === 0) { + if (m[1] === 0 && m[2] === 0) { + if (m[0] === 1 && m[3] === 1) { + return ''; + } + return 'scale(' + pf(m[0]) + ' ' + pf(m[3]) + ')'; + } + if (m[0] === m[3] && m[1] === -m[2]) { + var a = Math.acos(m[0]) * 180 / Math.PI; + return 'rotate(' + pf(a) + ')'; + } + } else { + if (m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1) { + return 'translate(' + pf(m[4]) + ' ' + pf(m[5]) + ')'; + } + } + return 'matrix(' + pf(m[0]) + ' ' + pf(m[1]) + ' ' + pf(m[2]) + ' ' + pf(m[3]) + ' ' + pf(m[4]) + ' ' + pf(m[5]) + ')'; + } + function SVGGraphics(commonObjs, objs, forceDataSchema) { + this.current = new SVGExtraState(); + this.transformMatrix = IDENTITY_MATRIX; + this.transformStack = []; + this.extraStack = []; + this.commonObjs = commonObjs; + this.objs = objs; + this.pendingEOFill = false; + this.embedFonts = false; + this.embeddedFonts = Object.create(null); + this.cssStyle = null; + this.forceDataSchema = !!forceDataSchema; + } + var NS = 'http://www.w3.org/2000/svg'; + var XML_NS = 'http://www.w3.org/XML/1998/namespace'; + var XLINK_NS = 'http://www.w3.org/1999/xlink'; + var LINE_CAP_STYLES = [ + 'butt', + 'round', + 'square' + ]; + var LINE_JOIN_STYLES = [ + 'miter', + 'round', + 'bevel' + ]; + var clipCount = 0; + var maskCount = 0; + SVGGraphics.prototype = { + save: function SVGGraphics_save() { + this.transformStack.push(this.transformMatrix); + var old = this.current; + this.extraStack.push(old); + this.current = old.clone(); + }, + restore: function SVGGraphics_restore() { + this.transformMatrix = this.transformStack.pop(); + this.current = this.extraStack.pop(); + this.tgrp = null; + }, + group: function SVGGraphics_group(items) { + this.save(); + this.executeOpTree(items); + this.restore(); + }, + loadDependencies: function SVGGraphics_loadDependencies(operatorList) { + var fnArray = operatorList.fnArray; + var fnArrayLen = fnArray.length; + var argsArray = operatorList.argsArray; + var self = this; + for (var i = 0; i < fnArrayLen; i++) { + if (OPS.dependency === fnArray[i]) { + var deps = argsArray[i]; + for (var n = 0, nn = deps.length; n < nn; n++) { + var obj = deps[n]; + var common = obj.substring(0, 2) === 'g_'; + var promise; + if (common) { + promise = new Promise(function (resolve) { + self.commonObjs.get(obj, resolve); + }); + } else { + promise = new Promise(function (resolve) { + self.objs.get(obj, resolve); + }); + } + this.current.dependencies.push(promise); + } + } + } + return Promise.all(this.current.dependencies); + }, + transform: function SVGGraphics_transform(a, b, c, d, e, f) { + var transformMatrix = [ + a, + b, + c, + d, + e, + f + ]; + this.transformMatrix = Util.transform(this.transformMatrix, transformMatrix); + this.tgrp = null; + }, + getSVG: function SVGGraphics_getSVG(operatorList, viewport) { + this.viewport = viewport; + var svgElement = this._initialize(viewport); + return this.loadDependencies(operatorList).then(function () { + this.transformMatrix = IDENTITY_MATRIX; + var opTree = this.convertOpList(operatorList); + this.executeOpTree(opTree); + return svgElement; + }.bind(this)); + }, + convertOpList: function SVGGraphics_convertOpList(operatorList) { + var argsArray = operatorList.argsArray; + var fnArray = operatorList.fnArray; + var fnArrayLen = fnArray.length; + var REVOPS = []; + var opList = []; + for (var op in OPS) { + REVOPS[OPS[op]] = op; + } + for (var x = 0; x < fnArrayLen; x++) { + var fnId = fnArray[x]; + opList.push({ + 'fnId': fnId, + 'fn': REVOPS[fnId], + 'args': argsArray[x] + }); + } + return opListToTree(opList); + }, + executeOpTree: function SVGGraphics_executeOpTree(opTree) { + var opTreeLen = opTree.length; + for (var x = 0; x < opTreeLen; x++) { + var fn = opTree[x].fn; + var fnId = opTree[x].fnId; + var args = opTree[x].args; + switch (fnId | 0) { + case OPS.beginText: + this.beginText(); + break; + case OPS.setLeading: + this.setLeading(args); + break; + case OPS.setLeadingMoveText: + this.setLeadingMoveText(args[0], args[1]); + break; + case OPS.setFont: + this.setFont(args); + break; + case OPS.showText: + this.showText(args[0]); + break; + case OPS.showSpacedText: + this.showText(args[0]); + break; + case OPS.endText: + this.endText(); + break; + case OPS.moveText: + this.moveText(args[0], args[1]); + break; + case OPS.setCharSpacing: + this.setCharSpacing(args[0]); + break; + case OPS.setWordSpacing: + this.setWordSpacing(args[0]); + break; + case OPS.setHScale: + this.setHScale(args[0]); + break; + case OPS.setTextMatrix: + this.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]); + break; + case OPS.setLineWidth: + this.setLineWidth(args[0]); + break; + case OPS.setLineJoin: + this.setLineJoin(args[0]); + break; + case OPS.setLineCap: + this.setLineCap(args[0]); + break; + case OPS.setMiterLimit: + this.setMiterLimit(args[0]); + break; + case OPS.setFillRGBColor: + this.setFillRGBColor(args[0], args[1], args[2]); + break; + case OPS.setStrokeRGBColor: + this.setStrokeRGBColor(args[0], args[1], args[2]); + break; + case OPS.setDash: + this.setDash(args[0], args[1]); + break; + case OPS.setGState: + this.setGState(args[0]); + break; + case OPS.fill: + this.fill(); + break; + case OPS.eoFill: + this.eoFill(); + break; + case OPS.stroke: + this.stroke(); + break; + case OPS.fillStroke: + this.fillStroke(); + break; + case OPS.eoFillStroke: + this.eoFillStroke(); + break; + case OPS.clip: + this.clip('nonzero'); + break; + case OPS.eoClip: + this.clip('evenodd'); + break; + case OPS.paintSolidColorImageMask: + this.paintSolidColorImageMask(); + break; + case OPS.paintJpegXObject: + this.paintJpegXObject(args[0], args[1], args[2]); + break; + case OPS.paintImageXObject: + this.paintImageXObject(args[0]); + break; + case OPS.paintInlineImageXObject: + this.paintInlineImageXObject(args[0]); + break; + case OPS.paintImageMaskXObject: + this.paintImageMaskXObject(args[0]); + break; + case OPS.paintFormXObjectBegin: + this.paintFormXObjectBegin(args[0], args[1]); + break; + case OPS.paintFormXObjectEnd: + this.paintFormXObjectEnd(); + break; + case OPS.closePath: + this.closePath(); + break; + case OPS.closeStroke: + this.closeStroke(); + break; + case OPS.closeFillStroke: + this.closeFillStroke(); + break; + case OPS.nextLine: + this.nextLine(); + break; + case OPS.transform: + this.transform(args[0], args[1], args[2], args[3], args[4], args[5]); + break; + case OPS.constructPath: + this.constructPath(args[0], args[1]); + break; + case OPS.endPath: + this.endPath(); + break; + case 92: + this.group(opTree[x].items); + break; + default: + warn('Unimplemented operator ' + fn); + break; + } + } + }, + setWordSpacing: function SVGGraphics_setWordSpacing(wordSpacing) { + this.current.wordSpacing = wordSpacing; + }, + setCharSpacing: function SVGGraphics_setCharSpacing(charSpacing) { + this.current.charSpacing = charSpacing; + }, + nextLine: function SVGGraphics_nextLine() { + this.moveText(0, this.current.leading); + }, + setTextMatrix: function SVGGraphics_setTextMatrix(a, b, c, d, e, f) { + var current = this.current; + this.current.textMatrix = this.current.lineMatrix = [ + a, + b, + c, + d, + e, + f + ]; + this.current.x = this.current.lineX = 0; + this.current.y = this.current.lineY = 0; + current.xcoords = []; + current.tspan = document.createElementNS(NS, 'svg:tspan'); + current.tspan.setAttributeNS(null, 'font-family', current.fontFamily); + current.tspan.setAttributeNS(null, 'font-size', pf(current.fontSize) + 'px'); + current.tspan.setAttributeNS(null, 'y', pf(-current.y)); + current.txtElement = document.createElementNS(NS, 'svg:text'); + current.txtElement.appendChild(current.tspan); + }, + beginText: function SVGGraphics_beginText() { + this.current.x = this.current.lineX = 0; + this.current.y = this.current.lineY = 0; + this.current.textMatrix = IDENTITY_MATRIX; + this.current.lineMatrix = IDENTITY_MATRIX; + this.current.tspan = document.createElementNS(NS, 'svg:tspan'); + this.current.txtElement = document.createElementNS(NS, 'svg:text'); + this.current.txtgrp = document.createElementNS(NS, 'svg:g'); + this.current.xcoords = []; + }, + moveText: function SVGGraphics_moveText(x, y) { + var current = this.current; + this.current.x = this.current.lineX += x; + this.current.y = this.current.lineY += y; + current.xcoords = []; + current.tspan = document.createElementNS(NS, 'svg:tspan'); + current.tspan.setAttributeNS(null, 'font-family', current.fontFamily); + current.tspan.setAttributeNS(null, 'font-size', pf(current.fontSize) + 'px'); + current.tspan.setAttributeNS(null, 'y', pf(-current.y)); + }, + showText: function SVGGraphics_showText(glyphs) { + var current = this.current; + var font = current.font; + var fontSize = current.fontSize; + if (fontSize === 0) { + return; + } + var charSpacing = current.charSpacing; + var wordSpacing = current.wordSpacing; + var fontDirection = current.fontDirection; + var textHScale = current.textHScale * fontDirection; + var glyphsLength = glyphs.length; + var vertical = font.vertical; + var widthAdvanceScale = fontSize * current.fontMatrix[0]; + var x = 0, i; + for (i = 0; i < glyphsLength; ++i) { + var glyph = glyphs[i]; + if (glyph === null) { + x += fontDirection * wordSpacing; + continue; + } else if (isNum(glyph)) { + x += -glyph * fontSize * 0.001; + continue; + } + current.xcoords.push(current.x + x * textHScale); + var width = glyph.width; + var character = glyph.fontChar; + var charWidth = width * widthAdvanceScale + charSpacing * fontDirection; + x += charWidth; + current.tspan.textContent += character; + } + if (vertical) { + current.y -= x * textHScale; + } else { + current.x += x * textHScale; + } + current.tspan.setAttributeNS(null, 'x', current.xcoords.map(pf).join(' ')); + current.tspan.setAttributeNS(null, 'y', pf(-current.y)); + current.tspan.setAttributeNS(null, 'font-family', current.fontFamily); + current.tspan.setAttributeNS(null, 'font-size', pf(current.fontSize) + 'px'); + if (current.fontStyle !== SVG_DEFAULTS.fontStyle) { + current.tspan.setAttributeNS(null, 'font-style', current.fontStyle); + } + if (current.fontWeight !== SVG_DEFAULTS.fontWeight) { + current.tspan.setAttributeNS(null, 'font-weight', current.fontWeight); + } + if (current.fillColor !== SVG_DEFAULTS.fillColor) { + current.tspan.setAttributeNS(null, 'fill', current.fillColor); + } + current.txtElement.setAttributeNS(null, 'transform', pm(current.textMatrix) + ' scale(1, -1)'); + current.txtElement.setAttributeNS(XML_NS, 'xml:space', 'preserve'); + current.txtElement.appendChild(current.tspan); + current.txtgrp.appendChild(current.txtElement); + this._ensureTransformGroup().appendChild(current.txtElement); + }, + setLeadingMoveText: function SVGGraphics_setLeadingMoveText(x, y) { + this.setLeading(-y); + this.moveText(x, y); + }, + addFontStyle: function SVGGraphics_addFontStyle(fontObj) { + if (!this.cssStyle) { + this.cssStyle = document.createElementNS(NS, 'svg:style'); + this.cssStyle.setAttributeNS(null, 'type', 'text/css'); + this.defs.appendChild(this.cssStyle); + } + var url = createObjectURL(fontObj.data, fontObj.mimetype, this.forceDataSchema); + this.cssStyle.textContent += '@font-face { font-family: "' + fontObj.loadedName + '";' + ' src: url(' + url + '); }\n'; + }, + setFont: function SVGGraphics_setFont(details) { + var current = this.current; + var fontObj = this.commonObjs.get(details[0]); + var size = details[1]; + this.current.font = fontObj; + if (this.embedFonts && fontObj.data && !this.embeddedFonts[fontObj.loadedName]) { + this.addFontStyle(fontObj); + this.embeddedFonts[fontObj.loadedName] = fontObj; + } + current.fontMatrix = fontObj.fontMatrix ? fontObj.fontMatrix : FONT_IDENTITY_MATRIX; + var bold = fontObj.black ? fontObj.bold ? 'bolder' : 'bold' : fontObj.bold ? 'bold' : 'normal'; + var italic = fontObj.italic ? 'italic' : 'normal'; + if (size < 0) { + size = -size; + current.fontDirection = -1; + } else { + current.fontDirection = 1; + } + current.fontSize = size; + current.fontFamily = fontObj.loadedName; + current.fontWeight = bold; + current.fontStyle = italic; + current.tspan = document.createElementNS(NS, 'svg:tspan'); + current.tspan.setAttributeNS(null, 'y', pf(-current.y)); + current.xcoords = []; + }, + endText: function SVGGraphics_endText() { + }, + setLineWidth: function SVGGraphics_setLineWidth(width) { + this.current.lineWidth = width; + }, + setLineCap: function SVGGraphics_setLineCap(style) { + this.current.lineCap = LINE_CAP_STYLES[style]; + }, + setLineJoin: function SVGGraphics_setLineJoin(style) { + this.current.lineJoin = LINE_JOIN_STYLES[style]; + }, + setMiterLimit: function SVGGraphics_setMiterLimit(limit) { + this.current.miterLimit = limit; + }, + setStrokeRGBColor: function SVGGraphics_setStrokeRGBColor(r, g, b) { + var color = Util.makeCssRgb(r, g, b); + this.current.strokeColor = color; + }, + setFillRGBColor: function SVGGraphics_setFillRGBColor(r, g, b) { + var color = Util.makeCssRgb(r, g, b); + this.current.fillColor = color; + this.current.tspan = document.createElementNS(NS, 'svg:tspan'); + this.current.xcoords = []; + }, + setDash: function SVGGraphics_setDash(dashArray, dashPhase) { + this.current.dashArray = dashArray; + this.current.dashPhase = dashPhase; + }, + constructPath: function SVGGraphics_constructPath(ops, args) { + var current = this.current; + var x = current.x, y = current.y; + current.path = document.createElementNS(NS, 'svg:path'); + var d = []; + var opLength = ops.length; + for (var i = 0, j = 0; i < opLength; i++) { + switch (ops[i] | 0) { + case OPS.rectangle: + x = args[j++]; + y = args[j++]; + var width = args[j++]; + var height = args[j++]; + var xw = x + width; + var yh = y + height; + d.push('M', pf(x), pf(y), 'L', pf(xw), pf(y), 'L', pf(xw), pf(yh), 'L', pf(x), pf(yh), 'Z'); + break; + case OPS.moveTo: + x = args[j++]; + y = args[j++]; + d.push('M', pf(x), pf(y)); + break; + case OPS.lineTo: + x = args[j++]; + y = args[j++]; + d.push('L', pf(x), pf(y)); + break; + case OPS.curveTo: + x = args[j + 4]; + y = args[j + 5]; + d.push('C', pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]), pf(x), pf(y)); + j += 6; + break; + case OPS.curveTo2: + x = args[j + 2]; + y = args[j + 3]; + d.push('C', pf(x), pf(y), pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3])); + j += 4; + break; + case OPS.curveTo3: + x = args[j + 2]; + y = args[j + 3]; + d.push('C', pf(args[j]), pf(args[j + 1]), pf(x), pf(y), pf(x), pf(y)); + j += 4; + break; + case OPS.closePath: + d.push('Z'); + break; + } + } + current.path.setAttributeNS(null, 'd', d.join(' ')); + current.path.setAttributeNS(null, 'stroke-miterlimit', pf(current.miterLimit)); + current.path.setAttributeNS(null, 'stroke-linecap', current.lineCap); + current.path.setAttributeNS(null, 'stroke-linejoin', current.lineJoin); + current.path.setAttributeNS(null, 'stroke-width', pf(current.lineWidth) + 'px'); + current.path.setAttributeNS(null, 'stroke-dasharray', current.dashArray.map(pf).join(' ')); + current.path.setAttributeNS(null, 'stroke-dashoffset', pf(current.dashPhase) + 'px'); + current.path.setAttributeNS(null, 'fill', 'none'); + this._ensureTransformGroup().appendChild(current.path); + current.element = current.path; + current.setCurrentPoint(x, y); + }, + endPath: function SVGGraphics_endPath() { + }, + clip: function SVGGraphics_clip(type) { + var current = this.current; + var clipId = 'clippath' + clipCount; + clipCount++; + var clipPath = document.createElementNS(NS, 'svg:clipPath'); + clipPath.setAttributeNS(null, 'id', clipId); + clipPath.setAttributeNS(null, 'transform', pm(this.transformMatrix)); + var clipElement = current.element.cloneNode(); + if (type === 'evenodd') { + clipElement.setAttributeNS(null, 'clip-rule', 'evenodd'); + } else { + clipElement.setAttributeNS(null, 'clip-rule', 'nonzero'); + } + clipPath.appendChild(clipElement); + this.defs.appendChild(clipPath); + if (current.activeClipUrl) { + current.clipGroup = null; + this.extraStack.forEach(function (prev) { + prev.clipGroup = null; + }); + } + current.activeClipUrl = 'url(#' + clipId + ')'; + this.tgrp = null; + }, + closePath: function SVGGraphics_closePath() { + var current = this.current; + var d = current.path.getAttributeNS(null, 'd'); + d += 'Z'; + current.path.setAttributeNS(null, 'd', d); + }, + setLeading: function SVGGraphics_setLeading(leading) { + this.current.leading = -leading; + }, + setTextRise: function SVGGraphics_setTextRise(textRise) { + this.current.textRise = textRise; + }, + setHScale: function SVGGraphics_setHScale(scale) { + this.current.textHScale = scale / 100; + }, + setGState: function SVGGraphics_setGState(states) { + for (var i = 0, ii = states.length; i < ii; i++) { + var state = states[i]; + var key = state[0]; + var value = state[1]; + switch (key) { + case 'LW': + this.setLineWidth(value); + break; + case 'LC': + this.setLineCap(value); + break; + case 'LJ': + this.setLineJoin(value); + break; + case 'ML': + this.setMiterLimit(value); + break; + case 'D': + this.setDash(value[0], value[1]); + break; + case 'Font': + this.setFont(value); + break; + default: + warn('Unimplemented graphic state ' + key); + break; + } + } + }, + fill: function SVGGraphics_fill() { + var current = this.current; + current.element.setAttributeNS(null, 'fill', current.fillColor); + }, + stroke: function SVGGraphics_stroke() { + var current = this.current; + current.element.setAttributeNS(null, 'stroke', current.strokeColor); + current.element.setAttributeNS(null, 'fill', 'none'); + }, + eoFill: function SVGGraphics_eoFill() { + var current = this.current; + current.element.setAttributeNS(null, 'fill', current.fillColor); + current.element.setAttributeNS(null, 'fill-rule', 'evenodd'); + }, + fillStroke: function SVGGraphics_fillStroke() { + this.stroke(); + this.fill(); + }, + eoFillStroke: function SVGGraphics_eoFillStroke() { + this.current.element.setAttributeNS(null, 'fill-rule', 'evenodd'); + this.fillStroke(); + }, + closeStroke: function SVGGraphics_closeStroke() { + this.closePath(); + this.stroke(); + }, + closeFillStroke: function SVGGraphics_closeFillStroke() { + this.closePath(); + this.fillStroke(); + }, + paintSolidColorImageMask: function SVGGraphics_paintSolidColorImageMask() { + var current = this.current; + var rect = document.createElementNS(NS, 'svg:rect'); + rect.setAttributeNS(null, 'x', '0'); + rect.setAttributeNS(null, 'y', '0'); + rect.setAttributeNS(null, 'width', '1px'); + rect.setAttributeNS(null, 'height', '1px'); + rect.setAttributeNS(null, 'fill', current.fillColor); + this._ensureTransformGroup().appendChild(rect); + }, + paintJpegXObject: function SVGGraphics_paintJpegXObject(objId, w, h) { + var imgObj = this.objs.get(objId); + var imgEl = document.createElementNS(NS, 'svg:image'); + imgEl.setAttributeNS(XLINK_NS, 'xlink:href', imgObj.src); + imgEl.setAttributeNS(null, 'width', imgObj.width + 'px'); + imgEl.setAttributeNS(null, 'height', imgObj.height + 'px'); + imgEl.setAttributeNS(null, 'x', '0'); + imgEl.setAttributeNS(null, 'y', pf(-h)); + imgEl.setAttributeNS(null, 'transform', 'scale(' + pf(1 / w) + ' ' + pf(-1 / h) + ')'); + this._ensureTransformGroup().appendChild(imgEl); + }, + paintImageXObject: function SVGGraphics_paintImageXObject(objId) { + var imgData = this.objs.get(objId); + if (!imgData) { + warn('Dependent image isn\'t ready yet'); + return; + } + this.paintInlineImageXObject(imgData); + }, + paintInlineImageXObject: function SVGGraphics_paintInlineImageXObject(imgData, mask) { + var width = imgData.width; + var height = imgData.height; + var imgSrc = convertImgDataToPng(imgData, this.forceDataSchema); + var cliprect = document.createElementNS(NS, 'svg:rect'); + cliprect.setAttributeNS(null, 'x', '0'); + cliprect.setAttributeNS(null, 'y', '0'); + cliprect.setAttributeNS(null, 'width', pf(width)); + cliprect.setAttributeNS(null, 'height', pf(height)); + this.current.element = cliprect; + this.clip('nonzero'); + var imgEl = document.createElementNS(NS, 'svg:image'); + imgEl.setAttributeNS(XLINK_NS, 'xlink:href', imgSrc); + imgEl.setAttributeNS(null, 'x', '0'); + imgEl.setAttributeNS(null, 'y', pf(-height)); + imgEl.setAttributeNS(null, 'width', pf(width) + 'px'); + imgEl.setAttributeNS(null, 'height', pf(height) + 'px'); + imgEl.setAttributeNS(null, 'transform', 'scale(' + pf(1 / width) + ' ' + pf(-1 / height) + ')'); + if (mask) { + mask.appendChild(imgEl); + } else { + this._ensureTransformGroup().appendChild(imgEl); + } + }, + paintImageMaskXObject: function SVGGraphics_paintImageMaskXObject(imgData) { + var current = this.current; + var width = imgData.width; + var height = imgData.height; + var fillColor = current.fillColor; + current.maskId = 'mask' + maskCount++; + var mask = document.createElementNS(NS, 'svg:mask'); + mask.setAttributeNS(null, 'id', current.maskId); + var rect = document.createElementNS(NS, 'svg:rect'); + rect.setAttributeNS(null, 'x', '0'); + rect.setAttributeNS(null, 'y', '0'); + rect.setAttributeNS(null, 'width', pf(width)); + rect.setAttributeNS(null, 'height', pf(height)); + rect.setAttributeNS(null, 'fill', fillColor); + rect.setAttributeNS(null, 'mask', 'url(#' + current.maskId + ')'); + this.defs.appendChild(mask); + this._ensureTransformGroup().appendChild(rect); + this.paintInlineImageXObject(imgData, mask); + }, + paintFormXObjectBegin: function SVGGraphics_paintFormXObjectBegin(matrix, bbox) { + if (isArray(matrix) && matrix.length === 6) { + this.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]); + } + if (isArray(bbox) && bbox.length === 4) { + var width = bbox[2] - bbox[0]; + var height = bbox[3] - bbox[1]; + var cliprect = document.createElementNS(NS, 'svg:rect'); + cliprect.setAttributeNS(null, 'x', bbox[0]); + cliprect.setAttributeNS(null, 'y', bbox[1]); + cliprect.setAttributeNS(null, 'width', pf(width)); + cliprect.setAttributeNS(null, 'height', pf(height)); + this.current.element = cliprect; + this.clip('nonzero'); + this.endPath(); + } + }, + paintFormXObjectEnd: function SVGGraphics_paintFormXObjectEnd() { + }, + _initialize: function SVGGraphics_initialize(viewport) { + var svg = document.createElementNS(NS, 'svg:svg'); + svg.setAttributeNS(null, 'version', '1.1'); + svg.setAttributeNS(null, 'width', viewport.width + 'px'); + svg.setAttributeNS(null, 'height', viewport.height + 'px'); + svg.setAttributeNS(null, 'preserveAspectRatio', 'none'); + svg.setAttributeNS(null, 'viewBox', '0 0 ' + viewport.width + ' ' + viewport.height); + var definitions = document.createElementNS(NS, 'svg:defs'); + svg.appendChild(definitions); + this.defs = definitions; + var rootGroup = document.createElementNS(NS, 'svg:g'); + rootGroup.setAttributeNS(null, 'transform', pm(viewport.transform)); + svg.appendChild(rootGroup); + this.svg = rootGroup; + return svg; + }, + _ensureClipGroup: function SVGGraphics_ensureClipGroup() { + if (!this.current.clipGroup) { + var clipGroup = document.createElementNS(NS, 'svg:g'); + clipGroup.setAttributeNS(null, 'clip-path', this.current.activeClipUrl); + this.svg.appendChild(clipGroup); + this.current.clipGroup = clipGroup; + } + return this.current.clipGroup; + }, + _ensureTransformGroup: function SVGGraphics_ensureTransformGroup() { + if (!this.tgrp) { + this.tgrp = document.createElementNS(NS, 'svg:g'); + this.tgrp.setAttributeNS(null, 'transform', pm(this.transformMatrix)); + if (this.current.activeClipUrl) { + this._ensureClipGroup().appendChild(this.tgrp); + } else { + this.svg.appendChild(this.tgrp); + } + } + return this.tgrp; + } + }; + return SVGGraphics; + }(); + exports.SVGGraphics = SVGGraphics; + })); + (function (root, factory) { + factory(root.pdfjsDisplayAnnotationLayer = {}, root.pdfjsSharedUtil, root.pdfjsDisplayDOMUtils); + }(this, function (exports, sharedUtil, displayDOMUtils) { + var AnnotationBorderStyleType = sharedUtil.AnnotationBorderStyleType; + var AnnotationType = sharedUtil.AnnotationType; + var Util = sharedUtil.Util; + var addLinkAttributes = displayDOMUtils.addLinkAttributes; + var LinkTarget = displayDOMUtils.LinkTarget; + var getFilenameFromUrl = displayDOMUtils.getFilenameFromUrl; + var warn = sharedUtil.warn; + var CustomStyle = displayDOMUtils.CustomStyle; + var getDefaultSetting = displayDOMUtils.getDefaultSetting; + function AnnotationElementFactory() { + } + AnnotationElementFactory.prototype = { + create: function AnnotationElementFactory_create(parameters) { + var subtype = parameters.data.annotationType; + switch (subtype) { + case AnnotationType.LINK: + return new LinkAnnotationElement(parameters); + case AnnotationType.TEXT: + return new TextAnnotationElement(parameters); + case AnnotationType.WIDGET: + var fieldType = parameters.data.fieldType; + switch (fieldType) { + case 'Tx': + return new TextWidgetAnnotationElement(parameters); + case 'Btn': + if (parameters.data.radioButton) { + return new RadioButtonWidgetAnnotationElement(parameters); + } else if (parameters.data.checkBox) { + return new CheckboxWidgetAnnotationElement(parameters); + } + warn('Unimplemented button widget annotation: pushbutton'); + break; + case 'Ch': + return new ChoiceWidgetAnnotationElement(parameters); + } + return new WidgetAnnotationElement(parameters); + case AnnotationType.POPUP: + return new PopupAnnotationElement(parameters); + case AnnotationType.HIGHLIGHT: + return new HighlightAnnotationElement(parameters); + case AnnotationType.UNDERLINE: + return new UnderlineAnnotationElement(parameters); + case AnnotationType.SQUIGGLY: + return new SquigglyAnnotationElement(parameters); + case AnnotationType.STRIKEOUT: + return new StrikeOutAnnotationElement(parameters); + case AnnotationType.FILEATTACHMENT: + return new FileAttachmentAnnotationElement(parameters); + default: + return new AnnotationElement(parameters); + } + } + }; + var AnnotationElement = function AnnotationElementClosure() { + function AnnotationElement(parameters, isRenderable) { + this.isRenderable = isRenderable || false; + this.data = parameters.data; + this.layer = parameters.layer; + this.page = parameters.page; + this.viewport = parameters.viewport; + this.linkService = parameters.linkService; + this.downloadManager = parameters.downloadManager; + this.imageResourcesPath = parameters.imageResourcesPath; + this.renderInteractiveForms = parameters.renderInteractiveForms; + if (isRenderable) { + this.container = this._createContainer(); + } + } + AnnotationElement.prototype = { + _createContainer: function AnnotationElement_createContainer() { + var data = this.data, page = this.page, viewport = this.viewport; + var container = document.createElement('section'); + var width = data.rect[2] - data.rect[0]; + var height = data.rect[3] - data.rect[1]; + container.setAttribute('data-annotation-id', data.id); + var rect = Util.normalizeRect([ + data.rect[0], + page.view[3] - data.rect[1] + page.view[1], + data.rect[2], + page.view[3] - data.rect[3] + page.view[1] + ]); + CustomStyle.setProp('transform', container, 'matrix(' + viewport.transform.join(',') + ')'); + CustomStyle.setProp('transformOrigin', container, -rect[0] + 'px ' + -rect[1] + 'px'); + if (data.borderStyle.width > 0) { + container.style.borderWidth = data.borderStyle.width + 'px'; + if (data.borderStyle.style !== AnnotationBorderStyleType.UNDERLINE) { + width = width - 2 * data.borderStyle.width; + height = height - 2 * data.borderStyle.width; + } + var horizontalRadius = data.borderStyle.horizontalCornerRadius; + var verticalRadius = data.borderStyle.verticalCornerRadius; + if (horizontalRadius > 0 || verticalRadius > 0) { + var radius = horizontalRadius + 'px / ' + verticalRadius + 'px'; + CustomStyle.setProp('borderRadius', container, radius); + } + switch (data.borderStyle.style) { + case AnnotationBorderStyleType.SOLID: + container.style.borderStyle = 'solid'; + break; + case AnnotationBorderStyleType.DASHED: + container.style.borderStyle = 'dashed'; + break; + case AnnotationBorderStyleType.BEVELED: + warn('Unimplemented border style: beveled'); + break; + case AnnotationBorderStyleType.INSET: + warn('Unimplemented border style: inset'); + break; + case AnnotationBorderStyleType.UNDERLINE: + container.style.borderBottomStyle = 'solid'; + break; + default: + break; + } + if (data.color) { + container.style.borderColor = Util.makeCssRgb(data.color[0] | 0, data.color[1] | 0, data.color[2] | 0); + } else { + container.style.borderWidth = 0; + } + } + container.style.left = rect[0] + 'px'; + container.style.top = rect[1] + 'px'; + container.style.width = width + 'px'; + container.style.height = height + 'px'; + return container; + }, + _createPopup: function AnnotationElement_createPopup(container, trigger, data) { + if (!trigger) { + trigger = document.createElement('div'); + trigger.style.height = container.style.height; + trigger.style.width = container.style.width; + container.appendChild(trigger); + } + var popupElement = new PopupElement({ + container: container, + trigger: trigger, + color: data.color, + title: data.title, + contents: data.contents, + hideWrapper: true + }); + var popup = popupElement.render(); + popup.style.left = container.style.width; + container.appendChild(popup); + }, + render: function AnnotationElement_render() { + throw new Error('Abstract method AnnotationElement.render called'); + } + }; + return AnnotationElement; + }(); + var LinkAnnotationElement = function LinkAnnotationElementClosure() { + function LinkAnnotationElement(parameters) { + AnnotationElement.call(this, parameters, true); + } + Util.inherit(LinkAnnotationElement, AnnotationElement, { + render: function LinkAnnotationElement_render() { + this.container.className = 'linkAnnotation'; + var link = document.createElement('a'); + addLinkAttributes(link, { + url: this.data.url, + target: this.data.newWindow ? LinkTarget.BLANK : undefined + }); + if (!this.data.url) { + if (this.data.action) { + this._bindNamedAction(link, this.data.action); + } else { + this._bindLink(link, this.data.dest); + } + } + this.container.appendChild(link); + return this.container; + }, + _bindLink: function LinkAnnotationElement_bindLink(link, destination) { + var self = this; + link.href = this.linkService.getDestinationHash(destination); + link.onclick = function () { + if (destination) { + self.linkService.navigateTo(destination); + } + return false; + }; + if (destination) { + link.className = 'internalLink'; + } + }, + _bindNamedAction: function LinkAnnotationElement_bindNamedAction(link, action) { + var self = this; + link.href = this.linkService.getAnchorUrl(''); + link.onclick = function () { + self.linkService.executeNamedAction(action); + return false; + }; + link.className = 'internalLink'; + } + }); + return LinkAnnotationElement; + }(); + var TextAnnotationElement = function TextAnnotationElementClosure() { + function TextAnnotationElement(parameters) { + var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + AnnotationElement.call(this, parameters, isRenderable); + } + Util.inherit(TextAnnotationElement, AnnotationElement, { + render: function TextAnnotationElement_render() { + this.container.className = 'textAnnotation'; + var image = document.createElement('img'); + image.style.height = this.container.style.height; + image.style.width = this.container.style.width; + image.src = this.imageResourcesPath + 'annotation-' + this.data.name.toLowerCase() + '.svg'; + image.alt = '[{{type}} Annotation]'; + image.dataset.l10nId = 'text_annotation_type'; + image.dataset.l10nArgs = JSON.stringify({ type: this.data.name }); + if (!this.data.hasPopup) { + this._createPopup(this.container, image, this.data); + } + this.container.appendChild(image); + return this.container; + } + }); + return TextAnnotationElement; + }(); + var WidgetAnnotationElement = function WidgetAnnotationElementClosure() { + function WidgetAnnotationElement(parameters, isRenderable) { + AnnotationElement.call(this, parameters, isRenderable); + } + Util.inherit(WidgetAnnotationElement, AnnotationElement, { + render: function WidgetAnnotationElement_render() { + return this.container; + } + }); + return WidgetAnnotationElement; + }(); + var TextWidgetAnnotationElement = function TextWidgetAnnotationElementClosure() { + var TEXT_ALIGNMENT = [ + 'left', + 'center', + 'right' + ]; + function TextWidgetAnnotationElement(parameters) { + var isRenderable = parameters.renderInteractiveForms || !parameters.data.hasAppearance && !!parameters.data.fieldValue; + WidgetAnnotationElement.call(this, parameters, isRenderable); + } + Util.inherit(TextWidgetAnnotationElement, WidgetAnnotationElement, { + render: function TextWidgetAnnotationElement_render() { + this.container.className = 'textWidgetAnnotation'; + var element = null; + if (this.renderInteractiveForms) { + if (this.data.multiLine) { + element = document.createElement('textarea'); + element.textContent = this.data.fieldValue; + } else { + element = document.createElement('input'); + element.type = 'text'; + element.setAttribute('value', this.data.fieldValue); + } + element.disabled = this.data.readOnly; + if (this.data.maxLen !== null) { + element.maxLength = this.data.maxLen; + } + if (this.data.comb) { + var fieldWidth = this.data.rect[2] - this.data.rect[0]; + var combWidth = fieldWidth / this.data.maxLen; + element.classList.add('comb'); + element.style.letterSpacing = 'calc(' + combWidth + 'px - 1ch)'; + } + } else { + element = document.createElement('div'); + element.textContent = this.data.fieldValue; + element.style.verticalAlign = 'middle'; + element.style.display = 'table-cell'; + var font = null; + if (this.data.fontRefName) { + font = this.page.commonObjs.getData(this.data.fontRefName); + } + this._setTextStyle(element, font); + } + if (this.data.textAlignment !== null) { + element.style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment]; + } + this.container.appendChild(element); + return this.container; + }, + _setTextStyle: function TextWidgetAnnotationElement_setTextStyle(element, font) { + var style = element.style; + style.fontSize = this.data.fontSize + 'px'; + style.direction = this.data.fontDirection < 0 ? 'rtl' : 'ltr'; + if (!font) { + return; + } + style.fontWeight = font.black ? font.bold ? '900' : 'bold' : font.bold ? 'bold' : 'normal'; + style.fontStyle = font.italic ? 'italic' : 'normal'; + var fontFamily = font.loadedName ? '"' + font.loadedName + '", ' : ''; + var fallbackName = font.fallbackName || 'Helvetica, sans-serif'; + style.fontFamily = fontFamily + fallbackName; + } + }); + return TextWidgetAnnotationElement; + }(); + var CheckboxWidgetAnnotationElement = function CheckboxWidgetAnnotationElementClosure() { + function CheckboxWidgetAnnotationElement(parameters) { + WidgetAnnotationElement.call(this, parameters, parameters.renderInteractiveForms); + } + Util.inherit(CheckboxWidgetAnnotationElement, WidgetAnnotationElement, { + render: function CheckboxWidgetAnnotationElement_render() { + this.container.className = 'buttonWidgetAnnotation checkBox'; + var element = document.createElement('input'); + element.disabled = this.data.readOnly; + element.type = 'checkbox'; + if (this.data.fieldValue && this.data.fieldValue !== 'Off') { + element.setAttribute('checked', true); + } + this.container.appendChild(element); + return this.container; + } + }); + return CheckboxWidgetAnnotationElement; + }(); + var RadioButtonWidgetAnnotationElement = function RadioButtonWidgetAnnotationElementClosure() { + function RadioButtonWidgetAnnotationElement(parameters) { + WidgetAnnotationElement.call(this, parameters, parameters.renderInteractiveForms); + } + Util.inherit(RadioButtonWidgetAnnotationElement, WidgetAnnotationElement, { + render: function RadioButtonWidgetAnnotationElement_render() { + this.container.className = 'buttonWidgetAnnotation radioButton'; + var element = document.createElement('input'); + element.disabled = this.data.readOnly; + element.type = 'radio'; + element.name = this.data.fieldName; + if (this.data.fieldValue === this.data.buttonValue) { + element.setAttribute('checked', true); + } + this.container.appendChild(element); + return this.container; + } + }); + return RadioButtonWidgetAnnotationElement; + }(); + var ChoiceWidgetAnnotationElement = function ChoiceWidgetAnnotationElementClosure() { + function ChoiceWidgetAnnotationElement(parameters) { + WidgetAnnotationElement.call(this, parameters, parameters.renderInteractiveForms); + } + Util.inherit(ChoiceWidgetAnnotationElement, WidgetAnnotationElement, { + render: function ChoiceWidgetAnnotationElement_render() { + this.container.className = 'choiceWidgetAnnotation'; + var selectElement = document.createElement('select'); + selectElement.disabled = this.data.readOnly; + if (!this.data.combo) { + selectElement.size = this.data.options.length; + if (this.data.multiSelect) { + selectElement.multiple = true; + } + } + for (var i = 0, ii = this.data.options.length; i < ii; i++) { + var option = this.data.options[i]; + var optionElement = document.createElement('option'); + optionElement.textContent = option.displayValue; + optionElement.value = option.exportValue; + if (this.data.fieldValue.indexOf(option.displayValue) >= 0) { + optionElement.setAttribute('selected', true); + } + selectElement.appendChild(optionElement); + } + this.container.appendChild(selectElement); + return this.container; + } + }); + return ChoiceWidgetAnnotationElement; + }(); + var PopupAnnotationElement = function PopupAnnotationElementClosure() { + function PopupAnnotationElement(parameters) { + var isRenderable = !!(parameters.data.title || parameters.data.contents); + AnnotationElement.call(this, parameters, isRenderable); + } + Util.inherit(PopupAnnotationElement, AnnotationElement, { + render: function PopupAnnotationElement_render() { + this.container.className = 'popupAnnotation'; + var selector = '[data-annotation-id="' + this.data.parentId + '"]'; + var parentElement = this.layer.querySelector(selector); + if (!parentElement) { + return this.container; + } + var popup = new PopupElement({ + container: this.container, + trigger: parentElement, + color: this.data.color, + title: this.data.title, + contents: this.data.contents + }); + var parentLeft = parseFloat(parentElement.style.left); + var parentWidth = parseFloat(parentElement.style.width); + CustomStyle.setProp('transformOrigin', this.container, -(parentLeft + parentWidth) + 'px -' + parentElement.style.top); + this.container.style.left = parentLeft + parentWidth + 'px'; + this.container.appendChild(popup.render()); + return this.container; + } + }); + return PopupAnnotationElement; + }(); + var PopupElement = function PopupElementClosure() { + var BACKGROUND_ENLIGHT = 0.7; + function PopupElement(parameters) { + this.container = parameters.container; + this.trigger = parameters.trigger; + this.color = parameters.color; + this.title = parameters.title; + this.contents = parameters.contents; + this.hideWrapper = parameters.hideWrapper || false; + this.pinned = false; + } + PopupElement.prototype = { + render: function PopupElement_render() { + var wrapper = document.createElement('div'); + wrapper.className = 'popupWrapper'; + this.hideElement = this.hideWrapper ? wrapper : this.container; + this.hideElement.setAttribute('hidden', true); + var popup = document.createElement('div'); + popup.className = 'popup'; + var color = this.color; + if (color) { + var r = BACKGROUND_ENLIGHT * (255 - color[0]) + color[0]; + var g = BACKGROUND_ENLIGHT * (255 - color[1]) + color[1]; + var b = BACKGROUND_ENLIGHT * (255 - color[2]) + color[2]; + popup.style.backgroundColor = Util.makeCssRgb(r | 0, g | 0, b | 0); + } + var contents = this._formatContents(this.contents); + var title = document.createElement('h1'); + title.textContent = this.title; + this.trigger.addEventListener('click', this._toggle.bind(this)); + this.trigger.addEventListener('mouseover', this._show.bind(this, false)); + this.trigger.addEventListener('mouseout', this._hide.bind(this, false)); + popup.addEventListener('click', this._hide.bind(this, true)); + popup.appendChild(title); + popup.appendChild(contents); + wrapper.appendChild(popup); + return wrapper; + }, + _formatContents: function PopupElement_formatContents(contents) { + var p = document.createElement('p'); + var lines = contents.split(/(?:\r\n?|\n)/); + for (var i = 0, ii = lines.length; i < ii; ++i) { + var line = lines[i]; + p.appendChild(document.createTextNode(line)); + if (i < ii - 1) { + p.appendChild(document.createElement('br')); + } + } + return p; + }, + _toggle: function PopupElement_toggle() { + if (this.pinned) { + this._hide(true); + } else { + this._show(true); + } + }, + _show: function PopupElement_show(pin) { + if (pin) { + this.pinned = true; + } + if (this.hideElement.hasAttribute('hidden')) { + this.hideElement.removeAttribute('hidden'); + this.container.style.zIndex += 1; + } + }, + _hide: function PopupElement_hide(unpin) { + if (unpin) { + this.pinned = false; + } + if (!this.hideElement.hasAttribute('hidden') && !this.pinned) { + this.hideElement.setAttribute('hidden', true); + this.container.style.zIndex -= 1; + } + } + }; + return PopupElement; + }(); + var HighlightAnnotationElement = function HighlightAnnotationElementClosure() { + function HighlightAnnotationElement(parameters) { + var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + AnnotationElement.call(this, parameters, isRenderable); + } + Util.inherit(HighlightAnnotationElement, AnnotationElement, { + render: function HighlightAnnotationElement_render() { + this.container.className = 'highlightAnnotation'; + if (!this.data.hasPopup) { + this._createPopup(this.container, null, this.data); + } + return this.container; + } + }); + return HighlightAnnotationElement; + }(); + var UnderlineAnnotationElement = function UnderlineAnnotationElementClosure() { + function UnderlineAnnotationElement(parameters) { + var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + AnnotationElement.call(this, parameters, isRenderable); + } + Util.inherit(UnderlineAnnotationElement, AnnotationElement, { + render: function UnderlineAnnotationElement_render() { + this.container.className = 'underlineAnnotation'; + if (!this.data.hasPopup) { + this._createPopup(this.container, null, this.data); + } + return this.container; + } + }); + return UnderlineAnnotationElement; + }(); + var SquigglyAnnotationElement = function SquigglyAnnotationElementClosure() { + function SquigglyAnnotationElement(parameters) { + var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + AnnotationElement.call(this, parameters, isRenderable); + } + Util.inherit(SquigglyAnnotationElement, AnnotationElement, { + render: function SquigglyAnnotationElement_render() { + this.container.className = 'squigglyAnnotation'; + if (!this.data.hasPopup) { + this._createPopup(this.container, null, this.data); + } + return this.container; + } + }); + return SquigglyAnnotationElement; + }(); + var StrikeOutAnnotationElement = function StrikeOutAnnotationElementClosure() { + function StrikeOutAnnotationElement(parameters) { + var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + AnnotationElement.call(this, parameters, isRenderable); + } + Util.inherit(StrikeOutAnnotationElement, AnnotationElement, { + render: function StrikeOutAnnotationElement_render() { + this.container.className = 'strikeoutAnnotation'; + if (!this.data.hasPopup) { + this._createPopup(this.container, null, this.data); + } + return this.container; + } + }); + return StrikeOutAnnotationElement; + }(); + var FileAttachmentAnnotationElement = function FileAttachmentAnnotationElementClosure() { + function FileAttachmentAnnotationElement(parameters) { + AnnotationElement.call(this, parameters, true); + this.filename = getFilenameFromUrl(parameters.data.file.filename); + this.content = parameters.data.file.content; + } + Util.inherit(FileAttachmentAnnotationElement, AnnotationElement, { + render: function FileAttachmentAnnotationElement_render() { + this.container.className = 'fileAttachmentAnnotation'; + var trigger = document.createElement('div'); + trigger.style.height = this.container.style.height; + trigger.style.width = this.container.style.width; + trigger.addEventListener('dblclick', this._download.bind(this)); + if (!this.data.hasPopup && (this.data.title || this.data.contents)) { + this._createPopup(this.container, trigger, this.data); + } + this.container.appendChild(trigger); + return this.container; + }, + _download: function FileAttachmentAnnotationElement_download() { + if (!this.downloadManager) { + warn('Download cannot be started due to unavailable download manager'); + return; + } + this.downloadManager.downloadData(this.content, this.filename, ''); + } + }); + return FileAttachmentAnnotationElement; + }(); + var AnnotationLayer = function AnnotationLayerClosure() { + return { + render: function AnnotationLayer_render(parameters) { + var annotationElementFactory = new AnnotationElementFactory(); + for (var i = 0, ii = parameters.annotations.length; i < ii; i++) { + var data = parameters.annotations[i]; + if (!data) { + continue; + } + var properties = { + data: data, + layer: parameters.div, + page: parameters.page, + viewport: parameters.viewport, + linkService: parameters.linkService, + downloadManager: parameters.downloadManager, + imageResourcesPath: parameters.imageResourcesPath || getDefaultSetting('imageResourcesPath'), + renderInteractiveForms: parameters.renderInteractiveForms || false + }; + var element = annotationElementFactory.create(properties); + if (element.isRenderable) { + parameters.div.appendChild(element.render()); + } + } + }, + update: function AnnotationLayer_update(parameters) { + for (var i = 0, ii = parameters.annotations.length; i < ii; i++) { + var data = parameters.annotations[i]; + var element = parameters.div.querySelector('[data-annotation-id="' + data.id + '"]'); + if (element) { + CustomStyle.setProp('transform', element, 'matrix(' + parameters.viewport.transform.join(',') + ')'); + } + } + parameters.div.removeAttribute('hidden'); + } + }; + }(); + exports.AnnotationLayer = AnnotationLayer; + })); + (function (root, factory) { + factory(root.pdfjsDisplayTextLayer = {}, root.pdfjsSharedUtil, root.pdfjsDisplayDOMUtils); + }(this, function (exports, sharedUtil, displayDOMUtils) { + var Util = sharedUtil.Util; + var createPromiseCapability = sharedUtil.createPromiseCapability; + var CustomStyle = displayDOMUtils.CustomStyle; + var getDefaultSetting = displayDOMUtils.getDefaultSetting; + var renderTextLayer = function renderTextLayerClosure() { + var MAX_TEXT_DIVS_TO_RENDER = 100000; + var NonWhitespaceRegexp = /\S/; + function isAllWhitespace(str) { + return !NonWhitespaceRegexp.test(str); + } + var styleBuf = [ + 'left: ', + 0, + 'px; top: ', + 0, + 'px; font-size: ', + 0, + 'px; font-family: ', + '', + ';' + ]; + function appendText(task, geom, styles) { + var textDiv = document.createElement('div'); + var textDivProperties = { + style: null, + angle: 0, + canvasWidth: 0, + isWhitespace: false, + originalTransform: null, + paddingBottom: 0, + paddingLeft: 0, + paddingRight: 0, + paddingTop: 0, + scale: 1 + }; + task._textDivs.push(textDiv); + if (isAllWhitespace(geom.str)) { + textDivProperties.isWhitespace = true; + task._textDivProperties.set(textDiv, textDivProperties); + return; + } + var tx = Util.transform(task._viewport.transform, geom.transform); + var angle = Math.atan2(tx[1], tx[0]); + var style = styles[geom.fontName]; + if (style.vertical) { + angle += Math.PI / 2; + } + var fontHeight = Math.sqrt(tx[2] * tx[2] + tx[3] * tx[3]); + var fontAscent = fontHeight; + if (style.ascent) { + fontAscent = style.ascent * fontAscent; + } else if (style.descent) { + fontAscent = (1 + style.descent) * fontAscent; + } + var left; + var top; + if (angle === 0) { + left = tx[4]; + top = tx[5] - fontAscent; + } else { + left = tx[4] + fontAscent * Math.sin(angle); + top = tx[5] - fontAscent * Math.cos(angle); + } + styleBuf[1] = left; + styleBuf[3] = top; + styleBuf[5] = fontHeight; + styleBuf[7] = style.fontFamily; + textDivProperties.style = styleBuf.join(''); + textDiv.setAttribute('style', textDivProperties.style); + textDiv.textContent = geom.str; + if (getDefaultSetting('pdfBug')) { + textDiv.dataset.fontName = geom.fontName; + } + if (angle !== 0) { + textDivProperties.angle = angle * (180 / Math.PI); + } + if (geom.str.length > 1) { + if (style.vertical) { + textDivProperties.canvasWidth = geom.height * task._viewport.scale; + } else { + textDivProperties.canvasWidth = geom.width * task._viewport.scale; + } + } + task._textDivProperties.set(textDiv, textDivProperties); + if (task._enhanceTextSelection) { + var angleCos = 1, angleSin = 0; + if (angle !== 0) { + angleCos = Math.cos(angle); + angleSin = Math.sin(angle); + } + var divWidth = (style.vertical ? geom.height : geom.width) * task._viewport.scale; + var divHeight = fontHeight; + var m, b; + if (angle !== 0) { + m = [ + angleCos, + angleSin, + -angleSin, + angleCos, + left, + top + ]; + b = Util.getAxialAlignedBoundingBox([ + 0, + 0, + divWidth, + divHeight + ], m); + } else { + b = [ + left, + top, + left + divWidth, + top + divHeight + ]; + } + task._bounds.push({ + left: b[0], + top: b[1], + right: b[2], + bottom: b[3], + div: textDiv, + size: [ + divWidth, + divHeight + ], + m: m + }); + } + } + function render(task) { + if (task._canceled) { + return; + } + var textLayerFrag = task._container; + var textDivs = task._textDivs; + var capability = task._capability; + var textDivsLength = textDivs.length; + if (textDivsLength > MAX_TEXT_DIVS_TO_RENDER) { + task._renderingDone = true; + capability.resolve(); + return; + } + var canvas = document.createElement('canvas'); + canvas.mozOpaque = true; + var ctx = canvas.getContext('2d', { alpha: false }); + var lastFontSize; + var lastFontFamily; + for (var i = 0; i < textDivsLength; i++) { + var textDiv = textDivs[i]; + var textDivProperties = task._textDivProperties.get(textDiv); + if (textDivProperties.isWhitespace) { + continue; + } + var fontSize = textDiv.style.fontSize; + var fontFamily = textDiv.style.fontFamily; + if (fontSize !== lastFontSize || fontFamily !== lastFontFamily) { + ctx.font = fontSize + ' ' + fontFamily; + lastFontSize = fontSize; + lastFontFamily = fontFamily; + } + var width = ctx.measureText(textDiv.textContent).width; + textLayerFrag.appendChild(textDiv); + var transform = ''; + if (textDivProperties.canvasWidth !== 0 && width > 0) { + textDivProperties.scale = textDivProperties.canvasWidth / width; + transform = 'scaleX(' + textDivProperties.scale + ')'; + } + if (textDivProperties.angle !== 0) { + transform = 'rotate(' + textDivProperties.angle + 'deg) ' + transform; + } + if (transform !== '') { + textDivProperties.originalTransform = transform; + CustomStyle.setProp('transform', textDiv, transform); + } + task._textDivProperties.set(textDiv, textDivProperties); + } + task._renderingDone = true; + capability.resolve(); + } + function expand(task) { + var bounds = task._bounds; + var viewport = task._viewport; + var expanded = expandBounds(viewport.width, viewport.height, bounds); + for (var i = 0; i < expanded.length; i++) { + var div = bounds[i].div; + var divProperties = task._textDivProperties.get(div); + if (divProperties.angle === 0) { + divProperties.paddingLeft = bounds[i].left - expanded[i].left; + divProperties.paddingTop = bounds[i].top - expanded[i].top; + divProperties.paddingRight = expanded[i].right - bounds[i].right; + divProperties.paddingBottom = expanded[i].bottom - bounds[i].bottom; + task._textDivProperties.set(div, divProperties); + continue; + } + var e = expanded[i], b = bounds[i]; + var m = b.m, c = m[0], s = m[1]; + var points = [ + [ + 0, + 0 + ], + [ + 0, + b.size[1] + ], + [ + b.size[0], + 0 + ], + b.size + ]; + var ts = new Float64Array(64); + points.forEach(function (p, i) { + var t = Util.applyTransform(p, m); + ts[i + 0] = c && (e.left - t[0]) / c; + ts[i + 4] = s && (e.top - t[1]) / s; + ts[i + 8] = c && (e.right - t[0]) / c; + ts[i + 12] = s && (e.bottom - t[1]) / s; + ts[i + 16] = s && (e.left - t[0]) / -s; + ts[i + 20] = c && (e.top - t[1]) / c; + ts[i + 24] = s && (e.right - t[0]) / -s; + ts[i + 28] = c && (e.bottom - t[1]) / c; + ts[i + 32] = c && (e.left - t[0]) / -c; + ts[i + 36] = s && (e.top - t[1]) / -s; + ts[i + 40] = c && (e.right - t[0]) / -c; + ts[i + 44] = s && (e.bottom - t[1]) / -s; + ts[i + 48] = s && (e.left - t[0]) / s; + ts[i + 52] = c && (e.top - t[1]) / -c; + ts[i + 56] = s && (e.right - t[0]) / s; + ts[i + 60] = c && (e.bottom - t[1]) / -c; + }); + var findPositiveMin = function (ts, offset, count) { + var result = 0; + for (var i = 0; i < count; i++) { + var t = ts[offset++]; + if (t > 0) { + result = result ? Math.min(t, result) : t; + } + } + return result; + }; + var boxScale = 1 + Math.min(Math.abs(c), Math.abs(s)); + divProperties.paddingLeft = findPositiveMin(ts, 32, 16) / boxScale; + divProperties.paddingTop = findPositiveMin(ts, 48, 16) / boxScale; + divProperties.paddingRight = findPositiveMin(ts, 0, 16) / boxScale; + divProperties.paddingBottom = findPositiveMin(ts, 16, 16) / boxScale; + task._textDivProperties.set(div, divProperties); + } + } + function expandBounds(width, height, boxes) { + var bounds = boxes.map(function (box, i) { + return { + x1: box.left, + y1: box.top, + x2: box.right, + y2: box.bottom, + index: i, + x1New: undefined, + x2New: undefined + }; + }); + expandBoundsLTR(width, bounds); + var expanded = new Array(boxes.length); + bounds.forEach(function (b) { + var i = b.index; + expanded[i] = { + left: b.x1New, + top: 0, + right: b.x2New, + bottom: 0 + }; + }); + boxes.map(function (box, i) { + var e = expanded[i], b = bounds[i]; + b.x1 = box.top; + b.y1 = width - e.right; + b.x2 = box.bottom; + b.y2 = width - e.left; + b.index = i; + b.x1New = undefined; + b.x2New = undefined; + }); + expandBoundsLTR(height, bounds); + bounds.forEach(function (b) { + var i = b.index; + expanded[i].top = b.x1New; + expanded[i].bottom = b.x2New; + }); + return expanded; + } + function expandBoundsLTR(width, bounds) { + bounds.sort(function (a, b) { + return a.x1 - b.x1 || a.index - b.index; + }); + var fakeBoundary = { + x1: -Infinity, + y1: -Infinity, + x2: 0, + y2: Infinity, + index: -1, + x1New: 0, + x2New: 0 + }; + var horizon = [{ + start: -Infinity, + end: Infinity, + boundary: fakeBoundary + }]; + bounds.forEach(function (boundary) { + var i = 0; + while (i < horizon.length && horizon[i].end <= boundary.y1) { + i++; + } + var j = horizon.length - 1; + while (j >= 0 && horizon[j].start >= boundary.y2) { + j--; + } + var horizonPart, affectedBoundary; + var q, k, maxXNew = -Infinity; + for (q = i; q <= j; q++) { + horizonPart = horizon[q]; + affectedBoundary = horizonPart.boundary; + var xNew; + if (affectedBoundary.x2 > boundary.x1) { + xNew = affectedBoundary.index > boundary.index ? affectedBoundary.x1New : boundary.x1; + } else if (affectedBoundary.x2New === undefined) { + xNew = (affectedBoundary.x2 + boundary.x1) / 2; + } else { + xNew = affectedBoundary.x2New; + } + if (xNew > maxXNew) { + maxXNew = xNew; + } + } + boundary.x1New = maxXNew; + for (q = i; q <= j; q++) { + horizonPart = horizon[q]; + affectedBoundary = horizonPart.boundary; + if (affectedBoundary.x2New === undefined) { + if (affectedBoundary.x2 > boundary.x1) { + if (affectedBoundary.index > boundary.index) { + affectedBoundary.x2New = affectedBoundary.x2; + } + } else { + affectedBoundary.x2New = maxXNew; + } + } else if (affectedBoundary.x2New > maxXNew) { + affectedBoundary.x2New = Math.max(maxXNew, affectedBoundary.x2); + } + } + var changedHorizon = [], lastBoundary = null; + for (q = i; q <= j; q++) { + horizonPart = horizon[q]; + affectedBoundary = horizonPart.boundary; + var useBoundary = affectedBoundary.x2 > boundary.x2 ? affectedBoundary : boundary; + if (lastBoundary === useBoundary) { + changedHorizon[changedHorizon.length - 1].end = horizonPart.end; + } else { + changedHorizon.push({ + start: horizonPart.start, + end: horizonPart.end, + boundary: useBoundary + }); + lastBoundary = useBoundary; + } + } + if (horizon[i].start < boundary.y1) { + changedHorizon[0].start = boundary.y1; + changedHorizon.unshift({ + start: horizon[i].start, + end: boundary.y1, + boundary: horizon[i].boundary + }); + } + if (boundary.y2 < horizon[j].end) { + changedHorizon[changedHorizon.length - 1].end = boundary.y2; + changedHorizon.push({ + start: boundary.y2, + end: horizon[j].end, + boundary: horizon[j].boundary + }); + } + for (q = i; q <= j; q++) { + horizonPart = horizon[q]; + affectedBoundary = horizonPart.boundary; + if (affectedBoundary.x2New !== undefined) { + continue; + } + var used = false; + for (k = i - 1; !used && k >= 0 && horizon[k].start >= affectedBoundary.y1; k--) { + used = horizon[k].boundary === affectedBoundary; + } + for (k = j + 1; !used && k < horizon.length && horizon[k].end <= affectedBoundary.y2; k++) { + used = horizon[k].boundary === affectedBoundary; + } + for (k = 0; !used && k < changedHorizon.length; k++) { + used = changedHorizon[k].boundary === affectedBoundary; + } + if (!used) { + affectedBoundary.x2New = maxXNew; + } + } + Array.prototype.splice.apply(horizon, [ + i, + j - i + 1 + ].concat(changedHorizon)); + }); + horizon.forEach(function (horizonPart) { + var affectedBoundary = horizonPart.boundary; + if (affectedBoundary.x2New === undefined) { + affectedBoundary.x2New = Math.max(width, affectedBoundary.x2); + } + }); + } + function TextLayerRenderTask(textContent, container, viewport, textDivs, enhanceTextSelection) { + this._textContent = textContent; + this._container = container; + this._viewport = viewport; + this._textDivs = textDivs || []; + this._textDivProperties = new WeakMap(); + this._renderingDone = false; + this._canceled = false; + this._capability = createPromiseCapability(); + this._renderTimer = null; + this._bounds = []; + this._enhanceTextSelection = !!enhanceTextSelection; + } + TextLayerRenderTask.prototype = { + get promise() { + return this._capability.promise; + }, + cancel: function TextLayer_cancel() { + this._canceled = true; + if (this._renderTimer !== null) { + clearTimeout(this._renderTimer); + this._renderTimer = null; + } + this._capability.reject('canceled'); + }, + _render: function TextLayer_render(timeout) { + var textItems = this._textContent.items; + var textStyles = this._textContent.styles; + for (var i = 0, len = textItems.length; i < len; i++) { + appendText(this, textItems[i], textStyles); + } + if (!timeout) { + render(this); + } else { + var self = this; + this._renderTimer = setTimeout(function () { + render(self); + self._renderTimer = null; + }, timeout); + } + }, + expandTextDivs: function TextLayer_expandTextDivs(expandDivs) { + if (!this._enhanceTextSelection || !this._renderingDone) { + return; + } + if (this._bounds !== null) { + expand(this); + this._bounds = null; + } + for (var i = 0, ii = this._textDivs.length; i < ii; i++) { + var div = this._textDivs[i]; + var divProperties = this._textDivProperties.get(div); + if (divProperties.isWhitespace) { + continue; + } + if (expandDivs) { + var transform = '', padding = ''; + if (divProperties.scale !== 1) { + transform = 'scaleX(' + divProperties.scale + ')'; + } + if (divProperties.angle !== 0) { + transform = 'rotate(' + divProperties.angle + 'deg) ' + transform; + } + if (divProperties.paddingLeft !== 0) { + padding += ' padding-left: ' + divProperties.paddingLeft / divProperties.scale + 'px;'; + transform += ' translateX(' + -divProperties.paddingLeft / divProperties.scale + 'px)'; + } + if (divProperties.paddingTop !== 0) { + padding += ' padding-top: ' + divProperties.paddingTop + 'px;'; + transform += ' translateY(' + -divProperties.paddingTop + 'px)'; + } + if (divProperties.paddingRight !== 0) { + padding += ' padding-right: ' + divProperties.paddingRight / divProperties.scale + 'px;'; + } + if (divProperties.paddingBottom !== 0) { + padding += ' padding-bottom: ' + divProperties.paddingBottom + 'px;'; + } + if (padding !== '') { + div.setAttribute('style', divProperties.style + padding); + } + if (transform !== '') { + CustomStyle.setProp('transform', div, transform); + } + } else { + div.style.padding = 0; + CustomStyle.setProp('transform', div, divProperties.originalTransform || ''); + } + } + } + }; + function renderTextLayer(renderParameters) { + var task = new TextLayerRenderTask(renderParameters.textContent, renderParameters.container, renderParameters.viewport, renderParameters.textDivs, renderParameters.enhanceTextSelection); + task._render(renderParameters.timeout); + return task; + } + return renderTextLayer; + }(); + exports.renderTextLayer = renderTextLayer; + })); + (function (root, factory) { + factory(root.pdfjsDisplayWebGL = {}, root.pdfjsSharedUtil, root.pdfjsDisplayDOMUtils); + }(this, function (exports, sharedUtil, displayDOMUtils) { + var shadow = sharedUtil.shadow; + var getDefaultSetting = displayDOMUtils.getDefaultSetting; + var WebGLUtils = function WebGLUtilsClosure() { + function loadShader(gl, code, shaderType) { + var shader = gl.createShader(shaderType); + gl.shaderSource(shader, code); + gl.compileShader(shader); + var compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS); + if (!compiled) { + var errorMsg = gl.getShaderInfoLog(shader); + throw new Error('Error during shader compilation: ' + errorMsg); + } + return shader; + } + function createVertexShader(gl, code) { + return loadShader(gl, code, gl.VERTEX_SHADER); + } + function createFragmentShader(gl, code) { + return loadShader(gl, code, gl.FRAGMENT_SHADER); + } + function createProgram(gl, shaders) { + var program = gl.createProgram(); + for (var i = 0, ii = shaders.length; i < ii; ++i) { + gl.attachShader(program, shaders[i]); + } + gl.linkProgram(program); + var linked = gl.getProgramParameter(program, gl.LINK_STATUS); + if (!linked) { + var errorMsg = gl.getProgramInfoLog(program); + throw new Error('Error during program linking: ' + errorMsg); + } + return program; + } + function createTexture(gl, image, textureId) { + gl.activeTexture(textureId); + var texture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, texture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image); + return texture; + } + var currentGL, currentCanvas; + function generateGL() { + if (currentGL) { + return; + } + currentCanvas = document.createElement('canvas'); + currentGL = currentCanvas.getContext('webgl', { premultipliedalpha: false }); + } + var smaskVertexShaderCode = '\ + attribute vec2 a_position; \ + attribute vec2 a_texCoord; \ + \ + uniform vec2 u_resolution; \ + \ + varying vec2 v_texCoord; \ + \ + void main() { \ + vec2 clipSpace = (a_position / u_resolution) * 2.0 - 1.0; \ + gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1); \ + \ + v_texCoord = a_texCoord; \ + } '; + var smaskFragmentShaderCode = '\ + precision mediump float; \ + \ + uniform vec4 u_backdrop; \ + uniform int u_subtype; \ + uniform sampler2D u_image; \ + uniform sampler2D u_mask; \ + \ + varying vec2 v_texCoord; \ + \ + void main() { \ + vec4 imageColor = texture2D(u_image, v_texCoord); \ + vec4 maskColor = texture2D(u_mask, v_texCoord); \ + if (u_backdrop.a > 0.0) { \ + maskColor.rgb = maskColor.rgb * maskColor.a + \ + u_backdrop.rgb * (1.0 - maskColor.a); \ + } \ + float lum; \ + if (u_subtype == 0) { \ + lum = maskColor.a; \ + } else { \ + lum = maskColor.r * 0.3 + maskColor.g * 0.59 + \ + maskColor.b * 0.11; \ + } \ + imageColor.a *= lum; \ + imageColor.rgb *= imageColor.a; \ + gl_FragColor = imageColor; \ + } '; + var smaskCache = null; + function initSmaskGL() { + var canvas, gl; + generateGL(); + canvas = currentCanvas; + currentCanvas = null; + gl = currentGL; + currentGL = null; + var vertexShader = createVertexShader(gl, smaskVertexShaderCode); + var fragmentShader = createFragmentShader(gl, smaskFragmentShaderCode); + var program = createProgram(gl, [ + vertexShader, + fragmentShader + ]); + gl.useProgram(program); + var cache = {}; + cache.gl = gl; + cache.canvas = canvas; + cache.resolutionLocation = gl.getUniformLocation(program, 'u_resolution'); + cache.positionLocation = gl.getAttribLocation(program, 'a_position'); + cache.backdropLocation = gl.getUniformLocation(program, 'u_backdrop'); + cache.subtypeLocation = gl.getUniformLocation(program, 'u_subtype'); + var texCoordLocation = gl.getAttribLocation(program, 'a_texCoord'); + var texLayerLocation = gl.getUniformLocation(program, 'u_image'); + var texMaskLocation = gl.getUniformLocation(program, 'u_mask'); + var texCoordBuffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer); + gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([ + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 1.0, + 0.0, + 1.0, + 1.0 + ]), gl.STATIC_DRAW); + gl.enableVertexAttribArray(texCoordLocation); + gl.vertexAttribPointer(texCoordLocation, 2, gl.FLOAT, false, 0, 0); + gl.uniform1i(texLayerLocation, 0); + gl.uniform1i(texMaskLocation, 1); + smaskCache = cache; + } + function composeSMask(layer, mask, properties) { + var width = layer.width, height = layer.height; + if (!smaskCache) { + initSmaskGL(); + } + var cache = smaskCache, canvas = cache.canvas, gl = cache.gl; + canvas.width = width; + canvas.height = height; + gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl.uniform2f(cache.resolutionLocation, width, height); + if (properties.backdrop) { + gl.uniform4f(cache.resolutionLocation, properties.backdrop[0], properties.backdrop[1], properties.backdrop[2], 1); + } else { + gl.uniform4f(cache.resolutionLocation, 0, 0, 0, 0); + } + gl.uniform1i(cache.subtypeLocation, properties.subtype === 'Luminosity' ? 1 : 0); + var texture = createTexture(gl, layer, gl.TEXTURE0); + var maskTexture = createTexture(gl, mask, gl.TEXTURE1); + var buffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, buffer); + gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([ + 0, + 0, + width, + 0, + 0, + height, + 0, + height, + width, + 0, + width, + height + ]), gl.STATIC_DRAW); + gl.enableVertexAttribArray(cache.positionLocation); + gl.vertexAttribPointer(cache.positionLocation, 2, gl.FLOAT, false, 0, 0); + gl.clearColor(0, 0, 0, 0); + gl.enable(gl.BLEND); + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + gl.clear(gl.COLOR_BUFFER_BIT); + gl.drawArrays(gl.TRIANGLES, 0, 6); + gl.flush(); + gl.deleteTexture(texture); + gl.deleteTexture(maskTexture); + gl.deleteBuffer(buffer); + return canvas; + } + var figuresVertexShaderCode = '\ + attribute vec2 a_position; \ + attribute vec3 a_color; \ + \ + uniform vec2 u_resolution; \ + uniform vec2 u_scale; \ + uniform vec2 u_offset; \ + \ + varying vec4 v_color; \ + \ + void main() { \ + vec2 position = (a_position + u_offset) * u_scale; \ + vec2 clipSpace = (position / u_resolution) * 2.0 - 1.0; \ + gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1); \ + \ + v_color = vec4(a_color / 255.0, 1.0); \ + } '; + var figuresFragmentShaderCode = '\ + precision mediump float; \ + \ + varying vec4 v_color; \ + \ + void main() { \ + gl_FragColor = v_color; \ + } '; + var figuresCache = null; + function initFiguresGL() { + var canvas, gl; + generateGL(); + canvas = currentCanvas; + currentCanvas = null; + gl = currentGL; + currentGL = null; + var vertexShader = createVertexShader(gl, figuresVertexShaderCode); + var fragmentShader = createFragmentShader(gl, figuresFragmentShaderCode); + var program = createProgram(gl, [ + vertexShader, + fragmentShader + ]); + gl.useProgram(program); + var cache = {}; + cache.gl = gl; + cache.canvas = canvas; + cache.resolutionLocation = gl.getUniformLocation(program, 'u_resolution'); + cache.scaleLocation = gl.getUniformLocation(program, 'u_scale'); + cache.offsetLocation = gl.getUniformLocation(program, 'u_offset'); + cache.positionLocation = gl.getAttribLocation(program, 'a_position'); + cache.colorLocation = gl.getAttribLocation(program, 'a_color'); + figuresCache = cache; + } + function drawFigures(width, height, backgroundColor, figures, context) { + if (!figuresCache) { + initFiguresGL(); + } + var cache = figuresCache, canvas = cache.canvas, gl = cache.gl; + canvas.width = width; + canvas.height = height; + gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl.uniform2f(cache.resolutionLocation, width, height); + var count = 0; + var i, ii, rows; + for (i = 0, ii = figures.length; i < ii; i++) { + switch (figures[i].type) { + case 'lattice': + rows = figures[i].coords.length / figures[i].verticesPerRow | 0; + count += (rows - 1) * (figures[i].verticesPerRow - 1) * 6; + break; + case 'triangles': + count += figures[i].coords.length; + break; + } + } + var coords = new Float32Array(count * 2); + var colors = new Uint8Array(count * 3); + var coordsMap = context.coords, colorsMap = context.colors; + var pIndex = 0, cIndex = 0; + for (i = 0, ii = figures.length; i < ii; i++) { + var figure = figures[i], ps = figure.coords, cs = figure.colors; + switch (figure.type) { + case 'lattice': + var cols = figure.verticesPerRow; + rows = ps.length / cols | 0; + for (var row = 1; row < rows; row++) { + var offset = row * cols + 1; + for (var col = 1; col < cols; col++, offset++) { + coords[pIndex] = coordsMap[ps[offset - cols - 1]]; + coords[pIndex + 1] = coordsMap[ps[offset - cols - 1] + 1]; + coords[pIndex + 2] = coordsMap[ps[offset - cols]]; + coords[pIndex + 3] = coordsMap[ps[offset - cols] + 1]; + coords[pIndex + 4] = coordsMap[ps[offset - 1]]; + coords[pIndex + 5] = coordsMap[ps[offset - 1] + 1]; + colors[cIndex] = colorsMap[cs[offset - cols - 1]]; + colors[cIndex + 1] = colorsMap[cs[offset - cols - 1] + 1]; + colors[cIndex + 2] = colorsMap[cs[offset - cols - 1] + 2]; + colors[cIndex + 3] = colorsMap[cs[offset - cols]]; + colors[cIndex + 4] = colorsMap[cs[offset - cols] + 1]; + colors[cIndex + 5] = colorsMap[cs[offset - cols] + 2]; + colors[cIndex + 6] = colorsMap[cs[offset - 1]]; + colors[cIndex + 7] = colorsMap[cs[offset - 1] + 1]; + colors[cIndex + 8] = colorsMap[cs[offset - 1] + 2]; + coords[pIndex + 6] = coords[pIndex + 2]; + coords[pIndex + 7] = coords[pIndex + 3]; + coords[pIndex + 8] = coords[pIndex + 4]; + coords[pIndex + 9] = coords[pIndex + 5]; + coords[pIndex + 10] = coordsMap[ps[offset]]; + coords[pIndex + 11] = coordsMap[ps[offset] + 1]; + colors[cIndex + 9] = colors[cIndex + 3]; + colors[cIndex + 10] = colors[cIndex + 4]; + colors[cIndex + 11] = colors[cIndex + 5]; + colors[cIndex + 12] = colors[cIndex + 6]; + colors[cIndex + 13] = colors[cIndex + 7]; + colors[cIndex + 14] = colors[cIndex + 8]; + colors[cIndex + 15] = colorsMap[cs[offset]]; + colors[cIndex + 16] = colorsMap[cs[offset] + 1]; + colors[cIndex + 17] = colorsMap[cs[offset] + 2]; + pIndex += 12; + cIndex += 18; + } + } + break; + case 'triangles': + for (var j = 0, jj = ps.length; j < jj; j++) { + coords[pIndex] = coordsMap[ps[j]]; + coords[pIndex + 1] = coordsMap[ps[j] + 1]; + colors[cIndex] = colorsMap[cs[j]]; + colors[cIndex + 1] = colorsMap[cs[j] + 1]; + colors[cIndex + 2] = colorsMap[cs[j] + 2]; + pIndex += 2; + cIndex += 3; + } + break; + } + } + if (backgroundColor) { + gl.clearColor(backgroundColor[0] / 255, backgroundColor[1] / 255, backgroundColor[2] / 255, 1.0); + } else { + gl.clearColor(0, 0, 0, 0); + } + gl.clear(gl.COLOR_BUFFER_BIT); + var coordsBuffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, coordsBuffer); + gl.bufferData(gl.ARRAY_BUFFER, coords, gl.STATIC_DRAW); + gl.enableVertexAttribArray(cache.positionLocation); + gl.vertexAttribPointer(cache.positionLocation, 2, gl.FLOAT, false, 0, 0); + var colorsBuffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, colorsBuffer); + gl.bufferData(gl.ARRAY_BUFFER, colors, gl.STATIC_DRAW); + gl.enableVertexAttribArray(cache.colorLocation); + gl.vertexAttribPointer(cache.colorLocation, 3, gl.UNSIGNED_BYTE, false, 0, 0); + gl.uniform2f(cache.scaleLocation, context.scaleX, context.scaleY); + gl.uniform2f(cache.offsetLocation, context.offsetX, context.offsetY); + gl.drawArrays(gl.TRIANGLES, 0, count); + gl.flush(); + gl.deleteBuffer(coordsBuffer); + gl.deleteBuffer(colorsBuffer); + return canvas; + } + function cleanup() { + if (smaskCache && smaskCache.canvas) { + smaskCache.canvas.width = 0; + smaskCache.canvas.height = 0; + } + if (figuresCache && figuresCache.canvas) { + figuresCache.canvas.width = 0; + figuresCache.canvas.height = 0; + } + smaskCache = null; + figuresCache = null; + } + return { + get isEnabled() { + if (getDefaultSetting('disableWebGL')) { + return false; + } + var enabled = false; + try { + generateGL(); + enabled = !!currentGL; + } catch (e) { + } + return shadow(this, 'isEnabled', enabled); + }, + composeSMask: composeSMask, + drawFigures: drawFigures, + clear: cleanup + }; + }(); + exports.WebGLUtils = WebGLUtils; + })); + (function (root, factory) { + factory(root.pdfjsDisplayPatternHelper = {}, root.pdfjsSharedUtil, root.pdfjsDisplayWebGL); + }(this, function (exports, sharedUtil, displayWebGL) { + var Util = sharedUtil.Util; + var info = sharedUtil.info; + var isArray = sharedUtil.isArray; + var error = sharedUtil.error; + var WebGLUtils = displayWebGL.WebGLUtils; + var ShadingIRs = {}; + ShadingIRs.RadialAxial = { + fromIR: function RadialAxial_fromIR(raw) { + var type = raw[1]; + var colorStops = raw[2]; + var p0 = raw[3]; + var p1 = raw[4]; + var r0 = raw[5]; + var r1 = raw[6]; + return { + type: 'Pattern', + getPattern: function RadialAxial_getPattern(ctx) { + var grad; + if (type === 'axial') { + grad = ctx.createLinearGradient(p0[0], p0[1], p1[0], p1[1]); + } else if (type === 'radial') { + grad = ctx.createRadialGradient(p0[0], p0[1], r0, p1[0], p1[1], r1); + } + for (var i = 0, ii = colorStops.length; i < ii; ++i) { + var c = colorStops[i]; + grad.addColorStop(c[0], c[1]); + } + return grad; + } + }; + } + }; + var createMeshCanvas = function createMeshCanvasClosure() { + function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) { + var coords = context.coords, colors = context.colors; + var bytes = data.data, rowSize = data.width * 4; + var tmp; + if (coords[p1 + 1] > coords[p2 + 1]) { + tmp = p1; + p1 = p2; + p2 = tmp; + tmp = c1; + c1 = c2; + c2 = tmp; + } + if (coords[p2 + 1] > coords[p3 + 1]) { + tmp = p2; + p2 = p3; + p3 = tmp; + tmp = c2; + c2 = c3; + c3 = tmp; + } + if (coords[p1 + 1] > coords[p2 + 1]) { + tmp = p1; + p1 = p2; + p2 = tmp; + tmp = c1; + c1 = c2; + c2 = tmp; + } + var x1 = (coords[p1] + context.offsetX) * context.scaleX; + var y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY; + var x2 = (coords[p2] + context.offsetX) * context.scaleX; + var y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY; + var x3 = (coords[p3] + context.offsetX) * context.scaleX; + var y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY; + if (y1 >= y3) { + return; + } + var c1r = colors[c1], c1g = colors[c1 + 1], c1b = colors[c1 + 2]; + var c2r = colors[c2], c2g = colors[c2 + 1], c2b = colors[c2 + 2]; + var c3r = colors[c3], c3g = colors[c3 + 1], c3b = colors[c3 + 2]; + var minY = Math.round(y1), maxY = Math.round(y3); + var xa, car, cag, cab; + var xb, cbr, cbg, cbb; + var k; + for (var y = minY; y <= maxY; y++) { + if (y < y2) { + k = y < y1 ? 0 : y1 === y2 ? 1 : (y1 - y) / (y1 - y2); + xa = x1 - (x1 - x2) * k; + car = c1r - (c1r - c2r) * k; + cag = c1g - (c1g - c2g) * k; + cab = c1b - (c1b - c2b) * k; + } else { + k = y > y3 ? 1 : y2 === y3 ? 0 : (y2 - y) / (y2 - y3); + xa = x2 - (x2 - x3) * k; + car = c2r - (c2r - c3r) * k; + cag = c2g - (c2g - c3g) * k; + cab = c2b - (c2b - c3b) * k; + } + k = y < y1 ? 0 : y > y3 ? 1 : (y1 - y) / (y1 - y3); + xb = x1 - (x1 - x3) * k; + cbr = c1r - (c1r - c3r) * k; + cbg = c1g - (c1g - c3g) * k; + cbb = c1b - (c1b - c3b) * k; + var x1_ = Math.round(Math.min(xa, xb)); + var x2_ = Math.round(Math.max(xa, xb)); + var j = rowSize * y + x1_ * 4; + for (var x = x1_; x <= x2_; x++) { + k = (xa - x) / (xa - xb); + k = k < 0 ? 0 : k > 1 ? 1 : k; + bytes[j++] = car - (car - cbr) * k | 0; + bytes[j++] = cag - (cag - cbg) * k | 0; + bytes[j++] = cab - (cab - cbb) * k | 0; + bytes[j++] = 255; + } + } + } + function drawFigure(data, figure, context) { + var ps = figure.coords; + var cs = figure.colors; + var i, ii; + switch (figure.type) { + case 'lattice': + var verticesPerRow = figure.verticesPerRow; + var rows = Math.floor(ps.length / verticesPerRow) - 1; + var cols = verticesPerRow - 1; + for (i = 0; i < rows; i++) { + var q = i * verticesPerRow; + for (var j = 0; j < cols; j++, q++) { + drawTriangle(data, context, ps[q], ps[q + 1], ps[q + verticesPerRow], cs[q], cs[q + 1], cs[q + verticesPerRow]); + drawTriangle(data, context, ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow], cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]); + } + } + break; + case 'triangles': + for (i = 0, ii = ps.length; i < ii; i += 3) { + drawTriangle(data, context, ps[i], ps[i + 1], ps[i + 2], cs[i], cs[i + 1], cs[i + 2]); + } + break; + default: + error('illigal figure'); + break; + } + } + function createMeshCanvas(bounds, combinesScale, coords, colors, figures, backgroundColor, cachedCanvases) { + var EXPECTED_SCALE = 1.1; + var MAX_PATTERN_SIZE = 3000; + var BORDER_SIZE = 2; + var offsetX = Math.floor(bounds[0]); + var offsetY = Math.floor(bounds[1]); + var boundsWidth = Math.ceil(bounds[2]) - offsetX; + var boundsHeight = Math.ceil(bounds[3]) - offsetY; + var width = Math.min(Math.ceil(Math.abs(boundsWidth * combinesScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); + var height = Math.min(Math.ceil(Math.abs(boundsHeight * combinesScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); + var scaleX = boundsWidth / width; + var scaleY = boundsHeight / height; + var context = { + coords: coords, + colors: colors, + offsetX: -offsetX, + offsetY: -offsetY, + scaleX: 1 / scaleX, + scaleY: 1 / scaleY + }; + var paddedWidth = width + BORDER_SIZE * 2; + var paddedHeight = height + BORDER_SIZE * 2; + var canvas, tmpCanvas, i, ii; + if (WebGLUtils.isEnabled) { + canvas = WebGLUtils.drawFigures(width, height, backgroundColor, figures, context); + tmpCanvas = cachedCanvases.getCanvas('mesh', paddedWidth, paddedHeight, false); + tmpCanvas.context.drawImage(canvas, BORDER_SIZE, BORDER_SIZE); + canvas = tmpCanvas.canvas; + } else { + tmpCanvas = cachedCanvases.getCanvas('mesh', paddedWidth, paddedHeight, false); + var tmpCtx = tmpCanvas.context; + var data = tmpCtx.createImageData(width, height); + if (backgroundColor) { + var bytes = data.data; + for (i = 0, ii = bytes.length; i < ii; i += 4) { + bytes[i] = backgroundColor[0]; + bytes[i + 1] = backgroundColor[1]; + bytes[i + 2] = backgroundColor[2]; + bytes[i + 3] = 255; + } + } + for (i = 0; i < figures.length; i++) { + drawFigure(data, figures[i], context); + } + tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE); + canvas = tmpCanvas.canvas; + } + return { + canvas: canvas, + offsetX: offsetX - BORDER_SIZE * scaleX, + offsetY: offsetY - BORDER_SIZE * scaleY, + scaleX: scaleX, + scaleY: scaleY + }; + } + return createMeshCanvas; + }(); + ShadingIRs.Mesh = { + fromIR: function Mesh_fromIR(raw) { + var coords = raw[2]; + var colors = raw[3]; + var figures = raw[4]; + var bounds = raw[5]; + var matrix = raw[6]; + var background = raw[8]; + return { + type: 'Pattern', + getPattern: function Mesh_getPattern(ctx, owner, shadingFill) { + var scale; + if (shadingFill) { + scale = Util.singularValueDecompose2dScale(ctx.mozCurrentTransform); + } else { + scale = Util.singularValueDecompose2dScale(owner.baseTransform); + if (matrix) { + var matrixScale = Util.singularValueDecompose2dScale(matrix); + scale = [ + scale[0] * matrixScale[0], + scale[1] * matrixScale[1] + ]; + } + } + var temporaryPatternCanvas = createMeshCanvas(bounds, scale, coords, colors, figures, shadingFill ? null : background, owner.cachedCanvases); + if (!shadingFill) { + ctx.setTransform.apply(ctx, owner.baseTransform); + if (matrix) { + ctx.transform.apply(ctx, matrix); + } + } + ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY); + ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY); + return ctx.createPattern(temporaryPatternCanvas.canvas, 'no-repeat'); + } + }; + } + }; + ShadingIRs.Dummy = { + fromIR: function Dummy_fromIR() { + return { + type: 'Pattern', + getPattern: function Dummy_fromIR_getPattern() { + return 'hotpink'; + } + }; + } + }; + function getShadingPatternFromIR(raw) { + var shadingIR = ShadingIRs[raw[0]]; + if (!shadingIR) { + error('Unknown IR type: ' + raw[0]); + } + return shadingIR.fromIR(raw); + } + var TilingPattern = function TilingPatternClosure() { + var PaintType = { + COLORED: 1, + UNCOLORED: 2 + }; + var MAX_PATTERN_SIZE = 3000; + function TilingPattern(IR, color, ctx, canvasGraphicsFactory, baseTransform) { + this.operatorList = IR[2]; + this.matrix = IR[3] || [ + 1, + 0, + 0, + 1, + 0, + 0 + ]; + this.bbox = IR[4]; + this.xstep = IR[5]; + this.ystep = IR[6]; + this.paintType = IR[7]; + this.tilingType = IR[8]; + this.color = color; + this.canvasGraphicsFactory = canvasGraphicsFactory; + this.baseTransform = baseTransform; + this.type = 'Pattern'; + this.ctx = ctx; + } + TilingPattern.prototype = { + createPatternCanvas: function TilinPattern_createPatternCanvas(owner) { + var operatorList = this.operatorList; + var bbox = this.bbox; + var xstep = this.xstep; + var ystep = this.ystep; + var paintType = this.paintType; + var tilingType = this.tilingType; + var color = this.color; + var canvasGraphicsFactory = this.canvasGraphicsFactory; + info('TilingType: ' + tilingType); + var x0 = bbox[0], y0 = bbox[1], x1 = bbox[2], y1 = bbox[3]; + var topLeft = [ + x0, + y0 + ]; + var botRight = [ + x0 + xstep, + y0 + ystep + ]; + var width = botRight[0] - topLeft[0]; + var height = botRight[1] - topLeft[1]; + var matrixScale = Util.singularValueDecompose2dScale(this.matrix); + var curMatrixScale = Util.singularValueDecompose2dScale(this.baseTransform); + var combinedScale = [ + matrixScale[0] * curMatrixScale[0], + matrixScale[1] * curMatrixScale[1] + ]; + width = Math.min(Math.ceil(Math.abs(width * combinedScale[0])), MAX_PATTERN_SIZE); + height = Math.min(Math.ceil(Math.abs(height * combinedScale[1])), MAX_PATTERN_SIZE); + var tmpCanvas = owner.cachedCanvases.getCanvas('pattern', width, height, true); + var tmpCtx = tmpCanvas.context; + var graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx); + graphics.groupLevel = owner.groupLevel; + this.setFillAndStrokeStyleToContext(tmpCtx, paintType, color); + this.setScale(width, height, xstep, ystep); + this.transformToScale(graphics); + var tmpTranslate = [ + 1, + 0, + 0, + 1, + -topLeft[0], + -topLeft[1] + ]; + graphics.transform.apply(graphics, tmpTranslate); + this.clipBbox(graphics, bbox, x0, y0, x1, y1); + graphics.executeOperatorList(operatorList); + return tmpCanvas.canvas; + }, + setScale: function TilingPattern_setScale(width, height, xstep, ystep) { + this.scale = [ + width / xstep, + height / ystep + ]; + }, + transformToScale: function TilingPattern_transformToScale(graphics) { + var scale = this.scale; + var tmpScale = [ + scale[0], + 0, + 0, + scale[1], + 0, + 0 + ]; + graphics.transform.apply(graphics, tmpScale); + }, + scaleToContext: function TilingPattern_scaleToContext() { + var scale = this.scale; + this.ctx.scale(1 / scale[0], 1 / scale[1]); + }, + clipBbox: function clipBbox(graphics, bbox, x0, y0, x1, y1) { + if (bbox && isArray(bbox) && bbox.length === 4) { + var bboxWidth = x1 - x0; + var bboxHeight = y1 - y0; + graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight); + graphics.clip(); + graphics.endPath(); + } + }, + setFillAndStrokeStyleToContext: function setFillAndStrokeStyleToContext(context, paintType, color) { + switch (paintType) { + case PaintType.COLORED: + var ctx = this.ctx; + context.fillStyle = ctx.fillStyle; + context.strokeStyle = ctx.strokeStyle; + break; + case PaintType.UNCOLORED: + var cssColor = Util.makeCssRgb(color[0], color[1], color[2]); + context.fillStyle = cssColor; + context.strokeStyle = cssColor; + break; + default: + error('Unsupported paint type: ' + paintType); + } + }, + getPattern: function TilingPattern_getPattern(ctx, owner) { + var temporaryPatternCanvas = this.createPatternCanvas(owner); + ctx = this.ctx; + ctx.setTransform.apply(ctx, this.baseTransform); + ctx.transform.apply(ctx, this.matrix); + this.scaleToContext(); + return ctx.createPattern(temporaryPatternCanvas, 'repeat'); + } + }; + return TilingPattern; + }(); + exports.getShadingPatternFromIR = getShadingPatternFromIR; + exports.TilingPattern = TilingPattern; + })); + (function (root, factory) { + factory(root.pdfjsDisplayCanvas = {}, root.pdfjsSharedUtil, root.pdfjsDisplayDOMUtils, root.pdfjsDisplayPatternHelper, root.pdfjsDisplayWebGL); + }(this, function (exports, sharedUtil, displayDOMUtils, displayPatternHelper, displayWebGL) { + var FONT_IDENTITY_MATRIX = sharedUtil.FONT_IDENTITY_MATRIX; + var IDENTITY_MATRIX = sharedUtil.IDENTITY_MATRIX; + var ImageKind = sharedUtil.ImageKind; + var OPS = sharedUtil.OPS; + var TextRenderingMode = sharedUtil.TextRenderingMode; + var Uint32ArrayView = sharedUtil.Uint32ArrayView; + var Util = sharedUtil.Util; + var assert = sharedUtil.assert; + var info = sharedUtil.info; + var isNum = sharedUtil.isNum; + var isArray = sharedUtil.isArray; + var isLittleEndian = sharedUtil.isLittleEndian; + var error = sharedUtil.error; + var shadow = sharedUtil.shadow; + var warn = sharedUtil.warn; + var TilingPattern = displayPatternHelper.TilingPattern; + var getShadingPatternFromIR = displayPatternHelper.getShadingPatternFromIR; + var WebGLUtils = displayWebGL.WebGLUtils; + var hasCanvasTypedArrays = displayDOMUtils.hasCanvasTypedArrays; + var MIN_FONT_SIZE = 16; + var MAX_FONT_SIZE = 100; + var MAX_GROUP_SIZE = 4096; + var MIN_WIDTH_FACTOR = 0.65; + var COMPILE_TYPE3_GLYPHS = true; + var MAX_SIZE_TO_COMPILE = 1000; + var FULL_CHUNK_HEIGHT = 16; + var HasCanvasTypedArraysCached = { + get value() { + return shadow(HasCanvasTypedArraysCached, 'value', hasCanvasTypedArrays()); + } + }; + var IsLittleEndianCached = { + get value() { + return shadow(IsLittleEndianCached, 'value', isLittleEndian()); + } + }; + function createScratchCanvas(width, height) { + var canvas = document.createElement('canvas'); + canvas.width = width; + canvas.height = height; + return canvas; + } + function addContextCurrentTransform(ctx) { + if (!ctx.mozCurrentTransform) { + ctx._originalSave = ctx.save; + ctx._originalRestore = ctx.restore; + ctx._originalRotate = ctx.rotate; + ctx._originalScale = ctx.scale; + ctx._originalTranslate = ctx.translate; + ctx._originalTransform = ctx.transform; + ctx._originalSetTransform = ctx.setTransform; + ctx._transformMatrix = ctx._transformMatrix || [ + 1, + 0, + 0, + 1, + 0, + 0 + ]; + ctx._transformStack = []; + Object.defineProperty(ctx, 'mozCurrentTransform', { + get: function getCurrentTransform() { + return this._transformMatrix; + } + }); + Object.defineProperty(ctx, 'mozCurrentTransformInverse', { + get: function getCurrentTransformInverse() { + var m = this._transformMatrix; + var a = m[0], b = m[1], c = m[2], d = m[3], e = m[4], f = m[5]; + var ad_bc = a * d - b * c; + var bc_ad = b * c - a * d; + return [ + d / ad_bc, + b / bc_ad, + c / bc_ad, + a / ad_bc, + (d * e - c * f) / bc_ad, + (b * e - a * f) / ad_bc + ]; + } + }); + ctx.save = function ctxSave() { + var old = this._transformMatrix; + this._transformStack.push(old); + this._transformMatrix = old.slice(0, 6); + this._originalSave(); + }; + ctx.restore = function ctxRestore() { + var prev = this._transformStack.pop(); + if (prev) { + this._transformMatrix = prev; + this._originalRestore(); + } + }; + ctx.translate = function ctxTranslate(x, y) { + var m = this._transformMatrix; + m[4] = m[0] * x + m[2] * y + m[4]; + m[5] = m[1] * x + m[3] * y + m[5]; + this._originalTranslate(x, y); + }; + ctx.scale = function ctxScale(x, y) { + var m = this._transformMatrix; + m[0] = m[0] * x; + m[1] = m[1] * x; + m[2] = m[2] * y; + m[3] = m[3] * y; + this._originalScale(x, y); + }; + ctx.transform = function ctxTransform(a, b, c, d, e, f) { + var m = this._transformMatrix; + this._transformMatrix = [ + m[0] * a + m[2] * b, + m[1] * a + m[3] * b, + m[0] * c + m[2] * d, + m[1] * c + m[3] * d, + m[0] * e + m[2] * f + m[4], + m[1] * e + m[3] * f + m[5] + ]; + ctx._originalTransform(a, b, c, d, e, f); + }; + ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) { + this._transformMatrix = [ + a, + b, + c, + d, + e, + f + ]; + ctx._originalSetTransform(a, b, c, d, e, f); + }; + ctx.rotate = function ctxRotate(angle) { + var cosValue = Math.cos(angle); + var sinValue = Math.sin(angle); + var m = this._transformMatrix; + this._transformMatrix = [ + m[0] * cosValue + m[2] * sinValue, + m[1] * cosValue + m[3] * sinValue, + m[0] * -sinValue + m[2] * cosValue, + m[1] * -sinValue + m[3] * cosValue, + m[4], + m[5] + ]; + this._originalRotate(angle); + }; + } + } + var CachedCanvases = function CachedCanvasesClosure() { + function CachedCanvases() { + this.cache = Object.create(null); + } + CachedCanvases.prototype = { + getCanvas: function CachedCanvases_getCanvas(id, width, height, trackTransform) { + var canvasEntry; + if (this.cache[id] !== undefined) { + canvasEntry = this.cache[id]; + canvasEntry.canvas.width = width; + canvasEntry.canvas.height = height; + canvasEntry.context.setTransform(1, 0, 0, 1, 0, 0); + } else { + var canvas = createScratchCanvas(width, height); + var ctx = canvas.getContext('2d'); + if (trackTransform) { + addContextCurrentTransform(ctx); + } + this.cache[id] = canvasEntry = { + canvas: canvas, + context: ctx + }; + } + return canvasEntry; + }, + clear: function () { + for (var id in this.cache) { + var canvasEntry = this.cache[id]; + canvasEntry.canvas.width = 0; + canvasEntry.canvas.height = 0; + delete this.cache[id]; + } + } + }; + return CachedCanvases; + }(); + function compileType3Glyph(imgData) { + var POINT_TO_PROCESS_LIMIT = 1000; + var width = imgData.width, height = imgData.height; + var i, j, j0, width1 = width + 1; + var points = new Uint8Array(width1 * (height + 1)); + var POINT_TYPES = new Uint8Array([ + 0, + 2, + 4, + 0, + 1, + 0, + 5, + 4, + 8, + 10, + 0, + 8, + 0, + 2, + 1, + 0 + ]); + var lineSize = width + 7 & ~7, data0 = imgData.data; + var data = new Uint8Array(lineSize * height), pos = 0, ii; + for (i = 0, ii = data0.length; i < ii; i++) { + var mask = 128, elem = data0[i]; + while (mask > 0) { + data[pos++] = elem & mask ? 0 : 255; + mask >>= 1; + } + } + var count = 0; + pos = 0; + if (data[pos] !== 0) { + points[0] = 1; + ++count; + } + for (j = 1; j < width; j++) { + if (data[pos] !== data[pos + 1]) { + points[j] = data[pos] ? 2 : 1; + ++count; + } + pos++; + } + if (data[pos] !== 0) { + points[j] = 2; + ++count; + } + for (i = 1; i < height; i++) { + pos = i * lineSize; + j0 = i * width1; + if (data[pos - lineSize] !== data[pos]) { + points[j0] = data[pos] ? 1 : 8; + ++count; + } + var sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0); + for (j = 1; j < width; j++) { + sum = (sum >> 2) + (data[pos + 1] ? 4 : 0) + (data[pos - lineSize + 1] ? 8 : 0); + if (POINT_TYPES[sum]) { + points[j0 + j] = POINT_TYPES[sum]; + ++count; + } + pos++; + } + if (data[pos - lineSize] !== data[pos]) { + points[j0 + j] = data[pos] ? 2 : 4; + ++count; + } + if (count > POINT_TO_PROCESS_LIMIT) { + return null; + } + } + pos = lineSize * (height - 1); + j0 = i * width1; + if (data[pos] !== 0) { + points[j0] = 8; + ++count; + } + for (j = 1; j < width; j++) { + if (data[pos] !== data[pos + 1]) { + points[j0 + j] = data[pos] ? 4 : 8; + ++count; + } + pos++; + } + if (data[pos] !== 0) { + points[j0 + j] = 4; + ++count; + } + if (count > POINT_TO_PROCESS_LIMIT) { + return null; + } + var steps = new Int32Array([ + 0, + width1, + -1, + 0, + -width1, + 0, + 0, + 0, + 1 + ]); + var outlines = []; + for (i = 0; count && i <= height; i++) { + var p = i * width1; + var end = p + width; + while (p < end && !points[p]) { + p++; + } + if (p === end) { + continue; + } + var coords = [ + p % width1, + i + ]; + var type = points[p], p0 = p, pp; + do { + var step = steps[type]; + do { + p += step; + } while (!points[p]); + pp = points[p]; + if (pp !== 5 && pp !== 10) { + type = pp; + points[p] = 0; + } else { + type = pp & 0x33 * type >> 4; + points[p] &= type >> 2 | type << 2; + } + coords.push(p % width1); + coords.push(p / width1 | 0); + --count; + } while (p0 !== p); + outlines.push(coords); + --i; + } + var drawOutline = function (c) { + c.save(); + c.scale(1 / width, -1 / height); + c.translate(0, -height); + c.beginPath(); + for (var i = 0, ii = outlines.length; i < ii; i++) { + var o = outlines[i]; + c.moveTo(o[0], o[1]); + for (var j = 2, jj = o.length; j < jj; j += 2) { + c.lineTo(o[j], o[j + 1]); + } + } + c.fill(); + c.beginPath(); + c.restore(); + }; + return drawOutline; + } + var CanvasExtraState = function CanvasExtraStateClosure() { + function CanvasExtraState(old) { + this.alphaIsShape = false; + this.fontSize = 0; + this.fontSizeScale = 1; + this.textMatrix = IDENTITY_MATRIX; + this.textMatrixScale = 1; + this.fontMatrix = FONT_IDENTITY_MATRIX; + this.leading = 0; + this.x = 0; + this.y = 0; + this.lineX = 0; + this.lineY = 0; + this.charSpacing = 0; + this.wordSpacing = 0; + this.textHScale = 1; + this.textRenderingMode = TextRenderingMode.FILL; + this.textRise = 0; + this.fillColor = '#000000'; + this.strokeColor = '#000000'; + this.patternFill = false; + this.fillAlpha = 1; + this.strokeAlpha = 1; + this.lineWidth = 1; + this.activeSMask = null; + this.resumeSMaskCtx = null; + this.old = old; + } + CanvasExtraState.prototype = { + clone: function CanvasExtraState_clone() { + return Object.create(this); + }, + setCurrentPoint: function CanvasExtraState_setCurrentPoint(x, y) { + this.x = x; + this.y = y; + } + }; + return CanvasExtraState; + }(); + var CanvasGraphics = function CanvasGraphicsClosure() { + var EXECUTION_TIME = 15; + var EXECUTION_STEPS = 10; + function CanvasGraphics(canvasCtx, commonObjs, objs, imageLayer) { + this.ctx = canvasCtx; + this.current = new CanvasExtraState(); + this.stateStack = []; + this.pendingClip = null; + this.pendingEOFill = false; + this.res = null; + this.xobjs = null; + this.commonObjs = commonObjs; + this.objs = objs; + this.imageLayer = imageLayer; + this.groupStack = []; + this.processingType3 = null; + this.baseTransform = null; + this.baseTransformStack = []; + this.groupLevel = 0; + this.smaskStack = []; + this.smaskCounter = 0; + this.tempSMask = null; + this.cachedCanvases = new CachedCanvases(); + if (canvasCtx) { + addContextCurrentTransform(canvasCtx); + } + this.cachedGetSinglePixelWidth = null; + } + function putBinaryImageData(ctx, imgData) { + if (typeof ImageData !== 'undefined' && imgData instanceof ImageData) { + ctx.putImageData(imgData, 0, 0); + return; + } + var height = imgData.height, width = imgData.width; + var partialChunkHeight = height % FULL_CHUNK_HEIGHT; + var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; + var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; + var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); + var srcPos = 0, destPos; + var src = imgData.data; + var dest = chunkImgData.data; + var i, j, thisChunkHeight, elemsInThisChunk; + if (imgData.kind === ImageKind.GRAYSCALE_1BPP) { + var srcLength = src.byteLength; + var dest32 = HasCanvasTypedArraysCached.value ? new Uint32Array(dest.buffer) : new Uint32ArrayView(dest); + var dest32DataLength = dest32.length; + var fullSrcDiff = width + 7 >> 3; + var white = 0xFFFFFFFF; + var black = IsLittleEndianCached.value || !HasCanvasTypedArraysCached.value ? 0xFF000000 : 0x000000FF; + for (i = 0; i < totalChunks; i++) { + thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; + destPos = 0; + for (j = 0; j < thisChunkHeight; j++) { + var srcDiff = srcLength - srcPos; + var k = 0; + var kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7; + var kEndUnrolled = kEnd & ~7; + var mask = 0; + var srcByte = 0; + for (; k < kEndUnrolled; k += 8) { + srcByte = src[srcPos++]; + dest32[destPos++] = srcByte & 128 ? white : black; + dest32[destPos++] = srcByte & 64 ? white : black; + dest32[destPos++] = srcByte & 32 ? white : black; + dest32[destPos++] = srcByte & 16 ? white : black; + dest32[destPos++] = srcByte & 8 ? white : black; + dest32[destPos++] = srcByte & 4 ? white : black; + dest32[destPos++] = srcByte & 2 ? white : black; + dest32[destPos++] = srcByte & 1 ? white : black; + } + for (; k < kEnd; k++) { + if (mask === 0) { + srcByte = src[srcPos++]; + mask = 128; + } + dest32[destPos++] = srcByte & mask ? white : black; + mask >>= 1; + } + } + while (destPos < dest32DataLength) { + dest32[destPos++] = 0; + } + ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); + } + } else if (imgData.kind === ImageKind.RGBA_32BPP) { + j = 0; + elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4; + for (i = 0; i < fullChunks; i++) { + dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); + srcPos += elemsInThisChunk; + ctx.putImageData(chunkImgData, 0, j); + j += FULL_CHUNK_HEIGHT; + } + if (i < totalChunks) { + elemsInThisChunk = width * partialChunkHeight * 4; + dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); + ctx.putImageData(chunkImgData, 0, j); + } + } else if (imgData.kind === ImageKind.RGB_24BPP) { + thisChunkHeight = FULL_CHUNK_HEIGHT; + elemsInThisChunk = width * thisChunkHeight; + for (i = 0; i < totalChunks; i++) { + if (i >= fullChunks) { + thisChunkHeight = partialChunkHeight; + elemsInThisChunk = width * thisChunkHeight; + } + destPos = 0; + for (j = elemsInThisChunk; j--;) { + dest[destPos++] = src[srcPos++]; + dest[destPos++] = src[srcPos++]; + dest[destPos++] = src[srcPos++]; + dest[destPos++] = 255; + } + ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); + } + } else { + error('bad image kind: ' + imgData.kind); + } + } + function putBinaryImageMask(ctx, imgData) { + var height = imgData.height, width = imgData.width; + var partialChunkHeight = height % FULL_CHUNK_HEIGHT; + var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; + var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; + var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); + var srcPos = 0; + var src = imgData.data; + var dest = chunkImgData.data; + for (var i = 0; i < totalChunks; i++) { + var thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; + var destPos = 3; + for (var j = 0; j < thisChunkHeight; j++) { + var mask = 0; + for (var k = 0; k < width; k++) { + if (!mask) { + var elem = src[srcPos++]; + mask = 128; + } + dest[destPos] = elem & mask ? 0 : 255; + destPos += 4; + mask >>= 1; + } + } + ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); + } + } + function copyCtxState(sourceCtx, destCtx) { + var properties = [ + 'strokeStyle', + 'fillStyle', + 'fillRule', + 'globalAlpha', + 'lineWidth', + 'lineCap', + 'lineJoin', + 'miterLimit', + 'globalCompositeOperation', + 'font' + ]; + for (var i = 0, ii = properties.length; i < ii; i++) { + var property = properties[i]; + if (sourceCtx[property] !== undefined) { + destCtx[property] = sourceCtx[property]; + } + } + if (sourceCtx.setLineDash !== undefined) { + destCtx.setLineDash(sourceCtx.getLineDash()); + destCtx.lineDashOffset = sourceCtx.lineDashOffset; + } + } + function composeSMaskBackdrop(bytes, r0, g0, b0) { + var length = bytes.length; + for (var i = 3; i < length; i += 4) { + var alpha = bytes[i]; + if (alpha === 0) { + bytes[i - 3] = r0; + bytes[i - 2] = g0; + bytes[i - 1] = b0; + } else if (alpha < 255) { + var alpha_ = 255 - alpha; + bytes[i - 3] = bytes[i - 3] * alpha + r0 * alpha_ >> 8; + bytes[i - 2] = bytes[i - 2] * alpha + g0 * alpha_ >> 8; + bytes[i - 1] = bytes[i - 1] * alpha + b0 * alpha_ >> 8; + } + } + } + function composeSMaskAlpha(maskData, layerData, transferMap) { + var length = maskData.length; + var scale = 1 / 255; + for (var i = 3; i < length; i += 4) { + var alpha = transferMap ? transferMap[maskData[i]] : maskData[i]; + layerData[i] = layerData[i] * alpha * scale | 0; + } + } + function composeSMaskLuminosity(maskData, layerData, transferMap) { + var length = maskData.length; + for (var i = 3; i < length; i += 4) { + var y = maskData[i - 3] * 77 + maskData[i - 2] * 152 + maskData[i - 1] * 28; + layerData[i] = transferMap ? layerData[i] * transferMap[y >> 8] >> 8 : layerData[i] * y >> 16; + } + } + function genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap) { + var hasBackdrop = !!backdrop; + var r0 = hasBackdrop ? backdrop[0] : 0; + var g0 = hasBackdrop ? backdrop[1] : 0; + var b0 = hasBackdrop ? backdrop[2] : 0; + var composeFn; + if (subtype === 'Luminosity') { + composeFn = composeSMaskLuminosity; + } else { + composeFn = composeSMaskAlpha; + } + var PIXELS_TO_PROCESS = 1048576; + var chunkSize = Math.min(height, Math.ceil(PIXELS_TO_PROCESS / width)); + for (var row = 0; row < height; row += chunkSize) { + var chunkHeight = Math.min(chunkSize, height - row); + var maskData = maskCtx.getImageData(0, row, width, chunkHeight); + var layerData = layerCtx.getImageData(0, row, width, chunkHeight); + if (hasBackdrop) { + composeSMaskBackdrop(maskData.data, r0, g0, b0); + } + composeFn(maskData.data, layerData.data, transferMap); + maskCtx.putImageData(layerData, 0, row); + } + } + function composeSMask(ctx, smask, layerCtx) { + var mask = smask.canvas; + var maskCtx = smask.context; + ctx.setTransform(smask.scaleX, 0, 0, smask.scaleY, smask.offsetX, smask.offsetY); + var backdrop = smask.backdrop || null; + if (!smask.transferMap && WebGLUtils.isEnabled) { + var composed = WebGLUtils.composeSMask(layerCtx.canvas, mask, { + subtype: smask.subtype, + backdrop: backdrop + }); + ctx.setTransform(1, 0, 0, 1, 0, 0); + ctx.drawImage(composed, smask.offsetX, smask.offsetY); + return; + } + genericComposeSMask(maskCtx, layerCtx, mask.width, mask.height, smask.subtype, backdrop, smask.transferMap); + ctx.drawImage(mask, 0, 0); + } + var LINE_CAP_STYLES = [ + 'butt', + 'round', + 'square' + ]; + var LINE_JOIN_STYLES = [ + 'miter', + 'round', + 'bevel' + ]; + var NORMAL_CLIP = {}; + var EO_CLIP = {}; + CanvasGraphics.prototype = { + beginDrawing: function CanvasGraphics_beginDrawing(transform, viewport, transparency) { + var width = this.ctx.canvas.width; + var height = this.ctx.canvas.height; + this.ctx.save(); + this.ctx.fillStyle = 'rgb(255, 255, 255)'; + this.ctx.fillRect(0, 0, width, height); + this.ctx.restore(); + if (transparency) { + var transparentCanvas = this.cachedCanvases.getCanvas('transparent', width, height, true); + this.compositeCtx = this.ctx; + this.transparentCanvas = transparentCanvas.canvas; + this.ctx = transparentCanvas.context; + this.ctx.save(); + this.ctx.transform.apply(this.ctx, this.compositeCtx.mozCurrentTransform); + } + this.ctx.save(); + if (transform) { + this.ctx.transform.apply(this.ctx, transform); + } + this.ctx.transform.apply(this.ctx, viewport.transform); + this.baseTransform = this.ctx.mozCurrentTransform.slice(); + if (this.imageLayer) { + this.imageLayer.beginLayout(); + } + }, + executeOperatorList: function CanvasGraphics_executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) { + var argsArray = operatorList.argsArray; + var fnArray = operatorList.fnArray; + var i = executionStartIdx || 0; + var argsArrayLen = argsArray.length; + if (argsArrayLen === i) { + return i; + } + var chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === 'function'; + var endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0; + var steps = 0; + var commonObjs = this.commonObjs; + var objs = this.objs; + var fnId; + while (true) { + if (stepper !== undefined && i === stepper.nextBreakPoint) { + stepper.breakIt(i, continueCallback); + return i; + } + fnId = fnArray[i]; + if (fnId !== OPS.dependency) { + this[fnId].apply(this, argsArray[i]); + } else { + var deps = argsArray[i]; + for (var n = 0, nn = deps.length; n < nn; n++) { + var depObjId = deps[n]; + var common = depObjId[0] === 'g' && depObjId[1] === '_'; + var objsPool = common ? commonObjs : objs; + if (!objsPool.isResolved(depObjId)) { + objsPool.get(depObjId, continueCallback); + return i; + } + } + } + i++; + if (i === argsArrayLen) { + return i; + } + if (chunkOperations && ++steps > EXECUTION_STEPS) { + if (Date.now() > endTime) { + continueCallback(); + return i; + } + steps = 0; + } + } + }, + endDrawing: function CanvasGraphics_endDrawing() { + if (this.current.activeSMask !== null) { + this.endSMaskGroup(); + } + this.ctx.restore(); + if (this.transparentCanvas) { + this.ctx = this.compositeCtx; + this.ctx.save(); + this.ctx.setTransform(1, 0, 0, 1, 0, 0); + this.ctx.drawImage(this.transparentCanvas, 0, 0); + this.ctx.restore(); + this.transparentCanvas = null; + } + this.cachedCanvases.clear(); + WebGLUtils.clear(); + if (this.imageLayer) { + this.imageLayer.endLayout(); + } + }, + setLineWidth: function CanvasGraphics_setLineWidth(width) { + this.current.lineWidth = width; + this.ctx.lineWidth = width; + }, + setLineCap: function CanvasGraphics_setLineCap(style) { + this.ctx.lineCap = LINE_CAP_STYLES[style]; + }, + setLineJoin: function CanvasGraphics_setLineJoin(style) { + this.ctx.lineJoin = LINE_JOIN_STYLES[style]; + }, + setMiterLimit: function CanvasGraphics_setMiterLimit(limit) { + this.ctx.miterLimit = limit; + }, + setDash: function CanvasGraphics_setDash(dashArray, dashPhase) { + var ctx = this.ctx; + if (ctx.setLineDash !== undefined) { + ctx.setLineDash(dashArray); + ctx.lineDashOffset = dashPhase; + } + }, + setRenderingIntent: function CanvasGraphics_setRenderingIntent(intent) { + }, + setFlatness: function CanvasGraphics_setFlatness(flatness) { + }, + setGState: function CanvasGraphics_setGState(states) { + for (var i = 0, ii = states.length; i < ii; i++) { + var state = states[i]; + var key = state[0]; + var value = state[1]; + switch (key) { + case 'LW': + this.setLineWidth(value); + break; + case 'LC': + this.setLineCap(value); + break; + case 'LJ': + this.setLineJoin(value); + break; + case 'ML': + this.setMiterLimit(value); + break; + case 'D': + this.setDash(value[0], value[1]); + break; + case 'RI': + this.setRenderingIntent(value); + break; + case 'FL': + this.setFlatness(value); + break; + case 'Font': + this.setFont(value[0], value[1]); + break; + case 'CA': + this.current.strokeAlpha = state[1]; + break; + case 'ca': + this.current.fillAlpha = state[1]; + this.ctx.globalAlpha = state[1]; + break; + case 'BM': + if (value && value.name && value.name !== 'Normal') { + var mode = value.name.replace(/([A-Z])/g, function (c) { + return '-' + c.toLowerCase(); + }).substring(1); + this.ctx.globalCompositeOperation = mode; + if (this.ctx.globalCompositeOperation !== mode) { + warn('globalCompositeOperation "' + mode + '" is not supported'); + } + } else { + this.ctx.globalCompositeOperation = 'source-over'; + } + break; + case 'SMask': + if (this.current.activeSMask) { + if (this.stateStack.length > 0 && this.stateStack[this.stateStack.length - 1].activeSMask === this.current.activeSMask) { + this.suspendSMaskGroup(); + } else { + this.endSMaskGroup(); + } + } + this.current.activeSMask = value ? this.tempSMask : null; + if (this.current.activeSMask) { + this.beginSMaskGroup(); + } + this.tempSMask = null; + break; + } + } + }, + beginSMaskGroup: function CanvasGraphics_beginSMaskGroup() { + var activeSMask = this.current.activeSMask; + var drawnWidth = activeSMask.canvas.width; + var drawnHeight = activeSMask.canvas.height; + var cacheId = 'smaskGroupAt' + this.groupLevel; + var scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true); + var currentCtx = this.ctx; + var currentTransform = currentCtx.mozCurrentTransform; + this.ctx.save(); + var groupCtx = scratchCanvas.context; + groupCtx.scale(1 / activeSMask.scaleX, 1 / activeSMask.scaleY); + groupCtx.translate(-activeSMask.offsetX, -activeSMask.offsetY); + groupCtx.transform.apply(groupCtx, currentTransform); + activeSMask.startTransformInverse = groupCtx.mozCurrentTransformInverse; + copyCtxState(currentCtx, groupCtx); + this.ctx = groupCtx; + this.setGState([ + [ + 'BM', + 'Normal' + ], + [ + 'ca', + 1 + ], + [ + 'CA', + 1 + ] + ]); + this.groupStack.push(currentCtx); + this.groupLevel++; + }, + suspendSMaskGroup: function CanvasGraphics_endSMaskGroup() { + var groupCtx = this.ctx; + this.groupLevel--; + this.ctx = this.groupStack.pop(); + composeSMask(this.ctx, this.current.activeSMask, groupCtx); + this.ctx.restore(); + this.ctx.save(); + copyCtxState(groupCtx, this.ctx); + this.current.resumeSMaskCtx = groupCtx; + var deltaTransform = Util.transform(this.current.activeSMask.startTransformInverse, groupCtx.mozCurrentTransform); + this.ctx.transform.apply(this.ctx, deltaTransform); + groupCtx.save(); + groupCtx.setTransform(1, 0, 0, 1, 0, 0); + groupCtx.clearRect(0, 0, groupCtx.canvas.width, groupCtx.canvas.height); + groupCtx.restore(); + }, + resumeSMaskGroup: function CanvasGraphics_endSMaskGroup() { + var groupCtx = this.current.resumeSMaskCtx; + var currentCtx = this.ctx; + this.ctx = groupCtx; + this.groupStack.push(currentCtx); + this.groupLevel++; + }, + endSMaskGroup: function CanvasGraphics_endSMaskGroup() { + var groupCtx = this.ctx; + this.groupLevel--; + this.ctx = this.groupStack.pop(); + composeSMask(this.ctx, this.current.activeSMask, groupCtx); + this.ctx.restore(); + copyCtxState(groupCtx, this.ctx); + var deltaTransform = Util.transform(this.current.activeSMask.startTransformInverse, groupCtx.mozCurrentTransform); + this.ctx.transform.apply(this.ctx, deltaTransform); + }, + save: function CanvasGraphics_save() { + this.ctx.save(); + var old = this.current; + this.stateStack.push(old); + this.current = old.clone(); + this.current.resumeSMaskCtx = null; + }, + restore: function CanvasGraphics_restore() { + if (this.current.resumeSMaskCtx) { + this.resumeSMaskGroup(); + } + if (this.current.activeSMask !== null && (this.stateStack.length === 0 || this.stateStack[this.stateStack.length - 1].activeSMask !== this.current.activeSMask)) { + this.endSMaskGroup(); + } + if (this.stateStack.length !== 0) { + this.current = this.stateStack.pop(); + this.ctx.restore(); + this.pendingClip = null; + this.cachedGetSinglePixelWidth = null; + } + }, + transform: function CanvasGraphics_transform(a, b, c, d, e, f) { + this.ctx.transform(a, b, c, d, e, f); + this.cachedGetSinglePixelWidth = null; + }, + constructPath: function CanvasGraphics_constructPath(ops, args) { + var ctx = this.ctx; + var current = this.current; + var x = current.x, y = current.y; + for (var i = 0, j = 0, ii = ops.length; i < ii; i++) { + switch (ops[i] | 0) { + case OPS.rectangle: + x = args[j++]; + y = args[j++]; + var width = args[j++]; + var height = args[j++]; + if (width === 0) { + width = this.getSinglePixelWidth(); + } + if (height === 0) { + height = this.getSinglePixelWidth(); + } + var xw = x + width; + var yh = y + height; + this.ctx.moveTo(x, y); + this.ctx.lineTo(xw, y); + this.ctx.lineTo(xw, yh); + this.ctx.lineTo(x, yh); + this.ctx.lineTo(x, y); + this.ctx.closePath(); + break; + case OPS.moveTo: + x = args[j++]; + y = args[j++]; + ctx.moveTo(x, y); + break; + case OPS.lineTo: + x = args[j++]; + y = args[j++]; + ctx.lineTo(x, y); + break; + case OPS.curveTo: + x = args[j + 4]; + y = args[j + 5]; + ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y); + j += 6; + break; + case OPS.curveTo2: + ctx.bezierCurveTo(x, y, args[j], args[j + 1], args[j + 2], args[j + 3]); + x = args[j + 2]; + y = args[j + 3]; + j += 4; + break; + case OPS.curveTo3: + x = args[j + 2]; + y = args[j + 3]; + ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y); + j += 4; + break; + case OPS.closePath: + ctx.closePath(); + break; + } + } + current.setCurrentPoint(x, y); + }, + closePath: function CanvasGraphics_closePath() { + this.ctx.closePath(); + }, + stroke: function CanvasGraphics_stroke(consumePath) { + consumePath = typeof consumePath !== 'undefined' ? consumePath : true; + var ctx = this.ctx; + var strokeColor = this.current.strokeColor; + ctx.lineWidth = Math.max(this.getSinglePixelWidth() * MIN_WIDTH_FACTOR, this.current.lineWidth); + ctx.globalAlpha = this.current.strokeAlpha; + if (strokeColor && strokeColor.hasOwnProperty('type') && strokeColor.type === 'Pattern') { + ctx.save(); + ctx.strokeStyle = strokeColor.getPattern(ctx, this); + ctx.stroke(); + ctx.restore(); + } else { + ctx.stroke(); + } + if (consumePath) { + this.consumePath(); + } + ctx.globalAlpha = this.current.fillAlpha; + }, + closeStroke: function CanvasGraphics_closeStroke() { + this.closePath(); + this.stroke(); + }, + fill: function CanvasGraphics_fill(consumePath) { + consumePath = typeof consumePath !== 'undefined' ? consumePath : true; + var ctx = this.ctx; + var fillColor = this.current.fillColor; + var isPatternFill = this.current.patternFill; + var needRestore = false; + if (isPatternFill) { + ctx.save(); + if (this.baseTransform) { + ctx.setTransform.apply(ctx, this.baseTransform); + } + ctx.fillStyle = fillColor.getPattern(ctx, this); + needRestore = true; + } + if (this.pendingEOFill) { + if (ctx.mozFillRule !== undefined) { + ctx.mozFillRule = 'evenodd'; + ctx.fill(); + ctx.mozFillRule = 'nonzero'; + } else { + ctx.fill('evenodd'); + } + this.pendingEOFill = false; + } else { + ctx.fill(); + } + if (needRestore) { + ctx.restore(); + } + if (consumePath) { + this.consumePath(); + } + }, + eoFill: function CanvasGraphics_eoFill() { + this.pendingEOFill = true; + this.fill(); + }, + fillStroke: function CanvasGraphics_fillStroke() { + this.fill(false); + this.stroke(false); + this.consumePath(); + }, + eoFillStroke: function CanvasGraphics_eoFillStroke() { + this.pendingEOFill = true; + this.fillStroke(); + }, + closeFillStroke: function CanvasGraphics_closeFillStroke() { + this.closePath(); + this.fillStroke(); + }, + closeEOFillStroke: function CanvasGraphics_closeEOFillStroke() { + this.pendingEOFill = true; + this.closePath(); + this.fillStroke(); + }, + endPath: function CanvasGraphics_endPath() { + this.consumePath(); + }, + clip: function CanvasGraphics_clip() { + this.pendingClip = NORMAL_CLIP; + }, + eoClip: function CanvasGraphics_eoClip() { + this.pendingClip = EO_CLIP; + }, + beginText: function CanvasGraphics_beginText() { + this.current.textMatrix = IDENTITY_MATRIX; + this.current.textMatrixScale = 1; + this.current.x = this.current.lineX = 0; + this.current.y = this.current.lineY = 0; + }, + endText: function CanvasGraphics_endText() { + var paths = this.pendingTextPaths; + var ctx = this.ctx; + if (paths === undefined) { + ctx.beginPath(); + return; + } + ctx.save(); + ctx.beginPath(); + for (var i = 0; i < paths.length; i++) { + var path = paths[i]; + ctx.setTransform.apply(ctx, path.transform); + ctx.translate(path.x, path.y); + path.addToPath(ctx, path.fontSize); + } + ctx.restore(); + ctx.clip(); + ctx.beginPath(); + delete this.pendingTextPaths; + }, + setCharSpacing: function CanvasGraphics_setCharSpacing(spacing) { + this.current.charSpacing = spacing; + }, + setWordSpacing: function CanvasGraphics_setWordSpacing(spacing) { + this.current.wordSpacing = spacing; + }, + setHScale: function CanvasGraphics_setHScale(scale) { + this.current.textHScale = scale / 100; + }, + setLeading: function CanvasGraphics_setLeading(leading) { + this.current.leading = -leading; + }, + setFont: function CanvasGraphics_setFont(fontRefName, size) { + var fontObj = this.commonObjs.get(fontRefName); + var current = this.current; + if (!fontObj) { + error('Can\'t find font for ' + fontRefName); + } + current.fontMatrix = fontObj.fontMatrix ? fontObj.fontMatrix : FONT_IDENTITY_MATRIX; + if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) { + warn('Invalid font matrix for font ' + fontRefName); + } + if (size < 0) { + size = -size; + current.fontDirection = -1; + } else { + current.fontDirection = 1; + } + this.current.font = fontObj; + this.current.fontSize = size; + if (fontObj.isType3Font) { + return; + } + var name = fontObj.loadedName || 'sans-serif'; + var bold = fontObj.black ? '900' : fontObj.bold ? 'bold' : 'normal'; + var italic = fontObj.italic ? 'italic' : 'normal'; + var typeface = '"' + name + '", ' + fontObj.fallbackName; + var browserFontSize = size < MIN_FONT_SIZE ? MIN_FONT_SIZE : size > MAX_FONT_SIZE ? MAX_FONT_SIZE : size; + this.current.fontSizeScale = size / browserFontSize; + var rule = italic + ' ' + bold + ' ' + browserFontSize + 'px ' + typeface; + this.ctx.font = rule; + }, + setTextRenderingMode: function CanvasGraphics_setTextRenderingMode(mode) { + this.current.textRenderingMode = mode; + }, + setTextRise: function CanvasGraphics_setTextRise(rise) { + this.current.textRise = rise; + }, + moveText: function CanvasGraphics_moveText(x, y) { + this.current.x = this.current.lineX += x; + this.current.y = this.current.lineY += y; + }, + setLeadingMoveText: function CanvasGraphics_setLeadingMoveText(x, y) { + this.setLeading(-y); + this.moveText(x, y); + }, + setTextMatrix: function CanvasGraphics_setTextMatrix(a, b, c, d, e, f) { + this.current.textMatrix = [ + a, + b, + c, + d, + e, + f + ]; + this.current.textMatrixScale = Math.sqrt(a * a + b * b); + this.current.x = this.current.lineX = 0; + this.current.y = this.current.lineY = 0; + }, + nextLine: function CanvasGraphics_nextLine() { + this.moveText(0, this.current.leading); + }, + paintChar: function CanvasGraphics_paintChar(character, x, y) { + var ctx = this.ctx; + var current = this.current; + var font = current.font; + var textRenderingMode = current.textRenderingMode; + var fontSize = current.fontSize / current.fontSizeScale; + var fillStrokeMode = textRenderingMode & TextRenderingMode.FILL_STROKE_MASK; + var isAddToPathSet = !!(textRenderingMode & TextRenderingMode.ADD_TO_PATH_FLAG); + var addToPath; + if (font.disableFontFace || isAddToPathSet) { + addToPath = font.getPathGenerator(this.commonObjs, character); + } + if (font.disableFontFace) { + ctx.save(); + ctx.translate(x, y); + ctx.beginPath(); + addToPath(ctx, fontSize); + if (fillStrokeMode === TextRenderingMode.FILL || fillStrokeMode === TextRenderingMode.FILL_STROKE) { + ctx.fill(); + } + if (fillStrokeMode === TextRenderingMode.STROKE || fillStrokeMode === TextRenderingMode.FILL_STROKE) { + ctx.stroke(); + } + ctx.restore(); + } else { + if (fillStrokeMode === TextRenderingMode.FILL || fillStrokeMode === TextRenderingMode.FILL_STROKE) { + ctx.fillText(character, x, y); + } + if (fillStrokeMode === TextRenderingMode.STROKE || fillStrokeMode === TextRenderingMode.FILL_STROKE) { + ctx.strokeText(character, x, y); + } + } + if (isAddToPathSet) { + var paths = this.pendingTextPaths || (this.pendingTextPaths = []); + paths.push({ + transform: ctx.mozCurrentTransform, + x: x, + y: y, + fontSize: fontSize, + addToPath: addToPath + }); + } + }, + get isFontSubpixelAAEnabled() { + var ctx = document.createElement('canvas').getContext('2d'); + ctx.scale(1.5, 1); + ctx.fillText('I', 0, 10); + var data = ctx.getImageData(0, 0, 10, 10).data; + var enabled = false; + for (var i = 3; i < data.length; i += 4) { + if (data[i] > 0 && data[i] < 255) { + enabled = true; + break; + } + } + return shadow(this, 'isFontSubpixelAAEnabled', enabled); + }, + showText: function CanvasGraphics_showText(glyphs) { + var current = this.current; + var font = current.font; + if (font.isType3Font) { + return this.showType3Text(glyphs); + } + var fontSize = current.fontSize; + if (fontSize === 0) { + return; + } + var ctx = this.ctx; + var fontSizeScale = current.fontSizeScale; + var charSpacing = current.charSpacing; + var wordSpacing = current.wordSpacing; + var fontDirection = current.fontDirection; + var textHScale = current.textHScale * fontDirection; + var glyphsLength = glyphs.length; + var vertical = font.vertical; + var spacingDir = vertical ? 1 : -1; + var defaultVMetrics = font.defaultVMetrics; + var widthAdvanceScale = fontSize * current.fontMatrix[0]; + var simpleFillText = current.textRenderingMode === TextRenderingMode.FILL && !font.disableFontFace; + ctx.save(); + ctx.transform.apply(ctx, current.textMatrix); + ctx.translate(current.x, current.y + current.textRise); + if (current.patternFill) { + ctx.fillStyle = current.fillColor.getPattern(ctx, this); + } + if (fontDirection > 0) { + ctx.scale(textHScale, -1); + } else { + ctx.scale(textHScale, 1); + } + var lineWidth = current.lineWidth; + var scale = current.textMatrixScale; + if (scale === 0 || lineWidth === 0) { + var fillStrokeMode = current.textRenderingMode & TextRenderingMode.FILL_STROKE_MASK; + if (fillStrokeMode === TextRenderingMode.STROKE || fillStrokeMode === TextRenderingMode.FILL_STROKE) { + this.cachedGetSinglePixelWidth = null; + lineWidth = this.getSinglePixelWidth() * MIN_WIDTH_FACTOR; + } + } else { + lineWidth /= scale; + } + if (fontSizeScale !== 1.0) { + ctx.scale(fontSizeScale, fontSizeScale); + lineWidth /= fontSizeScale; + } + ctx.lineWidth = lineWidth; + var x = 0, i; + for (i = 0; i < glyphsLength; ++i) { + var glyph = glyphs[i]; + if (isNum(glyph)) { + x += spacingDir * glyph * fontSize / 1000; + continue; + } + var restoreNeeded = false; + var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; + var character = glyph.fontChar; + var accent = glyph.accent; + var scaledX, scaledY, scaledAccentX, scaledAccentY; + var width = glyph.width; + if (vertical) { + var vmetric, vx, vy; + vmetric = glyph.vmetric || defaultVMetrics; + vx = glyph.vmetric ? vmetric[1] : width * 0.5; + vx = -vx * widthAdvanceScale; + vy = vmetric[2] * widthAdvanceScale; + width = vmetric ? -vmetric[0] : width; + scaledX = vx / fontSizeScale; + scaledY = (x + vy) / fontSizeScale; + } else { + scaledX = x / fontSizeScale; + scaledY = 0; + } + if (font.remeasure && width > 0) { + var measuredWidth = ctx.measureText(character).width * 1000 / fontSize * fontSizeScale; + if (width < measuredWidth && this.isFontSubpixelAAEnabled) { + var characterScaleX = width / measuredWidth; + restoreNeeded = true; + ctx.save(); + ctx.scale(characterScaleX, 1); + scaledX /= characterScaleX; + } else if (width !== measuredWidth) { + scaledX += (width - measuredWidth) / 2000 * fontSize / fontSizeScale; + } + } + if (glyph.isInFont || font.missingFile) { + if (simpleFillText && !accent) { + ctx.fillText(character, scaledX, scaledY); + } else { + this.paintChar(character, scaledX, scaledY); + if (accent) { + scaledAccentX = scaledX + accent.offset.x / fontSizeScale; + scaledAccentY = scaledY - accent.offset.y / fontSizeScale; + this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY); + } + } + } + var charWidth = width * widthAdvanceScale + spacing * fontDirection; + x += charWidth; + if (restoreNeeded) { + ctx.restore(); + } + } + if (vertical) { + current.y -= x * textHScale; + } else { + current.x += x * textHScale; + } + ctx.restore(); + }, + showType3Text: function CanvasGraphics_showType3Text(glyphs) { + var ctx = this.ctx; + var current = this.current; + var font = current.font; + var fontSize = current.fontSize; + var fontDirection = current.fontDirection; + var spacingDir = font.vertical ? 1 : -1; + var charSpacing = current.charSpacing; + var wordSpacing = current.wordSpacing; + var textHScale = current.textHScale * fontDirection; + var fontMatrix = current.fontMatrix || FONT_IDENTITY_MATRIX; + var glyphsLength = glyphs.length; + var isTextInvisible = current.textRenderingMode === TextRenderingMode.INVISIBLE; + var i, glyph, width, spacingLength; + if (isTextInvisible || fontSize === 0) { + return; + } + this.cachedGetSinglePixelWidth = null; + ctx.save(); + ctx.transform.apply(ctx, current.textMatrix); + ctx.translate(current.x, current.y); + ctx.scale(textHScale, fontDirection); + for (i = 0; i < glyphsLength; ++i) { + glyph = glyphs[i]; + if (isNum(glyph)) { + spacingLength = spacingDir * glyph * fontSize / 1000; + this.ctx.translate(spacingLength, 0); + current.x += spacingLength * textHScale; + continue; + } + var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; + var operatorList = font.charProcOperatorList[glyph.operatorListId]; + if (!operatorList) { + warn('Type3 character \"' + glyph.operatorListId + '\" is not available'); + continue; + } + this.processingType3 = glyph; + this.save(); + ctx.scale(fontSize, fontSize); + ctx.transform.apply(ctx, fontMatrix); + this.executeOperatorList(operatorList); + this.restore(); + var transformed = Util.applyTransform([ + glyph.width, + 0 + ], fontMatrix); + width = transformed[0] * fontSize + spacing; + ctx.translate(width, 0); + current.x += width * textHScale; + } + ctx.restore(); + this.processingType3 = null; + }, + setCharWidth: function CanvasGraphics_setCharWidth(xWidth, yWidth) { + }, + setCharWidthAndBounds: function CanvasGraphics_setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) { + this.ctx.rect(llx, lly, urx - llx, ury - lly); + this.clip(); + this.endPath(); + }, + getColorN_Pattern: function CanvasGraphics_getColorN_Pattern(IR) { + var pattern; + if (IR[0] === 'TilingPattern') { + var color = IR[1]; + var baseTransform = this.baseTransform || this.ctx.mozCurrentTransform.slice(); + var self = this; + var canvasGraphicsFactory = { + createCanvasGraphics: function (ctx) { + return new CanvasGraphics(ctx, self.commonObjs, self.objs); + } + }; + pattern = new TilingPattern(IR, color, this.ctx, canvasGraphicsFactory, baseTransform); + } else { + pattern = getShadingPatternFromIR(IR); + } + return pattern; + }, + setStrokeColorN: function CanvasGraphics_setStrokeColorN() { + this.current.strokeColor = this.getColorN_Pattern(arguments); + }, + setFillColorN: function CanvasGraphics_setFillColorN() { + this.current.fillColor = this.getColorN_Pattern(arguments); + this.current.patternFill = true; + }, + setStrokeRGBColor: function CanvasGraphics_setStrokeRGBColor(r, g, b) { + var color = Util.makeCssRgb(r, g, b); + this.ctx.strokeStyle = color; + this.current.strokeColor = color; + }, + setFillRGBColor: function CanvasGraphics_setFillRGBColor(r, g, b) { + var color = Util.makeCssRgb(r, g, b); + this.ctx.fillStyle = color; + this.current.fillColor = color; + this.current.patternFill = false; + }, + shadingFill: function CanvasGraphics_shadingFill(patternIR) { + var ctx = this.ctx; + this.save(); + var pattern = getShadingPatternFromIR(patternIR); + ctx.fillStyle = pattern.getPattern(ctx, this, true); + var inv = ctx.mozCurrentTransformInverse; + if (inv) { + var canvas = ctx.canvas; + var width = canvas.width; + var height = canvas.height; + var bl = Util.applyTransform([ + 0, + 0 + ], inv); + var br = Util.applyTransform([ + 0, + height + ], inv); + var ul = Util.applyTransform([ + width, + 0 + ], inv); + var ur = Util.applyTransform([ + width, + height + ], inv); + var x0 = Math.min(bl[0], br[0], ul[0], ur[0]); + var y0 = Math.min(bl[1], br[1], ul[1], ur[1]); + var x1 = Math.max(bl[0], br[0], ul[0], ur[0]); + var y1 = Math.max(bl[1], br[1], ul[1], ur[1]); + this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0); + } else { + this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10); + } + this.restore(); + }, + beginInlineImage: function CanvasGraphics_beginInlineImage() { + error('Should not call beginInlineImage'); + }, + beginImageData: function CanvasGraphics_beginImageData() { + error('Should not call beginImageData'); + }, + paintFormXObjectBegin: function CanvasGraphics_paintFormXObjectBegin(matrix, bbox) { + this.save(); + this.baseTransformStack.push(this.baseTransform); + if (isArray(matrix) && matrix.length === 6) { + this.transform.apply(this, matrix); + } + this.baseTransform = this.ctx.mozCurrentTransform; + if (isArray(bbox) && bbox.length === 4) { + var width = bbox[2] - bbox[0]; + var height = bbox[3] - bbox[1]; + this.ctx.rect(bbox[0], bbox[1], width, height); + this.clip(); + this.endPath(); + } + }, + paintFormXObjectEnd: function CanvasGraphics_paintFormXObjectEnd() { + this.restore(); + this.baseTransform = this.baseTransformStack.pop(); + }, + beginGroup: function CanvasGraphics_beginGroup(group) { + this.save(); + var currentCtx = this.ctx; + if (!group.isolated) { + info('TODO: Support non-isolated groups.'); + } + if (group.knockout) { + warn('Knockout groups not supported.'); + } + var currentTransform = currentCtx.mozCurrentTransform; + if (group.matrix) { + currentCtx.transform.apply(currentCtx, group.matrix); + } + assert(group.bbox, 'Bounding box is required.'); + var bounds = Util.getAxialAlignedBoundingBox(group.bbox, currentCtx.mozCurrentTransform); + var canvasBounds = [ + 0, + 0, + currentCtx.canvas.width, + currentCtx.canvas.height + ]; + bounds = Util.intersect(bounds, canvasBounds) || [ + 0, + 0, + 0, + 0 + ]; + var offsetX = Math.floor(bounds[0]); + var offsetY = Math.floor(bounds[1]); + var drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1); + var drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1); + var scaleX = 1, scaleY = 1; + if (drawnWidth > MAX_GROUP_SIZE) { + scaleX = drawnWidth / MAX_GROUP_SIZE; + drawnWidth = MAX_GROUP_SIZE; + } + if (drawnHeight > MAX_GROUP_SIZE) { + scaleY = drawnHeight / MAX_GROUP_SIZE; + drawnHeight = MAX_GROUP_SIZE; + } + var cacheId = 'groupAt' + this.groupLevel; + if (group.smask) { + cacheId += '_smask_' + this.smaskCounter++ % 2; + } + var scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true); + var groupCtx = scratchCanvas.context; + groupCtx.scale(1 / scaleX, 1 / scaleY); + groupCtx.translate(-offsetX, -offsetY); + groupCtx.transform.apply(groupCtx, currentTransform); + if (group.smask) { + this.smaskStack.push({ + canvas: scratchCanvas.canvas, + context: groupCtx, + offsetX: offsetX, + offsetY: offsetY, + scaleX: scaleX, + scaleY: scaleY, + subtype: group.smask.subtype, + backdrop: group.smask.backdrop, + transferMap: group.smask.transferMap || null, + startTransformInverse: null + }); + } else + { + currentCtx.setTransform(1, 0, 0, 1, 0, 0); + currentCtx.translate(offsetX, offsetY); + currentCtx.scale(scaleX, scaleY); + } + copyCtxState(currentCtx, groupCtx); + this.ctx = groupCtx; + this.setGState([ + [ + 'BM', + 'Normal' + ], + [ + 'ca', + 1 + ], + [ + 'CA', + 1 + ] + ]); + this.groupStack.push(currentCtx); + this.groupLevel++; + this.current.activeSMask = null; + }, + endGroup: function CanvasGraphics_endGroup(group) { + this.groupLevel--; + var groupCtx = this.ctx; + this.ctx = this.groupStack.pop(); + if (this.ctx.imageSmoothingEnabled !== undefined) { + this.ctx.imageSmoothingEnabled = false; + } else { + this.ctx.mozImageSmoothingEnabled = false; + } + if (group.smask) { + this.tempSMask = this.smaskStack.pop(); + } else { + this.ctx.drawImage(groupCtx.canvas, 0, 0); + } + this.restore(); + }, + beginAnnotations: function CanvasGraphics_beginAnnotations() { + this.save(); + this.current = new CanvasExtraState(); + if (this.baseTransform) { + this.ctx.setTransform.apply(this.ctx, this.baseTransform); + } + }, + endAnnotations: function CanvasGraphics_endAnnotations() { + this.restore(); + }, + beginAnnotation: function CanvasGraphics_beginAnnotation(rect, transform, matrix) { + this.save(); + if (isArray(rect) && rect.length === 4) { + var width = rect[2] - rect[0]; + var height = rect[3] - rect[1]; + this.ctx.rect(rect[0], rect[1], width, height); + this.clip(); + this.endPath(); + } + this.transform.apply(this, transform); + this.transform.apply(this, matrix); + }, + endAnnotation: function CanvasGraphics_endAnnotation() { + this.restore(); + }, + paintJpegXObject: function CanvasGraphics_paintJpegXObject(objId, w, h) { + var domImage = this.objs.get(objId); + if (!domImage) { + warn('Dependent image isn\'t ready yet'); + return; + } + this.save(); + var ctx = this.ctx; + ctx.scale(1 / w, -1 / h); + ctx.drawImage(domImage, 0, 0, domImage.width, domImage.height, 0, -h, w, h); + if (this.imageLayer) { + var currentTransform = ctx.mozCurrentTransformInverse; + var position = this.getCanvasPosition(0, 0); + this.imageLayer.appendImage({ + objId: objId, + left: position[0], + top: position[1], + width: w / currentTransform[0], + height: h / currentTransform[3] + }); + } + this.restore(); + }, + paintImageMaskXObject: function CanvasGraphics_paintImageMaskXObject(img) { + var ctx = this.ctx; + var width = img.width, height = img.height; + var fillColor = this.current.fillColor; + var isPatternFill = this.current.patternFill; + var glyph = this.processingType3; + if (COMPILE_TYPE3_GLYPHS && glyph && glyph.compiled === undefined) { + if (width <= MAX_SIZE_TO_COMPILE && height <= MAX_SIZE_TO_COMPILE) { + glyph.compiled = compileType3Glyph({ + data: img.data, + width: width, + height: height + }); + } else { + glyph.compiled = null; + } + } + if (glyph && glyph.compiled) { + glyph.compiled(ctx); + return; + } + var maskCanvas = this.cachedCanvases.getCanvas('maskCanvas', width, height); + var maskCtx = maskCanvas.context; + maskCtx.save(); + putBinaryImageMask(maskCtx, img); + maskCtx.globalCompositeOperation = 'source-in'; + maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor; + maskCtx.fillRect(0, 0, width, height); + maskCtx.restore(); + this.paintInlineImageXObject(maskCanvas.canvas); + }, + paintImageMaskXObjectRepeat: function CanvasGraphics_paintImageMaskXObjectRepeat(imgData, scaleX, scaleY, positions) { + var width = imgData.width; + var height = imgData.height; + var fillColor = this.current.fillColor; + var isPatternFill = this.current.patternFill; + var maskCanvas = this.cachedCanvases.getCanvas('maskCanvas', width, height); + var maskCtx = maskCanvas.context; + maskCtx.save(); + putBinaryImageMask(maskCtx, imgData); + maskCtx.globalCompositeOperation = 'source-in'; + maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor; + maskCtx.fillRect(0, 0, width, height); + maskCtx.restore(); + var ctx = this.ctx; + for (var i = 0, ii = positions.length; i < ii; i += 2) { + ctx.save(); + ctx.transform(scaleX, 0, 0, scaleY, positions[i], positions[i + 1]); + ctx.scale(1, -1); + ctx.drawImage(maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1); + ctx.restore(); + } + }, + paintImageMaskXObjectGroup: function CanvasGraphics_paintImageMaskXObjectGroup(images) { + var ctx = this.ctx; + var fillColor = this.current.fillColor; + var isPatternFill = this.current.patternFill; + for (var i = 0, ii = images.length; i < ii; i++) { + var image = images[i]; + var width = image.width, height = image.height; + var maskCanvas = this.cachedCanvases.getCanvas('maskCanvas', width, height); + var maskCtx = maskCanvas.context; + maskCtx.save(); + putBinaryImageMask(maskCtx, image); + maskCtx.globalCompositeOperation = 'source-in'; + maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor; + maskCtx.fillRect(0, 0, width, height); + maskCtx.restore(); + ctx.save(); + ctx.transform.apply(ctx, image.transform); + ctx.scale(1, -1); + ctx.drawImage(maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1); + ctx.restore(); + } + }, + paintImageXObject: function CanvasGraphics_paintImageXObject(objId) { + var imgData = this.objs.get(objId); + if (!imgData) { + warn('Dependent image isn\'t ready yet'); + return; + } + this.paintInlineImageXObject(imgData); + }, + paintImageXObjectRepeat: function CanvasGraphics_paintImageXObjectRepeat(objId, scaleX, scaleY, positions) { + var imgData = this.objs.get(objId); + if (!imgData) { + warn('Dependent image isn\'t ready yet'); + return; + } + var width = imgData.width; + var height = imgData.height; + var map = []; + for (var i = 0, ii = positions.length; i < ii; i += 2) { + map.push({ + transform: [ + scaleX, + 0, + 0, + scaleY, + positions[i], + positions[i + 1] + ], + x: 0, + y: 0, + w: width, + h: height + }); + } + this.paintInlineImageXObjectGroup(imgData, map); + }, + paintInlineImageXObject: function CanvasGraphics_paintInlineImageXObject(imgData) { + var width = imgData.width; + var height = imgData.height; + var ctx = this.ctx; + this.save(); + ctx.scale(1 / width, -1 / height); + var currentTransform = ctx.mozCurrentTransformInverse; + var a = currentTransform[0], b = currentTransform[1]; + var widthScale = Math.max(Math.sqrt(a * a + b * b), 1); + var c = currentTransform[2], d = currentTransform[3]; + var heightScale = Math.max(Math.sqrt(c * c + d * d), 1); + var imgToPaint, tmpCanvas; + if (imgData instanceof HTMLElement || !imgData.data) { + imgToPaint = imgData; + } else { + tmpCanvas = this.cachedCanvases.getCanvas('inlineImage', width, height); + var tmpCtx = tmpCanvas.context; + putBinaryImageData(tmpCtx, imgData); + imgToPaint = tmpCanvas.canvas; + } + var paintWidth = width, paintHeight = height; + var tmpCanvasId = 'prescale1'; + while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) { + var newWidth = paintWidth, newHeight = paintHeight; + if (widthScale > 2 && paintWidth > 1) { + newWidth = Math.ceil(paintWidth / 2); + widthScale /= paintWidth / newWidth; + } + if (heightScale > 2 && paintHeight > 1) { + newHeight = Math.ceil(paintHeight / 2); + heightScale /= paintHeight / newHeight; + } + tmpCanvas = this.cachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight); + tmpCtx = tmpCanvas.context; + tmpCtx.clearRect(0, 0, newWidth, newHeight); + tmpCtx.drawImage(imgToPaint, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight); + imgToPaint = tmpCanvas.canvas; + paintWidth = newWidth; + paintHeight = newHeight; + tmpCanvasId = tmpCanvasId === 'prescale1' ? 'prescale2' : 'prescale1'; + } + ctx.drawImage(imgToPaint, 0, 0, paintWidth, paintHeight, 0, -height, width, height); + if (this.imageLayer) { + var position = this.getCanvasPosition(0, -height); + this.imageLayer.appendImage({ + imgData: imgData, + left: position[0], + top: position[1], + width: width / currentTransform[0], + height: height / currentTransform[3] + }); + } + this.restore(); + }, + paintInlineImageXObjectGroup: function CanvasGraphics_paintInlineImageXObjectGroup(imgData, map) { + var ctx = this.ctx; + var w = imgData.width; + var h = imgData.height; + var tmpCanvas = this.cachedCanvases.getCanvas('inlineImage', w, h); + var tmpCtx = tmpCanvas.context; + putBinaryImageData(tmpCtx, imgData); + for (var i = 0, ii = map.length; i < ii; i++) { + var entry = map[i]; + ctx.save(); + ctx.transform.apply(ctx, entry.transform); + ctx.scale(1, -1); + ctx.drawImage(tmpCanvas.canvas, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1); + if (this.imageLayer) { + var position = this.getCanvasPosition(entry.x, entry.y); + this.imageLayer.appendImage({ + imgData: imgData, + left: position[0], + top: position[1], + width: w, + height: h + }); + } + ctx.restore(); + } + }, + paintSolidColorImageMask: function CanvasGraphics_paintSolidColorImageMask() { + this.ctx.fillRect(0, 0, 1, 1); + }, + paintXObject: function CanvasGraphics_paintXObject() { + warn('Unsupported \'paintXObject\' command.'); + }, + markPoint: function CanvasGraphics_markPoint(tag) { + }, + markPointProps: function CanvasGraphics_markPointProps(tag, properties) { + }, + beginMarkedContent: function CanvasGraphics_beginMarkedContent(tag) { + }, + beginMarkedContentProps: function CanvasGraphics_beginMarkedContentProps(tag, properties) { + }, + endMarkedContent: function CanvasGraphics_endMarkedContent() { + }, + beginCompat: function CanvasGraphics_beginCompat() { + }, + endCompat: function CanvasGraphics_endCompat() { + }, + consumePath: function CanvasGraphics_consumePath() { + var ctx = this.ctx; + if (this.pendingClip) { + if (this.pendingClip === EO_CLIP) { + if (ctx.mozFillRule !== undefined) { + ctx.mozFillRule = 'evenodd'; + ctx.clip(); + ctx.mozFillRule = 'nonzero'; + } else { + ctx.clip('evenodd'); + } + } else { + ctx.clip(); + } + this.pendingClip = null; + } + ctx.beginPath(); + }, + getSinglePixelWidth: function CanvasGraphics_getSinglePixelWidth(scale) { + if (this.cachedGetSinglePixelWidth === null) { + this.ctx.save(); + var inverse = this.ctx.mozCurrentTransformInverse; + this.ctx.restore(); + this.cachedGetSinglePixelWidth = Math.sqrt(Math.max(inverse[0] * inverse[0] + inverse[1] * inverse[1], inverse[2] * inverse[2] + inverse[3] * inverse[3])); + } + return this.cachedGetSinglePixelWidth; + }, + getCanvasPosition: function CanvasGraphics_getCanvasPosition(x, y) { + var transform = this.ctx.mozCurrentTransform; + return [ + transform[0] * x + transform[2] * y + transform[4], + transform[1] * x + transform[3] * y + transform[5] + ]; + } + }; + for (var op in OPS) { + CanvasGraphics.prototype[OPS[op]] = CanvasGraphics.prototype[op]; + } + return CanvasGraphics; + }(); + exports.CanvasGraphics = CanvasGraphics; + exports.createScratchCanvas = createScratchCanvas; + })); + (function (root, factory) { + factory(root.pdfjsDisplayAPI = {}, root.pdfjsSharedUtil, root.pdfjsDisplayFontLoader, root.pdfjsDisplayCanvas, root.pdfjsDisplayMetadata, root.pdfjsDisplayDOMUtils); + }(this, function (exports, sharedUtil, displayFontLoader, displayCanvas, displayMetadata, displayDOMUtils, amdRequire) { + var InvalidPDFException = sharedUtil.InvalidPDFException; + var MessageHandler = sharedUtil.MessageHandler; + var MissingPDFException = sharedUtil.MissingPDFException; + var PageViewport = sharedUtil.PageViewport; + var PasswordResponses = sharedUtil.PasswordResponses; + var PasswordException = sharedUtil.PasswordException; + var StatTimer = sharedUtil.StatTimer; + var UnexpectedResponseException = sharedUtil.UnexpectedResponseException; + var UnknownErrorException = sharedUtil.UnknownErrorException; + var Util = sharedUtil.Util; + var createPromiseCapability = sharedUtil.createPromiseCapability; + var error = sharedUtil.error; + var deprecated = sharedUtil.deprecated; + var getVerbosityLevel = sharedUtil.getVerbosityLevel; + var info = sharedUtil.info; + var isInt = sharedUtil.isInt; + var isArray = sharedUtil.isArray; + var isArrayBuffer = sharedUtil.isArrayBuffer; + var isSameOrigin = sharedUtil.isSameOrigin; + var loadJpegStream = sharedUtil.loadJpegStream; + var stringToBytes = sharedUtil.stringToBytes; + var globalScope = sharedUtil.globalScope; + var warn = sharedUtil.warn; + var FontFaceObject = displayFontLoader.FontFaceObject; + var FontLoader = displayFontLoader.FontLoader; + var CanvasGraphics = displayCanvas.CanvasGraphics; + var createScratchCanvas = displayCanvas.createScratchCanvas; + var Metadata = displayMetadata.Metadata; + var getDefaultSetting = displayDOMUtils.getDefaultSetting; + var DEFAULT_RANGE_CHUNK_SIZE = 65536; + var isWorkerDisabled = false; + var workerSrc; + var isPostMessageTransfersDisabled = false; + var fakeWorkerFilesLoader = null; + var useRequireEnsure = false; + if (typeof window === 'undefined') { + isWorkerDisabled = true; + if (typeof require.ensure === 'undefined') { + require.ensure = require('node-ensure'); + } + useRequireEnsure = true; + } + if (typeof __webpack_require__ !== 'undefined') { + useRequireEnsure = true; + } + if (typeof requirejs !== 'undefined' && requirejs.toUrl) { + workerSrc = requirejs.toUrl('pdfjs-dist/build/pdf.worker.js'); + } + var dynamicLoaderSupported = typeof requirejs !== 'undefined' && requirejs.load; + fakeWorkerFilesLoader = useRequireEnsure ? function (callback) { + require.ensure([], function () { + var worker = require('./pdf.worker.js'); + callback(worker.WorkerMessageHandler); + }); + } : dynamicLoaderSupported ? function (callback) { + requirejs(['pdfjs-dist/build/pdf.worker'], function (worker) { + callback(worker.WorkerMessageHandler); + }); + } : null; + function getDocument(src, pdfDataRangeTransport, passwordCallback, progressCallback) { + var task = new PDFDocumentLoadingTask(); + if (arguments.length > 1) { + deprecated('getDocument is called with pdfDataRangeTransport, ' + 'passwordCallback or progressCallback argument'); + } + if (pdfDataRangeTransport) { + if (!(pdfDataRangeTransport instanceof PDFDataRangeTransport)) { + pdfDataRangeTransport = Object.create(pdfDataRangeTransport); + pdfDataRangeTransport.length = src.length; + pdfDataRangeTransport.initialData = src.initialData; + if (!pdfDataRangeTransport.abort) { + pdfDataRangeTransport.abort = function () { + }; + } + } + src = Object.create(src); + src.range = pdfDataRangeTransport; + } + task.onPassword = passwordCallback || null; + task.onProgress = progressCallback || null; + var source; + if (typeof src === 'string') { + source = { url: src }; + } else if (isArrayBuffer(src)) { + source = { data: src }; + } else if (src instanceof PDFDataRangeTransport) { + source = { range: src }; + } else { + if (typeof src !== 'object') { + error('Invalid parameter in getDocument, need either Uint8Array, ' + 'string or a parameter object'); + } + if (!src.url && !src.data && !src.range) { + error('Invalid parameter object: need either .data, .range or .url'); + } + source = src; + } + var params = {}; + var rangeTransport = null; + var worker = null; + for (var key in source) { + if (key === 'url' && typeof window !== 'undefined') { + params[key] = new URL(source[key], window.location).href; + continue; + } else if (key === 'range') { + rangeTransport = source[key]; + continue; + } else if (key === 'worker') { + worker = source[key]; + continue; + } else if (key === 'data' && !(source[key] instanceof Uint8Array)) { + var pdfBytes = source[key]; + if (typeof pdfBytes === 'string') { + params[key] = stringToBytes(pdfBytes); + } else if (typeof pdfBytes === 'object' && pdfBytes !== null && !isNaN(pdfBytes.length)) { + params[key] = new Uint8Array(pdfBytes); + } else if (isArrayBuffer(pdfBytes)) { + params[key] = new Uint8Array(pdfBytes); + } else { + error('Invalid PDF binary data: either typed array, string or ' + 'array-like object is expected in the data property.'); + } + continue; + } + params[key] = source[key]; + } + params.rangeChunkSize = params.rangeChunkSize || DEFAULT_RANGE_CHUNK_SIZE; + if (!worker) { + worker = new PDFWorker(); + task._worker = worker; + } + var docId = task.docId; + worker.promise.then(function () { + if (task.destroyed) { + throw new Error('Loading aborted'); + } + return _fetchDocument(worker, params, rangeTransport, docId).then(function (workerId) { + if (task.destroyed) { + throw new Error('Loading aborted'); + } + var messageHandler = new MessageHandler(docId, workerId, worker.port); + var transport = new WorkerTransport(messageHandler, task, rangeTransport); + task._transport = transport; + messageHandler.send('Ready', null); + }); + }).catch(task._capability.reject); + return task; + } + function _fetchDocument(worker, source, pdfDataRangeTransport, docId) { + if (worker.destroyed) { + return Promise.reject(new Error('Worker was destroyed')); + } + source.disableAutoFetch = getDefaultSetting('disableAutoFetch'); + source.disableStream = getDefaultSetting('disableStream'); + source.chunkedViewerLoading = !!pdfDataRangeTransport; + if (pdfDataRangeTransport) { + source.length = pdfDataRangeTransport.length; + source.initialData = pdfDataRangeTransport.initialData; + } + return worker.messageHandler.sendWithPromise('GetDocRequest', { + docId: docId, + source: source, + disableRange: getDefaultSetting('disableRange'), + maxImageSize: getDefaultSetting('maxImageSize'), + cMapUrl: getDefaultSetting('cMapUrl'), + cMapPacked: getDefaultSetting('cMapPacked'), + disableFontFace: getDefaultSetting('disableFontFace'), + disableCreateObjectURL: getDefaultSetting('disableCreateObjectURL'), + postMessageTransfers: getDefaultSetting('postMessageTransfers') && !isPostMessageTransfersDisabled, + docBaseUrl: source.docBaseUrl + }).then(function (workerId) { + if (worker.destroyed) { + throw new Error('Worker was destroyed'); + } + return workerId; + }); + } + var PDFDocumentLoadingTask = function PDFDocumentLoadingTaskClosure() { + var nextDocumentId = 0; + function PDFDocumentLoadingTask() { + this._capability = createPromiseCapability(); + this._transport = null; + this._worker = null; + this.docId = 'd' + nextDocumentId++; + this.destroyed = false; + this.onPassword = null; + this.onProgress = null; + this.onUnsupportedFeature = null; + } + PDFDocumentLoadingTask.prototype = { + get promise() { + return this._capability.promise; + }, + destroy: function () { + this.destroyed = true; + var transportDestroyed = !this._transport ? Promise.resolve() : this._transport.destroy(); + return transportDestroyed.then(function () { + this._transport = null; + if (this._worker) { + this._worker.destroy(); + this._worker = null; + } + }.bind(this)); + }, + then: function PDFDocumentLoadingTask_then(onFulfilled, onRejected) { + return this.promise.then.apply(this.promise, arguments); + } + }; + return PDFDocumentLoadingTask; + }(); + var PDFDataRangeTransport = function pdfDataRangeTransportClosure() { + function PDFDataRangeTransport(length, initialData) { + this.length = length; + this.initialData = initialData; + this._rangeListeners = []; + this._progressListeners = []; + this._progressiveReadListeners = []; + this._readyCapability = createPromiseCapability(); + } + PDFDataRangeTransport.prototype = { + addRangeListener: function PDFDataRangeTransport_addRangeListener(listener) { + this._rangeListeners.push(listener); + }, + addProgressListener: function PDFDataRangeTransport_addProgressListener(listener) { + this._progressListeners.push(listener); + }, + addProgressiveReadListener: function PDFDataRangeTransport_addProgressiveReadListener(listener) { + this._progressiveReadListeners.push(listener); + }, + onDataRange: function PDFDataRangeTransport_onDataRange(begin, chunk) { + var listeners = this._rangeListeners; + for (var i = 0, n = listeners.length; i < n; ++i) { + listeners[i](begin, chunk); + } + }, + onDataProgress: function PDFDataRangeTransport_onDataProgress(loaded) { + this._readyCapability.promise.then(function () { + var listeners = this._progressListeners; + for (var i = 0, n = listeners.length; i < n; ++i) { + listeners[i](loaded); + } + }.bind(this)); + }, + onDataProgressiveRead: function PDFDataRangeTransport_onDataProgress(chunk) { + this._readyCapability.promise.then(function () { + var listeners = this._progressiveReadListeners; + for (var i = 0, n = listeners.length; i < n; ++i) { + listeners[i](chunk); + } + }.bind(this)); + }, + transportReady: function PDFDataRangeTransport_transportReady() { + this._readyCapability.resolve(); + }, + requestDataRange: function PDFDataRangeTransport_requestDataRange(begin, end) { + throw new Error('Abstract method PDFDataRangeTransport.requestDataRange'); + }, + abort: function PDFDataRangeTransport_abort() { + } + }; + return PDFDataRangeTransport; + }(); + var PDFDocumentProxy = function PDFDocumentProxyClosure() { + function PDFDocumentProxy(pdfInfo, transport, loadingTask) { + this.pdfInfo = pdfInfo; + this.transport = transport; + this.loadingTask = loadingTask; + } + PDFDocumentProxy.prototype = { + get numPages() { + return this.pdfInfo.numPages; + }, + get fingerprint() { + return this.pdfInfo.fingerprint; + }, + getPage: function PDFDocumentProxy_getPage(pageNumber) { + return this.transport.getPage(pageNumber); + }, + getPageIndex: function PDFDocumentProxy_getPageIndex(ref) { + return this.transport.getPageIndex(ref); + }, + getDestinations: function PDFDocumentProxy_getDestinations() { + return this.transport.getDestinations(); + }, + getDestination: function PDFDocumentProxy_getDestination(id) { + return this.transport.getDestination(id); + }, + getPageLabels: function PDFDocumentProxy_getPageLabels() { + return this.transport.getPageLabels(); + }, + getAttachments: function PDFDocumentProxy_getAttachments() { + return this.transport.getAttachments(); + }, + getJavaScript: function PDFDocumentProxy_getJavaScript() { + return this.transport.getJavaScript(); + }, + getOutline: function PDFDocumentProxy_getOutline() { + return this.transport.getOutline(); + }, + getMetadata: function PDFDocumentProxy_getMetadata() { + return this.transport.getMetadata(); + }, + getData: function PDFDocumentProxy_getData() { + return this.transport.getData(); + }, + getDownloadInfo: function PDFDocumentProxy_getDownloadInfo() { + return this.transport.downloadInfoCapability.promise; + }, + getStats: function PDFDocumentProxy_getStats() { + return this.transport.getStats(); + }, + cleanup: function PDFDocumentProxy_cleanup() { + this.transport.startCleanup(); + }, + destroy: function PDFDocumentProxy_destroy() { + return this.loadingTask.destroy(); + } + }; + return PDFDocumentProxy; + }(); + var PDFPageProxy = function PDFPageProxyClosure() { + function PDFPageProxy(pageIndex, pageInfo, transport) { + this.pageIndex = pageIndex; + this.pageInfo = pageInfo; + this.transport = transport; + this.stats = new StatTimer(); + this.stats.enabled = getDefaultSetting('enableStats'); + this.commonObjs = transport.commonObjs; + this.objs = new PDFObjects(); + this.cleanupAfterRender = false; + this.pendingCleanup = false; + this.intentStates = Object.create(null); + this.destroyed = false; + } + PDFPageProxy.prototype = { + get pageNumber() { + return this.pageIndex + 1; + }, + get rotate() { + return this.pageInfo.rotate; + }, + get ref() { + return this.pageInfo.ref; + }, + get userUnit() { + return this.pageInfo.userUnit; + }, + get view() { + return this.pageInfo.view; + }, + getViewport: function PDFPageProxy_getViewport(scale, rotate) { + if (arguments.length < 2) { + rotate = this.rotate; + } + return new PageViewport(this.view, scale, rotate, 0, 0); + }, + getAnnotations: function PDFPageProxy_getAnnotations(params) { + var intent = params && params.intent || null; + if (!this.annotationsPromise || this.annotationsIntent !== intent) { + this.annotationsPromise = this.transport.getAnnotations(this.pageIndex, intent); + this.annotationsIntent = intent; + } + return this.annotationsPromise; + }, + render: function PDFPageProxy_render(params) { + var stats = this.stats; + stats.time('Overall'); + this.pendingCleanup = false; + var renderingIntent = params.intent === 'print' ? 'print' : 'display'; + var renderInteractiveForms = params.renderInteractiveForms === true ? true : false; + if (!this.intentStates[renderingIntent]) { + this.intentStates[renderingIntent] = Object.create(null); + } + var intentState = this.intentStates[renderingIntent]; + if (!intentState.displayReadyCapability) { + intentState.receivingOperatorList = true; + intentState.displayReadyCapability = createPromiseCapability(); + intentState.operatorList = { + fnArray: [], + argsArray: [], + lastChunk: false + }; + this.stats.time('Page Request'); + this.transport.messageHandler.send('RenderPageRequest', { + pageIndex: this.pageNumber - 1, + intent: renderingIntent, + renderInteractiveForms: renderInteractiveForms + }); + } + var internalRenderTask = new InternalRenderTask(complete, params, this.objs, this.commonObjs, intentState.operatorList, this.pageNumber); + internalRenderTask.useRequestAnimationFrame = renderingIntent !== 'print'; + if (!intentState.renderTasks) { + intentState.renderTasks = []; + } + intentState.renderTasks.push(internalRenderTask); + var renderTask = internalRenderTask.task; + if (params.continueCallback) { + deprecated('render is used with continueCallback parameter'); + renderTask.onContinue = params.continueCallback; + } + var self = this; + intentState.displayReadyCapability.promise.then(function pageDisplayReadyPromise(transparency) { + if (self.pendingCleanup) { + complete(); + return; + } + stats.time('Rendering'); + internalRenderTask.initializeGraphics(transparency); + internalRenderTask.operatorListChanged(); + }, function pageDisplayReadPromiseError(reason) { + complete(reason); + }); + function complete(error) { + var i = intentState.renderTasks.indexOf(internalRenderTask); + if (i >= 0) { + intentState.renderTasks.splice(i, 1); + } + if (self.cleanupAfterRender) { + self.pendingCleanup = true; + } + self._tryCleanup(); + if (error) { + internalRenderTask.capability.reject(error); + } else { + internalRenderTask.capability.resolve(); + } + stats.timeEnd('Rendering'); + stats.timeEnd('Overall'); + } + return renderTask; + }, + getOperatorList: function PDFPageProxy_getOperatorList() { + function operatorListChanged() { + if (intentState.operatorList.lastChunk) { + intentState.opListReadCapability.resolve(intentState.operatorList); + var i = intentState.renderTasks.indexOf(opListTask); + if (i >= 0) { + intentState.renderTasks.splice(i, 1); + } + } + } + var renderingIntent = 'oplist'; + if (!this.intentStates[renderingIntent]) { + this.intentStates[renderingIntent] = Object.create(null); + } + var intentState = this.intentStates[renderingIntent]; + var opListTask; + if (!intentState.opListReadCapability) { + opListTask = {}; + opListTask.operatorListChanged = operatorListChanged; + intentState.receivingOperatorList = true; + intentState.opListReadCapability = createPromiseCapability(); + intentState.renderTasks = []; + intentState.renderTasks.push(opListTask); + intentState.operatorList = { + fnArray: [], + argsArray: [], + lastChunk: false + }; + this.transport.messageHandler.send('RenderPageRequest', { + pageIndex: this.pageIndex, + intent: renderingIntent + }); + } + return intentState.opListReadCapability.promise; + }, + getTextContent: function PDFPageProxy_getTextContent(params) { + return this.transport.messageHandler.sendWithPromise('GetTextContent', { + pageIndex: this.pageNumber - 1, + normalizeWhitespace: params && params.normalizeWhitespace === true ? true : false, + combineTextItems: params && params.disableCombineTextItems === true ? false : true + }); + }, + _destroy: function PDFPageProxy_destroy() { + this.destroyed = true; + this.transport.pageCache[this.pageIndex] = null; + var waitOn = []; + Object.keys(this.intentStates).forEach(function (intent) { + if (intent === 'oplist') { + return; + } + var intentState = this.intentStates[intent]; + intentState.renderTasks.forEach(function (renderTask) { + var renderCompleted = renderTask.capability.promise.catch(function () { + }); + waitOn.push(renderCompleted); + renderTask.cancel(); + }); + }, this); + this.objs.clear(); + this.annotationsPromise = null; + this.pendingCleanup = false; + return Promise.all(waitOn); + }, + destroy: function () { + deprecated('page destroy method, use cleanup() instead'); + this.cleanup(); + }, + cleanup: function PDFPageProxy_cleanup() { + this.pendingCleanup = true; + this._tryCleanup(); + }, + _tryCleanup: function PDFPageProxy_tryCleanup() { + if (!this.pendingCleanup || Object.keys(this.intentStates).some(function (intent) { + var intentState = this.intentStates[intent]; + return intentState.renderTasks.length !== 0 || intentState.receivingOperatorList; + }, this)) { + return; + } + Object.keys(this.intentStates).forEach(function (intent) { + delete this.intentStates[intent]; + }, this); + this.objs.clear(); + this.annotationsPromise = null; + this.pendingCleanup = false; + }, + _startRenderPage: function PDFPageProxy_startRenderPage(transparency, intent) { + var intentState = this.intentStates[intent]; + if (intentState.displayReadyCapability) { + intentState.displayReadyCapability.resolve(transparency); + } + }, + _renderPageChunk: function PDFPageProxy_renderPageChunk(operatorListChunk, intent) { + var intentState = this.intentStates[intent]; + var i, ii; + for (i = 0, ii = operatorListChunk.length; i < ii; i++) { + intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]); + intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]); + } + intentState.operatorList.lastChunk = operatorListChunk.lastChunk; + for (i = 0; i < intentState.renderTasks.length; i++) { + intentState.renderTasks[i].operatorListChanged(); + } + if (operatorListChunk.lastChunk) { + intentState.receivingOperatorList = false; + this._tryCleanup(); + } + } + }; + return PDFPageProxy; + }(); + var PDFWorker = function PDFWorkerClosure() { + var nextFakeWorkerId = 0; + function getWorkerSrc() { + if (typeof workerSrc !== 'undefined') { + return workerSrc; + } + if (getDefaultSetting('workerSrc')) { + return getDefaultSetting('workerSrc'); + } + if (pdfjsFilePath) { + return pdfjsFilePath.replace(/\.js$/i, '.worker.js'); + } + error('No PDFJS.workerSrc specified'); + } + var fakeWorkerFilesLoadedCapability; + function setupFakeWorkerGlobal() { + var WorkerMessageHandler; + if (fakeWorkerFilesLoadedCapability) { + return fakeWorkerFilesLoadedCapability.promise; + } + fakeWorkerFilesLoadedCapability = createPromiseCapability(); + var loader = fakeWorkerFilesLoader || function (callback) { + Util.loadScript(getWorkerSrc(), function () { + callback(window.pdfjsDistBuildPdfWorker.WorkerMessageHandler); + }); + }; + loader(fakeWorkerFilesLoadedCapability.resolve); + return fakeWorkerFilesLoadedCapability.promise; + } + function FakeWorkerPort(defer) { + this._listeners = []; + this._defer = defer; + this._deferred = Promise.resolve(undefined); + } + FakeWorkerPort.prototype = { + postMessage: function (obj, transfers) { + function cloneValue(value) { + if (typeof value !== 'object' || value === null) { + return value; + } + if (cloned.has(value)) { + return cloned.get(value); + } + var result; + var buffer; + if ((buffer = value.buffer) && isArrayBuffer(buffer)) { + var transferable = transfers && transfers.indexOf(buffer) >= 0; + if (value === buffer) { + result = value; + } else if (transferable) { + result = new value.constructor(buffer, value.byteOffset, value.byteLength); + } else { + result = new value.constructor(value); + } + cloned.set(value, result); + return result; + } + result = isArray(value) ? [] : {}; + cloned.set(value, result); + for (var i in value) { + var desc, p = value; + while (!(desc = Object.getOwnPropertyDescriptor(p, i))) { + p = Object.getPrototypeOf(p); + } + if (typeof desc.value === 'undefined' || typeof desc.value === 'function') { + continue; + } + result[i] = cloneValue(desc.value); + } + return result; + } + if (!this._defer) { + this._listeners.forEach(function (listener) { + listener.call(this, { data: obj }); + }, this); + return; + } + var cloned = new WeakMap(); + var e = { data: cloneValue(obj) }; + this._deferred.then(function () { + this._listeners.forEach(function (listener) { + listener.call(this, e); + }, this); + }.bind(this)); + }, + addEventListener: function (name, listener) { + this._listeners.push(listener); + }, + removeEventListener: function (name, listener) { + var i = this._listeners.indexOf(listener); + this._listeners.splice(i, 1); + }, + terminate: function () { + this._listeners = []; + } + }; + function createCDNWrapper(url) { + var wrapper = 'importScripts(\'' + url + '\');'; + return URL.createObjectURL(new Blob([wrapper])); + } + function PDFWorker(name) { + this.name = name; + this.destroyed = false; + this._readyCapability = createPromiseCapability(); + this._port = null; + this._webWorker = null; + this._messageHandler = null; + this._initialize(); + } + PDFWorker.prototype = { + get promise() { + return this._readyCapability.promise; + }, + get port() { + return this._port; + }, + get messageHandler() { + return this._messageHandler; + }, + _initialize: function PDFWorker_initialize() { + if (!isWorkerDisabled && !getDefaultSetting('disableWorker') && typeof Worker !== 'undefined') { + var workerSrc = getWorkerSrc(); + try { + if (!isSameOrigin(window.location.href, workerSrc)) { + workerSrc = createCDNWrapper(new URL(workerSrc, window.location).href); + } + var worker = new Worker(workerSrc); + var messageHandler = new MessageHandler('main', 'worker', worker); + var terminateEarly = function () { + worker.removeEventListener('error', onWorkerError); + messageHandler.destroy(); + worker.terminate(); + if (this.destroyed) { + this._readyCapability.reject(new Error('Worker was destroyed')); + } else { + this._setupFakeWorker(); + } + }.bind(this); + var onWorkerError = function (event) { + if (!this._webWorker) { + terminateEarly(); + } + }.bind(this); + worker.addEventListener('error', onWorkerError); + messageHandler.on('test', function PDFWorker_test(data) { + worker.removeEventListener('error', onWorkerError); + if (this.destroyed) { + terminateEarly(); + return; + } + var supportTypedArray = data && data.supportTypedArray; + if (supportTypedArray) { + this._messageHandler = messageHandler; + this._port = worker; + this._webWorker = worker; + if (!data.supportTransfers) { + isPostMessageTransfersDisabled = true; + } + this._readyCapability.resolve(); + messageHandler.send('configure', { verbosity: getVerbosityLevel() }); + } else { + this._setupFakeWorker(); + messageHandler.destroy(); + worker.terminate(); + } + }.bind(this)); + messageHandler.on('console_log', function (data) { + console.log.apply(console, data); + }); + messageHandler.on('console_error', function (data) { + console.error.apply(console, data); + }); + messageHandler.on('ready', function (data) { + worker.removeEventListener('error', onWorkerError); + if (this.destroyed) { + terminateEarly(); + return; + } + try { + sendTest(); + } catch (e) { + this._setupFakeWorker(); + } + }.bind(this)); + var sendTest = function () { + var postMessageTransfers = getDefaultSetting('postMessageTransfers') && !isPostMessageTransfersDisabled; + var testObj = new Uint8Array([postMessageTransfers ? 255 : 0]); + try { + messageHandler.send('test', testObj, [testObj.buffer]); + } catch (ex) { + info('Cannot use postMessage transfers'); + testObj[0] = 0; + messageHandler.send('test', testObj); + } + }; + sendTest(); + return; + } catch (e) { + info('The worker has been disabled.'); + } + } + this._setupFakeWorker(); + }, + _setupFakeWorker: function PDFWorker_setupFakeWorker() { + if (!isWorkerDisabled && !getDefaultSetting('disableWorker')) { + warn('Setting up fake worker.'); + isWorkerDisabled = true; + } + setupFakeWorkerGlobal().then(function (WorkerMessageHandler) { + if (this.destroyed) { + this._readyCapability.reject(new Error('Worker was destroyed')); + return; + } + var isTypedArraysPresent = Uint8Array !== Float32Array; + var port = new FakeWorkerPort(isTypedArraysPresent); + this._port = port; + var id = 'fake' + nextFakeWorkerId++; + var workerHandler = new MessageHandler(id + '_worker', id, port); + WorkerMessageHandler.setup(workerHandler, port); + var messageHandler = new MessageHandler(id, id + '_worker', port); + this._messageHandler = messageHandler; + this._readyCapability.resolve(); + }.bind(this)); + }, + destroy: function PDFWorker_destroy() { + this.destroyed = true; + if (this._webWorker) { + this._webWorker.terminate(); + this._webWorker = null; + } + this._port = null; + if (this._messageHandler) { + this._messageHandler.destroy(); + this._messageHandler = null; + } + } + }; + return PDFWorker; + }(); + var WorkerTransport = function WorkerTransportClosure() { + function WorkerTransport(messageHandler, loadingTask, pdfDataRangeTransport) { + this.messageHandler = messageHandler; + this.loadingTask = loadingTask; + this.pdfDataRangeTransport = pdfDataRangeTransport; + this.commonObjs = new PDFObjects(); + this.fontLoader = new FontLoader(loadingTask.docId); + this.destroyed = false; + this.destroyCapability = null; + this._passwordCapability = null; + this.pageCache = []; + this.pagePromises = []; + this.downloadInfoCapability = createPromiseCapability(); + this.setupMessageHandler(); + } + WorkerTransport.prototype = { + destroy: function WorkerTransport_destroy() { + if (this.destroyCapability) { + return this.destroyCapability.promise; + } + this.destroyed = true; + this.destroyCapability = createPromiseCapability(); + if (this._passwordCapability) { + this._passwordCapability.reject(new Error('Worker was destroyed during onPassword callback')); + } + var waitOn = []; + this.pageCache.forEach(function (page) { + if (page) { + waitOn.push(page._destroy()); + } + }); + this.pageCache = []; + this.pagePromises = []; + var self = this; + var terminated = this.messageHandler.sendWithPromise('Terminate', null); + waitOn.push(terminated); + Promise.all(waitOn).then(function () { + self.fontLoader.clear(); + if (self.pdfDataRangeTransport) { + self.pdfDataRangeTransport.abort(); + self.pdfDataRangeTransport = null; + } + if (self.messageHandler) { + self.messageHandler.destroy(); + self.messageHandler = null; + } + self.destroyCapability.resolve(); + }, this.destroyCapability.reject); + return this.destroyCapability.promise; + }, + setupMessageHandler: function WorkerTransport_setupMessageHandler() { + var messageHandler = this.messageHandler; + var loadingTask = this.loadingTask; + var pdfDataRangeTransport = this.pdfDataRangeTransport; + if (pdfDataRangeTransport) { + pdfDataRangeTransport.addRangeListener(function (begin, chunk) { + messageHandler.send('OnDataRange', { + begin: begin, + chunk: chunk + }); + }); + pdfDataRangeTransport.addProgressListener(function (loaded) { + messageHandler.send('OnDataProgress', { loaded: loaded }); + }); + pdfDataRangeTransport.addProgressiveReadListener(function (chunk) { + messageHandler.send('OnDataRange', { chunk: chunk }); + }); + messageHandler.on('RequestDataRange', function transportDataRange(data) { + pdfDataRangeTransport.requestDataRange(data.begin, data.end); + }, this); + } + messageHandler.on('GetDoc', function transportDoc(data) { + var pdfInfo = data.pdfInfo; + this.numPages = data.pdfInfo.numPages; + var loadingTask = this.loadingTask; + var pdfDocument = new PDFDocumentProxy(pdfInfo, this, loadingTask); + this.pdfDocument = pdfDocument; + loadingTask._capability.resolve(pdfDocument); + }, this); + messageHandler.on('PasswordRequest', function transportPasswordRequest(exception) { + this._passwordCapability = createPromiseCapability(); + if (loadingTask.onPassword) { + var updatePassword = function (password) { + this._passwordCapability.resolve({ password: password }); + }.bind(this); + loadingTask.onPassword(updatePassword, exception.code); + } else { + this._passwordCapability.reject(new PasswordException(exception.message, exception.code)); + } + return this._passwordCapability.promise; + }, this); + messageHandler.on('PasswordException', function transportPasswordException(exception) { + loadingTask._capability.reject(new PasswordException(exception.message, exception.code)); + }, this); + messageHandler.on('InvalidPDF', function transportInvalidPDF(exception) { + this.loadingTask._capability.reject(new InvalidPDFException(exception.message)); + }, this); + messageHandler.on('MissingPDF', function transportMissingPDF(exception) { + this.loadingTask._capability.reject(new MissingPDFException(exception.message)); + }, this); + messageHandler.on('UnexpectedResponse', function transportUnexpectedResponse(exception) { + this.loadingTask._capability.reject(new UnexpectedResponseException(exception.message, exception.status)); + }, this); + messageHandler.on('UnknownError', function transportUnknownError(exception) { + this.loadingTask._capability.reject(new UnknownErrorException(exception.message, exception.details)); + }, this); + messageHandler.on('DataLoaded', function transportPage(data) { + this.downloadInfoCapability.resolve(data); + }, this); + messageHandler.on('PDFManagerReady', function transportPage(data) { + if (this.pdfDataRangeTransport) { + this.pdfDataRangeTransport.transportReady(); + } + }, this); + messageHandler.on('StartRenderPage', function transportRender(data) { + if (this.destroyed) { + return; + } + var page = this.pageCache[data.pageIndex]; + page.stats.timeEnd('Page Request'); + page._startRenderPage(data.transparency, data.intent); + }, this); + messageHandler.on('RenderPageChunk', function transportRender(data) { + if (this.destroyed) { + return; + } + var page = this.pageCache[data.pageIndex]; + page._renderPageChunk(data.operatorList, data.intent); + }, this); + messageHandler.on('commonobj', function transportObj(data) { + if (this.destroyed) { + return; + } + var id = data[0]; + var type = data[1]; + if (this.commonObjs.hasData(id)) { + return; + } + switch (type) { + case 'Font': + var exportedData = data[2]; + if ('error' in exportedData) { + var exportedError = exportedData.error; + warn('Error during font loading: ' + exportedError); + this.commonObjs.resolve(id, exportedError); + break; + } + var fontRegistry = null; + if (getDefaultSetting('pdfBug') && globalScope.FontInspector && globalScope['FontInspector'].enabled) { + fontRegistry = { + registerFont: function (font, url) { + globalScope['FontInspector'].fontAdded(font, url); + } + }; + } + var font = new FontFaceObject(exportedData, { + isEvalSuported: getDefaultSetting('isEvalSupported'), + disableFontFace: getDefaultSetting('disableFontFace'), + fontRegistry: fontRegistry + }); + this.fontLoader.bind([font], function fontReady(fontObjs) { + this.commonObjs.resolve(id, font); + }.bind(this)); + break; + case 'FontPath': + this.commonObjs.resolve(id, data[2]); + break; + default: + error('Got unknown common object type ' + type); + } + }, this); + messageHandler.on('obj', function transportObj(data) { + if (this.destroyed) { + return; + } + var id = data[0]; + var pageIndex = data[1]; + var type = data[2]; + var pageProxy = this.pageCache[pageIndex]; + var imageData; + if (pageProxy.objs.hasData(id)) { + return; + } + switch (type) { + case 'JpegStream': + imageData = data[3]; + loadJpegStream(id, imageData, pageProxy.objs); + break; + case 'Image': + imageData = data[3]; + pageProxy.objs.resolve(id, imageData); + var MAX_IMAGE_SIZE_TO_STORE = 8000000; + if (imageData && 'data' in imageData && imageData.data.length > MAX_IMAGE_SIZE_TO_STORE) { + pageProxy.cleanupAfterRender = true; + } + break; + default: + error('Got unknown object type ' + type); + } + }, this); + messageHandler.on('DocProgress', function transportDocProgress(data) { + if (this.destroyed) { + return; + } + var loadingTask = this.loadingTask; + if (loadingTask.onProgress) { + loadingTask.onProgress({ + loaded: data.loaded, + total: data.total + }); + } + }, this); + messageHandler.on('PageError', function transportError(data) { + if (this.destroyed) { + return; + } + var page = this.pageCache[data.pageNum - 1]; + var intentState = page.intentStates[data.intent]; + if (intentState.displayReadyCapability) { + intentState.displayReadyCapability.reject(data.error); + } else { + error(data.error); + } + if (intentState.operatorList) { + intentState.operatorList.lastChunk = true; + for (var i = 0; i < intentState.renderTasks.length; i++) { + intentState.renderTasks[i].operatorListChanged(); + } + } + }, this); + messageHandler.on('UnsupportedFeature', function transportUnsupportedFeature(data) { + if (this.destroyed) { + return; + } + var featureId = data.featureId; + var loadingTask = this.loadingTask; + if (loadingTask.onUnsupportedFeature) { + loadingTask.onUnsupportedFeature(featureId); + } + _UnsupportedManager.notify(featureId); + }, this); + messageHandler.on('JpegDecode', function (data) { + if (this.destroyed) { + return Promise.reject(new Error('Worker was destroyed')); + } + var imageUrl = data[0]; + var components = data[1]; + if (components !== 3 && components !== 1) { + return Promise.reject(new Error('Only 3 components or 1 component can be returned')); + } + return new Promise(function (resolve, reject) { + var img = new Image(); + img.onload = function () { + var width = img.width; + var height = img.height; + var size = width * height; + var rgbaLength = size * 4; + var buf = new Uint8Array(size * components); + var tmpCanvas = createScratchCanvas(width, height); + var tmpCtx = tmpCanvas.getContext('2d'); + tmpCtx.drawImage(img, 0, 0); + var data = tmpCtx.getImageData(0, 0, width, height).data; + var i, j; + if (components === 3) { + for (i = 0, j = 0; i < rgbaLength; i += 4, j += 3) { + buf[j] = data[i]; + buf[j + 1] = data[i + 1]; + buf[j + 2] = data[i + 2]; + } + } else if (components === 1) { + for (i = 0, j = 0; i < rgbaLength; i += 4, j++) { + buf[j] = data[i]; + } + } + resolve({ + data: buf, + width: width, + height: height + }); + }; + img.onerror = function () { + reject(new Error('JpegDecode failed to load image')); + }; + img.src = imageUrl; + }); + }, this); + }, + getData: function WorkerTransport_getData() { + return this.messageHandler.sendWithPromise('GetData', null); + }, + getPage: function WorkerTransport_getPage(pageNumber, capability) { + if (!isInt(pageNumber) || pageNumber <= 0 || pageNumber > this.numPages) { + return Promise.reject(new Error('Invalid page request')); + } + var pageIndex = pageNumber - 1; + if (pageIndex in this.pagePromises) { + return this.pagePromises[pageIndex]; + } + var promise = this.messageHandler.sendWithPromise('GetPage', { pageIndex: pageIndex }).then(function (pageInfo) { + if (this.destroyed) { + throw new Error('Transport destroyed'); + } + var page = new PDFPageProxy(pageIndex, pageInfo, this); + this.pageCache[pageIndex] = page; + return page; + }.bind(this)); + this.pagePromises[pageIndex] = promise; + return promise; + }, + getPageIndex: function WorkerTransport_getPageIndexByRef(ref) { + return this.messageHandler.sendWithPromise('GetPageIndex', { ref: ref }).catch(function (reason) { + return Promise.reject(new Error(reason)); + }); + }, + getAnnotations: function WorkerTransport_getAnnotations(pageIndex, intent) { + return this.messageHandler.sendWithPromise('GetAnnotations', { + pageIndex: pageIndex, + intent: intent + }); + }, + getDestinations: function WorkerTransport_getDestinations() { + return this.messageHandler.sendWithPromise('GetDestinations', null); + }, + getDestination: function WorkerTransport_getDestination(id) { + return this.messageHandler.sendWithPromise('GetDestination', { id: id }); + }, + getPageLabels: function WorkerTransport_getPageLabels() { + return this.messageHandler.sendWithPromise('GetPageLabels', null); + }, + getAttachments: function WorkerTransport_getAttachments() { + return this.messageHandler.sendWithPromise('GetAttachments', null); + }, + getJavaScript: function WorkerTransport_getJavaScript() { + return this.messageHandler.sendWithPromise('GetJavaScript', null); + }, + getOutline: function WorkerTransport_getOutline() { + return this.messageHandler.sendWithPromise('GetOutline', null); + }, + getMetadata: function WorkerTransport_getMetadata() { + return this.messageHandler.sendWithPromise('GetMetadata', null).then(function transportMetadata(results) { + return { + info: results[0], + metadata: results[1] ? new Metadata(results[1]) : null + }; + }); + }, + getStats: function WorkerTransport_getStats() { + return this.messageHandler.sendWithPromise('GetStats', null); + }, + startCleanup: function WorkerTransport_startCleanup() { + this.messageHandler.sendWithPromise('Cleanup', null).then(function endCleanup() { + for (var i = 0, ii = this.pageCache.length; i < ii; i++) { + var page = this.pageCache[i]; + if (page) { + page.cleanup(); + } + } + this.commonObjs.clear(); + this.fontLoader.clear(); + }.bind(this)); + } + }; + return WorkerTransport; + }(); + var PDFObjects = function PDFObjectsClosure() { + function PDFObjects() { + this.objs = Object.create(null); + } + PDFObjects.prototype = { + ensureObj: function PDFObjects_ensureObj(objId) { + if (this.objs[objId]) { + return this.objs[objId]; + } + var obj = { + capability: createPromiseCapability(), + data: null, + resolved: false + }; + this.objs[objId] = obj; + return obj; + }, + get: function PDFObjects_get(objId, callback) { + if (callback) { + this.ensureObj(objId).capability.promise.then(callback); + return null; + } + var obj = this.objs[objId]; + if (!obj || !obj.resolved) { + error('Requesting object that isn\'t resolved yet ' + objId); + } + return obj.data; + }, + resolve: function PDFObjects_resolve(objId, data) { + var obj = this.ensureObj(objId); + obj.resolved = true; + obj.data = data; + obj.capability.resolve(data); + }, + isResolved: function PDFObjects_isResolved(objId) { + var objs = this.objs; + if (!objs[objId]) { + return false; + } + return objs[objId].resolved; + }, + hasData: function PDFObjects_hasData(objId) { + return this.isResolved(objId); + }, + getData: function PDFObjects_getData(objId) { + var objs = this.objs; + if (!objs[objId] || !objs[objId].resolved) { + return null; + } + return objs[objId].data; + }, + clear: function PDFObjects_clear() { + this.objs = Object.create(null); + } + }; + return PDFObjects; + }(); + var RenderTask = function RenderTaskClosure() { + function RenderTask(internalRenderTask) { + this._internalRenderTask = internalRenderTask; + this.onContinue = null; + } + RenderTask.prototype = { + get promise() { + return this._internalRenderTask.capability.promise; + }, + cancel: function RenderTask_cancel() { + this._internalRenderTask.cancel(); + }, + then: function RenderTask_then(onFulfilled, onRejected) { + return this.promise.then.apply(this.promise, arguments); + } + }; + return RenderTask; + }(); + var InternalRenderTask = function InternalRenderTaskClosure() { + function InternalRenderTask(callback, params, objs, commonObjs, operatorList, pageNumber) { + this.callback = callback; + this.params = params; + this.objs = objs; + this.commonObjs = commonObjs; + this.operatorListIdx = null; + this.operatorList = operatorList; + this.pageNumber = pageNumber; + this.running = false; + this.graphicsReadyCallback = null; + this.graphicsReady = false; + this.useRequestAnimationFrame = false; + this.cancelled = false; + this.capability = createPromiseCapability(); + this.task = new RenderTask(this); + this._continueBound = this._continue.bind(this); + this._scheduleNextBound = this._scheduleNext.bind(this); + this._nextBound = this._next.bind(this); + } + InternalRenderTask.prototype = { + initializeGraphics: function InternalRenderTask_initializeGraphics(transparency) { + if (this.cancelled) { + return; + } + if (getDefaultSetting('pdfBug') && globalScope.StepperManager && globalScope.StepperManager.enabled) { + this.stepper = globalScope.StepperManager.create(this.pageNumber - 1); + this.stepper.init(this.operatorList); + this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint(); + } + var params = this.params; + this.gfx = new CanvasGraphics(params.canvasContext, this.commonObjs, this.objs, params.imageLayer); + this.gfx.beginDrawing(params.transform, params.viewport, transparency); + this.operatorListIdx = 0; + this.graphicsReady = true; + if (this.graphicsReadyCallback) { + this.graphicsReadyCallback(); + } + }, + cancel: function InternalRenderTask_cancel() { + this.running = false; + this.cancelled = true; + this.callback('cancelled'); + }, + operatorListChanged: function InternalRenderTask_operatorListChanged() { + if (!this.graphicsReady) { + if (!this.graphicsReadyCallback) { + this.graphicsReadyCallback = this._continueBound; + } + return; + } + if (this.stepper) { + this.stepper.updateOperatorList(this.operatorList); + } + if (this.running) { + return; + } + this._continue(); + }, + _continue: function InternalRenderTask__continue() { + this.running = true; + if (this.cancelled) { + return; + } + if (this.task.onContinue) { + this.task.onContinue(this._scheduleNextBound); + } else { + this._scheduleNext(); + } + }, + _scheduleNext: function InternalRenderTask__scheduleNext() { + if (this.useRequestAnimationFrame && typeof window !== 'undefined') { + window.requestAnimationFrame(this._nextBound); + } else { + Promise.resolve(undefined).then(this._nextBound); + } + }, + _next: function InternalRenderTask__next() { + if (this.cancelled) { + return; + } + this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper); + if (this.operatorListIdx === this.operatorList.argsArray.length) { + this.running = false; + if (this.operatorList.lastChunk) { + this.gfx.endDrawing(); + this.callback(); + } + } + } + }; + return InternalRenderTask; + }(); + var _UnsupportedManager = function UnsupportedManagerClosure() { + var listeners = []; + return { + listen: function (cb) { + deprecated('Global UnsupportedManager.listen is used: ' + ' use PDFDocumentLoadingTask.onUnsupportedFeature instead'); + listeners.push(cb); + }, + notify: function (featureId) { + for (var i = 0, ii = listeners.length; i < ii; i++) { + listeners[i](featureId); + } + } + }; + }(); + if (typeof pdfjsVersion !== 'undefined') { + exports.version = pdfjsVersion; + } + if (typeof pdfjsBuild !== 'undefined') { + exports.build = pdfjsBuild; + } + exports.getDocument = getDocument; + exports.PDFDataRangeTransport = PDFDataRangeTransport; + exports.PDFWorker = PDFWorker; + exports.PDFDocumentProxy = PDFDocumentProxy; + exports.PDFPageProxy = PDFPageProxy; + exports._UnsupportedManager = _UnsupportedManager; + })); + (function (root, factory) { + factory(root.pdfjsDisplayGlobal = {}, root.pdfjsSharedUtil, root.pdfjsDisplayDOMUtils, root.pdfjsDisplayAPI, root.pdfjsDisplayAnnotationLayer, root.pdfjsDisplayTextLayer, root.pdfjsDisplayMetadata, root.pdfjsDisplaySVG); + }(this, function (exports, sharedUtil, displayDOMUtils, displayAPI, displayAnnotationLayer, displayTextLayer, displayMetadata, displaySVG) { + var globalScope = sharedUtil.globalScope; + var deprecated = sharedUtil.deprecated; + var warn = sharedUtil.warn; + var LinkTarget = displayDOMUtils.LinkTarget; + var DEFAULT_LINK_REL = displayDOMUtils.DEFAULT_LINK_REL; + var isWorker = typeof window === 'undefined'; + if (!globalScope.PDFJS) { + globalScope.PDFJS = {}; + } + var PDFJS = globalScope.PDFJS; + if (typeof pdfjsVersion !== 'undefined') { + PDFJS.version = pdfjsVersion; + } + if (typeof pdfjsBuild !== 'undefined') { + PDFJS.build = pdfjsBuild; + } + PDFJS.pdfBug = false; + if (PDFJS.verbosity !== undefined) { + sharedUtil.setVerbosityLevel(PDFJS.verbosity); + } + delete PDFJS.verbosity; + Object.defineProperty(PDFJS, 'verbosity', { + get: function () { + return sharedUtil.getVerbosityLevel(); + }, + set: function (level) { + sharedUtil.setVerbosityLevel(level); + }, + enumerable: true, + configurable: true + }); + PDFJS.VERBOSITY_LEVELS = sharedUtil.VERBOSITY_LEVELS; + PDFJS.OPS = sharedUtil.OPS; + PDFJS.UNSUPPORTED_FEATURES = sharedUtil.UNSUPPORTED_FEATURES; + PDFJS.isValidUrl = displayDOMUtils.isValidUrl; + PDFJS.shadow = sharedUtil.shadow; + PDFJS.createBlob = sharedUtil.createBlob; + PDFJS.createObjectURL = function PDFJS_createObjectURL(data, contentType) { + return sharedUtil.createObjectURL(data, contentType, PDFJS.disableCreateObjectURL); + }; + Object.defineProperty(PDFJS, 'isLittleEndian', { + configurable: true, + get: function PDFJS_isLittleEndian() { + var value = sharedUtil.isLittleEndian(); + return sharedUtil.shadow(PDFJS, 'isLittleEndian', value); + } + }); + PDFJS.removeNullCharacters = sharedUtil.removeNullCharacters; + PDFJS.PasswordResponses = sharedUtil.PasswordResponses; + PDFJS.PasswordException = sharedUtil.PasswordException; + PDFJS.UnknownErrorException = sharedUtil.UnknownErrorException; + PDFJS.InvalidPDFException = sharedUtil.InvalidPDFException; + PDFJS.MissingPDFException = sharedUtil.MissingPDFException; + PDFJS.UnexpectedResponseException = sharedUtil.UnexpectedResponseException; + PDFJS.Util = sharedUtil.Util; + PDFJS.PageViewport = sharedUtil.PageViewport; + PDFJS.createPromiseCapability = sharedUtil.createPromiseCapability; + PDFJS.maxImageSize = PDFJS.maxImageSize === undefined ? -1 : PDFJS.maxImageSize; + PDFJS.cMapUrl = PDFJS.cMapUrl === undefined ? null : PDFJS.cMapUrl; + PDFJS.cMapPacked = PDFJS.cMapPacked === undefined ? false : PDFJS.cMapPacked; + PDFJS.disableFontFace = PDFJS.disableFontFace === undefined ? false : PDFJS.disableFontFace; + PDFJS.imageResourcesPath = PDFJS.imageResourcesPath === undefined ? '' : PDFJS.imageResourcesPath; + PDFJS.disableWorker = PDFJS.disableWorker === undefined ? false : PDFJS.disableWorker; + PDFJS.workerSrc = PDFJS.workerSrc === undefined ? null : PDFJS.workerSrc; + PDFJS.disableRange = PDFJS.disableRange === undefined ? false : PDFJS.disableRange; + PDFJS.disableStream = PDFJS.disableStream === undefined ? false : PDFJS.disableStream; + PDFJS.disableAutoFetch = PDFJS.disableAutoFetch === undefined ? false : PDFJS.disableAutoFetch; + PDFJS.pdfBug = PDFJS.pdfBug === undefined ? false : PDFJS.pdfBug; + PDFJS.postMessageTransfers = PDFJS.postMessageTransfers === undefined ? true : PDFJS.postMessageTransfers; + PDFJS.disableCreateObjectURL = PDFJS.disableCreateObjectURL === undefined ? false : PDFJS.disableCreateObjectURL; + PDFJS.disableWebGL = PDFJS.disableWebGL === undefined ? true : PDFJS.disableWebGL; + PDFJS.externalLinkTarget = PDFJS.externalLinkTarget === undefined ? LinkTarget.NONE : PDFJS.externalLinkTarget; + PDFJS.externalLinkRel = PDFJS.externalLinkRel === undefined ? DEFAULT_LINK_REL : PDFJS.externalLinkRel; + PDFJS.isEvalSupported = PDFJS.isEvalSupported === undefined ? true : PDFJS.isEvalSupported; + var savedOpenExternalLinksInNewWindow = PDFJS.openExternalLinksInNewWindow; + delete PDFJS.openExternalLinksInNewWindow; + Object.defineProperty(PDFJS, 'openExternalLinksInNewWindow', { + get: function () { + return PDFJS.externalLinkTarget === LinkTarget.BLANK; + }, + set: function (value) { + if (value) { + deprecated('PDFJS.openExternalLinksInNewWindow, please use ' + '"PDFJS.externalLinkTarget = PDFJS.LinkTarget.BLANK" instead.'); + } + if (PDFJS.externalLinkTarget !== LinkTarget.NONE) { + warn('PDFJS.externalLinkTarget is already initialized'); + return; + } + PDFJS.externalLinkTarget = value ? LinkTarget.BLANK : LinkTarget.NONE; + }, + enumerable: true, + configurable: true + }); + if (savedOpenExternalLinksInNewWindow) { + PDFJS.openExternalLinksInNewWindow = savedOpenExternalLinksInNewWindow; + } + PDFJS.getDocument = displayAPI.getDocument; + PDFJS.PDFDataRangeTransport = displayAPI.PDFDataRangeTransport; + PDFJS.PDFWorker = displayAPI.PDFWorker; + Object.defineProperty(PDFJS, 'hasCanvasTypedArrays', { + configurable: true, + get: function PDFJS_hasCanvasTypedArrays() { + var value = displayDOMUtils.hasCanvasTypedArrays(); + return sharedUtil.shadow(PDFJS, 'hasCanvasTypedArrays', value); + } + }); + PDFJS.CustomStyle = displayDOMUtils.CustomStyle; + PDFJS.LinkTarget = LinkTarget; + PDFJS.addLinkAttributes = displayDOMUtils.addLinkAttributes; + PDFJS.getFilenameFromUrl = displayDOMUtils.getFilenameFromUrl; + PDFJS.isExternalLinkTargetSet = displayDOMUtils.isExternalLinkTargetSet; + PDFJS.AnnotationLayer = displayAnnotationLayer.AnnotationLayer; + PDFJS.renderTextLayer = displayTextLayer.renderTextLayer; + PDFJS.Metadata = displayMetadata.Metadata; + PDFJS.SVGGraphics = displaySVG.SVGGraphics; + PDFJS.UnsupportedManager = displayAPI._UnsupportedManager; + exports.globalScope = globalScope; + exports.isWorker = isWorker; + exports.PDFJS = globalScope.PDFJS; + })); + }.call(pdfjsLibs)); + exports.PDFJS = pdfjsLibs.pdfjsDisplayGlobal.PDFJS; + exports.build = pdfjsLibs.pdfjsDisplayAPI.build; + exports.version = pdfjsLibs.pdfjsDisplayAPI.version; + exports.getDocument = pdfjsLibs.pdfjsDisplayAPI.getDocument; + exports.PDFDataRangeTransport = pdfjsLibs.pdfjsDisplayAPI.PDFDataRangeTransport; + exports.PDFWorker = pdfjsLibs.pdfjsDisplayAPI.PDFWorker; + exports.renderTextLayer = pdfjsLibs.pdfjsDisplayTextLayer.renderTextLayer; + exports.AnnotationLayer = pdfjsLibs.pdfjsDisplayAnnotationLayer.AnnotationLayer; + exports.CustomStyle = pdfjsLibs.pdfjsDisplayDOMUtils.CustomStyle; + exports.PasswordResponses = pdfjsLibs.pdfjsSharedUtil.PasswordResponses; + exports.InvalidPDFException = pdfjsLibs.pdfjsSharedUtil.InvalidPDFException; + exports.MissingPDFException = pdfjsLibs.pdfjsSharedUtil.MissingPDFException; + exports.SVGGraphics = pdfjsLibs.pdfjsDisplaySVG.SVGGraphics; + exports.UnexpectedResponseException = pdfjsLibs.pdfjsSharedUtil.UnexpectedResponseException; + exports.OPS = pdfjsLibs.pdfjsSharedUtil.OPS; + exports.UNSUPPORTED_FEATURES = pdfjsLibs.pdfjsSharedUtil.UNSUPPORTED_FEATURES; + exports.isValidUrl = pdfjsLibs.pdfjsDisplayDOMUtils.isValidUrl; + exports.createValidAbsoluteUrl = pdfjsLibs.pdfjsSharedUtil.createValidAbsoluteUrl; + exports.createObjectURL = pdfjsLibs.pdfjsSharedUtil.createObjectURL; + exports.removeNullCharacters = pdfjsLibs.pdfjsSharedUtil.removeNullCharacters; + exports.shadow = pdfjsLibs.pdfjsSharedUtil.shadow; + exports.createBlob = pdfjsLibs.pdfjsSharedUtil.createBlob; + exports.getFilenameFromUrl = pdfjsLibs.pdfjsDisplayDOMUtils.getFilenameFromUrl; + exports.addLinkAttributes = pdfjsLibs.pdfjsDisplayDOMUtils.addLinkAttributes; +})); \ No newline at end of file diff --git a/qdntz/inc/tzzc/canvas/pdf.worker.js b/qdntz/inc/tzzc/canvas/pdf.worker.js new file mode 100644 index 0000000..ddb7618 --- /dev/null +++ b/qdntz/inc/tzzc/canvas/pdf.worker.js @@ -0,0 +1,50501 @@ +/* Copyright 2012 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +(function (root, factory) { + 'use strict'; + if (typeof define === 'function' && define.amd) { + define('pdfjs-dist/build/pdf.worker', ['exports'], factory); + } else if (typeof exports !== 'undefined') { + factory(exports); + } else { + factory(root['pdfjsDistBuildPdfWorker'] = {}); + } +}(this, function (exports) { + 'use strict'; + var pdfjsVersion = '1.7.225'; + var pdfjsBuild = '17d135f'; + var pdfjsFilePath = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : null; + var pdfjsLibs = {}; + (function pdfjsWrapper() { + (function (root, factory) { + factory(root.pdfjsCoreArithmeticDecoder = {}); + }(this, function (exports) { + var ArithmeticDecoder = function ArithmeticDecoderClosure() { + var QeTable = [ + { + qe: 0x5601, + nmps: 1, + nlps: 1, + switchFlag: 1 + }, + { + qe: 0x3401, + nmps: 2, + nlps: 6, + switchFlag: 0 + }, + { + qe: 0x1801, + nmps: 3, + nlps: 9, + switchFlag: 0 + }, + { + qe: 0x0AC1, + nmps: 4, + nlps: 12, + switchFlag: 0 + }, + { + qe: 0x0521, + nmps: 5, + nlps: 29, + switchFlag: 0 + }, + { + qe: 0x0221, + nmps: 38, + nlps: 33, + switchFlag: 0 + }, + { + qe: 0x5601, + nmps: 7, + nlps: 6, + switchFlag: 1 + }, + { + qe: 0x5401, + nmps: 8, + nlps: 14, + switchFlag: 0 + }, + { + qe: 0x4801, + nmps: 9, + nlps: 14, + switchFlag: 0 + }, + { + qe: 0x3801, + nmps: 10, + nlps: 14, + switchFlag: 0 + }, + { + qe: 0x3001, + nmps: 11, + nlps: 17, + switchFlag: 0 + }, + { + qe: 0x2401, + nmps: 12, + nlps: 18, + switchFlag: 0 + }, + { + qe: 0x1C01, + nmps: 13, + nlps: 20, + switchFlag: 0 + }, + { + qe: 0x1601, + nmps: 29, + nlps: 21, + switchFlag: 0 + }, + { + qe: 0x5601, + nmps: 15, + nlps: 14, + switchFlag: 1 + }, + { + qe: 0x5401, + nmps: 16, + nlps: 14, + switchFlag: 0 + }, + { + qe: 0x5101, + nmps: 17, + nlps: 15, + switchFlag: 0 + }, + { + qe: 0x4801, + nmps: 18, + nlps: 16, + switchFlag: 0 + }, + { + qe: 0x3801, + nmps: 19, + nlps: 17, + switchFlag: 0 + }, + { + qe: 0x3401, + nmps: 20, + nlps: 18, + switchFlag: 0 + }, + { + qe: 0x3001, + nmps: 21, + nlps: 19, + switchFlag: 0 + }, + { + qe: 0x2801, + nmps: 22, + nlps: 19, + switchFlag: 0 + }, + { + qe: 0x2401, + nmps: 23, + nlps: 20, + switchFlag: 0 + }, + { + qe: 0x2201, + nmps: 24, + nlps: 21, + switchFlag: 0 + }, + { + qe: 0x1C01, + nmps: 25, + nlps: 22, + switchFlag: 0 + }, + { + qe: 0x1801, + nmps: 26, + nlps: 23, + switchFlag: 0 + }, + { + qe: 0x1601, + nmps: 27, + nlps: 24, + switchFlag: 0 + }, + { + qe: 0x1401, + nmps: 28, + nlps: 25, + switchFlag: 0 + }, + { + qe: 0x1201, + nmps: 29, + nlps: 26, + switchFlag: 0 + }, + { + qe: 0x1101, + nmps: 30, + nlps: 27, + switchFlag: 0 + }, + { + qe: 0x0AC1, + nmps: 31, + nlps: 28, + switchFlag: 0 + }, + { + qe: 0x09C1, + nmps: 32, + nlps: 29, + switchFlag: 0 + }, + { + qe: 0x08A1, + nmps: 33, + nlps: 30, + switchFlag: 0 + }, + { + qe: 0x0521, + nmps: 34, + nlps: 31, + switchFlag: 0 + }, + { + qe: 0x0441, + nmps: 35, + nlps: 32, + switchFlag: 0 + }, + { + qe: 0x02A1, + nmps: 36, + nlps: 33, + switchFlag: 0 + }, + { + qe: 0x0221, + nmps: 37, + nlps: 34, + switchFlag: 0 + }, + { + qe: 0x0141, + nmps: 38, + nlps: 35, + switchFlag: 0 + }, + { + qe: 0x0111, + nmps: 39, + nlps: 36, + switchFlag: 0 + }, + { + qe: 0x0085, + nmps: 40, + nlps: 37, + switchFlag: 0 + }, + { + qe: 0x0049, + nmps: 41, + nlps: 38, + switchFlag: 0 + }, + { + qe: 0x0025, + nmps: 42, + nlps: 39, + switchFlag: 0 + }, + { + qe: 0x0015, + nmps: 43, + nlps: 40, + switchFlag: 0 + }, + { + qe: 0x0009, + nmps: 44, + nlps: 41, + switchFlag: 0 + }, + { + qe: 0x0005, + nmps: 45, + nlps: 42, + switchFlag: 0 + }, + { + qe: 0x0001, + nmps: 45, + nlps: 43, + switchFlag: 0 + }, + { + qe: 0x5601, + nmps: 46, + nlps: 46, + switchFlag: 0 + } + ]; + function ArithmeticDecoder(data, start, end) { + this.data = data; + this.bp = start; + this.dataEnd = end; + this.chigh = data[start]; + this.clow = 0; + this.byteIn(); + this.chigh = this.chigh << 7 & 0xFFFF | this.clow >> 9 & 0x7F; + this.clow = this.clow << 7 & 0xFFFF; + this.ct -= 7; + this.a = 0x8000; + } + ArithmeticDecoder.prototype = { + byteIn: function ArithmeticDecoder_byteIn() { + var data = this.data; + var bp = this.bp; + if (data[bp] === 0xFF) { + var b1 = data[bp + 1]; + if (b1 > 0x8F) { + this.clow += 0xFF00; + this.ct = 8; + } else { + bp++; + this.clow += data[bp] << 9; + this.ct = 7; + this.bp = bp; + } + } else { + bp++; + this.clow += bp < this.dataEnd ? data[bp] << 8 : 0xFF00; + this.ct = 8; + this.bp = bp; + } + if (this.clow > 0xFFFF) { + this.chigh += this.clow >> 16; + this.clow &= 0xFFFF; + } + }, + readBit: function ArithmeticDecoder_readBit(contexts, pos) { + var cx_index = contexts[pos] >> 1, cx_mps = contexts[pos] & 1; + var qeTableIcx = QeTable[cx_index]; + var qeIcx = qeTableIcx.qe; + var d; + var a = this.a - qeIcx; + if (this.chigh < qeIcx) { + if (a < qeIcx) { + a = qeIcx; + d = cx_mps; + cx_index = qeTableIcx.nmps; + } else { + a = qeIcx; + d = 1 ^ cx_mps; + if (qeTableIcx.switchFlag === 1) { + cx_mps = d; + } + cx_index = qeTableIcx.nlps; + } + } else { + this.chigh -= qeIcx; + if ((a & 0x8000) !== 0) { + this.a = a; + return cx_mps; + } + if (a < qeIcx) { + d = 1 ^ cx_mps; + if (qeTableIcx.switchFlag === 1) { + cx_mps = d; + } + cx_index = qeTableIcx.nlps; + } else { + d = cx_mps; + cx_index = qeTableIcx.nmps; + } + } + do { + if (this.ct === 0) { + this.byteIn(); + } + a <<= 1; + this.chigh = this.chigh << 1 & 0xFFFF | this.clow >> 15 & 1; + this.clow = this.clow << 1 & 0xFFFF; + this.ct--; + } while ((a & 0x8000) === 0); + this.a = a; + contexts[pos] = cx_index << 1 | cx_mps; + return d; + } + }; + return ArithmeticDecoder; + }(); + exports.ArithmeticDecoder = ArithmeticDecoder; + })); + (function (root, factory) { + factory(root.pdfjsCoreCharsets = {}); + }(this, function (exports) { + var ISOAdobeCharset = [ + '.notdef', + 'space', + 'exclam', + 'quotedbl', + 'numbersign', + 'dollar', + 'percent', + 'ampersand', + 'quoteright', + 'parenleft', + 'parenright', + 'asterisk', + 'plus', + 'comma', + 'hyphen', + 'period', + 'slash', + 'zero', + 'one', + 'two', + 'three', + 'four', + 'five', + 'six', + 'seven', + 'eight', + 'nine', + 'colon', + 'semicolon', + 'less', + 'equal', + 'greater', + 'question', + 'at', + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'G', + 'H', + 'I', + 'J', + 'K', + 'L', + 'M', + 'N', + 'O', + 'P', + 'Q', + 'R', + 'S', + 'T', + 'U', + 'V', + 'W', + 'X', + 'Y', + 'Z', + 'bracketleft', + 'backslash', + 'bracketright', + 'asciicircum', + 'underscore', + 'quoteleft', + 'a', + 'b', + 'c', + 'd', + 'e', + 'f', + 'g', + 'h', + 'i', + 'j', + 'k', + 'l', + 'm', + 'n', + 'o', + 'p', + 'q', + 'r', + 's', + 't', + 'u', + 'v', + 'w', + 'x', + 'y', + 'z', + 'braceleft', + 'bar', + 'braceright', + 'asciitilde', + 'exclamdown', + 'cent', + 'sterling', + 'fraction', + 'yen', + 'florin', + 'section', + 'currency', + 'quotesingle', + 'quotedblleft', + 'guillemotleft', + 'guilsinglleft', + 'guilsinglright', + 'fi', + 'fl', + 'endash', + 'dagger', + 'daggerdbl', + 'periodcentered', + 'paragraph', + 'bullet', + 'quotesinglbase', + 'quotedblbase', + 'quotedblright', + 'guillemotright', + 'ellipsis', + 'perthousand', + 'questiondown', + 'grave', + 'acute', + 'circumflex', + 'tilde', + 'macron', + 'breve', + 'dotaccent', + 'dieresis', + 'ring', + 'cedilla', + 'hungarumlaut', + 'ogonek', + 'caron', + 'emdash', + 'AE', + 'ordfeminine', + 'Lslash', + 'Oslash', + 'OE', + 'ordmasculine', + 'ae', + 'dotlessi', + 'lslash', + 'oslash', + 'oe', + 'germandbls', + 'onesuperior', + 'logicalnot', + 'mu', + 'trademark', + 'Eth', + 'onehalf', + 'plusminus', + 'Thorn', + 'onequarter', + 'divide', + 'brokenbar', + 'degree', + 'thorn', + 'threequarters', + 'twosuperior', + 'registered', + 'minus', + 'eth', + 'multiply', + 'threesuperior', + 'copyright', + 'Aacute', + 'Acircumflex', + 'Adieresis', + 'Agrave', + 'Aring', + 'Atilde', + 'Ccedilla', + 'Eacute', + 'Ecircumflex', + 'Edieresis', + 'Egrave', + 'Iacute', + 'Icircumflex', + 'Idieresis', + 'Igrave', + 'Ntilde', + 'Oacute', + 'Ocircumflex', + 'Odieresis', + 'Ograve', + 'Otilde', + 'Scaron', + 'Uacute', + 'Ucircumflex', + 'Udieresis', + 'Ugrave', + 'Yacute', + 'Ydieresis', + 'Zcaron', + 'aacute', + 'acircumflex', + 'adieresis', + 'agrave', + 'aring', + 'atilde', + 'ccedilla', + 'eacute', + 'ecircumflex', + 'edieresis', + 'egrave', + 'iacute', + 'icircumflex', + 'idieresis', + 'igrave', + 'ntilde', + 'oacute', + 'ocircumflex', + 'odieresis', + 'ograve', + 'otilde', + 'scaron', + 'uacute', + 'ucircumflex', + 'udieresis', + 'ugrave', + 'yacute', + 'ydieresis', + 'zcaron' + ]; + var ExpertCharset = [ + '.notdef', + 'space', + 'exclamsmall', + 'Hungarumlautsmall', + 'dollaroldstyle', + 'dollarsuperior', + 'ampersandsmall', + 'Acutesmall', + 'parenleftsuperior', + 'parenrightsuperior', + 'twodotenleader', + 'onedotenleader', + 'comma', + 'hyphen', + 'period', + 'fraction', + 'zerooldstyle', + 'oneoldstyle', + 'twooldstyle', + 'threeoldstyle', + 'fouroldstyle', + 'fiveoldstyle', + 'sixoldstyle', + 'sevenoldstyle', + 'eightoldstyle', + 'nineoldstyle', + 'colon', + 'semicolon', + 'commasuperior', + 'threequartersemdash', + 'periodsuperior', + 'questionsmall', + 'asuperior', + 'bsuperior', + 'centsuperior', + 'dsuperior', + 'esuperior', + 'isuperior', + 'lsuperior', + 'msuperior', + 'nsuperior', + 'osuperior', + 'rsuperior', + 'ssuperior', + 'tsuperior', + 'ff', + 'fi', + 'fl', + 'ffi', + 'ffl', + 'parenleftinferior', + 'parenrightinferior', + 'Circumflexsmall', + 'hyphensuperior', + 'Gravesmall', + 'Asmall', + 'Bsmall', + 'Csmall', + 'Dsmall', + 'Esmall', + 'Fsmall', + 'Gsmall', + 'Hsmall', + 'Ismall', + 'Jsmall', + 'Ksmall', + 'Lsmall', + 'Msmall', + 'Nsmall', + 'Osmall', + 'Psmall', + 'Qsmall', + 'Rsmall', + 'Ssmall', + 'Tsmall', + 'Usmall', + 'Vsmall', + 'Wsmall', + 'Xsmall', + 'Ysmall', + 'Zsmall', + 'colonmonetary', + 'onefitted', + 'rupiah', + 'Tildesmall', + 'exclamdownsmall', + 'centoldstyle', + 'Lslashsmall', + 'Scaronsmall', + 'Zcaronsmall', + 'Dieresissmall', + 'Brevesmall', + 'Caronsmall', + 'Dotaccentsmall', + 'Macronsmall', + 'figuredash', + 'hypheninferior', + 'Ogoneksmall', + 'Ringsmall', + 'Cedillasmall', + 'onequarter', + 'onehalf', + 'threequarters', + 'questiondownsmall', + 'oneeighth', + 'threeeighths', + 'fiveeighths', + 'seveneighths', + 'onethird', + 'twothirds', + 'zerosuperior', + 'onesuperior', + 'twosuperior', + 'threesuperior', + 'foursuperior', + 'fivesuperior', + 'sixsuperior', + 'sevensuperior', + 'eightsuperior', + 'ninesuperior', + 'zeroinferior', + 'oneinferior', + 'twoinferior', + 'threeinferior', + 'fourinferior', + 'fiveinferior', + 'sixinferior', + 'seveninferior', + 'eightinferior', + 'nineinferior', + 'centinferior', + 'dollarinferior', + 'periodinferior', + 'commainferior', + 'Agravesmall', + 'Aacutesmall', + 'Acircumflexsmall', + 'Atildesmall', + 'Adieresissmall', + 'Aringsmall', + 'AEsmall', + 'Ccedillasmall', + 'Egravesmall', + 'Eacutesmall', + 'Ecircumflexsmall', + 'Edieresissmall', + 'Igravesmall', + 'Iacutesmall', + 'Icircumflexsmall', + 'Idieresissmall', + 'Ethsmall', + 'Ntildesmall', + 'Ogravesmall', + 'Oacutesmall', + 'Ocircumflexsmall', + 'Otildesmall', + 'Odieresissmall', + 'OEsmall', + 'Oslashsmall', + 'Ugravesmall', + 'Uacutesmall', + 'Ucircumflexsmall', + 'Udieresissmall', + 'Yacutesmall', + 'Thornsmall', + 'Ydieresissmall' + ]; + var ExpertSubsetCharset = [ + '.notdef', + 'space', + 'dollaroldstyle', + 'dollarsuperior', + 'parenleftsuperior', + 'parenrightsuperior', + 'twodotenleader', + 'onedotenleader', + 'comma', + 'hyphen', + 'period', + 'fraction', + 'zerooldstyle', + 'oneoldstyle', + 'twooldstyle', + 'threeoldstyle', + 'fouroldstyle', + 'fiveoldstyle', + 'sixoldstyle', + 'sevenoldstyle', + 'eightoldstyle', + 'nineoldstyle', + 'colon', + 'semicolon', + 'commasuperior', + 'threequartersemdash', + 'periodsuperior', + 'asuperior', + 'bsuperior', + 'centsuperior', + 'dsuperior', + 'esuperior', + 'isuperior', + 'lsuperior', + 'msuperior', + 'nsuperior', + 'osuperior', + 'rsuperior', + 'ssuperior', + 'tsuperior', + 'ff', + 'fi', + 'fl', + 'ffi', + 'ffl', + 'parenleftinferior', + 'parenrightinferior', + 'hyphensuperior', + 'colonmonetary', + 'onefitted', + 'rupiah', + 'centoldstyle', + 'figuredash', + 'hypheninferior', + 'onequarter', + 'onehalf', + 'threequarters', + 'oneeighth', + 'threeeighths', + 'fiveeighths', + 'seveneighths', + 'onethird', + 'twothirds', + 'zerosuperior', + 'onesuperior', + 'twosuperior', + 'threesuperior', + 'foursuperior', + 'fivesuperior', + 'sixsuperior', + 'sevensuperior', + 'eightsuperior', + 'ninesuperior', + 'zeroinferior', + 'oneinferior', + 'twoinferior', + 'threeinferior', + 'fourinferior', + 'fiveinferior', + 'sixinferior', + 'seveninferior', + 'eightinferior', + 'nineinferior', + 'centinferior', + 'dollarinferior', + 'periodinferior', + 'commainferior' + ]; + exports.ISOAdobeCharset = ISOAdobeCharset; + exports.ExpertCharset = ExpertCharset; + exports.ExpertSubsetCharset = ExpertSubsetCharset; + })); + (function (root, factory) { + factory(root.pdfjsCoreEncodings = {}); + }(this, function (exports) { + var ExpertEncoding = [ + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + 'space', + 'exclamsmall', + 'Hungarumlautsmall', + '', + 'dollaroldstyle', + 'dollarsuperior', + 'ampersandsmall', + 'Acutesmall', + 'parenleftsuperior', + 'parenrightsuperior', + 'twodotenleader', + 'onedotenleader', + 'comma', + 'hyphen', + 'period', + 'fraction', + 'zerooldstyle', + 'oneoldstyle', + 'twooldstyle', + 'threeoldstyle', + 'fouroldstyle', + 'fiveoldstyle', + 'sixoldstyle', + 'sevenoldstyle', + 'eightoldstyle', + 'nineoldstyle', + 'colon', + 'semicolon', + 'commasuperior', + 'threequartersemdash', + 'periodsuperior', + 'questionsmall', + '', + 'asuperior', + 'bsuperior', + 'centsuperior', + 'dsuperior', + 'esuperior', + '', + '', + 'isuperior', + '', + '', + 'lsuperior', + 'msuperior', + 'nsuperior', + 'osuperior', + '', + '', + 'rsuperior', + 'ssuperior', + 'tsuperior', + '', + 'ff', + 'fi', + 'fl', + 'ffi', + 'ffl', + 'parenleftinferior', + '', + 'parenrightinferior', + 'Circumflexsmall', + 'hyphensuperior', + 'Gravesmall', + 'Asmall', + 'Bsmall', + 'Csmall', + 'Dsmall', + 'Esmall', + 'Fsmall', + 'Gsmall', + 'Hsmall', + 'Ismall', + 'Jsmall', + 'Ksmall', + 'Lsmall', + 'Msmall', + 'Nsmall', + 'Osmall', + 'Psmall', + 'Qsmall', + 'Rsmall', + 'Ssmall', + 'Tsmall', + 'Usmall', + 'Vsmall', + 'Wsmall', + 'Xsmall', + 'Ysmall', + 'Zsmall', + 'colonmonetary', + 'onefitted', + 'rupiah', + 'Tildesmall', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + 'exclamdownsmall', + 'centoldstyle', + 'Lslashsmall', + '', + '', + 'Scaronsmall', + 'Zcaronsmall', + 'Dieresissmall', + 'Brevesmall', + 'Caronsmall', + '', + 'Dotaccentsmall', + '', + '', + 'Macronsmall', + '', + '', + 'figuredash', + 'hypheninferior', + '', + '', + 'Ogoneksmall', + 'Ringsmall', + 'Cedillasmall', + '', + '', + '', + 'onequarter', + 'onehalf', + 'threequarters', + 'questiondownsmall', + 'oneeighth', + 'threeeighths', + 'fiveeighths', + 'seveneighths', + 'onethird', + 'twothirds', + '', + '', + 'zerosuperior', + 'onesuperior', + 'twosuperior', + 'threesuperior', + 'foursuperior', + 'fivesuperior', + 'sixsuperior', + 'sevensuperior', + 'eightsuperior', + 'ninesuperior', + 'zeroinferior', + 'oneinferior', + 'twoinferior', + 'threeinferior', + 'fourinferior', + 'fiveinferior', + 'sixinferior', + 'seveninferior', + 'eightinferior', + 'nineinferior', + 'centinferior', + 'dollarinferior', + 'periodinferior', + 'commainferior', + 'Agravesmall', + 'Aacutesmall', + 'Acircumflexsmall', + 'Atildesmall', + 'Adieresissmall', + 'Aringsmall', + 'AEsmall', + 'Ccedillasmall', + 'Egravesmall', + 'Eacutesmall', + 'Ecircumflexsmall', + 'Edieresissmall', + 'Igravesmall', + 'Iacutesmall', + 'Icircumflexsmall', + 'Idieresissmall', + 'Ethsmall', + 'Ntildesmall', + 'Ogravesmall', + 'Oacutesmall', + 'Ocircumflexsmall', + 'Otildesmall', + 'Odieresissmall', + 'OEsmall', + 'Oslashsmall', + 'Ugravesmall', + 'Uacutesmall', + 'Ucircumflexsmall', + 'Udieresissmall', + 'Yacutesmall', + 'Thornsmall', + 'Ydieresissmall' + ]; + var MacExpertEncoding = [ + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + 'space', + 'exclamsmall', + 'Hungarumlautsmall', + 'centoldstyle', + 'dollaroldstyle', + 'dollarsuperior', + 'ampersandsmall', + 'Acutesmall', + 'parenleftsuperior', + 'parenrightsuperior', + 'twodotenleader', + 'onedotenleader', + 'comma', + 'hyphen', + 'period', + 'fraction', + 'zerooldstyle', + 'oneoldstyle', + 'twooldstyle', + 'threeoldstyle', + 'fouroldstyle', + 'fiveoldstyle', + 'sixoldstyle', + 'sevenoldstyle', + 'eightoldstyle', + 'nineoldstyle', + 'colon', + 'semicolon', + '', + 'threequartersemdash', + '', + 'questionsmall', + '', + '', + '', + '', + 'Ethsmall', + '', + '', + 'onequarter', + 'onehalf', + 'threequarters', + 'oneeighth', + 'threeeighths', + 'fiveeighths', + 'seveneighths', + 'onethird', + 'twothirds', + '', + '', + '', + '', + '', + '', + 'ff', + 'fi', + 'fl', + 'ffi', + 'ffl', + 'parenleftinferior', + '', + 'parenrightinferior', + 'Circumflexsmall', + 'hypheninferior', + 'Gravesmall', + 'Asmall', + 'Bsmall', + 'Csmall', + 'Dsmall', + 'Esmall', + 'Fsmall', + 'Gsmall', + 'Hsmall', + 'Ismall', + 'Jsmall', + 'Ksmall', + 'Lsmall', + 'Msmall', + 'Nsmall', + 'Osmall', + 'Psmall', + 'Qsmall', + 'Rsmall', + 'Ssmall', + 'Tsmall', + 'Usmall', + 'Vsmall', + 'Wsmall', + 'Xsmall', + 'Ysmall', + 'Zsmall', + 'colonmonetary', + 'onefitted', + 'rupiah', + 'Tildesmall', + '', + '', + 'asuperior', + 'centsuperior', + '', + '', + '', + '', + 'Aacutesmall', + 'Agravesmall', + 'Acircumflexsmall', + 'Adieresissmall', + 'Atildesmall', + 'Aringsmall', + 'Ccedillasmall', + 'Eacutesmall', + 'Egravesmall', + 'Ecircumflexsmall', + 'Edieresissmall', + 'Iacutesmall', + 'Igravesmall', + 'Icircumflexsmall', + 'Idieresissmall', + 'Ntildesmall', + 'Oacutesmall', + 'Ogravesmall', + 'Ocircumflexsmall', + 'Odieresissmall', + 'Otildesmall', + 'Uacutesmall', + 'Ugravesmall', + 'Ucircumflexsmall', + 'Udieresissmall', + '', + 'eightsuperior', + 'fourinferior', + 'threeinferior', + 'sixinferior', + 'eightinferior', + 'seveninferior', + 'Scaronsmall', + '', + 'centinferior', + 'twoinferior', + '', + 'Dieresissmall', + '', + 'Caronsmall', + 'osuperior', + 'fiveinferior', + '', + 'commainferior', + 'periodinferior', + 'Yacutesmall', + '', + 'dollarinferior', + '', + 'Thornsmall', + '', + 'nineinferior', + 'zeroinferior', + 'Zcaronsmall', + 'AEsmall', + 'Oslashsmall', + 'questiondownsmall', + 'oneinferior', + 'Lslashsmall', + '', + '', + '', + '', + '', + '', + 'Cedillasmall', + '', + '', + '', + '', + '', + 'OEsmall', + 'figuredash', + 'hyphensuperior', + '', + '', + '', + '', + 'exclamdownsmall', + '', + 'Ydieresissmall', + '', + 'onesuperior', + 'twosuperior', + 'threesuperior', + 'foursuperior', + 'fivesuperior', + 'sixsuperior', + 'sevensuperior', + 'ninesuperior', + 'zerosuperior', + '', + 'esuperior', + 'rsuperior', + 'tsuperior', + '', + '', + 'isuperior', + 'ssuperior', + 'dsuperior', + '', + '', + '', + '', + '', + 'lsuperior', + 'Ogoneksmall', + 'Brevesmall', + 'Macronsmall', + 'bsuperior', + 'nsuperior', + 'msuperior', + 'commasuperior', + 'periodsuperior', + 'Dotaccentsmall', + 'Ringsmall' + ]; + var MacRomanEncoding = [ + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + 'space', + 'exclam', + 'quotedbl', + 'numbersign', + 'dollar', + 'percent', + 'ampersand', + 'quotesingle', + 'parenleft', + 'parenright', + 'asterisk', + 'plus', + 'comma', + 'hyphen', + 'period', + 'slash', + 'zero', + 'one', + 'two', + 'three', + 'four', + 'five', + 'six', + 'seven', + 'eight', + 'nine', + 'colon', + 'semicolon', + 'less', + 'equal', + 'greater', + 'question', + 'at', + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'G', + 'H', + 'I', + 'J', + 'K', + 'L', + 'M', + 'N', + 'O', + 'P', + 'Q', + 'R', + 'S', + 'T', + 'U', + 'V', + 'W', + 'X', + 'Y', + 'Z', + 'bracketleft', + 'backslash', + 'bracketright', + 'asciicircum', + 'underscore', + 'grave', + 'a', + 'b', + 'c', + 'd', + 'e', + 'f', + 'g', + 'h', + 'i', + 'j', + 'k', + 'l', + 'm', + 'n', + 'o', + 'p', + 'q', + 'r', + 's', + 't', + 'u', + 'v', + 'w', + 'x', + 'y', + 'z', + 'braceleft', + 'bar', + 'braceright', + 'asciitilde', + '', + 'Adieresis', + 'Aring', + 'Ccedilla', + 'Eacute', + 'Ntilde', + 'Odieresis', + 'Udieresis', + 'aacute', + 'agrave', + 'acircumflex', + 'adieresis', + 'atilde', + 'aring', + 'ccedilla', + 'eacute', + 'egrave', + 'ecircumflex', + 'edieresis', + 'iacute', + 'igrave', + 'icircumflex', + 'idieresis', + 'ntilde', + 'oacute', + 'ograve', + 'ocircumflex', + 'odieresis', + 'otilde', + 'uacute', + 'ugrave', + 'ucircumflex', + 'udieresis', + 'dagger', + 'degree', + 'cent', + 'sterling', + 'section', + 'bullet', + 'paragraph', + 'germandbls', + 'registered', + 'copyright', + 'trademark', + 'acute', + 'dieresis', + 'notequal', + 'AE', + 'Oslash', + 'infinity', + 'plusminus', + 'lessequal', + 'greaterequal', + 'yen', + 'mu', + 'partialdiff', + 'summation', + 'product', + 'pi', + 'integral', + 'ordfeminine', + 'ordmasculine', + 'Omega', + 'ae', + 'oslash', + 'questiondown', + 'exclamdown', + 'logicalnot', + 'radical', + 'florin', + 'approxequal', + 'Delta', + 'guillemotleft', + 'guillemotright', + 'ellipsis', + 'space', + 'Agrave', + 'Atilde', + 'Otilde', + 'OE', + 'oe', + 'endash', + 'emdash', + 'quotedblleft', + 'quotedblright', + 'quoteleft', + 'quoteright', + 'divide', + 'lozenge', + 'ydieresis', + 'Ydieresis', + 'fraction', + 'currency', + 'guilsinglleft', + 'guilsinglright', + 'fi', + 'fl', + 'daggerdbl', + 'periodcentered', + 'quotesinglbase', + 'quotedblbase', + 'perthousand', + 'Acircumflex', + 'Ecircumflex', + 'Aacute', + 'Edieresis', + 'Egrave', + 'Iacute', + 'Icircumflex', + 'Idieresis', + 'Igrave', + 'Oacute', + 'Ocircumflex', + 'apple', + 'Ograve', + 'Uacute', + 'Ucircumflex', + 'Ugrave', + 'dotlessi', + 'circumflex', + 'tilde', + 'macron', + 'breve', + 'dotaccent', + 'ring', + 'cedilla', + 'hungarumlaut', + 'ogonek', + 'caron' + ]; + var StandardEncoding = [ + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + 'space', + 'exclam', + 'quotedbl', + 'numbersign', + 'dollar', + 'percent', + 'ampersand', + 'quoteright', + 'parenleft', + 'parenright', + 'asterisk', + 'plus', + 'comma', + 'hyphen', + 'period', + 'slash', + 'zero', + 'one', + 'two', + 'three', + 'four', + 'five', + 'six', + 'seven', + 'eight', + 'nine', + 'colon', + 'semicolon', + 'less', + 'equal', + 'greater', + 'question', + 'at', + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'G', + 'H', + 'I', + 'J', + 'K', + 'L', + 'M', + 'N', + 'O', + 'P', + 'Q', + 'R', + 'S', + 'T', + 'U', + 'V', + 'W', + 'X', + 'Y', + 'Z', + 'bracketleft', + 'backslash', + 'bracketright', + 'asciicircum', + 'underscore', + 'quoteleft', + 'a', + 'b', + 'c', + 'd', + 'e', + 'f', + 'g', + 'h', + 'i', + 'j', + 'k', + 'l', + 'm', + 'n', + 'o', + 'p', + 'q', + 'r', + 's', + 't', + 'u', + 'v', + 'w', + 'x', + 'y', + 'z', + 'braceleft', + 'bar', + 'braceright', + 'asciitilde', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + 'exclamdown', + 'cent', + 'sterling', + 'fraction', + 'yen', + 'florin', + 'section', + 'currency', + 'quotesingle', + 'quotedblleft', + 'guillemotleft', + 'guilsinglleft', + 'guilsinglright', + 'fi', + 'fl', + '', + 'endash', + 'dagger', + 'daggerdbl', + 'periodcentered', + '', + 'paragraph', + 'bullet', + 'quotesinglbase', + 'quotedblbase', + 'quotedblright', + 'guillemotright', + 'ellipsis', + 'perthousand', + '', + 'questiondown', + '', + 'grave', + 'acute', + 'circumflex', + 'tilde', + 'macron', + 'breve', + 'dotaccent', + 'dieresis', + '', + 'ring', + 'cedilla', + '', + 'hungarumlaut', + 'ogonek', + 'caron', + 'emdash', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + 'AE', + '', + 'ordfeminine', + '', + '', + '', + '', + 'Lslash', + 'Oslash', + 'OE', + 'ordmasculine', + '', + '', + '', + '', + '', + 'ae', + '', + '', + '', + 'dotlessi', + '', + '', + 'lslash', + 'oslash', + 'oe', + 'germandbls' + ]; + var WinAnsiEncoding = [ + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + 'space', + 'exclam', + 'quotedbl', + 'numbersign', + 'dollar', + 'percent', + 'ampersand', + 'quotesingle', + 'parenleft', + 'parenright', + 'asterisk', + 'plus', + 'comma', + 'hyphen', + 'period', + 'slash', + 'zero', + 'one', + 'two', + 'three', + 'four', + 'five', + 'six', + 'seven', + 'eight', + 'nine', + 'colon', + 'semicolon', + 'less', + 'equal', + 'greater', + 'question', + 'at', + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'G', + 'H', + 'I', + 'J', + 'K', + 'L', + 'M', + 'N', + 'O', + 'P', + 'Q', + 'R', + 'S', + 'T', + 'U', + 'V', + 'W', + 'X', + 'Y', + 'Z', + 'bracketleft', + 'backslash', + 'bracketright', + 'asciicircum', + 'underscore', + 'grave', + 'a', + 'b', + 'c', + 'd', + 'e', + 'f', + 'g', + 'h', + 'i', + 'j', + 'k', + 'l', + 'm', + 'n', + 'o', + 'p', + 'q', + 'r', + 's', + 't', + 'u', + 'v', + 'w', + 'x', + 'y', + 'z', + 'braceleft', + 'bar', + 'braceright', + 'asciitilde', + 'bullet', + 'Euro', + 'bullet', + 'quotesinglbase', + 'florin', + 'quotedblbase', + 'ellipsis', + 'dagger', + 'daggerdbl', + 'circumflex', + 'perthousand', + 'Scaron', + 'guilsinglleft', + 'OE', + 'bullet', + 'Zcaron', + 'bullet', + 'bullet', + 'quoteleft', + 'quoteright', + 'quotedblleft', + 'quotedblright', + 'bullet', + 'endash', + 'emdash', + 'tilde', + 'trademark', + 'scaron', + 'guilsinglright', + 'oe', + 'bullet', + 'zcaron', + 'Ydieresis', + 'space', + 'exclamdown', + 'cent', + 'sterling', + 'currency', + 'yen', + 'brokenbar', + 'section', + 'dieresis', + 'copyright', + 'ordfeminine', + 'guillemotleft', + 'logicalnot', + 'hyphen', + 'registered', + 'macron', + 'degree', + 'plusminus', + 'twosuperior', + 'threesuperior', + 'acute', + 'mu', + 'paragraph', + 'periodcentered', + 'cedilla', + 'onesuperior', + 'ordmasculine', + 'guillemotright', + 'onequarter', + 'onehalf', + 'threequarters', + 'questiondown', + 'Agrave', + 'Aacute', + 'Acircumflex', + 'Atilde', + 'Adieresis', + 'Aring', + 'AE', + 'Ccedilla', + 'Egrave', + 'Eacute', + 'Ecircumflex', + 'Edieresis', + 'Igrave', + 'Iacute', + 'Icircumflex', + 'Idieresis', + 'Eth', + 'Ntilde', + 'Ograve', + 'Oacute', + 'Ocircumflex', + 'Otilde', + 'Odieresis', + 'multiply', + 'Oslash', + 'Ugrave', + 'Uacute', + 'Ucircumflex', + 'Udieresis', + 'Yacute', + 'Thorn', + 'germandbls', + 'agrave', + 'aacute', + 'acircumflex', + 'atilde', + 'adieresis', + 'aring', + 'ae', + 'ccedilla', + 'egrave', + 'eacute', + 'ecircumflex', + 'edieresis', + 'igrave', + 'iacute', + 'icircumflex', + 'idieresis', + 'eth', + 'ntilde', + 'ograve', + 'oacute', + 'ocircumflex', + 'otilde', + 'odieresis', + 'divide', + 'oslash', + 'ugrave', + 'uacute', + 'ucircumflex', + 'udieresis', + 'yacute', + 'thorn', + 'ydieresis' + ]; + var SymbolSetEncoding = [ + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + 'space', + 'exclam', + 'universal', + 'numbersign', + 'existential', + 'percent', + 'ampersand', + 'suchthat', + 'parenleft', + 'parenright', + 'asteriskmath', + 'plus', + 'comma', + 'minus', + 'period', + 'slash', + 'zero', + 'one', + 'two', + 'three', + 'four', + 'five', + 'six', + 'seven', + 'eight', + 'nine', + 'colon', + 'semicolon', + 'less', + 'equal', + 'greater', + 'question', + 'congruent', + 'Alpha', + 'Beta', + 'Chi', + 'Delta', + 'Epsilon', + 'Phi', + 'Gamma', + 'Eta', + 'Iota', + 'theta1', + 'Kappa', + 'Lambda', + 'Mu', + 'Nu', + 'Omicron', + 'Pi', + 'Theta', + 'Rho', + 'Sigma', + 'Tau', + 'Upsilon', + 'sigma1', + 'Omega', + 'Xi', + 'Psi', + 'Zeta', + 'bracketleft', + 'therefore', + 'bracketright', + 'perpendicular', + 'underscore', + 'radicalex', + 'alpha', + 'beta', + 'chi', + 'delta', + 'epsilon', + 'phi', + 'gamma', + 'eta', + 'iota', + 'phi1', + 'kappa', + 'lambda', + 'mu', + 'nu', + 'omicron', + 'pi', + 'theta', + 'rho', + 'sigma', + 'tau', + 'upsilon', + 'omega1', + 'omega', + 'xi', + 'psi', + 'zeta', + 'braceleft', + 'bar', + 'braceright', + 'similar', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + 'Euro', + 'Upsilon1', + 'minute', + 'lessequal', + 'fraction', + 'infinity', + 'florin', + 'club', + 'diamond', + 'heart', + 'spade', + 'arrowboth', + 'arrowleft', + 'arrowup', + 'arrowright', + 'arrowdown', + 'degree', + 'plusminus', + 'second', + 'greaterequal', + 'multiply', + 'proportional', + 'partialdiff', + 'bullet', + 'divide', + 'notequal', + 'equivalence', + 'approxequal', + 'ellipsis', + 'arrowvertex', + 'arrowhorizex', + 'carriagereturn', + 'aleph', + 'Ifraktur', + 'Rfraktur', + 'weierstrass', + 'circlemultiply', + 'circleplus', + 'emptyset', + 'intersection', + 'union', + 'propersuperset', + 'reflexsuperset', + 'notsubset', + 'propersubset', + 'reflexsubset', + 'element', + 'notelement', + 'angle', + 'gradient', + 'registerserif', + 'copyrightserif', + 'trademarkserif', + 'product', + 'radical', + 'dotmath', + 'logicalnot', + 'logicaland', + 'logicalor', + 'arrowdblboth', + 'arrowdblleft', + 'arrowdblup', + 'arrowdblright', + 'arrowdbldown', + 'lozenge', + 'angleleft', + 'registersans', + 'copyrightsans', + 'trademarksans', + 'summation', + 'parenlefttp', + 'parenleftex', + 'parenleftbt', + 'bracketlefttp', + 'bracketleftex', + 'bracketleftbt', + 'bracelefttp', + 'braceleftmid', + 'braceleftbt', + 'braceex', + '', + 'angleright', + 'integral', + 'integraltp', + 'integralex', + 'integralbt', + 'parenrighttp', + 'parenrightex', + 'parenrightbt', + 'bracketrighttp', + 'bracketrightex', + 'bracketrightbt', + 'bracerighttp', + 'bracerightmid', + 'bracerightbt' + ]; + var ZapfDingbatsEncoding = [ + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + 'space', + 'a1', + 'a2', + 'a202', + 'a3', + 'a4', + 'a5', + 'a119', + 'a118', + 'a117', + 'a11', + 'a12', + 'a13', + 'a14', + 'a15', + 'a16', + 'a105', + 'a17', + 'a18', + 'a19', + 'a20', + 'a21', + 'a22', + 'a23', + 'a24', + 'a25', + 'a26', + 'a27', + 'a28', + 'a6', + 'a7', + 'a8', + 'a9', + 'a10', + 'a29', + 'a30', + 'a31', + 'a32', + 'a33', + 'a34', + 'a35', + 'a36', + 'a37', + 'a38', + 'a39', + 'a40', + 'a41', + 'a42', + 'a43', + 'a44', + 'a45', + 'a46', + 'a47', + 'a48', + 'a49', + 'a50', + 'a51', + 'a52', + 'a53', + 'a54', + 'a55', + 'a56', + 'a57', + 'a58', + 'a59', + 'a60', + 'a61', + 'a62', + 'a63', + 'a64', + 'a65', + 'a66', + 'a67', + 'a68', + 'a69', + 'a70', + 'a71', + 'a72', + 'a73', + 'a74', + 'a203', + 'a75', + 'a204', + 'a76', + 'a77', + 'a78', + 'a79', + 'a81', + 'a82', + 'a83', + 'a84', + 'a97', + 'a98', + 'a99', + 'a100', + '', + 'a89', + 'a90', + 'a93', + 'a94', + 'a91', + 'a92', + 'a205', + 'a85', + 'a206', + 'a86', + 'a87', + 'a88', + 'a95', + 'a96', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + 'a101', + 'a102', + 'a103', + 'a104', + 'a106', + 'a107', + 'a108', + 'a112', + 'a111', + 'a110', + 'a109', + 'a120', + 'a121', + 'a122', + 'a123', + 'a124', + 'a125', + 'a126', + 'a127', + 'a128', + 'a129', + 'a130', + 'a131', + 'a132', + 'a133', + 'a134', + 'a135', + 'a136', + 'a137', + 'a138', + 'a139', + 'a140', + 'a141', + 'a142', + 'a143', + 'a144', + 'a145', + 'a146', + 'a147', + 'a148', + 'a149', + 'a150', + 'a151', + 'a152', + 'a153', + 'a154', + 'a155', + 'a156', + 'a157', + 'a158', + 'a159', + 'a160', + 'a161', + 'a163', + 'a164', + 'a196', + 'a165', + 'a192', + 'a166', + 'a167', + 'a168', + 'a169', + 'a170', + 'a171', + 'a172', + 'a173', + 'a162', + 'a174', + 'a175', + 'a176', + 'a177', + 'a178', + 'a179', + 'a193', + 'a180', + 'a199', + 'a181', + 'a200', + 'a182', + '', + 'a201', + 'a183', + 'a184', + 'a197', + 'a185', + 'a194', + 'a198', + 'a186', + 'a195', + 'a187', + 'a188', + 'a189', + 'a190', + 'a191' + ]; + function getEncoding(encodingName) { + switch (encodingName) { + case 'WinAnsiEncoding': + return WinAnsiEncoding; + case 'StandardEncoding': + return StandardEncoding; + case 'MacRomanEncoding': + return MacRomanEncoding; + case 'SymbolSetEncoding': + return SymbolSetEncoding; + case 'ZapfDingbatsEncoding': + return ZapfDingbatsEncoding; + case 'ExpertEncoding': + return ExpertEncoding; + case 'MacExpertEncoding': + return MacExpertEncoding; + default: + return null; + } + } + exports.WinAnsiEncoding = WinAnsiEncoding; + exports.StandardEncoding = StandardEncoding; + exports.MacRomanEncoding = MacRomanEncoding; + exports.SymbolSetEncoding = SymbolSetEncoding; + exports.ZapfDingbatsEncoding = ZapfDingbatsEncoding; + exports.ExpertEncoding = ExpertEncoding; + exports.getEncoding = getEncoding; + })); + (function (root, factory) { + factory(root.pdfjsSharedUtil = {}); + }(this, function (exports) { + var globalScope = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : this; + var FONT_IDENTITY_MATRIX = [ + 0.001, + 0, + 0, + 0.001, + 0, + 0 + ]; + var TextRenderingMode = { + FILL: 0, + STROKE: 1, + FILL_STROKE: 2, + INVISIBLE: 3, + FILL_ADD_TO_PATH: 4, + STROKE_ADD_TO_PATH: 5, + FILL_STROKE_ADD_TO_PATH: 6, + ADD_TO_PATH: 7, + FILL_STROKE_MASK: 3, + ADD_TO_PATH_FLAG: 4 + }; + var ImageKind = { + GRAYSCALE_1BPP: 1, + RGB_24BPP: 2, + RGBA_32BPP: 3 + }; + var AnnotationType = { + TEXT: 1, + LINK: 2, + FREETEXT: 3, + LINE: 4, + SQUARE: 5, + CIRCLE: 6, + POLYGON: 7, + POLYLINE: 8, + HIGHLIGHT: 9, + UNDERLINE: 10, + SQUIGGLY: 11, + STRIKEOUT: 12, + STAMP: 13, + CARET: 14, + INK: 15, + POPUP: 16, + FILEATTACHMENT: 17, + SOUND: 18, + MOVIE: 19, + WIDGET: 20, + SCREEN: 21, + PRINTERMARK: 22, + TRAPNET: 23, + WATERMARK: 24, + THREED: 25, + REDACT: 26 + }; + var AnnotationFlag = { + INVISIBLE: 0x01, + HIDDEN: 0x02, + PRINT: 0x04, + NOZOOM: 0x08, + NOROTATE: 0x10, + NOVIEW: 0x20, + READONLY: 0x40, + LOCKED: 0x80, + TOGGLENOVIEW: 0x100, + LOCKEDCONTENTS: 0x200 + }; + var AnnotationFieldFlag = { + READONLY: 0x0000001, + REQUIRED: 0x0000002, + NOEXPORT: 0x0000004, + MULTILINE: 0x0001000, + PASSWORD: 0x0002000, + NOTOGGLETOOFF: 0x0004000, + RADIO: 0x0008000, + PUSHBUTTON: 0x0010000, + COMBO: 0x0020000, + EDIT: 0x0040000, + SORT: 0x0080000, + FILESELECT: 0x0100000, + MULTISELECT: 0x0200000, + DONOTSPELLCHECK: 0x0400000, + DONOTSCROLL: 0x0800000, + COMB: 0x1000000, + RICHTEXT: 0x2000000, + RADIOSINUNISON: 0x2000000, + COMMITONSELCHANGE: 0x4000000 + }; + var AnnotationBorderStyleType = { + SOLID: 1, + DASHED: 2, + BEVELED: 3, + INSET: 4, + UNDERLINE: 5 + }; + var StreamType = { + UNKNOWN: 0, + FLATE: 1, + LZW: 2, + DCT: 3, + JPX: 4, + JBIG: 5, + A85: 6, + AHX: 7, + CCF: 8, + RL: 9 + }; + var FontType = { + UNKNOWN: 0, + TYPE1: 1, + TYPE1C: 2, + CIDFONTTYPE0: 3, + CIDFONTTYPE0C: 4, + TRUETYPE: 5, + CIDFONTTYPE2: 6, + TYPE3: 7, + OPENTYPE: 8, + TYPE0: 9, + MMTYPE1: 10 + }; + var VERBOSITY_LEVELS = { + errors: 0, + warnings: 1, + infos: 5 + }; + var OPS = { + dependency: 1, + setLineWidth: 2, + setLineCap: 3, + setLineJoin: 4, + setMiterLimit: 5, + setDash: 6, + setRenderingIntent: 7, + setFlatness: 8, + setGState: 9, + save: 10, + restore: 11, + transform: 12, + moveTo: 13, + lineTo: 14, + curveTo: 15, + curveTo2: 16, + curveTo3: 17, + closePath: 18, + rectangle: 19, + stroke: 20, + closeStroke: 21, + fill: 22, + eoFill: 23, + fillStroke: 24, + eoFillStroke: 25, + closeFillStroke: 26, + closeEOFillStroke: 27, + endPath: 28, + clip: 29, + eoClip: 30, + beginText: 31, + endText: 32, + setCharSpacing: 33, + setWordSpacing: 34, + setHScale: 35, + setLeading: 36, + setFont: 37, + setTextRenderingMode: 38, + setTextRise: 39, + moveText: 40, + setLeadingMoveText: 41, + setTextMatrix: 42, + nextLine: 43, + showText: 44, + showSpacedText: 45, + nextLineShowText: 46, + nextLineSetSpacingShowText: 47, + setCharWidth: 48, + setCharWidthAndBounds: 49, + setStrokeColorSpace: 50, + setFillColorSpace: 51, + setStrokeColor: 52, + setStrokeColorN: 53, + setFillColor: 54, + setFillColorN: 55, + setStrokeGray: 56, + setFillGray: 57, + setStrokeRGBColor: 58, + setFillRGBColor: 59, + setStrokeCMYKColor: 60, + setFillCMYKColor: 61, + shadingFill: 62, + beginInlineImage: 63, + beginImageData: 64, + endInlineImage: 65, + paintXObject: 66, + markPoint: 67, + markPointProps: 68, + beginMarkedContent: 69, + beginMarkedContentProps: 70, + endMarkedContent: 71, + beginCompat: 72, + endCompat: 73, + paintFormXObjectBegin: 74, + paintFormXObjectEnd: 75, + beginGroup: 76, + endGroup: 77, + beginAnnotations: 78, + endAnnotations: 79, + beginAnnotation: 80, + endAnnotation: 81, + paintJpegXObject: 82, + paintImageMaskXObject: 83, + paintImageMaskXObjectGroup: 84, + paintImageXObject: 85, + paintInlineImageXObject: 86, + paintInlineImageXObjectGroup: 87, + paintImageXObjectRepeat: 88, + paintImageMaskXObjectRepeat: 89, + paintSolidColorImageMask: 90, + constructPath: 91 + }; + var verbosity = VERBOSITY_LEVELS.warnings; + function setVerbosityLevel(level) { + verbosity = level; + } + function getVerbosityLevel() { + return verbosity; + } + function info(msg) { + if (verbosity >= VERBOSITY_LEVELS.infos) { + console.log('Info: ' + msg); + } + } + function warn(msg) { + if (verbosity >= VERBOSITY_LEVELS.warnings) { + console.log('Warning: ' + msg); + } + } + function deprecated(details) { + console.log('Deprecated API usage: ' + details); + } + function error(msg) { + if (verbosity >= VERBOSITY_LEVELS.errors) { + console.log('Error: ' + msg); + console.log(backtrace()); + } + throw new Error(msg); + } + function backtrace() { + try { + throw new Error(); + } catch (e) { + return e.stack ? e.stack.split('\n').slice(2).join('\n') : ''; + } + } + function assert(cond, msg) { + if (!cond) { + error(msg); + } + } + var UNSUPPORTED_FEATURES = { + unknown: 'unknown', + forms: 'forms', + javaScript: 'javaScript', + smask: 'smask', + shadingPattern: 'shadingPattern', + font: 'font' + }; + function isSameOrigin(baseUrl, otherUrl) { + try { + var base = new URL(baseUrl); + if (!base.origin || base.origin === 'null') { + return false; + } + } catch (e) { + return false; + } + var other = new URL(otherUrl, base); + return base.origin === other.origin; + } + function isValidProtocol(url) { + if (!url) { + return false; + } + switch (url.protocol) { + case 'http:': + case 'https:': + case 'ftp:': + case 'mailto:': + case 'tel:': + return true; + default: + return false; + } + } + function createValidAbsoluteUrl(url, baseUrl) { + if (!url) { + return null; + } + try { + var absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url); + if (isValidProtocol(absoluteUrl)) { + return absoluteUrl; + } + } catch (ex) { + } + return null; + } + function shadow(obj, prop, value) { + Object.defineProperty(obj, prop, { + value: value, + enumerable: true, + configurable: true, + writable: false + }); + return value; + } + function getLookupTableFactory(initializer) { + var lookup; + return function () { + if (initializer) { + lookup = Object.create(null); + initializer(lookup); + initializer = null; + } + return lookup; + }; + } + var PasswordResponses = { + NEED_PASSWORD: 1, + INCORRECT_PASSWORD: 2 + }; + var PasswordException = function PasswordExceptionClosure() { + function PasswordException(msg, code) { + this.name = 'PasswordException'; + this.message = msg; + this.code = code; + } + PasswordException.prototype = new Error(); + PasswordException.constructor = PasswordException; + return PasswordException; + }(); + var UnknownErrorException = function UnknownErrorExceptionClosure() { + function UnknownErrorException(msg, details) { + this.name = 'UnknownErrorException'; + this.message = msg; + this.details = details; + } + UnknownErrorException.prototype = new Error(); + UnknownErrorException.constructor = UnknownErrorException; + return UnknownErrorException; + }(); + var InvalidPDFException = function InvalidPDFExceptionClosure() { + function InvalidPDFException(msg) { + this.name = 'InvalidPDFException'; + this.message = msg; + } + InvalidPDFException.prototype = new Error(); + InvalidPDFException.constructor = InvalidPDFException; + return InvalidPDFException; + }(); + var MissingPDFException = function MissingPDFExceptionClosure() { + function MissingPDFException(msg) { + this.name = 'MissingPDFException'; + this.message = msg; + } + MissingPDFException.prototype = new Error(); + MissingPDFException.constructor = MissingPDFException; + return MissingPDFException; + }(); + var UnexpectedResponseException = function UnexpectedResponseExceptionClosure() { + function UnexpectedResponseException(msg, status) { + this.name = 'UnexpectedResponseException'; + this.message = msg; + this.status = status; + } + UnexpectedResponseException.prototype = new Error(); + UnexpectedResponseException.constructor = UnexpectedResponseException; + return UnexpectedResponseException; + }(); + var NotImplementedException = function NotImplementedExceptionClosure() { + function NotImplementedException(msg) { + this.message = msg; + } + NotImplementedException.prototype = new Error(); + NotImplementedException.prototype.name = 'NotImplementedException'; + NotImplementedException.constructor = NotImplementedException; + return NotImplementedException; + }(); + var MissingDataException = function MissingDataExceptionClosure() { + function MissingDataException(begin, end) { + this.begin = begin; + this.end = end; + this.message = 'Missing data [' + begin + ', ' + end + ')'; + } + MissingDataException.prototype = new Error(); + MissingDataException.prototype.name = 'MissingDataException'; + MissingDataException.constructor = MissingDataException; + return MissingDataException; + }(); + var XRefParseException = function XRefParseExceptionClosure() { + function XRefParseException(msg) { + this.message = msg; + } + XRefParseException.prototype = new Error(); + XRefParseException.prototype.name = 'XRefParseException'; + XRefParseException.constructor = XRefParseException; + return XRefParseException; + }(); + var NullCharactersRegExp = /\x00/g; + function removeNullCharacters(str) { + if (typeof str !== 'string') { + warn('The argument for removeNullCharacters must be a string.'); + return str; + } + return str.replace(NullCharactersRegExp, ''); + } + function bytesToString(bytes) { + assert(bytes !== null && typeof bytes === 'object' && bytes.length !== undefined, 'Invalid argument for bytesToString'); + var length = bytes.length; + var MAX_ARGUMENT_COUNT = 8192; + if (length < MAX_ARGUMENT_COUNT) { + return String.fromCharCode.apply(null, bytes); + } + var strBuf = []; + for (var i = 0; i < length; i += MAX_ARGUMENT_COUNT) { + var chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length); + var chunk = bytes.subarray(i, chunkEnd); + strBuf.push(String.fromCharCode.apply(null, chunk)); + } + return strBuf.join(''); + } + function stringToBytes(str) { + assert(typeof str === 'string', 'Invalid argument for stringToBytes'); + var length = str.length; + var bytes = new Uint8Array(length); + for (var i = 0; i < length; ++i) { + bytes[i] = str.charCodeAt(i) & 0xFF; + } + return bytes; + } + function arrayByteLength(arr) { + if (arr.length !== undefined) { + return arr.length; + } + assert(arr.byteLength !== undefined); + return arr.byteLength; + } + function arraysToBytes(arr) { + if (arr.length === 1 && arr[0] instanceof Uint8Array) { + return arr[0]; + } + var resultLength = 0; + var i, ii = arr.length; + var item, itemLength; + for (i = 0; i < ii; i++) { + item = arr[i]; + itemLength = arrayByteLength(item); + resultLength += itemLength; + } + var pos = 0; + var data = new Uint8Array(resultLength); + for (i = 0; i < ii; i++) { + item = arr[i]; + if (!(item instanceof Uint8Array)) { + if (typeof item === 'string') { + item = stringToBytes(item); + } else { + item = new Uint8Array(item); + } + } + itemLength = item.byteLength; + data.set(item, pos); + pos += itemLength; + } + return data; + } + function string32(value) { + return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff); + } + function log2(x) { + var n = 1, i = 0; + while (x > n) { + n <<= 1; + i++; + } + return i; + } + function readInt8(data, start) { + return data[start] << 24 >> 24; + } + function readUint16(data, offset) { + return data[offset] << 8 | data[offset + 1]; + } + function readUint32(data, offset) { + return (data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]) >>> 0; + } + function isLittleEndian() { + var buffer8 = new Uint8Array(2); + buffer8[0] = 1; + var buffer16 = new Uint16Array(buffer8.buffer); + return buffer16[0] === 1; + } + function isEvalSupported() { + try { + new Function(''); + return true; + } catch (e) { + return false; + } + } + var Uint32ArrayView = function Uint32ArrayViewClosure() { + function Uint32ArrayView(buffer, length) { + this.buffer = buffer; + this.byteLength = buffer.length; + this.length = length === undefined ? this.byteLength >> 2 : length; + ensureUint32ArrayViewProps(this.length); + } + Uint32ArrayView.prototype = Object.create(null); + var uint32ArrayViewSetters = 0; + function createUint32ArrayProp(index) { + return { + get: function () { + var buffer = this.buffer, offset = index << 2; + return (buffer[offset] | buffer[offset + 1] << 8 | buffer[offset + 2] << 16 | buffer[offset + 3] << 24) >>> 0; + }, + set: function (value) { + var buffer = this.buffer, offset = index << 2; + buffer[offset] = value & 255; + buffer[offset + 1] = value >> 8 & 255; + buffer[offset + 2] = value >> 16 & 255; + buffer[offset + 3] = value >>> 24 & 255; + } + }; + } + function ensureUint32ArrayViewProps(length) { + while (uint32ArrayViewSetters < length) { + Object.defineProperty(Uint32ArrayView.prototype, uint32ArrayViewSetters, createUint32ArrayProp(uint32ArrayViewSetters)); + uint32ArrayViewSetters++; + } + } + return Uint32ArrayView; + }(); + exports.Uint32ArrayView = Uint32ArrayView; + var IDENTITY_MATRIX = [ + 1, + 0, + 0, + 1, + 0, + 0 + ]; + var Util = function UtilClosure() { + function Util() { + } + var rgbBuf = [ + 'rgb(', + 0, + ',', + 0, + ',', + 0, + ')' + ]; + Util.makeCssRgb = function Util_makeCssRgb(r, g, b) { + rgbBuf[1] = r; + rgbBuf[3] = g; + rgbBuf[5] = b; + return rgbBuf.join(''); + }; + Util.transform = function Util_transform(m1, m2) { + return [ + m1[0] * m2[0] + m1[2] * m2[1], + m1[1] * m2[0] + m1[3] * m2[1], + m1[0] * m2[2] + m1[2] * m2[3], + m1[1] * m2[2] + m1[3] * m2[3], + m1[0] * m2[4] + m1[2] * m2[5] + m1[4], + m1[1] * m2[4] + m1[3] * m2[5] + m1[5] + ]; + }; + Util.applyTransform = function Util_applyTransform(p, m) { + var xt = p[0] * m[0] + p[1] * m[2] + m[4]; + var yt = p[0] * m[1] + p[1] * m[3] + m[5]; + return [ + xt, + yt + ]; + }; + Util.applyInverseTransform = function Util_applyInverseTransform(p, m) { + var d = m[0] * m[3] - m[1] * m[2]; + var xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d; + var yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d; + return [ + xt, + yt + ]; + }; + Util.getAxialAlignedBoundingBox = function Util_getAxialAlignedBoundingBox(r, m) { + var p1 = Util.applyTransform(r, m); + var p2 = Util.applyTransform(r.slice(2, 4), m); + var p3 = Util.applyTransform([ + r[0], + r[3] + ], m); + var p4 = Util.applyTransform([ + r[2], + r[1] + ], m); + return [ + Math.min(p1[0], p2[0], p3[0], p4[0]), + Math.min(p1[1], p2[1], p3[1], p4[1]), + Math.max(p1[0], p2[0], p3[0], p4[0]), + Math.max(p1[1], p2[1], p3[1], p4[1]) + ]; + }; + Util.inverseTransform = function Util_inverseTransform(m) { + var d = m[0] * m[3] - m[1] * m[2]; + return [ + m[3] / d, + -m[1] / d, + -m[2] / d, + m[0] / d, + (m[2] * m[5] - m[4] * m[3]) / d, + (m[4] * m[1] - m[5] * m[0]) / d + ]; + }; + Util.apply3dTransform = function Util_apply3dTransform(m, v) { + return [ + m[0] * v[0] + m[1] * v[1] + m[2] * v[2], + m[3] * v[0] + m[4] * v[1] + m[5] * v[2], + m[6] * v[0] + m[7] * v[1] + m[8] * v[2] + ]; + }; + Util.singularValueDecompose2dScale = function Util_singularValueDecompose2dScale(m) { + var transpose = [ + m[0], + m[2], + m[1], + m[3] + ]; + var a = m[0] * transpose[0] + m[1] * transpose[2]; + var b = m[0] * transpose[1] + m[1] * transpose[3]; + var c = m[2] * transpose[0] + m[3] * transpose[2]; + var d = m[2] * transpose[1] + m[3] * transpose[3]; + var first = (a + d) / 2; + var second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2; + var sx = first + second || 1; + var sy = first - second || 1; + return [ + Math.sqrt(sx), + Math.sqrt(sy) + ]; + }; + Util.normalizeRect = function Util_normalizeRect(rect) { + var r = rect.slice(0); + if (rect[0] > rect[2]) { + r[0] = rect[2]; + r[2] = rect[0]; + } + if (rect[1] > rect[3]) { + r[1] = rect[3]; + r[3] = rect[1]; + } + return r; + }; + Util.intersect = function Util_intersect(rect1, rect2) { + function compare(a, b) { + return a - b; + } + var orderedX = [ + rect1[0], + rect1[2], + rect2[0], + rect2[2] + ].sort(compare), orderedY = [ + rect1[1], + rect1[3], + rect2[1], + rect2[3] + ].sort(compare), result = []; + rect1 = Util.normalizeRect(rect1); + rect2 = Util.normalizeRect(rect2); + if (orderedX[0] === rect1[0] && orderedX[1] === rect2[0] || orderedX[0] === rect2[0] && orderedX[1] === rect1[0]) { + result[0] = orderedX[1]; + result[2] = orderedX[2]; + } else { + return false; + } + if (orderedY[0] === rect1[1] && orderedY[1] === rect2[1] || orderedY[0] === rect2[1] && orderedY[1] === rect1[1]) { + result[1] = orderedY[1]; + result[3] = orderedY[2]; + } else { + return false; + } + return result; + }; + Util.sign = function Util_sign(num) { + return num < 0 ? -1 : 1; + }; + var ROMAN_NUMBER_MAP = [ + '', + 'C', + 'CC', + 'CCC', + 'CD', + 'D', + 'DC', + 'DCC', + 'DCCC', + 'CM', + '', + 'X', + 'XX', + 'XXX', + 'XL', + 'L', + 'LX', + 'LXX', + 'LXXX', + 'XC', + '', + 'I', + 'II', + 'III', + 'IV', + 'V', + 'VI', + 'VII', + 'VIII', + 'IX' + ]; + Util.toRoman = function Util_toRoman(number, lowerCase) { + assert(isInt(number) && number > 0, 'The number should be a positive integer.'); + var pos, romanBuf = []; + while (number >= 1000) { + number -= 1000; + romanBuf.push('M'); + } + pos = number / 100 | 0; + number %= 100; + romanBuf.push(ROMAN_NUMBER_MAP[pos]); + pos = number / 10 | 0; + number %= 10; + romanBuf.push(ROMAN_NUMBER_MAP[10 + pos]); + romanBuf.push(ROMAN_NUMBER_MAP[20 + number]); + var romanStr = romanBuf.join(''); + return lowerCase ? romanStr.toLowerCase() : romanStr; + }; + Util.appendToArray = function Util_appendToArray(arr1, arr2) { + Array.prototype.push.apply(arr1, arr2); + }; + Util.prependToArray = function Util_prependToArray(arr1, arr2) { + Array.prototype.unshift.apply(arr1, arr2); + }; + Util.extendObj = function extendObj(obj1, obj2) { + for (var key in obj2) { + obj1[key] = obj2[key]; + } + }; + Util.getInheritableProperty = function Util_getInheritableProperty(dict, name, getArray) { + while (dict && !dict.has(name)) { + dict = dict.get('Parent'); + } + if (!dict) { + return null; + } + return getArray ? dict.getArray(name) : dict.get(name); + }; + Util.inherit = function Util_inherit(sub, base, prototype) { + sub.prototype = Object.create(base.prototype); + sub.prototype.constructor = sub; + for (var prop in prototype) { + sub.prototype[prop] = prototype[prop]; + } + }; + Util.loadScript = function Util_loadScript(src, callback) { + var script = document.createElement('script'); + var loaded = false; + script.setAttribute('src', src); + if (callback) { + script.onload = function () { + if (!loaded) { + callback(); + } + loaded = true; + }; + } + document.getElementsByTagName('head')[0].appendChild(script); + }; + return Util; + }(); + var PageViewport = function PageViewportClosure() { + function PageViewport(viewBox, scale, rotation, offsetX, offsetY, dontFlip) { + this.viewBox = viewBox; + this.scale = scale; + this.rotation = rotation; + this.offsetX = offsetX; + this.offsetY = offsetY; + var centerX = (viewBox[2] + viewBox[0]) / 2; + var centerY = (viewBox[3] + viewBox[1]) / 2; + var rotateA, rotateB, rotateC, rotateD; + rotation = rotation % 360; + rotation = rotation < 0 ? rotation + 360 : rotation; + switch (rotation) { + case 180: + rotateA = -1; + rotateB = 0; + rotateC = 0; + rotateD = 1; + break; + case 90: + rotateA = 0; + rotateB = 1; + rotateC = 1; + rotateD = 0; + break; + case 270: + rotateA = 0; + rotateB = -1; + rotateC = -1; + rotateD = 0; + break; + default: + rotateA = 1; + rotateB = 0; + rotateC = 0; + rotateD = -1; + break; + } + if (dontFlip) { + rotateC = -rotateC; + rotateD = -rotateD; + } + var offsetCanvasX, offsetCanvasY; + var width, height; + if (rotateA === 0) { + offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX; + offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY; + width = Math.abs(viewBox[3] - viewBox[1]) * scale; + height = Math.abs(viewBox[2] - viewBox[0]) * scale; + } else { + offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX; + offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY; + width = Math.abs(viewBox[2] - viewBox[0]) * scale; + height = Math.abs(viewBox[3] - viewBox[1]) * scale; + } + this.transform = [ + rotateA * scale, + rotateB * scale, + rotateC * scale, + rotateD * scale, + offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, + offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY + ]; + this.width = width; + this.height = height; + this.fontScale = scale; + } + PageViewport.prototype = { + clone: function PageViewPort_clone(args) { + args = args || {}; + var scale = 'scale' in args ? args.scale : this.scale; + var rotation = 'rotation' in args ? args.rotation : this.rotation; + return new PageViewport(this.viewBox.slice(), scale, rotation, this.offsetX, this.offsetY, args.dontFlip); + }, + convertToViewportPoint: function PageViewport_convertToViewportPoint(x, y) { + return Util.applyTransform([ + x, + y + ], this.transform); + }, + convertToViewportRectangle: function PageViewport_convertToViewportRectangle(rect) { + var tl = Util.applyTransform([ + rect[0], + rect[1] + ], this.transform); + var br = Util.applyTransform([ + rect[2], + rect[3] + ], this.transform); + return [ + tl[0], + tl[1], + br[0], + br[1] + ]; + }, + convertToPdfPoint: function PageViewport_convertToPdfPoint(x, y) { + return Util.applyInverseTransform([ + x, + y + ], this.transform); + } + }; + return PageViewport; + }(); + var PDFStringTranslateTable = [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0x2D8, + 0x2C7, + 0x2C6, + 0x2D9, + 0x2DD, + 0x2DB, + 0x2DA, + 0x2DC, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0x2022, + 0x2020, + 0x2021, + 0x2026, + 0x2014, + 0x2013, + 0x192, + 0x2044, + 0x2039, + 0x203A, + 0x2212, + 0x2030, + 0x201E, + 0x201C, + 0x201D, + 0x2018, + 0x2019, + 0x201A, + 0x2122, + 0xFB01, + 0xFB02, + 0x141, + 0x152, + 0x160, + 0x178, + 0x17D, + 0x131, + 0x142, + 0x153, + 0x161, + 0x17E, + 0, + 0x20AC + ]; + function stringToPDFString(str) { + var i, n = str.length, strBuf = []; + if (str[0] === '\xFE' && str[1] === '\xFF') { + for (i = 2; i < n; i += 2) { + strBuf.push(String.fromCharCode(str.charCodeAt(i) << 8 | str.charCodeAt(i + 1))); + } + } else { + for (i = 0; i < n; ++i) { + var code = PDFStringTranslateTable[str.charCodeAt(i)]; + strBuf.push(code ? String.fromCharCode(code) : str.charAt(i)); + } + } + return strBuf.join(''); + } + function stringToUTF8String(str) { + return decodeURIComponent(escape(str)); + } + function utf8StringToString(str) { + return unescape(encodeURIComponent(str)); + } + function isEmptyObj(obj) { + for (var key in obj) { + return false; + } + return true; + } + function isBool(v) { + return typeof v === 'boolean'; + } + function isInt(v) { + return typeof v === 'number' && (v | 0) === v; + } + function isNum(v) { + return typeof v === 'number'; + } + function isString(v) { + return typeof v === 'string'; + } + function isArray(v) { + return v instanceof Array; + } + function isArrayBuffer(v) { + return typeof v === 'object' && v !== null && v.byteLength !== undefined; + } + function isSpace(ch) { + return ch === 0x20 || ch === 0x09 || ch === 0x0D || ch === 0x0A; + } + function createPromiseCapability() { + var capability = {}; + capability.promise = new Promise(function (resolve, reject) { + capability.resolve = resolve; + capability.reject = reject; + }); + return capability; + } + (function PromiseClosure() { + if (globalScope.Promise) { + if (typeof globalScope.Promise.all !== 'function') { + globalScope.Promise.all = function (iterable) { + var count = 0, results = [], resolve, reject; + var promise = new globalScope.Promise(function (resolve_, reject_) { + resolve = resolve_; + reject = reject_; + }); + iterable.forEach(function (p, i) { + count++; + p.then(function (result) { + results[i] = result; + count--; + if (count === 0) { + resolve(results); + } + }, reject); + }); + if (count === 0) { + resolve(results); + } + return promise; + }; + } + if (typeof globalScope.Promise.resolve !== 'function') { + globalScope.Promise.resolve = function (value) { + return new globalScope.Promise(function (resolve) { + resolve(value); + }); + }; + } + if (typeof globalScope.Promise.reject !== 'function') { + globalScope.Promise.reject = function (reason) { + return new globalScope.Promise(function (resolve, reject) { + reject(reason); + }); + }; + } + if (typeof globalScope.Promise.prototype.catch !== 'function') { + globalScope.Promise.prototype.catch = function (onReject) { + return globalScope.Promise.prototype.then(undefined, onReject); + }; + } + return; + } + var STATUS_PENDING = 0; + var STATUS_RESOLVED = 1; + var STATUS_REJECTED = 2; + var REJECTION_TIMEOUT = 500; + var HandlerManager = { + handlers: [], + running: false, + unhandledRejections: [], + pendingRejectionCheck: false, + scheduleHandlers: function scheduleHandlers(promise) { + if (promise._status === STATUS_PENDING) { + return; + } + this.handlers = this.handlers.concat(promise._handlers); + promise._handlers = []; + if (this.running) { + return; + } + this.running = true; + setTimeout(this.runHandlers.bind(this), 0); + }, + runHandlers: function runHandlers() { + var RUN_TIMEOUT = 1; + var timeoutAt = Date.now() + RUN_TIMEOUT; + while (this.handlers.length > 0) { + var handler = this.handlers.shift(); + var nextStatus = handler.thisPromise._status; + var nextValue = handler.thisPromise._value; + try { + if (nextStatus === STATUS_RESOLVED) { + if (typeof handler.onResolve === 'function') { + nextValue = handler.onResolve(nextValue); + } + } else if (typeof handler.onReject === 'function') { + nextValue = handler.onReject(nextValue); + nextStatus = STATUS_RESOLVED; + if (handler.thisPromise._unhandledRejection) { + this.removeUnhandeledRejection(handler.thisPromise); + } + } + } catch (ex) { + nextStatus = STATUS_REJECTED; + nextValue = ex; + } + handler.nextPromise._updateStatus(nextStatus, nextValue); + if (Date.now() >= timeoutAt) { + break; + } + } + if (this.handlers.length > 0) { + setTimeout(this.runHandlers.bind(this), 0); + return; + } + this.running = false; + }, + addUnhandledRejection: function addUnhandledRejection(promise) { + this.unhandledRejections.push({ + promise: promise, + time: Date.now() + }); + this.scheduleRejectionCheck(); + }, + removeUnhandeledRejection: function removeUnhandeledRejection(promise) { + promise._unhandledRejection = false; + for (var i = 0; i < this.unhandledRejections.length; i++) { + if (this.unhandledRejections[i].promise === promise) { + this.unhandledRejections.splice(i); + i--; + } + } + }, + scheduleRejectionCheck: function scheduleRejectionCheck() { + if (this.pendingRejectionCheck) { + return; + } + this.pendingRejectionCheck = true; + setTimeout(function rejectionCheck() { + this.pendingRejectionCheck = false; + var now = Date.now(); + for (var i = 0; i < this.unhandledRejections.length; i++) { + if (now - this.unhandledRejections[i].time > REJECTION_TIMEOUT) { + var unhandled = this.unhandledRejections[i].promise._value; + var msg = 'Unhandled rejection: ' + unhandled; + if (unhandled.stack) { + msg += '\n' + unhandled.stack; + } + warn(msg); + this.unhandledRejections.splice(i); + i--; + } + } + if (this.unhandledRejections.length) { + this.scheduleRejectionCheck(); + } + }.bind(this), REJECTION_TIMEOUT); + } + }; + var Promise = function Promise(resolver) { + this._status = STATUS_PENDING; + this._handlers = []; + try { + resolver.call(this, this._resolve.bind(this), this._reject.bind(this)); + } catch (e) { + this._reject(e); + } + }; + Promise.all = function Promise_all(promises) { + var resolveAll, rejectAll; + var deferred = new Promise(function (resolve, reject) { + resolveAll = resolve; + rejectAll = reject; + }); + var unresolved = promises.length; + var results = []; + if (unresolved === 0) { + resolveAll(results); + return deferred; + } + function reject(reason) { + if (deferred._status === STATUS_REJECTED) { + return; + } + results = []; + rejectAll(reason); + } + for (var i = 0, ii = promises.length; i < ii; ++i) { + var promise = promises[i]; + var resolve = function (i) { + return function (value) { + if (deferred._status === STATUS_REJECTED) { + return; + } + results[i] = value; + unresolved--; + if (unresolved === 0) { + resolveAll(results); + } + }; + }(i); + if (Promise.isPromise(promise)) { + promise.then(resolve, reject); + } else { + resolve(promise); + } + } + return deferred; + }; + Promise.isPromise = function Promise_isPromise(value) { + return value && typeof value.then === 'function'; + }; + Promise.resolve = function Promise_resolve(value) { + return new Promise(function (resolve) { + resolve(value); + }); + }; + Promise.reject = function Promise_reject(reason) { + return new Promise(function (resolve, reject) { + reject(reason); + }); + }; + Promise.prototype = { + _status: null, + _value: null, + _handlers: null, + _unhandledRejection: null, + _updateStatus: function Promise__updateStatus(status, value) { + if (this._status === STATUS_RESOLVED || this._status === STATUS_REJECTED) { + return; + } + if (status === STATUS_RESOLVED && Promise.isPromise(value)) { + value.then(this._updateStatus.bind(this, STATUS_RESOLVED), this._updateStatus.bind(this, STATUS_REJECTED)); + return; + } + this._status = status; + this._value = value; + if (status === STATUS_REJECTED && this._handlers.length === 0) { + this._unhandledRejection = true; + HandlerManager.addUnhandledRejection(this); + } + HandlerManager.scheduleHandlers(this); + }, + _resolve: function Promise_resolve(value) { + this._updateStatus(STATUS_RESOLVED, value); + }, + _reject: function Promise_reject(reason) { + this._updateStatus(STATUS_REJECTED, reason); + }, + then: function Promise_then(onResolve, onReject) { + var nextPromise = new Promise(function (resolve, reject) { + this.resolve = resolve; + this.reject = reject; + }); + this._handlers.push({ + thisPromise: this, + onResolve: onResolve, + onReject: onReject, + nextPromise: nextPromise + }); + HandlerManager.scheduleHandlers(this); + return nextPromise; + }, + catch: function Promise_catch(onReject) { + return this.then(undefined, onReject); + } + }; + globalScope.Promise = Promise; + }()); + (function WeakMapClosure() { + if (globalScope.WeakMap) { + return; + } + var id = 0; + function WeakMap() { + this.id = '$weakmap' + id++; + } + WeakMap.prototype = { + has: function (obj) { + return !!Object.getOwnPropertyDescriptor(obj, this.id); + }, + get: function (obj, defaultValue) { + return this.has(obj) ? obj[this.id] : defaultValue; + }, + set: function (obj, value) { + Object.defineProperty(obj, this.id, { + value: value, + enumerable: false, + configurable: true + }); + }, + delete: function (obj) { + delete obj[this.id]; + } + }; + globalScope.WeakMap = WeakMap; + }()); + var StatTimer = function StatTimerClosure() { + function rpad(str, pad, length) { + while (str.length < length) { + str += pad; + } + return str; + } + function StatTimer() { + this.started = Object.create(null); + this.times = []; + this.enabled = true; + } + StatTimer.prototype = { + time: function StatTimer_time(name) { + if (!this.enabled) { + return; + } + if (name in this.started) { + warn('Timer is already running for ' + name); + } + this.started[name] = Date.now(); + }, + timeEnd: function StatTimer_timeEnd(name) { + if (!this.enabled) { + return; + } + if (!(name in this.started)) { + warn('Timer has not been started for ' + name); + } + this.times.push({ + 'name': name, + 'start': this.started[name], + 'end': Date.now() + }); + delete this.started[name]; + }, + toString: function StatTimer_toString() { + var i, ii; + var times = this.times; + var out = ''; + var longest = 0; + for (i = 0, ii = times.length; i < ii; ++i) { + var name = times[i]['name']; + if (name.length > longest) { + longest = name.length; + } + } + for (i = 0, ii = times.length; i < ii; ++i) { + var span = times[i]; + var duration = span.end - span.start; + out += rpad(span['name'], ' ', longest) + ' ' + duration + 'ms\n'; + } + return out; + } + }; + return StatTimer; + }(); + var createBlob = function createBlob(data, contentType) { + if (typeof Blob !== 'undefined') { + return new Blob([data], { type: contentType }); + } + warn('The "Blob" constructor is not supported.'); + }; + var createObjectURL = function createObjectURLClosure() { + var digits = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + return function createObjectURL(data, contentType, forceDataSchema) { + if (!forceDataSchema && typeof URL !== 'undefined' && URL.createObjectURL) { + var blob = createBlob(data, contentType); + return URL.createObjectURL(blob); + } + var buffer = 'data:' + contentType + ';base64,'; + for (var i = 0, ii = data.length; i < ii; i += 3) { + var b1 = data[i] & 0xFF; + var b2 = data[i + 1] & 0xFF; + var b3 = data[i + 2] & 0xFF; + var d1 = b1 >> 2, d2 = (b1 & 3) << 4 | b2 >> 4; + var d3 = i + 1 < ii ? (b2 & 0xF) << 2 | b3 >> 6 : 64; + var d4 = i + 2 < ii ? b3 & 0x3F : 64; + buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4]; + } + return buffer; + }; + }(); + function MessageHandler(sourceName, targetName, comObj) { + this.sourceName = sourceName; + this.targetName = targetName; + this.comObj = comObj; + this.callbackIndex = 1; + this.postMessageTransfers = true; + var callbacksCapabilities = this.callbacksCapabilities = Object.create(null); + var ah = this.actionHandler = Object.create(null); + this._onComObjOnMessage = function messageHandlerComObjOnMessage(event) { + var data = event.data; + if (data.targetName !== this.sourceName) { + return; + } + if (data.isReply) { + var callbackId = data.callbackId; + if (data.callbackId in callbacksCapabilities) { + var callback = callbacksCapabilities[callbackId]; + delete callbacksCapabilities[callbackId]; + if ('error' in data) { + callback.reject(data.error); + } else { + callback.resolve(data.data); + } + } else { + error('Cannot resolve callback ' + callbackId); + } + } else if (data.action in ah) { + var action = ah[data.action]; + if (data.callbackId) { + var sourceName = this.sourceName; + var targetName = data.sourceName; + Promise.resolve().then(function () { + return action[0].call(action[1], data.data); + }).then(function (result) { + comObj.postMessage({ + sourceName: sourceName, + targetName: targetName, + isReply: true, + callbackId: data.callbackId, + data: result + }); + }, function (reason) { + if (reason instanceof Error) { + reason = reason + ''; + } + comObj.postMessage({ + sourceName: sourceName, + targetName: targetName, + isReply: true, + callbackId: data.callbackId, + error: reason + }); + }); + } else { + action[0].call(action[1], data.data); + } + } else { + error('Unknown action from worker: ' + data.action); + } + }.bind(this); + comObj.addEventListener('message', this._onComObjOnMessage); + } + MessageHandler.prototype = { + on: function messageHandlerOn(actionName, handler, scope) { + var ah = this.actionHandler; + if (ah[actionName]) { + error('There is already an actionName called "' + actionName + '"'); + } + ah[actionName] = [ + handler, + scope + ]; + }, + send: function messageHandlerSend(actionName, data, transfers) { + var message = { + sourceName: this.sourceName, + targetName: this.targetName, + action: actionName, + data: data + }; + this.postMessage(message, transfers); + }, + sendWithPromise: function messageHandlerSendWithPromise(actionName, data, transfers) { + var callbackId = this.callbackIndex++; + var message = { + sourceName: this.sourceName, + targetName: this.targetName, + action: actionName, + data: data, + callbackId: callbackId + }; + var capability = createPromiseCapability(); + this.callbacksCapabilities[callbackId] = capability; + try { + this.postMessage(message, transfers); + } catch (e) { + capability.reject(e); + } + return capability.promise; + }, + postMessage: function (message, transfers) { + if (transfers && this.postMessageTransfers) { + this.comObj.postMessage(message, transfers); + } else { + this.comObj.postMessage(message); + } + }, + destroy: function () { + this.comObj.removeEventListener('message', this._onComObjOnMessage); + } + }; + function loadJpegStream(id, imageUrl, objs) { + var img = new Image(); + img.onload = function loadJpegStream_onloadClosure() { + objs.resolve(id, img); + }; + img.onerror = function loadJpegStream_onerrorClosure() { + objs.resolve(id, null); + warn('Error during JPEG image loading'); + }; + img.src = imageUrl; + } + /* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + (function checkURLConstructor(scope) { + var hasWorkingUrl = false; + try { + if (typeof URL === 'function' && typeof URL.prototype === 'object' && 'origin' in URL.prototype) { + var u = new URL('b', 'http://a'); + u.pathname = 'c%20d'; + hasWorkingUrl = u.href === 'http://a/c%20d'; + } + } catch (e) { + } + if (hasWorkingUrl) { + return; + } + var relative = Object.create(null); + relative['ftp'] = 21; + relative['file'] = 0; + relative['gopher'] = 70; + relative['http'] = 80; + relative['https'] = 443; + relative['ws'] = 80; + relative['wss'] = 443; + var relativePathDotMapping = Object.create(null); + relativePathDotMapping['%2e'] = '.'; + relativePathDotMapping['.%2e'] = '..'; + relativePathDotMapping['%2e.'] = '..'; + relativePathDotMapping['%2e%2e'] = '..'; + function isRelativeScheme(scheme) { + return relative[scheme] !== undefined; + } + function invalid() { + clear.call(this); + this._isInvalid = true; + } + function IDNAToASCII(h) { + if (h === '') { + invalid.call(this); + } + return h.toLowerCase(); + } + function percentEscape(c) { + var unicode = c.charCodeAt(0); + if (unicode > 0x20 && unicode < 0x7F && [ + 0x22, + 0x23, + 0x3C, + 0x3E, + 0x3F, + 0x60 + ].indexOf(unicode) === -1) { + return c; + } + return encodeURIComponent(c); + } + function percentEscapeQuery(c) { + var unicode = c.charCodeAt(0); + if (unicode > 0x20 && unicode < 0x7F && [ + 0x22, + 0x23, + 0x3C, + 0x3E, + 0x60 + ].indexOf(unicode) === -1) { + return c; + } + return encodeURIComponent(c); + } + var EOF, ALPHA = /[a-zA-Z]/, ALPHANUMERIC = /[a-zA-Z0-9\+\-\.]/; + function parse(input, stateOverride, base) { + function err(message) { + errors.push(message); + } + var state = stateOverride || 'scheme start', cursor = 0, buffer = '', seenAt = false, seenBracket = false, errors = []; + loop: + while ((input[cursor - 1] !== EOF || cursor === 0) && !this._isInvalid) { + var c = input[cursor]; + switch (state) { + case 'scheme start': + if (c && ALPHA.test(c)) { + buffer += c.toLowerCase(); + state = 'scheme'; + } else if (!stateOverride) { + buffer = ''; + state = 'no scheme'; + continue; + } else { + err('Invalid scheme.'); + break loop; + } + break; + case 'scheme': + if (c && ALPHANUMERIC.test(c)) { + buffer += c.toLowerCase(); + } else if (c === ':') { + this._scheme = buffer; + buffer = ''; + if (stateOverride) { + break loop; + } + if (isRelativeScheme(this._scheme)) { + this._isRelative = true; + } + if (this._scheme === 'file') { + state = 'relative'; + } else if (this._isRelative && base && base._scheme === this._scheme) { + state = 'relative or authority'; + } else if (this._isRelative) { + state = 'authority first slash'; + } else { + state = 'scheme data'; + } + } else if (!stateOverride) { + buffer = ''; + cursor = 0; + state = 'no scheme'; + continue; + } else if (EOF === c) { + break loop; + } else { + err('Code point not allowed in scheme: ' + c); + break loop; + } + break; + case 'scheme data': + if (c === '?') { + this._query = '?'; + state = 'query'; + } else if (c === '#') { + this._fragment = '#'; + state = 'fragment'; + } else { + if (EOF !== c && '\t' !== c && '\n' !== c && '\r' !== c) { + this._schemeData += percentEscape(c); + } + } + break; + case 'no scheme': + if (!base || !isRelativeScheme(base._scheme)) { + err('Missing scheme.'); + invalid.call(this); + } else { + state = 'relative'; + continue; + } + break; + case 'relative or authority': + if (c === '/' && input[cursor + 1] === '/') { + state = 'authority ignore slashes'; + } else { + err('Expected /, got: ' + c); + state = 'relative'; + continue; + } + break; + case 'relative': + this._isRelative = true; + if ('file' !== this._scheme) { + this._scheme = base._scheme; + } + if (EOF === c) { + this._host = base._host; + this._port = base._port; + this._path = base._path.slice(); + this._query = base._query; + this._username = base._username; + this._password = base._password; + break loop; + } else if (c === '/' || c === '\\') { + if (c === '\\') { + err('\\ is an invalid code point.'); + } + state = 'relative slash'; + } else if (c === '?') { + this._host = base._host; + this._port = base._port; + this._path = base._path.slice(); + this._query = '?'; + this._username = base._username; + this._password = base._password; + state = 'query'; + } else if (c === '#') { + this._host = base._host; + this._port = base._port; + this._path = base._path.slice(); + this._query = base._query; + this._fragment = '#'; + this._username = base._username; + this._password = base._password; + state = 'fragment'; + } else { + var nextC = input[cursor + 1]; + var nextNextC = input[cursor + 2]; + if ('file' !== this._scheme || !ALPHA.test(c) || nextC !== ':' && nextC !== '|' || EOF !== nextNextC && '/' !== nextNextC && '\\' !== nextNextC && '?' !== nextNextC && '#' !== nextNextC) { + this._host = base._host; + this._port = base._port; + this._username = base._username; + this._password = base._password; + this._path = base._path.slice(); + this._path.pop(); + } + state = 'relative path'; + continue; + } + break; + case 'relative slash': + if (c === '/' || c === '\\') { + if (c === '\\') { + err('\\ is an invalid code point.'); + } + if (this._scheme === 'file') { + state = 'file host'; + } else { + state = 'authority ignore slashes'; + } + } else { + if ('file' !== this._scheme) { + this._host = base._host; + this._port = base._port; + this._username = base._username; + this._password = base._password; + } + state = 'relative path'; + continue; + } + break; + case 'authority first slash': + if (c === '/') { + state = 'authority second slash'; + } else { + err('Expected \'/\', got: ' + c); + state = 'authority ignore slashes'; + continue; + } + break; + case 'authority second slash': + state = 'authority ignore slashes'; + if ('/' !== c) { + err('Expected \'/\', got: ' + c); + continue; + } + break; + case 'authority ignore slashes': + if ('/' !== c && '\\' !== c) { + state = 'authority'; + continue; + } else { + err('Expected authority, got: ' + c); + } + break; + case 'authority': + if (c === '@') { + if (seenAt) { + err('@ already seen.'); + buffer += '%40'; + } + seenAt = true; + for (var i = 0; i < buffer.length; i++) { + var cp = buffer[i]; + if (cp === '\t' || cp === '\n' || cp === '\r') { + err('Invalid whitespace in authority.'); + continue; + } + if (cp === ':' && this._password === null) { + this._password = ''; + continue; + } + var tempC = percentEscape(cp); + if (null !== this._password) { + this._password += tempC; + } else { + this._username += tempC; + } + } + buffer = ''; + } else if (c === EOF || c === '/' || c === '\\' || c === '?' || c === '#') { + cursor -= buffer.length; + buffer = ''; + state = 'host'; + continue; + } else { + buffer += c; + } + break; + case 'file host': + if (c === EOF || c === '/' || c === '\\' || c === '?' || c === '#') { + if (buffer.length === 2 && ALPHA.test(buffer[0]) && (buffer[1] === ':' || buffer[1] === '|')) { + state = 'relative path'; + } else if (buffer.length === 0) { + state = 'relative path start'; + } else { + this._host = IDNAToASCII.call(this, buffer); + buffer = ''; + state = 'relative path start'; + } + continue; + } else if (c === '\t' || c === '\n' || c === '\r') { + err('Invalid whitespace in file host.'); + } else { + buffer += c; + } + break; + case 'host': + case 'hostname': + if (c === ':' && !seenBracket) { + this._host = IDNAToASCII.call(this, buffer); + buffer = ''; + state = 'port'; + if (stateOverride === 'hostname') { + break loop; + } + } else if (c === EOF || c === '/' || c === '\\' || c === '?' || c === '#') { + this._host = IDNAToASCII.call(this, buffer); + buffer = ''; + state = 'relative path start'; + if (stateOverride) { + break loop; + } + continue; + } else if ('\t' !== c && '\n' !== c && '\r' !== c) { + if (c === '[') { + seenBracket = true; + } else if (c === ']') { + seenBracket = false; + } + buffer += c; + } else { + err('Invalid code point in host/hostname: ' + c); + } + break; + case 'port': + if (/[0-9]/.test(c)) { + buffer += c; + } else if (c === EOF || c === '/' || c === '\\' || c === '?' || c === '#' || stateOverride) { + if ('' !== buffer) { + var temp = parseInt(buffer, 10); + if (temp !== relative[this._scheme]) { + this._port = temp + ''; + } + buffer = ''; + } + if (stateOverride) { + break loop; + } + state = 'relative path start'; + continue; + } else if (c === '\t' || c === '\n' || c === '\r') { + err('Invalid code point in port: ' + c); + } else { + invalid.call(this); + } + break; + case 'relative path start': + if (c === '\\') { + err('\'\\\' not allowed in path.'); + } + state = 'relative path'; + if ('/' !== c && '\\' !== c) { + continue; + } + break; + case 'relative path': + if (c === EOF || c === '/' || c === '\\' || !stateOverride && (c === '?' || c === '#')) { + if (c === '\\') { + err('\\ not allowed in relative path.'); + } + var tmp; + if (tmp = relativePathDotMapping[buffer.toLowerCase()]) { + buffer = tmp; + } + if (buffer === '..') { + this._path.pop(); + if ('/' !== c && '\\' !== c) { + this._path.push(''); + } + } else if (buffer === '.' && '/' !== c && '\\' !== c) { + this._path.push(''); + } else if ('.' !== buffer) { + if (this._scheme === 'file' && this._path.length === 0 && buffer.length === 2 && ALPHA.test(buffer[0]) && buffer[1] === '|') { + buffer = buffer[0] + ':'; + } + this._path.push(buffer); + } + buffer = ''; + if (c === '?') { + this._query = '?'; + state = 'query'; + } else if (c === '#') { + this._fragment = '#'; + state = 'fragment'; + } + } else if ('\t' !== c && '\n' !== c && '\r' !== c) { + buffer += percentEscape(c); + } + break; + case 'query': + if (!stateOverride && c === '#') { + this._fragment = '#'; + state = 'fragment'; + } else if (EOF !== c && '\t' !== c && '\n' !== c && '\r' !== c) { + this._query += percentEscapeQuery(c); + } + break; + case 'fragment': + if (EOF !== c && '\t' !== c && '\n' !== c && '\r' !== c) { + this._fragment += c; + } + break; + } + cursor++; + } + } + function clear() { + this._scheme = ''; + this._schemeData = ''; + this._username = ''; + this._password = null; + this._host = ''; + this._port = ''; + this._path = []; + this._query = ''; + this._fragment = ''; + this._isInvalid = false; + this._isRelative = false; + } + function JURL(url, base) + { + if (base !== undefined && !(base instanceof JURL)) { + base = new JURL(String(base)); + } + this._url = url; + clear.call(this); + var input = url.replace(/^[ \t\r\n\f]+|[ \t\r\n\f]+$/g, ''); + parse.call(this, input, null, base); + } + JURL.prototype = { + toString: function () { + return this.href; + }, + get href() { + if (this._isInvalid) { + return this._url; + } + var authority = ''; + if ('' !== this._username || null !== this._password) { + authority = this._username + (null !== this._password ? ':' + this._password : '') + '@'; + } + return this.protocol + (this._isRelative ? '//' + authority + this.host : '') + this.pathname + this._query + this._fragment; + }, + set href(href) { + clear.call(this); + parse.call(this, href); + }, + get protocol() { + return this._scheme + ':'; + }, + set protocol(protocol) { + if (this._isInvalid) { + return; + } + parse.call(this, protocol + ':', 'scheme start'); + }, + get host() { + return this._isInvalid ? '' : this._port ? this._host + ':' + this._port : this._host; + }, + set host(host) { + if (this._isInvalid || !this._isRelative) { + return; + } + parse.call(this, host, 'host'); + }, + get hostname() { + return this._host; + }, + set hostname(hostname) { + if (this._isInvalid || !this._isRelative) { + return; + } + parse.call(this, hostname, 'hostname'); + }, + get port() { + return this._port; + }, + set port(port) { + if (this._isInvalid || !this._isRelative) { + return; + } + parse.call(this, port, 'port'); + }, + get pathname() { + return this._isInvalid ? '' : this._isRelative ? '/' + this._path.join('/') : this._schemeData; + }, + set pathname(pathname) { + if (this._isInvalid || !this._isRelative) { + return; + } + this._path = []; + parse.call(this, pathname, 'relative path start'); + }, + get search() { + return this._isInvalid || !this._query || this._query === '?' ? '' : this._query; + }, + set search(search) { + if (this._isInvalid || !this._isRelative) { + return; + } + this._query = '?'; + if (search[0] === '?') { + search = search.slice(1); + } + parse.call(this, search, 'query'); + }, + get hash() { + return this._isInvalid || !this._fragment || this._fragment === '#' ? '' : this._fragment; + }, + set hash(hash) { + if (this._isInvalid) { + return; + } + this._fragment = '#'; + if (hash[0] === '#') { + hash = hash.slice(1); + } + parse.call(this, hash, 'fragment'); + }, + get origin() { + var host; + if (this._isInvalid || !this._scheme) { + return ''; + } + switch (this._scheme) { + case 'data': + case 'file': + case 'javascript': + case 'mailto': + return 'null'; + } + host = this.host; + if (!host) { + return ''; + } + return this._scheme + '://' + host; + } + }; + var OriginalURL = scope.URL; + if (OriginalURL) { + JURL.createObjectURL = function (blob) { + return OriginalURL.createObjectURL.apply(OriginalURL, arguments); + }; + JURL.revokeObjectURL = function (url) { + OriginalURL.revokeObjectURL(url); + }; + } + scope.URL = JURL; + }(globalScope)); + exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX; + exports.IDENTITY_MATRIX = IDENTITY_MATRIX; + exports.OPS = OPS; + exports.VERBOSITY_LEVELS = VERBOSITY_LEVELS; + exports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES; + exports.AnnotationBorderStyleType = AnnotationBorderStyleType; + exports.AnnotationFieldFlag = AnnotationFieldFlag; + exports.AnnotationFlag = AnnotationFlag; + exports.AnnotationType = AnnotationType; + exports.FontType = FontType; + exports.ImageKind = ImageKind; + exports.InvalidPDFException = InvalidPDFException; + exports.MessageHandler = MessageHandler; + exports.MissingDataException = MissingDataException; + exports.MissingPDFException = MissingPDFException; + exports.NotImplementedException = NotImplementedException; + exports.PageViewport = PageViewport; + exports.PasswordException = PasswordException; + exports.PasswordResponses = PasswordResponses; + exports.StatTimer = StatTimer; + exports.StreamType = StreamType; + exports.TextRenderingMode = TextRenderingMode; + exports.UnexpectedResponseException = UnexpectedResponseException; + exports.UnknownErrorException = UnknownErrorException; + exports.Util = Util; + exports.XRefParseException = XRefParseException; + exports.arrayByteLength = arrayByteLength; + exports.arraysToBytes = arraysToBytes; + exports.assert = assert; + exports.bytesToString = bytesToString; + exports.createBlob = createBlob; + exports.createPromiseCapability = createPromiseCapability; + exports.createObjectURL = createObjectURL; + exports.deprecated = deprecated; + exports.error = error; + exports.getLookupTableFactory = getLookupTableFactory; + exports.getVerbosityLevel = getVerbosityLevel; + exports.globalScope = globalScope; + exports.info = info; + exports.isArray = isArray; + exports.isArrayBuffer = isArrayBuffer; + exports.isBool = isBool; + exports.isEmptyObj = isEmptyObj; + exports.isInt = isInt; + exports.isNum = isNum; + exports.isString = isString; + exports.isSpace = isSpace; + exports.isSameOrigin = isSameOrigin; + exports.createValidAbsoluteUrl = createValidAbsoluteUrl; + exports.isLittleEndian = isLittleEndian; + exports.isEvalSupported = isEvalSupported; + exports.loadJpegStream = loadJpegStream; + exports.log2 = log2; + exports.readInt8 = readInt8; + exports.readUint16 = readUint16; + exports.readUint32 = readUint32; + exports.removeNullCharacters = removeNullCharacters; + exports.setVerbosityLevel = setVerbosityLevel; + exports.shadow = shadow; + exports.string32 = string32; + exports.stringToBytes = stringToBytes; + exports.stringToPDFString = stringToPDFString; + exports.stringToUTF8String = stringToUTF8String; + exports.utf8StringToString = utf8StringToString; + exports.warn = warn; + })); + (function (root, factory) { + factory(root.pdfjsCoreBidi = {}, root.pdfjsSharedUtil); + }(this, function (exports, sharedUtil) { + var warn = sharedUtil.warn; + var baseTypes = [ + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'S', + 'B', + 'S', + 'WS', + 'B', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'B', + 'B', + 'B', + 'S', + 'WS', + 'ON', + 'ON', + 'ET', + 'ET', + 'ET', + 'ON', + 'ON', + 'ON', + 'ON', + 'ON', + 'ES', + 'CS', + 'ES', + 'CS', + 'CS', + 'EN', + 'EN', + 'EN', + 'EN', + 'EN', + 'EN', + 'EN', + 'EN', + 'EN', + 'EN', + 'CS', + 'ON', + 'ON', + 'ON', + 'ON', + 'ON', + 'ON', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'ON', + 'ON', + 'ON', + 'ON', + 'ON', + 'ON', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'ON', + 'ON', + 'ON', + 'ON', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'B', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'BN', + 'CS', + 'ON', + 'ET', + 'ET', + 'ET', + 'ET', + 'ON', + 'ON', + 'ON', + 'ON', + 'L', + 'ON', + 'ON', + 'BN', + 'ON', + 'ON', + 'ET', + 'ET', + 'EN', + 'EN', + 'ON', + 'L', + 'ON', + 'ON', + 'ON', + 'EN', + 'L', + 'ON', + 'ON', + 'ON', + 'ON', + 'ON', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'ON', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'ON', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L', + 'L' + ]; + var arabicTypes = [ + 'AN', + 'AN', + 'AN', + 'AN', + 'AN', + 'AN', + 'ON', + 'ON', + 'AL', + 'ET', + 'ET', + 'AL', + 'CS', + 'AL', + 'ON', + 'ON', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'AL', + 'AL', + '', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'AN', + 'AN', + 'AN', + 'AN', + 'AN', + 'AN', + 'AN', + 'AN', + 'AN', + 'AN', + 'ET', + 'AN', + 'AN', + 'AL', + 'AL', + 'AL', + 'NSM', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'AN', + 'ON', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'AL', + 'AL', + 'NSM', + 'NSM', + 'ON', + 'NSM', + 'NSM', + 'NSM', + 'NSM', + 'AL', + 'AL', + 'EN', + 'EN', + 'EN', + 'EN', + 'EN', + 'EN', + 'EN', + 'EN', + 'EN', + 'EN', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL', + 'AL' + ]; + function isOdd(i) { + return (i & 1) !== 0; + } + function isEven(i) { + return (i & 1) === 0; + } + function findUnequal(arr, start, value) { + for (var j = start, jj = arr.length; j < jj; ++j) { + if (arr[j] !== value) { + return j; + } + } + return j; + } + function setValues(arr, start, end, value) { + for (var j = start; j < end; ++j) { + arr[j] = value; + } + } + function reverseValues(arr, start, end) { + for (var i = start, j = end - 1; i < j; ++i, --j) { + var temp = arr[i]; + arr[i] = arr[j]; + arr[j] = temp; + } + } + function createBidiText(str, isLTR, vertical) { + return { + str: str, + dir: vertical ? 'ttb' : isLTR ? 'ltr' : 'rtl' + }; + } + var chars = []; + var types = []; + function bidi(str, startLevel, vertical) { + var isLTR = true; + var strLength = str.length; + if (strLength === 0 || vertical) { + return createBidiText(str, isLTR, vertical); + } + chars.length = strLength; + types.length = strLength; + var numBidi = 0; + var i, ii; + for (i = 0; i < strLength; ++i) { + chars[i] = str.charAt(i); + var charCode = str.charCodeAt(i); + var charType = 'L'; + if (charCode <= 0x00ff) { + charType = baseTypes[charCode]; + } else if (0x0590 <= charCode && charCode <= 0x05f4) { + charType = 'R'; + } else if (0x0600 <= charCode && charCode <= 0x06ff) { + charType = arabicTypes[charCode & 0xff]; + if (!charType) { + warn('Bidi: invalid Unicode character ' + charCode.toString(16)); + } + } else if (0x0700 <= charCode && charCode <= 0x08AC) { + charType = 'AL'; + } + if (charType === 'R' || charType === 'AL' || charType === 'AN') { + numBidi++; + } + types[i] = charType; + } + if (numBidi === 0) { + isLTR = true; + return createBidiText(str, isLTR); + } + if (startLevel === -1) { + if (numBidi / strLength < 0.3) { + isLTR = true; + startLevel = 0; + } else { + isLTR = false; + startLevel = 1; + } + } + var levels = []; + for (i = 0; i < strLength; ++i) { + levels[i] = startLevel; + } + var e = isOdd(startLevel) ? 'R' : 'L'; + var sor = e; + var eor = sor; + var lastType = sor; + for (i = 0; i < strLength; ++i) { + if (types[i] === 'NSM') { + types[i] = lastType; + } else { + lastType = types[i]; + } + } + lastType = sor; + var t; + for (i = 0; i < strLength; ++i) { + t = types[i]; + if (t === 'EN') { + types[i] = lastType === 'AL' ? 'AN' : 'EN'; + } else if (t === 'R' || t === 'L' || t === 'AL') { + lastType = t; + } + } + for (i = 0; i < strLength; ++i) { + t = types[i]; + if (t === 'AL') { + types[i] = 'R'; + } + } + for (i = 1; i < strLength - 1; ++i) { + if (types[i] === 'ES' && types[i - 1] === 'EN' && types[i + 1] === 'EN') { + types[i] = 'EN'; + } + if (types[i] === 'CS' && (types[i - 1] === 'EN' || types[i - 1] === 'AN') && types[i + 1] === types[i - 1]) { + types[i] = types[i - 1]; + } + } + for (i = 0; i < strLength; ++i) { + if (types[i] === 'EN') { + var j; + for (j = i - 1; j >= 0; --j) { + if (types[j] !== 'ET') { + break; + } + types[j] = 'EN'; + } + for (j = i + 1; j < strLength; ++j) { + if (types[j] !== 'ET') { + break; + } + types[j] = 'EN'; + } + } + } + for (i = 0; i < strLength; ++i) { + t = types[i]; + if (t === 'WS' || t === 'ES' || t === 'ET' || t === 'CS') { + types[i] = 'ON'; + } + } + lastType = sor; + for (i = 0; i < strLength; ++i) { + t = types[i]; + if (t === 'EN') { + types[i] = lastType === 'L' ? 'L' : 'EN'; + } else if (t === 'R' || t === 'L') { + lastType = t; + } + } + for (i = 0; i < strLength; ++i) { + if (types[i] === 'ON') { + var end = findUnequal(types, i + 1, 'ON'); + var before = sor; + if (i > 0) { + before = types[i - 1]; + } + var after = eor; + if (end + 1 < strLength) { + after = types[end + 1]; + } + if (before !== 'L') { + before = 'R'; + } + if (after !== 'L') { + after = 'R'; + } + if (before === after) { + setValues(types, i, end, before); + } + i = end - 1; + } + } + for (i = 0; i < strLength; ++i) { + if (types[i] === 'ON') { + types[i] = e; + } + } + for (i = 0; i < strLength; ++i) { + t = types[i]; + if (isEven(levels[i])) { + if (t === 'R') { + levels[i] += 1; + } else if (t === 'AN' || t === 'EN') { + levels[i] += 2; + } + } else { + if (t === 'L' || t === 'AN' || t === 'EN') { + levels[i] += 1; + } + } + } + var highestLevel = -1; + var lowestOddLevel = 99; + var level; + for (i = 0, ii = levels.length; i < ii; ++i) { + level = levels[i]; + if (highestLevel < level) { + highestLevel = level; + } + if (lowestOddLevel > level && isOdd(level)) { + lowestOddLevel = level; + } + } + for (level = highestLevel; level >= lowestOddLevel; --level) { + var start = -1; + for (i = 0, ii = levels.length; i < ii; ++i) { + if (levels[i] < level) { + if (start >= 0) { + reverseValues(chars, start, i); + start = -1; + } + } else if (start < 0) { + start = i; + } + } + if (start >= 0) { + reverseValues(chars, start, levels.length); + } + } + for (i = 0, ii = chars.length; i < ii; ++i) { + var ch = chars[i]; + if (ch === '<' || ch === '>') { + chars[i] = ''; + } + } + return createBidiText(chars.join(''), isLTR); + } + exports.bidi = bidi; + })); + (function (root, factory) { + factory(root.pdfjsCoreCFFParser = {}, root.pdfjsSharedUtil, root.pdfjsCoreCharsets, root.pdfjsCoreEncodings); + }(this, function (exports, sharedUtil, coreCharsets, coreEncodings) { + var error = sharedUtil.error; + var info = sharedUtil.info; + var bytesToString = sharedUtil.bytesToString; + var warn = sharedUtil.warn; + var isArray = sharedUtil.isArray; + var Util = sharedUtil.Util; + var stringToBytes = sharedUtil.stringToBytes; + var assert = sharedUtil.assert; + var ISOAdobeCharset = coreCharsets.ISOAdobeCharset; + var ExpertCharset = coreCharsets.ExpertCharset; + var ExpertSubsetCharset = coreCharsets.ExpertSubsetCharset; + var StandardEncoding = coreEncodings.StandardEncoding; + var ExpertEncoding = coreEncodings.ExpertEncoding; + var MAX_SUBR_NESTING = 10; + var CFFStandardStrings = [ + '.notdef', + 'space', + 'exclam', + 'quotedbl', + 'numbersign', + 'dollar', + 'percent', + 'ampersand', + 'quoteright', + 'parenleft', + 'parenright', + 'asterisk', + 'plus', + 'comma', + 'hyphen', + 'period', + 'slash', + 'zero', + 'one', + 'two', + 'three', + 'four', + 'five', + 'six', + 'seven', + 'eight', + 'nine', + 'colon', + 'semicolon', + 'less', + 'equal', + 'greater', + 'question', + 'at', + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'G', + 'H', + 'I', + 'J', + 'K', + 'L', + 'M', + 'N', + 'O', + 'P', + 'Q', + 'R', + 'S', + 'T', + 'U', + 'V', + 'W', + 'X', + 'Y', + 'Z', + 'bracketleft', + 'backslash', + 'bracketright', + 'asciicircum', + 'underscore', + 'quoteleft', + 'a', + 'b', + 'c', + 'd', + 'e', + 'f', + 'g', + 'h', + 'i', + 'j', + 'k', + 'l', + 'm', + 'n', + 'o', + 'p', + 'q', + 'r', + 's', + 't', + 'u', + 'v', + 'w', + 'x', + 'y', + 'z', + 'braceleft', + 'bar', + 'braceright', + 'asciitilde', + 'exclamdown', + 'cent', + 'sterling', + 'fraction', + 'yen', + 'florin', + 'section', + 'currency', + 'quotesingle', + 'quotedblleft', + 'guillemotleft', + 'guilsinglleft', + 'guilsinglright', + 'fi', + 'fl', + 'endash', + 'dagger', + 'daggerdbl', + 'periodcentered', + 'paragraph', + 'bullet', + 'quotesinglbase', + 'quotedblbase', + 'quotedblright', + 'guillemotright', + 'ellipsis', + 'perthousand', + 'questiondown', + 'grave', + 'acute', + 'circumflex', + 'tilde', + 'macron', + 'breve', + 'dotaccent', + 'dieresis', + 'ring', + 'cedilla', + 'hungarumlaut', + 'ogonek', + 'caron', + 'emdash', + 'AE', + 'ordfeminine', + 'Lslash', + 'Oslash', + 'OE', + 'ordmasculine', + 'ae', + 'dotlessi', + 'lslash', + 'oslash', + 'oe', + 'germandbls', + 'onesuperior', + 'logicalnot', + 'mu', + 'trademark', + 'Eth', + 'onehalf', + 'plusminus', + 'Thorn', + 'onequarter', + 'divide', + 'brokenbar', + 'degree', + 'thorn', + 'threequarters', + 'twosuperior', + 'registered', + 'minus', + 'eth', + 'multiply', + 'threesuperior', + 'copyright', + 'Aacute', + 'Acircumflex', + 'Adieresis', + 'Agrave', + 'Aring', + 'Atilde', + 'Ccedilla', + 'Eacute', + 'Ecircumflex', + 'Edieresis', + 'Egrave', + 'Iacute', + 'Icircumflex', + 'Idieresis', + 'Igrave', + 'Ntilde', + 'Oacute', + 'Ocircumflex', + 'Odieresis', + 'Ograve', + 'Otilde', + 'Scaron', + 'Uacute', + 'Ucircumflex', + 'Udieresis', + 'Ugrave', + 'Yacute', + 'Ydieresis', + 'Zcaron', + 'aacute', + 'acircumflex', + 'adieresis', + 'agrave', + 'aring', + 'atilde', + 'ccedilla', + 'eacute', + 'ecircumflex', + 'edieresis', + 'egrave', + 'iacute', + 'icircumflex', + 'idieresis', + 'igrave', + 'ntilde', + 'oacute', + 'ocircumflex', + 'odieresis', + 'ograve', + 'otilde', + 'scaron', + 'uacute', + 'ucircumflex', + 'udieresis', + 'ugrave', + 'yacute', + 'ydieresis', + 'zcaron', + 'exclamsmall', + 'Hungarumlautsmall', + 'dollaroldstyle', + 'dollarsuperior', + 'ampersandsmall', + 'Acutesmall', + 'parenleftsuperior', + 'parenrightsuperior', + 'twodotenleader', + 'onedotenleader', + 'zerooldstyle', + 'oneoldstyle', + 'twooldstyle', + 'threeoldstyle', + 'fouroldstyle', + 'fiveoldstyle', + 'sixoldstyle', + 'sevenoldstyle', + 'eightoldstyle', + 'nineoldstyle', + 'commasuperior', + 'threequartersemdash', + 'periodsuperior', + 'questionsmall', + 'asuperior', + 'bsuperior', + 'centsuperior', + 'dsuperior', + 'esuperior', + 'isuperior', + 'lsuperior', + 'msuperior', + 'nsuperior', + 'osuperior', + 'rsuperior', + 'ssuperior', + 'tsuperior', + 'ff', + 'ffi', + 'ffl', + 'parenleftinferior', + 'parenrightinferior', + 'Circumflexsmall', + 'hyphensuperior', + 'Gravesmall', + 'Asmall', + 'Bsmall', + 'Csmall', + 'Dsmall', + 'Esmall', + 'Fsmall', + 'Gsmall', + 'Hsmall', + 'Ismall', + 'Jsmall', + 'Ksmall', + 'Lsmall', + 'Msmall', + 'Nsmall', + 'Osmall', + 'Psmall', + 'Qsmall', + 'Rsmall', + 'Ssmall', + 'Tsmall', + 'Usmall', + 'Vsmall', + 'Wsmall', + 'Xsmall', + 'Ysmall', + 'Zsmall', + 'colonmonetary', + 'onefitted', + 'rupiah', + 'Tildesmall', + 'exclamdownsmall', + 'centoldstyle', + 'Lslashsmall', + 'Scaronsmall', + 'Zcaronsmall', + 'Dieresissmall', + 'Brevesmall', + 'Caronsmall', + 'Dotaccentsmall', + 'Macronsmall', + 'figuredash', + 'hypheninferior', + 'Ogoneksmall', + 'Ringsmall', + 'Cedillasmall', + 'questiondownsmall', + 'oneeighth', + 'threeeighths', + 'fiveeighths', + 'seveneighths', + 'onethird', + 'twothirds', + 'zerosuperior', + 'foursuperior', + 'fivesuperior', + 'sixsuperior', + 'sevensuperior', + 'eightsuperior', + 'ninesuperior', + 'zeroinferior', + 'oneinferior', + 'twoinferior', + 'threeinferior', + 'fourinferior', + 'fiveinferior', + 'sixinferior', + 'seveninferior', + 'eightinferior', + 'nineinferior', + 'centinferior', + 'dollarinferior', + 'periodinferior', + 'commainferior', + 'Agravesmall', + 'Aacutesmall', + 'Acircumflexsmall', + 'Atildesmall', + 'Adieresissmall', + 'Aringsmall', + 'AEsmall', + 'Ccedillasmall', + 'Egravesmall', + 'Eacutesmall', + 'Ecircumflexsmall', + 'Edieresissmall', + 'Igravesmall', + 'Iacutesmall', + 'Icircumflexsmall', + 'Idieresissmall', + 'Ethsmall', + 'Ntildesmall', + 'Ogravesmall', + 'Oacutesmall', + 'Ocircumflexsmall', + 'Otildesmall', + 'Odieresissmall', + 'OEsmall', + 'Oslashsmall', + 'Ugravesmall', + 'Uacutesmall', + 'Ucircumflexsmall', + 'Udieresissmall', + 'Yacutesmall', + 'Thornsmall', + 'Ydieresissmall', + '001.000', + '001.001', + '001.002', + '001.003', + 'Black', + 'Bold', + 'Book', + 'Light', + 'Medium', + 'Regular', + 'Roman', + 'Semibold' + ]; + var CFFParser = function CFFParserClosure() { + var CharstringValidationData = [ + null, + { + id: 'hstem', + min: 2, + stackClearing: true, + stem: true + }, + null, + { + id: 'vstem', + min: 2, + stackClearing: true, + stem: true + }, + { + id: 'vmoveto', + min: 1, + stackClearing: true + }, + { + id: 'rlineto', + min: 2, + resetStack: true + }, + { + id: 'hlineto', + min: 1, + resetStack: true + }, + { + id: 'vlineto', + min: 1, + resetStack: true + }, + { + id: 'rrcurveto', + min: 6, + resetStack: true + }, + null, + { + id: 'callsubr', + min: 1, + undefStack: true + }, + { + id: 'return', + min: 0, + undefStack: true + }, + null, + null, + { + id: 'endchar', + min: 0, + stackClearing: true + }, + null, + null, + null, + { + id: 'hstemhm', + min: 2, + stackClearing: true, + stem: true + }, + { + id: 'hintmask', + min: 0, + stackClearing: true + }, + { + id: 'cntrmask', + min: 0, + stackClearing: true + }, + { + id: 'rmoveto', + min: 2, + stackClearing: true + }, + { + id: 'hmoveto', + min: 1, + stackClearing: true + }, + { + id: 'vstemhm', + min: 2, + stackClearing: true, + stem: true + }, + { + id: 'rcurveline', + min: 8, + resetStack: true + }, + { + id: 'rlinecurve', + min: 8, + resetStack: true + }, + { + id: 'vvcurveto', + min: 4, + resetStack: true + }, + { + id: 'hhcurveto', + min: 4, + resetStack: true + }, + null, + { + id: 'callgsubr', + min: 1, + undefStack: true + }, + { + id: 'vhcurveto', + min: 4, + resetStack: true + }, + { + id: 'hvcurveto', + min: 4, + resetStack: true + } + ]; + var CharstringValidationData12 = [ + null, + null, + null, + { + id: 'and', + min: 2, + stackDelta: -1 + }, + { + id: 'or', + min: 2, + stackDelta: -1 + }, + { + id: 'not', + min: 1, + stackDelta: 0 + }, + null, + null, + null, + { + id: 'abs', + min: 1, + stackDelta: 0 + }, + { + id: 'add', + min: 2, + stackDelta: -1, + stackFn: function stack_div(stack, index) { + stack[index - 2] = stack[index - 2] + stack[index - 1]; + } + }, + { + id: 'sub', + min: 2, + stackDelta: -1, + stackFn: function stack_div(stack, index) { + stack[index - 2] = stack[index - 2] - stack[index - 1]; + } + }, + { + id: 'div', + min: 2, + stackDelta: -1, + stackFn: function stack_div(stack, index) { + stack[index - 2] = stack[index - 2] / stack[index - 1]; + } + }, + null, + { + id: 'neg', + min: 1, + stackDelta: 0, + stackFn: function stack_div(stack, index) { + stack[index - 1] = -stack[index - 1]; + } + }, + { + id: 'eq', + min: 2, + stackDelta: -1 + }, + null, + null, + { + id: 'drop', + min: 1, + stackDelta: -1 + }, + null, + { + id: 'put', + min: 2, + stackDelta: -2 + }, + { + id: 'get', + min: 1, + stackDelta: 0 + }, + { + id: 'ifelse', + min: 4, + stackDelta: -3 + }, + { + id: 'random', + min: 0, + stackDelta: 1 + }, + { + id: 'mul', + min: 2, + stackDelta: -1, + stackFn: function stack_div(stack, index) { + stack[index - 2] = stack[index - 2] * stack[index - 1]; + } + }, + null, + { + id: 'sqrt', + min: 1, + stackDelta: 0 + }, + { + id: 'dup', + min: 1, + stackDelta: 1 + }, + { + id: 'exch', + min: 2, + stackDelta: 0 + }, + { + id: 'index', + min: 2, + stackDelta: 0 + }, + { + id: 'roll', + min: 3, + stackDelta: -2 + }, + null, + null, + null, + { + id: 'hflex', + min: 7, + resetStack: true + }, + { + id: 'flex', + min: 13, + resetStack: true + }, + { + id: 'hflex1', + min: 9, + resetStack: true + }, + { + id: 'flex1', + min: 11, + resetStack: true + } + ]; + function CFFParser(file, properties, seacAnalysisEnabled) { + this.bytes = file.getBytes(); + this.properties = properties; + this.seacAnalysisEnabled = !!seacAnalysisEnabled; + } + CFFParser.prototype = { + parse: function CFFParser_parse() { + var properties = this.properties; + var cff = new CFF(); + this.cff = cff; + var header = this.parseHeader(); + var nameIndex = this.parseIndex(header.endPos); + var topDictIndex = this.parseIndex(nameIndex.endPos); + var stringIndex = this.parseIndex(topDictIndex.endPos); + var globalSubrIndex = this.parseIndex(stringIndex.endPos); + var topDictParsed = this.parseDict(topDictIndex.obj.get(0)); + var topDict = this.createDict(CFFTopDict, topDictParsed, cff.strings); + cff.header = header.obj; + cff.names = this.parseNameIndex(nameIndex.obj); + cff.strings = this.parseStringIndex(stringIndex.obj); + cff.topDict = topDict; + cff.globalSubrIndex = globalSubrIndex.obj; + this.parsePrivateDict(cff.topDict); + cff.isCIDFont = topDict.hasName('ROS'); + var charStringOffset = topDict.getByName('CharStrings'); + var charStringIndex = this.parseIndex(charStringOffset).obj; + var fontMatrix = topDict.getByName('FontMatrix'); + if (fontMatrix) { + properties.fontMatrix = fontMatrix; + } + var fontBBox = topDict.getByName('FontBBox'); + if (fontBBox) { + properties.ascent = fontBBox[3]; + properties.descent = fontBBox[1]; + properties.ascentScaled = true; + } + var charset, encoding; + if (cff.isCIDFont) { + var fdArrayIndex = this.parseIndex(topDict.getByName('FDArray')).obj; + for (var i = 0, ii = fdArrayIndex.count; i < ii; ++i) { + var dictRaw = fdArrayIndex.get(i); + var fontDict = this.createDict(CFFTopDict, this.parseDict(dictRaw), cff.strings); + this.parsePrivateDict(fontDict); + cff.fdArray.push(fontDict); + } + encoding = null; + charset = this.parseCharsets(topDict.getByName('charset'), charStringIndex.count, cff.strings, true); + cff.fdSelect = this.parseFDSelect(topDict.getByName('FDSelect'), charStringIndex.count); + } else { + charset = this.parseCharsets(topDict.getByName('charset'), charStringIndex.count, cff.strings, false); + encoding = this.parseEncoding(topDict.getByName('Encoding'), properties, cff.strings, charset.charset); + } + cff.charset = charset; + cff.encoding = encoding; + var charStringsAndSeacs = this.parseCharStrings(charStringIndex, topDict.privateDict.subrsIndex, globalSubrIndex.obj, cff.fdSelect, cff.fdArray); + cff.charStrings = charStringsAndSeacs.charStrings; + cff.seacs = charStringsAndSeacs.seacs; + cff.widths = charStringsAndSeacs.widths; + return cff; + }, + parseHeader: function CFFParser_parseHeader() { + var bytes = this.bytes; + var bytesLength = bytes.length; + var offset = 0; + while (offset < bytesLength && bytes[offset] !== 1) { + ++offset; + } + if (offset >= bytesLength) { + error('Invalid CFF header'); + } else if (offset !== 0) { + info('cff data is shifted'); + bytes = bytes.subarray(offset); + this.bytes = bytes; + } + var major = bytes[0]; + var minor = bytes[1]; + var hdrSize = bytes[2]; + var offSize = bytes[3]; + var header = new CFFHeader(major, minor, hdrSize, offSize); + return { + obj: header, + endPos: hdrSize + }; + }, + parseDict: function CFFParser_parseDict(dict) { + var pos = 0; + function parseOperand() { + var value = dict[pos++]; + if (value === 30) { + return parseFloatOperand(); + } else if (value === 28) { + value = dict[pos++]; + value = (value << 24 | dict[pos++] << 16) >> 16; + return value; + } else if (value === 29) { + value = dict[pos++]; + value = value << 8 | dict[pos++]; + value = value << 8 | dict[pos++]; + value = value << 8 | dict[pos++]; + return value; + } else if (value >= 32 && value <= 246) { + return value - 139; + } else if (value >= 247 && value <= 250) { + return (value - 247) * 256 + dict[pos++] + 108; + } else if (value >= 251 && value <= 254) { + return -((value - 251) * 256) - dict[pos++] - 108; + } + warn('CFFParser_parseDict: "' + value + '" is a reserved command.'); + return NaN; + } + function parseFloatOperand() { + var str = ''; + var eof = 15; + var lookup = [ + '0', + '1', + '2', + '3', + '4', + '5', + '6', + '7', + '8', + '9', + '.', + 'E', + 'E-', + null, + '-' + ]; + var length = dict.length; + while (pos < length) { + var b = dict[pos++]; + var b1 = b >> 4; + var b2 = b & 15; + if (b1 === eof) { + break; + } + str += lookup[b1]; + if (b2 === eof) { + break; + } + str += lookup[b2]; + } + return parseFloat(str); + } + var operands = []; + var entries = []; + pos = 0; + var end = dict.length; + while (pos < end) { + var b = dict[pos]; + if (b <= 21) { + if (b === 12) { + b = b << 8 | dict[++pos]; + } + entries.push([ + b, + operands + ]); + operands = []; + ++pos; + } else { + operands.push(parseOperand()); + } + } + return entries; + }, + parseIndex: function CFFParser_parseIndex(pos) { + var cffIndex = new CFFIndex(); + var bytes = this.bytes; + var count = bytes[pos++] << 8 | bytes[pos++]; + var offsets = []; + var end = pos; + var i, ii; + if (count !== 0) { + var offsetSize = bytes[pos++]; + var startPos = pos + (count + 1) * offsetSize - 1; + for (i = 0, ii = count + 1; i < ii; ++i) { + var offset = 0; + for (var j = 0; j < offsetSize; ++j) { + offset <<= 8; + offset += bytes[pos++]; + } + offsets.push(startPos + offset); + } + end = offsets[count]; + } + for (i = 0, ii = offsets.length - 1; i < ii; ++i) { + var offsetStart = offsets[i]; + var offsetEnd = offsets[i + 1]; + cffIndex.add(bytes.subarray(offsetStart, offsetEnd)); + } + return { + obj: cffIndex, + endPos: end + }; + }, + parseNameIndex: function CFFParser_parseNameIndex(index) { + var names = []; + for (var i = 0, ii = index.count; i < ii; ++i) { + var name = index.get(i); + var length = Math.min(name.length, 127); + var data = []; + for (var j = 0; j < length; ++j) { + var c = name[j]; + if (j === 0 && c === 0) { + data[j] = c; + continue; + } + if (c < 33 || c > 126 || c === 91 || c === 93 || c === 40 || c === 41 || c === 123 || c === 125 || c === 60 || c === 62 || c === 47 || c === 37 || c === 35) + { + data[j] = 95; + continue; + } + data[j] = c; + } + names.push(bytesToString(data)); + } + return names; + }, + parseStringIndex: function CFFParser_parseStringIndex(index) { + var strings = new CFFStrings(); + for (var i = 0, ii = index.count; i < ii; ++i) { + var data = index.get(i); + strings.add(bytesToString(data)); + } + return strings; + }, + createDict: function CFFParser_createDict(Type, dict, strings) { + var cffDict = new Type(strings); + for (var i = 0, ii = dict.length; i < ii; ++i) { + var pair = dict[i]; + var key = pair[0]; + var value = pair[1]; + cffDict.setByKey(key, value); + } + return cffDict; + }, + parseCharString: function CFFParser_parseCharString(state, data, localSubrIndex, globalSubrIndex) { + if (state.callDepth > MAX_SUBR_NESTING) { + return false; + } + var stackSize = state.stackSize; + var stack = state.stack; + var length = data.length; + for (var j = 0; j < length;) { + var value = data[j++]; + var validationCommand = null; + if (value === 12) { + var q = data[j++]; + if (q === 0) { + data[j - 2] = 139; + data[j - 1] = 22; + stackSize = 0; + } else { + validationCommand = CharstringValidationData12[q]; + } + } else if (value === 28) { + stack[stackSize] = (data[j] << 24 | data[j + 1] << 16) >> 16; + j += 2; + stackSize++; + } else if (value === 14) { + if (stackSize >= 4) { + stackSize -= 4; + if (this.seacAnalysisEnabled) { + state.seac = stack.slice(stackSize, stackSize + 4); + return false; + } + } + validationCommand = CharstringValidationData[value]; + } else if (value >= 32 && value <= 246) { + stack[stackSize] = value - 139; + stackSize++; + } else if (value >= 247 && value <= 254) { + stack[stackSize] = value < 251 ? (value - 247 << 8) + data[j] + 108 : -(value - 251 << 8) - data[j] - 108; + j++; + stackSize++; + } else if (value === 255) { + stack[stackSize] = (data[j] << 24 | data[j + 1] << 16 | data[j + 2] << 8 | data[j + 3]) / 65536; + j += 4; + stackSize++; + } else if (value === 19 || value === 20) { + state.hints += stackSize >> 1; + j += state.hints + 7 >> 3; + stackSize %= 2; + validationCommand = CharstringValidationData[value]; + } else if (value === 10 || value === 29) { + var subrsIndex; + if (value === 10) { + subrsIndex = localSubrIndex; + } else { + subrsIndex = globalSubrIndex; + } + if (!subrsIndex) { + validationCommand = CharstringValidationData[value]; + warn('Missing subrsIndex for ' + validationCommand.id); + return false; + } + var bias = 32768; + if (subrsIndex.count < 1240) { + bias = 107; + } else if (subrsIndex.count < 33900) { + bias = 1131; + } + var subrNumber = stack[--stackSize] + bias; + if (subrNumber < 0 || subrNumber >= subrsIndex.count) { + validationCommand = CharstringValidationData[value]; + warn('Out of bounds subrIndex for ' + validationCommand.id); + return false; + } + state.stackSize = stackSize; + state.callDepth++; + var valid = this.parseCharString(state, subrsIndex.get(subrNumber), localSubrIndex, globalSubrIndex); + if (!valid) { + return false; + } + state.callDepth--; + stackSize = state.stackSize; + continue; + } else if (value === 11) { + state.stackSize = stackSize; + return true; + } else { + validationCommand = CharstringValidationData[value]; + } + if (validationCommand) { + if (validationCommand.stem) { + state.hints += stackSize >> 1; + } + if ('min' in validationCommand) { + if (!state.undefStack && stackSize < validationCommand.min) { + warn('Not enough parameters for ' + validationCommand.id + '; actual: ' + stackSize + ', expected: ' + validationCommand.min); + return false; + } + } + if (state.firstStackClearing && validationCommand.stackClearing) { + state.firstStackClearing = false; + stackSize -= validationCommand.min; + if (stackSize >= 2 && validationCommand.stem) { + stackSize %= 2; + } else if (stackSize > 1) { + warn('Found too many parameters for stack-clearing command'); + } + if (stackSize > 0 && stack[stackSize - 1] >= 0) { + state.width = stack[stackSize - 1]; + } + } + if ('stackDelta' in validationCommand) { + if ('stackFn' in validationCommand) { + validationCommand.stackFn(stack, stackSize); + } + stackSize += validationCommand.stackDelta; + } else if (validationCommand.stackClearing) { + stackSize = 0; + } else if (validationCommand.resetStack) { + stackSize = 0; + state.undefStack = false; + } else if (validationCommand.undefStack) { + stackSize = 0; + state.undefStack = true; + state.firstStackClearing = false; + } + } + } + state.stackSize = stackSize; + return true; + }, + parseCharStrings: function CFFParser_parseCharStrings(charStrings, localSubrIndex, globalSubrIndex, fdSelect, fdArray) { + var seacs = []; + var widths = []; + var count = charStrings.count; + for (var i = 0; i < count; i++) { + var charstring = charStrings.get(i); + var state = { + callDepth: 0, + stackSize: 0, + stack: [], + undefStack: true, + hints: 0, + firstStackClearing: true, + seac: null, + width: null + }; + var valid = true; + var localSubrToUse = null; + if (fdSelect && fdArray.length) { + var fdIndex = fdSelect.getFDIndex(i); + if (fdIndex === -1) { + warn('Glyph index is not in fd select.'); + valid = false; + } + if (fdIndex >= fdArray.length) { + warn('Invalid fd index for glyph index.'); + valid = false; + } + if (valid) { + localSubrToUse = fdArray[fdIndex].privateDict.subrsIndex; + } + } else if (localSubrIndex) { + localSubrToUse = localSubrIndex; + } + if (valid) { + valid = this.parseCharString(state, charstring, localSubrToUse, globalSubrIndex); + } + if (state.width !== null) { + widths[i] = state.width; + } + if (state.seac !== null) { + seacs[i] = state.seac; + } + if (!valid) { + charStrings.set(i, new Uint8Array([14])); + } + } + return { + charStrings: charStrings, + seacs: seacs, + widths: widths + }; + }, + emptyPrivateDictionary: function CFFParser_emptyPrivateDictionary(parentDict) { + var privateDict = this.createDict(CFFPrivateDict, [], parentDict.strings); + parentDict.setByKey(18, [ + 0, + 0 + ]); + parentDict.privateDict = privateDict; + }, + parsePrivateDict: function CFFParser_parsePrivateDict(parentDict) { + if (!parentDict.hasName('Private')) { + this.emptyPrivateDictionary(parentDict); + return; + } + var privateOffset = parentDict.getByName('Private'); + if (!isArray(privateOffset) || privateOffset.length !== 2) { + parentDict.removeByName('Private'); + return; + } + var size = privateOffset[0]; + var offset = privateOffset[1]; + if (size === 0 || offset >= this.bytes.length) { + this.emptyPrivateDictionary(parentDict); + return; + } + var privateDictEnd = offset + size; + var dictData = this.bytes.subarray(offset, privateDictEnd); + var dict = this.parseDict(dictData); + var privateDict = this.createDict(CFFPrivateDict, dict, parentDict.strings); + parentDict.privateDict = privateDict; + if (!privateDict.getByName('Subrs')) { + return; + } + var subrsOffset = privateDict.getByName('Subrs'); + var relativeOffset = offset + subrsOffset; + if (subrsOffset === 0 || relativeOffset >= this.bytes.length) { + this.emptyPrivateDictionary(parentDict); + return; + } + var subrsIndex = this.parseIndex(relativeOffset); + privateDict.subrsIndex = subrsIndex.obj; + }, + parseCharsets: function CFFParser_parseCharsets(pos, length, strings, cid) { + if (pos === 0) { + return new CFFCharset(true, CFFCharsetPredefinedTypes.ISO_ADOBE, ISOAdobeCharset); + } else if (pos === 1) { + return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT, ExpertCharset); + } else if (pos === 2) { + return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT_SUBSET, ExpertSubsetCharset); + } + var bytes = this.bytes; + var start = pos; + var format = bytes[pos++]; + var charset = ['.notdef']; + var id, count, i; + length -= 1; + switch (format) { + case 0: + for (i = 0; i < length; i++) { + id = bytes[pos++] << 8 | bytes[pos++]; + charset.push(cid ? id : strings.get(id)); + } + break; + case 1: + while (charset.length <= length) { + id = bytes[pos++] << 8 | bytes[pos++]; + count = bytes[pos++]; + for (i = 0; i <= count; i++) { + charset.push(cid ? id++ : strings.get(id++)); + } + } + break; + case 2: + while (charset.length <= length) { + id = bytes[pos++] << 8 | bytes[pos++]; + count = bytes[pos++] << 8 | bytes[pos++]; + for (i = 0; i <= count; i++) { + charset.push(cid ? id++ : strings.get(id++)); + } + } + break; + default: + error('Unknown charset format'); + } + var end = pos; + var raw = bytes.subarray(start, end); + return new CFFCharset(false, format, charset, raw); + }, + parseEncoding: function CFFParser_parseEncoding(pos, properties, strings, charset) { + var encoding = Object.create(null); + var bytes = this.bytes; + var predefined = false; + var hasSupplement = false; + var format, i, ii; + var raw = null; + function readSupplement() { + var supplementsCount = bytes[pos++]; + for (i = 0; i < supplementsCount; i++) { + var code = bytes[pos++]; + var sid = (bytes[pos++] << 8) + (bytes[pos++] & 0xff); + encoding[code] = charset.indexOf(strings.get(sid)); + } + } + if (pos === 0 || pos === 1) { + predefined = true; + format = pos; + var baseEncoding = pos ? ExpertEncoding : StandardEncoding; + for (i = 0, ii = charset.length; i < ii; i++) { + var index = baseEncoding.indexOf(charset[i]); + if (index !== -1) { + encoding[index] = i; + } + } + } else { + var dataStart = pos; + format = bytes[pos++]; + switch (format & 0x7f) { + case 0: + var glyphsCount = bytes[pos++]; + for (i = 1; i <= glyphsCount; i++) { + encoding[bytes[pos++]] = i; + } + break; + case 1: + var rangesCount = bytes[pos++]; + var gid = 1; + for (i = 0; i < rangesCount; i++) { + var start = bytes[pos++]; + var left = bytes[pos++]; + for (var j = start; j <= start + left; j++) { + encoding[j] = gid++; + } + } + break; + default: + error('Unknown encoding format: ' + format + ' in CFF'); + break; + } + var dataEnd = pos; + if (format & 0x80) { + bytes[dataStart] &= 0x7f; + readSupplement(); + hasSupplement = true; + } + raw = bytes.subarray(dataStart, dataEnd); + } + format = format & 0x7f; + return new CFFEncoding(predefined, format, encoding, raw); + }, + parseFDSelect: function CFFParser_parseFDSelect(pos, length) { + var start = pos; + var bytes = this.bytes; + var format = bytes[pos++]; + var fdSelect = [], rawBytes; + var i, invalidFirstGID = false; + switch (format) { + case 0: + for (i = 0; i < length; ++i) { + var id = bytes[pos++]; + fdSelect.push(id); + } + rawBytes = bytes.subarray(start, pos); + break; + case 3: + var rangesCount = bytes[pos++] << 8 | bytes[pos++]; + for (i = 0; i < rangesCount; ++i) { + var first = bytes[pos++] << 8 | bytes[pos++]; + if (i === 0 && first !== 0) { + warn('parseFDSelect: The first range must have a first GID of 0' + ' -- trying to recover.'); + invalidFirstGID = true; + first = 0; + } + var fdIndex = bytes[pos++]; + var next = bytes[pos] << 8 | bytes[pos + 1]; + for (var j = first; j < next; ++j) { + fdSelect.push(fdIndex); + } + } + pos += 2; + rawBytes = bytes.subarray(start, pos); + if (invalidFirstGID) { + rawBytes[3] = rawBytes[4] = 0; + } + break; + default: + error('parseFDSelect: Unknown format "' + format + '".'); + break; + } + assert(fdSelect.length === length, 'parseFDSelect: Invalid font data.'); + return new CFFFDSelect(fdSelect, rawBytes); + } + }; + return CFFParser; + }(); + var CFF = function CFFClosure() { + function CFF() { + this.header = null; + this.names = []; + this.topDict = null; + this.strings = new CFFStrings(); + this.globalSubrIndex = null; + this.encoding = null; + this.charset = null; + this.charStrings = null; + this.fdArray = []; + this.fdSelect = null; + this.isCIDFont = false; + } + return CFF; + }(); + var CFFHeader = function CFFHeaderClosure() { + function CFFHeader(major, minor, hdrSize, offSize) { + this.major = major; + this.minor = minor; + this.hdrSize = hdrSize; + this.offSize = offSize; + } + return CFFHeader; + }(); + var CFFStrings = function CFFStringsClosure() { + function CFFStrings() { + this.strings = []; + } + CFFStrings.prototype = { + get: function CFFStrings_get(index) { + if (index >= 0 && index <= 390) { + return CFFStandardStrings[index]; + } + if (index - 391 <= this.strings.length) { + return this.strings[index - 391]; + } + return CFFStandardStrings[0]; + }, + add: function CFFStrings_add(value) { + this.strings.push(value); + }, + get count() { + return this.strings.length; + } + }; + return CFFStrings; + }(); + var CFFIndex = function CFFIndexClosure() { + function CFFIndex() { + this.objects = []; + this.length = 0; + } + CFFIndex.prototype = { + add: function CFFIndex_add(data) { + this.length += data.length; + this.objects.push(data); + }, + set: function CFFIndex_set(index, data) { + this.length += data.length - this.objects[index].length; + this.objects[index] = data; + }, + get: function CFFIndex_get(index) { + return this.objects[index]; + }, + get count() { + return this.objects.length; + } + }; + return CFFIndex; + }(); + var CFFDict = function CFFDictClosure() { + function CFFDict(tables, strings) { + this.keyToNameMap = tables.keyToNameMap; + this.nameToKeyMap = tables.nameToKeyMap; + this.defaults = tables.defaults; + this.types = tables.types; + this.opcodes = tables.opcodes; + this.order = tables.order; + this.strings = strings; + this.values = Object.create(null); + } + CFFDict.prototype = { + setByKey: function CFFDict_setByKey(key, value) { + if (!(key in this.keyToNameMap)) { + return false; + } + var valueLength = value.length; + if (valueLength === 0) { + return true; + } + for (var i = 0; i < valueLength; i++) { + if (isNaN(value[i])) { + warn('Invalid CFFDict value: "' + value + '" for key "' + key + '".'); + return true; + } + } + var type = this.types[key]; + if (type === 'num' || type === 'sid' || type === 'offset') { + value = value[0]; + } + this.values[key] = value; + return true; + }, + setByName: function CFFDict_setByName(name, value) { + if (!(name in this.nameToKeyMap)) { + error('Invalid dictionary name "' + name + '"'); + } + this.values[this.nameToKeyMap[name]] = value; + }, + hasName: function CFFDict_hasName(name) { + return this.nameToKeyMap[name] in this.values; + }, + getByName: function CFFDict_getByName(name) { + if (!(name in this.nameToKeyMap)) { + error('Invalid dictionary name "' + name + '"'); + } + var key = this.nameToKeyMap[name]; + if (!(key in this.values)) { + return this.defaults[key]; + } + return this.values[key]; + }, + removeByName: function CFFDict_removeByName(name) { + delete this.values[this.nameToKeyMap[name]]; + } + }; + CFFDict.createTables = function CFFDict_createTables(layout) { + var tables = { + keyToNameMap: {}, + nameToKeyMap: {}, + defaults: {}, + types: {}, + opcodes: {}, + order: [] + }; + for (var i = 0, ii = layout.length; i < ii; ++i) { + var entry = layout[i]; + var key = isArray(entry[0]) ? (entry[0][0] << 8) + entry[0][1] : entry[0]; + tables.keyToNameMap[key] = entry[1]; + tables.nameToKeyMap[entry[1]] = key; + tables.types[key] = entry[2]; + tables.defaults[key] = entry[3]; + tables.opcodes[key] = isArray(entry[0]) ? entry[0] : [entry[0]]; + tables.order.push(key); + } + return tables; + }; + return CFFDict; + }(); + var CFFTopDict = function CFFTopDictClosure() { + var layout = [ + [ + [ + 12, + 30 + ], + 'ROS', + [ + 'sid', + 'sid', + 'num' + ], + null + ], + [ + [ + 12, + 20 + ], + 'SyntheticBase', + 'num', + null + ], + [ + 0, + 'version', + 'sid', + null + ], + [ + 1, + 'Notice', + 'sid', + null + ], + [ + [ + 12, + 0 + ], + 'Copyright', + 'sid', + null + ], + [ + 2, + 'FullName', + 'sid', + null + ], + [ + 3, + 'FamilyName', + 'sid', + null + ], + [ + 4, + 'Weight', + 'sid', + null + ], + [ + [ + 12, + 1 + ], + 'isFixedPitch', + 'num', + 0 + ], + [ + [ + 12, + 2 + ], + 'ItalicAngle', + 'num', + 0 + ], + [ + [ + 12, + 3 + ], + 'UnderlinePosition', + 'num', + -100 + ], + [ + [ + 12, + 4 + ], + 'UnderlineThickness', + 'num', + 50 + ], + [ + [ + 12, + 5 + ], + 'PaintType', + 'num', + 0 + ], + [ + [ + 12, + 6 + ], + 'CharstringType', + 'num', + 2 + ], + [ + [ + 12, + 7 + ], + 'FontMatrix', + [ + 'num', + 'num', + 'num', + 'num', + 'num', + 'num' + ], + [ + 0.001, + 0, + 0, + 0.001, + 0, + 0 + ] + ], + [ + 13, + 'UniqueID', + 'num', + null + ], + [ + 5, + 'FontBBox', + [ + 'num', + 'num', + 'num', + 'num' + ], + [ + 0, + 0, + 0, + 0 + ] + ], + [ + [ + 12, + 8 + ], + 'StrokeWidth', + 'num', + 0 + ], + [ + 14, + 'XUID', + 'array', + null + ], + [ + 15, + 'charset', + 'offset', + 0 + ], + [ + 16, + 'Encoding', + 'offset', + 0 + ], + [ + 17, + 'CharStrings', + 'offset', + 0 + ], + [ + 18, + 'Private', + [ + 'offset', + 'offset' + ], + null + ], + [ + [ + 12, + 21 + ], + 'PostScript', + 'sid', + null + ], + [ + [ + 12, + 22 + ], + 'BaseFontName', + 'sid', + null + ], + [ + [ + 12, + 23 + ], + 'BaseFontBlend', + 'delta', + null + ], + [ + [ + 12, + 31 + ], + 'CIDFontVersion', + 'num', + 0 + ], + [ + [ + 12, + 32 + ], + 'CIDFontRevision', + 'num', + 0 + ], + [ + [ + 12, + 33 + ], + 'CIDFontType', + 'num', + 0 + ], + [ + [ + 12, + 34 + ], + 'CIDCount', + 'num', + 8720 + ], + [ + [ + 12, + 35 + ], + 'UIDBase', + 'num', + null + ], + [ + [ + 12, + 37 + ], + 'FDSelect', + 'offset', + null + ], + [ + [ + 12, + 36 + ], + 'FDArray', + 'offset', + null + ], + [ + [ + 12, + 38 + ], + 'FontName', + 'sid', + null + ] + ]; + var tables = null; + function CFFTopDict(strings) { + if (tables === null) { + tables = CFFDict.createTables(layout); + } + CFFDict.call(this, tables, strings); + this.privateDict = null; + } + CFFTopDict.prototype = Object.create(CFFDict.prototype); + return CFFTopDict; + }(); + var CFFPrivateDict = function CFFPrivateDictClosure() { + var layout = [ + [ + 6, + 'BlueValues', + 'delta', + null + ], + [ + 7, + 'OtherBlues', + 'delta', + null + ], + [ + 8, + 'FamilyBlues', + 'delta', + null + ], + [ + 9, + 'FamilyOtherBlues', + 'delta', + null + ], + [ + [ + 12, + 9 + ], + 'BlueScale', + 'num', + 0.039625 + ], + [ + [ + 12, + 10 + ], + 'BlueShift', + 'num', + 7 + ], + [ + [ + 12, + 11 + ], + 'BlueFuzz', + 'num', + 1 + ], + [ + 10, + 'StdHW', + 'num', + null + ], + [ + 11, + 'StdVW', + 'num', + null + ], + [ + [ + 12, + 12 + ], + 'StemSnapH', + 'delta', + null + ], + [ + [ + 12, + 13 + ], + 'StemSnapV', + 'delta', + null + ], + [ + [ + 12, + 14 + ], + 'ForceBold', + 'num', + 0 + ], + [ + [ + 12, + 17 + ], + 'LanguageGroup', + 'num', + 0 + ], + [ + [ + 12, + 18 + ], + 'ExpansionFactor', + 'num', + 0.06 + ], + [ + [ + 12, + 19 + ], + 'initialRandomSeed', + 'num', + 0 + ], + [ + 20, + 'defaultWidthX', + 'num', + 0 + ], + [ + 21, + 'nominalWidthX', + 'num', + 0 + ], + [ + 19, + 'Subrs', + 'offset', + null + ] + ]; + var tables = null; + function CFFPrivateDict(strings) { + if (tables === null) { + tables = CFFDict.createTables(layout); + } + CFFDict.call(this, tables, strings); + this.subrsIndex = null; + } + CFFPrivateDict.prototype = Object.create(CFFDict.prototype); + return CFFPrivateDict; + }(); + var CFFCharsetPredefinedTypes = { + ISO_ADOBE: 0, + EXPERT: 1, + EXPERT_SUBSET: 2 + }; + var CFFCharset = function CFFCharsetClosure() { + function CFFCharset(predefined, format, charset, raw) { + this.predefined = predefined; + this.format = format; + this.charset = charset; + this.raw = raw; + } + return CFFCharset; + }(); + var CFFEncoding = function CFFEncodingClosure() { + function CFFEncoding(predefined, format, encoding, raw) { + this.predefined = predefined; + this.format = format; + this.encoding = encoding; + this.raw = raw; + } + return CFFEncoding; + }(); + var CFFFDSelect = function CFFFDSelectClosure() { + function CFFFDSelect(fdSelect, raw) { + this.fdSelect = fdSelect; + this.raw = raw; + } + CFFFDSelect.prototype = { + getFDIndex: function CFFFDSelect_get(glyphIndex) { + if (glyphIndex < 0 || glyphIndex >= this.fdSelect.length) { + return -1; + } + return this.fdSelect[glyphIndex]; + } + }; + return CFFFDSelect; + }(); + var CFFOffsetTracker = function CFFOffsetTrackerClosure() { + function CFFOffsetTracker() { + this.offsets = Object.create(null); + } + CFFOffsetTracker.prototype = { + isTracking: function CFFOffsetTracker_isTracking(key) { + return key in this.offsets; + }, + track: function CFFOffsetTracker_track(key, location) { + if (key in this.offsets) { + error('Already tracking location of ' + key); + } + this.offsets[key] = location; + }, + offset: function CFFOffsetTracker_offset(value) { + for (var key in this.offsets) { + this.offsets[key] += value; + } + }, + setEntryLocation: function CFFOffsetTracker_setEntryLocation(key, values, output) { + if (!(key in this.offsets)) { + error('Not tracking location of ' + key); + } + var data = output.data; + var dataOffset = this.offsets[key]; + var size = 5; + for (var i = 0, ii = values.length; i < ii; ++i) { + var offset0 = i * size + dataOffset; + var offset1 = offset0 + 1; + var offset2 = offset0 + 2; + var offset3 = offset0 + 3; + var offset4 = offset0 + 4; + if (data[offset0] !== 0x1d || data[offset1] !== 0 || data[offset2] !== 0 || data[offset3] !== 0 || data[offset4] !== 0) { + error('writing to an offset that is not empty'); + } + var value = values[i]; + data[offset0] = 0x1d; + data[offset1] = value >> 24 & 0xFF; + data[offset2] = value >> 16 & 0xFF; + data[offset3] = value >> 8 & 0xFF; + data[offset4] = value & 0xFF; + } + } + }; + return CFFOffsetTracker; + }(); + var CFFCompiler = function CFFCompilerClosure() { + function CFFCompiler(cff) { + this.cff = cff; + } + CFFCompiler.prototype = { + compile: function CFFCompiler_compile() { + var cff = this.cff; + var output = { + data: [], + length: 0, + add: function CFFCompiler_add(data) { + this.data = this.data.concat(data); + this.length = this.data.length; + } + }; + var header = this.compileHeader(cff.header); + output.add(header); + var nameIndex = this.compileNameIndex(cff.names); + output.add(nameIndex); + if (cff.isCIDFont) { + if (cff.topDict.hasName('FontMatrix')) { + var base = cff.topDict.getByName('FontMatrix'); + cff.topDict.removeByName('FontMatrix'); + for (var i = 0, ii = cff.fdArray.length; i < ii; i++) { + var subDict = cff.fdArray[i]; + var matrix = base.slice(0); + if (subDict.hasName('FontMatrix')) { + matrix = Util.transform(matrix, subDict.getByName('FontMatrix')); + } + subDict.setByName('FontMatrix', matrix); + } + } + } + var compiled = this.compileTopDicts([cff.topDict], output.length, cff.isCIDFont); + output.add(compiled.output); + var topDictTracker = compiled.trackers[0]; + var stringIndex = this.compileStringIndex(cff.strings.strings); + output.add(stringIndex); + var globalSubrIndex = this.compileIndex(cff.globalSubrIndex); + output.add(globalSubrIndex); + if (cff.encoding && cff.topDict.hasName('Encoding')) { + if (cff.encoding.predefined) { + topDictTracker.setEntryLocation('Encoding', [cff.encoding.format], output); + } else { + var encoding = this.compileEncoding(cff.encoding); + topDictTracker.setEntryLocation('Encoding', [output.length], output); + output.add(encoding); + } + } + if (cff.charset && cff.topDict.hasName('charset')) { + if (cff.charset.predefined) { + topDictTracker.setEntryLocation('charset', [cff.charset.format], output); + } else { + var charset = this.compileCharset(cff.charset); + topDictTracker.setEntryLocation('charset', [output.length], output); + output.add(charset); + } + } + var charStrings = this.compileCharStrings(cff.charStrings); + topDictTracker.setEntryLocation('CharStrings', [output.length], output); + output.add(charStrings); + if (cff.isCIDFont) { + topDictTracker.setEntryLocation('FDSelect', [output.length], output); + var fdSelect = this.compileFDSelect(cff.fdSelect.raw); + output.add(fdSelect); + compiled = this.compileTopDicts(cff.fdArray, output.length, true); + topDictTracker.setEntryLocation('FDArray', [output.length], output); + output.add(compiled.output); + var fontDictTrackers = compiled.trackers; + this.compilePrivateDicts(cff.fdArray, fontDictTrackers, output); + } + this.compilePrivateDicts([cff.topDict], [topDictTracker], output); + output.add([0]); + return output.data; + }, + encodeNumber: function CFFCompiler_encodeNumber(value) { + if (parseFloat(value) === parseInt(value, 10) && !isNaN(value)) { + return this.encodeInteger(value); + } + return this.encodeFloat(value); + }, + encodeFloat: function CFFCompiler_encodeFloat(num) { + var value = num.toString(); + var m = /\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(value); + if (m) { + var epsilon = parseFloat('1e' + ((m[2] ? +m[2] : 0) + m[1].length)); + value = (Math.round(num * epsilon) / epsilon).toString(); + } + var nibbles = ''; + var i, ii; + for (i = 0, ii = value.length; i < ii; ++i) { + var a = value[i]; + if (a === 'e') { + nibbles += value[++i] === '-' ? 'c' : 'b'; + } else if (a === '.') { + nibbles += 'a'; + } else if (a === '-') { + nibbles += 'e'; + } else { + nibbles += a; + } + } + nibbles += nibbles.length & 1 ? 'f' : 'ff'; + var out = [30]; + for (i = 0, ii = nibbles.length; i < ii; i += 2) { + out.push(parseInt(nibbles.substr(i, 2), 16)); + } + return out; + }, + encodeInteger: function CFFCompiler_encodeInteger(value) { + var code; + if (value >= -107 && value <= 107) { + code = [value + 139]; + } else if (value >= 108 && value <= 1131) { + value = value - 108; + code = [ + (value >> 8) + 247, + value & 0xFF + ]; + } else if (value >= -1131 && value <= -108) { + value = -value - 108; + code = [ + (value >> 8) + 251, + value & 0xFF + ]; + } else if (value >= -32768 && value <= 32767) { + code = [ + 0x1c, + value >> 8 & 0xFF, + value & 0xFF + ]; + } else { + code = [ + 0x1d, + value >> 24 & 0xFF, + value >> 16 & 0xFF, + value >> 8 & 0xFF, + value & 0xFF + ]; + } + return code; + }, + compileHeader: function CFFCompiler_compileHeader(header) { + return [ + header.major, + header.minor, + header.hdrSize, + header.offSize + ]; + }, + compileNameIndex: function CFFCompiler_compileNameIndex(names) { + var nameIndex = new CFFIndex(); + for (var i = 0, ii = names.length; i < ii; ++i) { + nameIndex.add(stringToBytes(names[i])); + } + return this.compileIndex(nameIndex); + }, + compileTopDicts: function CFFCompiler_compileTopDicts(dicts, length, removeCidKeys) { + var fontDictTrackers = []; + var fdArrayIndex = new CFFIndex(); + for (var i = 0, ii = dicts.length; i < ii; ++i) { + var fontDict = dicts[i]; + if (removeCidKeys) { + fontDict.removeByName('CIDFontVersion'); + fontDict.removeByName('CIDFontRevision'); + fontDict.removeByName('CIDFontType'); + fontDict.removeByName('CIDCount'); + fontDict.removeByName('UIDBase'); + } + var fontDictTracker = new CFFOffsetTracker(); + var fontDictData = this.compileDict(fontDict, fontDictTracker); + fontDictTrackers.push(fontDictTracker); + fdArrayIndex.add(fontDictData); + fontDictTracker.offset(length); + } + fdArrayIndex = this.compileIndex(fdArrayIndex, fontDictTrackers); + return { + trackers: fontDictTrackers, + output: fdArrayIndex + }; + }, + compilePrivateDicts: function CFFCompiler_compilePrivateDicts(dicts, trackers, output) { + for (var i = 0, ii = dicts.length; i < ii; ++i) { + var fontDict = dicts[i]; + assert(fontDict.privateDict && fontDict.hasName('Private'), 'There must be an private dictionary.'); + var privateDict = fontDict.privateDict; + var privateDictTracker = new CFFOffsetTracker(); + var privateDictData = this.compileDict(privateDict, privateDictTracker); + var outputLength = output.length; + privateDictTracker.offset(outputLength); + if (!privateDictData.length) { + outputLength = 0; + } + trackers[i].setEntryLocation('Private', [ + privateDictData.length, + outputLength + ], output); + output.add(privateDictData); + if (privateDict.subrsIndex && privateDict.hasName('Subrs')) { + var subrs = this.compileIndex(privateDict.subrsIndex); + privateDictTracker.setEntryLocation('Subrs', [privateDictData.length], output); + output.add(subrs); + } + } + }, + compileDict: function CFFCompiler_compileDict(dict, offsetTracker) { + var out = []; + var order = dict.order; + for (var i = 0; i < order.length; ++i) { + var key = order[i]; + if (!(key in dict.values)) { + continue; + } + var values = dict.values[key]; + var types = dict.types[key]; + if (!isArray(types)) { + types = [types]; + } + if (!isArray(values)) { + values = [values]; + } + if (values.length === 0) { + continue; + } + for (var j = 0, jj = types.length; j < jj; ++j) { + var type = types[j]; + var value = values[j]; + switch (type) { + case 'num': + case 'sid': + out = out.concat(this.encodeNumber(value)); + break; + case 'offset': + var name = dict.keyToNameMap[key]; + if (!offsetTracker.isTracking(name)) { + offsetTracker.track(name, out.length); + } + out = out.concat([ + 0x1d, + 0, + 0, + 0, + 0 + ]); + break; + case 'array': + case 'delta': + out = out.concat(this.encodeNumber(value)); + for (var k = 1, kk = values.length; k < kk; ++k) { + out = out.concat(this.encodeNumber(values[k])); + } + break; + default: + error('Unknown data type of ' + type); + break; + } + } + out = out.concat(dict.opcodes[key]); + } + return out; + }, + compileStringIndex: function CFFCompiler_compileStringIndex(strings) { + var stringIndex = new CFFIndex(); + for (var i = 0, ii = strings.length; i < ii; ++i) { + stringIndex.add(stringToBytes(strings[i])); + } + return this.compileIndex(stringIndex); + }, + compileGlobalSubrIndex: function CFFCompiler_compileGlobalSubrIndex() { + var globalSubrIndex = this.cff.globalSubrIndex; + this.out.writeByteArray(this.compileIndex(globalSubrIndex)); + }, + compileCharStrings: function CFFCompiler_compileCharStrings(charStrings) { + return this.compileIndex(charStrings); + }, + compileCharset: function CFFCompiler_compileCharset(charset) { + return this.compileTypedArray(charset.raw); + }, + compileEncoding: function CFFCompiler_compileEncoding(encoding) { + return this.compileTypedArray(encoding.raw); + }, + compileFDSelect: function CFFCompiler_compileFDSelect(fdSelect) { + return this.compileTypedArray(fdSelect); + }, + compileTypedArray: function CFFCompiler_compileTypedArray(data) { + var out = []; + for (var i = 0, ii = data.length; i < ii; ++i) { + out[i] = data[i]; + } + return out; + }, + compileIndex: function CFFCompiler_compileIndex(index, trackers) { + trackers = trackers || []; + var objects = index.objects; + var count = objects.length; + if (count === 0) { + return [ + 0, + 0, + 0 + ]; + } + var data = [ + count >> 8 & 0xFF, + count & 0xff + ]; + var lastOffset = 1, i; + for (i = 0; i < count; ++i) { + lastOffset += objects[i].length; + } + var offsetSize; + if (lastOffset < 0x100) { + offsetSize = 1; + } else if (lastOffset < 0x10000) { + offsetSize = 2; + } else if (lastOffset < 0x1000000) { + offsetSize = 3; + } else { + offsetSize = 4; + } + data.push(offsetSize); + var relativeOffset = 1; + for (i = 0; i < count + 1; i++) { + if (offsetSize === 1) { + data.push(relativeOffset & 0xFF); + } else if (offsetSize === 2) { + data.push(relativeOffset >> 8 & 0xFF, relativeOffset & 0xFF); + } else if (offsetSize === 3) { + data.push(relativeOffset >> 16 & 0xFF, relativeOffset >> 8 & 0xFF, relativeOffset & 0xFF); + } else { + data.push(relativeOffset >>> 24 & 0xFF, relativeOffset >> 16 & 0xFF, relativeOffset >> 8 & 0xFF, relativeOffset & 0xFF); + } + if (objects[i]) { + relativeOffset += objects[i].length; + } + } + for (i = 0; i < count; i++) { + if (trackers[i]) { + trackers[i].offset(data.length); + } + for (var j = 0, jj = objects[i].length; j < jj; j++) { + data.push(objects[i][j]); + } + } + return data; + } + }; + return CFFCompiler; + }(); + exports.CFFStandardStrings = CFFStandardStrings; + exports.CFFParser = CFFParser; + exports.CFF = CFF; + exports.CFFHeader = CFFHeader; + exports.CFFStrings = CFFStrings; + exports.CFFIndex = CFFIndex; + exports.CFFCharset = CFFCharset; + exports.CFFTopDict = CFFTopDict; + exports.CFFPrivateDict = CFFPrivateDict; + exports.CFFCompiler = CFFCompiler; + })); + (function (root, factory) { + factory(root.pdfjsCoreChunkedStream = {}, root.pdfjsSharedUtil); + }(this, function (exports, sharedUtil) { + var MissingDataException = sharedUtil.MissingDataException; + var arrayByteLength = sharedUtil.arrayByteLength; + var arraysToBytes = sharedUtil.arraysToBytes; + var assert = sharedUtil.assert; + var createPromiseCapability = sharedUtil.createPromiseCapability; + var isInt = sharedUtil.isInt; + var isEmptyObj = sharedUtil.isEmptyObj; + var ChunkedStream = function ChunkedStreamClosure() { + function ChunkedStream(length, chunkSize, manager) { + this.bytes = new Uint8Array(length); + this.start = 0; + this.pos = 0; + this.end = length; + this.chunkSize = chunkSize; + this.loadedChunks = []; + this.numChunksLoaded = 0; + this.numChunks = Math.ceil(length / chunkSize); + this.manager = manager; + this.progressiveDataLength = 0; + this.lastSuccessfulEnsureByteChunk = -1; + } + ChunkedStream.prototype = { + getMissingChunks: function ChunkedStream_getMissingChunks() { + var chunks = []; + for (var chunk = 0, n = this.numChunks; chunk < n; ++chunk) { + if (!this.loadedChunks[chunk]) { + chunks.push(chunk); + } + } + return chunks; + }, + getBaseStreams: function ChunkedStream_getBaseStreams() { + return [this]; + }, + allChunksLoaded: function ChunkedStream_allChunksLoaded() { + return this.numChunksLoaded === this.numChunks; + }, + onReceiveData: function ChunkedStream_onReceiveData(begin, chunk) { + var end = begin + chunk.byteLength; + assert(begin % this.chunkSize === 0, 'Bad begin offset: ' + begin); + var length = this.bytes.length; + assert(end % this.chunkSize === 0 || end === length, 'Bad end offset: ' + end); + this.bytes.set(new Uint8Array(chunk), begin); + var chunkSize = this.chunkSize; + var beginChunk = Math.floor(begin / chunkSize); + var endChunk = Math.floor((end - 1) / chunkSize) + 1; + var curChunk; + for (curChunk = beginChunk; curChunk < endChunk; ++curChunk) { + if (!this.loadedChunks[curChunk]) { + this.loadedChunks[curChunk] = true; + ++this.numChunksLoaded; + } + } + }, + onReceiveProgressiveData: function ChunkedStream_onReceiveProgressiveData(data) { + var position = this.progressiveDataLength; + var beginChunk = Math.floor(position / this.chunkSize); + this.bytes.set(new Uint8Array(data), position); + position += data.byteLength; + this.progressiveDataLength = position; + var endChunk = position >= this.end ? this.numChunks : Math.floor(position / this.chunkSize); + var curChunk; + for (curChunk = beginChunk; curChunk < endChunk; ++curChunk) { + if (!this.loadedChunks[curChunk]) { + this.loadedChunks[curChunk] = true; + ++this.numChunksLoaded; + } + } + }, + ensureByte: function ChunkedStream_ensureByte(pos) { + var chunk = Math.floor(pos / this.chunkSize); + if (chunk === this.lastSuccessfulEnsureByteChunk) { + return; + } + if (!this.loadedChunks[chunk]) { + throw new MissingDataException(pos, pos + 1); + } + this.lastSuccessfulEnsureByteChunk = chunk; + }, + ensureRange: function ChunkedStream_ensureRange(begin, end) { + if (begin >= end) { + return; + } + if (end <= this.progressiveDataLength) { + return; + } + var chunkSize = this.chunkSize; + var beginChunk = Math.floor(begin / chunkSize); + var endChunk = Math.floor((end - 1) / chunkSize) + 1; + for (var chunk = beginChunk; chunk < endChunk; ++chunk) { + if (!this.loadedChunks[chunk]) { + throw new MissingDataException(begin, end); + } + } + }, + nextEmptyChunk: function ChunkedStream_nextEmptyChunk(beginChunk) { + var chunk, numChunks = this.numChunks; + for (var i = 0; i < numChunks; ++i) { + chunk = (beginChunk + i) % numChunks; + if (!this.loadedChunks[chunk]) { + return chunk; + } + } + return null; + }, + hasChunk: function ChunkedStream_hasChunk(chunk) { + return !!this.loadedChunks[chunk]; + }, + get length() { + return this.end - this.start; + }, + get isEmpty() { + return this.length === 0; + }, + getByte: function ChunkedStream_getByte() { + var pos = this.pos; + if (pos >= this.end) { + return -1; + } + this.ensureByte(pos); + return this.bytes[this.pos++]; + }, + getUint16: function ChunkedStream_getUint16() { + var b0 = this.getByte(); + var b1 = this.getByte(); + if (b0 === -1 || b1 === -1) { + return -1; + } + return (b0 << 8) + b1; + }, + getInt32: function ChunkedStream_getInt32() { + var b0 = this.getByte(); + var b1 = this.getByte(); + var b2 = this.getByte(); + var b3 = this.getByte(); + return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; + }, + getBytes: function ChunkedStream_getBytes(length) { + var bytes = this.bytes; + var pos = this.pos; + var strEnd = this.end; + if (!length) { + this.ensureRange(pos, strEnd); + return bytes.subarray(pos, strEnd); + } + var end = pos + length; + if (end > strEnd) { + end = strEnd; + } + this.ensureRange(pos, end); + this.pos = end; + return bytes.subarray(pos, end); + }, + peekByte: function ChunkedStream_peekByte() { + var peekedByte = this.getByte(); + this.pos--; + return peekedByte; + }, + peekBytes: function ChunkedStream_peekBytes(length) { + var bytes = this.getBytes(length); + this.pos -= bytes.length; + return bytes; + }, + getByteRange: function ChunkedStream_getBytes(begin, end) { + this.ensureRange(begin, end); + return this.bytes.subarray(begin, end); + }, + skip: function ChunkedStream_skip(n) { + if (!n) { + n = 1; + } + this.pos += n; + }, + reset: function ChunkedStream_reset() { + this.pos = this.start; + }, + moveStart: function ChunkedStream_moveStart() { + this.start = this.pos; + }, + makeSubStream: function ChunkedStream_makeSubStream(start, length, dict) { + this.ensureRange(start, start + length); + function ChunkedStreamSubstream() { + } + ChunkedStreamSubstream.prototype = Object.create(this); + ChunkedStreamSubstream.prototype.getMissingChunks = function () { + var chunkSize = this.chunkSize; + var beginChunk = Math.floor(this.start / chunkSize); + var endChunk = Math.floor((this.end - 1) / chunkSize) + 1; + var missingChunks = []; + for (var chunk = beginChunk; chunk < endChunk; ++chunk) { + if (!this.loadedChunks[chunk]) { + missingChunks.push(chunk); + } + } + return missingChunks; + }; + var subStream = new ChunkedStreamSubstream(); + subStream.pos = subStream.start = start; + subStream.end = start + length || this.end; + subStream.dict = dict; + return subStream; + }, + isStream: true + }; + return ChunkedStream; + }(); + var ChunkedStreamManager = function ChunkedStreamManagerClosure() { + function ChunkedStreamManager(pdfNetworkStream, args) { + var chunkSize = args.rangeChunkSize; + var length = args.length; + this.stream = new ChunkedStream(length, chunkSize, this); + this.length = length; + this.chunkSize = chunkSize; + this.pdfNetworkStream = pdfNetworkStream; + this.url = args.url; + this.disableAutoFetch = args.disableAutoFetch; + this.msgHandler = args.msgHandler; + this.currRequestId = 0; + this.chunksNeededByRequest = Object.create(null); + this.requestsByChunk = Object.create(null); + this.promisesByRequest = Object.create(null); + this.progressiveDataLength = 0; + this.aborted = false; + this._loadedStreamCapability = createPromiseCapability(); + } + ChunkedStreamManager.prototype = { + onLoadedStream: function ChunkedStreamManager_getLoadedStream() { + return this._loadedStreamCapability.promise; + }, + sendRequest: function ChunkedStreamManager_sendRequest(begin, end) { + var rangeReader = this.pdfNetworkStream.getRangeReader(begin, end); + if (!rangeReader.isStreamingSupported) { + rangeReader.onProgress = this.onProgress.bind(this); + } + var chunks = [], loaded = 0; + var manager = this; + var promise = new Promise(function (resolve, reject) { + var readChunk = function (chunk) { + try { + if (!chunk.done) { + var data = chunk.value; + chunks.push(data); + loaded += arrayByteLength(data); + if (rangeReader.isStreamingSupported) { + manager.onProgress({ loaded: loaded }); + } + rangeReader.read().then(readChunk, reject); + return; + } + var chunkData = arraysToBytes(chunks); + chunks = null; + resolve(chunkData); + } catch (e) { + reject(e); + } + }; + rangeReader.read().then(readChunk, reject); + }); + promise.then(function (data) { + if (this.aborted) { + return; + } + this.onReceiveData({ + chunk: data, + begin: begin + }); + }.bind(this)); + }, + requestAllChunks: function ChunkedStreamManager_requestAllChunks() { + var missingChunks = this.stream.getMissingChunks(); + this._requestChunks(missingChunks); + return this._loadedStreamCapability.promise; + }, + _requestChunks: function ChunkedStreamManager_requestChunks(chunks) { + var requestId = this.currRequestId++; + var i, ii; + var chunksNeeded = Object.create(null); + this.chunksNeededByRequest[requestId] = chunksNeeded; + for (i = 0, ii = chunks.length; i < ii; i++) { + if (!this.stream.hasChunk(chunks[i])) { + chunksNeeded[chunks[i]] = true; + } + } + if (isEmptyObj(chunksNeeded)) { + return Promise.resolve(); + } + var capability = createPromiseCapability(); + this.promisesByRequest[requestId] = capability; + var chunksToRequest = []; + for (var chunk in chunksNeeded) { + chunk = chunk | 0; + if (!(chunk in this.requestsByChunk)) { + this.requestsByChunk[chunk] = []; + chunksToRequest.push(chunk); + } + this.requestsByChunk[chunk].push(requestId); + } + if (!chunksToRequest.length) { + return capability.promise; + } + var groupedChunksToRequest = this.groupChunks(chunksToRequest); + for (i = 0; i < groupedChunksToRequest.length; ++i) { + var groupedChunk = groupedChunksToRequest[i]; + var begin = groupedChunk.beginChunk * this.chunkSize; + var end = Math.min(groupedChunk.endChunk * this.chunkSize, this.length); + this.sendRequest(begin, end); + } + return capability.promise; + }, + getStream: function ChunkedStreamManager_getStream() { + return this.stream; + }, + requestRange: function ChunkedStreamManager_requestRange(begin, end) { + end = Math.min(end, this.length); + var beginChunk = this.getBeginChunk(begin); + var endChunk = this.getEndChunk(end); + var chunks = []; + for (var chunk = beginChunk; chunk < endChunk; ++chunk) { + chunks.push(chunk); + } + return this._requestChunks(chunks); + }, + requestRanges: function ChunkedStreamManager_requestRanges(ranges) { + ranges = ranges || []; + var chunksToRequest = []; + for (var i = 0; i < ranges.length; i++) { + var beginChunk = this.getBeginChunk(ranges[i].begin); + var endChunk = this.getEndChunk(ranges[i].end); + for (var chunk = beginChunk; chunk < endChunk; ++chunk) { + if (chunksToRequest.indexOf(chunk) < 0) { + chunksToRequest.push(chunk); + } + } + } + chunksToRequest.sort(function (a, b) { + return a - b; + }); + return this._requestChunks(chunksToRequest); + }, + groupChunks: function ChunkedStreamManager_groupChunks(chunks) { + var groupedChunks = []; + var beginChunk = -1; + var prevChunk = -1; + for (var i = 0; i < chunks.length; ++i) { + var chunk = chunks[i]; + if (beginChunk < 0) { + beginChunk = chunk; + } + if (prevChunk >= 0 && prevChunk + 1 !== chunk) { + groupedChunks.push({ + beginChunk: beginChunk, + endChunk: prevChunk + 1 + }); + beginChunk = chunk; + } + if (i + 1 === chunks.length) { + groupedChunks.push({ + beginChunk: beginChunk, + endChunk: chunk + 1 + }); + } + prevChunk = chunk; + } + return groupedChunks; + }, + onProgress: function ChunkedStreamManager_onProgress(args) { + var bytesLoaded = this.stream.numChunksLoaded * this.chunkSize + args.loaded; + this.msgHandler.send('DocProgress', { + loaded: bytesLoaded, + total: this.length + }); + }, + onReceiveData: function ChunkedStreamManager_onReceiveData(args) { + var chunk = args.chunk; + var isProgressive = args.begin === undefined; + var begin = isProgressive ? this.progressiveDataLength : args.begin; + var end = begin + chunk.byteLength; + var beginChunk = Math.floor(begin / this.chunkSize); + var endChunk = end < this.length ? Math.floor(end / this.chunkSize) : Math.ceil(end / this.chunkSize); + if (isProgressive) { + this.stream.onReceiveProgressiveData(chunk); + this.progressiveDataLength = end; + } else { + this.stream.onReceiveData(begin, chunk); + } + if (this.stream.allChunksLoaded()) { + this._loadedStreamCapability.resolve(this.stream); + } + var loadedRequests = []; + var i, requestId; + for (chunk = beginChunk; chunk < endChunk; ++chunk) { + var requestIds = this.requestsByChunk[chunk] || []; + delete this.requestsByChunk[chunk]; + for (i = 0; i < requestIds.length; ++i) { + requestId = requestIds[i]; + var chunksNeeded = this.chunksNeededByRequest[requestId]; + if (chunk in chunksNeeded) { + delete chunksNeeded[chunk]; + } + if (!isEmptyObj(chunksNeeded)) { + continue; + } + loadedRequests.push(requestId); + } + } + if (!this.disableAutoFetch && isEmptyObj(this.requestsByChunk)) { + var nextEmptyChunk; + if (this.stream.numChunksLoaded === 1) { + var lastChunk = this.stream.numChunks - 1; + if (!this.stream.hasChunk(lastChunk)) { + nextEmptyChunk = lastChunk; + } + } else { + nextEmptyChunk = this.stream.nextEmptyChunk(endChunk); + } + if (isInt(nextEmptyChunk)) { + this._requestChunks([nextEmptyChunk]); + } + } + for (i = 0; i < loadedRequests.length; ++i) { + requestId = loadedRequests[i]; + var capability = this.promisesByRequest[requestId]; + delete this.promisesByRequest[requestId]; + capability.resolve(); + } + this.msgHandler.send('DocProgress', { + loaded: this.stream.numChunksLoaded * this.chunkSize, + total: this.length + }); + }, + onError: function ChunkedStreamManager_onError(err) { + this._loadedStreamCapability.reject(err); + }, + getBeginChunk: function ChunkedStreamManager_getBeginChunk(begin) { + var chunk = Math.floor(begin / this.chunkSize); + return chunk; + }, + getEndChunk: function ChunkedStreamManager_getEndChunk(end) { + var chunk = Math.floor((end - 1) / this.chunkSize) + 1; + return chunk; + }, + abort: function ChunkedStreamManager_abort() { + this.aborted = true; + if (this.pdfNetworkStream) { + this.pdfNetworkStream.cancelAllRequests('abort'); + } + for (var requestId in this.promisesByRequest) { + var capability = this.promisesByRequest[requestId]; + capability.reject(new Error('Request was aborted')); + } + } + }; + return ChunkedStreamManager; + }(); + exports.ChunkedStream = ChunkedStream; + exports.ChunkedStreamManager = ChunkedStreamManager; + })); + (function (root, factory) { + factory(root.pdfjsCoreGlyphList = {}, root.pdfjsSharedUtil); + }(this, function (exports, sharedUtil) { + var getLookupTableFactory = sharedUtil.getLookupTableFactory; + var getGlyphsUnicode = getLookupTableFactory(function (t) { + t['A'] = 0x0041; + t['AE'] = 0x00C6; + t['AEacute'] = 0x01FC; + t['AEmacron'] = 0x01E2; + t['AEsmall'] = 0xF7E6; + t['Aacute'] = 0x00C1; + t['Aacutesmall'] = 0xF7E1; + t['Abreve'] = 0x0102; + t['Abreveacute'] = 0x1EAE; + t['Abrevecyrillic'] = 0x04D0; + t['Abrevedotbelow'] = 0x1EB6; + t['Abrevegrave'] = 0x1EB0; + t['Abrevehookabove'] = 0x1EB2; + t['Abrevetilde'] = 0x1EB4; + t['Acaron'] = 0x01CD; + t['Acircle'] = 0x24B6; + t['Acircumflex'] = 0x00C2; + t['Acircumflexacute'] = 0x1EA4; + t['Acircumflexdotbelow'] = 0x1EAC; + t['Acircumflexgrave'] = 0x1EA6; + t['Acircumflexhookabove'] = 0x1EA8; + t['Acircumflexsmall'] = 0xF7E2; + t['Acircumflextilde'] = 0x1EAA; + t['Acute'] = 0xF6C9; + t['Acutesmall'] = 0xF7B4; + t['Acyrillic'] = 0x0410; + t['Adblgrave'] = 0x0200; + t['Adieresis'] = 0x00C4; + t['Adieresiscyrillic'] = 0x04D2; + t['Adieresismacron'] = 0x01DE; + t['Adieresissmall'] = 0xF7E4; + t['Adotbelow'] = 0x1EA0; + t['Adotmacron'] = 0x01E0; + t['Agrave'] = 0x00C0; + t['Agravesmall'] = 0xF7E0; + t['Ahookabove'] = 0x1EA2; + t['Aiecyrillic'] = 0x04D4; + t['Ainvertedbreve'] = 0x0202; + t['Alpha'] = 0x0391; + t['Alphatonos'] = 0x0386; + t['Amacron'] = 0x0100; + t['Amonospace'] = 0xFF21; + t['Aogonek'] = 0x0104; + t['Aring'] = 0x00C5; + t['Aringacute'] = 0x01FA; + t['Aringbelow'] = 0x1E00; + t['Aringsmall'] = 0xF7E5; + t['Asmall'] = 0xF761; + t['Atilde'] = 0x00C3; + t['Atildesmall'] = 0xF7E3; + t['Aybarmenian'] = 0x0531; + t['B'] = 0x0042; + t['Bcircle'] = 0x24B7; + t['Bdotaccent'] = 0x1E02; + t['Bdotbelow'] = 0x1E04; + t['Becyrillic'] = 0x0411; + t['Benarmenian'] = 0x0532; + t['Beta'] = 0x0392; + t['Bhook'] = 0x0181; + t['Blinebelow'] = 0x1E06; + t['Bmonospace'] = 0xFF22; + t['Brevesmall'] = 0xF6F4; + t['Bsmall'] = 0xF762; + t['Btopbar'] = 0x0182; + t['C'] = 0x0043; + t['Caarmenian'] = 0x053E; + t['Cacute'] = 0x0106; + t['Caron'] = 0xF6CA; + t['Caronsmall'] = 0xF6F5; + t['Ccaron'] = 0x010C; + t['Ccedilla'] = 0x00C7; + t['Ccedillaacute'] = 0x1E08; + t['Ccedillasmall'] = 0xF7E7; + t['Ccircle'] = 0x24B8; + t['Ccircumflex'] = 0x0108; + t['Cdot'] = 0x010A; + t['Cdotaccent'] = 0x010A; + t['Cedillasmall'] = 0xF7B8; + t['Chaarmenian'] = 0x0549; + t['Cheabkhasiancyrillic'] = 0x04BC; + t['Checyrillic'] = 0x0427; + t['Chedescenderabkhasiancyrillic'] = 0x04BE; + t['Chedescendercyrillic'] = 0x04B6; + t['Chedieresiscyrillic'] = 0x04F4; + t['Cheharmenian'] = 0x0543; + t['Chekhakassiancyrillic'] = 0x04CB; + t['Cheverticalstrokecyrillic'] = 0x04B8; + t['Chi'] = 0x03A7; + t['Chook'] = 0x0187; + t['Circumflexsmall'] = 0xF6F6; + t['Cmonospace'] = 0xFF23; + t['Coarmenian'] = 0x0551; + t['Csmall'] = 0xF763; + t['D'] = 0x0044; + t['DZ'] = 0x01F1; + t['DZcaron'] = 0x01C4; + t['Daarmenian'] = 0x0534; + t['Dafrican'] = 0x0189; + t['Dcaron'] = 0x010E; + t['Dcedilla'] = 0x1E10; + t['Dcircle'] = 0x24B9; + t['Dcircumflexbelow'] = 0x1E12; + t['Dcroat'] = 0x0110; + t['Ddotaccent'] = 0x1E0A; + t['Ddotbelow'] = 0x1E0C; + t['Decyrillic'] = 0x0414; + t['Deicoptic'] = 0x03EE; + t['Delta'] = 0x2206; + t['Deltagreek'] = 0x0394; + t['Dhook'] = 0x018A; + t['Dieresis'] = 0xF6CB; + t['DieresisAcute'] = 0xF6CC; + t['DieresisGrave'] = 0xF6CD; + t['Dieresissmall'] = 0xF7A8; + t['Digammagreek'] = 0x03DC; + t['Djecyrillic'] = 0x0402; + t['Dlinebelow'] = 0x1E0E; + t['Dmonospace'] = 0xFF24; + t['Dotaccentsmall'] = 0xF6F7; + t['Dslash'] = 0x0110; + t['Dsmall'] = 0xF764; + t['Dtopbar'] = 0x018B; + t['Dz'] = 0x01F2; + t['Dzcaron'] = 0x01C5; + t['Dzeabkhasiancyrillic'] = 0x04E0; + t['Dzecyrillic'] = 0x0405; + t['Dzhecyrillic'] = 0x040F; + t['E'] = 0x0045; + t['Eacute'] = 0x00C9; + t['Eacutesmall'] = 0xF7E9; + t['Ebreve'] = 0x0114; + t['Ecaron'] = 0x011A; + t['Ecedillabreve'] = 0x1E1C; + t['Echarmenian'] = 0x0535; + t['Ecircle'] = 0x24BA; + t['Ecircumflex'] = 0x00CA; + t['Ecircumflexacute'] = 0x1EBE; + t['Ecircumflexbelow'] = 0x1E18; + t['Ecircumflexdotbelow'] = 0x1EC6; + t['Ecircumflexgrave'] = 0x1EC0; + t['Ecircumflexhookabove'] = 0x1EC2; + t['Ecircumflexsmall'] = 0xF7EA; + t['Ecircumflextilde'] = 0x1EC4; + t['Ecyrillic'] = 0x0404; + t['Edblgrave'] = 0x0204; + t['Edieresis'] = 0x00CB; + t['Edieresissmall'] = 0xF7EB; + t['Edot'] = 0x0116; + t['Edotaccent'] = 0x0116; + t['Edotbelow'] = 0x1EB8; + t['Efcyrillic'] = 0x0424; + t['Egrave'] = 0x00C8; + t['Egravesmall'] = 0xF7E8; + t['Eharmenian'] = 0x0537; + t['Ehookabove'] = 0x1EBA; + t['Eightroman'] = 0x2167; + t['Einvertedbreve'] = 0x0206; + t['Eiotifiedcyrillic'] = 0x0464; + t['Elcyrillic'] = 0x041B; + t['Elevenroman'] = 0x216A; + t['Emacron'] = 0x0112; + t['Emacronacute'] = 0x1E16; + t['Emacrongrave'] = 0x1E14; + t['Emcyrillic'] = 0x041C; + t['Emonospace'] = 0xFF25; + t['Encyrillic'] = 0x041D; + t['Endescendercyrillic'] = 0x04A2; + t['Eng'] = 0x014A; + t['Enghecyrillic'] = 0x04A4; + t['Enhookcyrillic'] = 0x04C7; + t['Eogonek'] = 0x0118; + t['Eopen'] = 0x0190; + t['Epsilon'] = 0x0395; + t['Epsilontonos'] = 0x0388; + t['Ercyrillic'] = 0x0420; + t['Ereversed'] = 0x018E; + t['Ereversedcyrillic'] = 0x042D; + t['Escyrillic'] = 0x0421; + t['Esdescendercyrillic'] = 0x04AA; + t['Esh'] = 0x01A9; + t['Esmall'] = 0xF765; + t['Eta'] = 0x0397; + t['Etarmenian'] = 0x0538; + t['Etatonos'] = 0x0389; + t['Eth'] = 0x00D0; + t['Ethsmall'] = 0xF7F0; + t['Etilde'] = 0x1EBC; + t['Etildebelow'] = 0x1E1A; + t['Euro'] = 0x20AC; + t['Ezh'] = 0x01B7; + t['Ezhcaron'] = 0x01EE; + t['Ezhreversed'] = 0x01B8; + t['F'] = 0x0046; + t['Fcircle'] = 0x24BB; + t['Fdotaccent'] = 0x1E1E; + t['Feharmenian'] = 0x0556; + t['Feicoptic'] = 0x03E4; + t['Fhook'] = 0x0191; + t['Fitacyrillic'] = 0x0472; + t['Fiveroman'] = 0x2164; + t['Fmonospace'] = 0xFF26; + t['Fourroman'] = 0x2163; + t['Fsmall'] = 0xF766; + t['G'] = 0x0047; + t['GBsquare'] = 0x3387; + t['Gacute'] = 0x01F4; + t['Gamma'] = 0x0393; + t['Gammaafrican'] = 0x0194; + t['Gangiacoptic'] = 0x03EA; + t['Gbreve'] = 0x011E; + t['Gcaron'] = 0x01E6; + t['Gcedilla'] = 0x0122; + t['Gcircle'] = 0x24BC; + t['Gcircumflex'] = 0x011C; + t['Gcommaaccent'] = 0x0122; + t['Gdot'] = 0x0120; + t['Gdotaccent'] = 0x0120; + t['Gecyrillic'] = 0x0413; + t['Ghadarmenian'] = 0x0542; + t['Ghemiddlehookcyrillic'] = 0x0494; + t['Ghestrokecyrillic'] = 0x0492; + t['Gheupturncyrillic'] = 0x0490; + t['Ghook'] = 0x0193; + t['Gimarmenian'] = 0x0533; + t['Gjecyrillic'] = 0x0403; + t['Gmacron'] = 0x1E20; + t['Gmonospace'] = 0xFF27; + t['Grave'] = 0xF6CE; + t['Gravesmall'] = 0xF760; + t['Gsmall'] = 0xF767; + t['Gsmallhook'] = 0x029B; + t['Gstroke'] = 0x01E4; + t['H'] = 0x0048; + t['H18533'] = 0x25CF; + t['H18543'] = 0x25AA; + t['H18551'] = 0x25AB; + t['H22073'] = 0x25A1; + t['HPsquare'] = 0x33CB; + t['Haabkhasiancyrillic'] = 0x04A8; + t['Hadescendercyrillic'] = 0x04B2; + t['Hardsigncyrillic'] = 0x042A; + t['Hbar'] = 0x0126; + t['Hbrevebelow'] = 0x1E2A; + t['Hcedilla'] = 0x1E28; + t['Hcircle'] = 0x24BD; + t['Hcircumflex'] = 0x0124; + t['Hdieresis'] = 0x1E26; + t['Hdotaccent'] = 0x1E22; + t['Hdotbelow'] = 0x1E24; + t['Hmonospace'] = 0xFF28; + t['Hoarmenian'] = 0x0540; + t['Horicoptic'] = 0x03E8; + t['Hsmall'] = 0xF768; + t['Hungarumlaut'] = 0xF6CF; + t['Hungarumlautsmall'] = 0xF6F8; + t['Hzsquare'] = 0x3390; + t['I'] = 0x0049; + t['IAcyrillic'] = 0x042F; + t['IJ'] = 0x0132; + t['IUcyrillic'] = 0x042E; + t['Iacute'] = 0x00CD; + t['Iacutesmall'] = 0xF7ED; + t['Ibreve'] = 0x012C; + t['Icaron'] = 0x01CF; + t['Icircle'] = 0x24BE; + t['Icircumflex'] = 0x00CE; + t['Icircumflexsmall'] = 0xF7EE; + t['Icyrillic'] = 0x0406; + t['Idblgrave'] = 0x0208; + t['Idieresis'] = 0x00CF; + t['Idieresisacute'] = 0x1E2E; + t['Idieresiscyrillic'] = 0x04E4; + t['Idieresissmall'] = 0xF7EF; + t['Idot'] = 0x0130; + t['Idotaccent'] = 0x0130; + t['Idotbelow'] = 0x1ECA; + t['Iebrevecyrillic'] = 0x04D6; + t['Iecyrillic'] = 0x0415; + t['Ifraktur'] = 0x2111; + t['Igrave'] = 0x00CC; + t['Igravesmall'] = 0xF7EC; + t['Ihookabove'] = 0x1EC8; + t['Iicyrillic'] = 0x0418; + t['Iinvertedbreve'] = 0x020A; + t['Iishortcyrillic'] = 0x0419; + t['Imacron'] = 0x012A; + t['Imacroncyrillic'] = 0x04E2; + t['Imonospace'] = 0xFF29; + t['Iniarmenian'] = 0x053B; + t['Iocyrillic'] = 0x0401; + t['Iogonek'] = 0x012E; + t['Iota'] = 0x0399; + t['Iotaafrican'] = 0x0196; + t['Iotadieresis'] = 0x03AA; + t['Iotatonos'] = 0x038A; + t['Ismall'] = 0xF769; + t['Istroke'] = 0x0197; + t['Itilde'] = 0x0128; + t['Itildebelow'] = 0x1E2C; + t['Izhitsacyrillic'] = 0x0474; + t['Izhitsadblgravecyrillic'] = 0x0476; + t['J'] = 0x004A; + t['Jaarmenian'] = 0x0541; + t['Jcircle'] = 0x24BF; + t['Jcircumflex'] = 0x0134; + t['Jecyrillic'] = 0x0408; + t['Jheharmenian'] = 0x054B; + t['Jmonospace'] = 0xFF2A; + t['Jsmall'] = 0xF76A; + t['K'] = 0x004B; + t['KBsquare'] = 0x3385; + t['KKsquare'] = 0x33CD; + t['Kabashkircyrillic'] = 0x04A0; + t['Kacute'] = 0x1E30; + t['Kacyrillic'] = 0x041A; + t['Kadescendercyrillic'] = 0x049A; + t['Kahookcyrillic'] = 0x04C3; + t['Kappa'] = 0x039A; + t['Kastrokecyrillic'] = 0x049E; + t['Kaverticalstrokecyrillic'] = 0x049C; + t['Kcaron'] = 0x01E8; + t['Kcedilla'] = 0x0136; + t['Kcircle'] = 0x24C0; + t['Kcommaaccent'] = 0x0136; + t['Kdotbelow'] = 0x1E32; + t['Keharmenian'] = 0x0554; + t['Kenarmenian'] = 0x053F; + t['Khacyrillic'] = 0x0425; + t['Kheicoptic'] = 0x03E6; + t['Khook'] = 0x0198; + t['Kjecyrillic'] = 0x040C; + t['Klinebelow'] = 0x1E34; + t['Kmonospace'] = 0xFF2B; + t['Koppacyrillic'] = 0x0480; + t['Koppagreek'] = 0x03DE; + t['Ksicyrillic'] = 0x046E; + t['Ksmall'] = 0xF76B; + t['L'] = 0x004C; + t['LJ'] = 0x01C7; + t['LL'] = 0xF6BF; + t['Lacute'] = 0x0139; + t['Lambda'] = 0x039B; + t['Lcaron'] = 0x013D; + t['Lcedilla'] = 0x013B; + t['Lcircle'] = 0x24C1; + t['Lcircumflexbelow'] = 0x1E3C; + t['Lcommaaccent'] = 0x013B; + t['Ldot'] = 0x013F; + t['Ldotaccent'] = 0x013F; + t['Ldotbelow'] = 0x1E36; + t['Ldotbelowmacron'] = 0x1E38; + t['Liwnarmenian'] = 0x053C; + t['Lj'] = 0x01C8; + t['Ljecyrillic'] = 0x0409; + t['Llinebelow'] = 0x1E3A; + t['Lmonospace'] = 0xFF2C; + t['Lslash'] = 0x0141; + t['Lslashsmall'] = 0xF6F9; + t['Lsmall'] = 0xF76C; + t['M'] = 0x004D; + t['MBsquare'] = 0x3386; + t['Macron'] = 0xF6D0; + t['Macronsmall'] = 0xF7AF; + t['Macute'] = 0x1E3E; + t['Mcircle'] = 0x24C2; + t['Mdotaccent'] = 0x1E40; + t['Mdotbelow'] = 0x1E42; + t['Menarmenian'] = 0x0544; + t['Mmonospace'] = 0xFF2D; + t['Msmall'] = 0xF76D; + t['Mturned'] = 0x019C; + t['Mu'] = 0x039C; + t['N'] = 0x004E; + t['NJ'] = 0x01CA; + t['Nacute'] = 0x0143; + t['Ncaron'] = 0x0147; + t['Ncedilla'] = 0x0145; + t['Ncircle'] = 0x24C3; + t['Ncircumflexbelow'] = 0x1E4A; + t['Ncommaaccent'] = 0x0145; + t['Ndotaccent'] = 0x1E44; + t['Ndotbelow'] = 0x1E46; + t['Nhookleft'] = 0x019D; + t['Nineroman'] = 0x2168; + t['Nj'] = 0x01CB; + t['Njecyrillic'] = 0x040A; + t['Nlinebelow'] = 0x1E48; + t['Nmonospace'] = 0xFF2E; + t['Nowarmenian'] = 0x0546; + t['Nsmall'] = 0xF76E; + t['Ntilde'] = 0x00D1; + t['Ntildesmall'] = 0xF7F1; + t['Nu'] = 0x039D; + t['O'] = 0x004F; + t['OE'] = 0x0152; + t['OEsmall'] = 0xF6FA; + t['Oacute'] = 0x00D3; + t['Oacutesmall'] = 0xF7F3; + t['Obarredcyrillic'] = 0x04E8; + t['Obarreddieresiscyrillic'] = 0x04EA; + t['Obreve'] = 0x014E; + t['Ocaron'] = 0x01D1; + t['Ocenteredtilde'] = 0x019F; + t['Ocircle'] = 0x24C4; + t['Ocircumflex'] = 0x00D4; + t['Ocircumflexacute'] = 0x1ED0; + t['Ocircumflexdotbelow'] = 0x1ED8; + t['Ocircumflexgrave'] = 0x1ED2; + t['Ocircumflexhookabove'] = 0x1ED4; + t['Ocircumflexsmall'] = 0xF7F4; + t['Ocircumflextilde'] = 0x1ED6; + t['Ocyrillic'] = 0x041E; + t['Odblacute'] = 0x0150; + t['Odblgrave'] = 0x020C; + t['Odieresis'] = 0x00D6; + t['Odieresiscyrillic'] = 0x04E6; + t['Odieresissmall'] = 0xF7F6; + t['Odotbelow'] = 0x1ECC; + t['Ogoneksmall'] = 0xF6FB; + t['Ograve'] = 0x00D2; + t['Ogravesmall'] = 0xF7F2; + t['Oharmenian'] = 0x0555; + t['Ohm'] = 0x2126; + t['Ohookabove'] = 0x1ECE; + t['Ohorn'] = 0x01A0; + t['Ohornacute'] = 0x1EDA; + t['Ohorndotbelow'] = 0x1EE2; + t['Ohorngrave'] = 0x1EDC; + t['Ohornhookabove'] = 0x1EDE; + t['Ohorntilde'] = 0x1EE0; + t['Ohungarumlaut'] = 0x0150; + t['Oi'] = 0x01A2; + t['Oinvertedbreve'] = 0x020E; + t['Omacron'] = 0x014C; + t['Omacronacute'] = 0x1E52; + t['Omacrongrave'] = 0x1E50; + t['Omega'] = 0x2126; + t['Omegacyrillic'] = 0x0460; + t['Omegagreek'] = 0x03A9; + t['Omegaroundcyrillic'] = 0x047A; + t['Omegatitlocyrillic'] = 0x047C; + t['Omegatonos'] = 0x038F; + t['Omicron'] = 0x039F; + t['Omicrontonos'] = 0x038C; + t['Omonospace'] = 0xFF2F; + t['Oneroman'] = 0x2160; + t['Oogonek'] = 0x01EA; + t['Oogonekmacron'] = 0x01EC; + t['Oopen'] = 0x0186; + t['Oslash'] = 0x00D8; + t['Oslashacute'] = 0x01FE; + t['Oslashsmall'] = 0xF7F8; + t['Osmall'] = 0xF76F; + t['Ostrokeacute'] = 0x01FE; + t['Otcyrillic'] = 0x047E; + t['Otilde'] = 0x00D5; + t['Otildeacute'] = 0x1E4C; + t['Otildedieresis'] = 0x1E4E; + t['Otildesmall'] = 0xF7F5; + t['P'] = 0x0050; + t['Pacute'] = 0x1E54; + t['Pcircle'] = 0x24C5; + t['Pdotaccent'] = 0x1E56; + t['Pecyrillic'] = 0x041F; + t['Peharmenian'] = 0x054A; + t['Pemiddlehookcyrillic'] = 0x04A6; + t['Phi'] = 0x03A6; + t['Phook'] = 0x01A4; + t['Pi'] = 0x03A0; + t['Piwrarmenian'] = 0x0553; + t['Pmonospace'] = 0xFF30; + t['Psi'] = 0x03A8; + t['Psicyrillic'] = 0x0470; + t['Psmall'] = 0xF770; + t['Q'] = 0x0051; + t['Qcircle'] = 0x24C6; + t['Qmonospace'] = 0xFF31; + t['Qsmall'] = 0xF771; + t['R'] = 0x0052; + t['Raarmenian'] = 0x054C; + t['Racute'] = 0x0154; + t['Rcaron'] = 0x0158; + t['Rcedilla'] = 0x0156; + t['Rcircle'] = 0x24C7; + t['Rcommaaccent'] = 0x0156; + t['Rdblgrave'] = 0x0210; + t['Rdotaccent'] = 0x1E58; + t['Rdotbelow'] = 0x1E5A; + t['Rdotbelowmacron'] = 0x1E5C; + t['Reharmenian'] = 0x0550; + t['Rfraktur'] = 0x211C; + t['Rho'] = 0x03A1; + t['Ringsmall'] = 0xF6FC; + t['Rinvertedbreve'] = 0x0212; + t['Rlinebelow'] = 0x1E5E; + t['Rmonospace'] = 0xFF32; + t['Rsmall'] = 0xF772; + t['Rsmallinverted'] = 0x0281; + t['Rsmallinvertedsuperior'] = 0x02B6; + t['S'] = 0x0053; + t['SF010000'] = 0x250C; + t['SF020000'] = 0x2514; + t['SF030000'] = 0x2510; + t['SF040000'] = 0x2518; + t['SF050000'] = 0x253C; + t['SF060000'] = 0x252C; + t['SF070000'] = 0x2534; + t['SF080000'] = 0x251C; + t['SF090000'] = 0x2524; + t['SF100000'] = 0x2500; + t['SF110000'] = 0x2502; + t['SF190000'] = 0x2561; + t['SF200000'] = 0x2562; + t['SF210000'] = 0x2556; + t['SF220000'] = 0x2555; + t['SF230000'] = 0x2563; + t['SF240000'] = 0x2551; + t['SF250000'] = 0x2557; + t['SF260000'] = 0x255D; + t['SF270000'] = 0x255C; + t['SF280000'] = 0x255B; + t['SF360000'] = 0x255E; + t['SF370000'] = 0x255F; + t['SF380000'] = 0x255A; + t['SF390000'] = 0x2554; + t['SF400000'] = 0x2569; + t['SF410000'] = 0x2566; + t['SF420000'] = 0x2560; + t['SF430000'] = 0x2550; + t['SF440000'] = 0x256C; + t['SF450000'] = 0x2567; + t['SF460000'] = 0x2568; + t['SF470000'] = 0x2564; + t['SF480000'] = 0x2565; + t['SF490000'] = 0x2559; + t['SF500000'] = 0x2558; + t['SF510000'] = 0x2552; + t['SF520000'] = 0x2553; + t['SF530000'] = 0x256B; + t['SF540000'] = 0x256A; + t['Sacute'] = 0x015A; + t['Sacutedotaccent'] = 0x1E64; + t['Sampigreek'] = 0x03E0; + t['Scaron'] = 0x0160; + t['Scarondotaccent'] = 0x1E66; + t['Scaronsmall'] = 0xF6FD; + t['Scedilla'] = 0x015E; + t['Schwa'] = 0x018F; + t['Schwacyrillic'] = 0x04D8; + t['Schwadieresiscyrillic'] = 0x04DA; + t['Scircle'] = 0x24C8; + t['Scircumflex'] = 0x015C; + t['Scommaaccent'] = 0x0218; + t['Sdotaccent'] = 0x1E60; + t['Sdotbelow'] = 0x1E62; + t['Sdotbelowdotaccent'] = 0x1E68; + t['Seharmenian'] = 0x054D; + t['Sevenroman'] = 0x2166; + t['Shaarmenian'] = 0x0547; + t['Shacyrillic'] = 0x0428; + t['Shchacyrillic'] = 0x0429; + t['Sheicoptic'] = 0x03E2; + t['Shhacyrillic'] = 0x04BA; + t['Shimacoptic'] = 0x03EC; + t['Sigma'] = 0x03A3; + t['Sixroman'] = 0x2165; + t['Smonospace'] = 0xFF33; + t['Softsigncyrillic'] = 0x042C; + t['Ssmall'] = 0xF773; + t['Stigmagreek'] = 0x03DA; + t['T'] = 0x0054; + t['Tau'] = 0x03A4; + t['Tbar'] = 0x0166; + t['Tcaron'] = 0x0164; + t['Tcedilla'] = 0x0162; + t['Tcircle'] = 0x24C9; + t['Tcircumflexbelow'] = 0x1E70; + t['Tcommaaccent'] = 0x0162; + t['Tdotaccent'] = 0x1E6A; + t['Tdotbelow'] = 0x1E6C; + t['Tecyrillic'] = 0x0422; + t['Tedescendercyrillic'] = 0x04AC; + t['Tenroman'] = 0x2169; + t['Tetsecyrillic'] = 0x04B4; + t['Theta'] = 0x0398; + t['Thook'] = 0x01AC; + t['Thorn'] = 0x00DE; + t['Thornsmall'] = 0xF7FE; + t['Threeroman'] = 0x2162; + t['Tildesmall'] = 0xF6FE; + t['Tiwnarmenian'] = 0x054F; + t['Tlinebelow'] = 0x1E6E; + t['Tmonospace'] = 0xFF34; + t['Toarmenian'] = 0x0539; + t['Tonefive'] = 0x01BC; + t['Tonesix'] = 0x0184; + t['Tonetwo'] = 0x01A7; + t['Tretroflexhook'] = 0x01AE; + t['Tsecyrillic'] = 0x0426; + t['Tshecyrillic'] = 0x040B; + t['Tsmall'] = 0xF774; + t['Twelveroman'] = 0x216B; + t['Tworoman'] = 0x2161; + t['U'] = 0x0055; + t['Uacute'] = 0x00DA; + t['Uacutesmall'] = 0xF7FA; + t['Ubreve'] = 0x016C; + t['Ucaron'] = 0x01D3; + t['Ucircle'] = 0x24CA; + t['Ucircumflex'] = 0x00DB; + t['Ucircumflexbelow'] = 0x1E76; + t['Ucircumflexsmall'] = 0xF7FB; + t['Ucyrillic'] = 0x0423; + t['Udblacute'] = 0x0170; + t['Udblgrave'] = 0x0214; + t['Udieresis'] = 0x00DC; + t['Udieresisacute'] = 0x01D7; + t['Udieresisbelow'] = 0x1E72; + t['Udieresiscaron'] = 0x01D9; + t['Udieresiscyrillic'] = 0x04F0; + t['Udieresisgrave'] = 0x01DB; + t['Udieresismacron'] = 0x01D5; + t['Udieresissmall'] = 0xF7FC; + t['Udotbelow'] = 0x1EE4; + t['Ugrave'] = 0x00D9; + t['Ugravesmall'] = 0xF7F9; + t['Uhookabove'] = 0x1EE6; + t['Uhorn'] = 0x01AF; + t['Uhornacute'] = 0x1EE8; + t['Uhorndotbelow'] = 0x1EF0; + t['Uhorngrave'] = 0x1EEA; + t['Uhornhookabove'] = 0x1EEC; + t['Uhorntilde'] = 0x1EEE; + t['Uhungarumlaut'] = 0x0170; + t['Uhungarumlautcyrillic'] = 0x04F2; + t['Uinvertedbreve'] = 0x0216; + t['Ukcyrillic'] = 0x0478; + t['Umacron'] = 0x016A; + t['Umacroncyrillic'] = 0x04EE; + t['Umacrondieresis'] = 0x1E7A; + t['Umonospace'] = 0xFF35; + t['Uogonek'] = 0x0172; + t['Upsilon'] = 0x03A5; + t['Upsilon1'] = 0x03D2; + t['Upsilonacutehooksymbolgreek'] = 0x03D3; + t['Upsilonafrican'] = 0x01B1; + t['Upsilondieresis'] = 0x03AB; + t['Upsilondieresishooksymbolgreek'] = 0x03D4; + t['Upsilonhooksymbol'] = 0x03D2; + t['Upsilontonos'] = 0x038E; + t['Uring'] = 0x016E; + t['Ushortcyrillic'] = 0x040E; + t['Usmall'] = 0xF775; + t['Ustraightcyrillic'] = 0x04AE; + t['Ustraightstrokecyrillic'] = 0x04B0; + t['Utilde'] = 0x0168; + t['Utildeacute'] = 0x1E78; + t['Utildebelow'] = 0x1E74; + t['V'] = 0x0056; + t['Vcircle'] = 0x24CB; + t['Vdotbelow'] = 0x1E7E; + t['Vecyrillic'] = 0x0412; + t['Vewarmenian'] = 0x054E; + t['Vhook'] = 0x01B2; + t['Vmonospace'] = 0xFF36; + t['Voarmenian'] = 0x0548; + t['Vsmall'] = 0xF776; + t['Vtilde'] = 0x1E7C; + t['W'] = 0x0057; + t['Wacute'] = 0x1E82; + t['Wcircle'] = 0x24CC; + t['Wcircumflex'] = 0x0174; + t['Wdieresis'] = 0x1E84; + t['Wdotaccent'] = 0x1E86; + t['Wdotbelow'] = 0x1E88; + t['Wgrave'] = 0x1E80; + t['Wmonospace'] = 0xFF37; + t['Wsmall'] = 0xF777; + t['X'] = 0x0058; + t['Xcircle'] = 0x24CD; + t['Xdieresis'] = 0x1E8C; + t['Xdotaccent'] = 0x1E8A; + t['Xeharmenian'] = 0x053D; + t['Xi'] = 0x039E; + t['Xmonospace'] = 0xFF38; + t['Xsmall'] = 0xF778; + t['Y'] = 0x0059; + t['Yacute'] = 0x00DD; + t['Yacutesmall'] = 0xF7FD; + t['Yatcyrillic'] = 0x0462; + t['Ycircle'] = 0x24CE; + t['Ycircumflex'] = 0x0176; + t['Ydieresis'] = 0x0178; + t['Ydieresissmall'] = 0xF7FF; + t['Ydotaccent'] = 0x1E8E; + t['Ydotbelow'] = 0x1EF4; + t['Yericyrillic'] = 0x042B; + t['Yerudieresiscyrillic'] = 0x04F8; + t['Ygrave'] = 0x1EF2; + t['Yhook'] = 0x01B3; + t['Yhookabove'] = 0x1EF6; + t['Yiarmenian'] = 0x0545; + t['Yicyrillic'] = 0x0407; + t['Yiwnarmenian'] = 0x0552; + t['Ymonospace'] = 0xFF39; + t['Ysmall'] = 0xF779; + t['Ytilde'] = 0x1EF8; + t['Yusbigcyrillic'] = 0x046A; + t['Yusbigiotifiedcyrillic'] = 0x046C; + t['Yuslittlecyrillic'] = 0x0466; + t['Yuslittleiotifiedcyrillic'] = 0x0468; + t['Z'] = 0x005A; + t['Zaarmenian'] = 0x0536; + t['Zacute'] = 0x0179; + t['Zcaron'] = 0x017D; + t['Zcaronsmall'] = 0xF6FF; + t['Zcircle'] = 0x24CF; + t['Zcircumflex'] = 0x1E90; + t['Zdot'] = 0x017B; + t['Zdotaccent'] = 0x017B; + t['Zdotbelow'] = 0x1E92; + t['Zecyrillic'] = 0x0417; + t['Zedescendercyrillic'] = 0x0498; + t['Zedieresiscyrillic'] = 0x04DE; + t['Zeta'] = 0x0396; + t['Zhearmenian'] = 0x053A; + t['Zhebrevecyrillic'] = 0x04C1; + t['Zhecyrillic'] = 0x0416; + t['Zhedescendercyrillic'] = 0x0496; + t['Zhedieresiscyrillic'] = 0x04DC; + t['Zlinebelow'] = 0x1E94; + t['Zmonospace'] = 0xFF3A; + t['Zsmall'] = 0xF77A; + t['Zstroke'] = 0x01B5; + t['a'] = 0x0061; + t['aabengali'] = 0x0986; + t['aacute'] = 0x00E1; + t['aadeva'] = 0x0906; + t['aagujarati'] = 0x0A86; + t['aagurmukhi'] = 0x0A06; + t['aamatragurmukhi'] = 0x0A3E; + t['aarusquare'] = 0x3303; + t['aavowelsignbengali'] = 0x09BE; + t['aavowelsigndeva'] = 0x093E; + t['aavowelsigngujarati'] = 0x0ABE; + t['abbreviationmarkarmenian'] = 0x055F; + t['abbreviationsigndeva'] = 0x0970; + t['abengali'] = 0x0985; + t['abopomofo'] = 0x311A; + t['abreve'] = 0x0103; + t['abreveacute'] = 0x1EAF; + t['abrevecyrillic'] = 0x04D1; + t['abrevedotbelow'] = 0x1EB7; + t['abrevegrave'] = 0x1EB1; + t['abrevehookabove'] = 0x1EB3; + t['abrevetilde'] = 0x1EB5; + t['acaron'] = 0x01CE; + t['acircle'] = 0x24D0; + t['acircumflex'] = 0x00E2; + t['acircumflexacute'] = 0x1EA5; + t['acircumflexdotbelow'] = 0x1EAD; + t['acircumflexgrave'] = 0x1EA7; + t['acircumflexhookabove'] = 0x1EA9; + t['acircumflextilde'] = 0x1EAB; + t['acute'] = 0x00B4; + t['acutebelowcmb'] = 0x0317; + t['acutecmb'] = 0x0301; + t['acutecomb'] = 0x0301; + t['acutedeva'] = 0x0954; + t['acutelowmod'] = 0x02CF; + t['acutetonecmb'] = 0x0341; + t['acyrillic'] = 0x0430; + t['adblgrave'] = 0x0201; + t['addakgurmukhi'] = 0x0A71; + t['adeva'] = 0x0905; + t['adieresis'] = 0x00E4; + t['adieresiscyrillic'] = 0x04D3; + t['adieresismacron'] = 0x01DF; + t['adotbelow'] = 0x1EA1; + t['adotmacron'] = 0x01E1; + t['ae'] = 0x00E6; + t['aeacute'] = 0x01FD; + t['aekorean'] = 0x3150; + t['aemacron'] = 0x01E3; + t['afii00208'] = 0x2015; + t['afii08941'] = 0x20A4; + t['afii10017'] = 0x0410; + t['afii10018'] = 0x0411; + t['afii10019'] = 0x0412; + t['afii10020'] = 0x0413; + t['afii10021'] = 0x0414; + t['afii10022'] = 0x0415; + t['afii10023'] = 0x0401; + t['afii10024'] = 0x0416; + t['afii10025'] = 0x0417; + t['afii10026'] = 0x0418; + t['afii10027'] = 0x0419; + t['afii10028'] = 0x041A; + t['afii10029'] = 0x041B; + t['afii10030'] = 0x041C; + t['afii10031'] = 0x041D; + t['afii10032'] = 0x041E; + t['afii10033'] = 0x041F; + t['afii10034'] = 0x0420; + t['afii10035'] = 0x0421; + t['afii10036'] = 0x0422; + t['afii10037'] = 0x0423; + t['afii10038'] = 0x0424; + t['afii10039'] = 0x0425; + t['afii10040'] = 0x0426; + t['afii10041'] = 0x0427; + t['afii10042'] = 0x0428; + t['afii10043'] = 0x0429; + t['afii10044'] = 0x042A; + t['afii10045'] = 0x042B; + t['afii10046'] = 0x042C; + t['afii10047'] = 0x042D; + t['afii10048'] = 0x042E; + t['afii10049'] = 0x042F; + t['afii10050'] = 0x0490; + t['afii10051'] = 0x0402; + t['afii10052'] = 0x0403; + t['afii10053'] = 0x0404; + t['afii10054'] = 0x0405; + t['afii10055'] = 0x0406; + t['afii10056'] = 0x0407; + t['afii10057'] = 0x0408; + t['afii10058'] = 0x0409; + t['afii10059'] = 0x040A; + t['afii10060'] = 0x040B; + t['afii10061'] = 0x040C; + t['afii10062'] = 0x040E; + t['afii10063'] = 0xF6C4; + t['afii10064'] = 0xF6C5; + t['afii10065'] = 0x0430; + t['afii10066'] = 0x0431; + t['afii10067'] = 0x0432; + t['afii10068'] = 0x0433; + t['afii10069'] = 0x0434; + t['afii10070'] = 0x0435; + t['afii10071'] = 0x0451; + t['afii10072'] = 0x0436; + t['afii10073'] = 0x0437; + t['afii10074'] = 0x0438; + t['afii10075'] = 0x0439; + t['afii10076'] = 0x043A; + t['afii10077'] = 0x043B; + t['afii10078'] = 0x043C; + t['afii10079'] = 0x043D; + t['afii10080'] = 0x043E; + t['afii10081'] = 0x043F; + t['afii10082'] = 0x0440; + t['afii10083'] = 0x0441; + t['afii10084'] = 0x0442; + t['afii10085'] = 0x0443; + t['afii10086'] = 0x0444; + t['afii10087'] = 0x0445; + t['afii10088'] = 0x0446; + t['afii10089'] = 0x0447; + t['afii10090'] = 0x0448; + t['afii10091'] = 0x0449; + t['afii10092'] = 0x044A; + t['afii10093'] = 0x044B; + t['afii10094'] = 0x044C; + t['afii10095'] = 0x044D; + t['afii10096'] = 0x044E; + t['afii10097'] = 0x044F; + t['afii10098'] = 0x0491; + t['afii10099'] = 0x0452; + t['afii10100'] = 0x0453; + t['afii10101'] = 0x0454; + t['afii10102'] = 0x0455; + t['afii10103'] = 0x0456; + t['afii10104'] = 0x0457; + t['afii10105'] = 0x0458; + t['afii10106'] = 0x0459; + t['afii10107'] = 0x045A; + t['afii10108'] = 0x045B; + t['afii10109'] = 0x045C; + t['afii10110'] = 0x045E; + t['afii10145'] = 0x040F; + t['afii10146'] = 0x0462; + t['afii10147'] = 0x0472; + t['afii10148'] = 0x0474; + t['afii10192'] = 0xF6C6; + t['afii10193'] = 0x045F; + t['afii10194'] = 0x0463; + t['afii10195'] = 0x0473; + t['afii10196'] = 0x0475; + t['afii10831'] = 0xF6C7; + t['afii10832'] = 0xF6C8; + t['afii10846'] = 0x04D9; + t['afii299'] = 0x200E; + t['afii300'] = 0x200F; + t['afii301'] = 0x200D; + t['afii57381'] = 0x066A; + t['afii57388'] = 0x060C; + t['afii57392'] = 0x0660; + t['afii57393'] = 0x0661; + t['afii57394'] = 0x0662; + t['afii57395'] = 0x0663; + t['afii57396'] = 0x0664; + t['afii57397'] = 0x0665; + t['afii57398'] = 0x0666; + t['afii57399'] = 0x0667; + t['afii57400'] = 0x0668; + t['afii57401'] = 0x0669; + t['afii57403'] = 0x061B; + t['afii57407'] = 0x061F; + t['afii57409'] = 0x0621; + t['afii57410'] = 0x0622; + t['afii57411'] = 0x0623; + t['afii57412'] = 0x0624; + t['afii57413'] = 0x0625; + t['afii57414'] = 0x0626; + t['afii57415'] = 0x0627; + t['afii57416'] = 0x0628; + t['afii57417'] = 0x0629; + t['afii57418'] = 0x062A; + t['afii57419'] = 0x062B; + t['afii57420'] = 0x062C; + t['afii57421'] = 0x062D; + t['afii57422'] = 0x062E; + t['afii57423'] = 0x062F; + t['afii57424'] = 0x0630; + t['afii57425'] = 0x0631; + t['afii57426'] = 0x0632; + t['afii57427'] = 0x0633; + t['afii57428'] = 0x0634; + t['afii57429'] = 0x0635; + t['afii57430'] = 0x0636; + t['afii57431'] = 0x0637; + t['afii57432'] = 0x0638; + t['afii57433'] = 0x0639; + t['afii57434'] = 0x063A; + t['afii57440'] = 0x0640; + t['afii57441'] = 0x0641; + t['afii57442'] = 0x0642; + t['afii57443'] = 0x0643; + t['afii57444'] = 0x0644; + t['afii57445'] = 0x0645; + t['afii57446'] = 0x0646; + t['afii57448'] = 0x0648; + t['afii57449'] = 0x0649; + t['afii57450'] = 0x064A; + t['afii57451'] = 0x064B; + t['afii57452'] = 0x064C; + t['afii57453'] = 0x064D; + t['afii57454'] = 0x064E; + t['afii57455'] = 0x064F; + t['afii57456'] = 0x0650; + t['afii57457'] = 0x0651; + t['afii57458'] = 0x0652; + t['afii57470'] = 0x0647; + t['afii57505'] = 0x06A4; + t['afii57506'] = 0x067E; + t['afii57507'] = 0x0686; + t['afii57508'] = 0x0698; + t['afii57509'] = 0x06AF; + t['afii57511'] = 0x0679; + t['afii57512'] = 0x0688; + t['afii57513'] = 0x0691; + t['afii57514'] = 0x06BA; + t['afii57519'] = 0x06D2; + t['afii57534'] = 0x06D5; + t['afii57636'] = 0x20AA; + t['afii57645'] = 0x05BE; + t['afii57658'] = 0x05C3; + t['afii57664'] = 0x05D0; + t['afii57665'] = 0x05D1; + t['afii57666'] = 0x05D2; + t['afii57667'] = 0x05D3; + t['afii57668'] = 0x05D4; + t['afii57669'] = 0x05D5; + t['afii57670'] = 0x05D6; + t['afii57671'] = 0x05D7; + t['afii57672'] = 0x05D8; + t['afii57673'] = 0x05D9; + t['afii57674'] = 0x05DA; + t['afii57675'] = 0x05DB; + t['afii57676'] = 0x05DC; + t['afii57677'] = 0x05DD; + t['afii57678'] = 0x05DE; + t['afii57679'] = 0x05DF; + t['afii57680'] = 0x05E0; + t['afii57681'] = 0x05E1; + t['afii57682'] = 0x05E2; + t['afii57683'] = 0x05E3; + t['afii57684'] = 0x05E4; + t['afii57685'] = 0x05E5; + t['afii57686'] = 0x05E6; + t['afii57687'] = 0x05E7; + t['afii57688'] = 0x05E8; + t['afii57689'] = 0x05E9; + t['afii57690'] = 0x05EA; + t['afii57694'] = 0xFB2A; + t['afii57695'] = 0xFB2B; + t['afii57700'] = 0xFB4B; + t['afii57705'] = 0xFB1F; + t['afii57716'] = 0x05F0; + t['afii57717'] = 0x05F1; + t['afii57718'] = 0x05F2; + t['afii57723'] = 0xFB35; + t['afii57793'] = 0x05B4; + t['afii57794'] = 0x05B5; + t['afii57795'] = 0x05B6; + t['afii57796'] = 0x05BB; + t['afii57797'] = 0x05B8; + t['afii57798'] = 0x05B7; + t['afii57799'] = 0x05B0; + t['afii57800'] = 0x05B2; + t['afii57801'] = 0x05B1; + t['afii57802'] = 0x05B3; + t['afii57803'] = 0x05C2; + t['afii57804'] = 0x05C1; + t['afii57806'] = 0x05B9; + t['afii57807'] = 0x05BC; + t['afii57839'] = 0x05BD; + t['afii57841'] = 0x05BF; + t['afii57842'] = 0x05C0; + t['afii57929'] = 0x02BC; + t['afii61248'] = 0x2105; + t['afii61289'] = 0x2113; + t['afii61352'] = 0x2116; + t['afii61573'] = 0x202C; + t['afii61574'] = 0x202D; + t['afii61575'] = 0x202E; + t['afii61664'] = 0x200C; + t['afii63167'] = 0x066D; + t['afii64937'] = 0x02BD; + t['agrave'] = 0x00E0; + t['agujarati'] = 0x0A85; + t['agurmukhi'] = 0x0A05; + t['ahiragana'] = 0x3042; + t['ahookabove'] = 0x1EA3; + t['aibengali'] = 0x0990; + t['aibopomofo'] = 0x311E; + t['aideva'] = 0x0910; + t['aiecyrillic'] = 0x04D5; + t['aigujarati'] = 0x0A90; + t['aigurmukhi'] = 0x0A10; + t['aimatragurmukhi'] = 0x0A48; + t['ainarabic'] = 0x0639; + t['ainfinalarabic'] = 0xFECA; + t['aininitialarabic'] = 0xFECB; + t['ainmedialarabic'] = 0xFECC; + t['ainvertedbreve'] = 0x0203; + t['aivowelsignbengali'] = 0x09C8; + t['aivowelsigndeva'] = 0x0948; + t['aivowelsigngujarati'] = 0x0AC8; + t['akatakana'] = 0x30A2; + t['akatakanahalfwidth'] = 0xFF71; + t['akorean'] = 0x314F; + t['alef'] = 0x05D0; + t['alefarabic'] = 0x0627; + t['alefdageshhebrew'] = 0xFB30; + t['aleffinalarabic'] = 0xFE8E; + t['alefhamzaabovearabic'] = 0x0623; + t['alefhamzaabovefinalarabic'] = 0xFE84; + t['alefhamzabelowarabic'] = 0x0625; + t['alefhamzabelowfinalarabic'] = 0xFE88; + t['alefhebrew'] = 0x05D0; + t['aleflamedhebrew'] = 0xFB4F; + t['alefmaddaabovearabic'] = 0x0622; + t['alefmaddaabovefinalarabic'] = 0xFE82; + t['alefmaksuraarabic'] = 0x0649; + t['alefmaksurafinalarabic'] = 0xFEF0; + t['alefmaksurainitialarabic'] = 0xFEF3; + t['alefmaksuramedialarabic'] = 0xFEF4; + t['alefpatahhebrew'] = 0xFB2E; + t['alefqamatshebrew'] = 0xFB2F; + t['aleph'] = 0x2135; + t['allequal'] = 0x224C; + t['alpha'] = 0x03B1; + t['alphatonos'] = 0x03AC; + t['amacron'] = 0x0101; + t['amonospace'] = 0xFF41; + t['ampersand'] = 0x0026; + t['ampersandmonospace'] = 0xFF06; + t['ampersandsmall'] = 0xF726; + t['amsquare'] = 0x33C2; + t['anbopomofo'] = 0x3122; + t['angbopomofo'] = 0x3124; + t['angbracketleft'] = 0x3008; + t['angbracketright'] = 0x3009; + t['angkhankhuthai'] = 0x0E5A; + t['angle'] = 0x2220; + t['anglebracketleft'] = 0x3008; + t['anglebracketleftvertical'] = 0xFE3F; + t['anglebracketright'] = 0x3009; + t['anglebracketrightvertical'] = 0xFE40; + t['angleleft'] = 0x2329; + t['angleright'] = 0x232A; + t['angstrom'] = 0x212B; + t['anoteleia'] = 0x0387; + t['anudattadeva'] = 0x0952; + t['anusvarabengali'] = 0x0982; + t['anusvaradeva'] = 0x0902; + t['anusvaragujarati'] = 0x0A82; + t['aogonek'] = 0x0105; + t['apaatosquare'] = 0x3300; + t['aparen'] = 0x249C; + t['apostrophearmenian'] = 0x055A; + t['apostrophemod'] = 0x02BC; + t['apple'] = 0xF8FF; + t['approaches'] = 0x2250; + t['approxequal'] = 0x2248; + t['approxequalorimage'] = 0x2252; + t['approximatelyequal'] = 0x2245; + t['araeaekorean'] = 0x318E; + t['araeakorean'] = 0x318D; + t['arc'] = 0x2312; + t['arighthalfring'] = 0x1E9A; + t['aring'] = 0x00E5; + t['aringacute'] = 0x01FB; + t['aringbelow'] = 0x1E01; + t['arrowboth'] = 0x2194; + t['arrowdashdown'] = 0x21E3; + t['arrowdashleft'] = 0x21E0; + t['arrowdashright'] = 0x21E2; + t['arrowdashup'] = 0x21E1; + t['arrowdblboth'] = 0x21D4; + t['arrowdbldown'] = 0x21D3; + t['arrowdblleft'] = 0x21D0; + t['arrowdblright'] = 0x21D2; + t['arrowdblup'] = 0x21D1; + t['arrowdown'] = 0x2193; + t['arrowdownleft'] = 0x2199; + t['arrowdownright'] = 0x2198; + t['arrowdownwhite'] = 0x21E9; + t['arrowheaddownmod'] = 0x02C5; + t['arrowheadleftmod'] = 0x02C2; + t['arrowheadrightmod'] = 0x02C3; + t['arrowheadupmod'] = 0x02C4; + t['arrowhorizex'] = 0xF8E7; + t['arrowleft'] = 0x2190; + t['arrowleftdbl'] = 0x21D0; + t['arrowleftdblstroke'] = 0x21CD; + t['arrowleftoverright'] = 0x21C6; + t['arrowleftwhite'] = 0x21E6; + t['arrowright'] = 0x2192; + t['arrowrightdblstroke'] = 0x21CF; + t['arrowrightheavy'] = 0x279E; + t['arrowrightoverleft'] = 0x21C4; + t['arrowrightwhite'] = 0x21E8; + t['arrowtableft'] = 0x21E4; + t['arrowtabright'] = 0x21E5; + t['arrowup'] = 0x2191; + t['arrowupdn'] = 0x2195; + t['arrowupdnbse'] = 0x21A8; + t['arrowupdownbase'] = 0x21A8; + t['arrowupleft'] = 0x2196; + t['arrowupleftofdown'] = 0x21C5; + t['arrowupright'] = 0x2197; + t['arrowupwhite'] = 0x21E7; + t['arrowvertex'] = 0xF8E6; + t['asciicircum'] = 0x005E; + t['asciicircummonospace'] = 0xFF3E; + t['asciitilde'] = 0x007E; + t['asciitildemonospace'] = 0xFF5E; + t['ascript'] = 0x0251; + t['ascriptturned'] = 0x0252; + t['asmallhiragana'] = 0x3041; + t['asmallkatakana'] = 0x30A1; + t['asmallkatakanahalfwidth'] = 0xFF67; + t['asterisk'] = 0x002A; + t['asteriskaltonearabic'] = 0x066D; + t['asteriskarabic'] = 0x066D; + t['asteriskmath'] = 0x2217; + t['asteriskmonospace'] = 0xFF0A; + t['asterisksmall'] = 0xFE61; + t['asterism'] = 0x2042; + t['asuperior'] = 0xF6E9; + t['asymptoticallyequal'] = 0x2243; + t['at'] = 0x0040; + t['atilde'] = 0x00E3; + t['atmonospace'] = 0xFF20; + t['atsmall'] = 0xFE6B; + t['aturned'] = 0x0250; + t['aubengali'] = 0x0994; + t['aubopomofo'] = 0x3120; + t['audeva'] = 0x0914; + t['augujarati'] = 0x0A94; + t['augurmukhi'] = 0x0A14; + t['aulengthmarkbengali'] = 0x09D7; + t['aumatragurmukhi'] = 0x0A4C; + t['auvowelsignbengali'] = 0x09CC; + t['auvowelsigndeva'] = 0x094C; + t['auvowelsigngujarati'] = 0x0ACC; + t['avagrahadeva'] = 0x093D; + t['aybarmenian'] = 0x0561; + t['ayin'] = 0x05E2; + t['ayinaltonehebrew'] = 0xFB20; + t['ayinhebrew'] = 0x05E2; + t['b'] = 0x0062; + t['babengali'] = 0x09AC; + t['backslash'] = 0x005C; + t['backslashmonospace'] = 0xFF3C; + t['badeva'] = 0x092C; + t['bagujarati'] = 0x0AAC; + t['bagurmukhi'] = 0x0A2C; + t['bahiragana'] = 0x3070; + t['bahtthai'] = 0x0E3F; + t['bakatakana'] = 0x30D0; + t['bar'] = 0x007C; + t['barmonospace'] = 0xFF5C; + t['bbopomofo'] = 0x3105; + t['bcircle'] = 0x24D1; + t['bdotaccent'] = 0x1E03; + t['bdotbelow'] = 0x1E05; + t['beamedsixteenthnotes'] = 0x266C; + t['because'] = 0x2235; + t['becyrillic'] = 0x0431; + t['beharabic'] = 0x0628; + t['behfinalarabic'] = 0xFE90; + t['behinitialarabic'] = 0xFE91; + t['behiragana'] = 0x3079; + t['behmedialarabic'] = 0xFE92; + t['behmeeminitialarabic'] = 0xFC9F; + t['behmeemisolatedarabic'] = 0xFC08; + t['behnoonfinalarabic'] = 0xFC6D; + t['bekatakana'] = 0x30D9; + t['benarmenian'] = 0x0562; + t['bet'] = 0x05D1; + t['beta'] = 0x03B2; + t['betasymbolgreek'] = 0x03D0; + t['betdagesh'] = 0xFB31; + t['betdageshhebrew'] = 0xFB31; + t['bethebrew'] = 0x05D1; + t['betrafehebrew'] = 0xFB4C; + t['bhabengali'] = 0x09AD; + t['bhadeva'] = 0x092D; + t['bhagujarati'] = 0x0AAD; + t['bhagurmukhi'] = 0x0A2D; + t['bhook'] = 0x0253; + t['bihiragana'] = 0x3073; + t['bikatakana'] = 0x30D3; + t['bilabialclick'] = 0x0298; + t['bindigurmukhi'] = 0x0A02; + t['birusquare'] = 0x3331; + t['blackcircle'] = 0x25CF; + t['blackdiamond'] = 0x25C6; + t['blackdownpointingtriangle'] = 0x25BC; + t['blackleftpointingpointer'] = 0x25C4; + t['blackleftpointingtriangle'] = 0x25C0; + t['blacklenticularbracketleft'] = 0x3010; + t['blacklenticularbracketleftvertical'] = 0xFE3B; + t['blacklenticularbracketright'] = 0x3011; + t['blacklenticularbracketrightvertical'] = 0xFE3C; + t['blacklowerlefttriangle'] = 0x25E3; + t['blacklowerrighttriangle'] = 0x25E2; + t['blackrectangle'] = 0x25AC; + t['blackrightpointingpointer'] = 0x25BA; + t['blackrightpointingtriangle'] = 0x25B6; + t['blacksmallsquare'] = 0x25AA; + t['blacksmilingface'] = 0x263B; + t['blacksquare'] = 0x25A0; + t['blackstar'] = 0x2605; + t['blackupperlefttriangle'] = 0x25E4; + t['blackupperrighttriangle'] = 0x25E5; + t['blackuppointingsmalltriangle'] = 0x25B4; + t['blackuppointingtriangle'] = 0x25B2; + t['blank'] = 0x2423; + t['blinebelow'] = 0x1E07; + t['block'] = 0x2588; + t['bmonospace'] = 0xFF42; + t['bobaimaithai'] = 0x0E1A; + t['bohiragana'] = 0x307C; + t['bokatakana'] = 0x30DC; + t['bparen'] = 0x249D; + t['bqsquare'] = 0x33C3; + t['braceex'] = 0xF8F4; + t['braceleft'] = 0x007B; + t['braceleftbt'] = 0xF8F3; + t['braceleftmid'] = 0xF8F2; + t['braceleftmonospace'] = 0xFF5B; + t['braceleftsmall'] = 0xFE5B; + t['bracelefttp'] = 0xF8F1; + t['braceleftvertical'] = 0xFE37; + t['braceright'] = 0x007D; + t['bracerightbt'] = 0xF8FE; + t['bracerightmid'] = 0xF8FD; + t['bracerightmonospace'] = 0xFF5D; + t['bracerightsmall'] = 0xFE5C; + t['bracerighttp'] = 0xF8FC; + t['bracerightvertical'] = 0xFE38; + t['bracketleft'] = 0x005B; + t['bracketleftbt'] = 0xF8F0; + t['bracketleftex'] = 0xF8EF; + t['bracketleftmonospace'] = 0xFF3B; + t['bracketlefttp'] = 0xF8EE; + t['bracketright'] = 0x005D; + t['bracketrightbt'] = 0xF8FB; + t['bracketrightex'] = 0xF8FA; + t['bracketrightmonospace'] = 0xFF3D; + t['bracketrighttp'] = 0xF8F9; + t['breve'] = 0x02D8; + t['brevebelowcmb'] = 0x032E; + t['brevecmb'] = 0x0306; + t['breveinvertedbelowcmb'] = 0x032F; + t['breveinvertedcmb'] = 0x0311; + t['breveinverteddoublecmb'] = 0x0361; + t['bridgebelowcmb'] = 0x032A; + t['bridgeinvertedbelowcmb'] = 0x033A; + t['brokenbar'] = 0x00A6; + t['bstroke'] = 0x0180; + t['bsuperior'] = 0xF6EA; + t['btopbar'] = 0x0183; + t['buhiragana'] = 0x3076; + t['bukatakana'] = 0x30D6; + t['bullet'] = 0x2022; + t['bulletinverse'] = 0x25D8; + t['bulletoperator'] = 0x2219; + t['bullseye'] = 0x25CE; + t['c'] = 0x0063; + t['caarmenian'] = 0x056E; + t['cabengali'] = 0x099A; + t['cacute'] = 0x0107; + t['cadeva'] = 0x091A; + t['cagujarati'] = 0x0A9A; + t['cagurmukhi'] = 0x0A1A; + t['calsquare'] = 0x3388; + t['candrabindubengali'] = 0x0981; + t['candrabinducmb'] = 0x0310; + t['candrabindudeva'] = 0x0901; + t['candrabindugujarati'] = 0x0A81; + t['capslock'] = 0x21EA; + t['careof'] = 0x2105; + t['caron'] = 0x02C7; + t['caronbelowcmb'] = 0x032C; + t['caroncmb'] = 0x030C; + t['carriagereturn'] = 0x21B5; + t['cbopomofo'] = 0x3118; + t['ccaron'] = 0x010D; + t['ccedilla'] = 0x00E7; + t['ccedillaacute'] = 0x1E09; + t['ccircle'] = 0x24D2; + t['ccircumflex'] = 0x0109; + t['ccurl'] = 0x0255; + t['cdot'] = 0x010B; + t['cdotaccent'] = 0x010B; + t['cdsquare'] = 0x33C5; + t['cedilla'] = 0x00B8; + t['cedillacmb'] = 0x0327; + t['cent'] = 0x00A2; + t['centigrade'] = 0x2103; + t['centinferior'] = 0xF6DF; + t['centmonospace'] = 0xFFE0; + t['centoldstyle'] = 0xF7A2; + t['centsuperior'] = 0xF6E0; + t['chaarmenian'] = 0x0579; + t['chabengali'] = 0x099B; + t['chadeva'] = 0x091B; + t['chagujarati'] = 0x0A9B; + t['chagurmukhi'] = 0x0A1B; + t['chbopomofo'] = 0x3114; + t['cheabkhasiancyrillic'] = 0x04BD; + t['checkmark'] = 0x2713; + t['checyrillic'] = 0x0447; + t['chedescenderabkhasiancyrillic'] = 0x04BF; + t['chedescendercyrillic'] = 0x04B7; + t['chedieresiscyrillic'] = 0x04F5; + t['cheharmenian'] = 0x0573; + t['chekhakassiancyrillic'] = 0x04CC; + t['cheverticalstrokecyrillic'] = 0x04B9; + t['chi'] = 0x03C7; + t['chieuchacirclekorean'] = 0x3277; + t['chieuchaparenkorean'] = 0x3217; + t['chieuchcirclekorean'] = 0x3269; + t['chieuchkorean'] = 0x314A; + t['chieuchparenkorean'] = 0x3209; + t['chochangthai'] = 0x0E0A; + t['chochanthai'] = 0x0E08; + t['chochingthai'] = 0x0E09; + t['chochoethai'] = 0x0E0C; + t['chook'] = 0x0188; + t['cieucacirclekorean'] = 0x3276; + t['cieucaparenkorean'] = 0x3216; + t['cieuccirclekorean'] = 0x3268; + t['cieuckorean'] = 0x3148; + t['cieucparenkorean'] = 0x3208; + t['cieucuparenkorean'] = 0x321C; + t['circle'] = 0x25CB; + t['circlecopyrt'] = 0x00A9; + t['circlemultiply'] = 0x2297; + t['circleot'] = 0x2299; + t['circleplus'] = 0x2295; + t['circlepostalmark'] = 0x3036; + t['circlewithlefthalfblack'] = 0x25D0; + t['circlewithrighthalfblack'] = 0x25D1; + t['circumflex'] = 0x02C6; + t['circumflexbelowcmb'] = 0x032D; + t['circumflexcmb'] = 0x0302; + t['clear'] = 0x2327; + t['clickalveolar'] = 0x01C2; + t['clickdental'] = 0x01C0; + t['clicklateral'] = 0x01C1; + t['clickretroflex'] = 0x01C3; + t['club'] = 0x2663; + t['clubsuitblack'] = 0x2663; + t['clubsuitwhite'] = 0x2667; + t['cmcubedsquare'] = 0x33A4; + t['cmonospace'] = 0xFF43; + t['cmsquaredsquare'] = 0x33A0; + t['coarmenian'] = 0x0581; + t['colon'] = 0x003A; + t['colonmonetary'] = 0x20A1; + t['colonmonospace'] = 0xFF1A; + t['colonsign'] = 0x20A1; + t['colonsmall'] = 0xFE55; + t['colontriangularhalfmod'] = 0x02D1; + t['colontriangularmod'] = 0x02D0; + t['comma'] = 0x002C; + t['commaabovecmb'] = 0x0313; + t['commaaboverightcmb'] = 0x0315; + t['commaaccent'] = 0xF6C3; + t['commaarabic'] = 0x060C; + t['commaarmenian'] = 0x055D; + t['commainferior'] = 0xF6E1; + t['commamonospace'] = 0xFF0C; + t['commareversedabovecmb'] = 0x0314; + t['commareversedmod'] = 0x02BD; + t['commasmall'] = 0xFE50; + t['commasuperior'] = 0xF6E2; + t['commaturnedabovecmb'] = 0x0312; + t['commaturnedmod'] = 0x02BB; + t['compass'] = 0x263C; + t['congruent'] = 0x2245; + t['contourintegral'] = 0x222E; + t['control'] = 0x2303; + t['controlACK'] = 0x0006; + t['controlBEL'] = 0x0007; + t['controlBS'] = 0x0008; + t['controlCAN'] = 0x0018; + t['controlCR'] = 0x000D; + t['controlDC1'] = 0x0011; + t['controlDC2'] = 0x0012; + t['controlDC3'] = 0x0013; + t['controlDC4'] = 0x0014; + t['controlDEL'] = 0x007F; + t['controlDLE'] = 0x0010; + t['controlEM'] = 0x0019; + t['controlENQ'] = 0x0005; + t['controlEOT'] = 0x0004; + t['controlESC'] = 0x001B; + t['controlETB'] = 0x0017; + t['controlETX'] = 0x0003; + t['controlFF'] = 0x000C; + t['controlFS'] = 0x001C; + t['controlGS'] = 0x001D; + t['controlHT'] = 0x0009; + t['controlLF'] = 0x000A; + t['controlNAK'] = 0x0015; + t['controlNULL'] = 0x0000; + t['controlRS'] = 0x001E; + t['controlSI'] = 0x000F; + t['controlSO'] = 0x000E; + t['controlSOT'] = 0x0002; + t['controlSTX'] = 0x0001; + t['controlSUB'] = 0x001A; + t['controlSYN'] = 0x0016; + t['controlUS'] = 0x001F; + t['controlVT'] = 0x000B; + t['copyright'] = 0x00A9; + t['copyrightsans'] = 0xF8E9; + t['copyrightserif'] = 0xF6D9; + t['cornerbracketleft'] = 0x300C; + t['cornerbracketlefthalfwidth'] = 0xFF62; + t['cornerbracketleftvertical'] = 0xFE41; + t['cornerbracketright'] = 0x300D; + t['cornerbracketrighthalfwidth'] = 0xFF63; + t['cornerbracketrightvertical'] = 0xFE42; + t['corporationsquare'] = 0x337F; + t['cosquare'] = 0x33C7; + t['coverkgsquare'] = 0x33C6; + t['cparen'] = 0x249E; + t['cruzeiro'] = 0x20A2; + t['cstretched'] = 0x0297; + t['curlyand'] = 0x22CF; + t['curlyor'] = 0x22CE; + t['currency'] = 0x00A4; + t['cyrBreve'] = 0xF6D1; + t['cyrFlex'] = 0xF6D2; + t['cyrbreve'] = 0xF6D4; + t['cyrflex'] = 0xF6D5; + t['d'] = 0x0064; + t['daarmenian'] = 0x0564; + t['dabengali'] = 0x09A6; + t['dadarabic'] = 0x0636; + t['dadeva'] = 0x0926; + t['dadfinalarabic'] = 0xFEBE; + t['dadinitialarabic'] = 0xFEBF; + t['dadmedialarabic'] = 0xFEC0; + t['dagesh'] = 0x05BC; + t['dageshhebrew'] = 0x05BC; + t['dagger'] = 0x2020; + t['daggerdbl'] = 0x2021; + t['dagujarati'] = 0x0AA6; + t['dagurmukhi'] = 0x0A26; + t['dahiragana'] = 0x3060; + t['dakatakana'] = 0x30C0; + t['dalarabic'] = 0x062F; + t['dalet'] = 0x05D3; + t['daletdagesh'] = 0xFB33; + t['daletdageshhebrew'] = 0xFB33; + t['dalethebrew'] = 0x05D3; + t['dalfinalarabic'] = 0xFEAA; + t['dammaarabic'] = 0x064F; + t['dammalowarabic'] = 0x064F; + t['dammatanaltonearabic'] = 0x064C; + t['dammatanarabic'] = 0x064C; + t['danda'] = 0x0964; + t['dargahebrew'] = 0x05A7; + t['dargalefthebrew'] = 0x05A7; + t['dasiapneumatacyrilliccmb'] = 0x0485; + t['dblGrave'] = 0xF6D3; + t['dblanglebracketleft'] = 0x300A; + t['dblanglebracketleftvertical'] = 0xFE3D; + t['dblanglebracketright'] = 0x300B; + t['dblanglebracketrightvertical'] = 0xFE3E; + t['dblarchinvertedbelowcmb'] = 0x032B; + t['dblarrowleft'] = 0x21D4; + t['dblarrowright'] = 0x21D2; + t['dbldanda'] = 0x0965; + t['dblgrave'] = 0xF6D6; + t['dblgravecmb'] = 0x030F; + t['dblintegral'] = 0x222C; + t['dbllowline'] = 0x2017; + t['dbllowlinecmb'] = 0x0333; + t['dbloverlinecmb'] = 0x033F; + t['dblprimemod'] = 0x02BA; + t['dblverticalbar'] = 0x2016; + t['dblverticallineabovecmb'] = 0x030E; + t['dbopomofo'] = 0x3109; + t['dbsquare'] = 0x33C8; + t['dcaron'] = 0x010F; + t['dcedilla'] = 0x1E11; + t['dcircle'] = 0x24D3; + t['dcircumflexbelow'] = 0x1E13; + t['dcroat'] = 0x0111; + t['ddabengali'] = 0x09A1; + t['ddadeva'] = 0x0921; + t['ddagujarati'] = 0x0AA1; + t['ddagurmukhi'] = 0x0A21; + t['ddalarabic'] = 0x0688; + t['ddalfinalarabic'] = 0xFB89; + t['dddhadeva'] = 0x095C; + t['ddhabengali'] = 0x09A2; + t['ddhadeva'] = 0x0922; + t['ddhagujarati'] = 0x0AA2; + t['ddhagurmukhi'] = 0x0A22; + t['ddotaccent'] = 0x1E0B; + t['ddotbelow'] = 0x1E0D; + t['decimalseparatorarabic'] = 0x066B; + t['decimalseparatorpersian'] = 0x066B; + t['decyrillic'] = 0x0434; + t['degree'] = 0x00B0; + t['dehihebrew'] = 0x05AD; + t['dehiragana'] = 0x3067; + t['deicoptic'] = 0x03EF; + t['dekatakana'] = 0x30C7; + t['deleteleft'] = 0x232B; + t['deleteright'] = 0x2326; + t['delta'] = 0x03B4; + t['deltaturned'] = 0x018D; + t['denominatorminusonenumeratorbengali'] = 0x09F8; + t['dezh'] = 0x02A4; + t['dhabengali'] = 0x09A7; + t['dhadeva'] = 0x0927; + t['dhagujarati'] = 0x0AA7; + t['dhagurmukhi'] = 0x0A27; + t['dhook'] = 0x0257; + t['dialytikatonos'] = 0x0385; + t['dialytikatonoscmb'] = 0x0344; + t['diamond'] = 0x2666; + t['diamondsuitwhite'] = 0x2662; + t['dieresis'] = 0x00A8; + t['dieresisacute'] = 0xF6D7; + t['dieresisbelowcmb'] = 0x0324; + t['dieresiscmb'] = 0x0308; + t['dieresisgrave'] = 0xF6D8; + t['dieresistonos'] = 0x0385; + t['dihiragana'] = 0x3062; + t['dikatakana'] = 0x30C2; + t['dittomark'] = 0x3003; + t['divide'] = 0x00F7; + t['divides'] = 0x2223; + t['divisionslash'] = 0x2215; + t['djecyrillic'] = 0x0452; + t['dkshade'] = 0x2593; + t['dlinebelow'] = 0x1E0F; + t['dlsquare'] = 0x3397; + t['dmacron'] = 0x0111; + t['dmonospace'] = 0xFF44; + t['dnblock'] = 0x2584; + t['dochadathai'] = 0x0E0E; + t['dodekthai'] = 0x0E14; + t['dohiragana'] = 0x3069; + t['dokatakana'] = 0x30C9; + t['dollar'] = 0x0024; + t['dollarinferior'] = 0xF6E3; + t['dollarmonospace'] = 0xFF04; + t['dollaroldstyle'] = 0xF724; + t['dollarsmall'] = 0xFE69; + t['dollarsuperior'] = 0xF6E4; + t['dong'] = 0x20AB; + t['dorusquare'] = 0x3326; + t['dotaccent'] = 0x02D9; + t['dotaccentcmb'] = 0x0307; + t['dotbelowcmb'] = 0x0323; + t['dotbelowcomb'] = 0x0323; + t['dotkatakana'] = 0x30FB; + t['dotlessi'] = 0x0131; + t['dotlessj'] = 0xF6BE; + t['dotlessjstrokehook'] = 0x0284; + t['dotmath'] = 0x22C5; + t['dottedcircle'] = 0x25CC; + t['doubleyodpatah'] = 0xFB1F; + t['doubleyodpatahhebrew'] = 0xFB1F; + t['downtackbelowcmb'] = 0x031E; + t['downtackmod'] = 0x02D5; + t['dparen'] = 0x249F; + t['dsuperior'] = 0xF6EB; + t['dtail'] = 0x0256; + t['dtopbar'] = 0x018C; + t['duhiragana'] = 0x3065; + t['dukatakana'] = 0x30C5; + t['dz'] = 0x01F3; + t['dzaltone'] = 0x02A3; + t['dzcaron'] = 0x01C6; + t['dzcurl'] = 0x02A5; + t['dzeabkhasiancyrillic'] = 0x04E1; + t['dzecyrillic'] = 0x0455; + t['dzhecyrillic'] = 0x045F; + t['e'] = 0x0065; + t['eacute'] = 0x00E9; + t['earth'] = 0x2641; + t['ebengali'] = 0x098F; + t['ebopomofo'] = 0x311C; + t['ebreve'] = 0x0115; + t['ecandradeva'] = 0x090D; + t['ecandragujarati'] = 0x0A8D; + t['ecandravowelsigndeva'] = 0x0945; + t['ecandravowelsigngujarati'] = 0x0AC5; + t['ecaron'] = 0x011B; + t['ecedillabreve'] = 0x1E1D; + t['echarmenian'] = 0x0565; + t['echyiwnarmenian'] = 0x0587; + t['ecircle'] = 0x24D4; + t['ecircumflex'] = 0x00EA; + t['ecircumflexacute'] = 0x1EBF; + t['ecircumflexbelow'] = 0x1E19; + t['ecircumflexdotbelow'] = 0x1EC7; + t['ecircumflexgrave'] = 0x1EC1; + t['ecircumflexhookabove'] = 0x1EC3; + t['ecircumflextilde'] = 0x1EC5; + t['ecyrillic'] = 0x0454; + t['edblgrave'] = 0x0205; + t['edeva'] = 0x090F; + t['edieresis'] = 0x00EB; + t['edot'] = 0x0117; + t['edotaccent'] = 0x0117; + t['edotbelow'] = 0x1EB9; + t['eegurmukhi'] = 0x0A0F; + t['eematragurmukhi'] = 0x0A47; + t['efcyrillic'] = 0x0444; + t['egrave'] = 0x00E8; + t['egujarati'] = 0x0A8F; + t['eharmenian'] = 0x0567; + t['ehbopomofo'] = 0x311D; + t['ehiragana'] = 0x3048; + t['ehookabove'] = 0x1EBB; + t['eibopomofo'] = 0x311F; + t['eight'] = 0x0038; + t['eightarabic'] = 0x0668; + t['eightbengali'] = 0x09EE; + t['eightcircle'] = 0x2467; + t['eightcircleinversesansserif'] = 0x2791; + t['eightdeva'] = 0x096E; + t['eighteencircle'] = 0x2471; + t['eighteenparen'] = 0x2485; + t['eighteenperiod'] = 0x2499; + t['eightgujarati'] = 0x0AEE; + t['eightgurmukhi'] = 0x0A6E; + t['eighthackarabic'] = 0x0668; + t['eighthangzhou'] = 0x3028; + t['eighthnotebeamed'] = 0x266B; + t['eightideographicparen'] = 0x3227; + t['eightinferior'] = 0x2088; + t['eightmonospace'] = 0xFF18; + t['eightoldstyle'] = 0xF738; + t['eightparen'] = 0x247B; + t['eightperiod'] = 0x248F; + t['eightpersian'] = 0x06F8; + t['eightroman'] = 0x2177; + t['eightsuperior'] = 0x2078; + t['eightthai'] = 0x0E58; + t['einvertedbreve'] = 0x0207; + t['eiotifiedcyrillic'] = 0x0465; + t['ekatakana'] = 0x30A8; + t['ekatakanahalfwidth'] = 0xFF74; + t['ekonkargurmukhi'] = 0x0A74; + t['ekorean'] = 0x3154; + t['elcyrillic'] = 0x043B; + t['element'] = 0x2208; + t['elevencircle'] = 0x246A; + t['elevenparen'] = 0x247E; + t['elevenperiod'] = 0x2492; + t['elevenroman'] = 0x217A; + t['ellipsis'] = 0x2026; + t['ellipsisvertical'] = 0x22EE; + t['emacron'] = 0x0113; + t['emacronacute'] = 0x1E17; + t['emacrongrave'] = 0x1E15; + t['emcyrillic'] = 0x043C; + t['emdash'] = 0x2014; + t['emdashvertical'] = 0xFE31; + t['emonospace'] = 0xFF45; + t['emphasismarkarmenian'] = 0x055B; + t['emptyset'] = 0x2205; + t['enbopomofo'] = 0x3123; + t['encyrillic'] = 0x043D; + t['endash'] = 0x2013; + t['endashvertical'] = 0xFE32; + t['endescendercyrillic'] = 0x04A3; + t['eng'] = 0x014B; + t['engbopomofo'] = 0x3125; + t['enghecyrillic'] = 0x04A5; + t['enhookcyrillic'] = 0x04C8; + t['enspace'] = 0x2002; + t['eogonek'] = 0x0119; + t['eokorean'] = 0x3153; + t['eopen'] = 0x025B; + t['eopenclosed'] = 0x029A; + t['eopenreversed'] = 0x025C; + t['eopenreversedclosed'] = 0x025E; + t['eopenreversedhook'] = 0x025D; + t['eparen'] = 0x24A0; + t['epsilon'] = 0x03B5; + t['epsilontonos'] = 0x03AD; + t['equal'] = 0x003D; + t['equalmonospace'] = 0xFF1D; + t['equalsmall'] = 0xFE66; + t['equalsuperior'] = 0x207C; + t['equivalence'] = 0x2261; + t['erbopomofo'] = 0x3126; + t['ercyrillic'] = 0x0440; + t['ereversed'] = 0x0258; + t['ereversedcyrillic'] = 0x044D; + t['escyrillic'] = 0x0441; + t['esdescendercyrillic'] = 0x04AB; + t['esh'] = 0x0283; + t['eshcurl'] = 0x0286; + t['eshortdeva'] = 0x090E; + t['eshortvowelsigndeva'] = 0x0946; + t['eshreversedloop'] = 0x01AA; + t['eshsquatreversed'] = 0x0285; + t['esmallhiragana'] = 0x3047; + t['esmallkatakana'] = 0x30A7; + t['esmallkatakanahalfwidth'] = 0xFF6A; + t['estimated'] = 0x212E; + t['esuperior'] = 0xF6EC; + t['eta'] = 0x03B7; + t['etarmenian'] = 0x0568; + t['etatonos'] = 0x03AE; + t['eth'] = 0x00F0; + t['etilde'] = 0x1EBD; + t['etildebelow'] = 0x1E1B; + t['etnahtafoukhhebrew'] = 0x0591; + t['etnahtafoukhlefthebrew'] = 0x0591; + t['etnahtahebrew'] = 0x0591; + t['etnahtalefthebrew'] = 0x0591; + t['eturned'] = 0x01DD; + t['eukorean'] = 0x3161; + t['euro'] = 0x20AC; + t['evowelsignbengali'] = 0x09C7; + t['evowelsigndeva'] = 0x0947; + t['evowelsigngujarati'] = 0x0AC7; + t['exclam'] = 0x0021; + t['exclamarmenian'] = 0x055C; + t['exclamdbl'] = 0x203C; + t['exclamdown'] = 0x00A1; + t['exclamdownsmall'] = 0xF7A1; + t['exclammonospace'] = 0xFF01; + t['exclamsmall'] = 0xF721; + t['existential'] = 0x2203; + t['ezh'] = 0x0292; + t['ezhcaron'] = 0x01EF; + t['ezhcurl'] = 0x0293; + t['ezhreversed'] = 0x01B9; + t['ezhtail'] = 0x01BA; + t['f'] = 0x0066; + t['fadeva'] = 0x095E; + t['fagurmukhi'] = 0x0A5E; + t['fahrenheit'] = 0x2109; + t['fathaarabic'] = 0x064E; + t['fathalowarabic'] = 0x064E; + t['fathatanarabic'] = 0x064B; + t['fbopomofo'] = 0x3108; + t['fcircle'] = 0x24D5; + t['fdotaccent'] = 0x1E1F; + t['feharabic'] = 0x0641; + t['feharmenian'] = 0x0586; + t['fehfinalarabic'] = 0xFED2; + t['fehinitialarabic'] = 0xFED3; + t['fehmedialarabic'] = 0xFED4; + t['feicoptic'] = 0x03E5; + t['female'] = 0x2640; + t['ff'] = 0xFB00; + t['ffi'] = 0xFB03; + t['ffl'] = 0xFB04; + t['fi'] = 0xFB01; + t['fifteencircle'] = 0x246E; + t['fifteenparen'] = 0x2482; + t['fifteenperiod'] = 0x2496; + t['figuredash'] = 0x2012; + t['filledbox'] = 0x25A0; + t['filledrect'] = 0x25AC; + t['finalkaf'] = 0x05DA; + t['finalkafdagesh'] = 0xFB3A; + t['finalkafdageshhebrew'] = 0xFB3A; + t['finalkafhebrew'] = 0x05DA; + t['finalmem'] = 0x05DD; + t['finalmemhebrew'] = 0x05DD; + t['finalnun'] = 0x05DF; + t['finalnunhebrew'] = 0x05DF; + t['finalpe'] = 0x05E3; + t['finalpehebrew'] = 0x05E3; + t['finaltsadi'] = 0x05E5; + t['finaltsadihebrew'] = 0x05E5; + t['firsttonechinese'] = 0x02C9; + t['fisheye'] = 0x25C9; + t['fitacyrillic'] = 0x0473; + t['five'] = 0x0035; + t['fivearabic'] = 0x0665; + t['fivebengali'] = 0x09EB; + t['fivecircle'] = 0x2464; + t['fivecircleinversesansserif'] = 0x278E; + t['fivedeva'] = 0x096B; + t['fiveeighths'] = 0x215D; + t['fivegujarati'] = 0x0AEB; + t['fivegurmukhi'] = 0x0A6B; + t['fivehackarabic'] = 0x0665; + t['fivehangzhou'] = 0x3025; + t['fiveideographicparen'] = 0x3224; + t['fiveinferior'] = 0x2085; + t['fivemonospace'] = 0xFF15; + t['fiveoldstyle'] = 0xF735; + t['fiveparen'] = 0x2478; + t['fiveperiod'] = 0x248C; + t['fivepersian'] = 0x06F5; + t['fiveroman'] = 0x2174; + t['fivesuperior'] = 0x2075; + t['fivethai'] = 0x0E55; + t['fl'] = 0xFB02; + t['florin'] = 0x0192; + t['fmonospace'] = 0xFF46; + t['fmsquare'] = 0x3399; + t['fofanthai'] = 0x0E1F; + t['fofathai'] = 0x0E1D; + t['fongmanthai'] = 0x0E4F; + t['forall'] = 0x2200; + t['four'] = 0x0034; + t['fourarabic'] = 0x0664; + t['fourbengali'] = 0x09EA; + t['fourcircle'] = 0x2463; + t['fourcircleinversesansserif'] = 0x278D; + t['fourdeva'] = 0x096A; + t['fourgujarati'] = 0x0AEA; + t['fourgurmukhi'] = 0x0A6A; + t['fourhackarabic'] = 0x0664; + t['fourhangzhou'] = 0x3024; + t['fourideographicparen'] = 0x3223; + t['fourinferior'] = 0x2084; + t['fourmonospace'] = 0xFF14; + t['fournumeratorbengali'] = 0x09F7; + t['fouroldstyle'] = 0xF734; + t['fourparen'] = 0x2477; + t['fourperiod'] = 0x248B; + t['fourpersian'] = 0x06F4; + t['fourroman'] = 0x2173; + t['foursuperior'] = 0x2074; + t['fourteencircle'] = 0x246D; + t['fourteenparen'] = 0x2481; + t['fourteenperiod'] = 0x2495; + t['fourthai'] = 0x0E54; + t['fourthtonechinese'] = 0x02CB; + t['fparen'] = 0x24A1; + t['fraction'] = 0x2044; + t['franc'] = 0x20A3; + t['g'] = 0x0067; + t['gabengali'] = 0x0997; + t['gacute'] = 0x01F5; + t['gadeva'] = 0x0917; + t['gafarabic'] = 0x06AF; + t['gaffinalarabic'] = 0xFB93; + t['gafinitialarabic'] = 0xFB94; + t['gafmedialarabic'] = 0xFB95; + t['gagujarati'] = 0x0A97; + t['gagurmukhi'] = 0x0A17; + t['gahiragana'] = 0x304C; + t['gakatakana'] = 0x30AC; + t['gamma'] = 0x03B3; + t['gammalatinsmall'] = 0x0263; + t['gammasuperior'] = 0x02E0; + t['gangiacoptic'] = 0x03EB; + t['gbopomofo'] = 0x310D; + t['gbreve'] = 0x011F; + t['gcaron'] = 0x01E7; + t['gcedilla'] = 0x0123; + t['gcircle'] = 0x24D6; + t['gcircumflex'] = 0x011D; + t['gcommaaccent'] = 0x0123; + t['gdot'] = 0x0121; + t['gdotaccent'] = 0x0121; + t['gecyrillic'] = 0x0433; + t['gehiragana'] = 0x3052; + t['gekatakana'] = 0x30B2; + t['geometricallyequal'] = 0x2251; + t['gereshaccenthebrew'] = 0x059C; + t['gereshhebrew'] = 0x05F3; + t['gereshmuqdamhebrew'] = 0x059D; + t['germandbls'] = 0x00DF; + t['gershayimaccenthebrew'] = 0x059E; + t['gershayimhebrew'] = 0x05F4; + t['getamark'] = 0x3013; + t['ghabengali'] = 0x0998; + t['ghadarmenian'] = 0x0572; + t['ghadeva'] = 0x0918; + t['ghagujarati'] = 0x0A98; + t['ghagurmukhi'] = 0x0A18; + t['ghainarabic'] = 0x063A; + t['ghainfinalarabic'] = 0xFECE; + t['ghaininitialarabic'] = 0xFECF; + t['ghainmedialarabic'] = 0xFED0; + t['ghemiddlehookcyrillic'] = 0x0495; + t['ghestrokecyrillic'] = 0x0493; + t['gheupturncyrillic'] = 0x0491; + t['ghhadeva'] = 0x095A; + t['ghhagurmukhi'] = 0x0A5A; + t['ghook'] = 0x0260; + t['ghzsquare'] = 0x3393; + t['gihiragana'] = 0x304E; + t['gikatakana'] = 0x30AE; + t['gimarmenian'] = 0x0563; + t['gimel'] = 0x05D2; + t['gimeldagesh'] = 0xFB32; + t['gimeldageshhebrew'] = 0xFB32; + t['gimelhebrew'] = 0x05D2; + t['gjecyrillic'] = 0x0453; + t['glottalinvertedstroke'] = 0x01BE; + t['glottalstop'] = 0x0294; + t['glottalstopinverted'] = 0x0296; + t['glottalstopmod'] = 0x02C0; + t['glottalstopreversed'] = 0x0295; + t['glottalstopreversedmod'] = 0x02C1; + t['glottalstopreversedsuperior'] = 0x02E4; + t['glottalstopstroke'] = 0x02A1; + t['glottalstopstrokereversed'] = 0x02A2; + t['gmacron'] = 0x1E21; + t['gmonospace'] = 0xFF47; + t['gohiragana'] = 0x3054; + t['gokatakana'] = 0x30B4; + t['gparen'] = 0x24A2; + t['gpasquare'] = 0x33AC; + t['gradient'] = 0x2207; + t['grave'] = 0x0060; + t['gravebelowcmb'] = 0x0316; + t['gravecmb'] = 0x0300; + t['gravecomb'] = 0x0300; + t['gravedeva'] = 0x0953; + t['gravelowmod'] = 0x02CE; + t['gravemonospace'] = 0xFF40; + t['gravetonecmb'] = 0x0340; + t['greater'] = 0x003E; + t['greaterequal'] = 0x2265; + t['greaterequalorless'] = 0x22DB; + t['greatermonospace'] = 0xFF1E; + t['greaterorequivalent'] = 0x2273; + t['greaterorless'] = 0x2277; + t['greateroverequal'] = 0x2267; + t['greatersmall'] = 0xFE65; + t['gscript'] = 0x0261; + t['gstroke'] = 0x01E5; + t['guhiragana'] = 0x3050; + t['guillemotleft'] = 0x00AB; + t['guillemotright'] = 0x00BB; + t['guilsinglleft'] = 0x2039; + t['guilsinglright'] = 0x203A; + t['gukatakana'] = 0x30B0; + t['guramusquare'] = 0x3318; + t['gysquare'] = 0x33C9; + t['h'] = 0x0068; + t['haabkhasiancyrillic'] = 0x04A9; + t['haaltonearabic'] = 0x06C1; + t['habengali'] = 0x09B9; + t['hadescendercyrillic'] = 0x04B3; + t['hadeva'] = 0x0939; + t['hagujarati'] = 0x0AB9; + t['hagurmukhi'] = 0x0A39; + t['haharabic'] = 0x062D; + t['hahfinalarabic'] = 0xFEA2; + t['hahinitialarabic'] = 0xFEA3; + t['hahiragana'] = 0x306F; + t['hahmedialarabic'] = 0xFEA4; + t['haitusquare'] = 0x332A; + t['hakatakana'] = 0x30CF; + t['hakatakanahalfwidth'] = 0xFF8A; + t['halantgurmukhi'] = 0x0A4D; + t['hamzaarabic'] = 0x0621; + t['hamzalowarabic'] = 0x0621; + t['hangulfiller'] = 0x3164; + t['hardsigncyrillic'] = 0x044A; + t['harpoonleftbarbup'] = 0x21BC; + t['harpoonrightbarbup'] = 0x21C0; + t['hasquare'] = 0x33CA; + t['hatafpatah'] = 0x05B2; + t['hatafpatah16'] = 0x05B2; + t['hatafpatah23'] = 0x05B2; + t['hatafpatah2f'] = 0x05B2; + t['hatafpatahhebrew'] = 0x05B2; + t['hatafpatahnarrowhebrew'] = 0x05B2; + t['hatafpatahquarterhebrew'] = 0x05B2; + t['hatafpatahwidehebrew'] = 0x05B2; + t['hatafqamats'] = 0x05B3; + t['hatafqamats1b'] = 0x05B3; + t['hatafqamats28'] = 0x05B3; + t['hatafqamats34'] = 0x05B3; + t['hatafqamatshebrew'] = 0x05B3; + t['hatafqamatsnarrowhebrew'] = 0x05B3; + t['hatafqamatsquarterhebrew'] = 0x05B3; + t['hatafqamatswidehebrew'] = 0x05B3; + t['hatafsegol'] = 0x05B1; + t['hatafsegol17'] = 0x05B1; + t['hatafsegol24'] = 0x05B1; + t['hatafsegol30'] = 0x05B1; + t['hatafsegolhebrew'] = 0x05B1; + t['hatafsegolnarrowhebrew'] = 0x05B1; + t['hatafsegolquarterhebrew'] = 0x05B1; + t['hatafsegolwidehebrew'] = 0x05B1; + t['hbar'] = 0x0127; + t['hbopomofo'] = 0x310F; + t['hbrevebelow'] = 0x1E2B; + t['hcedilla'] = 0x1E29; + t['hcircle'] = 0x24D7; + t['hcircumflex'] = 0x0125; + t['hdieresis'] = 0x1E27; + t['hdotaccent'] = 0x1E23; + t['hdotbelow'] = 0x1E25; + t['he'] = 0x05D4; + t['heart'] = 0x2665; + t['heartsuitblack'] = 0x2665; + t['heartsuitwhite'] = 0x2661; + t['hedagesh'] = 0xFB34; + t['hedageshhebrew'] = 0xFB34; + t['hehaltonearabic'] = 0x06C1; + t['heharabic'] = 0x0647; + t['hehebrew'] = 0x05D4; + t['hehfinalaltonearabic'] = 0xFBA7; + t['hehfinalalttwoarabic'] = 0xFEEA; + t['hehfinalarabic'] = 0xFEEA; + t['hehhamzaabovefinalarabic'] = 0xFBA5; + t['hehhamzaaboveisolatedarabic'] = 0xFBA4; + t['hehinitialaltonearabic'] = 0xFBA8; + t['hehinitialarabic'] = 0xFEEB; + t['hehiragana'] = 0x3078; + t['hehmedialaltonearabic'] = 0xFBA9; + t['hehmedialarabic'] = 0xFEEC; + t['heiseierasquare'] = 0x337B; + t['hekatakana'] = 0x30D8; + t['hekatakanahalfwidth'] = 0xFF8D; + t['hekutaarusquare'] = 0x3336; + t['henghook'] = 0x0267; + t['herutusquare'] = 0x3339; + t['het'] = 0x05D7; + t['hethebrew'] = 0x05D7; + t['hhook'] = 0x0266; + t['hhooksuperior'] = 0x02B1; + t['hieuhacirclekorean'] = 0x327B; + t['hieuhaparenkorean'] = 0x321B; + t['hieuhcirclekorean'] = 0x326D; + t['hieuhkorean'] = 0x314E; + t['hieuhparenkorean'] = 0x320D; + t['hihiragana'] = 0x3072; + t['hikatakana'] = 0x30D2; + t['hikatakanahalfwidth'] = 0xFF8B; + t['hiriq'] = 0x05B4; + t['hiriq14'] = 0x05B4; + t['hiriq21'] = 0x05B4; + t['hiriq2d'] = 0x05B4; + t['hiriqhebrew'] = 0x05B4; + t['hiriqnarrowhebrew'] = 0x05B4; + t['hiriqquarterhebrew'] = 0x05B4; + t['hiriqwidehebrew'] = 0x05B4; + t['hlinebelow'] = 0x1E96; + t['hmonospace'] = 0xFF48; + t['hoarmenian'] = 0x0570; + t['hohipthai'] = 0x0E2B; + t['hohiragana'] = 0x307B; + t['hokatakana'] = 0x30DB; + t['hokatakanahalfwidth'] = 0xFF8E; + t['holam'] = 0x05B9; + t['holam19'] = 0x05B9; + t['holam26'] = 0x05B9; + t['holam32'] = 0x05B9; + t['holamhebrew'] = 0x05B9; + t['holamnarrowhebrew'] = 0x05B9; + t['holamquarterhebrew'] = 0x05B9; + t['holamwidehebrew'] = 0x05B9; + t['honokhukthai'] = 0x0E2E; + t['hookabovecomb'] = 0x0309; + t['hookcmb'] = 0x0309; + t['hookpalatalizedbelowcmb'] = 0x0321; + t['hookretroflexbelowcmb'] = 0x0322; + t['hoonsquare'] = 0x3342; + t['horicoptic'] = 0x03E9; + t['horizontalbar'] = 0x2015; + t['horncmb'] = 0x031B; + t['hotsprings'] = 0x2668; + t['house'] = 0x2302; + t['hparen'] = 0x24A3; + t['hsuperior'] = 0x02B0; + t['hturned'] = 0x0265; + t['huhiragana'] = 0x3075; + t['huiitosquare'] = 0x3333; + t['hukatakana'] = 0x30D5; + t['hukatakanahalfwidth'] = 0xFF8C; + t['hungarumlaut'] = 0x02DD; + t['hungarumlautcmb'] = 0x030B; + t['hv'] = 0x0195; + t['hyphen'] = 0x002D; + t['hypheninferior'] = 0xF6E5; + t['hyphenmonospace'] = 0xFF0D; + t['hyphensmall'] = 0xFE63; + t['hyphensuperior'] = 0xF6E6; + t['hyphentwo'] = 0x2010; + t['i'] = 0x0069; + t['iacute'] = 0x00ED; + t['iacyrillic'] = 0x044F; + t['ibengali'] = 0x0987; + t['ibopomofo'] = 0x3127; + t['ibreve'] = 0x012D; + t['icaron'] = 0x01D0; + t['icircle'] = 0x24D8; + t['icircumflex'] = 0x00EE; + t['icyrillic'] = 0x0456; + t['idblgrave'] = 0x0209; + t['ideographearthcircle'] = 0x328F; + t['ideographfirecircle'] = 0x328B; + t['ideographicallianceparen'] = 0x323F; + t['ideographiccallparen'] = 0x323A; + t['ideographiccentrecircle'] = 0x32A5; + t['ideographicclose'] = 0x3006; + t['ideographiccomma'] = 0x3001; + t['ideographiccommaleft'] = 0xFF64; + t['ideographiccongratulationparen'] = 0x3237; + t['ideographiccorrectcircle'] = 0x32A3; + t['ideographicearthparen'] = 0x322F; + t['ideographicenterpriseparen'] = 0x323D; + t['ideographicexcellentcircle'] = 0x329D; + t['ideographicfestivalparen'] = 0x3240; + t['ideographicfinancialcircle'] = 0x3296; + t['ideographicfinancialparen'] = 0x3236; + t['ideographicfireparen'] = 0x322B; + t['ideographichaveparen'] = 0x3232; + t['ideographichighcircle'] = 0x32A4; + t['ideographiciterationmark'] = 0x3005; + t['ideographiclaborcircle'] = 0x3298; + t['ideographiclaborparen'] = 0x3238; + t['ideographicleftcircle'] = 0x32A7; + t['ideographiclowcircle'] = 0x32A6; + t['ideographicmedicinecircle'] = 0x32A9; + t['ideographicmetalparen'] = 0x322E; + t['ideographicmoonparen'] = 0x322A; + t['ideographicnameparen'] = 0x3234; + t['ideographicperiod'] = 0x3002; + t['ideographicprintcircle'] = 0x329E; + t['ideographicreachparen'] = 0x3243; + t['ideographicrepresentparen'] = 0x3239; + t['ideographicresourceparen'] = 0x323E; + t['ideographicrightcircle'] = 0x32A8; + t['ideographicsecretcircle'] = 0x3299; + t['ideographicselfparen'] = 0x3242; + t['ideographicsocietyparen'] = 0x3233; + t['ideographicspace'] = 0x3000; + t['ideographicspecialparen'] = 0x3235; + t['ideographicstockparen'] = 0x3231; + t['ideographicstudyparen'] = 0x323B; + t['ideographicsunparen'] = 0x3230; + t['ideographicsuperviseparen'] = 0x323C; + t['ideographicwaterparen'] = 0x322C; + t['ideographicwoodparen'] = 0x322D; + t['ideographiczero'] = 0x3007; + t['ideographmetalcircle'] = 0x328E; + t['ideographmooncircle'] = 0x328A; + t['ideographnamecircle'] = 0x3294; + t['ideographsuncircle'] = 0x3290; + t['ideographwatercircle'] = 0x328C; + t['ideographwoodcircle'] = 0x328D; + t['ideva'] = 0x0907; + t['idieresis'] = 0x00EF; + t['idieresisacute'] = 0x1E2F; + t['idieresiscyrillic'] = 0x04E5; + t['idotbelow'] = 0x1ECB; + t['iebrevecyrillic'] = 0x04D7; + t['iecyrillic'] = 0x0435; + t['ieungacirclekorean'] = 0x3275; + t['ieungaparenkorean'] = 0x3215; + t['ieungcirclekorean'] = 0x3267; + t['ieungkorean'] = 0x3147; + t['ieungparenkorean'] = 0x3207; + t['igrave'] = 0x00EC; + t['igujarati'] = 0x0A87; + t['igurmukhi'] = 0x0A07; + t['ihiragana'] = 0x3044; + t['ihookabove'] = 0x1EC9; + t['iibengali'] = 0x0988; + t['iicyrillic'] = 0x0438; + t['iideva'] = 0x0908; + t['iigujarati'] = 0x0A88; + t['iigurmukhi'] = 0x0A08; + t['iimatragurmukhi'] = 0x0A40; + t['iinvertedbreve'] = 0x020B; + t['iishortcyrillic'] = 0x0439; + t['iivowelsignbengali'] = 0x09C0; + t['iivowelsigndeva'] = 0x0940; + t['iivowelsigngujarati'] = 0x0AC0; + t['ij'] = 0x0133; + t['ikatakana'] = 0x30A4; + t['ikatakanahalfwidth'] = 0xFF72; + t['ikorean'] = 0x3163; + t['ilde'] = 0x02DC; + t['iluyhebrew'] = 0x05AC; + t['imacron'] = 0x012B; + t['imacroncyrillic'] = 0x04E3; + t['imageorapproximatelyequal'] = 0x2253; + t['imatragurmukhi'] = 0x0A3F; + t['imonospace'] = 0xFF49; + t['increment'] = 0x2206; + t['infinity'] = 0x221E; + t['iniarmenian'] = 0x056B; + t['integral'] = 0x222B; + t['integralbottom'] = 0x2321; + t['integralbt'] = 0x2321; + t['integralex'] = 0xF8F5; + t['integraltop'] = 0x2320; + t['integraltp'] = 0x2320; + t['intersection'] = 0x2229; + t['intisquare'] = 0x3305; + t['invbullet'] = 0x25D8; + t['invcircle'] = 0x25D9; + t['invsmileface'] = 0x263B; + t['iocyrillic'] = 0x0451; + t['iogonek'] = 0x012F; + t['iota'] = 0x03B9; + t['iotadieresis'] = 0x03CA; + t['iotadieresistonos'] = 0x0390; + t['iotalatin'] = 0x0269; + t['iotatonos'] = 0x03AF; + t['iparen'] = 0x24A4; + t['irigurmukhi'] = 0x0A72; + t['ismallhiragana'] = 0x3043; + t['ismallkatakana'] = 0x30A3; + t['ismallkatakanahalfwidth'] = 0xFF68; + t['issharbengali'] = 0x09FA; + t['istroke'] = 0x0268; + t['isuperior'] = 0xF6ED; + t['iterationhiragana'] = 0x309D; + t['iterationkatakana'] = 0x30FD; + t['itilde'] = 0x0129; + t['itildebelow'] = 0x1E2D; + t['iubopomofo'] = 0x3129; + t['iucyrillic'] = 0x044E; + t['ivowelsignbengali'] = 0x09BF; + t['ivowelsigndeva'] = 0x093F; + t['ivowelsigngujarati'] = 0x0ABF; + t['izhitsacyrillic'] = 0x0475; + t['izhitsadblgravecyrillic'] = 0x0477; + t['j'] = 0x006A; + t['jaarmenian'] = 0x0571; + t['jabengali'] = 0x099C; + t['jadeva'] = 0x091C; + t['jagujarati'] = 0x0A9C; + t['jagurmukhi'] = 0x0A1C; + t['jbopomofo'] = 0x3110; + t['jcaron'] = 0x01F0; + t['jcircle'] = 0x24D9; + t['jcircumflex'] = 0x0135; + t['jcrossedtail'] = 0x029D; + t['jdotlessstroke'] = 0x025F; + t['jecyrillic'] = 0x0458; + t['jeemarabic'] = 0x062C; + t['jeemfinalarabic'] = 0xFE9E; + t['jeeminitialarabic'] = 0xFE9F; + t['jeemmedialarabic'] = 0xFEA0; + t['jeharabic'] = 0x0698; + t['jehfinalarabic'] = 0xFB8B; + t['jhabengali'] = 0x099D; + t['jhadeva'] = 0x091D; + t['jhagujarati'] = 0x0A9D; + t['jhagurmukhi'] = 0x0A1D; + t['jheharmenian'] = 0x057B; + t['jis'] = 0x3004; + t['jmonospace'] = 0xFF4A; + t['jparen'] = 0x24A5; + t['jsuperior'] = 0x02B2; + t['k'] = 0x006B; + t['kabashkircyrillic'] = 0x04A1; + t['kabengali'] = 0x0995; + t['kacute'] = 0x1E31; + t['kacyrillic'] = 0x043A; + t['kadescendercyrillic'] = 0x049B; + t['kadeva'] = 0x0915; + t['kaf'] = 0x05DB; + t['kafarabic'] = 0x0643; + t['kafdagesh'] = 0xFB3B; + t['kafdageshhebrew'] = 0xFB3B; + t['kaffinalarabic'] = 0xFEDA; + t['kafhebrew'] = 0x05DB; + t['kafinitialarabic'] = 0xFEDB; + t['kafmedialarabic'] = 0xFEDC; + t['kafrafehebrew'] = 0xFB4D; + t['kagujarati'] = 0x0A95; + t['kagurmukhi'] = 0x0A15; + t['kahiragana'] = 0x304B; + t['kahookcyrillic'] = 0x04C4; + t['kakatakana'] = 0x30AB; + t['kakatakanahalfwidth'] = 0xFF76; + t['kappa'] = 0x03BA; + t['kappasymbolgreek'] = 0x03F0; + t['kapyeounmieumkorean'] = 0x3171; + t['kapyeounphieuphkorean'] = 0x3184; + t['kapyeounpieupkorean'] = 0x3178; + t['kapyeounssangpieupkorean'] = 0x3179; + t['karoriisquare'] = 0x330D; + t['kashidaautoarabic'] = 0x0640; + t['kashidaautonosidebearingarabic'] = 0x0640; + t['kasmallkatakana'] = 0x30F5; + t['kasquare'] = 0x3384; + t['kasraarabic'] = 0x0650; + t['kasratanarabic'] = 0x064D; + t['kastrokecyrillic'] = 0x049F; + t['katahiraprolongmarkhalfwidth'] = 0xFF70; + t['kaverticalstrokecyrillic'] = 0x049D; + t['kbopomofo'] = 0x310E; + t['kcalsquare'] = 0x3389; + t['kcaron'] = 0x01E9; + t['kcedilla'] = 0x0137; + t['kcircle'] = 0x24DA; + t['kcommaaccent'] = 0x0137; + t['kdotbelow'] = 0x1E33; + t['keharmenian'] = 0x0584; + t['kehiragana'] = 0x3051; + t['kekatakana'] = 0x30B1; + t['kekatakanahalfwidth'] = 0xFF79; + t['kenarmenian'] = 0x056F; + t['kesmallkatakana'] = 0x30F6; + t['kgreenlandic'] = 0x0138; + t['khabengali'] = 0x0996; + t['khacyrillic'] = 0x0445; + t['khadeva'] = 0x0916; + t['khagujarati'] = 0x0A96; + t['khagurmukhi'] = 0x0A16; + t['khaharabic'] = 0x062E; + t['khahfinalarabic'] = 0xFEA6; + t['khahinitialarabic'] = 0xFEA7; + t['khahmedialarabic'] = 0xFEA8; + t['kheicoptic'] = 0x03E7; + t['khhadeva'] = 0x0959; + t['khhagurmukhi'] = 0x0A59; + t['khieukhacirclekorean'] = 0x3278; + t['khieukhaparenkorean'] = 0x3218; + t['khieukhcirclekorean'] = 0x326A; + t['khieukhkorean'] = 0x314B; + t['khieukhparenkorean'] = 0x320A; + t['khokhaithai'] = 0x0E02; + t['khokhonthai'] = 0x0E05; + t['khokhuatthai'] = 0x0E03; + t['khokhwaithai'] = 0x0E04; + t['khomutthai'] = 0x0E5B; + t['khook'] = 0x0199; + t['khorakhangthai'] = 0x0E06; + t['khzsquare'] = 0x3391; + t['kihiragana'] = 0x304D; + t['kikatakana'] = 0x30AD; + t['kikatakanahalfwidth'] = 0xFF77; + t['kiroguramusquare'] = 0x3315; + t['kiromeetorusquare'] = 0x3316; + t['kirosquare'] = 0x3314; + t['kiyeokacirclekorean'] = 0x326E; + t['kiyeokaparenkorean'] = 0x320E; + t['kiyeokcirclekorean'] = 0x3260; + t['kiyeokkorean'] = 0x3131; + t['kiyeokparenkorean'] = 0x3200; + t['kiyeoksioskorean'] = 0x3133; + t['kjecyrillic'] = 0x045C; + t['klinebelow'] = 0x1E35; + t['klsquare'] = 0x3398; + t['kmcubedsquare'] = 0x33A6; + t['kmonospace'] = 0xFF4B; + t['kmsquaredsquare'] = 0x33A2; + t['kohiragana'] = 0x3053; + t['kohmsquare'] = 0x33C0; + t['kokaithai'] = 0x0E01; + t['kokatakana'] = 0x30B3; + t['kokatakanahalfwidth'] = 0xFF7A; + t['kooposquare'] = 0x331E; + t['koppacyrillic'] = 0x0481; + t['koreanstandardsymbol'] = 0x327F; + t['koroniscmb'] = 0x0343; + t['kparen'] = 0x24A6; + t['kpasquare'] = 0x33AA; + t['ksicyrillic'] = 0x046F; + t['ktsquare'] = 0x33CF; + t['kturned'] = 0x029E; + t['kuhiragana'] = 0x304F; + t['kukatakana'] = 0x30AF; + t['kukatakanahalfwidth'] = 0xFF78; + t['kvsquare'] = 0x33B8; + t['kwsquare'] = 0x33BE; + t['l'] = 0x006C; + t['labengali'] = 0x09B2; + t['lacute'] = 0x013A; + t['ladeva'] = 0x0932; + t['lagujarati'] = 0x0AB2; + t['lagurmukhi'] = 0x0A32; + t['lakkhangyaothai'] = 0x0E45; + t['lamaleffinalarabic'] = 0xFEFC; + t['lamalefhamzaabovefinalarabic'] = 0xFEF8; + t['lamalefhamzaaboveisolatedarabic'] = 0xFEF7; + t['lamalefhamzabelowfinalarabic'] = 0xFEFA; + t['lamalefhamzabelowisolatedarabic'] = 0xFEF9; + t['lamalefisolatedarabic'] = 0xFEFB; + t['lamalefmaddaabovefinalarabic'] = 0xFEF6; + t['lamalefmaddaaboveisolatedarabic'] = 0xFEF5; + t['lamarabic'] = 0x0644; + t['lambda'] = 0x03BB; + t['lambdastroke'] = 0x019B; + t['lamed'] = 0x05DC; + t['lameddagesh'] = 0xFB3C; + t['lameddageshhebrew'] = 0xFB3C; + t['lamedhebrew'] = 0x05DC; + t['lamfinalarabic'] = 0xFEDE; + t['lamhahinitialarabic'] = 0xFCCA; + t['laminitialarabic'] = 0xFEDF; + t['lamjeeminitialarabic'] = 0xFCC9; + t['lamkhahinitialarabic'] = 0xFCCB; + t['lamlamhehisolatedarabic'] = 0xFDF2; + t['lammedialarabic'] = 0xFEE0; + t['lammeemhahinitialarabic'] = 0xFD88; + t['lammeeminitialarabic'] = 0xFCCC; + t['largecircle'] = 0x25EF; + t['lbar'] = 0x019A; + t['lbelt'] = 0x026C; + t['lbopomofo'] = 0x310C; + t['lcaron'] = 0x013E; + t['lcedilla'] = 0x013C; + t['lcircle'] = 0x24DB; + t['lcircumflexbelow'] = 0x1E3D; + t['lcommaaccent'] = 0x013C; + t['ldot'] = 0x0140; + t['ldotaccent'] = 0x0140; + t['ldotbelow'] = 0x1E37; + t['ldotbelowmacron'] = 0x1E39; + t['leftangleabovecmb'] = 0x031A; + t['lefttackbelowcmb'] = 0x0318; + t['less'] = 0x003C; + t['lessequal'] = 0x2264; + t['lessequalorgreater'] = 0x22DA; + t['lessmonospace'] = 0xFF1C; + t['lessorequivalent'] = 0x2272; + t['lessorgreater'] = 0x2276; + t['lessoverequal'] = 0x2266; + t['lesssmall'] = 0xFE64; + t['lezh'] = 0x026E; + t['lfblock'] = 0x258C; + t['lhookretroflex'] = 0x026D; + t['lira'] = 0x20A4; + t['liwnarmenian'] = 0x056C; + t['lj'] = 0x01C9; + t['ljecyrillic'] = 0x0459; + t['ll'] = 0xF6C0; + t['lladeva'] = 0x0933; + t['llagujarati'] = 0x0AB3; + t['llinebelow'] = 0x1E3B; + t['llladeva'] = 0x0934; + t['llvocalicbengali'] = 0x09E1; + t['llvocalicdeva'] = 0x0961; + t['llvocalicvowelsignbengali'] = 0x09E3; + t['llvocalicvowelsigndeva'] = 0x0963; + t['lmiddletilde'] = 0x026B; + t['lmonospace'] = 0xFF4C; + t['lmsquare'] = 0x33D0; + t['lochulathai'] = 0x0E2C; + t['logicaland'] = 0x2227; + t['logicalnot'] = 0x00AC; + t['logicalnotreversed'] = 0x2310; + t['logicalor'] = 0x2228; + t['lolingthai'] = 0x0E25; + t['longs'] = 0x017F; + t['lowlinecenterline'] = 0xFE4E; + t['lowlinecmb'] = 0x0332; + t['lowlinedashed'] = 0xFE4D; + t['lozenge'] = 0x25CA; + t['lparen'] = 0x24A7; + t['lslash'] = 0x0142; + t['lsquare'] = 0x2113; + t['lsuperior'] = 0xF6EE; + t['ltshade'] = 0x2591; + t['luthai'] = 0x0E26; + t['lvocalicbengali'] = 0x098C; + t['lvocalicdeva'] = 0x090C; + t['lvocalicvowelsignbengali'] = 0x09E2; + t['lvocalicvowelsigndeva'] = 0x0962; + t['lxsquare'] = 0x33D3; + t['m'] = 0x006D; + t['mabengali'] = 0x09AE; + t['macron'] = 0x00AF; + t['macronbelowcmb'] = 0x0331; + t['macroncmb'] = 0x0304; + t['macronlowmod'] = 0x02CD; + t['macronmonospace'] = 0xFFE3; + t['macute'] = 0x1E3F; + t['madeva'] = 0x092E; + t['magujarati'] = 0x0AAE; + t['magurmukhi'] = 0x0A2E; + t['mahapakhhebrew'] = 0x05A4; + t['mahapakhlefthebrew'] = 0x05A4; + t['mahiragana'] = 0x307E; + t['maichattawalowleftthai'] = 0xF895; + t['maichattawalowrightthai'] = 0xF894; + t['maichattawathai'] = 0x0E4B; + t['maichattawaupperleftthai'] = 0xF893; + t['maieklowleftthai'] = 0xF88C; + t['maieklowrightthai'] = 0xF88B; + t['maiekthai'] = 0x0E48; + t['maiekupperleftthai'] = 0xF88A; + t['maihanakatleftthai'] = 0xF884; + t['maihanakatthai'] = 0x0E31; + t['maitaikhuleftthai'] = 0xF889; + t['maitaikhuthai'] = 0x0E47; + t['maitholowleftthai'] = 0xF88F; + t['maitholowrightthai'] = 0xF88E; + t['maithothai'] = 0x0E49; + t['maithoupperleftthai'] = 0xF88D; + t['maitrilowleftthai'] = 0xF892; + t['maitrilowrightthai'] = 0xF891; + t['maitrithai'] = 0x0E4A; + t['maitriupperleftthai'] = 0xF890; + t['maiyamokthai'] = 0x0E46; + t['makatakana'] = 0x30DE; + t['makatakanahalfwidth'] = 0xFF8F; + t['male'] = 0x2642; + t['mansyonsquare'] = 0x3347; + t['maqafhebrew'] = 0x05BE; + t['mars'] = 0x2642; + t['masoracirclehebrew'] = 0x05AF; + t['masquare'] = 0x3383; + t['mbopomofo'] = 0x3107; + t['mbsquare'] = 0x33D4; + t['mcircle'] = 0x24DC; + t['mcubedsquare'] = 0x33A5; + t['mdotaccent'] = 0x1E41; + t['mdotbelow'] = 0x1E43; + t['meemarabic'] = 0x0645; + t['meemfinalarabic'] = 0xFEE2; + t['meeminitialarabic'] = 0xFEE3; + t['meemmedialarabic'] = 0xFEE4; + t['meemmeeminitialarabic'] = 0xFCD1; + t['meemmeemisolatedarabic'] = 0xFC48; + t['meetorusquare'] = 0x334D; + t['mehiragana'] = 0x3081; + t['meizierasquare'] = 0x337E; + t['mekatakana'] = 0x30E1; + t['mekatakanahalfwidth'] = 0xFF92; + t['mem'] = 0x05DE; + t['memdagesh'] = 0xFB3E; + t['memdageshhebrew'] = 0xFB3E; + t['memhebrew'] = 0x05DE; + t['menarmenian'] = 0x0574; + t['merkhahebrew'] = 0x05A5; + t['merkhakefulahebrew'] = 0x05A6; + t['merkhakefulalefthebrew'] = 0x05A6; + t['merkhalefthebrew'] = 0x05A5; + t['mhook'] = 0x0271; + t['mhzsquare'] = 0x3392; + t['middledotkatakanahalfwidth'] = 0xFF65; + t['middot'] = 0x00B7; + t['mieumacirclekorean'] = 0x3272; + t['mieumaparenkorean'] = 0x3212; + t['mieumcirclekorean'] = 0x3264; + t['mieumkorean'] = 0x3141; + t['mieumpansioskorean'] = 0x3170; + t['mieumparenkorean'] = 0x3204; + t['mieumpieupkorean'] = 0x316E; + t['mieumsioskorean'] = 0x316F; + t['mihiragana'] = 0x307F; + t['mikatakana'] = 0x30DF; + t['mikatakanahalfwidth'] = 0xFF90; + t['minus'] = 0x2212; + t['minusbelowcmb'] = 0x0320; + t['minuscircle'] = 0x2296; + t['minusmod'] = 0x02D7; + t['minusplus'] = 0x2213; + t['minute'] = 0x2032; + t['miribaarusquare'] = 0x334A; + t['mirisquare'] = 0x3349; + t['mlonglegturned'] = 0x0270; + t['mlsquare'] = 0x3396; + t['mmcubedsquare'] = 0x33A3; + t['mmonospace'] = 0xFF4D; + t['mmsquaredsquare'] = 0x339F; + t['mohiragana'] = 0x3082; + t['mohmsquare'] = 0x33C1; + t['mokatakana'] = 0x30E2; + t['mokatakanahalfwidth'] = 0xFF93; + t['molsquare'] = 0x33D6; + t['momathai'] = 0x0E21; + t['moverssquare'] = 0x33A7; + t['moverssquaredsquare'] = 0x33A8; + t['mparen'] = 0x24A8; + t['mpasquare'] = 0x33AB; + t['mssquare'] = 0x33B3; + t['msuperior'] = 0xF6EF; + t['mturned'] = 0x026F; + t['mu'] = 0x00B5; + t['mu1'] = 0x00B5; + t['muasquare'] = 0x3382; + t['muchgreater'] = 0x226B; + t['muchless'] = 0x226A; + t['mufsquare'] = 0x338C; + t['mugreek'] = 0x03BC; + t['mugsquare'] = 0x338D; + t['muhiragana'] = 0x3080; + t['mukatakana'] = 0x30E0; + t['mukatakanahalfwidth'] = 0xFF91; + t['mulsquare'] = 0x3395; + t['multiply'] = 0x00D7; + t['mumsquare'] = 0x339B; + t['munahhebrew'] = 0x05A3; + t['munahlefthebrew'] = 0x05A3; + t['musicalnote'] = 0x266A; + t['musicalnotedbl'] = 0x266B; + t['musicflatsign'] = 0x266D; + t['musicsharpsign'] = 0x266F; + t['mussquare'] = 0x33B2; + t['muvsquare'] = 0x33B6; + t['muwsquare'] = 0x33BC; + t['mvmegasquare'] = 0x33B9; + t['mvsquare'] = 0x33B7; + t['mwmegasquare'] = 0x33BF; + t['mwsquare'] = 0x33BD; + t['n'] = 0x006E; + t['nabengali'] = 0x09A8; + t['nabla'] = 0x2207; + t['nacute'] = 0x0144; + t['nadeva'] = 0x0928; + t['nagujarati'] = 0x0AA8; + t['nagurmukhi'] = 0x0A28; + t['nahiragana'] = 0x306A; + t['nakatakana'] = 0x30CA; + t['nakatakanahalfwidth'] = 0xFF85; + t['napostrophe'] = 0x0149; + t['nasquare'] = 0x3381; + t['nbopomofo'] = 0x310B; + t['nbspace'] = 0x00A0; + t['ncaron'] = 0x0148; + t['ncedilla'] = 0x0146; + t['ncircle'] = 0x24DD; + t['ncircumflexbelow'] = 0x1E4B; + t['ncommaaccent'] = 0x0146; + t['ndotaccent'] = 0x1E45; + t['ndotbelow'] = 0x1E47; + t['nehiragana'] = 0x306D; + t['nekatakana'] = 0x30CD; + t['nekatakanahalfwidth'] = 0xFF88; + t['newsheqelsign'] = 0x20AA; + t['nfsquare'] = 0x338B; + t['ngabengali'] = 0x0999; + t['ngadeva'] = 0x0919; + t['ngagujarati'] = 0x0A99; + t['ngagurmukhi'] = 0x0A19; + t['ngonguthai'] = 0x0E07; + t['nhiragana'] = 0x3093; + t['nhookleft'] = 0x0272; + t['nhookretroflex'] = 0x0273; + t['nieunacirclekorean'] = 0x326F; + t['nieunaparenkorean'] = 0x320F; + t['nieuncieuckorean'] = 0x3135; + t['nieuncirclekorean'] = 0x3261; + t['nieunhieuhkorean'] = 0x3136; + t['nieunkorean'] = 0x3134; + t['nieunpansioskorean'] = 0x3168; + t['nieunparenkorean'] = 0x3201; + t['nieunsioskorean'] = 0x3167; + t['nieuntikeutkorean'] = 0x3166; + t['nihiragana'] = 0x306B; + t['nikatakana'] = 0x30CB; + t['nikatakanahalfwidth'] = 0xFF86; + t['nikhahitleftthai'] = 0xF899; + t['nikhahitthai'] = 0x0E4D; + t['nine'] = 0x0039; + t['ninearabic'] = 0x0669; + t['ninebengali'] = 0x09EF; + t['ninecircle'] = 0x2468; + t['ninecircleinversesansserif'] = 0x2792; + t['ninedeva'] = 0x096F; + t['ninegujarati'] = 0x0AEF; + t['ninegurmukhi'] = 0x0A6F; + t['ninehackarabic'] = 0x0669; + t['ninehangzhou'] = 0x3029; + t['nineideographicparen'] = 0x3228; + t['nineinferior'] = 0x2089; + t['ninemonospace'] = 0xFF19; + t['nineoldstyle'] = 0xF739; + t['nineparen'] = 0x247C; + t['nineperiod'] = 0x2490; + t['ninepersian'] = 0x06F9; + t['nineroman'] = 0x2178; + t['ninesuperior'] = 0x2079; + t['nineteencircle'] = 0x2472; + t['nineteenparen'] = 0x2486; + t['nineteenperiod'] = 0x249A; + t['ninethai'] = 0x0E59; + t['nj'] = 0x01CC; + t['njecyrillic'] = 0x045A; + t['nkatakana'] = 0x30F3; + t['nkatakanahalfwidth'] = 0xFF9D; + t['nlegrightlong'] = 0x019E; + t['nlinebelow'] = 0x1E49; + t['nmonospace'] = 0xFF4E; + t['nmsquare'] = 0x339A; + t['nnabengali'] = 0x09A3; + t['nnadeva'] = 0x0923; + t['nnagujarati'] = 0x0AA3; + t['nnagurmukhi'] = 0x0A23; + t['nnnadeva'] = 0x0929; + t['nohiragana'] = 0x306E; + t['nokatakana'] = 0x30CE; + t['nokatakanahalfwidth'] = 0xFF89; + t['nonbreakingspace'] = 0x00A0; + t['nonenthai'] = 0x0E13; + t['nonuthai'] = 0x0E19; + t['noonarabic'] = 0x0646; + t['noonfinalarabic'] = 0xFEE6; + t['noonghunnaarabic'] = 0x06BA; + t['noonghunnafinalarabic'] = 0xFB9F; + t['nooninitialarabic'] = 0xFEE7; + t['noonjeeminitialarabic'] = 0xFCD2; + t['noonjeemisolatedarabic'] = 0xFC4B; + t['noonmedialarabic'] = 0xFEE8; + t['noonmeeminitialarabic'] = 0xFCD5; + t['noonmeemisolatedarabic'] = 0xFC4E; + t['noonnoonfinalarabic'] = 0xFC8D; + t['notcontains'] = 0x220C; + t['notelement'] = 0x2209; + t['notelementof'] = 0x2209; + t['notequal'] = 0x2260; + t['notgreater'] = 0x226F; + t['notgreaternorequal'] = 0x2271; + t['notgreaternorless'] = 0x2279; + t['notidentical'] = 0x2262; + t['notless'] = 0x226E; + t['notlessnorequal'] = 0x2270; + t['notparallel'] = 0x2226; + t['notprecedes'] = 0x2280; + t['notsubset'] = 0x2284; + t['notsucceeds'] = 0x2281; + t['notsuperset'] = 0x2285; + t['nowarmenian'] = 0x0576; + t['nparen'] = 0x24A9; + t['nssquare'] = 0x33B1; + t['nsuperior'] = 0x207F; + t['ntilde'] = 0x00F1; + t['nu'] = 0x03BD; + t['nuhiragana'] = 0x306C; + t['nukatakana'] = 0x30CC; + t['nukatakanahalfwidth'] = 0xFF87; + t['nuktabengali'] = 0x09BC; + t['nuktadeva'] = 0x093C; + t['nuktagujarati'] = 0x0ABC; + t['nuktagurmukhi'] = 0x0A3C; + t['numbersign'] = 0x0023; + t['numbersignmonospace'] = 0xFF03; + t['numbersignsmall'] = 0xFE5F; + t['numeralsigngreek'] = 0x0374; + t['numeralsignlowergreek'] = 0x0375; + t['numero'] = 0x2116; + t['nun'] = 0x05E0; + t['nundagesh'] = 0xFB40; + t['nundageshhebrew'] = 0xFB40; + t['nunhebrew'] = 0x05E0; + t['nvsquare'] = 0x33B5; + t['nwsquare'] = 0x33BB; + t['nyabengali'] = 0x099E; + t['nyadeva'] = 0x091E; + t['nyagujarati'] = 0x0A9E; + t['nyagurmukhi'] = 0x0A1E; + t['o'] = 0x006F; + t['oacute'] = 0x00F3; + t['oangthai'] = 0x0E2D; + t['obarred'] = 0x0275; + t['obarredcyrillic'] = 0x04E9; + t['obarreddieresiscyrillic'] = 0x04EB; + t['obengali'] = 0x0993; + t['obopomofo'] = 0x311B; + t['obreve'] = 0x014F; + t['ocandradeva'] = 0x0911; + t['ocandragujarati'] = 0x0A91; + t['ocandravowelsigndeva'] = 0x0949; + t['ocandravowelsigngujarati'] = 0x0AC9; + t['ocaron'] = 0x01D2; + t['ocircle'] = 0x24DE; + t['ocircumflex'] = 0x00F4; + t['ocircumflexacute'] = 0x1ED1; + t['ocircumflexdotbelow'] = 0x1ED9; + t['ocircumflexgrave'] = 0x1ED3; + t['ocircumflexhookabove'] = 0x1ED5; + t['ocircumflextilde'] = 0x1ED7; + t['ocyrillic'] = 0x043E; + t['odblacute'] = 0x0151; + t['odblgrave'] = 0x020D; + t['odeva'] = 0x0913; + t['odieresis'] = 0x00F6; + t['odieresiscyrillic'] = 0x04E7; + t['odotbelow'] = 0x1ECD; + t['oe'] = 0x0153; + t['oekorean'] = 0x315A; + t['ogonek'] = 0x02DB; + t['ogonekcmb'] = 0x0328; + t['ograve'] = 0x00F2; + t['ogujarati'] = 0x0A93; + t['oharmenian'] = 0x0585; + t['ohiragana'] = 0x304A; + t['ohookabove'] = 0x1ECF; + t['ohorn'] = 0x01A1; + t['ohornacute'] = 0x1EDB; + t['ohorndotbelow'] = 0x1EE3; + t['ohorngrave'] = 0x1EDD; + t['ohornhookabove'] = 0x1EDF; + t['ohorntilde'] = 0x1EE1; + t['ohungarumlaut'] = 0x0151; + t['oi'] = 0x01A3; + t['oinvertedbreve'] = 0x020F; + t['okatakana'] = 0x30AA; + t['okatakanahalfwidth'] = 0xFF75; + t['okorean'] = 0x3157; + t['olehebrew'] = 0x05AB; + t['omacron'] = 0x014D; + t['omacronacute'] = 0x1E53; + t['omacrongrave'] = 0x1E51; + t['omdeva'] = 0x0950; + t['omega'] = 0x03C9; + t['omega1'] = 0x03D6; + t['omegacyrillic'] = 0x0461; + t['omegalatinclosed'] = 0x0277; + t['omegaroundcyrillic'] = 0x047B; + t['omegatitlocyrillic'] = 0x047D; + t['omegatonos'] = 0x03CE; + t['omgujarati'] = 0x0AD0; + t['omicron'] = 0x03BF; + t['omicrontonos'] = 0x03CC; + t['omonospace'] = 0xFF4F; + t['one'] = 0x0031; + t['onearabic'] = 0x0661; + t['onebengali'] = 0x09E7; + t['onecircle'] = 0x2460; + t['onecircleinversesansserif'] = 0x278A; + t['onedeva'] = 0x0967; + t['onedotenleader'] = 0x2024; + t['oneeighth'] = 0x215B; + t['onefitted'] = 0xF6DC; + t['onegujarati'] = 0x0AE7; + t['onegurmukhi'] = 0x0A67; + t['onehackarabic'] = 0x0661; + t['onehalf'] = 0x00BD; + t['onehangzhou'] = 0x3021; + t['oneideographicparen'] = 0x3220; + t['oneinferior'] = 0x2081; + t['onemonospace'] = 0xFF11; + t['onenumeratorbengali'] = 0x09F4; + t['oneoldstyle'] = 0xF731; + t['oneparen'] = 0x2474; + t['oneperiod'] = 0x2488; + t['onepersian'] = 0x06F1; + t['onequarter'] = 0x00BC; + t['oneroman'] = 0x2170; + t['onesuperior'] = 0x00B9; + t['onethai'] = 0x0E51; + t['onethird'] = 0x2153; + t['oogonek'] = 0x01EB; + t['oogonekmacron'] = 0x01ED; + t['oogurmukhi'] = 0x0A13; + t['oomatragurmukhi'] = 0x0A4B; + t['oopen'] = 0x0254; + t['oparen'] = 0x24AA; + t['openbullet'] = 0x25E6; + t['option'] = 0x2325; + t['ordfeminine'] = 0x00AA; + t['ordmasculine'] = 0x00BA; + t['orthogonal'] = 0x221F; + t['oshortdeva'] = 0x0912; + t['oshortvowelsigndeva'] = 0x094A; + t['oslash'] = 0x00F8; + t['oslashacute'] = 0x01FF; + t['osmallhiragana'] = 0x3049; + t['osmallkatakana'] = 0x30A9; + t['osmallkatakanahalfwidth'] = 0xFF6B; + t['ostrokeacute'] = 0x01FF; + t['osuperior'] = 0xF6F0; + t['otcyrillic'] = 0x047F; + t['otilde'] = 0x00F5; + t['otildeacute'] = 0x1E4D; + t['otildedieresis'] = 0x1E4F; + t['oubopomofo'] = 0x3121; + t['overline'] = 0x203E; + t['overlinecenterline'] = 0xFE4A; + t['overlinecmb'] = 0x0305; + t['overlinedashed'] = 0xFE49; + t['overlinedblwavy'] = 0xFE4C; + t['overlinewavy'] = 0xFE4B; + t['overscore'] = 0x00AF; + t['ovowelsignbengali'] = 0x09CB; + t['ovowelsigndeva'] = 0x094B; + t['ovowelsigngujarati'] = 0x0ACB; + t['p'] = 0x0070; + t['paampssquare'] = 0x3380; + t['paasentosquare'] = 0x332B; + t['pabengali'] = 0x09AA; + t['pacute'] = 0x1E55; + t['padeva'] = 0x092A; + t['pagedown'] = 0x21DF; + t['pageup'] = 0x21DE; + t['pagujarati'] = 0x0AAA; + t['pagurmukhi'] = 0x0A2A; + t['pahiragana'] = 0x3071; + t['paiyannoithai'] = 0x0E2F; + t['pakatakana'] = 0x30D1; + t['palatalizationcyrilliccmb'] = 0x0484; + t['palochkacyrillic'] = 0x04C0; + t['pansioskorean'] = 0x317F; + t['paragraph'] = 0x00B6; + t['parallel'] = 0x2225; + t['parenleft'] = 0x0028; + t['parenleftaltonearabic'] = 0xFD3E; + t['parenleftbt'] = 0xF8ED; + t['parenleftex'] = 0xF8EC; + t['parenleftinferior'] = 0x208D; + t['parenleftmonospace'] = 0xFF08; + t['parenleftsmall'] = 0xFE59; + t['parenleftsuperior'] = 0x207D; + t['parenlefttp'] = 0xF8EB; + t['parenleftvertical'] = 0xFE35; + t['parenright'] = 0x0029; + t['parenrightaltonearabic'] = 0xFD3F; + t['parenrightbt'] = 0xF8F8; + t['parenrightex'] = 0xF8F7; + t['parenrightinferior'] = 0x208E; + t['parenrightmonospace'] = 0xFF09; + t['parenrightsmall'] = 0xFE5A; + t['parenrightsuperior'] = 0x207E; + t['parenrighttp'] = 0xF8F6; + t['parenrightvertical'] = 0xFE36; + t['partialdiff'] = 0x2202; + t['paseqhebrew'] = 0x05C0; + t['pashtahebrew'] = 0x0599; + t['pasquare'] = 0x33A9; + t['patah'] = 0x05B7; + t['patah11'] = 0x05B7; + t['patah1d'] = 0x05B7; + t['patah2a'] = 0x05B7; + t['patahhebrew'] = 0x05B7; + t['patahnarrowhebrew'] = 0x05B7; + t['patahquarterhebrew'] = 0x05B7; + t['patahwidehebrew'] = 0x05B7; + t['pazerhebrew'] = 0x05A1; + t['pbopomofo'] = 0x3106; + t['pcircle'] = 0x24DF; + t['pdotaccent'] = 0x1E57; + t['pe'] = 0x05E4; + t['pecyrillic'] = 0x043F; + t['pedagesh'] = 0xFB44; + t['pedageshhebrew'] = 0xFB44; + t['peezisquare'] = 0x333B; + t['pefinaldageshhebrew'] = 0xFB43; + t['peharabic'] = 0x067E; + t['peharmenian'] = 0x057A; + t['pehebrew'] = 0x05E4; + t['pehfinalarabic'] = 0xFB57; + t['pehinitialarabic'] = 0xFB58; + t['pehiragana'] = 0x307A; + t['pehmedialarabic'] = 0xFB59; + t['pekatakana'] = 0x30DA; + t['pemiddlehookcyrillic'] = 0x04A7; + t['perafehebrew'] = 0xFB4E; + t['percent'] = 0x0025; + t['percentarabic'] = 0x066A; + t['percentmonospace'] = 0xFF05; + t['percentsmall'] = 0xFE6A; + t['period'] = 0x002E; + t['periodarmenian'] = 0x0589; + t['periodcentered'] = 0x00B7; + t['periodhalfwidth'] = 0xFF61; + t['periodinferior'] = 0xF6E7; + t['periodmonospace'] = 0xFF0E; + t['periodsmall'] = 0xFE52; + t['periodsuperior'] = 0xF6E8; + t['perispomenigreekcmb'] = 0x0342; + t['perpendicular'] = 0x22A5; + t['perthousand'] = 0x2030; + t['peseta'] = 0x20A7; + t['pfsquare'] = 0x338A; + t['phabengali'] = 0x09AB; + t['phadeva'] = 0x092B; + t['phagujarati'] = 0x0AAB; + t['phagurmukhi'] = 0x0A2B; + t['phi'] = 0x03C6; + t['phi1'] = 0x03D5; + t['phieuphacirclekorean'] = 0x327A; + t['phieuphaparenkorean'] = 0x321A; + t['phieuphcirclekorean'] = 0x326C; + t['phieuphkorean'] = 0x314D; + t['phieuphparenkorean'] = 0x320C; + t['philatin'] = 0x0278; + t['phinthuthai'] = 0x0E3A; + t['phisymbolgreek'] = 0x03D5; + t['phook'] = 0x01A5; + t['phophanthai'] = 0x0E1E; + t['phophungthai'] = 0x0E1C; + t['phosamphaothai'] = 0x0E20; + t['pi'] = 0x03C0; + t['pieupacirclekorean'] = 0x3273; + t['pieupaparenkorean'] = 0x3213; + t['pieupcieuckorean'] = 0x3176; + t['pieupcirclekorean'] = 0x3265; + t['pieupkiyeokkorean'] = 0x3172; + t['pieupkorean'] = 0x3142; + t['pieupparenkorean'] = 0x3205; + t['pieupsioskiyeokkorean'] = 0x3174; + t['pieupsioskorean'] = 0x3144; + t['pieupsiostikeutkorean'] = 0x3175; + t['pieupthieuthkorean'] = 0x3177; + t['pieuptikeutkorean'] = 0x3173; + t['pihiragana'] = 0x3074; + t['pikatakana'] = 0x30D4; + t['pisymbolgreek'] = 0x03D6; + t['piwrarmenian'] = 0x0583; + t['plus'] = 0x002B; + t['plusbelowcmb'] = 0x031F; + t['pluscircle'] = 0x2295; + t['plusminus'] = 0x00B1; + t['plusmod'] = 0x02D6; + t['plusmonospace'] = 0xFF0B; + t['plussmall'] = 0xFE62; + t['plussuperior'] = 0x207A; + t['pmonospace'] = 0xFF50; + t['pmsquare'] = 0x33D8; + t['pohiragana'] = 0x307D; + t['pointingindexdownwhite'] = 0x261F; + t['pointingindexleftwhite'] = 0x261C; + t['pointingindexrightwhite'] = 0x261E; + t['pointingindexupwhite'] = 0x261D; + t['pokatakana'] = 0x30DD; + t['poplathai'] = 0x0E1B; + t['postalmark'] = 0x3012; + t['postalmarkface'] = 0x3020; + t['pparen'] = 0x24AB; + t['precedes'] = 0x227A; + t['prescription'] = 0x211E; + t['primemod'] = 0x02B9; + t['primereversed'] = 0x2035; + t['product'] = 0x220F; + t['projective'] = 0x2305; + t['prolongedkana'] = 0x30FC; + t['propellor'] = 0x2318; + t['propersubset'] = 0x2282; + t['propersuperset'] = 0x2283; + t['proportion'] = 0x2237; + t['proportional'] = 0x221D; + t['psi'] = 0x03C8; + t['psicyrillic'] = 0x0471; + t['psilipneumatacyrilliccmb'] = 0x0486; + t['pssquare'] = 0x33B0; + t['puhiragana'] = 0x3077; + t['pukatakana'] = 0x30D7; + t['pvsquare'] = 0x33B4; + t['pwsquare'] = 0x33BA; + t['q'] = 0x0071; + t['qadeva'] = 0x0958; + t['qadmahebrew'] = 0x05A8; + t['qafarabic'] = 0x0642; + t['qaffinalarabic'] = 0xFED6; + t['qafinitialarabic'] = 0xFED7; + t['qafmedialarabic'] = 0xFED8; + t['qamats'] = 0x05B8; + t['qamats10'] = 0x05B8; + t['qamats1a'] = 0x05B8; + t['qamats1c'] = 0x05B8; + t['qamats27'] = 0x05B8; + t['qamats29'] = 0x05B8; + t['qamats33'] = 0x05B8; + t['qamatsde'] = 0x05B8; + t['qamatshebrew'] = 0x05B8; + t['qamatsnarrowhebrew'] = 0x05B8; + t['qamatsqatanhebrew'] = 0x05B8; + t['qamatsqatannarrowhebrew'] = 0x05B8; + t['qamatsqatanquarterhebrew'] = 0x05B8; + t['qamatsqatanwidehebrew'] = 0x05B8; + t['qamatsquarterhebrew'] = 0x05B8; + t['qamatswidehebrew'] = 0x05B8; + t['qarneyparahebrew'] = 0x059F; + t['qbopomofo'] = 0x3111; + t['qcircle'] = 0x24E0; + t['qhook'] = 0x02A0; + t['qmonospace'] = 0xFF51; + t['qof'] = 0x05E7; + t['qofdagesh'] = 0xFB47; + t['qofdageshhebrew'] = 0xFB47; + t['qofhebrew'] = 0x05E7; + t['qparen'] = 0x24AC; + t['quarternote'] = 0x2669; + t['qubuts'] = 0x05BB; + t['qubuts18'] = 0x05BB; + t['qubuts25'] = 0x05BB; + t['qubuts31'] = 0x05BB; + t['qubutshebrew'] = 0x05BB; + t['qubutsnarrowhebrew'] = 0x05BB; + t['qubutsquarterhebrew'] = 0x05BB; + t['qubutswidehebrew'] = 0x05BB; + t['question'] = 0x003F; + t['questionarabic'] = 0x061F; + t['questionarmenian'] = 0x055E; + t['questiondown'] = 0x00BF; + t['questiondownsmall'] = 0xF7BF; + t['questiongreek'] = 0x037E; + t['questionmonospace'] = 0xFF1F; + t['questionsmall'] = 0xF73F; + t['quotedbl'] = 0x0022; + t['quotedblbase'] = 0x201E; + t['quotedblleft'] = 0x201C; + t['quotedblmonospace'] = 0xFF02; + t['quotedblprime'] = 0x301E; + t['quotedblprimereversed'] = 0x301D; + t['quotedblright'] = 0x201D; + t['quoteleft'] = 0x2018; + t['quoteleftreversed'] = 0x201B; + t['quotereversed'] = 0x201B; + t['quoteright'] = 0x2019; + t['quoterightn'] = 0x0149; + t['quotesinglbase'] = 0x201A; + t['quotesingle'] = 0x0027; + t['quotesinglemonospace'] = 0xFF07; + t['r'] = 0x0072; + t['raarmenian'] = 0x057C; + t['rabengali'] = 0x09B0; + t['racute'] = 0x0155; + t['radeva'] = 0x0930; + t['radical'] = 0x221A; + t['radicalex'] = 0xF8E5; + t['radoverssquare'] = 0x33AE; + t['radoverssquaredsquare'] = 0x33AF; + t['radsquare'] = 0x33AD; + t['rafe'] = 0x05BF; + t['rafehebrew'] = 0x05BF; + t['ragujarati'] = 0x0AB0; + t['ragurmukhi'] = 0x0A30; + t['rahiragana'] = 0x3089; + t['rakatakana'] = 0x30E9; + t['rakatakanahalfwidth'] = 0xFF97; + t['ralowerdiagonalbengali'] = 0x09F1; + t['ramiddlediagonalbengali'] = 0x09F0; + t['ramshorn'] = 0x0264; + t['ratio'] = 0x2236; + t['rbopomofo'] = 0x3116; + t['rcaron'] = 0x0159; + t['rcedilla'] = 0x0157; + t['rcircle'] = 0x24E1; + t['rcommaaccent'] = 0x0157; + t['rdblgrave'] = 0x0211; + t['rdotaccent'] = 0x1E59; + t['rdotbelow'] = 0x1E5B; + t['rdotbelowmacron'] = 0x1E5D; + t['referencemark'] = 0x203B; + t['reflexsubset'] = 0x2286; + t['reflexsuperset'] = 0x2287; + t['registered'] = 0x00AE; + t['registersans'] = 0xF8E8; + t['registerserif'] = 0xF6DA; + t['reharabic'] = 0x0631; + t['reharmenian'] = 0x0580; + t['rehfinalarabic'] = 0xFEAE; + t['rehiragana'] = 0x308C; + t['rekatakana'] = 0x30EC; + t['rekatakanahalfwidth'] = 0xFF9A; + t['resh'] = 0x05E8; + t['reshdageshhebrew'] = 0xFB48; + t['reshhebrew'] = 0x05E8; + t['reversedtilde'] = 0x223D; + t['reviahebrew'] = 0x0597; + t['reviamugrashhebrew'] = 0x0597; + t['revlogicalnot'] = 0x2310; + t['rfishhook'] = 0x027E; + t['rfishhookreversed'] = 0x027F; + t['rhabengali'] = 0x09DD; + t['rhadeva'] = 0x095D; + t['rho'] = 0x03C1; + t['rhook'] = 0x027D; + t['rhookturned'] = 0x027B; + t['rhookturnedsuperior'] = 0x02B5; + t['rhosymbolgreek'] = 0x03F1; + t['rhotichookmod'] = 0x02DE; + t['rieulacirclekorean'] = 0x3271; + t['rieulaparenkorean'] = 0x3211; + t['rieulcirclekorean'] = 0x3263; + t['rieulhieuhkorean'] = 0x3140; + t['rieulkiyeokkorean'] = 0x313A; + t['rieulkiyeoksioskorean'] = 0x3169; + t['rieulkorean'] = 0x3139; + t['rieulmieumkorean'] = 0x313B; + t['rieulpansioskorean'] = 0x316C; + t['rieulparenkorean'] = 0x3203; + t['rieulphieuphkorean'] = 0x313F; + t['rieulpieupkorean'] = 0x313C; + t['rieulpieupsioskorean'] = 0x316B; + t['rieulsioskorean'] = 0x313D; + t['rieulthieuthkorean'] = 0x313E; + t['rieultikeutkorean'] = 0x316A; + t['rieulyeorinhieuhkorean'] = 0x316D; + t['rightangle'] = 0x221F; + t['righttackbelowcmb'] = 0x0319; + t['righttriangle'] = 0x22BF; + t['rihiragana'] = 0x308A; + t['rikatakana'] = 0x30EA; + t['rikatakanahalfwidth'] = 0xFF98; + t['ring'] = 0x02DA; + t['ringbelowcmb'] = 0x0325; + t['ringcmb'] = 0x030A; + t['ringhalfleft'] = 0x02BF; + t['ringhalfleftarmenian'] = 0x0559; + t['ringhalfleftbelowcmb'] = 0x031C; + t['ringhalfleftcentered'] = 0x02D3; + t['ringhalfright'] = 0x02BE; + t['ringhalfrightbelowcmb'] = 0x0339; + t['ringhalfrightcentered'] = 0x02D2; + t['rinvertedbreve'] = 0x0213; + t['rittorusquare'] = 0x3351; + t['rlinebelow'] = 0x1E5F; + t['rlongleg'] = 0x027C; + t['rlonglegturned'] = 0x027A; + t['rmonospace'] = 0xFF52; + t['rohiragana'] = 0x308D; + t['rokatakana'] = 0x30ED; + t['rokatakanahalfwidth'] = 0xFF9B; + t['roruathai'] = 0x0E23; + t['rparen'] = 0x24AD; + t['rrabengali'] = 0x09DC; + t['rradeva'] = 0x0931; + t['rragurmukhi'] = 0x0A5C; + t['rreharabic'] = 0x0691; + t['rrehfinalarabic'] = 0xFB8D; + t['rrvocalicbengali'] = 0x09E0; + t['rrvocalicdeva'] = 0x0960; + t['rrvocalicgujarati'] = 0x0AE0; + t['rrvocalicvowelsignbengali'] = 0x09C4; + t['rrvocalicvowelsigndeva'] = 0x0944; + t['rrvocalicvowelsigngujarati'] = 0x0AC4; + t['rsuperior'] = 0xF6F1; + t['rtblock'] = 0x2590; + t['rturned'] = 0x0279; + t['rturnedsuperior'] = 0x02B4; + t['ruhiragana'] = 0x308B; + t['rukatakana'] = 0x30EB; + t['rukatakanahalfwidth'] = 0xFF99; + t['rupeemarkbengali'] = 0x09F2; + t['rupeesignbengali'] = 0x09F3; + t['rupiah'] = 0xF6DD; + t['ruthai'] = 0x0E24; + t['rvocalicbengali'] = 0x098B; + t['rvocalicdeva'] = 0x090B; + t['rvocalicgujarati'] = 0x0A8B; + t['rvocalicvowelsignbengali'] = 0x09C3; + t['rvocalicvowelsigndeva'] = 0x0943; + t['rvocalicvowelsigngujarati'] = 0x0AC3; + t['s'] = 0x0073; + t['sabengali'] = 0x09B8; + t['sacute'] = 0x015B; + t['sacutedotaccent'] = 0x1E65; + t['sadarabic'] = 0x0635; + t['sadeva'] = 0x0938; + t['sadfinalarabic'] = 0xFEBA; + t['sadinitialarabic'] = 0xFEBB; + t['sadmedialarabic'] = 0xFEBC; + t['sagujarati'] = 0x0AB8; + t['sagurmukhi'] = 0x0A38; + t['sahiragana'] = 0x3055; + t['sakatakana'] = 0x30B5; + t['sakatakanahalfwidth'] = 0xFF7B; + t['sallallahoualayhewasallamarabic'] = 0xFDFA; + t['samekh'] = 0x05E1; + t['samekhdagesh'] = 0xFB41; + t['samekhdageshhebrew'] = 0xFB41; + t['samekhhebrew'] = 0x05E1; + t['saraaathai'] = 0x0E32; + t['saraaethai'] = 0x0E41; + t['saraaimaimalaithai'] = 0x0E44; + t['saraaimaimuanthai'] = 0x0E43; + t['saraamthai'] = 0x0E33; + t['saraathai'] = 0x0E30; + t['saraethai'] = 0x0E40; + t['saraiileftthai'] = 0xF886; + t['saraiithai'] = 0x0E35; + t['saraileftthai'] = 0xF885; + t['saraithai'] = 0x0E34; + t['saraothai'] = 0x0E42; + t['saraueeleftthai'] = 0xF888; + t['saraueethai'] = 0x0E37; + t['saraueleftthai'] = 0xF887; + t['sarauethai'] = 0x0E36; + t['sarauthai'] = 0x0E38; + t['sarauuthai'] = 0x0E39; + t['sbopomofo'] = 0x3119; + t['scaron'] = 0x0161; + t['scarondotaccent'] = 0x1E67; + t['scedilla'] = 0x015F; + t['schwa'] = 0x0259; + t['schwacyrillic'] = 0x04D9; + t['schwadieresiscyrillic'] = 0x04DB; + t['schwahook'] = 0x025A; + t['scircle'] = 0x24E2; + t['scircumflex'] = 0x015D; + t['scommaaccent'] = 0x0219; + t['sdotaccent'] = 0x1E61; + t['sdotbelow'] = 0x1E63; + t['sdotbelowdotaccent'] = 0x1E69; + t['seagullbelowcmb'] = 0x033C; + t['second'] = 0x2033; + t['secondtonechinese'] = 0x02CA; + t['section'] = 0x00A7; + t['seenarabic'] = 0x0633; + t['seenfinalarabic'] = 0xFEB2; + t['seeninitialarabic'] = 0xFEB3; + t['seenmedialarabic'] = 0xFEB4; + t['segol'] = 0x05B6; + t['segol13'] = 0x05B6; + t['segol1f'] = 0x05B6; + t['segol2c'] = 0x05B6; + t['segolhebrew'] = 0x05B6; + t['segolnarrowhebrew'] = 0x05B6; + t['segolquarterhebrew'] = 0x05B6; + t['segoltahebrew'] = 0x0592; + t['segolwidehebrew'] = 0x05B6; + t['seharmenian'] = 0x057D; + t['sehiragana'] = 0x305B; + t['sekatakana'] = 0x30BB; + t['sekatakanahalfwidth'] = 0xFF7E; + t['semicolon'] = 0x003B; + t['semicolonarabic'] = 0x061B; + t['semicolonmonospace'] = 0xFF1B; + t['semicolonsmall'] = 0xFE54; + t['semivoicedmarkkana'] = 0x309C; + t['semivoicedmarkkanahalfwidth'] = 0xFF9F; + t['sentisquare'] = 0x3322; + t['sentosquare'] = 0x3323; + t['seven'] = 0x0037; + t['sevenarabic'] = 0x0667; + t['sevenbengali'] = 0x09ED; + t['sevencircle'] = 0x2466; + t['sevencircleinversesansserif'] = 0x2790; + t['sevendeva'] = 0x096D; + t['seveneighths'] = 0x215E; + t['sevengujarati'] = 0x0AED; + t['sevengurmukhi'] = 0x0A6D; + t['sevenhackarabic'] = 0x0667; + t['sevenhangzhou'] = 0x3027; + t['sevenideographicparen'] = 0x3226; + t['seveninferior'] = 0x2087; + t['sevenmonospace'] = 0xFF17; + t['sevenoldstyle'] = 0xF737; + t['sevenparen'] = 0x247A; + t['sevenperiod'] = 0x248E; + t['sevenpersian'] = 0x06F7; + t['sevenroman'] = 0x2176; + t['sevensuperior'] = 0x2077; + t['seventeencircle'] = 0x2470; + t['seventeenparen'] = 0x2484; + t['seventeenperiod'] = 0x2498; + t['seventhai'] = 0x0E57; + t['sfthyphen'] = 0x00AD; + t['shaarmenian'] = 0x0577; + t['shabengali'] = 0x09B6; + t['shacyrillic'] = 0x0448; + t['shaddaarabic'] = 0x0651; + t['shaddadammaarabic'] = 0xFC61; + t['shaddadammatanarabic'] = 0xFC5E; + t['shaddafathaarabic'] = 0xFC60; + t['shaddakasraarabic'] = 0xFC62; + t['shaddakasratanarabic'] = 0xFC5F; + t['shade'] = 0x2592; + t['shadedark'] = 0x2593; + t['shadelight'] = 0x2591; + t['shademedium'] = 0x2592; + t['shadeva'] = 0x0936; + t['shagujarati'] = 0x0AB6; + t['shagurmukhi'] = 0x0A36; + t['shalshelethebrew'] = 0x0593; + t['shbopomofo'] = 0x3115; + t['shchacyrillic'] = 0x0449; + t['sheenarabic'] = 0x0634; + t['sheenfinalarabic'] = 0xFEB6; + t['sheeninitialarabic'] = 0xFEB7; + t['sheenmedialarabic'] = 0xFEB8; + t['sheicoptic'] = 0x03E3; + t['sheqel'] = 0x20AA; + t['sheqelhebrew'] = 0x20AA; + t['sheva'] = 0x05B0; + t['sheva115'] = 0x05B0; + t['sheva15'] = 0x05B0; + t['sheva22'] = 0x05B0; + t['sheva2e'] = 0x05B0; + t['shevahebrew'] = 0x05B0; + t['shevanarrowhebrew'] = 0x05B0; + t['shevaquarterhebrew'] = 0x05B0; + t['shevawidehebrew'] = 0x05B0; + t['shhacyrillic'] = 0x04BB; + t['shimacoptic'] = 0x03ED; + t['shin'] = 0x05E9; + t['shindagesh'] = 0xFB49; + t['shindageshhebrew'] = 0xFB49; + t['shindageshshindot'] = 0xFB2C; + t['shindageshshindothebrew'] = 0xFB2C; + t['shindageshsindot'] = 0xFB2D; + t['shindageshsindothebrew'] = 0xFB2D; + t['shindothebrew'] = 0x05C1; + t['shinhebrew'] = 0x05E9; + t['shinshindot'] = 0xFB2A; + t['shinshindothebrew'] = 0xFB2A; + t['shinsindot'] = 0xFB2B; + t['shinsindothebrew'] = 0xFB2B; + t['shook'] = 0x0282; + t['sigma'] = 0x03C3; + t['sigma1'] = 0x03C2; + t['sigmafinal'] = 0x03C2; + t['sigmalunatesymbolgreek'] = 0x03F2; + t['sihiragana'] = 0x3057; + t['sikatakana'] = 0x30B7; + t['sikatakanahalfwidth'] = 0xFF7C; + t['siluqhebrew'] = 0x05BD; + t['siluqlefthebrew'] = 0x05BD; + t['similar'] = 0x223C; + t['sindothebrew'] = 0x05C2; + t['siosacirclekorean'] = 0x3274; + t['siosaparenkorean'] = 0x3214; + t['sioscieuckorean'] = 0x317E; + t['sioscirclekorean'] = 0x3266; + t['sioskiyeokkorean'] = 0x317A; + t['sioskorean'] = 0x3145; + t['siosnieunkorean'] = 0x317B; + t['siosparenkorean'] = 0x3206; + t['siospieupkorean'] = 0x317D; + t['siostikeutkorean'] = 0x317C; + t['six'] = 0x0036; + t['sixarabic'] = 0x0666; + t['sixbengali'] = 0x09EC; + t['sixcircle'] = 0x2465; + t['sixcircleinversesansserif'] = 0x278F; + t['sixdeva'] = 0x096C; + t['sixgujarati'] = 0x0AEC; + t['sixgurmukhi'] = 0x0A6C; + t['sixhackarabic'] = 0x0666; + t['sixhangzhou'] = 0x3026; + t['sixideographicparen'] = 0x3225; + t['sixinferior'] = 0x2086; + t['sixmonospace'] = 0xFF16; + t['sixoldstyle'] = 0xF736; + t['sixparen'] = 0x2479; + t['sixperiod'] = 0x248D; + t['sixpersian'] = 0x06F6; + t['sixroman'] = 0x2175; + t['sixsuperior'] = 0x2076; + t['sixteencircle'] = 0x246F; + t['sixteencurrencydenominatorbengali'] = 0x09F9; + t['sixteenparen'] = 0x2483; + t['sixteenperiod'] = 0x2497; + t['sixthai'] = 0x0E56; + t['slash'] = 0x002F; + t['slashmonospace'] = 0xFF0F; + t['slong'] = 0x017F; + t['slongdotaccent'] = 0x1E9B; + t['smileface'] = 0x263A; + t['smonospace'] = 0xFF53; + t['sofpasuqhebrew'] = 0x05C3; + t['softhyphen'] = 0x00AD; + t['softsigncyrillic'] = 0x044C; + t['sohiragana'] = 0x305D; + t['sokatakana'] = 0x30BD; + t['sokatakanahalfwidth'] = 0xFF7F; + t['soliduslongoverlaycmb'] = 0x0338; + t['solidusshortoverlaycmb'] = 0x0337; + t['sorusithai'] = 0x0E29; + t['sosalathai'] = 0x0E28; + t['sosothai'] = 0x0E0B; + t['sosuathai'] = 0x0E2A; + t['space'] = 0x0020; + t['spacehackarabic'] = 0x0020; + t['spade'] = 0x2660; + t['spadesuitblack'] = 0x2660; + t['spadesuitwhite'] = 0x2664; + t['sparen'] = 0x24AE; + t['squarebelowcmb'] = 0x033B; + t['squarecc'] = 0x33C4; + t['squarecm'] = 0x339D; + t['squarediagonalcrosshatchfill'] = 0x25A9; + t['squarehorizontalfill'] = 0x25A4; + t['squarekg'] = 0x338F; + t['squarekm'] = 0x339E; + t['squarekmcapital'] = 0x33CE; + t['squareln'] = 0x33D1; + t['squarelog'] = 0x33D2; + t['squaremg'] = 0x338E; + t['squaremil'] = 0x33D5; + t['squaremm'] = 0x339C; + t['squaremsquared'] = 0x33A1; + t['squareorthogonalcrosshatchfill'] = 0x25A6; + t['squareupperlefttolowerrightfill'] = 0x25A7; + t['squareupperrighttolowerleftfill'] = 0x25A8; + t['squareverticalfill'] = 0x25A5; + t['squarewhitewithsmallblack'] = 0x25A3; + t['srsquare'] = 0x33DB; + t['ssabengali'] = 0x09B7; + t['ssadeva'] = 0x0937; + t['ssagujarati'] = 0x0AB7; + t['ssangcieuckorean'] = 0x3149; + t['ssanghieuhkorean'] = 0x3185; + t['ssangieungkorean'] = 0x3180; + t['ssangkiyeokkorean'] = 0x3132; + t['ssangnieunkorean'] = 0x3165; + t['ssangpieupkorean'] = 0x3143; + t['ssangsioskorean'] = 0x3146; + t['ssangtikeutkorean'] = 0x3138; + t['ssuperior'] = 0xF6F2; + t['sterling'] = 0x00A3; + t['sterlingmonospace'] = 0xFFE1; + t['strokelongoverlaycmb'] = 0x0336; + t['strokeshortoverlaycmb'] = 0x0335; + t['subset'] = 0x2282; + t['subsetnotequal'] = 0x228A; + t['subsetorequal'] = 0x2286; + t['succeeds'] = 0x227B; + t['suchthat'] = 0x220B; + t['suhiragana'] = 0x3059; + t['sukatakana'] = 0x30B9; + t['sukatakanahalfwidth'] = 0xFF7D; + t['sukunarabic'] = 0x0652; + t['summation'] = 0x2211; + t['sun'] = 0x263C; + t['superset'] = 0x2283; + t['supersetnotequal'] = 0x228B; + t['supersetorequal'] = 0x2287; + t['svsquare'] = 0x33DC; + t['syouwaerasquare'] = 0x337C; + t['t'] = 0x0074; + t['tabengali'] = 0x09A4; + t['tackdown'] = 0x22A4; + t['tackleft'] = 0x22A3; + t['tadeva'] = 0x0924; + t['tagujarati'] = 0x0AA4; + t['tagurmukhi'] = 0x0A24; + t['taharabic'] = 0x0637; + t['tahfinalarabic'] = 0xFEC2; + t['tahinitialarabic'] = 0xFEC3; + t['tahiragana'] = 0x305F; + t['tahmedialarabic'] = 0xFEC4; + t['taisyouerasquare'] = 0x337D; + t['takatakana'] = 0x30BF; + t['takatakanahalfwidth'] = 0xFF80; + t['tatweelarabic'] = 0x0640; + t['tau'] = 0x03C4; + t['tav'] = 0x05EA; + t['tavdages'] = 0xFB4A; + t['tavdagesh'] = 0xFB4A; + t['tavdageshhebrew'] = 0xFB4A; + t['tavhebrew'] = 0x05EA; + t['tbar'] = 0x0167; + t['tbopomofo'] = 0x310A; + t['tcaron'] = 0x0165; + t['tccurl'] = 0x02A8; + t['tcedilla'] = 0x0163; + t['tcheharabic'] = 0x0686; + t['tchehfinalarabic'] = 0xFB7B; + t['tchehinitialarabic'] = 0xFB7C; + t['tchehmedialarabic'] = 0xFB7D; + t['tcircle'] = 0x24E3; + t['tcircumflexbelow'] = 0x1E71; + t['tcommaaccent'] = 0x0163; + t['tdieresis'] = 0x1E97; + t['tdotaccent'] = 0x1E6B; + t['tdotbelow'] = 0x1E6D; + t['tecyrillic'] = 0x0442; + t['tedescendercyrillic'] = 0x04AD; + t['teharabic'] = 0x062A; + t['tehfinalarabic'] = 0xFE96; + t['tehhahinitialarabic'] = 0xFCA2; + t['tehhahisolatedarabic'] = 0xFC0C; + t['tehinitialarabic'] = 0xFE97; + t['tehiragana'] = 0x3066; + t['tehjeeminitialarabic'] = 0xFCA1; + t['tehjeemisolatedarabic'] = 0xFC0B; + t['tehmarbutaarabic'] = 0x0629; + t['tehmarbutafinalarabic'] = 0xFE94; + t['tehmedialarabic'] = 0xFE98; + t['tehmeeminitialarabic'] = 0xFCA4; + t['tehmeemisolatedarabic'] = 0xFC0E; + t['tehnoonfinalarabic'] = 0xFC73; + t['tekatakana'] = 0x30C6; + t['tekatakanahalfwidth'] = 0xFF83; + t['telephone'] = 0x2121; + t['telephoneblack'] = 0x260E; + t['telishagedolahebrew'] = 0x05A0; + t['telishaqetanahebrew'] = 0x05A9; + t['tencircle'] = 0x2469; + t['tenideographicparen'] = 0x3229; + t['tenparen'] = 0x247D; + t['tenperiod'] = 0x2491; + t['tenroman'] = 0x2179; + t['tesh'] = 0x02A7; + t['tet'] = 0x05D8; + t['tetdagesh'] = 0xFB38; + t['tetdageshhebrew'] = 0xFB38; + t['tethebrew'] = 0x05D8; + t['tetsecyrillic'] = 0x04B5; + t['tevirhebrew'] = 0x059B; + t['tevirlefthebrew'] = 0x059B; + t['thabengali'] = 0x09A5; + t['thadeva'] = 0x0925; + t['thagujarati'] = 0x0AA5; + t['thagurmukhi'] = 0x0A25; + t['thalarabic'] = 0x0630; + t['thalfinalarabic'] = 0xFEAC; + t['thanthakhatlowleftthai'] = 0xF898; + t['thanthakhatlowrightthai'] = 0xF897; + t['thanthakhatthai'] = 0x0E4C; + t['thanthakhatupperleftthai'] = 0xF896; + t['theharabic'] = 0x062B; + t['thehfinalarabic'] = 0xFE9A; + t['thehinitialarabic'] = 0xFE9B; + t['thehmedialarabic'] = 0xFE9C; + t['thereexists'] = 0x2203; + t['therefore'] = 0x2234; + t['theta'] = 0x03B8; + t['theta1'] = 0x03D1; + t['thetasymbolgreek'] = 0x03D1; + t['thieuthacirclekorean'] = 0x3279; + t['thieuthaparenkorean'] = 0x3219; + t['thieuthcirclekorean'] = 0x326B; + t['thieuthkorean'] = 0x314C; + t['thieuthparenkorean'] = 0x320B; + t['thirteencircle'] = 0x246C; + t['thirteenparen'] = 0x2480; + t['thirteenperiod'] = 0x2494; + t['thonangmonthothai'] = 0x0E11; + t['thook'] = 0x01AD; + t['thophuthaothai'] = 0x0E12; + t['thorn'] = 0x00FE; + t['thothahanthai'] = 0x0E17; + t['thothanthai'] = 0x0E10; + t['thothongthai'] = 0x0E18; + t['thothungthai'] = 0x0E16; + t['thousandcyrillic'] = 0x0482; + t['thousandsseparatorarabic'] = 0x066C; + t['thousandsseparatorpersian'] = 0x066C; + t['three'] = 0x0033; + t['threearabic'] = 0x0663; + t['threebengali'] = 0x09E9; + t['threecircle'] = 0x2462; + t['threecircleinversesansserif'] = 0x278C; + t['threedeva'] = 0x0969; + t['threeeighths'] = 0x215C; + t['threegujarati'] = 0x0AE9; + t['threegurmukhi'] = 0x0A69; + t['threehackarabic'] = 0x0663; + t['threehangzhou'] = 0x3023; + t['threeideographicparen'] = 0x3222; + t['threeinferior'] = 0x2083; + t['threemonospace'] = 0xFF13; + t['threenumeratorbengali'] = 0x09F6; + t['threeoldstyle'] = 0xF733; + t['threeparen'] = 0x2476; + t['threeperiod'] = 0x248A; + t['threepersian'] = 0x06F3; + t['threequarters'] = 0x00BE; + t['threequartersemdash'] = 0xF6DE; + t['threeroman'] = 0x2172; + t['threesuperior'] = 0x00B3; + t['threethai'] = 0x0E53; + t['thzsquare'] = 0x3394; + t['tihiragana'] = 0x3061; + t['tikatakana'] = 0x30C1; + t['tikatakanahalfwidth'] = 0xFF81; + t['tikeutacirclekorean'] = 0x3270; + t['tikeutaparenkorean'] = 0x3210; + t['tikeutcirclekorean'] = 0x3262; + t['tikeutkorean'] = 0x3137; + t['tikeutparenkorean'] = 0x3202; + t['tilde'] = 0x02DC; + t['tildebelowcmb'] = 0x0330; + t['tildecmb'] = 0x0303; + t['tildecomb'] = 0x0303; + t['tildedoublecmb'] = 0x0360; + t['tildeoperator'] = 0x223C; + t['tildeoverlaycmb'] = 0x0334; + t['tildeverticalcmb'] = 0x033E; + t['timescircle'] = 0x2297; + t['tipehahebrew'] = 0x0596; + t['tipehalefthebrew'] = 0x0596; + t['tippigurmukhi'] = 0x0A70; + t['titlocyrilliccmb'] = 0x0483; + t['tiwnarmenian'] = 0x057F; + t['tlinebelow'] = 0x1E6F; + t['tmonospace'] = 0xFF54; + t['toarmenian'] = 0x0569; + t['tohiragana'] = 0x3068; + t['tokatakana'] = 0x30C8; + t['tokatakanahalfwidth'] = 0xFF84; + t['tonebarextrahighmod'] = 0x02E5; + t['tonebarextralowmod'] = 0x02E9; + t['tonebarhighmod'] = 0x02E6; + t['tonebarlowmod'] = 0x02E8; + t['tonebarmidmod'] = 0x02E7; + t['tonefive'] = 0x01BD; + t['tonesix'] = 0x0185; + t['tonetwo'] = 0x01A8; + t['tonos'] = 0x0384; + t['tonsquare'] = 0x3327; + t['topatakthai'] = 0x0E0F; + t['tortoiseshellbracketleft'] = 0x3014; + t['tortoiseshellbracketleftsmall'] = 0xFE5D; + t['tortoiseshellbracketleftvertical'] = 0xFE39; + t['tortoiseshellbracketright'] = 0x3015; + t['tortoiseshellbracketrightsmall'] = 0xFE5E; + t['tortoiseshellbracketrightvertical'] = 0xFE3A; + t['totaothai'] = 0x0E15; + t['tpalatalhook'] = 0x01AB; + t['tparen'] = 0x24AF; + t['trademark'] = 0x2122; + t['trademarksans'] = 0xF8EA; + t['trademarkserif'] = 0xF6DB; + t['tretroflexhook'] = 0x0288; + t['triagdn'] = 0x25BC; + t['triaglf'] = 0x25C4; + t['triagrt'] = 0x25BA; + t['triagup'] = 0x25B2; + t['ts'] = 0x02A6; + t['tsadi'] = 0x05E6; + t['tsadidagesh'] = 0xFB46; + t['tsadidageshhebrew'] = 0xFB46; + t['tsadihebrew'] = 0x05E6; + t['tsecyrillic'] = 0x0446; + t['tsere'] = 0x05B5; + t['tsere12'] = 0x05B5; + t['tsere1e'] = 0x05B5; + t['tsere2b'] = 0x05B5; + t['tserehebrew'] = 0x05B5; + t['tserenarrowhebrew'] = 0x05B5; + t['tserequarterhebrew'] = 0x05B5; + t['tserewidehebrew'] = 0x05B5; + t['tshecyrillic'] = 0x045B; + t['tsuperior'] = 0xF6F3; + t['ttabengali'] = 0x099F; + t['ttadeva'] = 0x091F; + t['ttagujarati'] = 0x0A9F; + t['ttagurmukhi'] = 0x0A1F; + t['tteharabic'] = 0x0679; + t['ttehfinalarabic'] = 0xFB67; + t['ttehinitialarabic'] = 0xFB68; + t['ttehmedialarabic'] = 0xFB69; + t['tthabengali'] = 0x09A0; + t['tthadeva'] = 0x0920; + t['tthagujarati'] = 0x0AA0; + t['tthagurmukhi'] = 0x0A20; + t['tturned'] = 0x0287; + t['tuhiragana'] = 0x3064; + t['tukatakana'] = 0x30C4; + t['tukatakanahalfwidth'] = 0xFF82; + t['tusmallhiragana'] = 0x3063; + t['tusmallkatakana'] = 0x30C3; + t['tusmallkatakanahalfwidth'] = 0xFF6F; + t['twelvecircle'] = 0x246B; + t['twelveparen'] = 0x247F; + t['twelveperiod'] = 0x2493; + t['twelveroman'] = 0x217B; + t['twentycircle'] = 0x2473; + t['twentyhangzhou'] = 0x5344; + t['twentyparen'] = 0x2487; + t['twentyperiod'] = 0x249B; + t['two'] = 0x0032; + t['twoarabic'] = 0x0662; + t['twobengali'] = 0x09E8; + t['twocircle'] = 0x2461; + t['twocircleinversesansserif'] = 0x278B; + t['twodeva'] = 0x0968; + t['twodotenleader'] = 0x2025; + t['twodotleader'] = 0x2025; + t['twodotleadervertical'] = 0xFE30; + t['twogujarati'] = 0x0AE8; + t['twogurmukhi'] = 0x0A68; + t['twohackarabic'] = 0x0662; + t['twohangzhou'] = 0x3022; + t['twoideographicparen'] = 0x3221; + t['twoinferior'] = 0x2082; + t['twomonospace'] = 0xFF12; + t['twonumeratorbengali'] = 0x09F5; + t['twooldstyle'] = 0xF732; + t['twoparen'] = 0x2475; + t['twoperiod'] = 0x2489; + t['twopersian'] = 0x06F2; + t['tworoman'] = 0x2171; + t['twostroke'] = 0x01BB; + t['twosuperior'] = 0x00B2; + t['twothai'] = 0x0E52; + t['twothirds'] = 0x2154; + t['u'] = 0x0075; + t['uacute'] = 0x00FA; + t['ubar'] = 0x0289; + t['ubengali'] = 0x0989; + t['ubopomofo'] = 0x3128; + t['ubreve'] = 0x016D; + t['ucaron'] = 0x01D4; + t['ucircle'] = 0x24E4; + t['ucircumflex'] = 0x00FB; + t['ucircumflexbelow'] = 0x1E77; + t['ucyrillic'] = 0x0443; + t['udattadeva'] = 0x0951; + t['udblacute'] = 0x0171; + t['udblgrave'] = 0x0215; + t['udeva'] = 0x0909; + t['udieresis'] = 0x00FC; + t['udieresisacute'] = 0x01D8; + t['udieresisbelow'] = 0x1E73; + t['udieresiscaron'] = 0x01DA; + t['udieresiscyrillic'] = 0x04F1; + t['udieresisgrave'] = 0x01DC; + t['udieresismacron'] = 0x01D6; + t['udotbelow'] = 0x1EE5; + t['ugrave'] = 0x00F9; + t['ugujarati'] = 0x0A89; + t['ugurmukhi'] = 0x0A09; + t['uhiragana'] = 0x3046; + t['uhookabove'] = 0x1EE7; + t['uhorn'] = 0x01B0; + t['uhornacute'] = 0x1EE9; + t['uhorndotbelow'] = 0x1EF1; + t['uhorngrave'] = 0x1EEB; + t['uhornhookabove'] = 0x1EED; + t['uhorntilde'] = 0x1EEF; + t['uhungarumlaut'] = 0x0171; + t['uhungarumlautcyrillic'] = 0x04F3; + t['uinvertedbreve'] = 0x0217; + t['ukatakana'] = 0x30A6; + t['ukatakanahalfwidth'] = 0xFF73; + t['ukcyrillic'] = 0x0479; + t['ukorean'] = 0x315C; + t['umacron'] = 0x016B; + t['umacroncyrillic'] = 0x04EF; + t['umacrondieresis'] = 0x1E7B; + t['umatragurmukhi'] = 0x0A41; + t['umonospace'] = 0xFF55; + t['underscore'] = 0x005F; + t['underscoredbl'] = 0x2017; + t['underscoremonospace'] = 0xFF3F; + t['underscorevertical'] = 0xFE33; + t['underscorewavy'] = 0xFE4F; + t['union'] = 0x222A; + t['universal'] = 0x2200; + t['uogonek'] = 0x0173; + t['uparen'] = 0x24B0; + t['upblock'] = 0x2580; + t['upperdothebrew'] = 0x05C4; + t['upsilon'] = 0x03C5; + t['upsilondieresis'] = 0x03CB; + t['upsilondieresistonos'] = 0x03B0; + t['upsilonlatin'] = 0x028A; + t['upsilontonos'] = 0x03CD; + t['uptackbelowcmb'] = 0x031D; + t['uptackmod'] = 0x02D4; + t['uragurmukhi'] = 0x0A73; + t['uring'] = 0x016F; + t['ushortcyrillic'] = 0x045E; + t['usmallhiragana'] = 0x3045; + t['usmallkatakana'] = 0x30A5; + t['usmallkatakanahalfwidth'] = 0xFF69; + t['ustraightcyrillic'] = 0x04AF; + t['ustraightstrokecyrillic'] = 0x04B1; + t['utilde'] = 0x0169; + t['utildeacute'] = 0x1E79; + t['utildebelow'] = 0x1E75; + t['uubengali'] = 0x098A; + t['uudeva'] = 0x090A; + t['uugujarati'] = 0x0A8A; + t['uugurmukhi'] = 0x0A0A; + t['uumatragurmukhi'] = 0x0A42; + t['uuvowelsignbengali'] = 0x09C2; + t['uuvowelsigndeva'] = 0x0942; + t['uuvowelsigngujarati'] = 0x0AC2; + t['uvowelsignbengali'] = 0x09C1; + t['uvowelsigndeva'] = 0x0941; + t['uvowelsigngujarati'] = 0x0AC1; + t['v'] = 0x0076; + t['vadeva'] = 0x0935; + t['vagujarati'] = 0x0AB5; + t['vagurmukhi'] = 0x0A35; + t['vakatakana'] = 0x30F7; + t['vav'] = 0x05D5; + t['vavdagesh'] = 0xFB35; + t['vavdagesh65'] = 0xFB35; + t['vavdageshhebrew'] = 0xFB35; + t['vavhebrew'] = 0x05D5; + t['vavholam'] = 0xFB4B; + t['vavholamhebrew'] = 0xFB4B; + t['vavvavhebrew'] = 0x05F0; + t['vavyodhebrew'] = 0x05F1; + t['vcircle'] = 0x24E5; + t['vdotbelow'] = 0x1E7F; + t['vecyrillic'] = 0x0432; + t['veharabic'] = 0x06A4; + t['vehfinalarabic'] = 0xFB6B; + t['vehinitialarabic'] = 0xFB6C; + t['vehmedialarabic'] = 0xFB6D; + t['vekatakana'] = 0x30F9; + t['venus'] = 0x2640; + t['verticalbar'] = 0x007C; + t['verticallineabovecmb'] = 0x030D; + t['verticallinebelowcmb'] = 0x0329; + t['verticallinelowmod'] = 0x02CC; + t['verticallinemod'] = 0x02C8; + t['vewarmenian'] = 0x057E; + t['vhook'] = 0x028B; + t['vikatakana'] = 0x30F8; + t['viramabengali'] = 0x09CD; + t['viramadeva'] = 0x094D; + t['viramagujarati'] = 0x0ACD; + t['visargabengali'] = 0x0983; + t['visargadeva'] = 0x0903; + t['visargagujarati'] = 0x0A83; + t['vmonospace'] = 0xFF56; + t['voarmenian'] = 0x0578; + t['voicediterationhiragana'] = 0x309E; + t['voicediterationkatakana'] = 0x30FE; + t['voicedmarkkana'] = 0x309B; + t['voicedmarkkanahalfwidth'] = 0xFF9E; + t['vokatakana'] = 0x30FA; + t['vparen'] = 0x24B1; + t['vtilde'] = 0x1E7D; + t['vturned'] = 0x028C; + t['vuhiragana'] = 0x3094; + t['vukatakana'] = 0x30F4; + t['w'] = 0x0077; + t['wacute'] = 0x1E83; + t['waekorean'] = 0x3159; + t['wahiragana'] = 0x308F; + t['wakatakana'] = 0x30EF; + t['wakatakanahalfwidth'] = 0xFF9C; + t['wakorean'] = 0x3158; + t['wasmallhiragana'] = 0x308E; + t['wasmallkatakana'] = 0x30EE; + t['wattosquare'] = 0x3357; + t['wavedash'] = 0x301C; + t['wavyunderscorevertical'] = 0xFE34; + t['wawarabic'] = 0x0648; + t['wawfinalarabic'] = 0xFEEE; + t['wawhamzaabovearabic'] = 0x0624; + t['wawhamzaabovefinalarabic'] = 0xFE86; + t['wbsquare'] = 0x33DD; + t['wcircle'] = 0x24E6; + t['wcircumflex'] = 0x0175; + t['wdieresis'] = 0x1E85; + t['wdotaccent'] = 0x1E87; + t['wdotbelow'] = 0x1E89; + t['wehiragana'] = 0x3091; + t['weierstrass'] = 0x2118; + t['wekatakana'] = 0x30F1; + t['wekorean'] = 0x315E; + t['weokorean'] = 0x315D; + t['wgrave'] = 0x1E81; + t['whitebullet'] = 0x25E6; + t['whitecircle'] = 0x25CB; + t['whitecircleinverse'] = 0x25D9; + t['whitecornerbracketleft'] = 0x300E; + t['whitecornerbracketleftvertical'] = 0xFE43; + t['whitecornerbracketright'] = 0x300F; + t['whitecornerbracketrightvertical'] = 0xFE44; + t['whitediamond'] = 0x25C7; + t['whitediamondcontainingblacksmalldiamond'] = 0x25C8; + t['whitedownpointingsmalltriangle'] = 0x25BF; + t['whitedownpointingtriangle'] = 0x25BD; + t['whiteleftpointingsmalltriangle'] = 0x25C3; + t['whiteleftpointingtriangle'] = 0x25C1; + t['whitelenticularbracketleft'] = 0x3016; + t['whitelenticularbracketright'] = 0x3017; + t['whiterightpointingsmalltriangle'] = 0x25B9; + t['whiterightpointingtriangle'] = 0x25B7; + t['whitesmallsquare'] = 0x25AB; + t['whitesmilingface'] = 0x263A; + t['whitesquare'] = 0x25A1; + t['whitestar'] = 0x2606; + t['whitetelephone'] = 0x260F; + t['whitetortoiseshellbracketleft'] = 0x3018; + t['whitetortoiseshellbracketright'] = 0x3019; + t['whiteuppointingsmalltriangle'] = 0x25B5; + t['whiteuppointingtriangle'] = 0x25B3; + t['wihiragana'] = 0x3090; + t['wikatakana'] = 0x30F0; + t['wikorean'] = 0x315F; + t['wmonospace'] = 0xFF57; + t['wohiragana'] = 0x3092; + t['wokatakana'] = 0x30F2; + t['wokatakanahalfwidth'] = 0xFF66; + t['won'] = 0x20A9; + t['wonmonospace'] = 0xFFE6; + t['wowaenthai'] = 0x0E27; + t['wparen'] = 0x24B2; + t['wring'] = 0x1E98; + t['wsuperior'] = 0x02B7; + t['wturned'] = 0x028D; + t['wynn'] = 0x01BF; + t['x'] = 0x0078; + t['xabovecmb'] = 0x033D; + t['xbopomofo'] = 0x3112; + t['xcircle'] = 0x24E7; + t['xdieresis'] = 0x1E8D; + t['xdotaccent'] = 0x1E8B; + t['xeharmenian'] = 0x056D; + t['xi'] = 0x03BE; + t['xmonospace'] = 0xFF58; + t['xparen'] = 0x24B3; + t['xsuperior'] = 0x02E3; + t['y'] = 0x0079; + t['yaadosquare'] = 0x334E; + t['yabengali'] = 0x09AF; + t['yacute'] = 0x00FD; + t['yadeva'] = 0x092F; + t['yaekorean'] = 0x3152; + t['yagujarati'] = 0x0AAF; + t['yagurmukhi'] = 0x0A2F; + t['yahiragana'] = 0x3084; + t['yakatakana'] = 0x30E4; + t['yakatakanahalfwidth'] = 0xFF94; + t['yakorean'] = 0x3151; + t['yamakkanthai'] = 0x0E4E; + t['yasmallhiragana'] = 0x3083; + t['yasmallkatakana'] = 0x30E3; + t['yasmallkatakanahalfwidth'] = 0xFF6C; + t['yatcyrillic'] = 0x0463; + t['ycircle'] = 0x24E8; + t['ycircumflex'] = 0x0177; + t['ydieresis'] = 0x00FF; + t['ydotaccent'] = 0x1E8F; + t['ydotbelow'] = 0x1EF5; + t['yeharabic'] = 0x064A; + t['yehbarreearabic'] = 0x06D2; + t['yehbarreefinalarabic'] = 0xFBAF; + t['yehfinalarabic'] = 0xFEF2; + t['yehhamzaabovearabic'] = 0x0626; + t['yehhamzaabovefinalarabic'] = 0xFE8A; + t['yehhamzaaboveinitialarabic'] = 0xFE8B; + t['yehhamzaabovemedialarabic'] = 0xFE8C; + t['yehinitialarabic'] = 0xFEF3; + t['yehmedialarabic'] = 0xFEF4; + t['yehmeeminitialarabic'] = 0xFCDD; + t['yehmeemisolatedarabic'] = 0xFC58; + t['yehnoonfinalarabic'] = 0xFC94; + t['yehthreedotsbelowarabic'] = 0x06D1; + t['yekorean'] = 0x3156; + t['yen'] = 0x00A5; + t['yenmonospace'] = 0xFFE5; + t['yeokorean'] = 0x3155; + t['yeorinhieuhkorean'] = 0x3186; + t['yerahbenyomohebrew'] = 0x05AA; + t['yerahbenyomolefthebrew'] = 0x05AA; + t['yericyrillic'] = 0x044B; + t['yerudieresiscyrillic'] = 0x04F9; + t['yesieungkorean'] = 0x3181; + t['yesieungpansioskorean'] = 0x3183; + t['yesieungsioskorean'] = 0x3182; + t['yetivhebrew'] = 0x059A; + t['ygrave'] = 0x1EF3; + t['yhook'] = 0x01B4; + t['yhookabove'] = 0x1EF7; + t['yiarmenian'] = 0x0575; + t['yicyrillic'] = 0x0457; + t['yikorean'] = 0x3162; + t['yinyang'] = 0x262F; + t['yiwnarmenian'] = 0x0582; + t['ymonospace'] = 0xFF59; + t['yod'] = 0x05D9; + t['yoddagesh'] = 0xFB39; + t['yoddageshhebrew'] = 0xFB39; + t['yodhebrew'] = 0x05D9; + t['yodyodhebrew'] = 0x05F2; + t['yodyodpatahhebrew'] = 0xFB1F; + t['yohiragana'] = 0x3088; + t['yoikorean'] = 0x3189; + t['yokatakana'] = 0x30E8; + t['yokatakanahalfwidth'] = 0xFF96; + t['yokorean'] = 0x315B; + t['yosmallhiragana'] = 0x3087; + t['yosmallkatakana'] = 0x30E7; + t['yosmallkatakanahalfwidth'] = 0xFF6E; + t['yotgreek'] = 0x03F3; + t['yoyaekorean'] = 0x3188; + t['yoyakorean'] = 0x3187; + t['yoyakthai'] = 0x0E22; + t['yoyingthai'] = 0x0E0D; + t['yparen'] = 0x24B4; + t['ypogegrammeni'] = 0x037A; + t['ypogegrammenigreekcmb'] = 0x0345; + t['yr'] = 0x01A6; + t['yring'] = 0x1E99; + t['ysuperior'] = 0x02B8; + t['ytilde'] = 0x1EF9; + t['yturned'] = 0x028E; + t['yuhiragana'] = 0x3086; + t['yuikorean'] = 0x318C; + t['yukatakana'] = 0x30E6; + t['yukatakanahalfwidth'] = 0xFF95; + t['yukorean'] = 0x3160; + t['yusbigcyrillic'] = 0x046B; + t['yusbigiotifiedcyrillic'] = 0x046D; + t['yuslittlecyrillic'] = 0x0467; + t['yuslittleiotifiedcyrillic'] = 0x0469; + t['yusmallhiragana'] = 0x3085; + t['yusmallkatakana'] = 0x30E5; + t['yusmallkatakanahalfwidth'] = 0xFF6D; + t['yuyekorean'] = 0x318B; + t['yuyeokorean'] = 0x318A; + t['yyabengali'] = 0x09DF; + t['yyadeva'] = 0x095F; + t['z'] = 0x007A; + t['zaarmenian'] = 0x0566; + t['zacute'] = 0x017A; + t['zadeva'] = 0x095B; + t['zagurmukhi'] = 0x0A5B; + t['zaharabic'] = 0x0638; + t['zahfinalarabic'] = 0xFEC6; + t['zahinitialarabic'] = 0xFEC7; + t['zahiragana'] = 0x3056; + t['zahmedialarabic'] = 0xFEC8; + t['zainarabic'] = 0x0632; + t['zainfinalarabic'] = 0xFEB0; + t['zakatakana'] = 0x30B6; + t['zaqefgadolhebrew'] = 0x0595; + t['zaqefqatanhebrew'] = 0x0594; + t['zarqahebrew'] = 0x0598; + t['zayin'] = 0x05D6; + t['zayindagesh'] = 0xFB36; + t['zayindageshhebrew'] = 0xFB36; + t['zayinhebrew'] = 0x05D6; + t['zbopomofo'] = 0x3117; + t['zcaron'] = 0x017E; + t['zcircle'] = 0x24E9; + t['zcircumflex'] = 0x1E91; + t['zcurl'] = 0x0291; + t['zdot'] = 0x017C; + t['zdotaccent'] = 0x017C; + t['zdotbelow'] = 0x1E93; + t['zecyrillic'] = 0x0437; + t['zedescendercyrillic'] = 0x0499; + t['zedieresiscyrillic'] = 0x04DF; + t['zehiragana'] = 0x305C; + t['zekatakana'] = 0x30BC; + t['zero'] = 0x0030; + t['zeroarabic'] = 0x0660; + t['zerobengali'] = 0x09E6; + t['zerodeva'] = 0x0966; + t['zerogujarati'] = 0x0AE6; + t['zerogurmukhi'] = 0x0A66; + t['zerohackarabic'] = 0x0660; + t['zeroinferior'] = 0x2080; + t['zeromonospace'] = 0xFF10; + t['zerooldstyle'] = 0xF730; + t['zeropersian'] = 0x06F0; + t['zerosuperior'] = 0x2070; + t['zerothai'] = 0x0E50; + t['zerowidthjoiner'] = 0xFEFF; + t['zerowidthnonjoiner'] = 0x200C; + t['zerowidthspace'] = 0x200B; + t['zeta'] = 0x03B6; + t['zhbopomofo'] = 0x3113; + t['zhearmenian'] = 0x056A; + t['zhebrevecyrillic'] = 0x04C2; + t['zhecyrillic'] = 0x0436; + t['zhedescendercyrillic'] = 0x0497; + t['zhedieresiscyrillic'] = 0x04DD; + t['zihiragana'] = 0x3058; + t['zikatakana'] = 0x30B8; + t['zinorhebrew'] = 0x05AE; + t['zlinebelow'] = 0x1E95; + t['zmonospace'] = 0xFF5A; + t['zohiragana'] = 0x305E; + t['zokatakana'] = 0x30BE; + t['zparen'] = 0x24B5; + t['zretroflexhook'] = 0x0290; + t['zstroke'] = 0x01B6; + t['zuhiragana'] = 0x305A; + t['zukatakana'] = 0x30BA; + t['.notdef'] = 0x0000; + t['angbracketleftbig'] = 0x2329; + t['angbracketleftBig'] = 0x2329; + t['angbracketleftbigg'] = 0x2329; + t['angbracketleftBigg'] = 0x2329; + t['angbracketrightBig'] = 0x232A; + t['angbracketrightbig'] = 0x232A; + t['angbracketrightBigg'] = 0x232A; + t['angbracketrightbigg'] = 0x232A; + t['arrowhookleft'] = 0x21AA; + t['arrowhookright'] = 0x21A9; + t['arrowlefttophalf'] = 0x21BC; + t['arrowleftbothalf'] = 0x21BD; + t['arrownortheast'] = 0x2197; + t['arrownorthwest'] = 0x2196; + t['arrowrighttophalf'] = 0x21C0; + t['arrowrightbothalf'] = 0x21C1; + t['arrowsoutheast'] = 0x2198; + t['arrowsouthwest'] = 0x2199; + t['backslashbig'] = 0x2216; + t['backslashBig'] = 0x2216; + t['backslashBigg'] = 0x2216; + t['backslashbigg'] = 0x2216; + t['bardbl'] = 0x2016; + t['bracehtipdownleft'] = 0xFE37; + t['bracehtipdownright'] = 0xFE37; + t['bracehtipupleft'] = 0xFE38; + t['bracehtipupright'] = 0xFE38; + t['braceleftBig'] = 0x007B; + t['braceleftbig'] = 0x007B; + t['braceleftbigg'] = 0x007B; + t['braceleftBigg'] = 0x007B; + t['bracerightBig'] = 0x007D; + t['bracerightbig'] = 0x007D; + t['bracerightbigg'] = 0x007D; + t['bracerightBigg'] = 0x007D; + t['bracketleftbig'] = 0x005B; + t['bracketleftBig'] = 0x005B; + t['bracketleftbigg'] = 0x005B; + t['bracketleftBigg'] = 0x005B; + t['bracketrightBig'] = 0x005D; + t['bracketrightbig'] = 0x005D; + t['bracketrightbigg'] = 0x005D; + t['bracketrightBigg'] = 0x005D; + t['ceilingleftbig'] = 0x2308; + t['ceilingleftBig'] = 0x2308; + t['ceilingleftBigg'] = 0x2308; + t['ceilingleftbigg'] = 0x2308; + t['ceilingrightbig'] = 0x2309; + t['ceilingrightBig'] = 0x2309; + t['ceilingrightbigg'] = 0x2309; + t['ceilingrightBigg'] = 0x2309; + t['circledotdisplay'] = 0x2299; + t['circledottext'] = 0x2299; + t['circlemultiplydisplay'] = 0x2297; + t['circlemultiplytext'] = 0x2297; + t['circleplusdisplay'] = 0x2295; + t['circleplustext'] = 0x2295; + t['contintegraldisplay'] = 0x222E; + t['contintegraltext'] = 0x222E; + t['coproductdisplay'] = 0x2210; + t['coproducttext'] = 0x2210; + t['floorleftBig'] = 0x230A; + t['floorleftbig'] = 0x230A; + t['floorleftbigg'] = 0x230A; + t['floorleftBigg'] = 0x230A; + t['floorrightbig'] = 0x230B; + t['floorrightBig'] = 0x230B; + t['floorrightBigg'] = 0x230B; + t['floorrightbigg'] = 0x230B; + t['hatwide'] = 0x0302; + t['hatwider'] = 0x0302; + t['hatwidest'] = 0x0302; + t['intercal'] = 0x1D40; + t['integraldisplay'] = 0x222B; + t['integraltext'] = 0x222B; + t['intersectiondisplay'] = 0x22C2; + t['intersectiontext'] = 0x22C2; + t['logicalanddisplay'] = 0x2227; + t['logicalandtext'] = 0x2227; + t['logicalordisplay'] = 0x2228; + t['logicalortext'] = 0x2228; + t['parenleftBig'] = 0x0028; + t['parenleftbig'] = 0x0028; + t['parenleftBigg'] = 0x0028; + t['parenleftbigg'] = 0x0028; + t['parenrightBig'] = 0x0029; + t['parenrightbig'] = 0x0029; + t['parenrightBigg'] = 0x0029; + t['parenrightbigg'] = 0x0029; + t['prime'] = 0x2032; + t['productdisplay'] = 0x220F; + t['producttext'] = 0x220F; + t['radicalbig'] = 0x221A; + t['radicalBig'] = 0x221A; + t['radicalBigg'] = 0x221A; + t['radicalbigg'] = 0x221A; + t['radicalbt'] = 0x221A; + t['radicaltp'] = 0x221A; + t['radicalvertex'] = 0x221A; + t['slashbig'] = 0x002F; + t['slashBig'] = 0x002F; + t['slashBigg'] = 0x002F; + t['slashbigg'] = 0x002F; + t['summationdisplay'] = 0x2211; + t['summationtext'] = 0x2211; + t['tildewide'] = 0x02DC; + t['tildewider'] = 0x02DC; + t['tildewidest'] = 0x02DC; + t['uniondisplay'] = 0x22C3; + t['unionmultidisplay'] = 0x228E; + t['unionmultitext'] = 0x228E; + t['unionsqdisplay'] = 0x2294; + t['unionsqtext'] = 0x2294; + t['uniontext'] = 0x22C3; + t['vextenddouble'] = 0x2225; + t['vextendsingle'] = 0x2223; + }); + var getDingbatsGlyphsUnicode = getLookupTableFactory(function (t) { + t['space'] = 0x0020; + t['a1'] = 0x2701; + t['a2'] = 0x2702; + t['a202'] = 0x2703; + t['a3'] = 0x2704; + t['a4'] = 0x260E; + t['a5'] = 0x2706; + t['a119'] = 0x2707; + t['a118'] = 0x2708; + t['a117'] = 0x2709; + t['a11'] = 0x261B; + t['a12'] = 0x261E; + t['a13'] = 0x270C; + t['a14'] = 0x270D; + t['a15'] = 0x270E; + t['a16'] = 0x270F; + t['a105'] = 0x2710; + t['a17'] = 0x2711; + t['a18'] = 0x2712; + t['a19'] = 0x2713; + t['a20'] = 0x2714; + t['a21'] = 0x2715; + t['a22'] = 0x2716; + t['a23'] = 0x2717; + t['a24'] = 0x2718; + t['a25'] = 0x2719; + t['a26'] = 0x271A; + t['a27'] = 0x271B; + t['a28'] = 0x271C; + t['a6'] = 0x271D; + t['a7'] = 0x271E; + t['a8'] = 0x271F; + t['a9'] = 0x2720; + t['a10'] = 0x2721; + t['a29'] = 0x2722; + t['a30'] = 0x2723; + t['a31'] = 0x2724; + t['a32'] = 0x2725; + t['a33'] = 0x2726; + t['a34'] = 0x2727; + t['a35'] = 0x2605; + t['a36'] = 0x2729; + t['a37'] = 0x272A; + t['a38'] = 0x272B; + t['a39'] = 0x272C; + t['a40'] = 0x272D; + t['a41'] = 0x272E; + t['a42'] = 0x272F; + t['a43'] = 0x2730; + t['a44'] = 0x2731; + t['a45'] = 0x2732; + t['a46'] = 0x2733; + t['a47'] = 0x2734; + t['a48'] = 0x2735; + t['a49'] = 0x2736; + t['a50'] = 0x2737; + t['a51'] = 0x2738; + t['a52'] = 0x2739; + t['a53'] = 0x273A; + t['a54'] = 0x273B; + t['a55'] = 0x273C; + t['a56'] = 0x273D; + t['a57'] = 0x273E; + t['a58'] = 0x273F; + t['a59'] = 0x2740; + t['a60'] = 0x2741; + t['a61'] = 0x2742; + t['a62'] = 0x2743; + t['a63'] = 0x2744; + t['a64'] = 0x2745; + t['a65'] = 0x2746; + t['a66'] = 0x2747; + t['a67'] = 0x2748; + t['a68'] = 0x2749; + t['a69'] = 0x274A; + t['a70'] = 0x274B; + t['a71'] = 0x25CF; + t['a72'] = 0x274D; + t['a73'] = 0x25A0; + t['a74'] = 0x274F; + t['a203'] = 0x2750; + t['a75'] = 0x2751; + t['a204'] = 0x2752; + t['a76'] = 0x25B2; + t['a77'] = 0x25BC; + t['a78'] = 0x25C6; + t['a79'] = 0x2756; + t['a81'] = 0x25D7; + t['a82'] = 0x2758; + t['a83'] = 0x2759; + t['a84'] = 0x275A; + t['a97'] = 0x275B; + t['a98'] = 0x275C; + t['a99'] = 0x275D; + t['a100'] = 0x275E; + t['a101'] = 0x2761; + t['a102'] = 0x2762; + t['a103'] = 0x2763; + t['a104'] = 0x2764; + t['a106'] = 0x2765; + t['a107'] = 0x2766; + t['a108'] = 0x2767; + t['a112'] = 0x2663; + t['a111'] = 0x2666; + t['a110'] = 0x2665; + t['a109'] = 0x2660; + t['a120'] = 0x2460; + t['a121'] = 0x2461; + t['a122'] = 0x2462; + t['a123'] = 0x2463; + t['a124'] = 0x2464; + t['a125'] = 0x2465; + t['a126'] = 0x2466; + t['a127'] = 0x2467; + t['a128'] = 0x2468; + t['a129'] = 0x2469; + t['a130'] = 0x2776; + t['a131'] = 0x2777; + t['a132'] = 0x2778; + t['a133'] = 0x2779; + t['a134'] = 0x277A; + t['a135'] = 0x277B; + t['a136'] = 0x277C; + t['a137'] = 0x277D; + t['a138'] = 0x277E; + t['a139'] = 0x277F; + t['a140'] = 0x2780; + t['a141'] = 0x2781; + t['a142'] = 0x2782; + t['a143'] = 0x2783; + t['a144'] = 0x2784; + t['a145'] = 0x2785; + t['a146'] = 0x2786; + t['a147'] = 0x2787; + t['a148'] = 0x2788; + t['a149'] = 0x2789; + t['a150'] = 0x278A; + t['a151'] = 0x278B; + t['a152'] = 0x278C; + t['a153'] = 0x278D; + t['a154'] = 0x278E; + t['a155'] = 0x278F; + t['a156'] = 0x2790; + t['a157'] = 0x2791; + t['a158'] = 0x2792; + t['a159'] = 0x2793; + t['a160'] = 0x2794; + t['a161'] = 0x2192; + t['a163'] = 0x2194; + t['a164'] = 0x2195; + t['a196'] = 0x2798; + t['a165'] = 0x2799; + t['a192'] = 0x279A; + t['a166'] = 0x279B; + t['a167'] = 0x279C; + t['a168'] = 0x279D; + t['a169'] = 0x279E; + t['a170'] = 0x279F; + t['a171'] = 0x27A0; + t['a172'] = 0x27A1; + t['a173'] = 0x27A2; + t['a162'] = 0x27A3; + t['a174'] = 0x27A4; + t['a175'] = 0x27A5; + t['a176'] = 0x27A6; + t['a177'] = 0x27A7; + t['a178'] = 0x27A8; + t['a179'] = 0x27A9; + t['a193'] = 0x27AA; + t['a180'] = 0x27AB; + t['a199'] = 0x27AC; + t['a181'] = 0x27AD; + t['a200'] = 0x27AE; + t['a182'] = 0x27AF; + t['a201'] = 0x27B1; + t['a183'] = 0x27B2; + t['a184'] = 0x27B3; + t['a197'] = 0x27B4; + t['a185'] = 0x27B5; + t['a194'] = 0x27B6; + t['a198'] = 0x27B7; + t['a186'] = 0x27B8; + t['a195'] = 0x27B9; + t['a187'] = 0x27BA; + t['a188'] = 0x27BB; + t['a189'] = 0x27BC; + t['a190'] = 0x27BD; + t['a191'] = 0x27BE; + t['a89'] = 0x2768; + t['a90'] = 0x2769; + t['a93'] = 0x276A; + t['a94'] = 0x276B; + t['a91'] = 0x276C; + t['a92'] = 0x276D; + t['a205'] = 0x276E; + t['a85'] = 0x276F; + t['a206'] = 0x2770; + t['a86'] = 0x2771; + t['a87'] = 0x2772; + t['a88'] = 0x2773; + t['a95'] = 0x2774; + t['a96'] = 0x2775; + t['.notdef'] = 0x0000; + }); + exports.getGlyphsUnicode = getGlyphsUnicode; + exports.getDingbatsGlyphsUnicode = getDingbatsGlyphsUnicode; + })); + (function (root, factory) { + factory(root.pdfjsCoreJbig2 = {}, root.pdfjsSharedUtil, root.pdfjsCoreArithmeticDecoder); + }(this, function (exports, sharedUtil, coreArithmeticDecoder) { + var error = sharedUtil.error; + var log2 = sharedUtil.log2; + var readInt8 = sharedUtil.readInt8; + var readUint16 = sharedUtil.readUint16; + var readUint32 = sharedUtil.readUint32; + var shadow = sharedUtil.shadow; + var ArithmeticDecoder = coreArithmeticDecoder.ArithmeticDecoder; + var Jbig2Image = function Jbig2ImageClosure() { + function ContextCache() { + } + ContextCache.prototype = { + getContexts: function (id) { + if (id in this) { + return this[id]; + } + return this[id] = new Int8Array(1 << 16); + } + }; + function DecodingContext(data, start, end) { + this.data = data; + this.start = start; + this.end = end; + } + DecodingContext.prototype = { + get decoder() { + var decoder = new ArithmeticDecoder(this.data, this.start, this.end); + return shadow(this, 'decoder', decoder); + }, + get contextCache() { + var cache = new ContextCache(); + return shadow(this, 'contextCache', cache); + } + }; + function decodeInteger(contextCache, procedure, decoder) { + var contexts = contextCache.getContexts(procedure); + var prev = 1; + function readBits(length) { + var v = 0; + for (var i = 0; i < length; i++) { + var bit = decoder.readBit(contexts, prev); + prev = prev < 256 ? prev << 1 | bit : (prev << 1 | bit) & 511 | 256; + v = v << 1 | bit; + } + return v >>> 0; + } + var sign = readBits(1); + var value = readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(32) + 4436 : readBits(12) + 340 : readBits(8) + 84 : readBits(6) + 20 : readBits(4) + 4 : readBits(2); + return sign === 0 ? value : value > 0 ? -value : null; + } + function decodeIAID(contextCache, decoder, codeLength) { + var contexts = contextCache.getContexts('IAID'); + var prev = 1; + for (var i = 0; i < codeLength; i++) { + var bit = decoder.readBit(contexts, prev); + prev = prev << 1 | bit; + } + if (codeLength < 31) { + return prev & (1 << codeLength) - 1; + } + return prev & 0x7FFFFFFF; + } + var SegmentTypes = [ + 'SymbolDictionary', + null, + null, + null, + 'IntermediateTextRegion', + null, + 'ImmediateTextRegion', + 'ImmediateLosslessTextRegion', + null, + null, + null, + null, + null, + null, + null, + null, + 'patternDictionary', + null, + null, + null, + 'IntermediateHalftoneRegion', + null, + 'ImmediateHalftoneRegion', + 'ImmediateLosslessHalftoneRegion', + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 'IntermediateGenericRegion', + null, + 'ImmediateGenericRegion', + 'ImmediateLosslessGenericRegion', + 'IntermediateGenericRefinementRegion', + null, + 'ImmediateGenericRefinementRegion', + 'ImmediateLosslessGenericRefinementRegion', + null, + null, + null, + null, + 'PageInformation', + 'EndOfPage', + 'EndOfStripe', + 'EndOfFile', + 'Profiles', + 'Tables', + null, + null, + null, + null, + null, + null, + null, + null, + 'Extension' + ]; + var CodingTemplates = [ + [ + { + x: -1, + y: -2 + }, + { + x: 0, + y: -2 + }, + { + x: 1, + y: -2 + }, + { + x: -2, + y: -1 + }, + { + x: -1, + y: -1 + }, + { + x: 0, + y: -1 + }, + { + x: 1, + y: -1 + }, + { + x: 2, + y: -1 + }, + { + x: -4, + y: 0 + }, + { + x: -3, + y: 0 + }, + { + x: -2, + y: 0 + }, + { + x: -1, + y: 0 + } + ], + [ + { + x: -1, + y: -2 + }, + { + x: 0, + y: -2 + }, + { + x: 1, + y: -2 + }, + { + x: 2, + y: -2 + }, + { + x: -2, + y: -1 + }, + { + x: -1, + y: -1 + }, + { + x: 0, + y: -1 + }, + { + x: 1, + y: -1 + }, + { + x: 2, + y: -1 + }, + { + x: -3, + y: 0 + }, + { + x: -2, + y: 0 + }, + { + x: -1, + y: 0 + } + ], + [ + { + x: -1, + y: -2 + }, + { + x: 0, + y: -2 + }, + { + x: 1, + y: -2 + }, + { + x: -2, + y: -1 + }, + { + x: -1, + y: -1 + }, + { + x: 0, + y: -1 + }, + { + x: 1, + y: -1 + }, + { + x: -2, + y: 0 + }, + { + x: -1, + y: 0 + } + ], + [ + { + x: -3, + y: -1 + }, + { + x: -2, + y: -1 + }, + { + x: -1, + y: -1 + }, + { + x: 0, + y: -1 + }, + { + x: 1, + y: -1 + }, + { + x: -4, + y: 0 + }, + { + x: -3, + y: 0 + }, + { + x: -2, + y: 0 + }, + { + x: -1, + y: 0 + } + ] + ]; + var RefinementTemplates = [ + { + coding: [ + { + x: 0, + y: -1 + }, + { + x: 1, + y: -1 + }, + { + x: -1, + y: 0 + } + ], + reference: [ + { + x: 0, + y: -1 + }, + { + x: 1, + y: -1 + }, + { + x: -1, + y: 0 + }, + { + x: 0, + y: 0 + }, + { + x: 1, + y: 0 + }, + { + x: -1, + y: 1 + }, + { + x: 0, + y: 1 + }, + { + x: 1, + y: 1 + } + ] + }, + { + coding: [ + { + x: -1, + y: -1 + }, + { + x: 0, + y: -1 + }, + { + x: 1, + y: -1 + }, + { + x: -1, + y: 0 + } + ], + reference: [ + { + x: 0, + y: -1 + }, + { + x: -1, + y: 0 + }, + { + x: 0, + y: 0 + }, + { + x: 1, + y: 0 + }, + { + x: 0, + y: 1 + }, + { + x: 1, + y: 1 + } + ] + } + ]; + var ReusedContexts = [ + 0x9B25, + 0x0795, + 0x00E5, + 0x0195 + ]; + var RefinementReusedContexts = [ + 0x0020, + 0x0008 + ]; + function decodeBitmapTemplate0(width, height, decodingContext) { + var decoder = decodingContext.decoder; + var contexts = decodingContext.contextCache.getContexts('GB'); + var contextLabel, i, j, pixel, row, row1, row2, bitmap = []; + var OLD_PIXEL_MASK = 0x7BF7; + for (i = 0; i < height; i++) { + row = bitmap[i] = new Uint8Array(width); + row1 = i < 1 ? row : bitmap[i - 1]; + row2 = i < 2 ? row : bitmap[i - 2]; + contextLabel = row2[0] << 13 | row2[1] << 12 | row2[2] << 11 | row1[0] << 7 | row1[1] << 6 | row1[2] << 5 | row1[3] << 4; + for (j = 0; j < width; j++) { + row[j] = pixel = decoder.readBit(contexts, contextLabel); + contextLabel = (contextLabel & OLD_PIXEL_MASK) << 1 | (j + 3 < width ? row2[j + 3] << 11 : 0) | (j + 4 < width ? row1[j + 4] << 4 : 0) | pixel; + } + } + return bitmap; + } + function decodeBitmap(mmr, width, height, templateIndex, prediction, skip, at, decodingContext) { + if (mmr) { + error('JBIG2 error: MMR encoding is not supported'); + } + if (templateIndex === 0 && !skip && !prediction && at.length === 4 && at[0].x === 3 && at[0].y === -1 && at[1].x === -3 && at[1].y === -1 && at[2].x === 2 && at[2].y === -2 && at[3].x === -2 && at[3].y === -2) { + return decodeBitmapTemplate0(width, height, decodingContext); + } + var useskip = !!skip; + var template = CodingTemplates[templateIndex].concat(at); + template.sort(function (a, b) { + return a.y - b.y || a.x - b.x; + }); + var templateLength = template.length; + var templateX = new Int8Array(templateLength); + var templateY = new Int8Array(templateLength); + var changingTemplateEntries = []; + var reuseMask = 0, minX = 0, maxX = 0, minY = 0; + var c, k; + for (k = 0; k < templateLength; k++) { + templateX[k] = template[k].x; + templateY[k] = template[k].y; + minX = Math.min(minX, template[k].x); + maxX = Math.max(maxX, template[k].x); + minY = Math.min(minY, template[k].y); + if (k < templateLength - 1 && template[k].y === template[k + 1].y && template[k].x === template[k + 1].x - 1) { + reuseMask |= 1 << templateLength - 1 - k; + } else { + changingTemplateEntries.push(k); + } + } + var changingEntriesLength = changingTemplateEntries.length; + var changingTemplateX = new Int8Array(changingEntriesLength); + var changingTemplateY = new Int8Array(changingEntriesLength); + var changingTemplateBit = new Uint16Array(changingEntriesLength); + for (c = 0; c < changingEntriesLength; c++) { + k = changingTemplateEntries[c]; + changingTemplateX[c] = template[k].x; + changingTemplateY[c] = template[k].y; + changingTemplateBit[c] = 1 << templateLength - 1 - k; + } + var sbb_left = -minX; + var sbb_top = -minY; + var sbb_right = width - maxX; + var pseudoPixelContext = ReusedContexts[templateIndex]; + var row = new Uint8Array(width); + var bitmap = []; + var decoder = decodingContext.decoder; + var contexts = decodingContext.contextCache.getContexts('GB'); + var ltp = 0, j, i0, j0, contextLabel = 0, bit, shift; + for (var i = 0; i < height; i++) { + if (prediction) { + var sltp = decoder.readBit(contexts, pseudoPixelContext); + ltp ^= sltp; + if (ltp) { + bitmap.push(row); + continue; + } + } + row = new Uint8Array(row); + bitmap.push(row); + for (j = 0; j < width; j++) { + if (useskip && skip[i][j]) { + row[j] = 0; + continue; + } + if (j >= sbb_left && j < sbb_right && i >= sbb_top) { + contextLabel = contextLabel << 1 & reuseMask; + for (k = 0; k < changingEntriesLength; k++) { + i0 = i + changingTemplateY[k]; + j0 = j + changingTemplateX[k]; + bit = bitmap[i0][j0]; + if (bit) { + bit = changingTemplateBit[k]; + contextLabel |= bit; + } + } + } else { + contextLabel = 0; + shift = templateLength - 1; + for (k = 0; k < templateLength; k++, shift--) { + j0 = j + templateX[k]; + if (j0 >= 0 && j0 < width) { + i0 = i + templateY[k]; + if (i0 >= 0) { + bit = bitmap[i0][j0]; + if (bit) { + contextLabel |= bit << shift; + } + } + } + } + } + var pixel = decoder.readBit(contexts, contextLabel); + row[j] = pixel; + } + } + return bitmap; + } + function decodeRefinement(width, height, templateIndex, referenceBitmap, offsetX, offsetY, prediction, at, decodingContext) { + var codingTemplate = RefinementTemplates[templateIndex].coding; + if (templateIndex === 0) { + codingTemplate = codingTemplate.concat([at[0]]); + } + var codingTemplateLength = codingTemplate.length; + var codingTemplateX = new Int32Array(codingTemplateLength); + var codingTemplateY = new Int32Array(codingTemplateLength); + var k; + for (k = 0; k < codingTemplateLength; k++) { + codingTemplateX[k] = codingTemplate[k].x; + codingTemplateY[k] = codingTemplate[k].y; + } + var referenceTemplate = RefinementTemplates[templateIndex].reference; + if (templateIndex === 0) { + referenceTemplate = referenceTemplate.concat([at[1]]); + } + var referenceTemplateLength = referenceTemplate.length; + var referenceTemplateX = new Int32Array(referenceTemplateLength); + var referenceTemplateY = new Int32Array(referenceTemplateLength); + for (k = 0; k < referenceTemplateLength; k++) { + referenceTemplateX[k] = referenceTemplate[k].x; + referenceTemplateY[k] = referenceTemplate[k].y; + } + var referenceWidth = referenceBitmap[0].length; + var referenceHeight = referenceBitmap.length; + var pseudoPixelContext = RefinementReusedContexts[templateIndex]; + var bitmap = []; + var decoder = decodingContext.decoder; + var contexts = decodingContext.contextCache.getContexts('GR'); + var ltp = 0; + for (var i = 0; i < height; i++) { + if (prediction) { + var sltp = decoder.readBit(contexts, pseudoPixelContext); + ltp ^= sltp; + if (ltp) { + error('JBIG2 error: prediction is not supported'); + } + } + var row = new Uint8Array(width); + bitmap.push(row); + for (var j = 0; j < width; j++) { + var i0, j0; + var contextLabel = 0; + for (k = 0; k < codingTemplateLength; k++) { + i0 = i + codingTemplateY[k]; + j0 = j + codingTemplateX[k]; + if (i0 < 0 || j0 < 0 || j0 >= width) { + contextLabel <<= 1; + } else + { + contextLabel = contextLabel << 1 | bitmap[i0][j0]; + } + } + for (k = 0; k < referenceTemplateLength; k++) { + i0 = i + referenceTemplateY[k] + offsetY; + j0 = j + referenceTemplateX[k] + offsetX; + if (i0 < 0 || i0 >= referenceHeight || j0 < 0 || j0 >= referenceWidth) { + contextLabel <<= 1; + } else + { + contextLabel = contextLabel << 1 | referenceBitmap[i0][j0]; + } + } + var pixel = decoder.readBit(contexts, contextLabel); + row[j] = pixel; + } + } + return bitmap; + } + function decodeSymbolDictionary(huffman, refinement, symbols, numberOfNewSymbols, numberOfExportedSymbols, huffmanTables, templateIndex, at, refinementTemplateIndex, refinementAt, decodingContext) { + if (huffman) { + error('JBIG2 error: huffman is not supported'); + } + var newSymbols = []; + var currentHeight = 0; + var symbolCodeLength = log2(symbols.length + numberOfNewSymbols); + var decoder = decodingContext.decoder; + var contextCache = decodingContext.contextCache; + while (newSymbols.length < numberOfNewSymbols) { + var deltaHeight = decodeInteger(contextCache, 'IADH', decoder); + currentHeight += deltaHeight; + var currentWidth = 0; + var totalWidth = 0; + while (true) { + var deltaWidth = decodeInteger(contextCache, 'IADW', decoder); + if (deltaWidth === null) { + break; + } + currentWidth += deltaWidth; + totalWidth += currentWidth; + var bitmap; + if (refinement) { + var numberOfInstances = decodeInteger(contextCache, 'IAAI', decoder); + if (numberOfInstances > 1) { + bitmap = decodeTextRegion(huffman, refinement, currentWidth, currentHeight, 0, numberOfInstances, 1, symbols.concat(newSymbols), symbolCodeLength, 0, 0, 1, 0, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext); + } else { + var symbolId = decodeIAID(contextCache, decoder, symbolCodeLength); + var rdx = decodeInteger(contextCache, 'IARDX', decoder); + var rdy = decodeInteger(contextCache, 'IARDY', decoder); + var symbol = symbolId < symbols.length ? symbols[symbolId] : newSymbols[symbolId - symbols.length]; + bitmap = decodeRefinement(currentWidth, currentHeight, refinementTemplateIndex, symbol, rdx, rdy, false, refinementAt, decodingContext); + } + } else { + bitmap = decodeBitmap(false, currentWidth, currentHeight, templateIndex, false, null, at, decodingContext); + } + newSymbols.push(bitmap); + } + } + var exportedSymbols = []; + var flags = [], currentFlag = false; + var totalSymbolsLength = symbols.length + numberOfNewSymbols; + while (flags.length < totalSymbolsLength) { + var runLength = decodeInteger(contextCache, 'IAEX', decoder); + while (runLength--) { + flags.push(currentFlag); + } + currentFlag = !currentFlag; + } + for (var i = 0, ii = symbols.length; i < ii; i++) { + if (flags[i]) { + exportedSymbols.push(symbols[i]); + } + } + for (var j = 0; j < numberOfNewSymbols; i++, j++) { + if (flags[i]) { + exportedSymbols.push(newSymbols[j]); + } + } + return exportedSymbols; + } + function decodeTextRegion(huffman, refinement, width, height, defaultPixelValue, numberOfSymbolInstances, stripSize, inputSymbols, symbolCodeLength, transposed, dsOffset, referenceCorner, combinationOperator, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext) { + if (huffman) { + error('JBIG2 error: huffman is not supported'); + } + var bitmap = []; + var i, row; + for (i = 0; i < height; i++) { + row = new Uint8Array(width); + if (defaultPixelValue) { + for (var j = 0; j < width; j++) { + row[j] = defaultPixelValue; + } + } + bitmap.push(row); + } + var decoder = decodingContext.decoder; + var contextCache = decodingContext.contextCache; + var stripT = -decodeInteger(contextCache, 'IADT', decoder); + var firstS = 0; + i = 0; + while (i < numberOfSymbolInstances) { + var deltaT = decodeInteger(contextCache, 'IADT', decoder); + stripT += deltaT; + var deltaFirstS = decodeInteger(contextCache, 'IAFS', decoder); + firstS += deltaFirstS; + var currentS = firstS; + do { + var currentT = stripSize === 1 ? 0 : decodeInteger(contextCache, 'IAIT', decoder); + var t = stripSize * stripT + currentT; + var symbolId = decodeIAID(contextCache, decoder, symbolCodeLength); + var applyRefinement = refinement && decodeInteger(contextCache, 'IARI', decoder); + var symbolBitmap = inputSymbols[symbolId]; + var symbolWidth = symbolBitmap[0].length; + var symbolHeight = symbolBitmap.length; + if (applyRefinement) { + var rdw = decodeInteger(contextCache, 'IARDW', decoder); + var rdh = decodeInteger(contextCache, 'IARDH', decoder); + var rdx = decodeInteger(contextCache, 'IARDX', decoder); + var rdy = decodeInteger(contextCache, 'IARDY', decoder); + symbolWidth += rdw; + symbolHeight += rdh; + symbolBitmap = decodeRefinement(symbolWidth, symbolHeight, refinementTemplateIndex, symbolBitmap, (rdw >> 1) + rdx, (rdh >> 1) + rdy, false, refinementAt, decodingContext); + } + var offsetT = t - (referenceCorner & 1 ? 0 : symbolHeight); + var offsetS = currentS - (referenceCorner & 2 ? symbolWidth : 0); + var s2, t2, symbolRow; + if (transposed) { + for (s2 = 0; s2 < symbolHeight; s2++) { + row = bitmap[offsetS + s2]; + if (!row) { + continue; + } + symbolRow = symbolBitmap[s2]; + var maxWidth = Math.min(width - offsetT, symbolWidth); + switch (combinationOperator) { + case 0: + for (t2 = 0; t2 < maxWidth; t2++) { + row[offsetT + t2] |= symbolRow[t2]; + } + break; + case 2: + for (t2 = 0; t2 < maxWidth; t2++) { + row[offsetT + t2] ^= symbolRow[t2]; + } + break; + default: + error('JBIG2 error: operator ' + combinationOperator + ' is not supported'); + } + } + currentS += symbolHeight - 1; + } else { + for (t2 = 0; t2 < symbolHeight; t2++) { + row = bitmap[offsetT + t2]; + if (!row) { + continue; + } + symbolRow = symbolBitmap[t2]; + switch (combinationOperator) { + case 0: + for (s2 = 0; s2 < symbolWidth; s2++) { + row[offsetS + s2] |= symbolRow[s2]; + } + break; + case 2: + for (s2 = 0; s2 < symbolWidth; s2++) { + row[offsetS + s2] ^= symbolRow[s2]; + } + break; + default: + error('JBIG2 error: operator ' + combinationOperator + ' is not supported'); + } + } + currentS += symbolWidth - 1; + } + i++; + var deltaS = decodeInteger(contextCache, 'IADS', decoder); + if (deltaS === null) { + break; + } + currentS += deltaS + dsOffset; + } while (true); + } + return bitmap; + } + function readSegmentHeader(data, start) { + var segmentHeader = {}; + segmentHeader.number = readUint32(data, start); + var flags = data[start + 4]; + var segmentType = flags & 0x3F; + if (!SegmentTypes[segmentType]) { + error('JBIG2 error: invalid segment type: ' + segmentType); + } + segmentHeader.type = segmentType; + segmentHeader.typeName = SegmentTypes[segmentType]; + segmentHeader.deferredNonRetain = !!(flags & 0x80); + var pageAssociationFieldSize = !!(flags & 0x40); + var referredFlags = data[start + 5]; + var referredToCount = referredFlags >> 5 & 7; + var retainBits = [referredFlags & 31]; + var position = start + 6; + if (referredFlags === 7) { + referredToCount = readUint32(data, position - 1) & 0x1FFFFFFF; + position += 3; + var bytes = referredToCount + 7 >> 3; + retainBits[0] = data[position++]; + while (--bytes > 0) { + retainBits.push(data[position++]); + } + } else if (referredFlags === 5 || referredFlags === 6) { + error('JBIG2 error: invalid referred-to flags'); + } + segmentHeader.retainBits = retainBits; + var referredToSegmentNumberSize = segmentHeader.number <= 256 ? 1 : segmentHeader.number <= 65536 ? 2 : 4; + var referredTo = []; + var i, ii; + for (i = 0; i < referredToCount; i++) { + var number = referredToSegmentNumberSize === 1 ? data[position] : referredToSegmentNumberSize === 2 ? readUint16(data, position) : readUint32(data, position); + referredTo.push(number); + position += referredToSegmentNumberSize; + } + segmentHeader.referredTo = referredTo; + if (!pageAssociationFieldSize) { + segmentHeader.pageAssociation = data[position++]; + } else { + segmentHeader.pageAssociation = readUint32(data, position); + position += 4; + } + segmentHeader.length = readUint32(data, position); + position += 4; + if (segmentHeader.length === 0xFFFFFFFF) { + if (segmentType === 38) { + var genericRegionInfo = readRegionSegmentInformation(data, position); + var genericRegionSegmentFlags = data[position + RegionSegmentInformationFieldLength]; + var genericRegionMmr = !!(genericRegionSegmentFlags & 1); + var searchPatternLength = 6; + var searchPattern = new Uint8Array(searchPatternLength); + if (!genericRegionMmr) { + searchPattern[0] = 0xFF; + searchPattern[1] = 0xAC; + } + searchPattern[2] = genericRegionInfo.height >>> 24 & 0xFF; + searchPattern[3] = genericRegionInfo.height >> 16 & 0xFF; + searchPattern[4] = genericRegionInfo.height >> 8 & 0xFF; + searchPattern[5] = genericRegionInfo.height & 0xFF; + for (i = position, ii = data.length; i < ii; i++) { + var j = 0; + while (j < searchPatternLength && searchPattern[j] === data[i + j]) { + j++; + } + if (j === searchPatternLength) { + segmentHeader.length = i + searchPatternLength; + break; + } + } + if (segmentHeader.length === 0xFFFFFFFF) { + error('JBIG2 error: segment end was not found'); + } + } else { + error('JBIG2 error: invalid unknown segment length'); + } + } + segmentHeader.headerEnd = position; + return segmentHeader; + } + function readSegments(header, data, start, end) { + var segments = []; + var position = start; + while (position < end) { + var segmentHeader = readSegmentHeader(data, position); + position = segmentHeader.headerEnd; + var segment = { + header: segmentHeader, + data: data + }; + if (!header.randomAccess) { + segment.start = position; + position += segmentHeader.length; + segment.end = position; + } + segments.push(segment); + if (segmentHeader.type === 51) { + break; + } + } + if (header.randomAccess) { + for (var i = 0, ii = segments.length; i < ii; i++) { + segments[i].start = position; + position += segments[i].header.length; + segments[i].end = position; + } + } + return segments; + } + function readRegionSegmentInformation(data, start) { + return { + width: readUint32(data, start), + height: readUint32(data, start + 4), + x: readUint32(data, start + 8), + y: readUint32(data, start + 12), + combinationOperator: data[start + 16] & 7 + }; + } + var RegionSegmentInformationFieldLength = 17; + function processSegment(segment, visitor) { + var header = segment.header; + var data = segment.data, position = segment.start, end = segment.end; + var args, at, i, atLength; + switch (header.type) { + case 0: + var dictionary = {}; + var dictionaryFlags = readUint16(data, position); + dictionary.huffman = !!(dictionaryFlags & 1); + dictionary.refinement = !!(dictionaryFlags & 2); + dictionary.huffmanDHSelector = dictionaryFlags >> 2 & 3; + dictionary.huffmanDWSelector = dictionaryFlags >> 4 & 3; + dictionary.bitmapSizeSelector = dictionaryFlags >> 6 & 1; + dictionary.aggregationInstancesSelector = dictionaryFlags >> 7 & 1; + dictionary.bitmapCodingContextUsed = !!(dictionaryFlags & 256); + dictionary.bitmapCodingContextRetained = !!(dictionaryFlags & 512); + dictionary.template = dictionaryFlags >> 10 & 3; + dictionary.refinementTemplate = dictionaryFlags >> 12 & 1; + position += 2; + if (!dictionary.huffman) { + atLength = dictionary.template === 0 ? 4 : 1; + at = []; + for (i = 0; i < atLength; i++) { + at.push({ + x: readInt8(data, position), + y: readInt8(data, position + 1) + }); + position += 2; + } + dictionary.at = at; + } + if (dictionary.refinement && !dictionary.refinementTemplate) { + at = []; + for (i = 0; i < 2; i++) { + at.push({ + x: readInt8(data, position), + y: readInt8(data, position + 1) + }); + position += 2; + } + dictionary.refinementAt = at; + } + dictionary.numberOfExportedSymbols = readUint32(data, position); + position += 4; + dictionary.numberOfNewSymbols = readUint32(data, position); + position += 4; + args = [ + dictionary, + header.number, + header.referredTo, + data, + position, + end + ]; + break; + case 6: + case 7: + var textRegion = {}; + textRegion.info = readRegionSegmentInformation(data, position); + position += RegionSegmentInformationFieldLength; + var textRegionSegmentFlags = readUint16(data, position); + position += 2; + textRegion.huffman = !!(textRegionSegmentFlags & 1); + textRegion.refinement = !!(textRegionSegmentFlags & 2); + textRegion.stripSize = 1 << (textRegionSegmentFlags >> 2 & 3); + textRegion.referenceCorner = textRegionSegmentFlags >> 4 & 3; + textRegion.transposed = !!(textRegionSegmentFlags & 64); + textRegion.combinationOperator = textRegionSegmentFlags >> 7 & 3; + textRegion.defaultPixelValue = textRegionSegmentFlags >> 9 & 1; + textRegion.dsOffset = textRegionSegmentFlags << 17 >> 27; + textRegion.refinementTemplate = textRegionSegmentFlags >> 15 & 1; + if (textRegion.huffman) { + var textRegionHuffmanFlags = readUint16(data, position); + position += 2; + textRegion.huffmanFS = textRegionHuffmanFlags & 3; + textRegion.huffmanDS = textRegionHuffmanFlags >> 2 & 3; + textRegion.huffmanDT = textRegionHuffmanFlags >> 4 & 3; + textRegion.huffmanRefinementDW = textRegionHuffmanFlags >> 6 & 3; + textRegion.huffmanRefinementDH = textRegionHuffmanFlags >> 8 & 3; + textRegion.huffmanRefinementDX = textRegionHuffmanFlags >> 10 & 3; + textRegion.huffmanRefinementDY = textRegionHuffmanFlags >> 12 & 3; + textRegion.huffmanRefinementSizeSelector = !!(textRegionHuffmanFlags & 14); + } + if (textRegion.refinement && !textRegion.refinementTemplate) { + at = []; + for (i = 0; i < 2; i++) { + at.push({ + x: readInt8(data, position), + y: readInt8(data, position + 1) + }); + position += 2; + } + textRegion.refinementAt = at; + } + textRegion.numberOfSymbolInstances = readUint32(data, position); + position += 4; + if (textRegion.huffman) { + error('JBIG2 error: huffman is not supported'); + } + args = [ + textRegion, + header.referredTo, + data, + position, + end + ]; + break; + case 38: + case 39: + var genericRegion = {}; + genericRegion.info = readRegionSegmentInformation(data, position); + position += RegionSegmentInformationFieldLength; + var genericRegionSegmentFlags = data[position++]; + genericRegion.mmr = !!(genericRegionSegmentFlags & 1); + genericRegion.template = genericRegionSegmentFlags >> 1 & 3; + genericRegion.prediction = !!(genericRegionSegmentFlags & 8); + if (!genericRegion.mmr) { + atLength = genericRegion.template === 0 ? 4 : 1; + at = []; + for (i = 0; i < atLength; i++) { + at.push({ + x: readInt8(data, position), + y: readInt8(data, position + 1) + }); + position += 2; + } + genericRegion.at = at; + } + args = [ + genericRegion, + data, + position, + end + ]; + break; + case 48: + var pageInfo = { + width: readUint32(data, position), + height: readUint32(data, position + 4), + resolutionX: readUint32(data, position + 8), + resolutionY: readUint32(data, position + 12) + }; + if (pageInfo.height === 0xFFFFFFFF) { + delete pageInfo.height; + } + var pageSegmentFlags = data[position + 16]; + var pageStripingInformation = readUint16(data, position + 17); + pageInfo.lossless = !!(pageSegmentFlags & 1); + pageInfo.refinement = !!(pageSegmentFlags & 2); + pageInfo.defaultPixelValue = pageSegmentFlags >> 2 & 1; + pageInfo.combinationOperator = pageSegmentFlags >> 3 & 3; + pageInfo.requiresBuffer = !!(pageSegmentFlags & 32); + pageInfo.combinationOperatorOverride = !!(pageSegmentFlags & 64); + args = [pageInfo]; + break; + case 49: + break; + case 50: + break; + case 51: + break; + case 62: + break; + default: + error('JBIG2 error: segment type ' + header.typeName + '(' + header.type + ') is not implemented'); + } + var callbackName = 'on' + header.typeName; + if (callbackName in visitor) { + visitor[callbackName].apply(visitor, args); + } + } + function processSegments(segments, visitor) { + for (var i = 0, ii = segments.length; i < ii; i++) { + processSegment(segments[i], visitor); + } + } + function parseJbig2(data, start, end) { + var position = start; + if (data[position] !== 0x97 || data[position + 1] !== 0x4A || data[position + 2] !== 0x42 || data[position + 3] !== 0x32 || data[position + 4] !== 0x0D || data[position + 5] !== 0x0A || data[position + 6] !== 0x1A || data[position + 7] !== 0x0A) { + error('JBIG2 error: invalid header'); + } + var header = {}; + position += 8; + var flags = data[position++]; + header.randomAccess = !(flags & 1); + if (!(flags & 2)) { + header.numberOfPages = readUint32(data, position); + position += 4; + } + var segments = readSegments(header, data, position, end); + error('Not implemented'); + } + function parseJbig2Chunks(chunks) { + var visitor = new SimpleSegmentVisitor(); + for (var i = 0, ii = chunks.length; i < ii; i++) { + var chunk = chunks[i]; + var segments = readSegments({}, chunk.data, chunk.start, chunk.end); + processSegments(segments, visitor); + } + return visitor.buffer; + } + function SimpleSegmentVisitor() { + } + SimpleSegmentVisitor.prototype = { + onPageInformation: function SimpleSegmentVisitor_onPageInformation(info) { + this.currentPageInfo = info; + var rowSize = info.width + 7 >> 3; + var buffer = new Uint8Array(rowSize * info.height); + if (info.defaultPixelValue) { + for (var i = 0, ii = buffer.length; i < ii; i++) { + buffer[i] = 0xFF; + } + } + this.buffer = buffer; + }, + drawBitmap: function SimpleSegmentVisitor_drawBitmap(regionInfo, bitmap) { + var pageInfo = this.currentPageInfo; + var width = regionInfo.width, height = regionInfo.height; + var rowSize = pageInfo.width + 7 >> 3; + var combinationOperator = pageInfo.combinationOperatorOverride ? regionInfo.combinationOperator : pageInfo.combinationOperator; + var buffer = this.buffer; + var mask0 = 128 >> (regionInfo.x & 7); + var offset0 = regionInfo.y * rowSize + (regionInfo.x >> 3); + var i, j, mask, offset; + switch (combinationOperator) { + case 0: + for (i = 0; i < height; i++) { + mask = mask0; + offset = offset0; + for (j = 0; j < width; j++) { + if (bitmap[i][j]) { + buffer[offset] |= mask; + } + mask >>= 1; + if (!mask) { + mask = 128; + offset++; + } + } + offset0 += rowSize; + } + break; + case 2: + for (i = 0; i < height; i++) { + mask = mask0; + offset = offset0; + for (j = 0; j < width; j++) { + if (bitmap[i][j]) { + buffer[offset] ^= mask; + } + mask >>= 1; + if (!mask) { + mask = 128; + offset++; + } + } + offset0 += rowSize; + } + break; + default: + error('JBIG2 error: operator ' + combinationOperator + ' is not supported'); + } + }, + onImmediateGenericRegion: function SimpleSegmentVisitor_onImmediateGenericRegion(region, data, start, end) { + var regionInfo = region.info; + var decodingContext = new DecodingContext(data, start, end); + var bitmap = decodeBitmap(region.mmr, regionInfo.width, regionInfo.height, region.template, region.prediction, null, region.at, decodingContext); + this.drawBitmap(regionInfo, bitmap); + }, + onImmediateLosslessGenericRegion: function SimpleSegmentVisitor_onImmediateLosslessGenericRegion() { + this.onImmediateGenericRegion.apply(this, arguments); + }, + onSymbolDictionary: function SimpleSegmentVisitor_onSymbolDictionary(dictionary, currentSegment, referredSegments, data, start, end) { + var huffmanTables; + if (dictionary.huffman) { + error('JBIG2 error: huffman is not supported'); + } + var symbols = this.symbols; + if (!symbols) { + this.symbols = symbols = {}; + } + var inputSymbols = []; + for (var i = 0, ii = referredSegments.length; i < ii; i++) { + inputSymbols = inputSymbols.concat(symbols[referredSegments[i]]); + } + var decodingContext = new DecodingContext(data, start, end); + symbols[currentSegment] = decodeSymbolDictionary(dictionary.huffman, dictionary.refinement, inputSymbols, dictionary.numberOfNewSymbols, dictionary.numberOfExportedSymbols, huffmanTables, dictionary.template, dictionary.at, dictionary.refinementTemplate, dictionary.refinementAt, decodingContext); + }, + onImmediateTextRegion: function SimpleSegmentVisitor_onImmediateTextRegion(region, referredSegments, data, start, end) { + var regionInfo = region.info; + var huffmanTables; + var symbols = this.symbols; + var inputSymbols = []; + for (var i = 0, ii = referredSegments.length; i < ii; i++) { + inputSymbols = inputSymbols.concat(symbols[referredSegments[i]]); + } + var symbolCodeLength = log2(inputSymbols.length); + var decodingContext = new DecodingContext(data, start, end); + var bitmap = decodeTextRegion(region.huffman, region.refinement, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.numberOfSymbolInstances, region.stripSize, inputSymbols, symbolCodeLength, region.transposed, region.dsOffset, region.referenceCorner, region.combinationOperator, huffmanTables, region.refinementTemplate, region.refinementAt, decodingContext); + this.drawBitmap(regionInfo, bitmap); + }, + onImmediateLosslessTextRegion: function SimpleSegmentVisitor_onImmediateLosslessTextRegion() { + this.onImmediateTextRegion.apply(this, arguments); + } + }; + function Jbig2Image() { + } + Jbig2Image.prototype = { + parseChunks: function Jbig2Image_parseChunks(chunks) { + return parseJbig2Chunks(chunks); + } + }; + return Jbig2Image; + }(); + exports.Jbig2Image = Jbig2Image; + })); + (function (root, factory) { + factory(root.pdfjsCoreJpg = {}, root.pdfjsSharedUtil); + }(this, function (exports, sharedUtil) { + var error = sharedUtil.error; + var JpegImage = function JpegImageClosure() { + var dctZigZag = new Uint8Array([ + 0, + 1, + 8, + 16, + 9, + 2, + 3, + 10, + 17, + 24, + 32, + 25, + 18, + 11, + 4, + 5, + 12, + 19, + 26, + 33, + 40, + 48, + 41, + 34, + 27, + 20, + 13, + 6, + 7, + 14, + 21, + 28, + 35, + 42, + 49, + 56, + 57, + 50, + 43, + 36, + 29, + 22, + 15, + 23, + 30, + 37, + 44, + 51, + 58, + 59, + 52, + 45, + 38, + 31, + 39, + 46, + 53, + 60, + 61, + 54, + 47, + 55, + 62, + 63 + ]); + var dctCos1 = 4017; + var dctSin1 = 799; + var dctCos3 = 3406; + var dctSin3 = 2276; + var dctCos6 = 1567; + var dctSin6 = 3784; + var dctSqrt2 = 5793; + var dctSqrt1d2 = 2896; + function JpegImage() { + this.decodeTransform = null; + this.colorTransform = -1; + } + function buildHuffmanTable(codeLengths, values) { + var k = 0, code = [], i, j, length = 16; + while (length > 0 && !codeLengths[length - 1]) { + length--; + } + code.push({ + children: [], + index: 0 + }); + var p = code[0], q; + for (i = 0; i < length; i++) { + for (j = 0; j < codeLengths[i]; j++) { + p = code.pop(); + p.children[p.index] = values[k]; + while (p.index > 0) { + p = code.pop(); + } + p.index++; + code.push(p); + while (code.length <= i) { + code.push(q = { + children: [], + index: 0 + }); + p.children[p.index] = q.children; + p = q; + } + k++; + } + if (i + 1 < length) { + code.push(q = { + children: [], + index: 0 + }); + p.children[p.index] = q.children; + p = q; + } + } + return code[0].children; + } + function getBlockBufferOffset(component, row, col) { + return 64 * ((component.blocksPerLine + 1) * row + col); + } + function decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successivePrev, successive) { + var mcusPerLine = frame.mcusPerLine; + var progressive = frame.progressive; + var startOffset = offset, bitsData = 0, bitsCount = 0; + function readBit() { + if (bitsCount > 0) { + bitsCount--; + return bitsData >> bitsCount & 1; + } + bitsData = data[offset++]; + if (bitsData === 0xFF) { + var nextByte = data[offset++]; + if (nextByte) { + error('JPEG error: unexpected marker ' + (bitsData << 8 | nextByte).toString(16)); + } + } + bitsCount = 7; + return bitsData >>> 7; + } + function decodeHuffman(tree) { + var node = tree; + while (true) { + node = node[readBit()]; + if (typeof node === 'number') { + return node; + } + if (typeof node !== 'object') { + error('JPEG error: invalid huffman sequence'); + } + } + } + function receive(length) { + var n = 0; + while (length > 0) { + n = n << 1 | readBit(); + length--; + } + return n; + } + function receiveAndExtend(length) { + if (length === 1) { + return readBit() === 1 ? 1 : -1; + } + var n = receive(length); + if (n >= 1 << length - 1) { + return n; + } + return n + (-1 << length) + 1; + } + function decodeBaseline(component, offset) { + var t = decodeHuffman(component.huffmanTableDC); + var diff = t === 0 ? 0 : receiveAndExtend(t); + component.blockData[offset] = component.pred += diff; + var k = 1; + while (k < 64) { + var rs = decodeHuffman(component.huffmanTableAC); + var s = rs & 15, r = rs >> 4; + if (s === 0) { + if (r < 15) { + break; + } + k += 16; + continue; + } + k += r; + var z = dctZigZag[k]; + component.blockData[offset + z] = receiveAndExtend(s); + k++; + } + } + function decodeDCFirst(component, offset) { + var t = decodeHuffman(component.huffmanTableDC); + var diff = t === 0 ? 0 : receiveAndExtend(t) << successive; + component.blockData[offset] = component.pred += diff; + } + function decodeDCSuccessive(component, offset) { + component.blockData[offset] |= readBit() << successive; + } + var eobrun = 0; + function decodeACFirst(component, offset) { + if (eobrun > 0) { + eobrun--; + return; + } + var k = spectralStart, e = spectralEnd; + while (k <= e) { + var rs = decodeHuffman(component.huffmanTableAC); + var s = rs & 15, r = rs >> 4; + if (s === 0) { + if (r < 15) { + eobrun = receive(r) + (1 << r) - 1; + break; + } + k += 16; + continue; + } + k += r; + var z = dctZigZag[k]; + component.blockData[offset + z] = receiveAndExtend(s) * (1 << successive); + k++; + } + } + var successiveACState = 0, successiveACNextValue; + function decodeACSuccessive(component, offset) { + var k = spectralStart; + var e = spectralEnd; + var r = 0; + var s; + var rs; + while (k <= e) { + var z = dctZigZag[k]; + switch (successiveACState) { + case 0: + rs = decodeHuffman(component.huffmanTableAC); + s = rs & 15; + r = rs >> 4; + if (s === 0) { + if (r < 15) { + eobrun = receive(r) + (1 << r); + successiveACState = 4; + } else { + r = 16; + successiveACState = 1; + } + } else { + if (s !== 1) { + error('JPEG error: invalid ACn encoding'); + } + successiveACNextValue = receiveAndExtend(s); + successiveACState = r ? 2 : 3; + } + continue; + case 1: + case 2: + if (component.blockData[offset + z]) { + component.blockData[offset + z] += readBit() << successive; + } else { + r--; + if (r === 0) { + successiveACState = successiveACState === 2 ? 3 : 0; + } + } + break; + case 3: + if (component.blockData[offset + z]) { + component.blockData[offset + z] += readBit() << successive; + } else { + component.blockData[offset + z] = successiveACNextValue << successive; + successiveACState = 0; + } + break; + case 4: + if (component.blockData[offset + z]) { + component.blockData[offset + z] += readBit() << successive; + } + break; + } + k++; + } + if (successiveACState === 4) { + eobrun--; + if (eobrun === 0) { + successiveACState = 0; + } + } + } + function decodeMcu(component, decode, mcu, row, col) { + var mcuRow = mcu / mcusPerLine | 0; + var mcuCol = mcu % mcusPerLine; + var blockRow = mcuRow * component.v + row; + var blockCol = mcuCol * component.h + col; + var offset = getBlockBufferOffset(component, blockRow, blockCol); + decode(component, offset); + } + function decodeBlock(component, decode, mcu) { + var blockRow = mcu / component.blocksPerLine | 0; + var blockCol = mcu % component.blocksPerLine; + var offset = getBlockBufferOffset(component, blockRow, blockCol); + decode(component, offset); + } + var componentsLength = components.length; + var component, i, j, k, n; + var decodeFn; + if (progressive) { + if (spectralStart === 0) { + decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive; + } else { + decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive; + } + } else { + decodeFn = decodeBaseline; + } + var mcu = 0, marker; + var mcuExpected; + if (componentsLength === 1) { + mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn; + } else { + mcuExpected = mcusPerLine * frame.mcusPerColumn; + } + if (!resetInterval) { + resetInterval = mcuExpected; + } + var h, v; + while (mcu < mcuExpected) { + for (i = 0; i < componentsLength; i++) { + components[i].pred = 0; + } + eobrun = 0; + if (componentsLength === 1) { + component = components[0]; + for (n = 0; n < resetInterval; n++) { + decodeBlock(component, decodeFn, mcu); + mcu++; + } + } else { + for (n = 0; n < resetInterval; n++) { + for (i = 0; i < componentsLength; i++) { + component = components[i]; + h = component.h; + v = component.v; + for (j = 0; j < v; j++) { + for (k = 0; k < h; k++) { + decodeMcu(component, decodeFn, mcu, j, k); + } + } + } + mcu++; + } + } + bitsCount = 0; + marker = data[offset] << 8 | data[offset + 1]; + while (data[offset] === 0x00 && offset < data.length - 1) { + offset++; + marker = data[offset] << 8 | data[offset + 1]; + } + if (marker <= 0xFF00) { + error('JPEG error: marker was not found'); + } + if (marker >= 0xFFD0 && marker <= 0xFFD7) { + offset += 2; + } else { + break; + } + } + return offset - startOffset; + } + function quantizeAndInverse(component, blockBufferOffset, p) { + var qt = component.quantizationTable, blockData = component.blockData; + var v0, v1, v2, v3, v4, v5, v6, v7; + var p0, p1, p2, p3, p4, p5, p6, p7; + var t; + if (!qt) { + error('JPEG error: missing required Quantization Table.'); + } + for (var row = 0; row < 64; row += 8) { + p0 = blockData[blockBufferOffset + row]; + p1 = blockData[blockBufferOffset + row + 1]; + p2 = blockData[blockBufferOffset + row + 2]; + p3 = blockData[blockBufferOffset + row + 3]; + p4 = blockData[blockBufferOffset + row + 4]; + p5 = blockData[blockBufferOffset + row + 5]; + p6 = blockData[blockBufferOffset + row + 6]; + p7 = blockData[blockBufferOffset + row + 7]; + p0 *= qt[row]; + if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) { + t = dctSqrt2 * p0 + 512 >> 10; + p[row] = t; + p[row + 1] = t; + p[row + 2] = t; + p[row + 3] = t; + p[row + 4] = t; + p[row + 5] = t; + p[row + 6] = t; + p[row + 7] = t; + continue; + } + p1 *= qt[row + 1]; + p2 *= qt[row + 2]; + p3 *= qt[row + 3]; + p4 *= qt[row + 4]; + p5 *= qt[row + 5]; + p6 *= qt[row + 6]; + p7 *= qt[row + 7]; + v0 = dctSqrt2 * p0 + 128 >> 8; + v1 = dctSqrt2 * p4 + 128 >> 8; + v2 = p2; + v3 = p6; + v4 = dctSqrt1d2 * (p1 - p7) + 128 >> 8; + v7 = dctSqrt1d2 * (p1 + p7) + 128 >> 8; + v5 = p3 << 4; + v6 = p5 << 4; + v0 = v0 + v1 + 1 >> 1; + v1 = v0 - v1; + t = v2 * dctSin6 + v3 * dctCos6 + 128 >> 8; + v2 = v2 * dctCos6 - v3 * dctSin6 + 128 >> 8; + v3 = t; + v4 = v4 + v6 + 1 >> 1; + v6 = v4 - v6; + v7 = v7 + v5 + 1 >> 1; + v5 = v7 - v5; + v0 = v0 + v3 + 1 >> 1; + v3 = v0 - v3; + v1 = v1 + v2 + 1 >> 1; + v2 = v1 - v2; + t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12; + v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12; + v7 = t; + t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12; + v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12; + v6 = t; + p[row] = v0 + v7; + p[row + 7] = v0 - v7; + p[row + 1] = v1 + v6; + p[row + 6] = v1 - v6; + p[row + 2] = v2 + v5; + p[row + 5] = v2 - v5; + p[row + 3] = v3 + v4; + p[row + 4] = v3 - v4; + } + for (var col = 0; col < 8; ++col) { + p0 = p[col]; + p1 = p[col + 8]; + p2 = p[col + 16]; + p3 = p[col + 24]; + p4 = p[col + 32]; + p5 = p[col + 40]; + p6 = p[col + 48]; + p7 = p[col + 56]; + if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) { + t = dctSqrt2 * p0 + 8192 >> 14; + t = t < -2040 ? 0 : t >= 2024 ? 255 : t + 2056 >> 4; + blockData[blockBufferOffset + col] = t; + blockData[blockBufferOffset + col + 8] = t; + blockData[blockBufferOffset + col + 16] = t; + blockData[blockBufferOffset + col + 24] = t; + blockData[blockBufferOffset + col + 32] = t; + blockData[blockBufferOffset + col + 40] = t; + blockData[blockBufferOffset + col + 48] = t; + blockData[blockBufferOffset + col + 56] = t; + continue; + } + v0 = dctSqrt2 * p0 + 2048 >> 12; + v1 = dctSqrt2 * p4 + 2048 >> 12; + v2 = p2; + v3 = p6; + v4 = dctSqrt1d2 * (p1 - p7) + 2048 >> 12; + v7 = dctSqrt1d2 * (p1 + p7) + 2048 >> 12; + v5 = p3; + v6 = p5; + v0 = (v0 + v1 + 1 >> 1) + 4112; + v1 = v0 - v1; + t = v2 * dctSin6 + v3 * dctCos6 + 2048 >> 12; + v2 = v2 * dctCos6 - v3 * dctSin6 + 2048 >> 12; + v3 = t; + v4 = v4 + v6 + 1 >> 1; + v6 = v4 - v6; + v7 = v7 + v5 + 1 >> 1; + v5 = v7 - v5; + v0 = v0 + v3 + 1 >> 1; + v3 = v0 - v3; + v1 = v1 + v2 + 1 >> 1; + v2 = v1 - v2; + t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12; + v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12; + v7 = t; + t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12; + v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12; + v6 = t; + p0 = v0 + v7; + p7 = v0 - v7; + p1 = v1 + v6; + p6 = v1 - v6; + p2 = v2 + v5; + p5 = v2 - v5; + p3 = v3 + v4; + p4 = v3 - v4; + p0 = p0 < 16 ? 0 : p0 >= 4080 ? 255 : p0 >> 4; + p1 = p1 < 16 ? 0 : p1 >= 4080 ? 255 : p1 >> 4; + p2 = p2 < 16 ? 0 : p2 >= 4080 ? 255 : p2 >> 4; + p3 = p3 < 16 ? 0 : p3 >= 4080 ? 255 : p3 >> 4; + p4 = p4 < 16 ? 0 : p4 >= 4080 ? 255 : p4 >> 4; + p5 = p5 < 16 ? 0 : p5 >= 4080 ? 255 : p5 >> 4; + p6 = p6 < 16 ? 0 : p6 >= 4080 ? 255 : p6 >> 4; + p7 = p7 < 16 ? 0 : p7 >= 4080 ? 255 : p7 >> 4; + blockData[blockBufferOffset + col] = p0; + blockData[blockBufferOffset + col + 8] = p1; + blockData[blockBufferOffset + col + 16] = p2; + blockData[blockBufferOffset + col + 24] = p3; + blockData[blockBufferOffset + col + 32] = p4; + blockData[blockBufferOffset + col + 40] = p5; + blockData[blockBufferOffset + col + 48] = p6; + blockData[blockBufferOffset + col + 56] = p7; + } + } + function buildComponentData(frame, component) { + var blocksPerLine = component.blocksPerLine; + var blocksPerColumn = component.blocksPerColumn; + var computationBuffer = new Int16Array(64); + for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) { + for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) { + var offset = getBlockBufferOffset(component, blockRow, blockCol); + quantizeAndInverse(component, offset, computationBuffer); + } + } + return component.blockData; + } + function clamp0to255(a) { + return a <= 0 ? 0 : a >= 255 ? 255 : a; + } + JpegImage.prototype = { + parse: function parse(data) { + function readUint16() { + var value = data[offset] << 8 | data[offset + 1]; + offset += 2; + return value; + } + function readDataBlock() { + var length = readUint16(); + var array = data.subarray(offset, offset + length - 2); + offset += array.length; + return array; + } + function prepareComponents(frame) { + var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH); + var mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV); + for (var i = 0; i < frame.components.length; i++) { + component = frame.components[i]; + var blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / frame.maxH); + var blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines / 8) * component.v / frame.maxV); + var blocksPerLineForMcu = mcusPerLine * component.h; + var blocksPerColumnForMcu = mcusPerColumn * component.v; + var blocksBufferSize = 64 * blocksPerColumnForMcu * (blocksPerLineForMcu + 1); + component.blockData = new Int16Array(blocksBufferSize); + component.blocksPerLine = blocksPerLine; + component.blocksPerColumn = blocksPerColumn; + } + frame.mcusPerLine = mcusPerLine; + frame.mcusPerColumn = mcusPerColumn; + } + var offset = 0; + var jfif = null; + var adobe = null; + var frame, resetInterval; + var quantizationTables = []; + var huffmanTablesAC = [], huffmanTablesDC = []; + var fileMarker = readUint16(); + if (fileMarker !== 0xFFD8) { + error('JPEG error: SOI not found'); + } + fileMarker = readUint16(); + while (fileMarker !== 0xFFD9) { + var i, j, l; + switch (fileMarker) { + case 0xFFE0: + case 0xFFE1: + case 0xFFE2: + case 0xFFE3: + case 0xFFE4: + case 0xFFE5: + case 0xFFE6: + case 0xFFE7: + case 0xFFE8: + case 0xFFE9: + case 0xFFEA: + case 0xFFEB: + case 0xFFEC: + case 0xFFED: + case 0xFFEE: + case 0xFFEF: + case 0xFFFE: + var appData = readDataBlock(); + if (fileMarker === 0xFFE0) { + if (appData[0] === 0x4A && appData[1] === 0x46 && appData[2] === 0x49 && appData[3] === 0x46 && appData[4] === 0) { + jfif = { + version: { + major: appData[5], + minor: appData[6] + }, + densityUnits: appData[7], + xDensity: appData[8] << 8 | appData[9], + yDensity: appData[10] << 8 | appData[11], + thumbWidth: appData[12], + thumbHeight: appData[13], + thumbData: appData.subarray(14, 14 + 3 * appData[12] * appData[13]) + }; + } + } + if (fileMarker === 0xFFEE) { + if (appData[0] === 0x41 && appData[1] === 0x64 && appData[2] === 0x6F && appData[3] === 0x62 && appData[4] === 0x65) { + adobe = { + version: appData[5] << 8 | appData[6], + flags0: appData[7] << 8 | appData[8], + flags1: appData[9] << 8 | appData[10], + transformCode: appData[11] + }; + } + } + break; + case 0xFFDB: + var quantizationTablesLength = readUint16(); + var quantizationTablesEnd = quantizationTablesLength + offset - 2; + var z; + while (offset < quantizationTablesEnd) { + var quantizationTableSpec = data[offset++]; + var tableData = new Uint16Array(64); + if (quantizationTableSpec >> 4 === 0) { + for (j = 0; j < 64; j++) { + z = dctZigZag[j]; + tableData[z] = data[offset++]; + } + } else if (quantizationTableSpec >> 4 === 1) { + for (j = 0; j < 64; j++) { + z = dctZigZag[j]; + tableData[z] = readUint16(); + } + } else { + error('JPEG error: DQT - invalid table spec'); + } + quantizationTables[quantizationTableSpec & 15] = tableData; + } + break; + case 0xFFC0: + case 0xFFC1: + case 0xFFC2: + if (frame) { + error('JPEG error: Only single frame JPEGs supported'); + } + readUint16(); + frame = {}; + frame.extended = fileMarker === 0xFFC1; + frame.progressive = fileMarker === 0xFFC2; + frame.precision = data[offset++]; + frame.scanLines = readUint16(); + frame.samplesPerLine = readUint16(); + frame.components = []; + frame.componentIds = {}; + var componentsCount = data[offset++], componentId; + var maxH = 0, maxV = 0; + for (i = 0; i < componentsCount; i++) { + componentId = data[offset]; + var h = data[offset + 1] >> 4; + var v = data[offset + 1] & 15; + if (maxH < h) { + maxH = h; + } + if (maxV < v) { + maxV = v; + } + var qId = data[offset + 2]; + l = frame.components.push({ + h: h, + v: v, + quantizationId: qId, + quantizationTable: null + }); + frame.componentIds[componentId] = l - 1; + offset += 3; + } + frame.maxH = maxH; + frame.maxV = maxV; + prepareComponents(frame); + break; + case 0xFFC4: + var huffmanLength = readUint16(); + for (i = 2; i < huffmanLength;) { + var huffmanTableSpec = data[offset++]; + var codeLengths = new Uint8Array(16); + var codeLengthSum = 0; + for (j = 0; j < 16; j++, offset++) { + codeLengthSum += codeLengths[j] = data[offset]; + } + var huffmanValues = new Uint8Array(codeLengthSum); + for (j = 0; j < codeLengthSum; j++, offset++) { + huffmanValues[j] = data[offset]; + } + i += 17 + codeLengthSum; + (huffmanTableSpec >> 4 === 0 ? huffmanTablesDC : huffmanTablesAC)[huffmanTableSpec & 15] = buildHuffmanTable(codeLengths, huffmanValues); + } + break; + case 0xFFDD: + readUint16(); + resetInterval = readUint16(); + break; + case 0xFFDA: + var scanLength = readUint16(); + var selectorsCount = data[offset++]; + var components = [], component; + for (i = 0; i < selectorsCount; i++) { + var componentIndex = frame.componentIds[data[offset++]]; + component = frame.components[componentIndex]; + var tableSpec = data[offset++]; + component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4]; + component.huffmanTableAC = huffmanTablesAC[tableSpec & 15]; + components.push(component); + } + var spectralStart = data[offset++]; + var spectralEnd = data[offset++]; + var successiveApproximation = data[offset++]; + var processed = decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successiveApproximation >> 4, successiveApproximation & 15); + offset += processed; + break; + case 0xFFFF: + if (data[offset] !== 0xFF) { + offset--; + } + break; + default: + if (data[offset - 3] === 0xFF && data[offset - 2] >= 0xC0 && data[offset - 2] <= 0xFE) { + offset -= 3; + break; + } + error('JPEG error: unknown marker ' + fileMarker.toString(16)); + } + fileMarker = readUint16(); + } + this.width = frame.samplesPerLine; + this.height = frame.scanLines; + this.jfif = jfif; + this.adobe = adobe; + this.components = []; + for (i = 0; i < frame.components.length; i++) { + component = frame.components[i]; + var quantizationTable = quantizationTables[component.quantizationId]; + if (quantizationTable) { + component.quantizationTable = quantizationTable; + } + this.components.push({ + output: buildComponentData(frame, component), + scaleX: component.h / frame.maxH, + scaleY: component.v / frame.maxV, + blocksPerLine: component.blocksPerLine, + blocksPerColumn: component.blocksPerColumn + }); + } + this.numComponents = this.components.length; + }, + _getLinearizedBlockData: function getLinearizedBlockData(width, height) { + var scaleX = this.width / width, scaleY = this.height / height; + var component, componentScaleX, componentScaleY, blocksPerScanline; + var x, y, i, j, k; + var index; + var offset = 0; + var output; + var numComponents = this.components.length; + var dataLength = width * height * numComponents; + var data = new Uint8Array(dataLength); + var xScaleBlockOffset = new Uint32Array(width); + var mask3LSB = 0xfffffff8; + for (i = 0; i < numComponents; i++) { + component = this.components[i]; + componentScaleX = component.scaleX * scaleX; + componentScaleY = component.scaleY * scaleY; + offset = i; + output = component.output; + blocksPerScanline = component.blocksPerLine + 1 << 3; + for (x = 0; x < width; x++) { + j = 0 | x * componentScaleX; + xScaleBlockOffset[x] = (j & mask3LSB) << 3 | j & 7; + } + for (y = 0; y < height; y++) { + j = 0 | y * componentScaleY; + index = blocksPerScanline * (j & mask3LSB) | (j & 7) << 3; + for (x = 0; x < width; x++) { + data[offset] = output[index + xScaleBlockOffset[x]]; + offset += numComponents; + } + } + } + var transform = this.decodeTransform; + if (transform) { + for (i = 0; i < dataLength;) { + for (j = 0, k = 0; j < numComponents; j++, i++, k += 2) { + data[i] = (data[i] * transform[k] >> 8) + transform[k + 1]; + } + } + } + return data; + }, + _isColorConversionNeeded: function isColorConversionNeeded() { + if (this.adobe && this.adobe.transformCode) { + return true; + } else if (this.numComponents === 3) { + if (!this.adobe && this.colorTransform === 0) { + return false; + } + return true; + } + if (!this.adobe && this.colorTransform === 1) { + return true; + } + return false; + }, + _convertYccToRgb: function convertYccToRgb(data) { + var Y, Cb, Cr; + for (var i = 0, length = data.length; i < length; i += 3) { + Y = data[i]; + Cb = data[i + 1]; + Cr = data[i + 2]; + data[i] = clamp0to255(Y - 179.456 + 1.402 * Cr); + data[i + 1] = clamp0to255(Y + 135.459 - 0.344 * Cb - 0.714 * Cr); + data[i + 2] = clamp0to255(Y - 226.816 + 1.772 * Cb); + } + return data; + }, + _convertYcckToRgb: function convertYcckToRgb(data) { + var Y, Cb, Cr, k; + var offset = 0; + for (var i = 0, length = data.length; i < length; i += 4) { + Y = data[i]; + Cb = data[i + 1]; + Cr = data[i + 2]; + k = data[i + 3]; + var r = -122.67195406894 + Cb * (-6.60635669420364e-5 * Cb + 0.000437130475926232 * Cr - 5.4080610064599e-5 * Y + 0.00048449797120281 * k - 0.154362151871126) + Cr * (-0.000957964378445773 * Cr + 0.000817076911346625 * Y - 0.00477271405408747 * k + 1.53380253221734) + Y * (0.000961250184130688 * Y - 0.00266257332283933 * k + 0.48357088451265) + k * (-0.000336197177618394 * k + 0.484791561490776); + var g = 107.268039397724 + Cb * (2.19927104525741e-5 * Cb - 0.000640992018297945 * Cr + 0.000659397001245577 * Y + 0.000426105652938837 * k - 0.176491792462875) + Cr * (-0.000778269941513683 * Cr + 0.00130872261408275 * Y + 0.000770482631801132 * k - 0.151051492775562) + Y * (0.00126935368114843 * Y - 0.00265090189010898 * k + 0.25802910206845) + k * (-0.000318913117588328 * k - 0.213742400323665); + var b = -20.810012546947 + Cb * (-0.000570115196973677 * Cb - 2.63409051004589e-5 * Cr + 0.0020741088115012 * Y - 0.00288260236853442 * k + 0.814272968359295) + Cr * (-1.53496057440975e-5 * Cr - 0.000132689043961446 * Y + 0.000560833691242812 * k - 0.195152027534049) + Y * (0.00174418132927582 * Y - 0.00255243321439347 * k + 0.116935020465145) + k * (-0.000343531996510555 * k + 0.24165260232407); + data[offset++] = clamp0to255(r); + data[offset++] = clamp0to255(g); + data[offset++] = clamp0to255(b); + } + return data; + }, + _convertYcckToCmyk: function convertYcckToCmyk(data) { + var Y, Cb, Cr; + for (var i = 0, length = data.length; i < length; i += 4) { + Y = data[i]; + Cb = data[i + 1]; + Cr = data[i + 2]; + data[i] = clamp0to255(434.456 - Y - 1.402 * Cr); + data[i + 1] = clamp0to255(119.541 - Y + 0.344 * Cb + 0.714 * Cr); + data[i + 2] = clamp0to255(481.816 - Y - 1.772 * Cb); + } + return data; + }, + _convertCmykToRgb: function convertCmykToRgb(data) { + var c, m, y, k; + var offset = 0; + var min = -255 * 255 * 255; + var scale = 1 / 255 / 255; + for (var i = 0, length = data.length; i < length; i += 4) { + c = data[i]; + m = data[i + 1]; + y = data[i + 2]; + k = data[i + 3]; + var r = c * (-4.387332384609988 * c + 54.48615194189176 * m + 18.82290502165302 * y + 212.25662451639585 * k - 72734.4411664936) + m * (1.7149763477362134 * m - 5.6096736904047315 * y - 17.873870861415444 * k - 1401.7366389350734) + y * (-2.5217340131683033 * y - 21.248923337353073 * k + 4465.541406466231) - k * (21.86122147463605 * k + 48317.86113160301); + var g = c * (8.841041422036149 * c + 60.118027045597366 * m + 6.871425592049007 * y + 31.159100130055922 * k - 20220.756542821975) + m * (-15.310361306967817 * m + 17.575251261109482 * y + 131.35250912493976 * k - 48691.05921601825) + y * (4.444339102852739 * y + 9.8632861493405 * k - 6341.191035517494) - k * (20.737325471181034 * k + 47890.15695978492); + var b = c * (0.8842522430003296 * c + 8.078677503112928 * m + 30.89978309703729 * y - 0.23883238689178934 * k - 3616.812083916688) + m * (10.49593273432072 * m + 63.02378494754052 * y + 50.606957656360734 * k - 28620.90484698408) + y * (0.03296041114873217 * y + 115.60384449646641 * k - 49363.43385999684) - k * (22.33816807309886 * k + 45932.16563550634); + data[offset++] = r >= 0 ? 255 : r <= min ? 0 : 255 + r * scale | 0; + data[offset++] = g >= 0 ? 255 : g <= min ? 0 : 255 + g * scale | 0; + data[offset++] = b >= 0 ? 255 : b <= min ? 0 : 255 + b * scale | 0; + } + return data; + }, + getData: function getData(width, height, forceRGBoutput) { + if (this.numComponents > 4) { + error('JPEG error: Unsupported color mode'); + } + var data = this._getLinearizedBlockData(width, height); + if (this.numComponents === 1 && forceRGBoutput) { + var dataLength = data.length; + var rgbData = new Uint8Array(dataLength * 3); + var offset = 0; + for (var i = 0; i < dataLength; i++) { + var grayColor = data[i]; + rgbData[offset++] = grayColor; + rgbData[offset++] = grayColor; + rgbData[offset++] = grayColor; + } + return rgbData; + } else if (this.numComponents === 3 && this._isColorConversionNeeded()) { + return this._convertYccToRgb(data); + } else if (this.numComponents === 4) { + if (this._isColorConversionNeeded()) { + if (forceRGBoutput) { + return this._convertYcckToRgb(data); + } + return this._convertYcckToCmyk(data); + } else if (forceRGBoutput) { + return this._convertCmykToRgb(data); + } + } + return data; + } + }; + return JpegImage; + }(); + exports.JpegImage = JpegImage; + })); + (function (root, factory) { + factory(root.pdfjsCoreJpx = {}, root.pdfjsSharedUtil, root.pdfjsCoreArithmeticDecoder); + }(this, function (exports, sharedUtil, coreArithmeticDecoder) { + var info = sharedUtil.info; + var warn = sharedUtil.warn; + var error = sharedUtil.error; + var log2 = sharedUtil.log2; + var readUint16 = sharedUtil.readUint16; + var readUint32 = sharedUtil.readUint32; + var ArithmeticDecoder = coreArithmeticDecoder.ArithmeticDecoder; + var JpxImage = function JpxImageClosure() { + var SubbandsGainLog2 = { + 'LL': 0, + 'LH': 1, + 'HL': 1, + 'HH': 2 + }; + function JpxImage() { + this.failOnCorruptedImage = false; + } + JpxImage.prototype = { + parse: function JpxImage_parse(data) { + var head = readUint16(data, 0); + if (head === 0xFF4F) { + this.parseCodestream(data, 0, data.length); + return; + } + var position = 0, length = data.length; + while (position < length) { + var headerSize = 8; + var lbox = readUint32(data, position); + var tbox = readUint32(data, position + 4); + position += headerSize; + if (lbox === 1) { + lbox = readUint32(data, position) * 4294967296 + readUint32(data, position + 4); + position += 8; + headerSize += 8; + } + if (lbox === 0) { + lbox = length - position + headerSize; + } + if (lbox < headerSize) { + error('JPX Error: Invalid box field size'); + } + var dataLength = lbox - headerSize; + var jumpDataLength = true; + switch (tbox) { + case 0x6A703268: + jumpDataLength = false; + break; + case 0x636F6C72: + var method = data[position]; + if (method === 1) { + var colorspace = readUint32(data, position + 3); + switch (colorspace) { + case 16: + case 17: + case 18: + break; + default: + warn('Unknown colorspace ' + colorspace); + break; + } + } else if (method === 2) { + info('ICC profile not supported'); + } + break; + case 0x6A703263: + this.parseCodestream(data, position, position + dataLength); + break; + case 0x6A502020: + if (0x0d0a870a !== readUint32(data, position)) { + warn('Invalid JP2 signature'); + } + break; + case 0x6A501A1A: + case 0x66747970: + case 0x72726571: + case 0x72657320: + case 0x69686472: + break; + default: + var headerType = String.fromCharCode(tbox >> 24 & 0xFF, tbox >> 16 & 0xFF, tbox >> 8 & 0xFF, tbox & 0xFF); + warn('Unsupported header type ' + tbox + ' (' + headerType + ')'); + break; + } + if (jumpDataLength) { + position += dataLength; + } + } + }, + parseImageProperties: function JpxImage_parseImageProperties(stream) { + var newByte = stream.getByte(); + while (newByte >= 0) { + var oldByte = newByte; + newByte = stream.getByte(); + var code = oldByte << 8 | newByte; + if (code === 0xFF51) { + stream.skip(4); + var Xsiz = stream.getInt32() >>> 0; + var Ysiz = stream.getInt32() >>> 0; + var XOsiz = stream.getInt32() >>> 0; + var YOsiz = stream.getInt32() >>> 0; + stream.skip(16); + var Csiz = stream.getUint16(); + this.width = Xsiz - XOsiz; + this.height = Ysiz - YOsiz; + this.componentsCount = Csiz; + this.bitsPerComponent = 8; + return; + } + } + error('JPX Error: No size marker found in JPX stream'); + }, + parseCodestream: function JpxImage_parseCodestream(data, start, end) { + var context = {}; + var doNotRecover = false; + try { + var position = start; + while (position + 1 < end) { + var code = readUint16(data, position); + position += 2; + var length = 0, j, sqcd, spqcds, spqcdSize, scalarExpounded, tile; + switch (code) { + case 0xFF4F: + context.mainHeader = true; + break; + case 0xFFD9: + break; + case 0xFF51: + length = readUint16(data, position); + var siz = {}; + siz.Xsiz = readUint32(data, position + 4); + siz.Ysiz = readUint32(data, position + 8); + siz.XOsiz = readUint32(data, position + 12); + siz.YOsiz = readUint32(data, position + 16); + siz.XTsiz = readUint32(data, position + 20); + siz.YTsiz = readUint32(data, position + 24); + siz.XTOsiz = readUint32(data, position + 28); + siz.YTOsiz = readUint32(data, position + 32); + var componentsCount = readUint16(data, position + 36); + siz.Csiz = componentsCount; + var components = []; + j = position + 38; + for (var i = 0; i < componentsCount; i++) { + var component = { + precision: (data[j] & 0x7F) + 1, + isSigned: !!(data[j] & 0x80), + XRsiz: data[j + 1], + YRsiz: data[j + 1] + }; + calculateComponentDimensions(component, siz); + components.push(component); + } + context.SIZ = siz; + context.components = components; + calculateTileGrids(context, components); + context.QCC = []; + context.COC = []; + break; + case 0xFF5C: + length = readUint16(data, position); + var qcd = {}; + j = position + 2; + sqcd = data[j++]; + switch (sqcd & 0x1F) { + case 0: + spqcdSize = 8; + scalarExpounded = true; + break; + case 1: + spqcdSize = 16; + scalarExpounded = false; + break; + case 2: + spqcdSize = 16; + scalarExpounded = true; + break; + default: + throw new Error('Invalid SQcd value ' + sqcd); + } + qcd.noQuantization = spqcdSize === 8; + qcd.scalarExpounded = scalarExpounded; + qcd.guardBits = sqcd >> 5; + spqcds = []; + while (j < length + position) { + var spqcd = {}; + if (spqcdSize === 8) { + spqcd.epsilon = data[j++] >> 3; + spqcd.mu = 0; + } else { + spqcd.epsilon = data[j] >> 3; + spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1]; + j += 2; + } + spqcds.push(spqcd); + } + qcd.SPqcds = spqcds; + if (context.mainHeader) { + context.QCD = qcd; + } else { + context.currentTile.QCD = qcd; + context.currentTile.QCC = []; + } + break; + case 0xFF5D: + length = readUint16(data, position); + var qcc = {}; + j = position + 2; + var cqcc; + if (context.SIZ.Csiz < 257) { + cqcc = data[j++]; + } else { + cqcc = readUint16(data, j); + j += 2; + } + sqcd = data[j++]; + switch (sqcd & 0x1F) { + case 0: + spqcdSize = 8; + scalarExpounded = true; + break; + case 1: + spqcdSize = 16; + scalarExpounded = false; + break; + case 2: + spqcdSize = 16; + scalarExpounded = true; + break; + default: + throw new Error('Invalid SQcd value ' + sqcd); + } + qcc.noQuantization = spqcdSize === 8; + qcc.scalarExpounded = scalarExpounded; + qcc.guardBits = sqcd >> 5; + spqcds = []; + while (j < length + position) { + spqcd = {}; + if (spqcdSize === 8) { + spqcd.epsilon = data[j++] >> 3; + spqcd.mu = 0; + } else { + spqcd.epsilon = data[j] >> 3; + spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1]; + j += 2; + } + spqcds.push(spqcd); + } + qcc.SPqcds = spqcds; + if (context.mainHeader) { + context.QCC[cqcc] = qcc; + } else { + context.currentTile.QCC[cqcc] = qcc; + } + break; + case 0xFF52: + length = readUint16(data, position); + var cod = {}; + j = position + 2; + var scod = data[j++]; + cod.entropyCoderWithCustomPrecincts = !!(scod & 1); + cod.sopMarkerUsed = !!(scod & 2); + cod.ephMarkerUsed = !!(scod & 4); + cod.progressionOrder = data[j++]; + cod.layersCount = readUint16(data, j); + j += 2; + cod.multipleComponentTransform = data[j++]; + cod.decompositionLevelsCount = data[j++]; + cod.xcb = (data[j++] & 0xF) + 2; + cod.ycb = (data[j++] & 0xF) + 2; + var blockStyle = data[j++]; + cod.selectiveArithmeticCodingBypass = !!(blockStyle & 1); + cod.resetContextProbabilities = !!(blockStyle & 2); + cod.terminationOnEachCodingPass = !!(blockStyle & 4); + cod.verticalyStripe = !!(blockStyle & 8); + cod.predictableTermination = !!(blockStyle & 16); + cod.segmentationSymbolUsed = !!(blockStyle & 32); + cod.reversibleTransformation = data[j++]; + if (cod.entropyCoderWithCustomPrecincts) { + var precinctsSizes = []; + while (j < length + position) { + var precinctsSize = data[j++]; + precinctsSizes.push({ + PPx: precinctsSize & 0xF, + PPy: precinctsSize >> 4 + }); + } + cod.precinctsSizes = precinctsSizes; + } + var unsupported = []; + if (cod.selectiveArithmeticCodingBypass) { + unsupported.push('selectiveArithmeticCodingBypass'); + } + if (cod.resetContextProbabilities) { + unsupported.push('resetContextProbabilities'); + } + if (cod.terminationOnEachCodingPass) { + unsupported.push('terminationOnEachCodingPass'); + } + if (cod.verticalyStripe) { + unsupported.push('verticalyStripe'); + } + if (cod.predictableTermination) { + unsupported.push('predictableTermination'); + } + if (unsupported.length > 0) { + doNotRecover = true; + throw new Error('Unsupported COD options (' + unsupported.join(', ') + ')'); + } + if (context.mainHeader) { + context.COD = cod; + } else { + context.currentTile.COD = cod; + context.currentTile.COC = []; + } + break; + case 0xFF90: + length = readUint16(data, position); + tile = {}; + tile.index = readUint16(data, position + 2); + tile.length = readUint32(data, position + 4); + tile.dataEnd = tile.length + position - 2; + tile.partIndex = data[position + 8]; + tile.partsCount = data[position + 9]; + context.mainHeader = false; + if (tile.partIndex === 0) { + tile.COD = context.COD; + tile.COC = context.COC.slice(0); + tile.QCD = context.QCD; + tile.QCC = context.QCC.slice(0); + } + context.currentTile = tile; + break; + case 0xFF93: + tile = context.currentTile; + if (tile.partIndex === 0) { + initializeTile(context, tile.index); + buildPackets(context); + } + length = tile.dataEnd - position; + parseTilePackets(context, data, position, length); + break; + case 0xFF55: + case 0xFF57: + case 0xFF58: + case 0xFF64: + length = readUint16(data, position); + break; + case 0xFF53: + throw new Error('Codestream code 0xFF53 (COC) is ' + 'not implemented'); + default: + throw new Error('Unknown codestream code: ' + code.toString(16)); + } + position += length; + } + } catch (e) { + if (doNotRecover || this.failOnCorruptedImage) { + error('JPX Error: ' + e.message); + } else { + warn('JPX: Trying to recover from: ' + e.message); + } + } + this.tiles = transformComponents(context); + this.width = context.SIZ.Xsiz - context.SIZ.XOsiz; + this.height = context.SIZ.Ysiz - context.SIZ.YOsiz; + this.componentsCount = context.SIZ.Csiz; + } + }; + function calculateComponentDimensions(component, siz) { + component.x0 = Math.ceil(siz.XOsiz / component.XRsiz); + component.x1 = Math.ceil(siz.Xsiz / component.XRsiz); + component.y0 = Math.ceil(siz.YOsiz / component.YRsiz); + component.y1 = Math.ceil(siz.Ysiz / component.YRsiz); + component.width = component.x1 - component.x0; + component.height = component.y1 - component.y0; + } + function calculateTileGrids(context, components) { + var siz = context.SIZ; + var tile, tiles = []; + var numXtiles = Math.ceil((siz.Xsiz - siz.XTOsiz) / siz.XTsiz); + var numYtiles = Math.ceil((siz.Ysiz - siz.YTOsiz) / siz.YTsiz); + for (var q = 0; q < numYtiles; q++) { + for (var p = 0; p < numXtiles; p++) { + tile = {}; + tile.tx0 = Math.max(siz.XTOsiz + p * siz.XTsiz, siz.XOsiz); + tile.ty0 = Math.max(siz.YTOsiz + q * siz.YTsiz, siz.YOsiz); + tile.tx1 = Math.min(siz.XTOsiz + (p + 1) * siz.XTsiz, siz.Xsiz); + tile.ty1 = Math.min(siz.YTOsiz + (q + 1) * siz.YTsiz, siz.Ysiz); + tile.width = tile.tx1 - tile.tx0; + tile.height = tile.ty1 - tile.ty0; + tile.components = []; + tiles.push(tile); + } + } + context.tiles = tiles; + var componentsCount = siz.Csiz; + for (var i = 0, ii = componentsCount; i < ii; i++) { + var component = components[i]; + for (var j = 0, jj = tiles.length; j < jj; j++) { + var tileComponent = {}; + tile = tiles[j]; + tileComponent.tcx0 = Math.ceil(tile.tx0 / component.XRsiz); + tileComponent.tcy0 = Math.ceil(tile.ty0 / component.YRsiz); + tileComponent.tcx1 = Math.ceil(tile.tx1 / component.XRsiz); + tileComponent.tcy1 = Math.ceil(tile.ty1 / component.YRsiz); + tileComponent.width = tileComponent.tcx1 - tileComponent.tcx0; + tileComponent.height = tileComponent.tcy1 - tileComponent.tcy0; + tile.components[i] = tileComponent; + } + } + } + function getBlocksDimensions(context, component, r) { + var codOrCoc = component.codingStyleParameters; + var result = {}; + if (!codOrCoc.entropyCoderWithCustomPrecincts) { + result.PPx = 15; + result.PPy = 15; + } else { + result.PPx = codOrCoc.precinctsSizes[r].PPx; + result.PPy = codOrCoc.precinctsSizes[r].PPy; + } + result.xcb_ = r > 0 ? Math.min(codOrCoc.xcb, result.PPx - 1) : Math.min(codOrCoc.xcb, result.PPx); + result.ycb_ = r > 0 ? Math.min(codOrCoc.ycb, result.PPy - 1) : Math.min(codOrCoc.ycb, result.PPy); + return result; + } + function buildPrecincts(context, resolution, dimensions) { + var precinctWidth = 1 << dimensions.PPx; + var precinctHeight = 1 << dimensions.PPy; + var isZeroRes = resolution.resLevel === 0; + var precinctWidthInSubband = 1 << dimensions.PPx + (isZeroRes ? 0 : -1); + var precinctHeightInSubband = 1 << dimensions.PPy + (isZeroRes ? 0 : -1); + var numprecinctswide = resolution.trx1 > resolution.trx0 ? Math.ceil(resolution.trx1 / precinctWidth) - Math.floor(resolution.trx0 / precinctWidth) : 0; + var numprecinctshigh = resolution.try1 > resolution.try0 ? Math.ceil(resolution.try1 / precinctHeight) - Math.floor(resolution.try0 / precinctHeight) : 0; + var numprecincts = numprecinctswide * numprecinctshigh; + resolution.precinctParameters = { + precinctWidth: precinctWidth, + precinctHeight: precinctHeight, + numprecinctswide: numprecinctswide, + numprecinctshigh: numprecinctshigh, + numprecincts: numprecincts, + precinctWidthInSubband: precinctWidthInSubband, + precinctHeightInSubband: precinctHeightInSubband + }; + } + function buildCodeblocks(context, subband, dimensions) { + var xcb_ = dimensions.xcb_; + var ycb_ = dimensions.ycb_; + var codeblockWidth = 1 << xcb_; + var codeblockHeight = 1 << ycb_; + var cbx0 = subband.tbx0 >> xcb_; + var cby0 = subband.tby0 >> ycb_; + var cbx1 = subband.tbx1 + codeblockWidth - 1 >> xcb_; + var cby1 = subband.tby1 + codeblockHeight - 1 >> ycb_; + var precinctParameters = subband.resolution.precinctParameters; + var codeblocks = []; + var precincts = []; + var i, j, codeblock, precinctNumber; + for (j = cby0; j < cby1; j++) { + for (i = cbx0; i < cbx1; i++) { + codeblock = { + cbx: i, + cby: j, + tbx0: codeblockWidth * i, + tby0: codeblockHeight * j, + tbx1: codeblockWidth * (i + 1), + tby1: codeblockHeight * (j + 1) + }; + codeblock.tbx0_ = Math.max(subband.tbx0, codeblock.tbx0); + codeblock.tby0_ = Math.max(subband.tby0, codeblock.tby0); + codeblock.tbx1_ = Math.min(subband.tbx1, codeblock.tbx1); + codeblock.tby1_ = Math.min(subband.tby1, codeblock.tby1); + var pi = Math.floor((codeblock.tbx0_ - subband.tbx0) / precinctParameters.precinctWidthInSubband); + var pj = Math.floor((codeblock.tby0_ - subband.tby0) / precinctParameters.precinctHeightInSubband); + precinctNumber = pi + pj * precinctParameters.numprecinctswide; + codeblock.precinctNumber = precinctNumber; + codeblock.subbandType = subband.type; + codeblock.Lblock = 3; + if (codeblock.tbx1_ <= codeblock.tbx0_ || codeblock.tby1_ <= codeblock.tby0_) { + continue; + } + codeblocks.push(codeblock); + var precinct = precincts[precinctNumber]; + if (precinct !== undefined) { + if (i < precinct.cbxMin) { + precinct.cbxMin = i; + } else if (i > precinct.cbxMax) { + precinct.cbxMax = i; + } + if (j < precinct.cbyMin) { + precinct.cbxMin = j; + } else if (j > precinct.cbyMax) { + precinct.cbyMax = j; + } + } else { + precincts[precinctNumber] = precinct = { + cbxMin: i, + cbyMin: j, + cbxMax: i, + cbyMax: j + }; + } + codeblock.precinct = precinct; + } + } + subband.codeblockParameters = { + codeblockWidth: xcb_, + codeblockHeight: ycb_, + numcodeblockwide: cbx1 - cbx0 + 1, + numcodeblockhigh: cby1 - cby0 + 1 + }; + subband.codeblocks = codeblocks; + subband.precincts = precincts; + } + function createPacket(resolution, precinctNumber, layerNumber) { + var precinctCodeblocks = []; + var subbands = resolution.subbands; + for (var i = 0, ii = subbands.length; i < ii; i++) { + var subband = subbands[i]; + var codeblocks = subband.codeblocks; + for (var j = 0, jj = codeblocks.length; j < jj; j++) { + var codeblock = codeblocks[j]; + if (codeblock.precinctNumber !== precinctNumber) { + continue; + } + precinctCodeblocks.push(codeblock); + } + } + return { + layerNumber: layerNumber, + codeblocks: precinctCodeblocks + }; + } + function LayerResolutionComponentPositionIterator(context) { + var siz = context.SIZ; + var tileIndex = context.currentTile.index; + var tile = context.tiles[tileIndex]; + var layersCount = tile.codingStyleDefaultParameters.layersCount; + var componentsCount = siz.Csiz; + var maxDecompositionLevelsCount = 0; + for (var q = 0; q < componentsCount; q++) { + maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount); + } + var l = 0, r = 0, i = 0, k = 0; + this.nextPacket = function JpxImage_nextPacket() { + for (; l < layersCount; l++) { + for (; r <= maxDecompositionLevelsCount; r++) { + for (; i < componentsCount; i++) { + var component = tile.components[i]; + if (r > component.codingStyleParameters.decompositionLevelsCount) { + continue; + } + var resolution = component.resolutions[r]; + var numprecincts = resolution.precinctParameters.numprecincts; + for (; k < numprecincts;) { + var packet = createPacket(resolution, k, l); + k++; + return packet; + } + k = 0; + } + i = 0; + } + r = 0; + } + error('JPX Error: Out of packets'); + }; + } + function ResolutionLayerComponentPositionIterator(context) { + var siz = context.SIZ; + var tileIndex = context.currentTile.index; + var tile = context.tiles[tileIndex]; + var layersCount = tile.codingStyleDefaultParameters.layersCount; + var componentsCount = siz.Csiz; + var maxDecompositionLevelsCount = 0; + for (var q = 0; q < componentsCount; q++) { + maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount); + } + var r = 0, l = 0, i = 0, k = 0; + this.nextPacket = function JpxImage_nextPacket() { + for (; r <= maxDecompositionLevelsCount; r++) { + for (; l < layersCount; l++) { + for (; i < componentsCount; i++) { + var component = tile.components[i]; + if (r > component.codingStyleParameters.decompositionLevelsCount) { + continue; + } + var resolution = component.resolutions[r]; + var numprecincts = resolution.precinctParameters.numprecincts; + for (; k < numprecincts;) { + var packet = createPacket(resolution, k, l); + k++; + return packet; + } + k = 0; + } + i = 0; + } + l = 0; + } + error('JPX Error: Out of packets'); + }; + } + function ResolutionPositionComponentLayerIterator(context) { + var siz = context.SIZ; + var tileIndex = context.currentTile.index; + var tile = context.tiles[tileIndex]; + var layersCount = tile.codingStyleDefaultParameters.layersCount; + var componentsCount = siz.Csiz; + var l, r, c, p; + var maxDecompositionLevelsCount = 0; + for (c = 0; c < componentsCount; c++) { + var component = tile.components[c]; + maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, component.codingStyleParameters.decompositionLevelsCount); + } + var maxNumPrecinctsInLevel = new Int32Array(maxDecompositionLevelsCount + 1); + for (r = 0; r <= maxDecompositionLevelsCount; ++r) { + var maxNumPrecincts = 0; + for (c = 0; c < componentsCount; ++c) { + var resolutions = tile.components[c].resolutions; + if (r < resolutions.length) { + maxNumPrecincts = Math.max(maxNumPrecincts, resolutions[r].precinctParameters.numprecincts); + } + } + maxNumPrecinctsInLevel[r] = maxNumPrecincts; + } + l = 0; + r = 0; + c = 0; + p = 0; + this.nextPacket = function JpxImage_nextPacket() { + for (; r <= maxDecompositionLevelsCount; r++) { + for (; p < maxNumPrecinctsInLevel[r]; p++) { + for (; c < componentsCount; c++) { + var component = tile.components[c]; + if (r > component.codingStyleParameters.decompositionLevelsCount) { + continue; + } + var resolution = component.resolutions[r]; + var numprecincts = resolution.precinctParameters.numprecincts; + if (p >= numprecincts) { + continue; + } + for (; l < layersCount;) { + var packet = createPacket(resolution, p, l); + l++; + return packet; + } + l = 0; + } + c = 0; + } + p = 0; + } + error('JPX Error: Out of packets'); + }; + } + function PositionComponentResolutionLayerIterator(context) { + var siz = context.SIZ; + var tileIndex = context.currentTile.index; + var tile = context.tiles[tileIndex]; + var layersCount = tile.codingStyleDefaultParameters.layersCount; + var componentsCount = siz.Csiz; + var precinctsSizes = getPrecinctSizesInImageScale(tile); + var precinctsIterationSizes = precinctsSizes; + var l = 0, r = 0, c = 0, px = 0, py = 0; + this.nextPacket = function JpxImage_nextPacket() { + for (; py < precinctsIterationSizes.maxNumHigh; py++) { + for (; px < precinctsIterationSizes.maxNumWide; px++) { + for (; c < componentsCount; c++) { + var component = tile.components[c]; + var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; + for (; r <= decompositionLevelsCount; r++) { + var resolution = component.resolutions[r]; + var sizeInImageScale = precinctsSizes.components[c].resolutions[r]; + var k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution); + if (k === null) { + continue; + } + for (; l < layersCount;) { + var packet = createPacket(resolution, k, l); + l++; + return packet; + } + l = 0; + } + r = 0; + } + c = 0; + } + px = 0; + } + error('JPX Error: Out of packets'); + }; + } + function ComponentPositionResolutionLayerIterator(context) { + var siz = context.SIZ; + var tileIndex = context.currentTile.index; + var tile = context.tiles[tileIndex]; + var layersCount = tile.codingStyleDefaultParameters.layersCount; + var componentsCount = siz.Csiz; + var precinctsSizes = getPrecinctSizesInImageScale(tile); + var l = 0, r = 0, c = 0, px = 0, py = 0; + this.nextPacket = function JpxImage_nextPacket() { + for (; c < componentsCount; ++c) { + var component = tile.components[c]; + var precinctsIterationSizes = precinctsSizes.components[c]; + var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; + for (; py < precinctsIterationSizes.maxNumHigh; py++) { + for (; px < precinctsIterationSizes.maxNumWide; px++) { + for (; r <= decompositionLevelsCount; r++) { + var resolution = component.resolutions[r]; + var sizeInImageScale = precinctsIterationSizes.resolutions[r]; + var k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution); + if (k === null) { + continue; + } + for (; l < layersCount;) { + var packet = createPacket(resolution, k, l); + l++; + return packet; + } + l = 0; + } + r = 0; + } + px = 0; + } + py = 0; + } + error('JPX Error: Out of packets'); + }; + } + function getPrecinctIndexIfExist(pxIndex, pyIndex, sizeInImageScale, precinctIterationSizes, resolution) { + var posX = pxIndex * precinctIterationSizes.minWidth; + var posY = pyIndex * precinctIterationSizes.minHeight; + if (posX % sizeInImageScale.width !== 0 || posY % sizeInImageScale.height !== 0) { + return null; + } + var startPrecinctRowIndex = posY / sizeInImageScale.width * resolution.precinctParameters.numprecinctswide; + return posX / sizeInImageScale.height + startPrecinctRowIndex; + } + function getPrecinctSizesInImageScale(tile) { + var componentsCount = tile.components.length; + var minWidth = Number.MAX_VALUE; + var minHeight = Number.MAX_VALUE; + var maxNumWide = 0; + var maxNumHigh = 0; + var sizePerComponent = new Array(componentsCount); + for (var c = 0; c < componentsCount; c++) { + var component = tile.components[c]; + var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; + var sizePerResolution = new Array(decompositionLevelsCount + 1); + var minWidthCurrentComponent = Number.MAX_VALUE; + var minHeightCurrentComponent = Number.MAX_VALUE; + var maxNumWideCurrentComponent = 0; + var maxNumHighCurrentComponent = 0; + var scale = 1; + for (var r = decompositionLevelsCount; r >= 0; --r) { + var resolution = component.resolutions[r]; + var widthCurrentResolution = scale * resolution.precinctParameters.precinctWidth; + var heightCurrentResolution = scale * resolution.precinctParameters.precinctHeight; + minWidthCurrentComponent = Math.min(minWidthCurrentComponent, widthCurrentResolution); + minHeightCurrentComponent = Math.min(minHeightCurrentComponent, heightCurrentResolution); + maxNumWideCurrentComponent = Math.max(maxNumWideCurrentComponent, resolution.precinctParameters.numprecinctswide); + maxNumHighCurrentComponent = Math.max(maxNumHighCurrentComponent, resolution.precinctParameters.numprecinctshigh); + sizePerResolution[r] = { + width: widthCurrentResolution, + height: heightCurrentResolution + }; + scale <<= 1; + } + minWidth = Math.min(minWidth, minWidthCurrentComponent); + minHeight = Math.min(minHeight, minHeightCurrentComponent); + maxNumWide = Math.max(maxNumWide, maxNumWideCurrentComponent); + maxNumHigh = Math.max(maxNumHigh, maxNumHighCurrentComponent); + sizePerComponent[c] = { + resolutions: sizePerResolution, + minWidth: minWidthCurrentComponent, + minHeight: minHeightCurrentComponent, + maxNumWide: maxNumWideCurrentComponent, + maxNumHigh: maxNumHighCurrentComponent + }; + } + return { + components: sizePerComponent, + minWidth: minWidth, + minHeight: minHeight, + maxNumWide: maxNumWide, + maxNumHigh: maxNumHigh + }; + } + function buildPackets(context) { + var siz = context.SIZ; + var tileIndex = context.currentTile.index; + var tile = context.tiles[tileIndex]; + var componentsCount = siz.Csiz; + for (var c = 0; c < componentsCount; c++) { + var component = tile.components[c]; + var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; + var resolutions = []; + var subbands = []; + for (var r = 0; r <= decompositionLevelsCount; r++) { + var blocksDimensions = getBlocksDimensions(context, component, r); + var resolution = {}; + var scale = 1 << decompositionLevelsCount - r; + resolution.trx0 = Math.ceil(component.tcx0 / scale); + resolution.try0 = Math.ceil(component.tcy0 / scale); + resolution.trx1 = Math.ceil(component.tcx1 / scale); + resolution.try1 = Math.ceil(component.tcy1 / scale); + resolution.resLevel = r; + buildPrecincts(context, resolution, blocksDimensions); + resolutions.push(resolution); + var subband; + if (r === 0) { + subband = {}; + subband.type = 'LL'; + subband.tbx0 = Math.ceil(component.tcx0 / scale); + subband.tby0 = Math.ceil(component.tcy0 / scale); + subband.tbx1 = Math.ceil(component.tcx1 / scale); + subband.tby1 = Math.ceil(component.tcy1 / scale); + subband.resolution = resolution; + buildCodeblocks(context, subband, blocksDimensions); + subbands.push(subband); + resolution.subbands = [subband]; + } else { + var bscale = 1 << decompositionLevelsCount - r + 1; + var resolutionSubbands = []; + subband = {}; + subband.type = 'HL'; + subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5); + subband.tby0 = Math.ceil(component.tcy0 / bscale); + subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5); + subband.tby1 = Math.ceil(component.tcy1 / bscale); + subband.resolution = resolution; + buildCodeblocks(context, subband, blocksDimensions); + subbands.push(subband); + resolutionSubbands.push(subband); + subband = {}; + subband.type = 'LH'; + subband.tbx0 = Math.ceil(component.tcx0 / bscale); + subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5); + subband.tbx1 = Math.ceil(component.tcx1 / bscale); + subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5); + subband.resolution = resolution; + buildCodeblocks(context, subband, blocksDimensions); + subbands.push(subband); + resolutionSubbands.push(subband); + subband = {}; + subband.type = 'HH'; + subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5); + subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5); + subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5); + subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5); + subband.resolution = resolution; + buildCodeblocks(context, subband, blocksDimensions); + subbands.push(subband); + resolutionSubbands.push(subband); + resolution.subbands = resolutionSubbands; + } + } + component.resolutions = resolutions; + component.subbands = subbands; + } + var progressionOrder = tile.codingStyleDefaultParameters.progressionOrder; + switch (progressionOrder) { + case 0: + tile.packetsIterator = new LayerResolutionComponentPositionIterator(context); + break; + case 1: + tile.packetsIterator = new ResolutionLayerComponentPositionIterator(context); + break; + case 2: + tile.packetsIterator = new ResolutionPositionComponentLayerIterator(context); + break; + case 3: + tile.packetsIterator = new PositionComponentResolutionLayerIterator(context); + break; + case 4: + tile.packetsIterator = new ComponentPositionResolutionLayerIterator(context); + break; + default: + error('JPX Error: Unsupported progression order ' + progressionOrder); + } + } + function parseTilePackets(context, data, offset, dataLength) { + var position = 0; + var buffer, bufferSize = 0, skipNextBit = false; + function readBits(count) { + while (bufferSize < count) { + var b = data[offset + position]; + position++; + if (skipNextBit) { + buffer = buffer << 7 | b; + bufferSize += 7; + skipNextBit = false; + } else { + buffer = buffer << 8 | b; + bufferSize += 8; + } + if (b === 0xFF) { + skipNextBit = true; + } + } + bufferSize -= count; + return buffer >>> bufferSize & (1 << count) - 1; + } + function skipMarkerIfEqual(value) { + if (data[offset + position - 1] === 0xFF && data[offset + position] === value) { + skipBytes(1); + return true; + } else if (data[offset + position] === 0xFF && data[offset + position + 1] === value) { + skipBytes(2); + return true; + } + return false; + } + function skipBytes(count) { + position += count; + } + function alignToByte() { + bufferSize = 0; + if (skipNextBit) { + position++; + skipNextBit = false; + } + } + function readCodingpasses() { + if (readBits(1) === 0) { + return 1; + } + if (readBits(1) === 0) { + return 2; + } + var value = readBits(2); + if (value < 3) { + return value + 3; + } + value = readBits(5); + if (value < 31) { + return value + 6; + } + value = readBits(7); + return value + 37; + } + var tileIndex = context.currentTile.index; + var tile = context.tiles[tileIndex]; + var sopMarkerUsed = context.COD.sopMarkerUsed; + var ephMarkerUsed = context.COD.ephMarkerUsed; + var packetsIterator = tile.packetsIterator; + while (position < dataLength) { + alignToByte(); + if (sopMarkerUsed && skipMarkerIfEqual(0x91)) { + skipBytes(4); + } + var packet = packetsIterator.nextPacket(); + if (!readBits(1)) { + continue; + } + var layerNumber = packet.layerNumber; + var queue = [], codeblock; + for (var i = 0, ii = packet.codeblocks.length; i < ii; i++) { + codeblock = packet.codeblocks[i]; + var precinct = codeblock.precinct; + var codeblockColumn = codeblock.cbx - precinct.cbxMin; + var codeblockRow = codeblock.cby - precinct.cbyMin; + var codeblockIncluded = false; + var firstTimeInclusion = false; + var valueReady; + if (codeblock['included'] !== undefined) { + codeblockIncluded = !!readBits(1); + } else { + precinct = codeblock.precinct; + var inclusionTree, zeroBitPlanesTree; + if (precinct['inclusionTree'] !== undefined) { + inclusionTree = precinct.inclusionTree; + } else { + var width = precinct.cbxMax - precinct.cbxMin + 1; + var height = precinct.cbyMax - precinct.cbyMin + 1; + inclusionTree = new InclusionTree(width, height, layerNumber); + zeroBitPlanesTree = new TagTree(width, height); + precinct.inclusionTree = inclusionTree; + precinct.zeroBitPlanesTree = zeroBitPlanesTree; + } + if (inclusionTree.reset(codeblockColumn, codeblockRow, layerNumber)) { + while (true) { + if (readBits(1)) { + valueReady = !inclusionTree.nextLevel(); + if (valueReady) { + codeblock.included = true; + codeblockIncluded = firstTimeInclusion = true; + break; + } + } else { + inclusionTree.incrementValue(layerNumber); + break; + } + } + } + } + if (!codeblockIncluded) { + continue; + } + if (firstTimeInclusion) { + zeroBitPlanesTree = precinct.zeroBitPlanesTree; + zeroBitPlanesTree.reset(codeblockColumn, codeblockRow); + while (true) { + if (readBits(1)) { + valueReady = !zeroBitPlanesTree.nextLevel(); + if (valueReady) { + break; + } + } else { + zeroBitPlanesTree.incrementValue(); + } + } + codeblock.zeroBitPlanes = zeroBitPlanesTree.value; + } + var codingpasses = readCodingpasses(); + while (readBits(1)) { + codeblock.Lblock++; + } + var codingpassesLog2 = log2(codingpasses); + var bits = (codingpasses < 1 << codingpassesLog2 ? codingpassesLog2 - 1 : codingpassesLog2) + codeblock.Lblock; + var codedDataLength = readBits(bits); + queue.push({ + codeblock: codeblock, + codingpasses: codingpasses, + dataLength: codedDataLength + }); + } + alignToByte(); + if (ephMarkerUsed) { + skipMarkerIfEqual(0x92); + } + while (queue.length > 0) { + var packetItem = queue.shift(); + codeblock = packetItem.codeblock; + if (codeblock['data'] === undefined) { + codeblock.data = []; + } + codeblock.data.push({ + data: data, + start: offset + position, + end: offset + position + packetItem.dataLength, + codingpasses: packetItem.codingpasses + }); + position += packetItem.dataLength; + } + } + return position; + } + function copyCoefficients(coefficients, levelWidth, levelHeight, subband, delta, mb, reversible, segmentationSymbolUsed) { + var x0 = subband.tbx0; + var y0 = subband.tby0; + var width = subband.tbx1 - subband.tbx0; + var codeblocks = subband.codeblocks; + var right = subband.type.charAt(0) === 'H' ? 1 : 0; + var bottom = subband.type.charAt(1) === 'H' ? levelWidth : 0; + for (var i = 0, ii = codeblocks.length; i < ii; ++i) { + var codeblock = codeblocks[i]; + var blockWidth = codeblock.tbx1_ - codeblock.tbx0_; + var blockHeight = codeblock.tby1_ - codeblock.tby0_; + if (blockWidth === 0 || blockHeight === 0) { + continue; + } + if (codeblock['data'] === undefined) { + continue; + } + var bitModel, currentCodingpassType; + bitModel = new BitModel(blockWidth, blockHeight, codeblock.subbandType, codeblock.zeroBitPlanes, mb); + currentCodingpassType = 2; + var data = codeblock.data, totalLength = 0, codingpasses = 0; + var j, jj, dataItem; + for (j = 0, jj = data.length; j < jj; j++) { + dataItem = data[j]; + totalLength += dataItem.end - dataItem.start; + codingpasses += dataItem.codingpasses; + } + var encodedData = new Uint8Array(totalLength); + var position = 0; + for (j = 0, jj = data.length; j < jj; j++) { + dataItem = data[j]; + var chunk = dataItem.data.subarray(dataItem.start, dataItem.end); + encodedData.set(chunk, position); + position += chunk.length; + } + var decoder = new ArithmeticDecoder(encodedData, 0, totalLength); + bitModel.setDecoder(decoder); + for (j = 0; j < codingpasses; j++) { + switch (currentCodingpassType) { + case 0: + bitModel.runSignificancePropagationPass(); + break; + case 1: + bitModel.runMagnitudeRefinementPass(); + break; + case 2: + bitModel.runCleanupPass(); + if (segmentationSymbolUsed) { + bitModel.checkSegmentationSymbol(); + } + break; + } + currentCodingpassType = (currentCodingpassType + 1) % 3; + } + var offset = codeblock.tbx0_ - x0 + (codeblock.tby0_ - y0) * width; + var sign = bitModel.coefficentsSign; + var magnitude = bitModel.coefficentsMagnitude; + var bitsDecoded = bitModel.bitsDecoded; + var magnitudeCorrection = reversible ? 0 : 0.5; + var k, n, nb; + position = 0; + var interleave = subband.type !== 'LL'; + for (j = 0; j < blockHeight; j++) { + var row = offset / width | 0; + var levelOffset = 2 * row * (levelWidth - width) + right + bottom; + for (k = 0; k < blockWidth; k++) { + n = magnitude[position]; + if (n !== 0) { + n = (n + magnitudeCorrection) * delta; + if (sign[position] !== 0) { + n = -n; + } + nb = bitsDecoded[position]; + var pos = interleave ? levelOffset + (offset << 1) : offset; + if (reversible && nb >= mb) { + coefficients[pos] = n; + } else { + coefficients[pos] = n * (1 << mb - nb); + } + } + offset++; + position++; + } + offset += width - blockWidth; + } + } + } + function transformTile(context, tile, c) { + var component = tile.components[c]; + var codingStyleParameters = component.codingStyleParameters; + var quantizationParameters = component.quantizationParameters; + var decompositionLevelsCount = codingStyleParameters.decompositionLevelsCount; + var spqcds = quantizationParameters.SPqcds; + var scalarExpounded = quantizationParameters.scalarExpounded; + var guardBits = quantizationParameters.guardBits; + var segmentationSymbolUsed = codingStyleParameters.segmentationSymbolUsed; + var precision = context.components[c].precision; + var reversible = codingStyleParameters.reversibleTransformation; + var transform = reversible ? new ReversibleTransform() : new IrreversibleTransform(); + var subbandCoefficients = []; + var b = 0; + for (var i = 0; i <= decompositionLevelsCount; i++) { + var resolution = component.resolutions[i]; + var width = resolution.trx1 - resolution.trx0; + var height = resolution.try1 - resolution.try0; + var coefficients = new Float32Array(width * height); + for (var j = 0, jj = resolution.subbands.length; j < jj; j++) { + var mu, epsilon; + if (!scalarExpounded) { + mu = spqcds[0].mu; + epsilon = spqcds[0].epsilon + (i > 0 ? 1 - i : 0); + } else { + mu = spqcds[b].mu; + epsilon = spqcds[b].epsilon; + b++; + } + var subband = resolution.subbands[j]; + var gainLog2 = SubbandsGainLog2[subband.type]; + var delta = reversible ? 1 : Math.pow(2, precision + gainLog2 - epsilon) * (1 + mu / 2048); + var mb = guardBits + epsilon - 1; + copyCoefficients(coefficients, width, height, subband, delta, mb, reversible, segmentationSymbolUsed); + } + subbandCoefficients.push({ + width: width, + height: height, + items: coefficients + }); + } + var result = transform.calculate(subbandCoefficients, component.tcx0, component.tcy0); + return { + left: component.tcx0, + top: component.tcy0, + width: result.width, + height: result.height, + items: result.items + }; + } + function transformComponents(context) { + var siz = context.SIZ; + var components = context.components; + var componentsCount = siz.Csiz; + var resultImages = []; + for (var i = 0, ii = context.tiles.length; i < ii; i++) { + var tile = context.tiles[i]; + var transformedTiles = []; + var c; + for (c = 0; c < componentsCount; c++) { + transformedTiles[c] = transformTile(context, tile, c); + } + var tile0 = transformedTiles[0]; + var out = new Uint8Array(tile0.items.length * componentsCount); + var result = { + left: tile0.left, + top: tile0.top, + width: tile0.width, + height: tile0.height, + items: out + }; + var shift, offset, max, min, maxK; + var pos = 0, j, jj, y0, y1, y2, r, g, b, k, val; + if (tile.codingStyleDefaultParameters.multipleComponentTransform) { + var fourComponents = componentsCount === 4; + var y0items = transformedTiles[0].items; + var y1items = transformedTiles[1].items; + var y2items = transformedTiles[2].items; + var y3items = fourComponents ? transformedTiles[3].items : null; + shift = components[0].precision - 8; + offset = (128 << shift) + 0.5; + max = 255 * (1 << shift); + maxK = max * 0.5; + min = -maxK; + var component0 = tile.components[0]; + var alpha01 = componentsCount - 3; + jj = y0items.length; + if (!component0.codingStyleParameters.reversibleTransformation) { + for (j = 0; j < jj; j++, pos += alpha01) { + y0 = y0items[j] + offset; + y1 = y1items[j]; + y2 = y2items[j]; + r = y0 + 1.402 * y2; + g = y0 - 0.34413 * y1 - 0.71414 * y2; + b = y0 + 1.772 * y1; + out[pos++] = r <= 0 ? 0 : r >= max ? 255 : r >> shift; + out[pos++] = g <= 0 ? 0 : g >= max ? 255 : g >> shift; + out[pos++] = b <= 0 ? 0 : b >= max ? 255 : b >> shift; + } + } else { + for (j = 0; j < jj; j++, pos += alpha01) { + y0 = y0items[j] + offset; + y1 = y1items[j]; + y2 = y2items[j]; + g = y0 - (y2 + y1 >> 2); + r = g + y2; + b = g + y1; + out[pos++] = r <= 0 ? 0 : r >= max ? 255 : r >> shift; + out[pos++] = g <= 0 ? 0 : g >= max ? 255 : g >> shift; + out[pos++] = b <= 0 ? 0 : b >= max ? 255 : b >> shift; + } + } + if (fourComponents) { + for (j = 0, pos = 3; j < jj; j++, pos += 4) { + k = y3items[j]; + out[pos] = k <= min ? 0 : k >= maxK ? 255 : k + offset >> shift; + } + } + } else { + for (c = 0; c < componentsCount; c++) { + var items = transformedTiles[c].items; + shift = components[c].precision - 8; + offset = (128 << shift) + 0.5; + max = 127.5 * (1 << shift); + min = -max; + for (pos = c, j = 0, jj = items.length; j < jj; j++) { + val = items[j]; + out[pos] = val <= min ? 0 : val >= max ? 255 : val + offset >> shift; + pos += componentsCount; + } + } + } + resultImages.push(result); + } + return resultImages; + } + function initializeTile(context, tileIndex) { + var siz = context.SIZ; + var componentsCount = siz.Csiz; + var tile = context.tiles[tileIndex]; + for (var c = 0; c < componentsCount; c++) { + var component = tile.components[c]; + var qcdOrQcc = context.currentTile.QCC[c] !== undefined ? context.currentTile.QCC[c] : context.currentTile.QCD; + component.quantizationParameters = qcdOrQcc; + var codOrCoc = context.currentTile.COC[c] !== undefined ? context.currentTile.COC[c] : context.currentTile.COD; + component.codingStyleParameters = codOrCoc; + } + tile.codingStyleDefaultParameters = context.currentTile.COD; + } + var TagTree = function TagTreeClosure() { + function TagTree(width, height) { + var levelsLength = log2(Math.max(width, height)) + 1; + this.levels = []; + for (var i = 0; i < levelsLength; i++) { + var level = { + width: width, + height: height, + items: [] + }; + this.levels.push(level); + width = Math.ceil(width / 2); + height = Math.ceil(height / 2); + } + } + TagTree.prototype = { + reset: function TagTree_reset(i, j) { + var currentLevel = 0, value = 0, level; + while (currentLevel < this.levels.length) { + level = this.levels[currentLevel]; + var index = i + j * level.width; + if (level.items[index] !== undefined) { + value = level.items[index]; + break; + } + level.index = index; + i >>= 1; + j >>= 1; + currentLevel++; + } + currentLevel--; + level = this.levels[currentLevel]; + level.items[level.index] = value; + this.currentLevel = currentLevel; + delete this.value; + }, + incrementValue: function TagTree_incrementValue() { + var level = this.levels[this.currentLevel]; + level.items[level.index]++; + }, + nextLevel: function TagTree_nextLevel() { + var currentLevel = this.currentLevel; + var level = this.levels[currentLevel]; + var value = level.items[level.index]; + currentLevel--; + if (currentLevel < 0) { + this.value = value; + return false; + } + this.currentLevel = currentLevel; + level = this.levels[currentLevel]; + level.items[level.index] = value; + return true; + } + }; + return TagTree; + }(); + var InclusionTree = function InclusionTreeClosure() { + function InclusionTree(width, height, defaultValue) { + var levelsLength = log2(Math.max(width, height)) + 1; + this.levels = []; + for (var i = 0; i < levelsLength; i++) { + var items = new Uint8Array(width * height); + for (var j = 0, jj = items.length; j < jj; j++) { + items[j] = defaultValue; + } + var level = { + width: width, + height: height, + items: items + }; + this.levels.push(level); + width = Math.ceil(width / 2); + height = Math.ceil(height / 2); + } + } + InclusionTree.prototype = { + reset: function InclusionTree_reset(i, j, stopValue) { + var currentLevel = 0; + while (currentLevel < this.levels.length) { + var level = this.levels[currentLevel]; + var index = i + j * level.width; + level.index = index; + var value = level.items[index]; + if (value === 0xFF) { + break; + } + if (value > stopValue) { + this.currentLevel = currentLevel; + this.propagateValues(); + return false; + } + i >>= 1; + j >>= 1; + currentLevel++; + } + this.currentLevel = currentLevel - 1; + return true; + }, + incrementValue: function InclusionTree_incrementValue(stopValue) { + var level = this.levels[this.currentLevel]; + level.items[level.index] = stopValue + 1; + this.propagateValues(); + }, + propagateValues: function InclusionTree_propagateValues() { + var levelIndex = this.currentLevel; + var level = this.levels[levelIndex]; + var currentValue = level.items[level.index]; + while (--levelIndex >= 0) { + level = this.levels[levelIndex]; + level.items[level.index] = currentValue; + } + }, + nextLevel: function InclusionTree_nextLevel() { + var currentLevel = this.currentLevel; + var level = this.levels[currentLevel]; + var value = level.items[level.index]; + level.items[level.index] = 0xFF; + currentLevel--; + if (currentLevel < 0) { + return false; + } + this.currentLevel = currentLevel; + level = this.levels[currentLevel]; + level.items[level.index] = value; + return true; + } + }; + return InclusionTree; + }(); + var BitModel = function BitModelClosure() { + var UNIFORM_CONTEXT = 17; + var RUNLENGTH_CONTEXT = 18; + var LLAndLHContextsLabel = new Uint8Array([ + 0, + 5, + 8, + 0, + 3, + 7, + 8, + 0, + 4, + 7, + 8, + 0, + 0, + 0, + 0, + 0, + 1, + 6, + 8, + 0, + 3, + 7, + 8, + 0, + 4, + 7, + 8, + 0, + 0, + 0, + 0, + 0, + 2, + 6, + 8, + 0, + 3, + 7, + 8, + 0, + 4, + 7, + 8, + 0, + 0, + 0, + 0, + 0, + 2, + 6, + 8, + 0, + 3, + 7, + 8, + 0, + 4, + 7, + 8, + 0, + 0, + 0, + 0, + 0, + 2, + 6, + 8, + 0, + 3, + 7, + 8, + 0, + 4, + 7, + 8 + ]); + var HLContextLabel = new Uint8Array([ + 0, + 3, + 4, + 0, + 5, + 7, + 7, + 0, + 8, + 8, + 8, + 0, + 0, + 0, + 0, + 0, + 1, + 3, + 4, + 0, + 6, + 7, + 7, + 0, + 8, + 8, + 8, + 0, + 0, + 0, + 0, + 0, + 2, + 3, + 4, + 0, + 6, + 7, + 7, + 0, + 8, + 8, + 8, + 0, + 0, + 0, + 0, + 0, + 2, + 3, + 4, + 0, + 6, + 7, + 7, + 0, + 8, + 8, + 8, + 0, + 0, + 0, + 0, + 0, + 2, + 3, + 4, + 0, + 6, + 7, + 7, + 0, + 8, + 8, + 8 + ]); + var HHContextLabel = new Uint8Array([ + 0, + 1, + 2, + 0, + 1, + 2, + 2, + 0, + 2, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 3, + 4, + 5, + 0, + 4, + 5, + 5, + 0, + 5, + 5, + 5, + 0, + 0, + 0, + 0, + 0, + 6, + 7, + 7, + 0, + 7, + 7, + 7, + 0, + 7, + 7, + 7, + 0, + 0, + 0, + 0, + 0, + 8, + 8, + 8, + 0, + 8, + 8, + 8, + 0, + 8, + 8, + 8, + 0, + 0, + 0, + 0, + 0, + 8, + 8, + 8, + 0, + 8, + 8, + 8, + 0, + 8, + 8, + 8 + ]); + function BitModel(width, height, subband, zeroBitPlanes, mb) { + this.width = width; + this.height = height; + this.contextLabelTable = subband === 'HH' ? HHContextLabel : subband === 'HL' ? HLContextLabel : LLAndLHContextsLabel; + var coefficientCount = width * height; + this.neighborsSignificance = new Uint8Array(coefficientCount); + this.coefficentsSign = new Uint8Array(coefficientCount); + this.coefficentsMagnitude = mb > 14 ? new Uint32Array(coefficientCount) : mb > 6 ? new Uint16Array(coefficientCount) : new Uint8Array(coefficientCount); + this.processingFlags = new Uint8Array(coefficientCount); + var bitsDecoded = new Uint8Array(coefficientCount); + if (zeroBitPlanes !== 0) { + for (var i = 0; i < coefficientCount; i++) { + bitsDecoded[i] = zeroBitPlanes; + } + } + this.bitsDecoded = bitsDecoded; + this.reset(); + } + BitModel.prototype = { + setDecoder: function BitModel_setDecoder(decoder) { + this.decoder = decoder; + }, + reset: function BitModel_reset() { + this.contexts = new Int8Array(19); + this.contexts[0] = 4 << 1 | 0; + this.contexts[UNIFORM_CONTEXT] = 46 << 1 | 0; + this.contexts[RUNLENGTH_CONTEXT] = 3 << 1 | 0; + }, + setNeighborsSignificance: function BitModel_setNeighborsSignificance(row, column, index) { + var neighborsSignificance = this.neighborsSignificance; + var width = this.width, height = this.height; + var left = column > 0; + var right = column + 1 < width; + var i; + if (row > 0) { + i = index - width; + if (left) { + neighborsSignificance[i - 1] += 0x10; + } + if (right) { + neighborsSignificance[i + 1] += 0x10; + } + neighborsSignificance[i] += 0x04; + } + if (row + 1 < height) { + i = index + width; + if (left) { + neighborsSignificance[i - 1] += 0x10; + } + if (right) { + neighborsSignificance[i + 1] += 0x10; + } + neighborsSignificance[i] += 0x04; + } + if (left) { + neighborsSignificance[index - 1] += 0x01; + } + if (right) { + neighborsSignificance[index + 1] += 0x01; + } + neighborsSignificance[index] |= 0x80; + }, + runSignificancePropagationPass: function BitModel_runSignificancePropagationPass() { + var decoder = this.decoder; + var width = this.width, height = this.height; + var coefficentsMagnitude = this.coefficentsMagnitude; + var coefficentsSign = this.coefficentsSign; + var neighborsSignificance = this.neighborsSignificance; + var processingFlags = this.processingFlags; + var contexts = this.contexts; + var labels = this.contextLabelTable; + var bitsDecoded = this.bitsDecoded; + var processedInverseMask = ~1; + var processedMask = 1; + var firstMagnitudeBitMask = 2; + for (var i0 = 0; i0 < height; i0 += 4) { + for (var j = 0; j < width; j++) { + var index = i0 * width + j; + for (var i1 = 0; i1 < 4; i1++, index += width) { + var i = i0 + i1; + if (i >= height) { + break; + } + processingFlags[index] &= processedInverseMask; + if (coefficentsMagnitude[index] || !neighborsSignificance[index]) { + continue; + } + var contextLabel = labels[neighborsSignificance[index]]; + var decision = decoder.readBit(contexts, contextLabel); + if (decision) { + var sign = this.decodeSignBit(i, j, index); + coefficentsSign[index] = sign; + coefficentsMagnitude[index] = 1; + this.setNeighborsSignificance(i, j, index); + processingFlags[index] |= firstMagnitudeBitMask; + } + bitsDecoded[index]++; + processingFlags[index] |= processedMask; + } + } + } + }, + decodeSignBit: function BitModel_decodeSignBit(row, column, index) { + var width = this.width, height = this.height; + var coefficentsMagnitude = this.coefficentsMagnitude; + var coefficentsSign = this.coefficentsSign; + var contribution, sign0, sign1, significance1; + var contextLabel, decoded; + significance1 = column > 0 && coefficentsMagnitude[index - 1] !== 0; + if (column + 1 < width && coefficentsMagnitude[index + 1] !== 0) { + sign1 = coefficentsSign[index + 1]; + if (significance1) { + sign0 = coefficentsSign[index - 1]; + contribution = 1 - sign1 - sign0; + } else { + contribution = 1 - sign1 - sign1; + } + } else if (significance1) { + sign0 = coefficentsSign[index - 1]; + contribution = 1 - sign0 - sign0; + } else { + contribution = 0; + } + var horizontalContribution = 3 * contribution; + significance1 = row > 0 && coefficentsMagnitude[index - width] !== 0; + if (row + 1 < height && coefficentsMagnitude[index + width] !== 0) { + sign1 = coefficentsSign[index + width]; + if (significance1) { + sign0 = coefficentsSign[index - width]; + contribution = 1 - sign1 - sign0 + horizontalContribution; + } else { + contribution = 1 - sign1 - sign1 + horizontalContribution; + } + } else if (significance1) { + sign0 = coefficentsSign[index - width]; + contribution = 1 - sign0 - sign0 + horizontalContribution; + } else { + contribution = horizontalContribution; + } + if (contribution >= 0) { + contextLabel = 9 + contribution; + decoded = this.decoder.readBit(this.contexts, contextLabel); + } else { + contextLabel = 9 - contribution; + decoded = this.decoder.readBit(this.contexts, contextLabel) ^ 1; + } + return decoded; + }, + runMagnitudeRefinementPass: function BitModel_runMagnitudeRefinementPass() { + var decoder = this.decoder; + var width = this.width, height = this.height; + var coefficentsMagnitude = this.coefficentsMagnitude; + var neighborsSignificance = this.neighborsSignificance; + var contexts = this.contexts; + var bitsDecoded = this.bitsDecoded; + var processingFlags = this.processingFlags; + var processedMask = 1; + var firstMagnitudeBitMask = 2; + var length = width * height; + var width4 = width * 4; + for (var index0 = 0, indexNext; index0 < length; index0 = indexNext) { + indexNext = Math.min(length, index0 + width4); + for (var j = 0; j < width; j++) { + for (var index = index0 + j; index < indexNext; index += width) { + if (!coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) { + continue; + } + var contextLabel = 16; + if ((processingFlags[index] & firstMagnitudeBitMask) !== 0) { + processingFlags[index] ^= firstMagnitudeBitMask; + var significance = neighborsSignificance[index] & 127; + contextLabel = significance === 0 ? 15 : 14; + } + var bit = decoder.readBit(contexts, contextLabel); + coefficentsMagnitude[index] = coefficentsMagnitude[index] << 1 | bit; + bitsDecoded[index]++; + processingFlags[index] |= processedMask; + } + } + } + }, + runCleanupPass: function BitModel_runCleanupPass() { + var decoder = this.decoder; + var width = this.width, height = this.height; + var neighborsSignificance = this.neighborsSignificance; + var coefficentsMagnitude = this.coefficentsMagnitude; + var coefficentsSign = this.coefficentsSign; + var contexts = this.contexts; + var labels = this.contextLabelTable; + var bitsDecoded = this.bitsDecoded; + var processingFlags = this.processingFlags; + var processedMask = 1; + var firstMagnitudeBitMask = 2; + var oneRowDown = width; + var twoRowsDown = width * 2; + var threeRowsDown = width * 3; + var iNext; + for (var i0 = 0; i0 < height; i0 = iNext) { + iNext = Math.min(i0 + 4, height); + var indexBase = i0 * width; + var checkAllEmpty = i0 + 3 < height; + for (var j = 0; j < width; j++) { + var index0 = indexBase + j; + var allEmpty = checkAllEmpty && processingFlags[index0] === 0 && processingFlags[index0 + oneRowDown] === 0 && processingFlags[index0 + twoRowsDown] === 0 && processingFlags[index0 + threeRowsDown] === 0 && neighborsSignificance[index0] === 0 && neighborsSignificance[index0 + oneRowDown] === 0 && neighborsSignificance[index0 + twoRowsDown] === 0 && neighborsSignificance[index0 + threeRowsDown] === 0; + var i1 = 0, index = index0; + var i = i0, sign; + if (allEmpty) { + var hasSignificantCoefficent = decoder.readBit(contexts, RUNLENGTH_CONTEXT); + if (!hasSignificantCoefficent) { + bitsDecoded[index0]++; + bitsDecoded[index0 + oneRowDown]++; + bitsDecoded[index0 + twoRowsDown]++; + bitsDecoded[index0 + threeRowsDown]++; + continue; + } + i1 = decoder.readBit(contexts, UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, UNIFORM_CONTEXT); + if (i1 !== 0) { + i = i0 + i1; + index += i1 * width; + } + sign = this.decodeSignBit(i, j, index); + coefficentsSign[index] = sign; + coefficentsMagnitude[index] = 1; + this.setNeighborsSignificance(i, j, index); + processingFlags[index] |= firstMagnitudeBitMask; + index = index0; + for (var i2 = i0; i2 <= i; i2++, index += width) { + bitsDecoded[index]++; + } + i1++; + } + for (i = i0 + i1; i < iNext; i++, index += width) { + if (coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) { + continue; + } + var contextLabel = labels[neighborsSignificance[index]]; + var decision = decoder.readBit(contexts, contextLabel); + if (decision === 1) { + sign = this.decodeSignBit(i, j, index); + coefficentsSign[index] = sign; + coefficentsMagnitude[index] = 1; + this.setNeighborsSignificance(i, j, index); + processingFlags[index] |= firstMagnitudeBitMask; + } + bitsDecoded[index]++; + } + } + } + }, + checkSegmentationSymbol: function BitModel_checkSegmentationSymbol() { + var decoder = this.decoder; + var contexts = this.contexts; + var symbol = decoder.readBit(contexts, UNIFORM_CONTEXT) << 3 | decoder.readBit(contexts, UNIFORM_CONTEXT) << 2 | decoder.readBit(contexts, UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, UNIFORM_CONTEXT); + if (symbol !== 0xA) { + error('JPX Error: Invalid segmentation symbol'); + } + } + }; + return BitModel; + }(); + var Transform = function TransformClosure() { + function Transform() { + } + Transform.prototype.calculate = function transformCalculate(subbands, u0, v0) { + var ll = subbands[0]; + for (var i = 1, ii = subbands.length; i < ii; i++) { + ll = this.iterate(ll, subbands[i], u0, v0); + } + return ll; + }; + Transform.prototype.extend = function extend(buffer, offset, size) { + var i1 = offset - 1, j1 = offset + 1; + var i2 = offset + size - 2, j2 = offset + size; + buffer[i1--] = buffer[j1++]; + buffer[j2++] = buffer[i2--]; + buffer[i1--] = buffer[j1++]; + buffer[j2++] = buffer[i2--]; + buffer[i1--] = buffer[j1++]; + buffer[j2++] = buffer[i2--]; + buffer[i1] = buffer[j1]; + buffer[j2] = buffer[i2]; + }; + Transform.prototype.iterate = function Transform_iterate(ll, hl_lh_hh, u0, v0) { + var llWidth = ll.width, llHeight = ll.height, llItems = ll.items; + var width = hl_lh_hh.width; + var height = hl_lh_hh.height; + var items = hl_lh_hh.items; + var i, j, k, l, u, v; + for (k = 0, i = 0; i < llHeight; i++) { + l = i * 2 * width; + for (j = 0; j < llWidth; j++, k++, l += 2) { + items[l] = llItems[k]; + } + } + llItems = ll.items = null; + var bufferPadding = 4; + var rowBuffer = new Float32Array(width + 2 * bufferPadding); + if (width === 1) { + if ((u0 & 1) !== 0) { + for (v = 0, k = 0; v < height; v++, k += width) { + items[k] *= 0.5; + } + } + } else { + for (v = 0, k = 0; v < height; v++, k += width) { + rowBuffer.set(items.subarray(k, k + width), bufferPadding); + this.extend(rowBuffer, bufferPadding, width); + this.filter(rowBuffer, bufferPadding, width); + items.set(rowBuffer.subarray(bufferPadding, bufferPadding + width), k); + } + } + var numBuffers = 16; + var colBuffers = []; + for (i = 0; i < numBuffers; i++) { + colBuffers.push(new Float32Array(height + 2 * bufferPadding)); + } + var b, currentBuffer = 0; + ll = bufferPadding + height; + if (height === 1) { + if ((v0 & 1) !== 0) { + for (u = 0; u < width; u++) { + items[u] *= 0.5; + } + } + } else { + for (u = 0; u < width; u++) { + if (currentBuffer === 0) { + numBuffers = Math.min(width - u, numBuffers); + for (k = u, l = bufferPadding; l < ll; k += width, l++) { + for (b = 0; b < numBuffers; b++) { + colBuffers[b][l] = items[k + b]; + } + } + currentBuffer = numBuffers; + } + currentBuffer--; + var buffer = colBuffers[currentBuffer]; + this.extend(buffer, bufferPadding, height); + this.filter(buffer, bufferPadding, height); + if (currentBuffer === 0) { + k = u - numBuffers + 1; + for (l = bufferPadding; l < ll; k += width, l++) { + for (b = 0; b < numBuffers; b++) { + items[k + b] = colBuffers[b][l]; + } + } + } + } + } + return { + width: width, + height: height, + items: items + }; + }; + return Transform; + }(); + var IrreversibleTransform = function IrreversibleTransformClosure() { + function IrreversibleTransform() { + Transform.call(this); + } + IrreversibleTransform.prototype = Object.create(Transform.prototype); + IrreversibleTransform.prototype.filter = function irreversibleTransformFilter(x, offset, length) { + var len = length >> 1; + offset = offset | 0; + var j, n, current, next; + var alpha = -1.586134342059924; + var beta = -0.052980118572961; + var gamma = 0.882911075530934; + var delta = 0.443506852043971; + var K = 1.230174104914001; + var K_ = 1 / K; + j = offset - 3; + for (n = len + 4; n--; j += 2) { + x[j] *= K_; + } + j = offset - 2; + current = delta * x[j - 1]; + for (n = len + 3; n--; j += 2) { + next = delta * x[j + 1]; + x[j] = K * x[j] - current - next; + if (n--) { + j += 2; + current = delta * x[j + 1]; + x[j] = K * x[j] - current - next; + } else { + break; + } + } + j = offset - 1; + current = gamma * x[j - 1]; + for (n = len + 2; n--; j += 2) { + next = gamma * x[j + 1]; + x[j] -= current + next; + if (n--) { + j += 2; + current = gamma * x[j + 1]; + x[j] -= current + next; + } else { + break; + } + } + j = offset; + current = beta * x[j - 1]; + for (n = len + 1; n--; j += 2) { + next = beta * x[j + 1]; + x[j] -= current + next; + if (n--) { + j += 2; + current = beta * x[j + 1]; + x[j] -= current + next; + } else { + break; + } + } + if (len !== 0) { + j = offset + 1; + current = alpha * x[j - 1]; + for (n = len; n--; j += 2) { + next = alpha * x[j + 1]; + x[j] -= current + next; + if (n--) { + j += 2; + current = alpha * x[j + 1]; + x[j] -= current + next; + } else { + break; + } + } + } + }; + return IrreversibleTransform; + }(); + var ReversibleTransform = function ReversibleTransformClosure() { + function ReversibleTransform() { + Transform.call(this); + } + ReversibleTransform.prototype = Object.create(Transform.prototype); + ReversibleTransform.prototype.filter = function reversibleTransformFilter(x, offset, length) { + var len = length >> 1; + offset = offset | 0; + var j, n; + for (j = offset, n = len + 1; n--; j += 2) { + x[j] -= x[j - 1] + x[j + 1] + 2 >> 2; + } + for (j = offset + 1, n = len; n--; j += 2) { + x[j] += x[j - 1] + x[j + 1] >> 1; + } + }; + return ReversibleTransform; + }(); + return JpxImage; + }(); + exports.JpxImage = JpxImage; + })); + (function (root, factory) { + factory(root.pdfjsCoreMetrics = {}, root.pdfjsSharedUtil); + }(this, function (exports, sharedUtil) { + var getLookupTableFactory = sharedUtil.getLookupTableFactory; + var getMetrics = getLookupTableFactory(function (t) { + t['Courier'] = 600; + t['Courier-Bold'] = 600; + t['Courier-BoldOblique'] = 600; + t['Courier-Oblique'] = 600; + t['Helvetica'] = getLookupTableFactory(function (t) { + t['space'] = 278; + t['exclam'] = 278; + t['quotedbl'] = 355; + t['numbersign'] = 556; + t['dollar'] = 556; + t['percent'] = 889; + t['ampersand'] = 667; + t['quoteright'] = 222; + t['parenleft'] = 333; + t['parenright'] = 333; + t['asterisk'] = 389; + t['plus'] = 584; + t['comma'] = 278; + t['hyphen'] = 333; + t['period'] = 278; + t['slash'] = 278; + t['zero'] = 556; + t['one'] = 556; + t['two'] = 556; + t['three'] = 556; + t['four'] = 556; + t['five'] = 556; + t['six'] = 556; + t['seven'] = 556; + t['eight'] = 556; + t['nine'] = 556; + t['colon'] = 278; + t['semicolon'] = 278; + t['less'] = 584; + t['equal'] = 584; + t['greater'] = 584; + t['question'] = 556; + t['at'] = 1015; + t['A'] = 667; + t['B'] = 667; + t['C'] = 722; + t['D'] = 722; + t['E'] = 667; + t['F'] = 611; + t['G'] = 778; + t['H'] = 722; + t['I'] = 278; + t['J'] = 500; + t['K'] = 667; + t['L'] = 556; + t['M'] = 833; + t['N'] = 722; + t['O'] = 778; + t['P'] = 667; + t['Q'] = 778; + t['R'] = 722; + t['S'] = 667; + t['T'] = 611; + t['U'] = 722; + t['V'] = 667; + t['W'] = 944; + t['X'] = 667; + t['Y'] = 667; + t['Z'] = 611; + t['bracketleft'] = 278; + t['backslash'] = 278; + t['bracketright'] = 278; + t['asciicircum'] = 469; + t['underscore'] = 556; + t['quoteleft'] = 222; + t['a'] = 556; + t['b'] = 556; + t['c'] = 500; + t['d'] = 556; + t['e'] = 556; + t['f'] = 278; + t['g'] = 556; + t['h'] = 556; + t['i'] = 222; + t['j'] = 222; + t['k'] = 500; + t['l'] = 222; + t['m'] = 833; + t['n'] = 556; + t['o'] = 556; + t['p'] = 556; + t['q'] = 556; + t['r'] = 333; + t['s'] = 500; + t['t'] = 278; + t['u'] = 556; + t['v'] = 500; + t['w'] = 722; + t['x'] = 500; + t['y'] = 500; + t['z'] = 500; + t['braceleft'] = 334; + t['bar'] = 260; + t['braceright'] = 334; + t['asciitilde'] = 584; + t['exclamdown'] = 333; + t['cent'] = 556; + t['sterling'] = 556; + t['fraction'] = 167; + t['yen'] = 556; + t['florin'] = 556; + t['section'] = 556; + t['currency'] = 556; + t['quotesingle'] = 191; + t['quotedblleft'] = 333; + t['guillemotleft'] = 556; + t['guilsinglleft'] = 333; + t['guilsinglright'] = 333; + t['fi'] = 500; + t['fl'] = 500; + t['endash'] = 556; + t['dagger'] = 556; + t['daggerdbl'] = 556; + t['periodcentered'] = 278; + t['paragraph'] = 537; + t['bullet'] = 350; + t['quotesinglbase'] = 222; + t['quotedblbase'] = 333; + t['quotedblright'] = 333; + t['guillemotright'] = 556; + t['ellipsis'] = 1000; + t['perthousand'] = 1000; + t['questiondown'] = 611; + t['grave'] = 333; + t['acute'] = 333; + t['circumflex'] = 333; + t['tilde'] = 333; + t['macron'] = 333; + t['breve'] = 333; + t['dotaccent'] = 333; + t['dieresis'] = 333; + t['ring'] = 333; + t['cedilla'] = 333; + t['hungarumlaut'] = 333; + t['ogonek'] = 333; + t['caron'] = 333; + t['emdash'] = 1000; + t['AE'] = 1000; + t['ordfeminine'] = 370; + t['Lslash'] = 556; + t['Oslash'] = 778; + t['OE'] = 1000; + t['ordmasculine'] = 365; + t['ae'] = 889; + t['dotlessi'] = 278; + t['lslash'] = 222; + t['oslash'] = 611; + t['oe'] = 944; + t['germandbls'] = 611; + t['Idieresis'] = 278; + t['eacute'] = 556; + t['abreve'] = 556; + t['uhungarumlaut'] = 556; + t['ecaron'] = 556; + t['Ydieresis'] = 667; + t['divide'] = 584; + t['Yacute'] = 667; + t['Acircumflex'] = 667; + t['aacute'] = 556; + t['Ucircumflex'] = 722; + t['yacute'] = 500; + t['scommaaccent'] = 500; + t['ecircumflex'] = 556; + t['Uring'] = 722; + t['Udieresis'] = 722; + t['aogonek'] = 556; + t['Uacute'] = 722; + t['uogonek'] = 556; + t['Edieresis'] = 667; + t['Dcroat'] = 722; + t['commaaccent'] = 250; + t['copyright'] = 737; + t['Emacron'] = 667; + t['ccaron'] = 500; + t['aring'] = 556; + t['Ncommaaccent'] = 722; + t['lacute'] = 222; + t['agrave'] = 556; + t['Tcommaaccent'] = 611; + t['Cacute'] = 722; + t['atilde'] = 556; + t['Edotaccent'] = 667; + t['scaron'] = 500; + t['scedilla'] = 500; + t['iacute'] = 278; + t['lozenge'] = 471; + t['Rcaron'] = 722; + t['Gcommaaccent'] = 778; + t['ucircumflex'] = 556; + t['acircumflex'] = 556; + t['Amacron'] = 667; + t['rcaron'] = 333; + t['ccedilla'] = 500; + t['Zdotaccent'] = 611; + t['Thorn'] = 667; + t['Omacron'] = 778; + t['Racute'] = 722; + t['Sacute'] = 667; + t['dcaron'] = 643; + t['Umacron'] = 722; + t['uring'] = 556; + t['threesuperior'] = 333; + t['Ograve'] = 778; + t['Agrave'] = 667; + t['Abreve'] = 667; + t['multiply'] = 584; + t['uacute'] = 556; + t['Tcaron'] = 611; + t['partialdiff'] = 476; + t['ydieresis'] = 500; + t['Nacute'] = 722; + t['icircumflex'] = 278; + t['Ecircumflex'] = 667; + t['adieresis'] = 556; + t['edieresis'] = 556; + t['cacute'] = 500; + t['nacute'] = 556; + t['umacron'] = 556; + t['Ncaron'] = 722; + t['Iacute'] = 278; + t['plusminus'] = 584; + t['brokenbar'] = 260; + t['registered'] = 737; + t['Gbreve'] = 778; + t['Idotaccent'] = 278; + t['summation'] = 600; + t['Egrave'] = 667; + t['racute'] = 333; + t['omacron'] = 556; + t['Zacute'] = 611; + t['Zcaron'] = 611; + t['greaterequal'] = 549; + t['Eth'] = 722; + t['Ccedilla'] = 722; + t['lcommaaccent'] = 222; + t['tcaron'] = 317; + t['eogonek'] = 556; + t['Uogonek'] = 722; + t['Aacute'] = 667; + t['Adieresis'] = 667; + t['egrave'] = 556; + t['zacute'] = 500; + t['iogonek'] = 222; + t['Oacute'] = 778; + t['oacute'] = 556; + t['amacron'] = 556; + t['sacute'] = 500; + t['idieresis'] = 278; + t['Ocircumflex'] = 778; + t['Ugrave'] = 722; + t['Delta'] = 612; + t['thorn'] = 556; + t['twosuperior'] = 333; + t['Odieresis'] = 778; + t['mu'] = 556; + t['igrave'] = 278; + t['ohungarumlaut'] = 556; + t['Eogonek'] = 667; + t['dcroat'] = 556; + t['threequarters'] = 834; + t['Scedilla'] = 667; + t['lcaron'] = 299; + t['Kcommaaccent'] = 667; + t['Lacute'] = 556; + t['trademark'] = 1000; + t['edotaccent'] = 556; + t['Igrave'] = 278; + t['Imacron'] = 278; + t['Lcaron'] = 556; + t['onehalf'] = 834; + t['lessequal'] = 549; + t['ocircumflex'] = 556; + t['ntilde'] = 556; + t['Uhungarumlaut'] = 722; + t['Eacute'] = 667; + t['emacron'] = 556; + t['gbreve'] = 556; + t['onequarter'] = 834; + t['Scaron'] = 667; + t['Scommaaccent'] = 667; + t['Ohungarumlaut'] = 778; + t['degree'] = 400; + t['ograve'] = 556; + t['Ccaron'] = 722; + t['ugrave'] = 556; + t['radical'] = 453; + t['Dcaron'] = 722; + t['rcommaaccent'] = 333; + t['Ntilde'] = 722; + t['otilde'] = 556; + t['Rcommaaccent'] = 722; + t['Lcommaaccent'] = 556; + t['Atilde'] = 667; + t['Aogonek'] = 667; + t['Aring'] = 667; + t['Otilde'] = 778; + t['zdotaccent'] = 500; + t['Ecaron'] = 667; + t['Iogonek'] = 278; + t['kcommaaccent'] = 500; + t['minus'] = 584; + t['Icircumflex'] = 278; + t['ncaron'] = 556; + t['tcommaaccent'] = 278; + t['logicalnot'] = 584; + t['odieresis'] = 556; + t['udieresis'] = 556; + t['notequal'] = 549; + t['gcommaaccent'] = 556; + t['eth'] = 556; + t['zcaron'] = 500; + t['ncommaaccent'] = 556; + t['onesuperior'] = 333; + t['imacron'] = 278; + t['Euro'] = 556; + }); + t['Helvetica-Bold'] = getLookupTableFactory(function (t) { + t['space'] = 278; + t['exclam'] = 333; + t['quotedbl'] = 474; + t['numbersign'] = 556; + t['dollar'] = 556; + t['percent'] = 889; + t['ampersand'] = 722; + t['quoteright'] = 278; + t['parenleft'] = 333; + t['parenright'] = 333; + t['asterisk'] = 389; + t['plus'] = 584; + t['comma'] = 278; + t['hyphen'] = 333; + t['period'] = 278; + t['slash'] = 278; + t['zero'] = 556; + t['one'] = 556; + t['two'] = 556; + t['three'] = 556; + t['four'] = 556; + t['five'] = 556; + t['six'] = 556; + t['seven'] = 556; + t['eight'] = 556; + t['nine'] = 556; + t['colon'] = 333; + t['semicolon'] = 333; + t['less'] = 584; + t['equal'] = 584; + t['greater'] = 584; + t['question'] = 611; + t['at'] = 975; + t['A'] = 722; + t['B'] = 722; + t['C'] = 722; + t['D'] = 722; + t['E'] = 667; + t['F'] = 611; + t['G'] = 778; + t['H'] = 722; + t['I'] = 278; + t['J'] = 556; + t['K'] = 722; + t['L'] = 611; + t['M'] = 833; + t['N'] = 722; + t['O'] = 778; + t['P'] = 667; + t['Q'] = 778; + t['R'] = 722; + t['S'] = 667; + t['T'] = 611; + t['U'] = 722; + t['V'] = 667; + t['W'] = 944; + t['X'] = 667; + t['Y'] = 667; + t['Z'] = 611; + t['bracketleft'] = 333; + t['backslash'] = 278; + t['bracketright'] = 333; + t['asciicircum'] = 584; + t['underscore'] = 556; + t['quoteleft'] = 278; + t['a'] = 556; + t['b'] = 611; + t['c'] = 556; + t['d'] = 611; + t['e'] = 556; + t['f'] = 333; + t['g'] = 611; + t['h'] = 611; + t['i'] = 278; + t['j'] = 278; + t['k'] = 556; + t['l'] = 278; + t['m'] = 889; + t['n'] = 611; + t['o'] = 611; + t['p'] = 611; + t['q'] = 611; + t['r'] = 389; + t['s'] = 556; + t['t'] = 333; + t['u'] = 611; + t['v'] = 556; + t['w'] = 778; + t['x'] = 556; + t['y'] = 556; + t['z'] = 500; + t['braceleft'] = 389; + t['bar'] = 280; + t['braceright'] = 389; + t['asciitilde'] = 584; + t['exclamdown'] = 333; + t['cent'] = 556; + t['sterling'] = 556; + t['fraction'] = 167; + t['yen'] = 556; + t['florin'] = 556; + t['section'] = 556; + t['currency'] = 556; + t['quotesingle'] = 238; + t['quotedblleft'] = 500; + t['guillemotleft'] = 556; + t['guilsinglleft'] = 333; + t['guilsinglright'] = 333; + t['fi'] = 611; + t['fl'] = 611; + t['endash'] = 556; + t['dagger'] = 556; + t['daggerdbl'] = 556; + t['periodcentered'] = 278; + t['paragraph'] = 556; + t['bullet'] = 350; + t['quotesinglbase'] = 278; + t['quotedblbase'] = 500; + t['quotedblright'] = 500; + t['guillemotright'] = 556; + t['ellipsis'] = 1000; + t['perthousand'] = 1000; + t['questiondown'] = 611; + t['grave'] = 333; + t['acute'] = 333; + t['circumflex'] = 333; + t['tilde'] = 333; + t['macron'] = 333; + t['breve'] = 333; + t['dotaccent'] = 333; + t['dieresis'] = 333; + t['ring'] = 333; + t['cedilla'] = 333; + t['hungarumlaut'] = 333; + t['ogonek'] = 333; + t['caron'] = 333; + t['emdash'] = 1000; + t['AE'] = 1000; + t['ordfeminine'] = 370; + t['Lslash'] = 611; + t['Oslash'] = 778; + t['OE'] = 1000; + t['ordmasculine'] = 365; + t['ae'] = 889; + t['dotlessi'] = 278; + t['lslash'] = 278; + t['oslash'] = 611; + t['oe'] = 944; + t['germandbls'] = 611; + t['Idieresis'] = 278; + t['eacute'] = 556; + t['abreve'] = 556; + t['uhungarumlaut'] = 611; + t['ecaron'] = 556; + t['Ydieresis'] = 667; + t['divide'] = 584; + t['Yacute'] = 667; + t['Acircumflex'] = 722; + t['aacute'] = 556; + t['Ucircumflex'] = 722; + t['yacute'] = 556; + t['scommaaccent'] = 556; + t['ecircumflex'] = 556; + t['Uring'] = 722; + t['Udieresis'] = 722; + t['aogonek'] = 556; + t['Uacute'] = 722; + t['uogonek'] = 611; + t['Edieresis'] = 667; + t['Dcroat'] = 722; + t['commaaccent'] = 250; + t['copyright'] = 737; + t['Emacron'] = 667; + t['ccaron'] = 556; + t['aring'] = 556; + t['Ncommaaccent'] = 722; + t['lacute'] = 278; + t['agrave'] = 556; + t['Tcommaaccent'] = 611; + t['Cacute'] = 722; + t['atilde'] = 556; + t['Edotaccent'] = 667; + t['scaron'] = 556; + t['scedilla'] = 556; + t['iacute'] = 278; + t['lozenge'] = 494; + t['Rcaron'] = 722; + t['Gcommaaccent'] = 778; + t['ucircumflex'] = 611; + t['acircumflex'] = 556; + t['Amacron'] = 722; + t['rcaron'] = 389; + t['ccedilla'] = 556; + t['Zdotaccent'] = 611; + t['Thorn'] = 667; + t['Omacron'] = 778; + t['Racute'] = 722; + t['Sacute'] = 667; + t['dcaron'] = 743; + t['Umacron'] = 722; + t['uring'] = 611; + t['threesuperior'] = 333; + t['Ograve'] = 778; + t['Agrave'] = 722; + t['Abreve'] = 722; + t['multiply'] = 584; + t['uacute'] = 611; + t['Tcaron'] = 611; + t['partialdiff'] = 494; + t['ydieresis'] = 556; + t['Nacute'] = 722; + t['icircumflex'] = 278; + t['Ecircumflex'] = 667; + t['adieresis'] = 556; + t['edieresis'] = 556; + t['cacute'] = 556; + t['nacute'] = 611; + t['umacron'] = 611; + t['Ncaron'] = 722; + t['Iacute'] = 278; + t['plusminus'] = 584; + t['brokenbar'] = 280; + t['registered'] = 737; + t['Gbreve'] = 778; + t['Idotaccent'] = 278; + t['summation'] = 600; + t['Egrave'] = 667; + t['racute'] = 389; + t['omacron'] = 611; + t['Zacute'] = 611; + t['Zcaron'] = 611; + t['greaterequal'] = 549; + t['Eth'] = 722; + t['Ccedilla'] = 722; + t['lcommaaccent'] = 278; + t['tcaron'] = 389; + t['eogonek'] = 556; + t['Uogonek'] = 722; + t['Aacute'] = 722; + t['Adieresis'] = 722; + t['egrave'] = 556; + t['zacute'] = 500; + t['iogonek'] = 278; + t['Oacute'] = 778; + t['oacute'] = 611; + t['amacron'] = 556; + t['sacute'] = 556; + t['idieresis'] = 278; + t['Ocircumflex'] = 778; + t['Ugrave'] = 722; + t['Delta'] = 612; + t['thorn'] = 611; + t['twosuperior'] = 333; + t['Odieresis'] = 778; + t['mu'] = 611; + t['igrave'] = 278; + t['ohungarumlaut'] = 611; + t['Eogonek'] = 667; + t['dcroat'] = 611; + t['threequarters'] = 834; + t['Scedilla'] = 667; + t['lcaron'] = 400; + t['Kcommaaccent'] = 722; + t['Lacute'] = 611; + t['trademark'] = 1000; + t['edotaccent'] = 556; + t['Igrave'] = 278; + t['Imacron'] = 278; + t['Lcaron'] = 611; + t['onehalf'] = 834; + t['lessequal'] = 549; + t['ocircumflex'] = 611; + t['ntilde'] = 611; + t['Uhungarumlaut'] = 722; + t['Eacute'] = 667; + t['emacron'] = 556; + t['gbreve'] = 611; + t['onequarter'] = 834; + t['Scaron'] = 667; + t['Scommaaccent'] = 667; + t['Ohungarumlaut'] = 778; + t['degree'] = 400; + t['ograve'] = 611; + t['Ccaron'] = 722; + t['ugrave'] = 611; + t['radical'] = 549; + t['Dcaron'] = 722; + t['rcommaaccent'] = 389; + t['Ntilde'] = 722; + t['otilde'] = 611; + t['Rcommaaccent'] = 722; + t['Lcommaaccent'] = 611; + t['Atilde'] = 722; + t['Aogonek'] = 722; + t['Aring'] = 722; + t['Otilde'] = 778; + t['zdotaccent'] = 500; + t['Ecaron'] = 667; + t['Iogonek'] = 278; + t['kcommaaccent'] = 556; + t['minus'] = 584; + t['Icircumflex'] = 278; + t['ncaron'] = 611; + t['tcommaaccent'] = 333; + t['logicalnot'] = 584; + t['odieresis'] = 611; + t['udieresis'] = 611; + t['notequal'] = 549; + t['gcommaaccent'] = 611; + t['eth'] = 611; + t['zcaron'] = 500; + t['ncommaaccent'] = 611; + t['onesuperior'] = 333; + t['imacron'] = 278; + t['Euro'] = 556; + }); + t['Helvetica-BoldOblique'] = getLookupTableFactory(function (t) { + t['space'] = 278; + t['exclam'] = 333; + t['quotedbl'] = 474; + t['numbersign'] = 556; + t['dollar'] = 556; + t['percent'] = 889; + t['ampersand'] = 722; + t['quoteright'] = 278; + t['parenleft'] = 333; + t['parenright'] = 333; + t['asterisk'] = 389; + t['plus'] = 584; + t['comma'] = 278; + t['hyphen'] = 333; + t['period'] = 278; + t['slash'] = 278; + t['zero'] = 556; + t['one'] = 556; + t['two'] = 556; + t['three'] = 556; + t['four'] = 556; + t['five'] = 556; + t['six'] = 556; + t['seven'] = 556; + t['eight'] = 556; + t['nine'] = 556; + t['colon'] = 333; + t['semicolon'] = 333; + t['less'] = 584; + t['equal'] = 584; + t['greater'] = 584; + t['question'] = 611; + t['at'] = 975; + t['A'] = 722; + t['B'] = 722; + t['C'] = 722; + t['D'] = 722; + t['E'] = 667; + t['F'] = 611; + t['G'] = 778; + t['H'] = 722; + t['I'] = 278; + t['J'] = 556; + t['K'] = 722; + t['L'] = 611; + t['M'] = 833; + t['N'] = 722; + t['O'] = 778; + t['P'] = 667; + t['Q'] = 778; + t['R'] = 722; + t['S'] = 667; + t['T'] = 611; + t['U'] = 722; + t['V'] = 667; + t['W'] = 944; + t['X'] = 667; + t['Y'] = 667; + t['Z'] = 611; + t['bracketleft'] = 333; + t['backslash'] = 278; + t['bracketright'] = 333; + t['asciicircum'] = 584; + t['underscore'] = 556; + t['quoteleft'] = 278; + t['a'] = 556; + t['b'] = 611; + t['c'] = 556; + t['d'] = 611; + t['e'] = 556; + t['f'] = 333; + t['g'] = 611; + t['h'] = 611; + t['i'] = 278; + t['j'] = 278; + t['k'] = 556; + t['l'] = 278; + t['m'] = 889; + t['n'] = 611; + t['o'] = 611; + t['p'] = 611; + t['q'] = 611; + t['r'] = 389; + t['s'] = 556; + t['t'] = 333; + t['u'] = 611; + t['v'] = 556; + t['w'] = 778; + t['x'] = 556; + t['y'] = 556; + t['z'] = 500; + t['braceleft'] = 389; + t['bar'] = 280; + t['braceright'] = 389; + t['asciitilde'] = 584; + t['exclamdown'] = 333; + t['cent'] = 556; + t['sterling'] = 556; + t['fraction'] = 167; + t['yen'] = 556; + t['florin'] = 556; + t['section'] = 556; + t['currency'] = 556; + t['quotesingle'] = 238; + t['quotedblleft'] = 500; + t['guillemotleft'] = 556; + t['guilsinglleft'] = 333; + t['guilsinglright'] = 333; + t['fi'] = 611; + t['fl'] = 611; + t['endash'] = 556; + t['dagger'] = 556; + t['daggerdbl'] = 556; + t['periodcentered'] = 278; + t['paragraph'] = 556; + t['bullet'] = 350; + t['quotesinglbase'] = 278; + t['quotedblbase'] = 500; + t['quotedblright'] = 500; + t['guillemotright'] = 556; + t['ellipsis'] = 1000; + t['perthousand'] = 1000; + t['questiondown'] = 611; + t['grave'] = 333; + t['acute'] = 333; + t['circumflex'] = 333; + t['tilde'] = 333; + t['macron'] = 333; + t['breve'] = 333; + t['dotaccent'] = 333; + t['dieresis'] = 333; + t['ring'] = 333; + t['cedilla'] = 333; + t['hungarumlaut'] = 333; + t['ogonek'] = 333; + t['caron'] = 333; + t['emdash'] = 1000; + t['AE'] = 1000; + t['ordfeminine'] = 370; + t['Lslash'] = 611; + t['Oslash'] = 778; + t['OE'] = 1000; + t['ordmasculine'] = 365; + t['ae'] = 889; + t['dotlessi'] = 278; + t['lslash'] = 278; + t['oslash'] = 611; + t['oe'] = 944; + t['germandbls'] = 611; + t['Idieresis'] = 278; + t['eacute'] = 556; + t['abreve'] = 556; + t['uhungarumlaut'] = 611; + t['ecaron'] = 556; + t['Ydieresis'] = 667; + t['divide'] = 584; + t['Yacute'] = 667; + t['Acircumflex'] = 722; + t['aacute'] = 556; + t['Ucircumflex'] = 722; + t['yacute'] = 556; + t['scommaaccent'] = 556; + t['ecircumflex'] = 556; + t['Uring'] = 722; + t['Udieresis'] = 722; + t['aogonek'] = 556; + t['Uacute'] = 722; + t['uogonek'] = 611; + t['Edieresis'] = 667; + t['Dcroat'] = 722; + t['commaaccent'] = 250; + t['copyright'] = 737; + t['Emacron'] = 667; + t['ccaron'] = 556; + t['aring'] = 556; + t['Ncommaaccent'] = 722; + t['lacute'] = 278; + t['agrave'] = 556; + t['Tcommaaccent'] = 611; + t['Cacute'] = 722; + t['atilde'] = 556; + t['Edotaccent'] = 667; + t['scaron'] = 556; + t['scedilla'] = 556; + t['iacute'] = 278; + t['lozenge'] = 494; + t['Rcaron'] = 722; + t['Gcommaaccent'] = 778; + t['ucircumflex'] = 611; + t['acircumflex'] = 556; + t['Amacron'] = 722; + t['rcaron'] = 389; + t['ccedilla'] = 556; + t['Zdotaccent'] = 611; + t['Thorn'] = 667; + t['Omacron'] = 778; + t['Racute'] = 722; + t['Sacute'] = 667; + t['dcaron'] = 743; + t['Umacron'] = 722; + t['uring'] = 611; + t['threesuperior'] = 333; + t['Ograve'] = 778; + t['Agrave'] = 722; + t['Abreve'] = 722; + t['multiply'] = 584; + t['uacute'] = 611; + t['Tcaron'] = 611; + t['partialdiff'] = 494; + t['ydieresis'] = 556; + t['Nacute'] = 722; + t['icircumflex'] = 278; + t['Ecircumflex'] = 667; + t['adieresis'] = 556; + t['edieresis'] = 556; + t['cacute'] = 556; + t['nacute'] = 611; + t['umacron'] = 611; + t['Ncaron'] = 722; + t['Iacute'] = 278; + t['plusminus'] = 584; + t['brokenbar'] = 280; + t['registered'] = 737; + t['Gbreve'] = 778; + t['Idotaccent'] = 278; + t['summation'] = 600; + t['Egrave'] = 667; + t['racute'] = 389; + t['omacron'] = 611; + t['Zacute'] = 611; + t['Zcaron'] = 611; + t['greaterequal'] = 549; + t['Eth'] = 722; + t['Ccedilla'] = 722; + t['lcommaaccent'] = 278; + t['tcaron'] = 389; + t['eogonek'] = 556; + t['Uogonek'] = 722; + t['Aacute'] = 722; + t['Adieresis'] = 722; + t['egrave'] = 556; + t['zacute'] = 500; + t['iogonek'] = 278; + t['Oacute'] = 778; + t['oacute'] = 611; + t['amacron'] = 556; + t['sacute'] = 556; + t['idieresis'] = 278; + t['Ocircumflex'] = 778; + t['Ugrave'] = 722; + t['Delta'] = 612; + t['thorn'] = 611; + t['twosuperior'] = 333; + t['Odieresis'] = 778; + t['mu'] = 611; + t['igrave'] = 278; + t['ohungarumlaut'] = 611; + t['Eogonek'] = 667; + t['dcroat'] = 611; + t['threequarters'] = 834; + t['Scedilla'] = 667; + t['lcaron'] = 400; + t['Kcommaaccent'] = 722; + t['Lacute'] = 611; + t['trademark'] = 1000; + t['edotaccent'] = 556; + t['Igrave'] = 278; + t['Imacron'] = 278; + t['Lcaron'] = 611; + t['onehalf'] = 834; + t['lessequal'] = 549; + t['ocircumflex'] = 611; + t['ntilde'] = 611; + t['Uhungarumlaut'] = 722; + t['Eacute'] = 667; + t['emacron'] = 556; + t['gbreve'] = 611; + t['onequarter'] = 834; + t['Scaron'] = 667; + t['Scommaaccent'] = 667; + t['Ohungarumlaut'] = 778; + t['degree'] = 400; + t['ograve'] = 611; + t['Ccaron'] = 722; + t['ugrave'] = 611; + t['radical'] = 549; + t['Dcaron'] = 722; + t['rcommaaccent'] = 389; + t['Ntilde'] = 722; + t['otilde'] = 611; + t['Rcommaaccent'] = 722; + t['Lcommaaccent'] = 611; + t['Atilde'] = 722; + t['Aogonek'] = 722; + t['Aring'] = 722; + t['Otilde'] = 778; + t['zdotaccent'] = 500; + t['Ecaron'] = 667; + t['Iogonek'] = 278; + t['kcommaaccent'] = 556; + t['minus'] = 584; + t['Icircumflex'] = 278; + t['ncaron'] = 611; + t['tcommaaccent'] = 333; + t['logicalnot'] = 584; + t['odieresis'] = 611; + t['udieresis'] = 611; + t['notequal'] = 549; + t['gcommaaccent'] = 611; + t['eth'] = 611; + t['zcaron'] = 500; + t['ncommaaccent'] = 611; + t['onesuperior'] = 333; + t['imacron'] = 278; + t['Euro'] = 556; + }); + t['Helvetica-Oblique'] = getLookupTableFactory(function (t) { + t['space'] = 278; + t['exclam'] = 278; + t['quotedbl'] = 355; + t['numbersign'] = 556; + t['dollar'] = 556; + t['percent'] = 889; + t['ampersand'] = 667; + t['quoteright'] = 222; + t['parenleft'] = 333; + t['parenright'] = 333; + t['asterisk'] = 389; + t['plus'] = 584; + t['comma'] = 278; + t['hyphen'] = 333; + t['period'] = 278; + t['slash'] = 278; + t['zero'] = 556; + t['one'] = 556; + t['two'] = 556; + t['three'] = 556; + t['four'] = 556; + t['five'] = 556; + t['six'] = 556; + t['seven'] = 556; + t['eight'] = 556; + t['nine'] = 556; + t['colon'] = 278; + t['semicolon'] = 278; + t['less'] = 584; + t['equal'] = 584; + t['greater'] = 584; + t['question'] = 556; + t['at'] = 1015; + t['A'] = 667; + t['B'] = 667; + t['C'] = 722; + t['D'] = 722; + t['E'] = 667; + t['F'] = 611; + t['G'] = 778; + t['H'] = 722; + t['I'] = 278; + t['J'] = 500; + t['K'] = 667; + t['L'] = 556; + t['M'] = 833; + t['N'] = 722; + t['O'] = 778; + t['P'] = 667; + t['Q'] = 778; + t['R'] = 722; + t['S'] = 667; + t['T'] = 611; + t['U'] = 722; + t['V'] = 667; + t['W'] = 944; + t['X'] = 667; + t['Y'] = 667; + t['Z'] = 611; + t['bracketleft'] = 278; + t['backslash'] = 278; + t['bracketright'] = 278; + t['asciicircum'] = 469; + t['underscore'] = 556; + t['quoteleft'] = 222; + t['a'] = 556; + t['b'] = 556; + t['c'] = 500; + t['d'] = 556; + t['e'] = 556; + t['f'] = 278; + t['g'] = 556; + t['h'] = 556; + t['i'] = 222; + t['j'] = 222; + t['k'] = 500; + t['l'] = 222; + t['m'] = 833; + t['n'] = 556; + t['o'] = 556; + t['p'] = 556; + t['q'] = 556; + t['r'] = 333; + t['s'] = 500; + t['t'] = 278; + t['u'] = 556; + t['v'] = 500; + t['w'] = 722; + t['x'] = 500; + t['y'] = 500; + t['z'] = 500; + t['braceleft'] = 334; + t['bar'] = 260; + t['braceright'] = 334; + t['asciitilde'] = 584; + t['exclamdown'] = 333; + t['cent'] = 556; + t['sterling'] = 556; + t['fraction'] = 167; + t['yen'] = 556; + t['florin'] = 556; + t['section'] = 556; + t['currency'] = 556; + t['quotesingle'] = 191; + t['quotedblleft'] = 333; + t['guillemotleft'] = 556; + t['guilsinglleft'] = 333; + t['guilsinglright'] = 333; + t['fi'] = 500; + t['fl'] = 500; + t['endash'] = 556; + t['dagger'] = 556; + t['daggerdbl'] = 556; + t['periodcentered'] = 278; + t['paragraph'] = 537; + t['bullet'] = 350; + t['quotesinglbase'] = 222; + t['quotedblbase'] = 333; + t['quotedblright'] = 333; + t['guillemotright'] = 556; + t['ellipsis'] = 1000; + t['perthousand'] = 1000; + t['questiondown'] = 611; + t['grave'] = 333; + t['acute'] = 333; + t['circumflex'] = 333; + t['tilde'] = 333; + t['macron'] = 333; + t['breve'] = 333; + t['dotaccent'] = 333; + t['dieresis'] = 333; + t['ring'] = 333; + t['cedilla'] = 333; + t['hungarumlaut'] = 333; + t['ogonek'] = 333; + t['caron'] = 333; + t['emdash'] = 1000; + t['AE'] = 1000; + t['ordfeminine'] = 370; + t['Lslash'] = 556; + t['Oslash'] = 778; + t['OE'] = 1000; + t['ordmasculine'] = 365; + t['ae'] = 889; + t['dotlessi'] = 278; + t['lslash'] = 222; + t['oslash'] = 611; + t['oe'] = 944; + t['germandbls'] = 611; + t['Idieresis'] = 278; + t['eacute'] = 556; + t['abreve'] = 556; + t['uhungarumlaut'] = 556; + t['ecaron'] = 556; + t['Ydieresis'] = 667; + t['divide'] = 584; + t['Yacute'] = 667; + t['Acircumflex'] = 667; + t['aacute'] = 556; + t['Ucircumflex'] = 722; + t['yacute'] = 500; + t['scommaaccent'] = 500; + t['ecircumflex'] = 556; + t['Uring'] = 722; + t['Udieresis'] = 722; + t['aogonek'] = 556; + t['Uacute'] = 722; + t['uogonek'] = 556; + t['Edieresis'] = 667; + t['Dcroat'] = 722; + t['commaaccent'] = 250; + t['copyright'] = 737; + t['Emacron'] = 667; + t['ccaron'] = 500; + t['aring'] = 556; + t['Ncommaaccent'] = 722; + t['lacute'] = 222; + t['agrave'] = 556; + t['Tcommaaccent'] = 611; + t['Cacute'] = 722; + t['atilde'] = 556; + t['Edotaccent'] = 667; + t['scaron'] = 500; + t['scedilla'] = 500; + t['iacute'] = 278; + t['lozenge'] = 471; + t['Rcaron'] = 722; + t['Gcommaaccent'] = 778; + t['ucircumflex'] = 556; + t['acircumflex'] = 556; + t['Amacron'] = 667; + t['rcaron'] = 333; + t['ccedilla'] = 500; + t['Zdotaccent'] = 611; + t['Thorn'] = 667; + t['Omacron'] = 778; + t['Racute'] = 722; + t['Sacute'] = 667; + t['dcaron'] = 643; + t['Umacron'] = 722; + t['uring'] = 556; + t['threesuperior'] = 333; + t['Ograve'] = 778; + t['Agrave'] = 667; + t['Abreve'] = 667; + t['multiply'] = 584; + t['uacute'] = 556; + t['Tcaron'] = 611; + t['partialdiff'] = 476; + t['ydieresis'] = 500; + t['Nacute'] = 722; + t['icircumflex'] = 278; + t['Ecircumflex'] = 667; + t['adieresis'] = 556; + t['edieresis'] = 556; + t['cacute'] = 500; + t['nacute'] = 556; + t['umacron'] = 556; + t['Ncaron'] = 722; + t['Iacute'] = 278; + t['plusminus'] = 584; + t['brokenbar'] = 260; + t['registered'] = 737; + t['Gbreve'] = 778; + t['Idotaccent'] = 278; + t['summation'] = 600; + t['Egrave'] = 667; + t['racute'] = 333; + t['omacron'] = 556; + t['Zacute'] = 611; + t['Zcaron'] = 611; + t['greaterequal'] = 549; + t['Eth'] = 722; + t['Ccedilla'] = 722; + t['lcommaaccent'] = 222; + t['tcaron'] = 317; + t['eogonek'] = 556; + t['Uogonek'] = 722; + t['Aacute'] = 667; + t['Adieresis'] = 667; + t['egrave'] = 556; + t['zacute'] = 500; + t['iogonek'] = 222; + t['Oacute'] = 778; + t['oacute'] = 556; + t['amacron'] = 556; + t['sacute'] = 500; + t['idieresis'] = 278; + t['Ocircumflex'] = 778; + t['Ugrave'] = 722; + t['Delta'] = 612; + t['thorn'] = 556; + t['twosuperior'] = 333; + t['Odieresis'] = 778; + t['mu'] = 556; + t['igrave'] = 278; + t['ohungarumlaut'] = 556; + t['Eogonek'] = 667; + t['dcroat'] = 556; + t['threequarters'] = 834; + t['Scedilla'] = 667; + t['lcaron'] = 299; + t['Kcommaaccent'] = 667; + t['Lacute'] = 556; + t['trademark'] = 1000; + t['edotaccent'] = 556; + t['Igrave'] = 278; + t['Imacron'] = 278; + t['Lcaron'] = 556; + t['onehalf'] = 834; + t['lessequal'] = 549; + t['ocircumflex'] = 556; + t['ntilde'] = 556; + t['Uhungarumlaut'] = 722; + t['Eacute'] = 667; + t['emacron'] = 556; + t['gbreve'] = 556; + t['onequarter'] = 834; + t['Scaron'] = 667; + t['Scommaaccent'] = 667; + t['Ohungarumlaut'] = 778; + t['degree'] = 400; + t['ograve'] = 556; + t['Ccaron'] = 722; + t['ugrave'] = 556; + t['radical'] = 453; + t['Dcaron'] = 722; + t['rcommaaccent'] = 333; + t['Ntilde'] = 722; + t['otilde'] = 556; + t['Rcommaaccent'] = 722; + t['Lcommaaccent'] = 556; + t['Atilde'] = 667; + t['Aogonek'] = 667; + t['Aring'] = 667; + t['Otilde'] = 778; + t['zdotaccent'] = 500; + t['Ecaron'] = 667; + t['Iogonek'] = 278; + t['kcommaaccent'] = 500; + t['minus'] = 584; + t['Icircumflex'] = 278; + t['ncaron'] = 556; + t['tcommaaccent'] = 278; + t['logicalnot'] = 584; + t['odieresis'] = 556; + t['udieresis'] = 556; + t['notequal'] = 549; + t['gcommaaccent'] = 556; + t['eth'] = 556; + t['zcaron'] = 500; + t['ncommaaccent'] = 556; + t['onesuperior'] = 333; + t['imacron'] = 278; + t['Euro'] = 556; + }); + t['Symbol'] = getLookupTableFactory(function (t) { + t['space'] = 250; + t['exclam'] = 333; + t['universal'] = 713; + t['numbersign'] = 500; + t['existential'] = 549; + t['percent'] = 833; + t['ampersand'] = 778; + t['suchthat'] = 439; + t['parenleft'] = 333; + t['parenright'] = 333; + t['asteriskmath'] = 500; + t['plus'] = 549; + t['comma'] = 250; + t['minus'] = 549; + t['period'] = 250; + t['slash'] = 278; + t['zero'] = 500; + t['one'] = 500; + t['two'] = 500; + t['three'] = 500; + t['four'] = 500; + t['five'] = 500; + t['six'] = 500; + t['seven'] = 500; + t['eight'] = 500; + t['nine'] = 500; + t['colon'] = 278; + t['semicolon'] = 278; + t['less'] = 549; + t['equal'] = 549; + t['greater'] = 549; + t['question'] = 444; + t['congruent'] = 549; + t['Alpha'] = 722; + t['Beta'] = 667; + t['Chi'] = 722; + t['Delta'] = 612; + t['Epsilon'] = 611; + t['Phi'] = 763; + t['Gamma'] = 603; + t['Eta'] = 722; + t['Iota'] = 333; + t['theta1'] = 631; + t['Kappa'] = 722; + t['Lambda'] = 686; + t['Mu'] = 889; + t['Nu'] = 722; + t['Omicron'] = 722; + t['Pi'] = 768; + t['Theta'] = 741; + t['Rho'] = 556; + t['Sigma'] = 592; + t['Tau'] = 611; + t['Upsilon'] = 690; + t['sigma1'] = 439; + t['Omega'] = 768; + t['Xi'] = 645; + t['Psi'] = 795; + t['Zeta'] = 611; + t['bracketleft'] = 333; + t['therefore'] = 863; + t['bracketright'] = 333; + t['perpendicular'] = 658; + t['underscore'] = 500; + t['radicalex'] = 500; + t['alpha'] = 631; + t['beta'] = 549; + t['chi'] = 549; + t['delta'] = 494; + t['epsilon'] = 439; + t['phi'] = 521; + t['gamma'] = 411; + t['eta'] = 603; + t['iota'] = 329; + t['phi1'] = 603; + t['kappa'] = 549; + t['lambda'] = 549; + t['mu'] = 576; + t['nu'] = 521; + t['omicron'] = 549; + t['pi'] = 549; + t['theta'] = 521; + t['rho'] = 549; + t['sigma'] = 603; + t['tau'] = 439; + t['upsilon'] = 576; + t['omega1'] = 713; + t['omega'] = 686; + t['xi'] = 493; + t['psi'] = 686; + t['zeta'] = 494; + t['braceleft'] = 480; + t['bar'] = 200; + t['braceright'] = 480; + t['similar'] = 549; + t['Euro'] = 750; + t['Upsilon1'] = 620; + t['minute'] = 247; + t['lessequal'] = 549; + t['fraction'] = 167; + t['infinity'] = 713; + t['florin'] = 500; + t['club'] = 753; + t['diamond'] = 753; + t['heart'] = 753; + t['spade'] = 753; + t['arrowboth'] = 1042; + t['arrowleft'] = 987; + t['arrowup'] = 603; + t['arrowright'] = 987; + t['arrowdown'] = 603; + t['degree'] = 400; + t['plusminus'] = 549; + t['second'] = 411; + t['greaterequal'] = 549; + t['multiply'] = 549; + t['proportional'] = 713; + t['partialdiff'] = 494; + t['bullet'] = 460; + t['divide'] = 549; + t['notequal'] = 549; + t['equivalence'] = 549; + t['approxequal'] = 549; + t['ellipsis'] = 1000; + t['arrowvertex'] = 603; + t['arrowhorizex'] = 1000; + t['carriagereturn'] = 658; + t['aleph'] = 823; + t['Ifraktur'] = 686; + t['Rfraktur'] = 795; + t['weierstrass'] = 987; + t['circlemultiply'] = 768; + t['circleplus'] = 768; + t['emptyset'] = 823; + t['intersection'] = 768; + t['union'] = 768; + t['propersuperset'] = 713; + t['reflexsuperset'] = 713; + t['notsubset'] = 713; + t['propersubset'] = 713; + t['reflexsubset'] = 713; + t['element'] = 713; + t['notelement'] = 713; + t['angle'] = 768; + t['gradient'] = 713; + t['registerserif'] = 790; + t['copyrightserif'] = 790; + t['trademarkserif'] = 890; + t['product'] = 823; + t['radical'] = 549; + t['dotmath'] = 250; + t['logicalnot'] = 713; + t['logicaland'] = 603; + t['logicalor'] = 603; + t['arrowdblboth'] = 1042; + t['arrowdblleft'] = 987; + t['arrowdblup'] = 603; + t['arrowdblright'] = 987; + t['arrowdbldown'] = 603; + t['lozenge'] = 494; + t['angleleft'] = 329; + t['registersans'] = 790; + t['copyrightsans'] = 790; + t['trademarksans'] = 786; + t['summation'] = 713; + t['parenlefttp'] = 384; + t['parenleftex'] = 384; + t['parenleftbt'] = 384; + t['bracketlefttp'] = 384; + t['bracketleftex'] = 384; + t['bracketleftbt'] = 384; + t['bracelefttp'] = 494; + t['braceleftmid'] = 494; + t['braceleftbt'] = 494; + t['braceex'] = 494; + t['angleright'] = 329; + t['integral'] = 274; + t['integraltp'] = 686; + t['integralex'] = 686; + t['integralbt'] = 686; + t['parenrighttp'] = 384; + t['parenrightex'] = 384; + t['parenrightbt'] = 384; + t['bracketrighttp'] = 384; + t['bracketrightex'] = 384; + t['bracketrightbt'] = 384; + t['bracerighttp'] = 494; + t['bracerightmid'] = 494; + t['bracerightbt'] = 494; + t['apple'] = 790; + }); + t['Times-Roman'] = getLookupTableFactory(function (t) { + t['space'] = 250; + t['exclam'] = 333; + t['quotedbl'] = 408; + t['numbersign'] = 500; + t['dollar'] = 500; + t['percent'] = 833; + t['ampersand'] = 778; + t['quoteright'] = 333; + t['parenleft'] = 333; + t['parenright'] = 333; + t['asterisk'] = 500; + t['plus'] = 564; + t['comma'] = 250; + t['hyphen'] = 333; + t['period'] = 250; + t['slash'] = 278; + t['zero'] = 500; + t['one'] = 500; + t['two'] = 500; + t['three'] = 500; + t['four'] = 500; + t['five'] = 500; + t['six'] = 500; + t['seven'] = 500; + t['eight'] = 500; + t['nine'] = 500; + t['colon'] = 278; + t['semicolon'] = 278; + t['less'] = 564; + t['equal'] = 564; + t['greater'] = 564; + t['question'] = 444; + t['at'] = 921; + t['A'] = 722; + t['B'] = 667; + t['C'] = 667; + t['D'] = 722; + t['E'] = 611; + t['F'] = 556; + t['G'] = 722; + t['H'] = 722; + t['I'] = 333; + t['J'] = 389; + t['K'] = 722; + t['L'] = 611; + t['M'] = 889; + t['N'] = 722; + t['O'] = 722; + t['P'] = 556; + t['Q'] = 722; + t['R'] = 667; + t['S'] = 556; + t['T'] = 611; + t['U'] = 722; + t['V'] = 722; + t['W'] = 944; + t['X'] = 722; + t['Y'] = 722; + t['Z'] = 611; + t['bracketleft'] = 333; + t['backslash'] = 278; + t['bracketright'] = 333; + t['asciicircum'] = 469; + t['underscore'] = 500; + t['quoteleft'] = 333; + t['a'] = 444; + t['b'] = 500; + t['c'] = 444; + t['d'] = 500; + t['e'] = 444; + t['f'] = 333; + t['g'] = 500; + t['h'] = 500; + t['i'] = 278; + t['j'] = 278; + t['k'] = 500; + t['l'] = 278; + t['m'] = 778; + t['n'] = 500; + t['o'] = 500; + t['p'] = 500; + t['q'] = 500; + t['r'] = 333; + t['s'] = 389; + t['t'] = 278; + t['u'] = 500; + t['v'] = 500; + t['w'] = 722; + t['x'] = 500; + t['y'] = 500; + t['z'] = 444; + t['braceleft'] = 480; + t['bar'] = 200; + t['braceright'] = 480; + t['asciitilde'] = 541; + t['exclamdown'] = 333; + t['cent'] = 500; + t['sterling'] = 500; + t['fraction'] = 167; + t['yen'] = 500; + t['florin'] = 500; + t['section'] = 500; + t['currency'] = 500; + t['quotesingle'] = 180; + t['quotedblleft'] = 444; + t['guillemotleft'] = 500; + t['guilsinglleft'] = 333; + t['guilsinglright'] = 333; + t['fi'] = 556; + t['fl'] = 556; + t['endash'] = 500; + t['dagger'] = 500; + t['daggerdbl'] = 500; + t['periodcentered'] = 250; + t['paragraph'] = 453; + t['bullet'] = 350; + t['quotesinglbase'] = 333; + t['quotedblbase'] = 444; + t['quotedblright'] = 444; + t['guillemotright'] = 500; + t['ellipsis'] = 1000; + t['perthousand'] = 1000; + t['questiondown'] = 444; + t['grave'] = 333; + t['acute'] = 333; + t['circumflex'] = 333; + t['tilde'] = 333; + t['macron'] = 333; + t['breve'] = 333; + t['dotaccent'] = 333; + t['dieresis'] = 333; + t['ring'] = 333; + t['cedilla'] = 333; + t['hungarumlaut'] = 333; + t['ogonek'] = 333; + t['caron'] = 333; + t['emdash'] = 1000; + t['AE'] = 889; + t['ordfeminine'] = 276; + t['Lslash'] = 611; + t['Oslash'] = 722; + t['OE'] = 889; + t['ordmasculine'] = 310; + t['ae'] = 667; + t['dotlessi'] = 278; + t['lslash'] = 278; + t['oslash'] = 500; + t['oe'] = 722; + t['germandbls'] = 500; + t['Idieresis'] = 333; + t['eacute'] = 444; + t['abreve'] = 444; + t['uhungarumlaut'] = 500; + t['ecaron'] = 444; + t['Ydieresis'] = 722; + t['divide'] = 564; + t['Yacute'] = 722; + t['Acircumflex'] = 722; + t['aacute'] = 444; + t['Ucircumflex'] = 722; + t['yacute'] = 500; + t['scommaaccent'] = 389; + t['ecircumflex'] = 444; + t['Uring'] = 722; + t['Udieresis'] = 722; + t['aogonek'] = 444; + t['Uacute'] = 722; + t['uogonek'] = 500; + t['Edieresis'] = 611; + t['Dcroat'] = 722; + t['commaaccent'] = 250; + t['copyright'] = 760; + t['Emacron'] = 611; + t['ccaron'] = 444; + t['aring'] = 444; + t['Ncommaaccent'] = 722; + t['lacute'] = 278; + t['agrave'] = 444; + t['Tcommaaccent'] = 611; + t['Cacute'] = 667; + t['atilde'] = 444; + t['Edotaccent'] = 611; + t['scaron'] = 389; + t['scedilla'] = 389; + t['iacute'] = 278; + t['lozenge'] = 471; + t['Rcaron'] = 667; + t['Gcommaaccent'] = 722; + t['ucircumflex'] = 500; + t['acircumflex'] = 444; + t['Amacron'] = 722; + t['rcaron'] = 333; + t['ccedilla'] = 444; + t['Zdotaccent'] = 611; + t['Thorn'] = 556; + t['Omacron'] = 722; + t['Racute'] = 667; + t['Sacute'] = 556; + t['dcaron'] = 588; + t['Umacron'] = 722; + t['uring'] = 500; + t['threesuperior'] = 300; + t['Ograve'] = 722; + t['Agrave'] = 722; + t['Abreve'] = 722; + t['multiply'] = 564; + t['uacute'] = 500; + t['Tcaron'] = 611; + t['partialdiff'] = 476; + t['ydieresis'] = 500; + t['Nacute'] = 722; + t['icircumflex'] = 278; + t['Ecircumflex'] = 611; + t['adieresis'] = 444; + t['edieresis'] = 444; + t['cacute'] = 444; + t['nacute'] = 500; + t['umacron'] = 500; + t['Ncaron'] = 722; + t['Iacute'] = 333; + t['plusminus'] = 564; + t['brokenbar'] = 200; + t['registered'] = 760; + t['Gbreve'] = 722; + t['Idotaccent'] = 333; + t['summation'] = 600; + t['Egrave'] = 611; + t['racute'] = 333; + t['omacron'] = 500; + t['Zacute'] = 611; + t['Zcaron'] = 611; + t['greaterequal'] = 549; + t['Eth'] = 722; + t['Ccedilla'] = 667; + t['lcommaaccent'] = 278; + t['tcaron'] = 326; + t['eogonek'] = 444; + t['Uogonek'] = 722; + t['Aacute'] = 722; + t['Adieresis'] = 722; + t['egrave'] = 444; + t['zacute'] = 444; + t['iogonek'] = 278; + t['Oacute'] = 722; + t['oacute'] = 500; + t['amacron'] = 444; + t['sacute'] = 389; + t['idieresis'] = 278; + t['Ocircumflex'] = 722; + t['Ugrave'] = 722; + t['Delta'] = 612; + t['thorn'] = 500; + t['twosuperior'] = 300; + t['Odieresis'] = 722; + t['mu'] = 500; + t['igrave'] = 278; + t['ohungarumlaut'] = 500; + t['Eogonek'] = 611; + t['dcroat'] = 500; + t['threequarters'] = 750; + t['Scedilla'] = 556; + t['lcaron'] = 344; + t['Kcommaaccent'] = 722; + t['Lacute'] = 611; + t['trademark'] = 980; + t['edotaccent'] = 444; + t['Igrave'] = 333; + t['Imacron'] = 333; + t['Lcaron'] = 611; + t['onehalf'] = 750; + t['lessequal'] = 549; + t['ocircumflex'] = 500; + t['ntilde'] = 500; + t['Uhungarumlaut'] = 722; + t['Eacute'] = 611; + t['emacron'] = 444; + t['gbreve'] = 500; + t['onequarter'] = 750; + t['Scaron'] = 556; + t['Scommaaccent'] = 556; + t['Ohungarumlaut'] = 722; + t['degree'] = 400; + t['ograve'] = 500; + t['Ccaron'] = 667; + t['ugrave'] = 500; + t['radical'] = 453; + t['Dcaron'] = 722; + t['rcommaaccent'] = 333; + t['Ntilde'] = 722; + t['otilde'] = 500; + t['Rcommaaccent'] = 667; + t['Lcommaaccent'] = 611; + t['Atilde'] = 722; + t['Aogonek'] = 722; + t['Aring'] = 722; + t['Otilde'] = 722; + t['zdotaccent'] = 444; + t['Ecaron'] = 611; + t['Iogonek'] = 333; + t['kcommaaccent'] = 500; + t['minus'] = 564; + t['Icircumflex'] = 333; + t['ncaron'] = 500; + t['tcommaaccent'] = 278; + t['logicalnot'] = 564; + t['odieresis'] = 500; + t['udieresis'] = 500; + t['notequal'] = 549; + t['gcommaaccent'] = 500; + t['eth'] = 500; + t['zcaron'] = 444; + t['ncommaaccent'] = 500; + t['onesuperior'] = 300; + t['imacron'] = 278; + t['Euro'] = 500; + }); + t['Times-Bold'] = getLookupTableFactory(function (t) { + t['space'] = 250; + t['exclam'] = 333; + t['quotedbl'] = 555; + t['numbersign'] = 500; + t['dollar'] = 500; + t['percent'] = 1000; + t['ampersand'] = 833; + t['quoteright'] = 333; + t['parenleft'] = 333; + t['parenright'] = 333; + t['asterisk'] = 500; + t['plus'] = 570; + t['comma'] = 250; + t['hyphen'] = 333; + t['period'] = 250; + t['slash'] = 278; + t['zero'] = 500; + t['one'] = 500; + t['two'] = 500; + t['three'] = 500; + t['four'] = 500; + t['five'] = 500; + t['six'] = 500; + t['seven'] = 500; + t['eight'] = 500; + t['nine'] = 500; + t['colon'] = 333; + t['semicolon'] = 333; + t['less'] = 570; + t['equal'] = 570; + t['greater'] = 570; + t['question'] = 500; + t['at'] = 930; + t['A'] = 722; + t['B'] = 667; + t['C'] = 722; + t['D'] = 722; + t['E'] = 667; + t['F'] = 611; + t['G'] = 778; + t['H'] = 778; + t['I'] = 389; + t['J'] = 500; + t['K'] = 778; + t['L'] = 667; + t['M'] = 944; + t['N'] = 722; + t['O'] = 778; + t['P'] = 611; + t['Q'] = 778; + t['R'] = 722; + t['S'] = 556; + t['T'] = 667; + t['U'] = 722; + t['V'] = 722; + t['W'] = 1000; + t['X'] = 722; + t['Y'] = 722; + t['Z'] = 667; + t['bracketleft'] = 333; + t['backslash'] = 278; + t['bracketright'] = 333; + t['asciicircum'] = 581; + t['underscore'] = 500; + t['quoteleft'] = 333; + t['a'] = 500; + t['b'] = 556; + t['c'] = 444; + t['d'] = 556; + t['e'] = 444; + t['f'] = 333; + t['g'] = 500; + t['h'] = 556; + t['i'] = 278; + t['j'] = 333; + t['k'] = 556; + t['l'] = 278; + t['m'] = 833; + t['n'] = 556; + t['o'] = 500; + t['p'] = 556; + t['q'] = 556; + t['r'] = 444; + t['s'] = 389; + t['t'] = 333; + t['u'] = 556; + t['v'] = 500; + t['w'] = 722; + t['x'] = 500; + t['y'] = 500; + t['z'] = 444; + t['braceleft'] = 394; + t['bar'] = 220; + t['braceright'] = 394; + t['asciitilde'] = 520; + t['exclamdown'] = 333; + t['cent'] = 500; + t['sterling'] = 500; + t['fraction'] = 167; + t['yen'] = 500; + t['florin'] = 500; + t['section'] = 500; + t['currency'] = 500; + t['quotesingle'] = 278; + t['quotedblleft'] = 500; + t['guillemotleft'] = 500; + t['guilsinglleft'] = 333; + t['guilsinglright'] = 333; + t['fi'] = 556; + t['fl'] = 556; + t['endash'] = 500; + t['dagger'] = 500; + t['daggerdbl'] = 500; + t['periodcentered'] = 250; + t['paragraph'] = 540; + t['bullet'] = 350; + t['quotesinglbase'] = 333; + t['quotedblbase'] = 500; + t['quotedblright'] = 500; + t['guillemotright'] = 500; + t['ellipsis'] = 1000; + t['perthousand'] = 1000; + t['questiondown'] = 500; + t['grave'] = 333; + t['acute'] = 333; + t['circumflex'] = 333; + t['tilde'] = 333; + t['macron'] = 333; + t['breve'] = 333; + t['dotaccent'] = 333; + t['dieresis'] = 333; + t['ring'] = 333; + t['cedilla'] = 333; + t['hungarumlaut'] = 333; + t['ogonek'] = 333; + t['caron'] = 333; + t['emdash'] = 1000; + t['AE'] = 1000; + t['ordfeminine'] = 300; + t['Lslash'] = 667; + t['Oslash'] = 778; + t['OE'] = 1000; + t['ordmasculine'] = 330; + t['ae'] = 722; + t['dotlessi'] = 278; + t['lslash'] = 278; + t['oslash'] = 500; + t['oe'] = 722; + t['germandbls'] = 556; + t['Idieresis'] = 389; + t['eacute'] = 444; + t['abreve'] = 500; + t['uhungarumlaut'] = 556; + t['ecaron'] = 444; + t['Ydieresis'] = 722; + t['divide'] = 570; + t['Yacute'] = 722; + t['Acircumflex'] = 722; + t['aacute'] = 500; + t['Ucircumflex'] = 722; + t['yacute'] = 500; + t['scommaaccent'] = 389; + t['ecircumflex'] = 444; + t['Uring'] = 722; + t['Udieresis'] = 722; + t['aogonek'] = 500; + t['Uacute'] = 722; + t['uogonek'] = 556; + t['Edieresis'] = 667; + t['Dcroat'] = 722; + t['commaaccent'] = 250; + t['copyright'] = 747; + t['Emacron'] = 667; + t['ccaron'] = 444; + t['aring'] = 500; + t['Ncommaaccent'] = 722; + t['lacute'] = 278; + t['agrave'] = 500; + t['Tcommaaccent'] = 667; + t['Cacute'] = 722; + t['atilde'] = 500; + t['Edotaccent'] = 667; + t['scaron'] = 389; + t['scedilla'] = 389; + t['iacute'] = 278; + t['lozenge'] = 494; + t['Rcaron'] = 722; + t['Gcommaaccent'] = 778; + t['ucircumflex'] = 556; + t['acircumflex'] = 500; + t['Amacron'] = 722; + t['rcaron'] = 444; + t['ccedilla'] = 444; + t['Zdotaccent'] = 667; + t['Thorn'] = 611; + t['Omacron'] = 778; + t['Racute'] = 722; + t['Sacute'] = 556; + t['dcaron'] = 672; + t['Umacron'] = 722; + t['uring'] = 556; + t['threesuperior'] = 300; + t['Ograve'] = 778; + t['Agrave'] = 722; + t['Abreve'] = 722; + t['multiply'] = 570; + t['uacute'] = 556; + t['Tcaron'] = 667; + t['partialdiff'] = 494; + t['ydieresis'] = 500; + t['Nacute'] = 722; + t['icircumflex'] = 278; + t['Ecircumflex'] = 667; + t['adieresis'] = 500; + t['edieresis'] = 444; + t['cacute'] = 444; + t['nacute'] = 556; + t['umacron'] = 556; + t['Ncaron'] = 722; + t['Iacute'] = 389; + t['plusminus'] = 570; + t['brokenbar'] = 220; + t['registered'] = 747; + t['Gbreve'] = 778; + t['Idotaccent'] = 389; + t['summation'] = 600; + t['Egrave'] = 667; + t['racute'] = 444; + t['omacron'] = 500; + t['Zacute'] = 667; + t['Zcaron'] = 667; + t['greaterequal'] = 549; + t['Eth'] = 722; + t['Ccedilla'] = 722; + t['lcommaaccent'] = 278; + t['tcaron'] = 416; + t['eogonek'] = 444; + t['Uogonek'] = 722; + t['Aacute'] = 722; + t['Adieresis'] = 722; + t['egrave'] = 444; + t['zacute'] = 444; + t['iogonek'] = 278; + t['Oacute'] = 778; + t['oacute'] = 500; + t['amacron'] = 500; + t['sacute'] = 389; + t['idieresis'] = 278; + t['Ocircumflex'] = 778; + t['Ugrave'] = 722; + t['Delta'] = 612; + t['thorn'] = 556; + t['twosuperior'] = 300; + t['Odieresis'] = 778; + t['mu'] = 556; + t['igrave'] = 278; + t['ohungarumlaut'] = 500; + t['Eogonek'] = 667; + t['dcroat'] = 556; + t['threequarters'] = 750; + t['Scedilla'] = 556; + t['lcaron'] = 394; + t['Kcommaaccent'] = 778; + t['Lacute'] = 667; + t['trademark'] = 1000; + t['edotaccent'] = 444; + t['Igrave'] = 389; + t['Imacron'] = 389; + t['Lcaron'] = 667; + t['onehalf'] = 750; + t['lessequal'] = 549; + t['ocircumflex'] = 500; + t['ntilde'] = 556; + t['Uhungarumlaut'] = 722; + t['Eacute'] = 667; + t['emacron'] = 444; + t['gbreve'] = 500; + t['onequarter'] = 750; + t['Scaron'] = 556; + t['Scommaaccent'] = 556; + t['Ohungarumlaut'] = 778; + t['degree'] = 400; + t['ograve'] = 500; + t['Ccaron'] = 722; + t['ugrave'] = 556; + t['radical'] = 549; + t['Dcaron'] = 722; + t['rcommaaccent'] = 444; + t['Ntilde'] = 722; + t['otilde'] = 500; + t['Rcommaaccent'] = 722; + t['Lcommaaccent'] = 667; + t['Atilde'] = 722; + t['Aogonek'] = 722; + t['Aring'] = 722; + t['Otilde'] = 778; + t['zdotaccent'] = 444; + t['Ecaron'] = 667; + t['Iogonek'] = 389; + t['kcommaaccent'] = 556; + t['minus'] = 570; + t['Icircumflex'] = 389; + t['ncaron'] = 556; + t['tcommaaccent'] = 333; + t['logicalnot'] = 570; + t['odieresis'] = 500; + t['udieresis'] = 556; + t['notequal'] = 549; + t['gcommaaccent'] = 500; + t['eth'] = 500; + t['zcaron'] = 444; + t['ncommaaccent'] = 556; + t['onesuperior'] = 300; + t['imacron'] = 278; + t['Euro'] = 500; + }); + t['Times-BoldItalic'] = getLookupTableFactory(function (t) { + t['space'] = 250; + t['exclam'] = 389; + t['quotedbl'] = 555; + t['numbersign'] = 500; + t['dollar'] = 500; + t['percent'] = 833; + t['ampersand'] = 778; + t['quoteright'] = 333; + t['parenleft'] = 333; + t['parenright'] = 333; + t['asterisk'] = 500; + t['plus'] = 570; + t['comma'] = 250; + t['hyphen'] = 333; + t['period'] = 250; + t['slash'] = 278; + t['zero'] = 500; + t['one'] = 500; + t['two'] = 500; + t['three'] = 500; + t['four'] = 500; + t['five'] = 500; + t['six'] = 500; + t['seven'] = 500; + t['eight'] = 500; + t['nine'] = 500; + t['colon'] = 333; + t['semicolon'] = 333; + t['less'] = 570; + t['equal'] = 570; + t['greater'] = 570; + t['question'] = 500; + t['at'] = 832; + t['A'] = 667; + t['B'] = 667; + t['C'] = 667; + t['D'] = 722; + t['E'] = 667; + t['F'] = 667; + t['G'] = 722; + t['H'] = 778; + t['I'] = 389; + t['J'] = 500; + t['K'] = 667; + t['L'] = 611; + t['M'] = 889; + t['N'] = 722; + t['O'] = 722; + t['P'] = 611; + t['Q'] = 722; + t['R'] = 667; + t['S'] = 556; + t['T'] = 611; + t['U'] = 722; + t['V'] = 667; + t['W'] = 889; + t['X'] = 667; + t['Y'] = 611; + t['Z'] = 611; + t['bracketleft'] = 333; + t['backslash'] = 278; + t['bracketright'] = 333; + t['asciicircum'] = 570; + t['underscore'] = 500; + t['quoteleft'] = 333; + t['a'] = 500; + t['b'] = 500; + t['c'] = 444; + t['d'] = 500; + t['e'] = 444; + t['f'] = 333; + t['g'] = 500; + t['h'] = 556; + t['i'] = 278; + t['j'] = 278; + t['k'] = 500; + t['l'] = 278; + t['m'] = 778; + t['n'] = 556; + t['o'] = 500; + t['p'] = 500; + t['q'] = 500; + t['r'] = 389; + t['s'] = 389; + t['t'] = 278; + t['u'] = 556; + t['v'] = 444; + t['w'] = 667; + t['x'] = 500; + t['y'] = 444; + t['z'] = 389; + t['braceleft'] = 348; + t['bar'] = 220; + t['braceright'] = 348; + t['asciitilde'] = 570; + t['exclamdown'] = 389; + t['cent'] = 500; + t['sterling'] = 500; + t['fraction'] = 167; + t['yen'] = 500; + t['florin'] = 500; + t['section'] = 500; + t['currency'] = 500; + t['quotesingle'] = 278; + t['quotedblleft'] = 500; + t['guillemotleft'] = 500; + t['guilsinglleft'] = 333; + t['guilsinglright'] = 333; + t['fi'] = 556; + t['fl'] = 556; + t['endash'] = 500; + t['dagger'] = 500; + t['daggerdbl'] = 500; + t['periodcentered'] = 250; + t['paragraph'] = 500; + t['bullet'] = 350; + t['quotesinglbase'] = 333; + t['quotedblbase'] = 500; + t['quotedblright'] = 500; + t['guillemotright'] = 500; + t['ellipsis'] = 1000; + t['perthousand'] = 1000; + t['questiondown'] = 500; + t['grave'] = 333; + t['acute'] = 333; + t['circumflex'] = 333; + t['tilde'] = 333; + t['macron'] = 333; + t['breve'] = 333; + t['dotaccent'] = 333; + t['dieresis'] = 333; + t['ring'] = 333; + t['cedilla'] = 333; + t['hungarumlaut'] = 333; + t['ogonek'] = 333; + t['caron'] = 333; + t['emdash'] = 1000; + t['AE'] = 944; + t['ordfeminine'] = 266; + t['Lslash'] = 611; + t['Oslash'] = 722; + t['OE'] = 944; + t['ordmasculine'] = 300; + t['ae'] = 722; + t['dotlessi'] = 278; + t['lslash'] = 278; + t['oslash'] = 500; + t['oe'] = 722; + t['germandbls'] = 500; + t['Idieresis'] = 389; + t['eacute'] = 444; + t['abreve'] = 500; + t['uhungarumlaut'] = 556; + t['ecaron'] = 444; + t['Ydieresis'] = 611; + t['divide'] = 570; + t['Yacute'] = 611; + t['Acircumflex'] = 667; + t['aacute'] = 500; + t['Ucircumflex'] = 722; + t['yacute'] = 444; + t['scommaaccent'] = 389; + t['ecircumflex'] = 444; + t['Uring'] = 722; + t['Udieresis'] = 722; + t['aogonek'] = 500; + t['Uacute'] = 722; + t['uogonek'] = 556; + t['Edieresis'] = 667; + t['Dcroat'] = 722; + t['commaaccent'] = 250; + t['copyright'] = 747; + t['Emacron'] = 667; + t['ccaron'] = 444; + t['aring'] = 500; + t['Ncommaaccent'] = 722; + t['lacute'] = 278; + t['agrave'] = 500; + t['Tcommaaccent'] = 611; + t['Cacute'] = 667; + t['atilde'] = 500; + t['Edotaccent'] = 667; + t['scaron'] = 389; + t['scedilla'] = 389; + t['iacute'] = 278; + t['lozenge'] = 494; + t['Rcaron'] = 667; + t['Gcommaaccent'] = 722; + t['ucircumflex'] = 556; + t['acircumflex'] = 500; + t['Amacron'] = 667; + t['rcaron'] = 389; + t['ccedilla'] = 444; + t['Zdotaccent'] = 611; + t['Thorn'] = 611; + t['Omacron'] = 722; + t['Racute'] = 667; + t['Sacute'] = 556; + t['dcaron'] = 608; + t['Umacron'] = 722; + t['uring'] = 556; + t['threesuperior'] = 300; + t['Ograve'] = 722; + t['Agrave'] = 667; + t['Abreve'] = 667; + t['multiply'] = 570; + t['uacute'] = 556; + t['Tcaron'] = 611; + t['partialdiff'] = 494; + t['ydieresis'] = 444; + t['Nacute'] = 722; + t['icircumflex'] = 278; + t['Ecircumflex'] = 667; + t['adieresis'] = 500; + t['edieresis'] = 444; + t['cacute'] = 444; + t['nacute'] = 556; + t['umacron'] = 556; + t['Ncaron'] = 722; + t['Iacute'] = 389; + t['plusminus'] = 570; + t['brokenbar'] = 220; + t['registered'] = 747; + t['Gbreve'] = 722; + t['Idotaccent'] = 389; + t['summation'] = 600; + t['Egrave'] = 667; + t['racute'] = 389; + t['omacron'] = 500; + t['Zacute'] = 611; + t['Zcaron'] = 611; + t['greaterequal'] = 549; + t['Eth'] = 722; + t['Ccedilla'] = 667; + t['lcommaaccent'] = 278; + t['tcaron'] = 366; + t['eogonek'] = 444; + t['Uogonek'] = 722; + t['Aacute'] = 667; + t['Adieresis'] = 667; + t['egrave'] = 444; + t['zacute'] = 389; + t['iogonek'] = 278; + t['Oacute'] = 722; + t['oacute'] = 500; + t['amacron'] = 500; + t['sacute'] = 389; + t['idieresis'] = 278; + t['Ocircumflex'] = 722; + t['Ugrave'] = 722; + t['Delta'] = 612; + t['thorn'] = 500; + t['twosuperior'] = 300; + t['Odieresis'] = 722; + t['mu'] = 576; + t['igrave'] = 278; + t['ohungarumlaut'] = 500; + t['Eogonek'] = 667; + t['dcroat'] = 500; + t['threequarters'] = 750; + t['Scedilla'] = 556; + t['lcaron'] = 382; + t['Kcommaaccent'] = 667; + t['Lacute'] = 611; + t['trademark'] = 1000; + t['edotaccent'] = 444; + t['Igrave'] = 389; + t['Imacron'] = 389; + t['Lcaron'] = 611; + t['onehalf'] = 750; + t['lessequal'] = 549; + t['ocircumflex'] = 500; + t['ntilde'] = 556; + t['Uhungarumlaut'] = 722; + t['Eacute'] = 667; + t['emacron'] = 444; + t['gbreve'] = 500; + t['onequarter'] = 750; + t['Scaron'] = 556; + t['Scommaaccent'] = 556; + t['Ohungarumlaut'] = 722; + t['degree'] = 400; + t['ograve'] = 500; + t['Ccaron'] = 667; + t['ugrave'] = 556; + t['radical'] = 549; + t['Dcaron'] = 722; + t['rcommaaccent'] = 389; + t['Ntilde'] = 722; + t['otilde'] = 500; + t['Rcommaaccent'] = 667; + t['Lcommaaccent'] = 611; + t['Atilde'] = 667; + t['Aogonek'] = 667; + t['Aring'] = 667; + t['Otilde'] = 722; + t['zdotaccent'] = 389; + t['Ecaron'] = 667; + t['Iogonek'] = 389; + t['kcommaaccent'] = 500; + t['minus'] = 606; + t['Icircumflex'] = 389; + t['ncaron'] = 556; + t['tcommaaccent'] = 278; + t['logicalnot'] = 606; + t['odieresis'] = 500; + t['udieresis'] = 556; + t['notequal'] = 549; + t['gcommaaccent'] = 500; + t['eth'] = 500; + t['zcaron'] = 389; + t['ncommaaccent'] = 556; + t['onesuperior'] = 300; + t['imacron'] = 278; + t['Euro'] = 500; + }); + t['Times-Italic'] = getLookupTableFactory(function (t) { + t['space'] = 250; + t['exclam'] = 333; + t['quotedbl'] = 420; + t['numbersign'] = 500; + t['dollar'] = 500; + t['percent'] = 833; + t['ampersand'] = 778; + t['quoteright'] = 333; + t['parenleft'] = 333; + t['parenright'] = 333; + t['asterisk'] = 500; + t['plus'] = 675; + t['comma'] = 250; + t['hyphen'] = 333; + t['period'] = 250; + t['slash'] = 278; + t['zero'] = 500; + t['one'] = 500; + t['two'] = 500; + t['three'] = 500; + t['four'] = 500; + t['five'] = 500; + t['six'] = 500; + t['seven'] = 500; + t['eight'] = 500; + t['nine'] = 500; + t['colon'] = 333; + t['semicolon'] = 333; + t['less'] = 675; + t['equal'] = 675; + t['greater'] = 675; + t['question'] = 500; + t['at'] = 920; + t['A'] = 611; + t['B'] = 611; + t['C'] = 667; + t['D'] = 722; + t['E'] = 611; + t['F'] = 611; + t['G'] = 722; + t['H'] = 722; + t['I'] = 333; + t['J'] = 444; + t['K'] = 667; + t['L'] = 556; + t['M'] = 833; + t['N'] = 667; + t['O'] = 722; + t['P'] = 611; + t['Q'] = 722; + t['R'] = 611; + t['S'] = 500; + t['T'] = 556; + t['U'] = 722; + t['V'] = 611; + t['W'] = 833; + t['X'] = 611; + t['Y'] = 556; + t['Z'] = 556; + t['bracketleft'] = 389; + t['backslash'] = 278; + t['bracketright'] = 389; + t['asciicircum'] = 422; + t['underscore'] = 500; + t['quoteleft'] = 333; + t['a'] = 500; + t['b'] = 500; + t['c'] = 444; + t['d'] = 500; + t['e'] = 444; + t['f'] = 278; + t['g'] = 500; + t['h'] = 500; + t['i'] = 278; + t['j'] = 278; + t['k'] = 444; + t['l'] = 278; + t['m'] = 722; + t['n'] = 500; + t['o'] = 500; + t['p'] = 500; + t['q'] = 500; + t['r'] = 389; + t['s'] = 389; + t['t'] = 278; + t['u'] = 500; + t['v'] = 444; + t['w'] = 667; + t['x'] = 444; + t['y'] = 444; + t['z'] = 389; + t['braceleft'] = 400; + t['bar'] = 275; + t['braceright'] = 400; + t['asciitilde'] = 541; + t['exclamdown'] = 389; + t['cent'] = 500; + t['sterling'] = 500; + t['fraction'] = 167; + t['yen'] = 500; + t['florin'] = 500; + t['section'] = 500; + t['currency'] = 500; + t['quotesingle'] = 214; + t['quotedblleft'] = 556; + t['guillemotleft'] = 500; + t['guilsinglleft'] = 333; + t['guilsinglright'] = 333; + t['fi'] = 500; + t['fl'] = 500; + t['endash'] = 500; + t['dagger'] = 500; + t['daggerdbl'] = 500; + t['periodcentered'] = 250; + t['paragraph'] = 523; + t['bullet'] = 350; + t['quotesinglbase'] = 333; + t['quotedblbase'] = 556; + t['quotedblright'] = 556; + t['guillemotright'] = 500; + t['ellipsis'] = 889; + t['perthousand'] = 1000; + t['questiondown'] = 500; + t['grave'] = 333; + t['acute'] = 333; + t['circumflex'] = 333; + t['tilde'] = 333; + t['macron'] = 333; + t['breve'] = 333; + t['dotaccent'] = 333; + t['dieresis'] = 333; + t['ring'] = 333; + t['cedilla'] = 333; + t['hungarumlaut'] = 333; + t['ogonek'] = 333; + t['caron'] = 333; + t['emdash'] = 889; + t['AE'] = 889; + t['ordfeminine'] = 276; + t['Lslash'] = 556; + t['Oslash'] = 722; + t['OE'] = 944; + t['ordmasculine'] = 310; + t['ae'] = 667; + t['dotlessi'] = 278; + t['lslash'] = 278; + t['oslash'] = 500; + t['oe'] = 667; + t['germandbls'] = 500; + t['Idieresis'] = 333; + t['eacute'] = 444; + t['abreve'] = 500; + t['uhungarumlaut'] = 500; + t['ecaron'] = 444; + t['Ydieresis'] = 556; + t['divide'] = 675; + t['Yacute'] = 556; + t['Acircumflex'] = 611; + t['aacute'] = 500; + t['Ucircumflex'] = 722; + t['yacute'] = 444; + t['scommaaccent'] = 389; + t['ecircumflex'] = 444; + t['Uring'] = 722; + t['Udieresis'] = 722; + t['aogonek'] = 500; + t['Uacute'] = 722; + t['uogonek'] = 500; + t['Edieresis'] = 611; + t['Dcroat'] = 722; + t['commaaccent'] = 250; + t['copyright'] = 760; + t['Emacron'] = 611; + t['ccaron'] = 444; + t['aring'] = 500; + t['Ncommaaccent'] = 667; + t['lacute'] = 278; + t['agrave'] = 500; + t['Tcommaaccent'] = 556; + t['Cacute'] = 667; + t['atilde'] = 500; + t['Edotaccent'] = 611; + t['scaron'] = 389; + t['scedilla'] = 389; + t['iacute'] = 278; + t['lozenge'] = 471; + t['Rcaron'] = 611; + t['Gcommaaccent'] = 722; + t['ucircumflex'] = 500; + t['acircumflex'] = 500; + t['Amacron'] = 611; + t['rcaron'] = 389; + t['ccedilla'] = 444; + t['Zdotaccent'] = 556; + t['Thorn'] = 611; + t['Omacron'] = 722; + t['Racute'] = 611; + t['Sacute'] = 500; + t['dcaron'] = 544; + t['Umacron'] = 722; + t['uring'] = 500; + t['threesuperior'] = 300; + t['Ograve'] = 722; + t['Agrave'] = 611; + t['Abreve'] = 611; + t['multiply'] = 675; + t['uacute'] = 500; + t['Tcaron'] = 556; + t['partialdiff'] = 476; + t['ydieresis'] = 444; + t['Nacute'] = 667; + t['icircumflex'] = 278; + t['Ecircumflex'] = 611; + t['adieresis'] = 500; + t['edieresis'] = 444; + t['cacute'] = 444; + t['nacute'] = 500; + t['umacron'] = 500; + t['Ncaron'] = 667; + t['Iacute'] = 333; + t['plusminus'] = 675; + t['brokenbar'] = 275; + t['registered'] = 760; + t['Gbreve'] = 722; + t['Idotaccent'] = 333; + t['summation'] = 600; + t['Egrave'] = 611; + t['racute'] = 389; + t['omacron'] = 500; + t['Zacute'] = 556; + t['Zcaron'] = 556; + t['greaterequal'] = 549; + t['Eth'] = 722; + t['Ccedilla'] = 667; + t['lcommaaccent'] = 278; + t['tcaron'] = 300; + t['eogonek'] = 444; + t['Uogonek'] = 722; + t['Aacute'] = 611; + t['Adieresis'] = 611; + t['egrave'] = 444; + t['zacute'] = 389; + t['iogonek'] = 278; + t['Oacute'] = 722; + t['oacute'] = 500; + t['amacron'] = 500; + t['sacute'] = 389; + t['idieresis'] = 278; + t['Ocircumflex'] = 722; + t['Ugrave'] = 722; + t['Delta'] = 612; + t['thorn'] = 500; + t['twosuperior'] = 300; + t['Odieresis'] = 722; + t['mu'] = 500; + t['igrave'] = 278; + t['ohungarumlaut'] = 500; + t['Eogonek'] = 611; + t['dcroat'] = 500; + t['threequarters'] = 750; + t['Scedilla'] = 500; + t['lcaron'] = 300; + t['Kcommaaccent'] = 667; + t['Lacute'] = 556; + t['trademark'] = 980; + t['edotaccent'] = 444; + t['Igrave'] = 333; + t['Imacron'] = 333; + t['Lcaron'] = 611; + t['onehalf'] = 750; + t['lessequal'] = 549; + t['ocircumflex'] = 500; + t['ntilde'] = 500; + t['Uhungarumlaut'] = 722; + t['Eacute'] = 611; + t['emacron'] = 444; + t['gbreve'] = 500; + t['onequarter'] = 750; + t['Scaron'] = 500; + t['Scommaaccent'] = 500; + t['Ohungarumlaut'] = 722; + t['degree'] = 400; + t['ograve'] = 500; + t['Ccaron'] = 667; + t['ugrave'] = 500; + t['radical'] = 453; + t['Dcaron'] = 722; + t['rcommaaccent'] = 389; + t['Ntilde'] = 667; + t['otilde'] = 500; + t['Rcommaaccent'] = 611; + t['Lcommaaccent'] = 556; + t['Atilde'] = 611; + t['Aogonek'] = 611; + t['Aring'] = 611; + t['Otilde'] = 722; + t['zdotaccent'] = 389; + t['Ecaron'] = 611; + t['Iogonek'] = 333; + t['kcommaaccent'] = 444; + t['minus'] = 675; + t['Icircumflex'] = 333; + t['ncaron'] = 500; + t['tcommaaccent'] = 278; + t['logicalnot'] = 675; + t['odieresis'] = 500; + t['udieresis'] = 500; + t['notequal'] = 549; + t['gcommaaccent'] = 500; + t['eth'] = 500; + t['zcaron'] = 389; + t['ncommaaccent'] = 500; + t['onesuperior'] = 300; + t['imacron'] = 278; + t['Euro'] = 500; + }); + t['ZapfDingbats'] = getLookupTableFactory(function (t) { + t['space'] = 278; + t['a1'] = 974; + t['a2'] = 961; + t['a202'] = 974; + t['a3'] = 980; + t['a4'] = 719; + t['a5'] = 789; + t['a119'] = 790; + t['a118'] = 791; + t['a117'] = 690; + t['a11'] = 960; + t['a12'] = 939; + t['a13'] = 549; + t['a14'] = 855; + t['a15'] = 911; + t['a16'] = 933; + t['a105'] = 911; + t['a17'] = 945; + t['a18'] = 974; + t['a19'] = 755; + t['a20'] = 846; + t['a21'] = 762; + t['a22'] = 761; + t['a23'] = 571; + t['a24'] = 677; + t['a25'] = 763; + t['a26'] = 760; + t['a27'] = 759; + t['a28'] = 754; + t['a6'] = 494; + t['a7'] = 552; + t['a8'] = 537; + t['a9'] = 577; + t['a10'] = 692; + t['a29'] = 786; + t['a30'] = 788; + t['a31'] = 788; + t['a32'] = 790; + t['a33'] = 793; + t['a34'] = 794; + t['a35'] = 816; + t['a36'] = 823; + t['a37'] = 789; + t['a38'] = 841; + t['a39'] = 823; + t['a40'] = 833; + t['a41'] = 816; + t['a42'] = 831; + t['a43'] = 923; + t['a44'] = 744; + t['a45'] = 723; + t['a46'] = 749; + t['a47'] = 790; + t['a48'] = 792; + t['a49'] = 695; + t['a50'] = 776; + t['a51'] = 768; + t['a52'] = 792; + t['a53'] = 759; + t['a54'] = 707; + t['a55'] = 708; + t['a56'] = 682; + t['a57'] = 701; + t['a58'] = 826; + t['a59'] = 815; + t['a60'] = 789; + t['a61'] = 789; + t['a62'] = 707; + t['a63'] = 687; + t['a64'] = 696; + t['a65'] = 689; + t['a66'] = 786; + t['a67'] = 787; + t['a68'] = 713; + t['a69'] = 791; + t['a70'] = 785; + t['a71'] = 791; + t['a72'] = 873; + t['a73'] = 761; + t['a74'] = 762; + t['a203'] = 762; + t['a75'] = 759; + t['a204'] = 759; + t['a76'] = 892; + t['a77'] = 892; + t['a78'] = 788; + t['a79'] = 784; + t['a81'] = 438; + t['a82'] = 138; + t['a83'] = 277; + t['a84'] = 415; + t['a97'] = 392; + t['a98'] = 392; + t['a99'] = 668; + t['a100'] = 668; + t['a89'] = 390; + t['a90'] = 390; + t['a93'] = 317; + t['a94'] = 317; + t['a91'] = 276; + t['a92'] = 276; + t['a205'] = 509; + t['a85'] = 509; + t['a206'] = 410; + t['a86'] = 410; + t['a87'] = 234; + t['a88'] = 234; + t['a95'] = 334; + t['a96'] = 334; + t['a101'] = 732; + t['a102'] = 544; + t['a103'] = 544; + t['a104'] = 910; + t['a106'] = 667; + t['a107'] = 760; + t['a108'] = 760; + t['a112'] = 776; + t['a111'] = 595; + t['a110'] = 694; + t['a109'] = 626; + t['a120'] = 788; + t['a121'] = 788; + t['a122'] = 788; + t['a123'] = 788; + t['a124'] = 788; + t['a125'] = 788; + t['a126'] = 788; + t['a127'] = 788; + t['a128'] = 788; + t['a129'] = 788; + t['a130'] = 788; + t['a131'] = 788; + t['a132'] = 788; + t['a133'] = 788; + t['a134'] = 788; + t['a135'] = 788; + t['a136'] = 788; + t['a137'] = 788; + t['a138'] = 788; + t['a139'] = 788; + t['a140'] = 788; + t['a141'] = 788; + t['a142'] = 788; + t['a143'] = 788; + t['a144'] = 788; + t['a145'] = 788; + t['a146'] = 788; + t['a147'] = 788; + t['a148'] = 788; + t['a149'] = 788; + t['a150'] = 788; + t['a151'] = 788; + t['a152'] = 788; + t['a153'] = 788; + t['a154'] = 788; + t['a155'] = 788; + t['a156'] = 788; + t['a157'] = 788; + t['a158'] = 788; + t['a159'] = 788; + t['a160'] = 894; + t['a161'] = 838; + t['a163'] = 1016; + t['a164'] = 458; + t['a196'] = 748; + t['a165'] = 924; + t['a192'] = 748; + t['a166'] = 918; + t['a167'] = 927; + t['a168'] = 928; + t['a169'] = 928; + t['a170'] = 834; + t['a171'] = 873; + t['a172'] = 828; + t['a173'] = 924; + t['a162'] = 924; + t['a174'] = 917; + t['a175'] = 930; + t['a176'] = 931; + t['a177'] = 463; + t['a178'] = 883; + t['a179'] = 836; + t['a193'] = 836; + t['a180'] = 867; + t['a199'] = 867; + t['a181'] = 696; + t['a200'] = 696; + t['a182'] = 874; + t['a201'] = 874; + t['a183'] = 760; + t['a184'] = 946; + t['a197'] = 771; + t['a185'] = 865; + t['a194'] = 771; + t['a198'] = 888; + t['a186'] = 967; + t['a195'] = 888; + t['a187'] = 831; + t['a188'] = 873; + t['a189'] = 927; + t['a190'] = 970; + t['a191'] = 918; + }); + }); + exports.getMetrics = getMetrics; + })); + (function (root, factory) { + factory(root.pdfjsCoreMurmurHash3 = {}, root.pdfjsSharedUtil); + }(this, function (exports, sharedUtil) { + var Uint32ArrayView = sharedUtil.Uint32ArrayView; + var MurmurHash3_64 = function MurmurHash3_64Closure(seed) { + var MASK_HIGH = 0xffff0000; + var MASK_LOW = 0xffff; + function MurmurHash3_64(seed) { + var SEED = 0xc3d2e1f0; + this.h1 = seed ? seed & 0xffffffff : SEED; + this.h2 = seed ? seed & 0xffffffff : SEED; + } + var alwaysUseUint32ArrayView = false; + try { + new Uint32Array(new Uint8Array(5).buffer, 0, 1); + } catch (e) { + alwaysUseUint32ArrayView = true; + } + MurmurHash3_64.prototype = { + update: function MurmurHash3_64_update(input) { + var useUint32ArrayView = alwaysUseUint32ArrayView; + var i; + if (typeof input === 'string') { + var data = new Uint8Array(input.length * 2); + var length = 0; + for (i = 0; i < input.length; i++) { + var code = input.charCodeAt(i); + if (code <= 0xff) { + data[length++] = code; + } else { + data[length++] = code >>> 8; + data[length++] = code & 0xff; + } + } + } else if (input instanceof Uint8Array) { + data = input; + length = data.length; + } else if (typeof input === 'object' && 'length' in input) { + data = input; + length = data.length; + useUint32ArrayView = true; + } else { + throw new Error('Wrong data format in MurmurHash3_64_update. ' + 'Input must be a string or array.'); + } + var blockCounts = length >> 2; + var tailLength = length - blockCounts * 4; + var dataUint32 = useUint32ArrayView ? new Uint32ArrayView(data, blockCounts) : new Uint32Array(data.buffer, 0, blockCounts); + var k1 = 0; + var k2 = 0; + var h1 = this.h1; + var h2 = this.h2; + var C1 = 0xcc9e2d51; + var C2 = 0x1b873593; + var C1_LOW = C1 & MASK_LOW; + var C2_LOW = C2 & MASK_LOW; + for (i = 0; i < blockCounts; i++) { + if (i & 1) { + k1 = dataUint32[i]; + k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; + k1 = k1 << 15 | k1 >>> 17; + k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; + h1 ^= k1; + h1 = h1 << 13 | h1 >>> 19; + h1 = h1 * 5 + 0xe6546b64; + } else { + k2 = dataUint32[i]; + k2 = k2 * C1 & MASK_HIGH | k2 * C1_LOW & MASK_LOW; + k2 = k2 << 15 | k2 >>> 17; + k2 = k2 * C2 & MASK_HIGH | k2 * C2_LOW & MASK_LOW; + h2 ^= k2; + h2 = h2 << 13 | h2 >>> 19; + h2 = h2 * 5 + 0xe6546b64; + } + } + k1 = 0; + switch (tailLength) { + case 3: + k1 ^= data[blockCounts * 4 + 2] << 16; + case 2: + k1 ^= data[blockCounts * 4 + 1] << 8; + case 1: + k1 ^= data[blockCounts * 4]; + k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; + k1 = k1 << 15 | k1 >>> 17; + k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; + if (blockCounts & 1) { + h1 ^= k1; + } else { + h2 ^= k1; + } + } + this.h1 = h1; + this.h2 = h2; + return this; + }, + hexdigest: function MurmurHash3_64_hexdigest() { + var h1 = this.h1; + var h2 = this.h2; + h1 ^= h2 >>> 1; + h1 = h1 * 0xed558ccd & MASK_HIGH | h1 * 0x8ccd & MASK_LOW; + h2 = h2 * 0xff51afd7 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xafd7ed55 & MASK_HIGH) >>> 16; + h1 ^= h2 >>> 1; + h1 = h1 * 0x1a85ec53 & MASK_HIGH | h1 * 0xec53 & MASK_LOW; + h2 = h2 * 0xc4ceb9fe & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xb9fe1a85 & MASK_HIGH) >>> 16; + h1 ^= h2 >>> 1; + for (var i = 0, arr = [ + h1, + h2 + ], str = ''; i < arr.length; i++) { + var hex = (arr[i] >>> 0).toString(16); + while (hex.length < 8) { + hex = '0' + hex; + } + str += hex; + } + return str; + } + }; + return MurmurHash3_64; + }(); + exports.MurmurHash3_64 = MurmurHash3_64; + })); + (function (root, factory) { + factory(root.pdfjsCorePrimitives = {}, root.pdfjsSharedUtil); + }(this, function (exports, sharedUtil) { + var isArray = sharedUtil.isArray; + var Name = function NameClosure() { + function Name(name) { + this.name = name; + } + Name.prototype = {}; + var nameCache = Object.create(null); + Name.get = function Name_get(name) { + var nameValue = nameCache[name]; + return nameValue ? nameValue : nameCache[name] = new Name(name); + }; + return Name; + }(); + var Cmd = function CmdClosure() { + function Cmd(cmd) { + this.cmd = cmd; + } + Cmd.prototype = {}; + var cmdCache = Object.create(null); + Cmd.get = function Cmd_get(cmd) { + var cmdValue = cmdCache[cmd]; + return cmdValue ? cmdValue : cmdCache[cmd] = new Cmd(cmd); + }; + return Cmd; + }(); + var Dict = function DictClosure() { + var nonSerializable = function nonSerializableClosure() { + return nonSerializable; + }; + function Dict(xref) { + this.map = Object.create(null); + this.xref = xref; + this.objId = null; + this.suppressEncryption = false; + this.__nonSerializable__ = nonSerializable; + } + Dict.prototype = { + assignXref: function Dict_assignXref(newXref) { + this.xref = newXref; + }, + get: function Dict_get(key1, key2, key3) { + var value; + var xref = this.xref, suppressEncryption = this.suppressEncryption; + if (typeof (value = this.map[key1]) !== 'undefined' || key1 in this.map || typeof key2 === 'undefined') { + return xref ? xref.fetchIfRef(value, suppressEncryption) : value; + } + if (typeof (value = this.map[key2]) !== 'undefined' || key2 in this.map || typeof key3 === 'undefined') { + return xref ? xref.fetchIfRef(value, suppressEncryption) : value; + } + value = this.map[key3] || null; + return xref ? xref.fetchIfRef(value, suppressEncryption) : value; + }, + getAsync: function Dict_getAsync(key1, key2, key3) { + var value; + var xref = this.xref, suppressEncryption = this.suppressEncryption; + if (typeof (value = this.map[key1]) !== 'undefined' || key1 in this.map || typeof key2 === 'undefined') { + if (xref) { + return xref.fetchIfRefAsync(value, suppressEncryption); + } + return Promise.resolve(value); + } + if (typeof (value = this.map[key2]) !== 'undefined' || key2 in this.map || typeof key3 === 'undefined') { + if (xref) { + return xref.fetchIfRefAsync(value, suppressEncryption); + } + return Promise.resolve(value); + } + value = this.map[key3] || null; + if (xref) { + return xref.fetchIfRefAsync(value, suppressEncryption); + } + return Promise.resolve(value); + }, + getArray: function Dict_getArray(key1, key2, key3) { + var value = this.get(key1, key2, key3); + var xref = this.xref, suppressEncryption = this.suppressEncryption; + if (!isArray(value) || !xref) { + return value; + } + value = value.slice(); + for (var i = 0, ii = value.length; i < ii; i++) { + if (!isRef(value[i])) { + continue; + } + value[i] = xref.fetch(value[i], suppressEncryption); + } + return value; + }, + getRaw: function Dict_getRaw(key) { + return this.map[key]; + }, + getKeys: function Dict_getKeys() { + return Object.keys(this.map); + }, + set: function Dict_set(key, value) { + this.map[key] = value; + }, + has: function Dict_has(key) { + return key in this.map; + }, + forEach: function Dict_forEach(callback) { + for (var key in this.map) { + callback(key, this.get(key)); + } + } + }; + Dict.empty = new Dict(null); + Dict.merge = function Dict_merge(xref, dictArray) { + var mergedDict = new Dict(xref); + for (var i = 0, ii = dictArray.length; i < ii; i++) { + var dict = dictArray[i]; + if (!isDict(dict)) { + continue; + } + for (var keyName in dict.map) { + if (mergedDict.map[keyName]) { + continue; + } + mergedDict.map[keyName] = dict.map[keyName]; + } + } + return mergedDict; + }; + return Dict; + }(); + var Ref = function RefClosure() { + function Ref(num, gen) { + this.num = num; + this.gen = gen; + } + Ref.prototype = { + toString: function Ref_toString() { + var str = this.num + 'R'; + if (this.gen !== 0) { + str += this.gen; + } + return str; + } + }; + return Ref; + }(); + var RefSet = function RefSetClosure() { + function RefSet() { + this.dict = Object.create(null); + } + RefSet.prototype = { + has: function RefSet_has(ref) { + return ref.toString() in this.dict; + }, + put: function RefSet_put(ref) { + this.dict[ref.toString()] = true; + }, + remove: function RefSet_remove(ref) { + delete this.dict[ref.toString()]; + } + }; + return RefSet; + }(); + var RefSetCache = function RefSetCacheClosure() { + function RefSetCache() { + this.dict = Object.create(null); + } + RefSetCache.prototype = { + get: function RefSetCache_get(ref) { + return this.dict[ref.toString()]; + }, + has: function RefSetCache_has(ref) { + return ref.toString() in this.dict; + }, + put: function RefSetCache_put(ref, obj) { + this.dict[ref.toString()] = obj; + }, + putAlias: function RefSetCache_putAlias(ref, aliasRef) { + this.dict[ref.toString()] = this.get(aliasRef); + }, + forEach: function RefSetCache_forEach(fn, thisArg) { + for (var i in this.dict) { + fn.call(thisArg, this.dict[i]); + } + }, + clear: function RefSetCache_clear() { + this.dict = Object.create(null); + } + }; + return RefSetCache; + }(); + function isName(v, name) { + return v instanceof Name && (name === undefined || v.name === name); + } + function isCmd(v, cmd) { + return v instanceof Cmd && (cmd === undefined || v.cmd === cmd); + } + function isDict(v, type) { + return v instanceof Dict && (type === undefined || isName(v.get('Type'), type)); + } + function isRef(v) { + return v instanceof Ref; + } + function isRefsEqual(v1, v2) { + return v1.num === v2.num && v1.gen === v2.gen; + } + function isStream(v) { + return typeof v === 'object' && v !== null && v.getBytes !== undefined; + } + exports.Cmd = Cmd; + exports.Dict = Dict; + exports.Name = Name; + exports.Ref = Ref; + exports.RefSet = RefSet; + exports.RefSetCache = RefSetCache; + exports.isCmd = isCmd; + exports.isDict = isDict; + exports.isName = isName; + exports.isRef = isRef; + exports.isRefsEqual = isRefsEqual; + exports.isStream = isStream; + })); + (function (root, factory) { + factory(root.pdfjsCoreStandardFonts = {}, root.pdfjsSharedUtil); + }(this, function (exports, sharedUtil) { + var getLookupTableFactory = sharedUtil.getLookupTableFactory; + var getStdFontMap = getLookupTableFactory(function (t) { + t['ArialNarrow'] = 'Helvetica'; + t['ArialNarrow-Bold'] = 'Helvetica-Bold'; + t['ArialNarrow-BoldItalic'] = 'Helvetica-BoldOblique'; + t['ArialNarrow-Italic'] = 'Helvetica-Oblique'; + t['ArialBlack'] = 'Helvetica'; + t['ArialBlack-Bold'] = 'Helvetica-Bold'; + t['ArialBlack-BoldItalic'] = 'Helvetica-BoldOblique'; + t['ArialBlack-Italic'] = 'Helvetica-Oblique'; + t['Arial-Black'] = 'Helvetica'; + t['Arial-Black-Bold'] = 'Helvetica-Bold'; + t['Arial-Black-BoldItalic'] = 'Helvetica-BoldOblique'; + t['Arial-Black-Italic'] = 'Helvetica-Oblique'; + t['Arial'] = 'Helvetica'; + t['Arial-Bold'] = 'Helvetica-Bold'; + t['Arial-BoldItalic'] = 'Helvetica-BoldOblique'; + t['Arial-Italic'] = 'Helvetica-Oblique'; + t['Arial-BoldItalicMT'] = 'Helvetica-BoldOblique'; + t['Arial-BoldMT'] = 'Helvetica-Bold'; + t['Arial-ItalicMT'] = 'Helvetica-Oblique'; + t['ArialMT'] = 'Helvetica'; + t['Courier-Bold'] = 'Courier-Bold'; + t['Courier-BoldItalic'] = 'Courier-BoldOblique'; + t['Courier-Italic'] = 'Courier-Oblique'; + t['CourierNew'] = 'Courier'; + t['CourierNew-Bold'] = 'Courier-Bold'; + t['CourierNew-BoldItalic'] = 'Courier-BoldOblique'; + t['CourierNew-Italic'] = 'Courier-Oblique'; + t['CourierNewPS-BoldItalicMT'] = 'Courier-BoldOblique'; + t['CourierNewPS-BoldMT'] = 'Courier-Bold'; + t['CourierNewPS-ItalicMT'] = 'Courier-Oblique'; + t['CourierNewPSMT'] = 'Courier'; + t['Helvetica'] = 'Helvetica'; + t['Helvetica-Bold'] = 'Helvetica-Bold'; + t['Helvetica-BoldItalic'] = 'Helvetica-BoldOblique'; + t['Helvetica-BoldOblique'] = 'Helvetica-BoldOblique'; + t['Helvetica-Italic'] = 'Helvetica-Oblique'; + t['Helvetica-Oblique'] = 'Helvetica-Oblique'; + t['Symbol-Bold'] = 'Symbol'; + t['Symbol-BoldItalic'] = 'Symbol'; + t['Symbol-Italic'] = 'Symbol'; + t['TimesNewRoman'] = 'Times-Roman'; + t['TimesNewRoman-Bold'] = 'Times-Bold'; + t['TimesNewRoman-BoldItalic'] = 'Times-BoldItalic'; + t['TimesNewRoman-Italic'] = 'Times-Italic'; + t['TimesNewRomanPS'] = 'Times-Roman'; + t['TimesNewRomanPS-Bold'] = 'Times-Bold'; + t['TimesNewRomanPS-BoldItalic'] = 'Times-BoldItalic'; + t['TimesNewRomanPS-BoldItalicMT'] = 'Times-BoldItalic'; + t['TimesNewRomanPS-BoldMT'] = 'Times-Bold'; + t['TimesNewRomanPS-Italic'] = 'Times-Italic'; + t['TimesNewRomanPS-ItalicMT'] = 'Times-Italic'; + t['TimesNewRomanPSMT'] = 'Times-Roman'; + t['TimesNewRomanPSMT-Bold'] = 'Times-Bold'; + t['TimesNewRomanPSMT-BoldItalic'] = 'Times-BoldItalic'; + t['TimesNewRomanPSMT-Italic'] = 'Times-Italic'; + }); + var getNonStdFontMap = getLookupTableFactory(function (t) { + t['CenturyGothic'] = 'Helvetica'; + t['CenturyGothic-Bold'] = 'Helvetica-Bold'; + t['CenturyGothic-BoldItalic'] = 'Helvetica-BoldOblique'; + t['CenturyGothic-Italic'] = 'Helvetica-Oblique'; + t['ComicSansMS'] = 'Comic Sans MS'; + t['ComicSansMS-Bold'] = 'Comic Sans MS-Bold'; + t['ComicSansMS-BoldItalic'] = 'Comic Sans MS-BoldItalic'; + t['ComicSansMS-Italic'] = 'Comic Sans MS-Italic'; + t['LucidaConsole'] = 'Courier'; + t['LucidaConsole-Bold'] = 'Courier-Bold'; + t['LucidaConsole-BoldItalic'] = 'Courier-BoldOblique'; + t['LucidaConsole-Italic'] = 'Courier-Oblique'; + t['MS-Gothic'] = 'MS Gothic'; + t['MS-Gothic-Bold'] = 'MS Gothic-Bold'; + t['MS-Gothic-BoldItalic'] = 'MS Gothic-BoldItalic'; + t['MS-Gothic-Italic'] = 'MS Gothic-Italic'; + t['MS-Mincho'] = 'MS Mincho'; + t['MS-Mincho-Bold'] = 'MS Mincho-Bold'; + t['MS-Mincho-BoldItalic'] = 'MS Mincho-BoldItalic'; + t['MS-Mincho-Italic'] = 'MS Mincho-Italic'; + t['MS-PGothic'] = 'MS PGothic'; + t['MS-PGothic-Bold'] = 'MS PGothic-Bold'; + t['MS-PGothic-BoldItalic'] = 'MS PGothic-BoldItalic'; + t['MS-PGothic-Italic'] = 'MS PGothic-Italic'; + t['MS-PMincho'] = 'MS PMincho'; + t['MS-PMincho-Bold'] = 'MS PMincho-Bold'; + t['MS-PMincho-BoldItalic'] = 'MS PMincho-BoldItalic'; + t['MS-PMincho-Italic'] = 'MS PMincho-Italic'; + t['NuptialScript'] = 'Times-Italic'; + t['Wingdings'] = 'ZapfDingbats'; + }); + var getSerifFonts = getLookupTableFactory(function (t) { + t['Adobe Jenson'] = true; + t['Adobe Text'] = true; + t['Albertus'] = true; + t['Aldus'] = true; + t['Alexandria'] = true; + t['Algerian'] = true; + t['American Typewriter'] = true; + t['Antiqua'] = true; + t['Apex'] = true; + t['Arno'] = true; + t['Aster'] = true; + t['Aurora'] = true; + t['Baskerville'] = true; + t['Bell'] = true; + t['Bembo'] = true; + t['Bembo Schoolbook'] = true; + t['Benguiat'] = true; + t['Berkeley Old Style'] = true; + t['Bernhard Modern'] = true; + t['Berthold City'] = true; + t['Bodoni'] = true; + t['Bauer Bodoni'] = true; + t['Book Antiqua'] = true; + t['Bookman'] = true; + t['Bordeaux Roman'] = true; + t['Californian FB'] = true; + t['Calisto'] = true; + t['Calvert'] = true; + t['Capitals'] = true; + t['Cambria'] = true; + t['Cartier'] = true; + t['Caslon'] = true; + t['Catull'] = true; + t['Centaur'] = true; + t['Century Old Style'] = true; + t['Century Schoolbook'] = true; + t['Chaparral'] = true; + t['Charis SIL'] = true; + t['Cheltenham'] = true; + t['Cholla Slab'] = true; + t['Clarendon'] = true; + t['Clearface'] = true; + t['Cochin'] = true; + t['Colonna'] = true; + t['Computer Modern'] = true; + t['Concrete Roman'] = true; + t['Constantia'] = true; + t['Cooper Black'] = true; + t['Corona'] = true; + t['Ecotype'] = true; + t['Egyptienne'] = true; + t['Elephant'] = true; + t['Excelsior'] = true; + t['Fairfield'] = true; + t['FF Scala'] = true; + t['Folkard'] = true; + t['Footlight'] = true; + t['FreeSerif'] = true; + t['Friz Quadrata'] = true; + t['Garamond'] = true; + t['Gentium'] = true; + t['Georgia'] = true; + t['Gloucester'] = true; + t['Goudy Old Style'] = true; + t['Goudy Schoolbook'] = true; + t['Goudy Pro Font'] = true; + t['Granjon'] = true; + t['Guardian Egyptian'] = true; + t['Heather'] = true; + t['Hercules'] = true; + t['High Tower Text'] = true; + t['Hiroshige'] = true; + t['Hoefler Text'] = true; + t['Humana Serif'] = true; + t['Imprint'] = true; + t['Ionic No. 5'] = true; + t['Janson'] = true; + t['Joanna'] = true; + t['Korinna'] = true; + t['Lexicon'] = true; + t['Liberation Serif'] = true; + t['Linux Libertine'] = true; + t['Literaturnaya'] = true; + t['Lucida'] = true; + t['Lucida Bright'] = true; + t['Melior'] = true; + t['Memphis'] = true; + t['Miller'] = true; + t['Minion'] = true; + t['Modern'] = true; + t['Mona Lisa'] = true; + t['Mrs Eaves'] = true; + t['MS Serif'] = true; + t['Museo Slab'] = true; + t['New York'] = true; + t['Nimbus Roman'] = true; + t['NPS Rawlinson Roadway'] = true; + t['NuptialScript'] = true; + t['Palatino'] = true; + t['Perpetua'] = true; + t['Plantin'] = true; + t['Plantin Schoolbook'] = true; + t['Playbill'] = true; + t['Poor Richard'] = true; + t['Rawlinson Roadway'] = true; + t['Renault'] = true; + t['Requiem'] = true; + t['Rockwell'] = true; + t['Roman'] = true; + t['Rotis Serif'] = true; + t['Sabon'] = true; + t['Scala'] = true; + t['Seagull'] = true; + t['Sistina'] = true; + t['Souvenir'] = true; + t['STIX'] = true; + t['Stone Informal'] = true; + t['Stone Serif'] = true; + t['Sylfaen'] = true; + t['Times'] = true; + t['Trajan'] = true; + t['Trinité'] = true; + t['Trump Mediaeval'] = true; + t['Utopia'] = true; + t['Vale Type'] = true; + t['Bitstream Vera'] = true; + t['Vera Serif'] = true; + t['Versailles'] = true; + t['Wanted'] = true; + t['Weiss'] = true; + t['Wide Latin'] = true; + t['Windsor'] = true; + t['XITS'] = true; + }); + var getSymbolsFonts = getLookupTableFactory(function (t) { + t['Dingbats'] = true; + t['Symbol'] = true; + t['ZapfDingbats'] = true; + }); + var getGlyphMapForStandardFonts = getLookupTableFactory(function (t) { + t[2] = 10; + t[3] = 32; + t[4] = 33; + t[5] = 34; + t[6] = 35; + t[7] = 36; + t[8] = 37; + t[9] = 38; + t[10] = 39; + t[11] = 40; + t[12] = 41; + t[13] = 42; + t[14] = 43; + t[15] = 44; + t[16] = 45; + t[17] = 46; + t[18] = 47; + t[19] = 48; + t[20] = 49; + t[21] = 50; + t[22] = 51; + t[23] = 52; + t[24] = 53; + t[25] = 54; + t[26] = 55; + t[27] = 56; + t[28] = 57; + t[29] = 58; + t[30] = 894; + t[31] = 60; + t[32] = 61; + t[33] = 62; + t[34] = 63; + t[35] = 64; + t[36] = 65; + t[37] = 66; + t[38] = 67; + t[39] = 68; + t[40] = 69; + t[41] = 70; + t[42] = 71; + t[43] = 72; + t[44] = 73; + t[45] = 74; + t[46] = 75; + t[47] = 76; + t[48] = 77; + t[49] = 78; + t[50] = 79; + t[51] = 80; + t[52] = 81; + t[53] = 82; + t[54] = 83; + t[55] = 84; + t[56] = 85; + t[57] = 86; + t[58] = 87; + t[59] = 88; + t[60] = 89; + t[61] = 90; + t[62] = 91; + t[63] = 92; + t[64] = 93; + t[65] = 94; + t[66] = 95; + t[67] = 96; + t[68] = 97; + t[69] = 98; + t[70] = 99; + t[71] = 100; + t[72] = 101; + t[73] = 102; + t[74] = 103; + t[75] = 104; + t[76] = 105; + t[77] = 106; + t[78] = 107; + t[79] = 108; + t[80] = 109; + t[81] = 110; + t[82] = 111; + t[83] = 112; + t[84] = 113; + t[85] = 114; + t[86] = 115; + t[87] = 116; + t[88] = 117; + t[89] = 118; + t[90] = 119; + t[91] = 120; + t[92] = 121; + t[93] = 122; + t[94] = 123; + t[95] = 124; + t[96] = 125; + t[97] = 126; + t[98] = 196; + t[99] = 197; + t[100] = 199; + t[101] = 201; + t[102] = 209; + t[103] = 214; + t[104] = 220; + t[105] = 225; + t[106] = 224; + t[107] = 226; + t[108] = 228; + t[109] = 227; + t[110] = 229; + t[111] = 231; + t[112] = 233; + t[113] = 232; + t[114] = 234; + t[115] = 235; + t[116] = 237; + t[117] = 236; + t[118] = 238; + t[119] = 239; + t[120] = 241; + t[121] = 243; + t[122] = 242; + t[123] = 244; + t[124] = 246; + t[125] = 245; + t[126] = 250; + t[127] = 249; + t[128] = 251; + t[129] = 252; + t[130] = 8224; + t[131] = 176; + t[132] = 162; + t[133] = 163; + t[134] = 167; + t[135] = 8226; + t[136] = 182; + t[137] = 223; + t[138] = 174; + t[139] = 169; + t[140] = 8482; + t[141] = 180; + t[142] = 168; + t[143] = 8800; + t[144] = 198; + t[145] = 216; + t[146] = 8734; + t[147] = 177; + t[148] = 8804; + t[149] = 8805; + t[150] = 165; + t[151] = 181; + t[152] = 8706; + t[153] = 8721; + t[154] = 8719; + t[156] = 8747; + t[157] = 170; + t[158] = 186; + t[159] = 8486; + t[160] = 230; + t[161] = 248; + t[162] = 191; + t[163] = 161; + t[164] = 172; + t[165] = 8730; + t[166] = 402; + t[167] = 8776; + t[168] = 8710; + t[169] = 171; + t[170] = 187; + t[171] = 8230; + t[210] = 218; + t[223] = 711; + t[224] = 321; + t[225] = 322; + t[227] = 353; + t[229] = 382; + t[234] = 253; + t[252] = 263; + t[253] = 268; + t[254] = 269; + t[258] = 258; + t[260] = 260; + t[261] = 261; + t[265] = 280; + t[266] = 281; + t[268] = 283; + t[269] = 313; + t[275] = 323; + t[276] = 324; + t[278] = 328; + t[284] = 345; + t[285] = 346; + t[286] = 347; + t[292] = 367; + t[295] = 377; + t[296] = 378; + t[298] = 380; + t[305] = 963; + t[306] = 964; + t[307] = 966; + t[308] = 8215; + t[309] = 8252; + t[310] = 8319; + t[311] = 8359; + t[312] = 8592; + t[313] = 8593; + t[337] = 9552; + t[493] = 1039; + t[494] = 1040; + t[705] = 1524; + t[706] = 8362; + t[710] = 64288; + t[711] = 64298; + t[759] = 1617; + t[761] = 1776; + t[763] = 1778; + t[775] = 1652; + t[777] = 1764; + t[778] = 1780; + t[779] = 1781; + t[780] = 1782; + t[782] = 771; + t[783] = 64726; + t[786] = 8363; + t[788] = 8532; + t[790] = 768; + t[791] = 769; + t[792] = 768; + t[795] = 803; + t[797] = 64336; + t[798] = 64337; + t[799] = 64342; + t[800] = 64343; + t[801] = 64344; + t[802] = 64345; + t[803] = 64362; + t[804] = 64363; + t[805] = 64364; + t[2424] = 7821; + t[2425] = 7822; + t[2426] = 7823; + t[2427] = 7824; + t[2428] = 7825; + t[2429] = 7826; + t[2430] = 7827; + t[2433] = 7682; + t[2678] = 8045; + t[2679] = 8046; + t[2830] = 1552; + t[2838] = 686; + t[2840] = 751; + t[2842] = 753; + t[2843] = 754; + t[2844] = 755; + t[2846] = 757; + t[2856] = 767; + t[2857] = 848; + t[2858] = 849; + t[2862] = 853; + t[2863] = 854; + t[2864] = 855; + t[2865] = 861; + t[2866] = 862; + t[2906] = 7460; + t[2908] = 7462; + t[2909] = 7463; + t[2910] = 7464; + t[2912] = 7466; + t[2913] = 7467; + t[2914] = 7468; + t[2916] = 7470; + t[2917] = 7471; + t[2918] = 7472; + t[2920] = 7474; + t[2921] = 7475; + t[2922] = 7476; + t[2924] = 7478; + t[2925] = 7479; + t[2926] = 7480; + t[2928] = 7482; + t[2929] = 7483; + t[2930] = 7484; + t[2932] = 7486; + t[2933] = 7487; + t[2934] = 7488; + t[2936] = 7490; + t[2937] = 7491; + t[2938] = 7492; + t[2940] = 7494; + t[2941] = 7495; + t[2942] = 7496; + t[2944] = 7498; + t[2946] = 7500; + t[2948] = 7502; + t[2950] = 7504; + t[2951] = 7505; + t[2952] = 7506; + t[2954] = 7508; + t[2955] = 7509; + t[2956] = 7510; + t[2958] = 7512; + t[2959] = 7513; + t[2960] = 7514; + t[2962] = 7516; + t[2963] = 7517; + t[2964] = 7518; + t[2966] = 7520; + t[2967] = 7521; + t[2968] = 7522; + t[2970] = 7524; + t[2971] = 7525; + t[2972] = 7526; + t[2974] = 7528; + t[2975] = 7529; + t[2976] = 7530; + t[2978] = 1537; + t[2979] = 1538; + t[2980] = 1539; + t[2982] = 1549; + t[2983] = 1551; + t[2984] = 1552; + t[2986] = 1554; + t[2987] = 1555; + t[2988] = 1556; + t[2990] = 1623; + t[2991] = 1624; + t[2995] = 1775; + t[2999] = 1791; + t[3002] = 64290; + t[3003] = 64291; + t[3004] = 64292; + t[3006] = 64294; + t[3007] = 64295; + t[3008] = 64296; + t[3011] = 1900; + t[3014] = 8223; + t[3015] = 8244; + t[3017] = 7532; + t[3018] = 7533; + t[3019] = 7534; + t[3075] = 7590; + t[3076] = 7591; + t[3079] = 7594; + t[3080] = 7595; + t[3083] = 7598; + t[3084] = 7599; + t[3087] = 7602; + t[3088] = 7603; + t[3091] = 7606; + t[3092] = 7607; + t[3095] = 7610; + t[3096] = 7611; + t[3099] = 7614; + t[3100] = 7615; + t[3103] = 7618; + t[3104] = 7619; + t[3107] = 8337; + t[3108] = 8338; + t[3116] = 1884; + t[3119] = 1885; + t[3120] = 1885; + t[3123] = 1886; + t[3124] = 1886; + t[3127] = 1887; + t[3128] = 1887; + t[3131] = 1888; + t[3132] = 1888; + t[3135] = 1889; + t[3136] = 1889; + t[3139] = 1890; + t[3140] = 1890; + t[3143] = 1891; + t[3144] = 1891; + t[3147] = 1892; + t[3148] = 1892; + t[3153] = 580; + t[3154] = 581; + t[3157] = 584; + t[3158] = 585; + t[3161] = 588; + t[3162] = 589; + t[3165] = 891; + t[3166] = 892; + t[3169] = 1274; + t[3170] = 1275; + t[3173] = 1278; + t[3174] = 1279; + t[3181] = 7622; + t[3182] = 7623; + t[3282] = 11799; + t[3316] = 578; + t[3379] = 42785; + t[3393] = 1159; + t[3416] = 8377; + }); + var getSupplementalGlyphMapForArialBlack = getLookupTableFactory(function (t) { + t[227] = 322; + t[264] = 261; + t[291] = 346; + }); + exports.getStdFontMap = getStdFontMap; + exports.getNonStdFontMap = getNonStdFontMap; + exports.getSerifFonts = getSerifFonts; + exports.getSymbolsFonts = getSymbolsFonts; + exports.getGlyphMapForStandardFonts = getGlyphMapForStandardFonts; + exports.getSupplementalGlyphMapForArialBlack = getSupplementalGlyphMapForArialBlack; + })); + (function (root, factory) { + factory(root.pdfjsCoreUnicode = {}, root.pdfjsSharedUtil); + }(this, function (exports, sharedUtil) { + var getLookupTableFactory = sharedUtil.getLookupTableFactory; + var getSpecialPUASymbols = getLookupTableFactory(function (t) { + t[63721] = 0x00A9; + t[63193] = 0x00A9; + t[63720] = 0x00AE; + t[63194] = 0x00AE; + t[63722] = 0x2122; + t[63195] = 0x2122; + t[63729] = 0x23A7; + t[63730] = 0x23A8; + t[63731] = 0x23A9; + t[63740] = 0x23AB; + t[63741] = 0x23AC; + t[63742] = 0x23AD; + t[63726] = 0x23A1; + t[63727] = 0x23A2; + t[63728] = 0x23A3; + t[63737] = 0x23A4; + t[63738] = 0x23A5; + t[63739] = 0x23A6; + t[63723] = 0x239B; + t[63724] = 0x239C; + t[63725] = 0x239D; + t[63734] = 0x239E; + t[63735] = 0x239F; + t[63736] = 0x23A0; + }); + function mapSpecialUnicodeValues(code) { + if (code >= 0xFFF0 && code <= 0xFFFF) { + return 0; + } else if (code >= 0xF600 && code <= 0xF8FF) { + return getSpecialPUASymbols()[code] || code; + } + return code; + } + function getUnicodeForGlyph(name, glyphsUnicodeMap) { + var unicode = glyphsUnicodeMap[name]; + if (unicode !== undefined) { + return unicode; + } + if (!name) { + return -1; + } + if (name[0] === 'u') { + var nameLen = name.length, hexStr; + if (nameLen === 7 && name[1] === 'n' && name[2] === 'i') { + hexStr = name.substr(3); + } else if (nameLen >= 5 && nameLen <= 7) { + hexStr = name.substr(1); + } else { + return -1; + } + if (hexStr === hexStr.toUpperCase()) { + unicode = parseInt(hexStr, 16); + if (unicode >= 0) { + return unicode; + } + } + } + return -1; + } + var UnicodeRanges = [ + { + 'begin': 0x0000, + 'end': 0x007F + }, + { + 'begin': 0x0080, + 'end': 0x00FF + }, + { + 'begin': 0x0100, + 'end': 0x017F + }, + { + 'begin': 0x0180, + 'end': 0x024F + }, + { + 'begin': 0x0250, + 'end': 0x02AF + }, + { + 'begin': 0x02B0, + 'end': 0x02FF + }, + { + 'begin': 0x0300, + 'end': 0x036F + }, + { + 'begin': 0x0370, + 'end': 0x03FF + }, + { + 'begin': 0x2C80, + 'end': 0x2CFF + }, + { + 'begin': 0x0400, + 'end': 0x04FF + }, + { + 'begin': 0x0530, + 'end': 0x058F + }, + { + 'begin': 0x0590, + 'end': 0x05FF + }, + { + 'begin': 0xA500, + 'end': 0xA63F + }, + { + 'begin': 0x0600, + 'end': 0x06FF + }, + { + 'begin': 0x07C0, + 'end': 0x07FF + }, + { + 'begin': 0x0900, + 'end': 0x097F + }, + { + 'begin': 0x0980, + 'end': 0x09FF + }, + { + 'begin': 0x0A00, + 'end': 0x0A7F + }, + { + 'begin': 0x0A80, + 'end': 0x0AFF + }, + { + 'begin': 0x0B00, + 'end': 0x0B7F + }, + { + 'begin': 0x0B80, + 'end': 0x0BFF + }, + { + 'begin': 0x0C00, + 'end': 0x0C7F + }, + { + 'begin': 0x0C80, + 'end': 0x0CFF + }, + { + 'begin': 0x0D00, + 'end': 0x0D7F + }, + { + 'begin': 0x0E00, + 'end': 0x0E7F + }, + { + 'begin': 0x0E80, + 'end': 0x0EFF + }, + { + 'begin': 0x10A0, + 'end': 0x10FF + }, + { + 'begin': 0x1B00, + 'end': 0x1B7F + }, + { + 'begin': 0x1100, + 'end': 0x11FF + }, + { + 'begin': 0x1E00, + 'end': 0x1EFF + }, + { + 'begin': 0x1F00, + 'end': 0x1FFF + }, + { + 'begin': 0x2000, + 'end': 0x206F + }, + { + 'begin': 0x2070, + 'end': 0x209F + }, + { + 'begin': 0x20A0, + 'end': 0x20CF + }, + { + 'begin': 0x20D0, + 'end': 0x20FF + }, + { + 'begin': 0x2100, + 'end': 0x214F + }, + { + 'begin': 0x2150, + 'end': 0x218F + }, + { + 'begin': 0x2190, + 'end': 0x21FF + }, + { + 'begin': 0x2200, + 'end': 0x22FF + }, + { + 'begin': 0x2300, + 'end': 0x23FF + }, + { + 'begin': 0x2400, + 'end': 0x243F + }, + { + 'begin': 0x2440, + 'end': 0x245F + }, + { + 'begin': 0x2460, + 'end': 0x24FF + }, + { + 'begin': 0x2500, + 'end': 0x257F + }, + { + 'begin': 0x2580, + 'end': 0x259F + }, + { + 'begin': 0x25A0, + 'end': 0x25FF + }, + { + 'begin': 0x2600, + 'end': 0x26FF + }, + { + 'begin': 0x2700, + 'end': 0x27BF + }, + { + 'begin': 0x3000, + 'end': 0x303F + }, + { + 'begin': 0x3040, + 'end': 0x309F + }, + { + 'begin': 0x30A0, + 'end': 0x30FF + }, + { + 'begin': 0x3100, + 'end': 0x312F + }, + { + 'begin': 0x3130, + 'end': 0x318F + }, + { + 'begin': 0xA840, + 'end': 0xA87F + }, + { + 'begin': 0x3200, + 'end': 0x32FF + }, + { + 'begin': 0x3300, + 'end': 0x33FF + }, + { + 'begin': 0xAC00, + 'end': 0xD7AF + }, + { + 'begin': 0xD800, + 'end': 0xDFFF + }, + { + 'begin': 0x10900, + 'end': 0x1091F + }, + { + 'begin': 0x4E00, + 'end': 0x9FFF + }, + { + 'begin': 0xE000, + 'end': 0xF8FF + }, + { + 'begin': 0x31C0, + 'end': 0x31EF + }, + { + 'begin': 0xFB00, + 'end': 0xFB4F + }, + { + 'begin': 0xFB50, + 'end': 0xFDFF + }, + { + 'begin': 0xFE20, + 'end': 0xFE2F + }, + { + 'begin': 0xFE10, + 'end': 0xFE1F + }, + { + 'begin': 0xFE50, + 'end': 0xFE6F + }, + { + 'begin': 0xFE70, + 'end': 0xFEFF + }, + { + 'begin': 0xFF00, + 'end': 0xFFEF + }, + { + 'begin': 0xFFF0, + 'end': 0xFFFF + }, + { + 'begin': 0x0F00, + 'end': 0x0FFF + }, + { + 'begin': 0x0700, + 'end': 0x074F + }, + { + 'begin': 0x0780, + 'end': 0x07BF + }, + { + 'begin': 0x0D80, + 'end': 0x0DFF + }, + { + 'begin': 0x1000, + 'end': 0x109F + }, + { + 'begin': 0x1200, + 'end': 0x137F + }, + { + 'begin': 0x13A0, + 'end': 0x13FF + }, + { + 'begin': 0x1400, + 'end': 0x167F + }, + { + 'begin': 0x1680, + 'end': 0x169F + }, + { + 'begin': 0x16A0, + 'end': 0x16FF + }, + { + 'begin': 0x1780, + 'end': 0x17FF + }, + { + 'begin': 0x1800, + 'end': 0x18AF + }, + { + 'begin': 0x2800, + 'end': 0x28FF + }, + { + 'begin': 0xA000, + 'end': 0xA48F + }, + { + 'begin': 0x1700, + 'end': 0x171F + }, + { + 'begin': 0x10300, + 'end': 0x1032F + }, + { + 'begin': 0x10330, + 'end': 0x1034F + }, + { + 'begin': 0x10400, + 'end': 0x1044F + }, + { + 'begin': 0x1D000, + 'end': 0x1D0FF + }, + { + 'begin': 0x1D400, + 'end': 0x1D7FF + }, + { + 'begin': 0xFF000, + 'end': 0xFFFFD + }, + { + 'begin': 0xFE00, + 'end': 0xFE0F + }, + { + 'begin': 0xE0000, + 'end': 0xE007F + }, + { + 'begin': 0x1900, + 'end': 0x194F + }, + { + 'begin': 0x1950, + 'end': 0x197F + }, + { + 'begin': 0x1980, + 'end': 0x19DF + }, + { + 'begin': 0x1A00, + 'end': 0x1A1F + }, + { + 'begin': 0x2C00, + 'end': 0x2C5F + }, + { + 'begin': 0x2D30, + 'end': 0x2D7F + }, + { + 'begin': 0x4DC0, + 'end': 0x4DFF + }, + { + 'begin': 0xA800, + 'end': 0xA82F + }, + { + 'begin': 0x10000, + 'end': 0x1007F + }, + { + 'begin': 0x10140, + 'end': 0x1018F + }, + { + 'begin': 0x10380, + 'end': 0x1039F + }, + { + 'begin': 0x103A0, + 'end': 0x103DF + }, + { + 'begin': 0x10450, + 'end': 0x1047F + }, + { + 'begin': 0x10480, + 'end': 0x104AF + }, + { + 'begin': 0x10800, + 'end': 0x1083F + }, + { + 'begin': 0x10A00, + 'end': 0x10A5F + }, + { + 'begin': 0x1D300, + 'end': 0x1D35F + }, + { + 'begin': 0x12000, + 'end': 0x123FF + }, + { + 'begin': 0x1D360, + 'end': 0x1D37F + }, + { + 'begin': 0x1B80, + 'end': 0x1BBF + }, + { + 'begin': 0x1C00, + 'end': 0x1C4F + }, + { + 'begin': 0x1C50, + 'end': 0x1C7F + }, + { + 'begin': 0xA880, + 'end': 0xA8DF + }, + { + 'begin': 0xA900, + 'end': 0xA92F + }, + { + 'begin': 0xA930, + 'end': 0xA95F + }, + { + 'begin': 0xAA00, + 'end': 0xAA5F + }, + { + 'begin': 0x10190, + 'end': 0x101CF + }, + { + 'begin': 0x101D0, + 'end': 0x101FF + }, + { + 'begin': 0x102A0, + 'end': 0x102DF + }, + { + 'begin': 0x1F030, + 'end': 0x1F09F + } + ]; + function getUnicodeRangeFor(value) { + for (var i = 0, ii = UnicodeRanges.length; i < ii; i++) { + var range = UnicodeRanges[i]; + if (value >= range.begin && value < range.end) { + return i; + } + } + return -1; + } + function isRTLRangeFor(value) { + var range = UnicodeRanges[13]; + if (value >= range.begin && value < range.end) { + return true; + } + range = UnicodeRanges[11]; + if (value >= range.begin && value < range.end) { + return true; + } + return false; + } + var getNormalizedUnicodes = getLookupTableFactory(function (t) { + t['\u00A8'] = '\u0020\u0308'; + t['\u00AF'] = '\u0020\u0304'; + t['\u00B4'] = '\u0020\u0301'; + t['\u00B5'] = '\u03BC'; + t['\u00B8'] = '\u0020\u0327'; + t['\u0132'] = '\u0049\u004A'; + t['\u0133'] = '\u0069\u006A'; + t['\u013F'] = '\u004C\u00B7'; + t['\u0140'] = '\u006C\u00B7'; + t['\u0149'] = '\u02BC\u006E'; + t['\u017F'] = '\u0073'; + t['\u01C4'] = '\u0044\u017D'; + t['\u01C5'] = '\u0044\u017E'; + t['\u01C6'] = '\u0064\u017E'; + t['\u01C7'] = '\u004C\u004A'; + t['\u01C8'] = '\u004C\u006A'; + t['\u01C9'] = '\u006C\u006A'; + t['\u01CA'] = '\u004E\u004A'; + t['\u01CB'] = '\u004E\u006A'; + t['\u01CC'] = '\u006E\u006A'; + t['\u01F1'] = '\u0044\u005A'; + t['\u01F2'] = '\u0044\u007A'; + t['\u01F3'] = '\u0064\u007A'; + t['\u02D8'] = '\u0020\u0306'; + t['\u02D9'] = '\u0020\u0307'; + t['\u02DA'] = '\u0020\u030A'; + t['\u02DB'] = '\u0020\u0328'; + t['\u02DC'] = '\u0020\u0303'; + t['\u02DD'] = '\u0020\u030B'; + t['\u037A'] = '\u0020\u0345'; + t['\u0384'] = '\u0020\u0301'; + t['\u03D0'] = '\u03B2'; + t['\u03D1'] = '\u03B8'; + t['\u03D2'] = '\u03A5'; + t['\u03D5'] = '\u03C6'; + t['\u03D6'] = '\u03C0'; + t['\u03F0'] = '\u03BA'; + t['\u03F1'] = '\u03C1'; + t['\u03F2'] = '\u03C2'; + t['\u03F4'] = '\u0398'; + t['\u03F5'] = '\u03B5'; + t['\u03F9'] = '\u03A3'; + t['\u0587'] = '\u0565\u0582'; + t['\u0675'] = '\u0627\u0674'; + t['\u0676'] = '\u0648\u0674'; + t['\u0677'] = '\u06C7\u0674'; + t['\u0678'] = '\u064A\u0674'; + t['\u0E33'] = '\u0E4D\u0E32'; + t['\u0EB3'] = '\u0ECD\u0EB2'; + t['\u0EDC'] = '\u0EAB\u0E99'; + t['\u0EDD'] = '\u0EAB\u0EA1'; + t['\u0F77'] = '\u0FB2\u0F81'; + t['\u0F79'] = '\u0FB3\u0F81'; + t['\u1E9A'] = '\u0061\u02BE'; + t['\u1FBD'] = '\u0020\u0313'; + t['\u1FBF'] = '\u0020\u0313'; + t['\u1FC0'] = '\u0020\u0342'; + t['\u1FFE'] = '\u0020\u0314'; + t['\u2002'] = '\u0020'; + t['\u2003'] = '\u0020'; + t['\u2004'] = '\u0020'; + t['\u2005'] = '\u0020'; + t['\u2006'] = '\u0020'; + t['\u2008'] = '\u0020'; + t['\u2009'] = '\u0020'; + t['\u200A'] = '\u0020'; + t['\u2017'] = '\u0020\u0333'; + t['\u2024'] = '\u002E'; + t['\u2025'] = '\u002E\u002E'; + t['\u2026'] = '\u002E\u002E\u002E'; + t['\u2033'] = '\u2032\u2032'; + t['\u2034'] = '\u2032\u2032\u2032'; + t['\u2036'] = '\u2035\u2035'; + t['\u2037'] = '\u2035\u2035\u2035'; + t['\u203C'] = '\u0021\u0021'; + t['\u203E'] = '\u0020\u0305'; + t['\u2047'] = '\u003F\u003F'; + t['\u2048'] = '\u003F\u0021'; + t['\u2049'] = '\u0021\u003F'; + t['\u2057'] = '\u2032\u2032\u2032\u2032'; + t['\u205F'] = '\u0020'; + t['\u20A8'] = '\u0052\u0073'; + t['\u2100'] = '\u0061\u002F\u0063'; + t['\u2101'] = '\u0061\u002F\u0073'; + t['\u2103'] = '\u00B0\u0043'; + t['\u2105'] = '\u0063\u002F\u006F'; + t['\u2106'] = '\u0063\u002F\u0075'; + t['\u2107'] = '\u0190'; + t['\u2109'] = '\u00B0\u0046'; + t['\u2116'] = '\u004E\u006F'; + t['\u2121'] = '\u0054\u0045\u004C'; + t['\u2135'] = '\u05D0'; + t['\u2136'] = '\u05D1'; + t['\u2137'] = '\u05D2'; + t['\u2138'] = '\u05D3'; + t['\u213B'] = '\u0046\u0041\u0058'; + t['\u2160'] = '\u0049'; + t['\u2161'] = '\u0049\u0049'; + t['\u2162'] = '\u0049\u0049\u0049'; + t['\u2163'] = '\u0049\u0056'; + t['\u2164'] = '\u0056'; + t['\u2165'] = '\u0056\u0049'; + t['\u2166'] = '\u0056\u0049\u0049'; + t['\u2167'] = '\u0056\u0049\u0049\u0049'; + t['\u2168'] = '\u0049\u0058'; + t['\u2169'] = '\u0058'; + t['\u216A'] = '\u0058\u0049'; + t['\u216B'] = '\u0058\u0049\u0049'; + t['\u216C'] = '\u004C'; + t['\u216D'] = '\u0043'; + t['\u216E'] = '\u0044'; + t['\u216F'] = '\u004D'; + t['\u2170'] = '\u0069'; + t['\u2171'] = '\u0069\u0069'; + t['\u2172'] = '\u0069\u0069\u0069'; + t['\u2173'] = '\u0069\u0076'; + t['\u2174'] = '\u0076'; + t['\u2175'] = '\u0076\u0069'; + t['\u2176'] = '\u0076\u0069\u0069'; + t['\u2177'] = '\u0076\u0069\u0069\u0069'; + t['\u2178'] = '\u0069\u0078'; + t['\u2179'] = '\u0078'; + t['\u217A'] = '\u0078\u0069'; + t['\u217B'] = '\u0078\u0069\u0069'; + t['\u217C'] = '\u006C'; + t['\u217D'] = '\u0063'; + t['\u217E'] = '\u0064'; + t['\u217F'] = '\u006D'; + t['\u222C'] = '\u222B\u222B'; + t['\u222D'] = '\u222B\u222B\u222B'; + t['\u222F'] = '\u222E\u222E'; + t['\u2230'] = '\u222E\u222E\u222E'; + t['\u2474'] = '\u0028\u0031\u0029'; + t['\u2475'] = '\u0028\u0032\u0029'; + t['\u2476'] = '\u0028\u0033\u0029'; + t['\u2477'] = '\u0028\u0034\u0029'; + t['\u2478'] = '\u0028\u0035\u0029'; + t['\u2479'] = '\u0028\u0036\u0029'; + t['\u247A'] = '\u0028\u0037\u0029'; + t['\u247B'] = '\u0028\u0038\u0029'; + t['\u247C'] = '\u0028\u0039\u0029'; + t['\u247D'] = '\u0028\u0031\u0030\u0029'; + t['\u247E'] = '\u0028\u0031\u0031\u0029'; + t['\u247F'] = '\u0028\u0031\u0032\u0029'; + t['\u2480'] = '\u0028\u0031\u0033\u0029'; + t['\u2481'] = '\u0028\u0031\u0034\u0029'; + t['\u2482'] = '\u0028\u0031\u0035\u0029'; + t['\u2483'] = '\u0028\u0031\u0036\u0029'; + t['\u2484'] = '\u0028\u0031\u0037\u0029'; + t['\u2485'] = '\u0028\u0031\u0038\u0029'; + t['\u2486'] = '\u0028\u0031\u0039\u0029'; + t['\u2487'] = '\u0028\u0032\u0030\u0029'; + t['\u2488'] = '\u0031\u002E'; + t['\u2489'] = '\u0032\u002E'; + t['\u248A'] = '\u0033\u002E'; + t['\u248B'] = '\u0034\u002E'; + t['\u248C'] = '\u0035\u002E'; + t['\u248D'] = '\u0036\u002E'; + t['\u248E'] = '\u0037\u002E'; + t['\u248F'] = '\u0038\u002E'; + t['\u2490'] = '\u0039\u002E'; + t['\u2491'] = '\u0031\u0030\u002E'; + t['\u2492'] = '\u0031\u0031\u002E'; + t['\u2493'] = '\u0031\u0032\u002E'; + t['\u2494'] = '\u0031\u0033\u002E'; + t['\u2495'] = '\u0031\u0034\u002E'; + t['\u2496'] = '\u0031\u0035\u002E'; + t['\u2497'] = '\u0031\u0036\u002E'; + t['\u2498'] = '\u0031\u0037\u002E'; + t['\u2499'] = '\u0031\u0038\u002E'; + t['\u249A'] = '\u0031\u0039\u002E'; + t['\u249B'] = '\u0032\u0030\u002E'; + t['\u249C'] = '\u0028\u0061\u0029'; + t['\u249D'] = '\u0028\u0062\u0029'; + t['\u249E'] = '\u0028\u0063\u0029'; + t['\u249F'] = '\u0028\u0064\u0029'; + t['\u24A0'] = '\u0028\u0065\u0029'; + t['\u24A1'] = '\u0028\u0066\u0029'; + t['\u24A2'] = '\u0028\u0067\u0029'; + t['\u24A3'] = '\u0028\u0068\u0029'; + t['\u24A4'] = '\u0028\u0069\u0029'; + t['\u24A5'] = '\u0028\u006A\u0029'; + t['\u24A6'] = '\u0028\u006B\u0029'; + t['\u24A7'] = '\u0028\u006C\u0029'; + t['\u24A8'] = '\u0028\u006D\u0029'; + t['\u24A9'] = '\u0028\u006E\u0029'; + t['\u24AA'] = '\u0028\u006F\u0029'; + t['\u24AB'] = '\u0028\u0070\u0029'; + t['\u24AC'] = '\u0028\u0071\u0029'; + t['\u24AD'] = '\u0028\u0072\u0029'; + t['\u24AE'] = '\u0028\u0073\u0029'; + t['\u24AF'] = '\u0028\u0074\u0029'; + t['\u24B0'] = '\u0028\u0075\u0029'; + t['\u24B1'] = '\u0028\u0076\u0029'; + t['\u24B2'] = '\u0028\u0077\u0029'; + t['\u24B3'] = '\u0028\u0078\u0029'; + t['\u24B4'] = '\u0028\u0079\u0029'; + t['\u24B5'] = '\u0028\u007A\u0029'; + t['\u2A0C'] = '\u222B\u222B\u222B\u222B'; + t['\u2A74'] = '\u003A\u003A\u003D'; + t['\u2A75'] = '\u003D\u003D'; + t['\u2A76'] = '\u003D\u003D\u003D'; + t['\u2E9F'] = '\u6BCD'; + t['\u2EF3'] = '\u9F9F'; + t['\u2F00'] = '\u4E00'; + t['\u2F01'] = '\u4E28'; + t['\u2F02'] = '\u4E36'; + t['\u2F03'] = '\u4E3F'; + t['\u2F04'] = '\u4E59'; + t['\u2F05'] = '\u4E85'; + t['\u2F06'] = '\u4E8C'; + t['\u2F07'] = '\u4EA0'; + t['\u2F08'] = '\u4EBA'; + t['\u2F09'] = '\u513F'; + t['\u2F0A'] = '\u5165'; + t['\u2F0B'] = '\u516B'; + t['\u2F0C'] = '\u5182'; + t['\u2F0D'] = '\u5196'; + t['\u2F0E'] = '\u51AB'; + t['\u2F0F'] = '\u51E0'; + t['\u2F10'] = '\u51F5'; + t['\u2F11'] = '\u5200'; + t['\u2F12'] = '\u529B'; + t['\u2F13'] = '\u52F9'; + t['\u2F14'] = '\u5315'; + t['\u2F15'] = '\u531A'; + t['\u2F16'] = '\u5338'; + t['\u2F17'] = '\u5341'; + t['\u2F18'] = '\u535C'; + t['\u2F19'] = '\u5369'; + t['\u2F1A'] = '\u5382'; + t['\u2F1B'] = '\u53B6'; + t['\u2F1C'] = '\u53C8'; + t['\u2F1D'] = '\u53E3'; + t['\u2F1E'] = '\u56D7'; + t['\u2F1F'] = '\u571F'; + t['\u2F20'] = '\u58EB'; + t['\u2F21'] = '\u5902'; + t['\u2F22'] = '\u590A'; + t['\u2F23'] = '\u5915'; + t['\u2F24'] = '\u5927'; + t['\u2F25'] = '\u5973'; + t['\u2F26'] = '\u5B50'; + t['\u2F27'] = '\u5B80'; + t['\u2F28'] = '\u5BF8'; + t['\u2F29'] = '\u5C0F'; + t['\u2F2A'] = '\u5C22'; + t['\u2F2B'] = '\u5C38'; + t['\u2F2C'] = '\u5C6E'; + t['\u2F2D'] = '\u5C71'; + t['\u2F2E'] = '\u5DDB'; + t['\u2F2F'] = '\u5DE5'; + t['\u2F30'] = '\u5DF1'; + t['\u2F31'] = '\u5DFE'; + t['\u2F32'] = '\u5E72'; + t['\u2F33'] = '\u5E7A'; + t['\u2F34'] = '\u5E7F'; + t['\u2F35'] = '\u5EF4'; + t['\u2F36'] = '\u5EFE'; + t['\u2F37'] = '\u5F0B'; + t['\u2F38'] = '\u5F13'; + t['\u2F39'] = '\u5F50'; + t['\u2F3A'] = '\u5F61'; + t['\u2F3B'] = '\u5F73'; + t['\u2F3C'] = '\u5FC3'; + t['\u2F3D'] = '\u6208'; + t['\u2F3E'] = '\u6236'; + t['\u2F3F'] = '\u624B'; + t['\u2F40'] = '\u652F'; + t['\u2F41'] = '\u6534'; + t['\u2F42'] = '\u6587'; + t['\u2F43'] = '\u6597'; + t['\u2F44'] = '\u65A4'; + t['\u2F45'] = '\u65B9'; + t['\u2F46'] = '\u65E0'; + t['\u2F47'] = '\u65E5'; + t['\u2F48'] = '\u66F0'; + t['\u2F49'] = '\u6708'; + t['\u2F4A'] = '\u6728'; + t['\u2F4B'] = '\u6B20'; + t['\u2F4C'] = '\u6B62'; + t['\u2F4D'] = '\u6B79'; + t['\u2F4E'] = '\u6BB3'; + t['\u2F4F'] = '\u6BCB'; + t['\u2F50'] = '\u6BD4'; + t['\u2F51'] = '\u6BDB'; + t['\u2F52'] = '\u6C0F'; + t['\u2F53'] = '\u6C14'; + t['\u2F54'] = '\u6C34'; + t['\u2F55'] = '\u706B'; + t['\u2F56'] = '\u722A'; + t['\u2F57'] = '\u7236'; + t['\u2F58'] = '\u723B'; + t['\u2F59'] = '\u723F'; + t['\u2F5A'] = '\u7247'; + t['\u2F5B'] = '\u7259'; + t['\u2F5C'] = '\u725B'; + t['\u2F5D'] = '\u72AC'; + t['\u2F5E'] = '\u7384'; + t['\u2F5F'] = '\u7389'; + t['\u2F60'] = '\u74DC'; + t['\u2F61'] = '\u74E6'; + t['\u2F62'] = '\u7518'; + t['\u2F63'] = '\u751F'; + t['\u2F64'] = '\u7528'; + t['\u2F65'] = '\u7530'; + t['\u2F66'] = '\u758B'; + t['\u2F67'] = '\u7592'; + t['\u2F68'] = '\u7676'; + t['\u2F69'] = '\u767D'; + t['\u2F6A'] = '\u76AE'; + t['\u2F6B'] = '\u76BF'; + t['\u2F6C'] = '\u76EE'; + t['\u2F6D'] = '\u77DB'; + t['\u2F6E'] = '\u77E2'; + t['\u2F6F'] = '\u77F3'; + t['\u2F70'] = '\u793A'; + t['\u2F71'] = '\u79B8'; + t['\u2F72'] = '\u79BE'; + t['\u2F73'] = '\u7A74'; + t['\u2F74'] = '\u7ACB'; + t['\u2F75'] = '\u7AF9'; + t['\u2F76'] = '\u7C73'; + t['\u2F77'] = '\u7CF8'; + t['\u2F78'] = '\u7F36'; + t['\u2F79'] = '\u7F51'; + t['\u2F7A'] = '\u7F8A'; + t['\u2F7B'] = '\u7FBD'; + t['\u2F7C'] = '\u8001'; + t['\u2F7D'] = '\u800C'; + t['\u2F7E'] = '\u8012'; + t['\u2F7F'] = '\u8033'; + t['\u2F80'] = '\u807F'; + t['\u2F81'] = '\u8089'; + t['\u2F82'] = '\u81E3'; + t['\u2F83'] = '\u81EA'; + t['\u2F84'] = '\u81F3'; + t['\u2F85'] = '\u81FC'; + t['\u2F86'] = '\u820C'; + t['\u2F87'] = '\u821B'; + t['\u2F88'] = '\u821F'; + t['\u2F89'] = '\u826E'; + t['\u2F8A'] = '\u8272'; + t['\u2F8B'] = '\u8278'; + t['\u2F8C'] = '\u864D'; + t['\u2F8D'] = '\u866B'; + t['\u2F8E'] = '\u8840'; + t['\u2F8F'] = '\u884C'; + t['\u2F90'] = '\u8863'; + t['\u2F91'] = '\u897E'; + t['\u2F92'] = '\u898B'; + t['\u2F93'] = '\u89D2'; + t['\u2F94'] = '\u8A00'; + t['\u2F95'] = '\u8C37'; + t['\u2F96'] = '\u8C46'; + t['\u2F97'] = '\u8C55'; + t['\u2F98'] = '\u8C78'; + t['\u2F99'] = '\u8C9D'; + t['\u2F9A'] = '\u8D64'; + t['\u2F9B'] = '\u8D70'; + t['\u2F9C'] = '\u8DB3'; + t['\u2F9D'] = '\u8EAB'; + t['\u2F9E'] = '\u8ECA'; + t['\u2F9F'] = '\u8F9B'; + t['\u2FA0'] = '\u8FB0'; + t['\u2FA1'] = '\u8FB5'; + t['\u2FA2'] = '\u9091'; + t['\u2FA3'] = '\u9149'; + t['\u2FA4'] = '\u91C6'; + t['\u2FA5'] = '\u91CC'; + t['\u2FA6'] = '\u91D1'; + t['\u2FA7'] = '\u9577'; + t['\u2FA8'] = '\u9580'; + t['\u2FA9'] = '\u961C'; + t['\u2FAA'] = '\u96B6'; + t['\u2FAB'] = '\u96B9'; + t['\u2FAC'] = '\u96E8'; + t['\u2FAD'] = '\u9751'; + t['\u2FAE'] = '\u975E'; + t['\u2FAF'] = '\u9762'; + t['\u2FB0'] = '\u9769'; + t['\u2FB1'] = '\u97CB'; + t['\u2FB2'] = '\u97ED'; + t['\u2FB3'] = '\u97F3'; + t['\u2FB4'] = '\u9801'; + t['\u2FB5'] = '\u98A8'; + t['\u2FB6'] = '\u98DB'; + t['\u2FB7'] = '\u98DF'; + t['\u2FB8'] = '\u9996'; + t['\u2FB9'] = '\u9999'; + t['\u2FBA'] = '\u99AC'; + t['\u2FBB'] = '\u9AA8'; + t['\u2FBC'] = '\u9AD8'; + t['\u2FBD'] = '\u9ADF'; + t['\u2FBE'] = '\u9B25'; + t['\u2FBF'] = '\u9B2F'; + t['\u2FC0'] = '\u9B32'; + t['\u2FC1'] = '\u9B3C'; + t['\u2FC2'] = '\u9B5A'; + t['\u2FC3'] = '\u9CE5'; + t['\u2FC4'] = '\u9E75'; + t['\u2FC5'] = '\u9E7F'; + t['\u2FC6'] = '\u9EA5'; + t['\u2FC7'] = '\u9EBB'; + t['\u2FC8'] = '\u9EC3'; + t['\u2FC9'] = '\u9ECD'; + t['\u2FCA'] = '\u9ED1'; + t['\u2FCB'] = '\u9EF9'; + t['\u2FCC'] = '\u9EFD'; + t['\u2FCD'] = '\u9F0E'; + t['\u2FCE'] = '\u9F13'; + t['\u2FCF'] = '\u9F20'; + t['\u2FD0'] = '\u9F3B'; + t['\u2FD1'] = '\u9F4A'; + t['\u2FD2'] = '\u9F52'; + t['\u2FD3'] = '\u9F8D'; + t['\u2FD4'] = '\u9F9C'; + t['\u2FD5'] = '\u9FA0'; + t['\u3036'] = '\u3012'; + t['\u3038'] = '\u5341'; + t['\u3039'] = '\u5344'; + t['\u303A'] = '\u5345'; + t['\u309B'] = '\u0020\u3099'; + t['\u309C'] = '\u0020\u309A'; + t['\u3131'] = '\u1100'; + t['\u3132'] = '\u1101'; + t['\u3133'] = '\u11AA'; + t['\u3134'] = '\u1102'; + t['\u3135'] = '\u11AC'; + t['\u3136'] = '\u11AD'; + t['\u3137'] = '\u1103'; + t['\u3138'] = '\u1104'; + t['\u3139'] = '\u1105'; + t['\u313A'] = '\u11B0'; + t['\u313B'] = '\u11B1'; + t['\u313C'] = '\u11B2'; + t['\u313D'] = '\u11B3'; + t['\u313E'] = '\u11B4'; + t['\u313F'] = '\u11B5'; + t['\u3140'] = '\u111A'; + t['\u3141'] = '\u1106'; + t['\u3142'] = '\u1107'; + t['\u3143'] = '\u1108'; + t['\u3144'] = '\u1121'; + t['\u3145'] = '\u1109'; + t['\u3146'] = '\u110A'; + t['\u3147'] = '\u110B'; + t['\u3148'] = '\u110C'; + t['\u3149'] = '\u110D'; + t['\u314A'] = '\u110E'; + t['\u314B'] = '\u110F'; + t['\u314C'] = '\u1110'; + t['\u314D'] = '\u1111'; + t['\u314E'] = '\u1112'; + t['\u314F'] = '\u1161'; + t['\u3150'] = '\u1162'; + t['\u3151'] = '\u1163'; + t['\u3152'] = '\u1164'; + t['\u3153'] = '\u1165'; + t['\u3154'] = '\u1166'; + t['\u3155'] = '\u1167'; + t['\u3156'] = '\u1168'; + t['\u3157'] = '\u1169'; + t['\u3158'] = '\u116A'; + t['\u3159'] = '\u116B'; + t['\u315A'] = '\u116C'; + t['\u315B'] = '\u116D'; + t['\u315C'] = '\u116E'; + t['\u315D'] = '\u116F'; + t['\u315E'] = '\u1170'; + t['\u315F'] = '\u1171'; + t['\u3160'] = '\u1172'; + t['\u3161'] = '\u1173'; + t['\u3162'] = '\u1174'; + t['\u3163'] = '\u1175'; + t['\u3164'] = '\u1160'; + t['\u3165'] = '\u1114'; + t['\u3166'] = '\u1115'; + t['\u3167'] = '\u11C7'; + t['\u3168'] = '\u11C8'; + t['\u3169'] = '\u11CC'; + t['\u316A'] = '\u11CE'; + t['\u316B'] = '\u11D3'; + t['\u316C'] = '\u11D7'; + t['\u316D'] = '\u11D9'; + t['\u316E'] = '\u111C'; + t['\u316F'] = '\u11DD'; + t['\u3170'] = '\u11DF'; + t['\u3171'] = '\u111D'; + t['\u3172'] = '\u111E'; + t['\u3173'] = '\u1120'; + t['\u3174'] = '\u1122'; + t['\u3175'] = '\u1123'; + t['\u3176'] = '\u1127'; + t['\u3177'] = '\u1129'; + t['\u3178'] = '\u112B'; + t['\u3179'] = '\u112C'; + t['\u317A'] = '\u112D'; + t['\u317B'] = '\u112E'; + t['\u317C'] = '\u112F'; + t['\u317D'] = '\u1132'; + t['\u317E'] = '\u1136'; + t['\u317F'] = '\u1140'; + t['\u3180'] = '\u1147'; + t['\u3181'] = '\u114C'; + t['\u3182'] = '\u11F1'; + t['\u3183'] = '\u11F2'; + t['\u3184'] = '\u1157'; + t['\u3185'] = '\u1158'; + t['\u3186'] = '\u1159'; + t['\u3187'] = '\u1184'; + t['\u3188'] = '\u1185'; + t['\u3189'] = '\u1188'; + t['\u318A'] = '\u1191'; + t['\u318B'] = '\u1192'; + t['\u318C'] = '\u1194'; + t['\u318D'] = '\u119E'; + t['\u318E'] = '\u11A1'; + t['\u3200'] = '\u0028\u1100\u0029'; + t['\u3201'] = '\u0028\u1102\u0029'; + t['\u3202'] = '\u0028\u1103\u0029'; + t['\u3203'] = '\u0028\u1105\u0029'; + t['\u3204'] = '\u0028\u1106\u0029'; + t['\u3205'] = '\u0028\u1107\u0029'; + t['\u3206'] = '\u0028\u1109\u0029'; + t['\u3207'] = '\u0028\u110B\u0029'; + t['\u3208'] = '\u0028\u110C\u0029'; + t['\u3209'] = '\u0028\u110E\u0029'; + t['\u320A'] = '\u0028\u110F\u0029'; + t['\u320B'] = '\u0028\u1110\u0029'; + t['\u320C'] = '\u0028\u1111\u0029'; + t['\u320D'] = '\u0028\u1112\u0029'; + t['\u320E'] = '\u0028\u1100\u1161\u0029'; + t['\u320F'] = '\u0028\u1102\u1161\u0029'; + t['\u3210'] = '\u0028\u1103\u1161\u0029'; + t['\u3211'] = '\u0028\u1105\u1161\u0029'; + t['\u3212'] = '\u0028\u1106\u1161\u0029'; + t['\u3213'] = '\u0028\u1107\u1161\u0029'; + t['\u3214'] = '\u0028\u1109\u1161\u0029'; + t['\u3215'] = '\u0028\u110B\u1161\u0029'; + t['\u3216'] = '\u0028\u110C\u1161\u0029'; + t['\u3217'] = '\u0028\u110E\u1161\u0029'; + t['\u3218'] = '\u0028\u110F\u1161\u0029'; + t['\u3219'] = '\u0028\u1110\u1161\u0029'; + t['\u321A'] = '\u0028\u1111\u1161\u0029'; + t['\u321B'] = '\u0028\u1112\u1161\u0029'; + t['\u321C'] = '\u0028\u110C\u116E\u0029'; + t['\u321D'] = '\u0028\u110B\u1169\u110C\u1165\u11AB\u0029'; + t['\u321E'] = '\u0028\u110B\u1169\u1112\u116E\u0029'; + t['\u3220'] = '\u0028\u4E00\u0029'; + t['\u3221'] = '\u0028\u4E8C\u0029'; + t['\u3222'] = '\u0028\u4E09\u0029'; + t['\u3223'] = '\u0028\u56DB\u0029'; + t['\u3224'] = '\u0028\u4E94\u0029'; + t['\u3225'] = '\u0028\u516D\u0029'; + t['\u3226'] = '\u0028\u4E03\u0029'; + t['\u3227'] = '\u0028\u516B\u0029'; + t['\u3228'] = '\u0028\u4E5D\u0029'; + t['\u3229'] = '\u0028\u5341\u0029'; + t['\u322A'] = '\u0028\u6708\u0029'; + t['\u322B'] = '\u0028\u706B\u0029'; + t['\u322C'] = '\u0028\u6C34\u0029'; + t['\u322D'] = '\u0028\u6728\u0029'; + t['\u322E'] = '\u0028\u91D1\u0029'; + t['\u322F'] = '\u0028\u571F\u0029'; + t['\u3230'] = '\u0028\u65E5\u0029'; + t['\u3231'] = '\u0028\u682A\u0029'; + t['\u3232'] = '\u0028\u6709\u0029'; + t['\u3233'] = '\u0028\u793E\u0029'; + t['\u3234'] = '\u0028\u540D\u0029'; + t['\u3235'] = '\u0028\u7279\u0029'; + t['\u3236'] = '\u0028\u8CA1\u0029'; + t['\u3237'] = '\u0028\u795D\u0029'; + t['\u3238'] = '\u0028\u52B4\u0029'; + t['\u3239'] = '\u0028\u4EE3\u0029'; + t['\u323A'] = '\u0028\u547C\u0029'; + t['\u323B'] = '\u0028\u5B66\u0029'; + t['\u323C'] = '\u0028\u76E3\u0029'; + t['\u323D'] = '\u0028\u4F01\u0029'; + t['\u323E'] = '\u0028\u8CC7\u0029'; + t['\u323F'] = '\u0028\u5354\u0029'; + t['\u3240'] = '\u0028\u796D\u0029'; + t['\u3241'] = '\u0028\u4F11\u0029'; + t['\u3242'] = '\u0028\u81EA\u0029'; + t['\u3243'] = '\u0028\u81F3\u0029'; + t['\u32C0'] = '\u0031\u6708'; + t['\u32C1'] = '\u0032\u6708'; + t['\u32C2'] = '\u0033\u6708'; + t['\u32C3'] = '\u0034\u6708'; + t['\u32C4'] = '\u0035\u6708'; + t['\u32C5'] = '\u0036\u6708'; + t['\u32C6'] = '\u0037\u6708'; + t['\u32C7'] = '\u0038\u6708'; + t['\u32C8'] = '\u0039\u6708'; + t['\u32C9'] = '\u0031\u0030\u6708'; + t['\u32CA'] = '\u0031\u0031\u6708'; + t['\u32CB'] = '\u0031\u0032\u6708'; + t['\u3358'] = '\u0030\u70B9'; + t['\u3359'] = '\u0031\u70B9'; + t['\u335A'] = '\u0032\u70B9'; + t['\u335B'] = '\u0033\u70B9'; + t['\u335C'] = '\u0034\u70B9'; + t['\u335D'] = '\u0035\u70B9'; + t['\u335E'] = '\u0036\u70B9'; + t['\u335F'] = '\u0037\u70B9'; + t['\u3360'] = '\u0038\u70B9'; + t['\u3361'] = '\u0039\u70B9'; + t['\u3362'] = '\u0031\u0030\u70B9'; + t['\u3363'] = '\u0031\u0031\u70B9'; + t['\u3364'] = '\u0031\u0032\u70B9'; + t['\u3365'] = '\u0031\u0033\u70B9'; + t['\u3366'] = '\u0031\u0034\u70B9'; + t['\u3367'] = '\u0031\u0035\u70B9'; + t['\u3368'] = '\u0031\u0036\u70B9'; + t['\u3369'] = '\u0031\u0037\u70B9'; + t['\u336A'] = '\u0031\u0038\u70B9'; + t['\u336B'] = '\u0031\u0039\u70B9'; + t['\u336C'] = '\u0032\u0030\u70B9'; + t['\u336D'] = '\u0032\u0031\u70B9'; + t['\u336E'] = '\u0032\u0032\u70B9'; + t['\u336F'] = '\u0032\u0033\u70B9'; + t['\u3370'] = '\u0032\u0034\u70B9'; + t['\u33E0'] = '\u0031\u65E5'; + t['\u33E1'] = '\u0032\u65E5'; + t['\u33E2'] = '\u0033\u65E5'; + t['\u33E3'] = '\u0034\u65E5'; + t['\u33E4'] = '\u0035\u65E5'; + t['\u33E5'] = '\u0036\u65E5'; + t['\u33E6'] = '\u0037\u65E5'; + t['\u33E7'] = '\u0038\u65E5'; + t['\u33E8'] = '\u0039\u65E5'; + t['\u33E9'] = '\u0031\u0030\u65E5'; + t['\u33EA'] = '\u0031\u0031\u65E5'; + t['\u33EB'] = '\u0031\u0032\u65E5'; + t['\u33EC'] = '\u0031\u0033\u65E5'; + t['\u33ED'] = '\u0031\u0034\u65E5'; + t['\u33EE'] = '\u0031\u0035\u65E5'; + t['\u33EF'] = '\u0031\u0036\u65E5'; + t['\u33F0'] = '\u0031\u0037\u65E5'; + t['\u33F1'] = '\u0031\u0038\u65E5'; + t['\u33F2'] = '\u0031\u0039\u65E5'; + t['\u33F3'] = '\u0032\u0030\u65E5'; + t['\u33F4'] = '\u0032\u0031\u65E5'; + t['\u33F5'] = '\u0032\u0032\u65E5'; + t['\u33F6'] = '\u0032\u0033\u65E5'; + t['\u33F7'] = '\u0032\u0034\u65E5'; + t['\u33F8'] = '\u0032\u0035\u65E5'; + t['\u33F9'] = '\u0032\u0036\u65E5'; + t['\u33FA'] = '\u0032\u0037\u65E5'; + t['\u33FB'] = '\u0032\u0038\u65E5'; + t['\u33FC'] = '\u0032\u0039\u65E5'; + t['\u33FD'] = '\u0033\u0030\u65E5'; + t['\u33FE'] = '\u0033\u0031\u65E5'; + t['\uFB00'] = '\u0066\u0066'; + t['\uFB01'] = '\u0066\u0069'; + t['\uFB02'] = '\u0066\u006C'; + t['\uFB03'] = '\u0066\u0066\u0069'; + t['\uFB04'] = '\u0066\u0066\u006C'; + t['\uFB05'] = '\u017F\u0074'; + t['\uFB06'] = '\u0073\u0074'; + t['\uFB13'] = '\u0574\u0576'; + t['\uFB14'] = '\u0574\u0565'; + t['\uFB15'] = '\u0574\u056B'; + t['\uFB16'] = '\u057E\u0576'; + t['\uFB17'] = '\u0574\u056D'; + t['\uFB4F'] = '\u05D0\u05DC'; + t['\uFB50'] = '\u0671'; + t['\uFB51'] = '\u0671'; + t['\uFB52'] = '\u067B'; + t['\uFB53'] = '\u067B'; + t['\uFB54'] = '\u067B'; + t['\uFB55'] = '\u067B'; + t['\uFB56'] = '\u067E'; + t['\uFB57'] = '\u067E'; + t['\uFB58'] = '\u067E'; + t['\uFB59'] = '\u067E'; + t['\uFB5A'] = '\u0680'; + t['\uFB5B'] = '\u0680'; + t['\uFB5C'] = '\u0680'; + t['\uFB5D'] = '\u0680'; + t['\uFB5E'] = '\u067A'; + t['\uFB5F'] = '\u067A'; + t['\uFB60'] = '\u067A'; + t['\uFB61'] = '\u067A'; + t['\uFB62'] = '\u067F'; + t['\uFB63'] = '\u067F'; + t['\uFB64'] = '\u067F'; + t['\uFB65'] = '\u067F'; + t['\uFB66'] = '\u0679'; + t['\uFB67'] = '\u0679'; + t['\uFB68'] = '\u0679'; + t['\uFB69'] = '\u0679'; + t['\uFB6A'] = '\u06A4'; + t['\uFB6B'] = '\u06A4'; + t['\uFB6C'] = '\u06A4'; + t['\uFB6D'] = '\u06A4'; + t['\uFB6E'] = '\u06A6'; + t['\uFB6F'] = '\u06A6'; + t['\uFB70'] = '\u06A6'; + t['\uFB71'] = '\u06A6'; + t['\uFB72'] = '\u0684'; + t['\uFB73'] = '\u0684'; + t['\uFB74'] = '\u0684'; + t['\uFB75'] = '\u0684'; + t['\uFB76'] = '\u0683'; + t['\uFB77'] = '\u0683'; + t['\uFB78'] = '\u0683'; + t['\uFB79'] = '\u0683'; + t['\uFB7A'] = '\u0686'; + t['\uFB7B'] = '\u0686'; + t['\uFB7C'] = '\u0686'; + t['\uFB7D'] = '\u0686'; + t['\uFB7E'] = '\u0687'; + t['\uFB7F'] = '\u0687'; + t['\uFB80'] = '\u0687'; + t['\uFB81'] = '\u0687'; + t['\uFB82'] = '\u068D'; + t['\uFB83'] = '\u068D'; + t['\uFB84'] = '\u068C'; + t['\uFB85'] = '\u068C'; + t['\uFB86'] = '\u068E'; + t['\uFB87'] = '\u068E'; + t['\uFB88'] = '\u0688'; + t['\uFB89'] = '\u0688'; + t['\uFB8A'] = '\u0698'; + t['\uFB8B'] = '\u0698'; + t['\uFB8C'] = '\u0691'; + t['\uFB8D'] = '\u0691'; + t['\uFB8E'] = '\u06A9'; + t['\uFB8F'] = '\u06A9'; + t['\uFB90'] = '\u06A9'; + t['\uFB91'] = '\u06A9'; + t['\uFB92'] = '\u06AF'; + t['\uFB93'] = '\u06AF'; + t['\uFB94'] = '\u06AF'; + t['\uFB95'] = '\u06AF'; + t['\uFB96'] = '\u06B3'; + t['\uFB97'] = '\u06B3'; + t['\uFB98'] = '\u06B3'; + t['\uFB99'] = '\u06B3'; + t['\uFB9A'] = '\u06B1'; + t['\uFB9B'] = '\u06B1'; + t['\uFB9C'] = '\u06B1'; + t['\uFB9D'] = '\u06B1'; + t['\uFB9E'] = '\u06BA'; + t['\uFB9F'] = '\u06BA'; + t['\uFBA0'] = '\u06BB'; + t['\uFBA1'] = '\u06BB'; + t['\uFBA2'] = '\u06BB'; + t['\uFBA3'] = '\u06BB'; + t['\uFBA4'] = '\u06C0'; + t['\uFBA5'] = '\u06C0'; + t['\uFBA6'] = '\u06C1'; + t['\uFBA7'] = '\u06C1'; + t['\uFBA8'] = '\u06C1'; + t['\uFBA9'] = '\u06C1'; + t['\uFBAA'] = '\u06BE'; + t['\uFBAB'] = '\u06BE'; + t['\uFBAC'] = '\u06BE'; + t['\uFBAD'] = '\u06BE'; + t['\uFBAE'] = '\u06D2'; + t['\uFBAF'] = '\u06D2'; + t['\uFBB0'] = '\u06D3'; + t['\uFBB1'] = '\u06D3'; + t['\uFBD3'] = '\u06AD'; + t['\uFBD4'] = '\u06AD'; + t['\uFBD5'] = '\u06AD'; + t['\uFBD6'] = '\u06AD'; + t['\uFBD7'] = '\u06C7'; + t['\uFBD8'] = '\u06C7'; + t['\uFBD9'] = '\u06C6'; + t['\uFBDA'] = '\u06C6'; + t['\uFBDB'] = '\u06C8'; + t['\uFBDC'] = '\u06C8'; + t['\uFBDD'] = '\u0677'; + t['\uFBDE'] = '\u06CB'; + t['\uFBDF'] = '\u06CB'; + t['\uFBE0'] = '\u06C5'; + t['\uFBE1'] = '\u06C5'; + t['\uFBE2'] = '\u06C9'; + t['\uFBE3'] = '\u06C9'; + t['\uFBE4'] = '\u06D0'; + t['\uFBE5'] = '\u06D0'; + t['\uFBE6'] = '\u06D0'; + t['\uFBE7'] = '\u06D0'; + t['\uFBE8'] = '\u0649'; + t['\uFBE9'] = '\u0649'; + t['\uFBEA'] = '\u0626\u0627'; + t['\uFBEB'] = '\u0626\u0627'; + t['\uFBEC'] = '\u0626\u06D5'; + t['\uFBED'] = '\u0626\u06D5'; + t['\uFBEE'] = '\u0626\u0648'; + t['\uFBEF'] = '\u0626\u0648'; + t['\uFBF0'] = '\u0626\u06C7'; + t['\uFBF1'] = '\u0626\u06C7'; + t['\uFBF2'] = '\u0626\u06C6'; + t['\uFBF3'] = '\u0626\u06C6'; + t['\uFBF4'] = '\u0626\u06C8'; + t['\uFBF5'] = '\u0626\u06C8'; + t['\uFBF6'] = '\u0626\u06D0'; + t['\uFBF7'] = '\u0626\u06D0'; + t['\uFBF8'] = '\u0626\u06D0'; + t['\uFBF9'] = '\u0626\u0649'; + t['\uFBFA'] = '\u0626\u0649'; + t['\uFBFB'] = '\u0626\u0649'; + t['\uFBFC'] = '\u06CC'; + t['\uFBFD'] = '\u06CC'; + t['\uFBFE'] = '\u06CC'; + t['\uFBFF'] = '\u06CC'; + t['\uFC00'] = '\u0626\u062C'; + t['\uFC01'] = '\u0626\u062D'; + t['\uFC02'] = '\u0626\u0645'; + t['\uFC03'] = '\u0626\u0649'; + t['\uFC04'] = '\u0626\u064A'; + t['\uFC05'] = '\u0628\u062C'; + t['\uFC06'] = '\u0628\u062D'; + t['\uFC07'] = '\u0628\u062E'; + t['\uFC08'] = '\u0628\u0645'; + t['\uFC09'] = '\u0628\u0649'; + t['\uFC0A'] = '\u0628\u064A'; + t['\uFC0B'] = '\u062A\u062C'; + t['\uFC0C'] = '\u062A\u062D'; + t['\uFC0D'] = '\u062A\u062E'; + t['\uFC0E'] = '\u062A\u0645'; + t['\uFC0F'] = '\u062A\u0649'; + t['\uFC10'] = '\u062A\u064A'; + t['\uFC11'] = '\u062B\u062C'; + t['\uFC12'] = '\u062B\u0645'; + t['\uFC13'] = '\u062B\u0649'; + t['\uFC14'] = '\u062B\u064A'; + t['\uFC15'] = '\u062C\u062D'; + t['\uFC16'] = '\u062C\u0645'; + t['\uFC17'] = '\u062D\u062C'; + t['\uFC18'] = '\u062D\u0645'; + t['\uFC19'] = '\u062E\u062C'; + t['\uFC1A'] = '\u062E\u062D'; + t['\uFC1B'] = '\u062E\u0645'; + t['\uFC1C'] = '\u0633\u062C'; + t['\uFC1D'] = '\u0633\u062D'; + t['\uFC1E'] = '\u0633\u062E'; + t['\uFC1F'] = '\u0633\u0645'; + t['\uFC20'] = '\u0635\u062D'; + t['\uFC21'] = '\u0635\u0645'; + t['\uFC22'] = '\u0636\u062C'; + t['\uFC23'] = '\u0636\u062D'; + t['\uFC24'] = '\u0636\u062E'; + t['\uFC25'] = '\u0636\u0645'; + t['\uFC26'] = '\u0637\u062D'; + t['\uFC27'] = '\u0637\u0645'; + t['\uFC28'] = '\u0638\u0645'; + t['\uFC29'] = '\u0639\u062C'; + t['\uFC2A'] = '\u0639\u0645'; + t['\uFC2B'] = '\u063A\u062C'; + t['\uFC2C'] = '\u063A\u0645'; + t['\uFC2D'] = '\u0641\u062C'; + t['\uFC2E'] = '\u0641\u062D'; + t['\uFC2F'] = '\u0641\u062E'; + t['\uFC30'] = '\u0641\u0645'; + t['\uFC31'] = '\u0641\u0649'; + t['\uFC32'] = '\u0641\u064A'; + t['\uFC33'] = '\u0642\u062D'; + t['\uFC34'] = '\u0642\u0645'; + t['\uFC35'] = '\u0642\u0649'; + t['\uFC36'] = '\u0642\u064A'; + t['\uFC37'] = '\u0643\u0627'; + t['\uFC38'] = '\u0643\u062C'; + t['\uFC39'] = '\u0643\u062D'; + t['\uFC3A'] = '\u0643\u062E'; + t['\uFC3B'] = '\u0643\u0644'; + t['\uFC3C'] = '\u0643\u0645'; + t['\uFC3D'] = '\u0643\u0649'; + t['\uFC3E'] = '\u0643\u064A'; + t['\uFC3F'] = '\u0644\u062C'; + t['\uFC40'] = '\u0644\u062D'; + t['\uFC41'] = '\u0644\u062E'; + t['\uFC42'] = '\u0644\u0645'; + t['\uFC43'] = '\u0644\u0649'; + t['\uFC44'] = '\u0644\u064A'; + t['\uFC45'] = '\u0645\u062C'; + t['\uFC46'] = '\u0645\u062D'; + t['\uFC47'] = '\u0645\u062E'; + t['\uFC48'] = '\u0645\u0645'; + t['\uFC49'] = '\u0645\u0649'; + t['\uFC4A'] = '\u0645\u064A'; + t['\uFC4B'] = '\u0646\u062C'; + t['\uFC4C'] = '\u0646\u062D'; + t['\uFC4D'] = '\u0646\u062E'; + t['\uFC4E'] = '\u0646\u0645'; + t['\uFC4F'] = '\u0646\u0649'; + t['\uFC50'] = '\u0646\u064A'; + t['\uFC51'] = '\u0647\u062C'; + t['\uFC52'] = '\u0647\u0645'; + t['\uFC53'] = '\u0647\u0649'; + t['\uFC54'] = '\u0647\u064A'; + t['\uFC55'] = '\u064A\u062C'; + t['\uFC56'] = '\u064A\u062D'; + t['\uFC57'] = '\u064A\u062E'; + t['\uFC58'] = '\u064A\u0645'; + t['\uFC59'] = '\u064A\u0649'; + t['\uFC5A'] = '\u064A\u064A'; + t['\uFC5B'] = '\u0630\u0670'; + t['\uFC5C'] = '\u0631\u0670'; + t['\uFC5D'] = '\u0649\u0670'; + t['\uFC5E'] = '\u0020\u064C\u0651'; + t['\uFC5F'] = '\u0020\u064D\u0651'; + t['\uFC60'] = '\u0020\u064E\u0651'; + t['\uFC61'] = '\u0020\u064F\u0651'; + t['\uFC62'] = '\u0020\u0650\u0651'; + t['\uFC63'] = '\u0020\u0651\u0670'; + t['\uFC64'] = '\u0626\u0631'; + t['\uFC65'] = '\u0626\u0632'; + t['\uFC66'] = '\u0626\u0645'; + t['\uFC67'] = '\u0626\u0646'; + t['\uFC68'] = '\u0626\u0649'; + t['\uFC69'] = '\u0626\u064A'; + t['\uFC6A'] = '\u0628\u0631'; + t['\uFC6B'] = '\u0628\u0632'; + t['\uFC6C'] = '\u0628\u0645'; + t['\uFC6D'] = '\u0628\u0646'; + t['\uFC6E'] = '\u0628\u0649'; + t['\uFC6F'] = '\u0628\u064A'; + t['\uFC70'] = '\u062A\u0631'; + t['\uFC71'] = '\u062A\u0632'; + t['\uFC72'] = '\u062A\u0645'; + t['\uFC73'] = '\u062A\u0646'; + t['\uFC74'] = '\u062A\u0649'; + t['\uFC75'] = '\u062A\u064A'; + t['\uFC76'] = '\u062B\u0631'; + t['\uFC77'] = '\u062B\u0632'; + t['\uFC78'] = '\u062B\u0645'; + t['\uFC79'] = '\u062B\u0646'; + t['\uFC7A'] = '\u062B\u0649'; + t['\uFC7B'] = '\u062B\u064A'; + t['\uFC7C'] = '\u0641\u0649'; + t['\uFC7D'] = '\u0641\u064A'; + t['\uFC7E'] = '\u0642\u0649'; + t['\uFC7F'] = '\u0642\u064A'; + t['\uFC80'] = '\u0643\u0627'; + t['\uFC81'] = '\u0643\u0644'; + t['\uFC82'] = '\u0643\u0645'; + t['\uFC83'] = '\u0643\u0649'; + t['\uFC84'] = '\u0643\u064A'; + t['\uFC85'] = '\u0644\u0645'; + t['\uFC86'] = '\u0644\u0649'; + t['\uFC87'] = '\u0644\u064A'; + t['\uFC88'] = '\u0645\u0627'; + t['\uFC89'] = '\u0645\u0645'; + t['\uFC8A'] = '\u0646\u0631'; + t['\uFC8B'] = '\u0646\u0632'; + t['\uFC8C'] = '\u0646\u0645'; + t['\uFC8D'] = '\u0646\u0646'; + t['\uFC8E'] = '\u0646\u0649'; + t['\uFC8F'] = '\u0646\u064A'; + t['\uFC90'] = '\u0649\u0670'; + t['\uFC91'] = '\u064A\u0631'; + t['\uFC92'] = '\u064A\u0632'; + t['\uFC93'] = '\u064A\u0645'; + t['\uFC94'] = '\u064A\u0646'; + t['\uFC95'] = '\u064A\u0649'; + t['\uFC96'] = '\u064A\u064A'; + t['\uFC97'] = '\u0626\u062C'; + t['\uFC98'] = '\u0626\u062D'; + t['\uFC99'] = '\u0626\u062E'; + t['\uFC9A'] = '\u0626\u0645'; + t['\uFC9B'] = '\u0626\u0647'; + t['\uFC9C'] = '\u0628\u062C'; + t['\uFC9D'] = '\u0628\u062D'; + t['\uFC9E'] = '\u0628\u062E'; + t['\uFC9F'] = '\u0628\u0645'; + t['\uFCA0'] = '\u0628\u0647'; + t['\uFCA1'] = '\u062A\u062C'; + t['\uFCA2'] = '\u062A\u062D'; + t['\uFCA3'] = '\u062A\u062E'; + t['\uFCA4'] = '\u062A\u0645'; + t['\uFCA5'] = '\u062A\u0647'; + t['\uFCA6'] = '\u062B\u0645'; + t['\uFCA7'] = '\u062C\u062D'; + t['\uFCA8'] = '\u062C\u0645'; + t['\uFCA9'] = '\u062D\u062C'; + t['\uFCAA'] = '\u062D\u0645'; + t['\uFCAB'] = '\u062E\u062C'; + t['\uFCAC'] = '\u062E\u0645'; + t['\uFCAD'] = '\u0633\u062C'; + t['\uFCAE'] = '\u0633\u062D'; + t['\uFCAF'] = '\u0633\u062E'; + t['\uFCB0'] = '\u0633\u0645'; + t['\uFCB1'] = '\u0635\u062D'; + t['\uFCB2'] = '\u0635\u062E'; + t['\uFCB3'] = '\u0635\u0645'; + t['\uFCB4'] = '\u0636\u062C'; + t['\uFCB5'] = '\u0636\u062D'; + t['\uFCB6'] = '\u0636\u062E'; + t['\uFCB7'] = '\u0636\u0645'; + t['\uFCB8'] = '\u0637\u062D'; + t['\uFCB9'] = '\u0638\u0645'; + t['\uFCBA'] = '\u0639\u062C'; + t['\uFCBB'] = '\u0639\u0645'; + t['\uFCBC'] = '\u063A\u062C'; + t['\uFCBD'] = '\u063A\u0645'; + t['\uFCBE'] = '\u0641\u062C'; + t['\uFCBF'] = '\u0641\u062D'; + t['\uFCC0'] = '\u0641\u062E'; + t['\uFCC1'] = '\u0641\u0645'; + t['\uFCC2'] = '\u0642\u062D'; + t['\uFCC3'] = '\u0642\u0645'; + t['\uFCC4'] = '\u0643\u062C'; + t['\uFCC5'] = '\u0643\u062D'; + t['\uFCC6'] = '\u0643\u062E'; + t['\uFCC7'] = '\u0643\u0644'; + t['\uFCC8'] = '\u0643\u0645'; + t['\uFCC9'] = '\u0644\u062C'; + t['\uFCCA'] = '\u0644\u062D'; + t['\uFCCB'] = '\u0644\u062E'; + t['\uFCCC'] = '\u0644\u0645'; + t['\uFCCD'] = '\u0644\u0647'; + t['\uFCCE'] = '\u0645\u062C'; + t['\uFCCF'] = '\u0645\u062D'; + t['\uFCD0'] = '\u0645\u062E'; + t['\uFCD1'] = '\u0645\u0645'; + t['\uFCD2'] = '\u0646\u062C'; + t['\uFCD3'] = '\u0646\u062D'; + t['\uFCD4'] = '\u0646\u062E'; + t['\uFCD5'] = '\u0646\u0645'; + t['\uFCD6'] = '\u0646\u0647'; + t['\uFCD7'] = '\u0647\u062C'; + t['\uFCD8'] = '\u0647\u0645'; + t['\uFCD9'] = '\u0647\u0670'; + t['\uFCDA'] = '\u064A\u062C'; + t['\uFCDB'] = '\u064A\u062D'; + t['\uFCDC'] = '\u064A\u062E'; + t['\uFCDD'] = '\u064A\u0645'; + t['\uFCDE'] = '\u064A\u0647'; + t['\uFCDF'] = '\u0626\u0645'; + t['\uFCE0'] = '\u0626\u0647'; + t['\uFCE1'] = '\u0628\u0645'; + t['\uFCE2'] = '\u0628\u0647'; + t['\uFCE3'] = '\u062A\u0645'; + t['\uFCE4'] = '\u062A\u0647'; + t['\uFCE5'] = '\u062B\u0645'; + t['\uFCE6'] = '\u062B\u0647'; + t['\uFCE7'] = '\u0633\u0645'; + t['\uFCE8'] = '\u0633\u0647'; + t['\uFCE9'] = '\u0634\u0645'; + t['\uFCEA'] = '\u0634\u0647'; + t['\uFCEB'] = '\u0643\u0644'; + t['\uFCEC'] = '\u0643\u0645'; + t['\uFCED'] = '\u0644\u0645'; + t['\uFCEE'] = '\u0646\u0645'; + t['\uFCEF'] = '\u0646\u0647'; + t['\uFCF0'] = '\u064A\u0645'; + t['\uFCF1'] = '\u064A\u0647'; + t['\uFCF2'] = '\u0640\u064E\u0651'; + t['\uFCF3'] = '\u0640\u064F\u0651'; + t['\uFCF4'] = '\u0640\u0650\u0651'; + t['\uFCF5'] = '\u0637\u0649'; + t['\uFCF6'] = '\u0637\u064A'; + t['\uFCF7'] = '\u0639\u0649'; + t['\uFCF8'] = '\u0639\u064A'; + t['\uFCF9'] = '\u063A\u0649'; + t['\uFCFA'] = '\u063A\u064A'; + t['\uFCFB'] = '\u0633\u0649'; + t['\uFCFC'] = '\u0633\u064A'; + t['\uFCFD'] = '\u0634\u0649'; + t['\uFCFE'] = '\u0634\u064A'; + t['\uFCFF'] = '\u062D\u0649'; + t['\uFD00'] = '\u062D\u064A'; + t['\uFD01'] = '\u062C\u0649'; + t['\uFD02'] = '\u062C\u064A'; + t['\uFD03'] = '\u062E\u0649'; + t['\uFD04'] = '\u062E\u064A'; + t['\uFD05'] = '\u0635\u0649'; + t['\uFD06'] = '\u0635\u064A'; + t['\uFD07'] = '\u0636\u0649'; + t['\uFD08'] = '\u0636\u064A'; + t['\uFD09'] = '\u0634\u062C'; + t['\uFD0A'] = '\u0634\u062D'; + t['\uFD0B'] = '\u0634\u062E'; + t['\uFD0C'] = '\u0634\u0645'; + t['\uFD0D'] = '\u0634\u0631'; + t['\uFD0E'] = '\u0633\u0631'; + t['\uFD0F'] = '\u0635\u0631'; + t['\uFD10'] = '\u0636\u0631'; + t['\uFD11'] = '\u0637\u0649'; + t['\uFD12'] = '\u0637\u064A'; + t['\uFD13'] = '\u0639\u0649'; + t['\uFD14'] = '\u0639\u064A'; + t['\uFD15'] = '\u063A\u0649'; + t['\uFD16'] = '\u063A\u064A'; + t['\uFD17'] = '\u0633\u0649'; + t['\uFD18'] = '\u0633\u064A'; + t['\uFD19'] = '\u0634\u0649'; + t['\uFD1A'] = '\u0634\u064A'; + t['\uFD1B'] = '\u062D\u0649'; + t['\uFD1C'] = '\u062D\u064A'; + t['\uFD1D'] = '\u062C\u0649'; + t['\uFD1E'] = '\u062C\u064A'; + t['\uFD1F'] = '\u062E\u0649'; + t['\uFD20'] = '\u062E\u064A'; + t['\uFD21'] = '\u0635\u0649'; + t['\uFD22'] = '\u0635\u064A'; + t['\uFD23'] = '\u0636\u0649'; + t['\uFD24'] = '\u0636\u064A'; + t['\uFD25'] = '\u0634\u062C'; + t['\uFD26'] = '\u0634\u062D'; + t['\uFD27'] = '\u0634\u062E'; + t['\uFD28'] = '\u0634\u0645'; + t['\uFD29'] = '\u0634\u0631'; + t['\uFD2A'] = '\u0633\u0631'; + t['\uFD2B'] = '\u0635\u0631'; + t['\uFD2C'] = '\u0636\u0631'; + t['\uFD2D'] = '\u0634\u062C'; + t['\uFD2E'] = '\u0634\u062D'; + t['\uFD2F'] = '\u0634\u062E'; + t['\uFD30'] = '\u0634\u0645'; + t['\uFD31'] = '\u0633\u0647'; + t['\uFD32'] = '\u0634\u0647'; + t['\uFD33'] = '\u0637\u0645'; + t['\uFD34'] = '\u0633\u062C'; + t['\uFD35'] = '\u0633\u062D'; + t['\uFD36'] = '\u0633\u062E'; + t['\uFD37'] = '\u0634\u062C'; + t['\uFD38'] = '\u0634\u062D'; + t['\uFD39'] = '\u0634\u062E'; + t['\uFD3A'] = '\u0637\u0645'; + t['\uFD3B'] = '\u0638\u0645'; + t['\uFD3C'] = '\u0627\u064B'; + t['\uFD3D'] = '\u0627\u064B'; + t['\uFD50'] = '\u062A\u062C\u0645'; + t['\uFD51'] = '\u062A\u062D\u062C'; + t['\uFD52'] = '\u062A\u062D\u062C'; + t['\uFD53'] = '\u062A\u062D\u0645'; + t['\uFD54'] = '\u062A\u062E\u0645'; + t['\uFD55'] = '\u062A\u0645\u062C'; + t['\uFD56'] = '\u062A\u0645\u062D'; + t['\uFD57'] = '\u062A\u0645\u062E'; + t['\uFD58'] = '\u062C\u0645\u062D'; + t['\uFD59'] = '\u062C\u0645\u062D'; + t['\uFD5A'] = '\u062D\u0645\u064A'; + t['\uFD5B'] = '\u062D\u0645\u0649'; + t['\uFD5C'] = '\u0633\u062D\u062C'; + t['\uFD5D'] = '\u0633\u062C\u062D'; + t['\uFD5E'] = '\u0633\u062C\u0649'; + t['\uFD5F'] = '\u0633\u0645\u062D'; + t['\uFD60'] = '\u0633\u0645\u062D'; + t['\uFD61'] = '\u0633\u0645\u062C'; + t['\uFD62'] = '\u0633\u0645\u0645'; + t['\uFD63'] = '\u0633\u0645\u0645'; + t['\uFD64'] = '\u0635\u062D\u062D'; + t['\uFD65'] = '\u0635\u062D\u062D'; + t['\uFD66'] = '\u0635\u0645\u0645'; + t['\uFD67'] = '\u0634\u062D\u0645'; + t['\uFD68'] = '\u0634\u062D\u0645'; + t['\uFD69'] = '\u0634\u062C\u064A'; + t['\uFD6A'] = '\u0634\u0645\u062E'; + t['\uFD6B'] = '\u0634\u0645\u062E'; + t['\uFD6C'] = '\u0634\u0645\u0645'; + t['\uFD6D'] = '\u0634\u0645\u0645'; + t['\uFD6E'] = '\u0636\u062D\u0649'; + t['\uFD6F'] = '\u0636\u062E\u0645'; + t['\uFD70'] = '\u0636\u062E\u0645'; + t['\uFD71'] = '\u0637\u0645\u062D'; + t['\uFD72'] = '\u0637\u0645\u062D'; + t['\uFD73'] = '\u0637\u0645\u0645'; + t['\uFD74'] = '\u0637\u0645\u064A'; + t['\uFD75'] = '\u0639\u062C\u0645'; + t['\uFD76'] = '\u0639\u0645\u0645'; + t['\uFD77'] = '\u0639\u0645\u0645'; + t['\uFD78'] = '\u0639\u0645\u0649'; + t['\uFD79'] = '\u063A\u0645\u0645'; + t['\uFD7A'] = '\u063A\u0645\u064A'; + t['\uFD7B'] = '\u063A\u0645\u0649'; + t['\uFD7C'] = '\u0641\u062E\u0645'; + t['\uFD7D'] = '\u0641\u062E\u0645'; + t['\uFD7E'] = '\u0642\u0645\u062D'; + t['\uFD7F'] = '\u0642\u0645\u0645'; + t['\uFD80'] = '\u0644\u062D\u0645'; + t['\uFD81'] = '\u0644\u062D\u064A'; + t['\uFD82'] = '\u0644\u062D\u0649'; + t['\uFD83'] = '\u0644\u062C\u062C'; + t['\uFD84'] = '\u0644\u062C\u062C'; + t['\uFD85'] = '\u0644\u062E\u0645'; + t['\uFD86'] = '\u0644\u062E\u0645'; + t['\uFD87'] = '\u0644\u0645\u062D'; + t['\uFD88'] = '\u0644\u0645\u062D'; + t['\uFD89'] = '\u0645\u062D\u062C'; + t['\uFD8A'] = '\u0645\u062D\u0645'; + t['\uFD8B'] = '\u0645\u062D\u064A'; + t['\uFD8C'] = '\u0645\u062C\u062D'; + t['\uFD8D'] = '\u0645\u062C\u0645'; + t['\uFD8E'] = '\u0645\u062E\u062C'; + t['\uFD8F'] = '\u0645\u062E\u0645'; + t['\uFD92'] = '\u0645\u062C\u062E'; + t['\uFD93'] = '\u0647\u0645\u062C'; + t['\uFD94'] = '\u0647\u0645\u0645'; + t['\uFD95'] = '\u0646\u062D\u0645'; + t['\uFD96'] = '\u0646\u062D\u0649'; + t['\uFD97'] = '\u0646\u062C\u0645'; + t['\uFD98'] = '\u0646\u062C\u0645'; + t['\uFD99'] = '\u0646\u062C\u0649'; + t['\uFD9A'] = '\u0646\u0645\u064A'; + t['\uFD9B'] = '\u0646\u0645\u0649'; + t['\uFD9C'] = '\u064A\u0645\u0645'; + t['\uFD9D'] = '\u064A\u0645\u0645'; + t['\uFD9E'] = '\u0628\u062E\u064A'; + t['\uFD9F'] = '\u062A\u062C\u064A'; + t['\uFDA0'] = '\u062A\u062C\u0649'; + t['\uFDA1'] = '\u062A\u062E\u064A'; + t['\uFDA2'] = '\u062A\u062E\u0649'; + t['\uFDA3'] = '\u062A\u0645\u064A'; + t['\uFDA4'] = '\u062A\u0645\u0649'; + t['\uFDA5'] = '\u062C\u0645\u064A'; + t['\uFDA6'] = '\u062C\u062D\u0649'; + t['\uFDA7'] = '\u062C\u0645\u0649'; + t['\uFDA8'] = '\u0633\u062E\u0649'; + t['\uFDA9'] = '\u0635\u062D\u064A'; + t['\uFDAA'] = '\u0634\u062D\u064A'; + t['\uFDAB'] = '\u0636\u062D\u064A'; + t['\uFDAC'] = '\u0644\u062C\u064A'; + t['\uFDAD'] = '\u0644\u0645\u064A'; + t['\uFDAE'] = '\u064A\u062D\u064A'; + t['\uFDAF'] = '\u064A\u062C\u064A'; + t['\uFDB0'] = '\u064A\u0645\u064A'; + t['\uFDB1'] = '\u0645\u0645\u064A'; + t['\uFDB2'] = '\u0642\u0645\u064A'; + t['\uFDB3'] = '\u0646\u062D\u064A'; + t['\uFDB4'] = '\u0642\u0645\u062D'; + t['\uFDB5'] = '\u0644\u062D\u0645'; + t['\uFDB6'] = '\u0639\u0645\u064A'; + t['\uFDB7'] = '\u0643\u0645\u064A'; + t['\uFDB8'] = '\u0646\u062C\u062D'; + t['\uFDB9'] = '\u0645\u062E\u064A'; + t['\uFDBA'] = '\u0644\u062C\u0645'; + t['\uFDBB'] = '\u0643\u0645\u0645'; + t['\uFDBC'] = '\u0644\u062C\u0645'; + t['\uFDBD'] = '\u0646\u062C\u062D'; + t['\uFDBE'] = '\u062C\u062D\u064A'; + t['\uFDBF'] = '\u062D\u062C\u064A'; + t['\uFDC0'] = '\u0645\u062C\u064A'; + t['\uFDC1'] = '\u0641\u0645\u064A'; + t['\uFDC2'] = '\u0628\u062D\u064A'; + t['\uFDC3'] = '\u0643\u0645\u0645'; + t['\uFDC4'] = '\u0639\u062C\u0645'; + t['\uFDC5'] = '\u0635\u0645\u0645'; + t['\uFDC6'] = '\u0633\u062E\u064A'; + t['\uFDC7'] = '\u0646\u062C\u064A'; + t['\uFE49'] = '\u203E'; + t['\uFE4A'] = '\u203E'; + t['\uFE4B'] = '\u203E'; + t['\uFE4C'] = '\u203E'; + t['\uFE4D'] = '\u005F'; + t['\uFE4E'] = '\u005F'; + t['\uFE4F'] = '\u005F'; + t['\uFE80'] = '\u0621'; + t['\uFE81'] = '\u0622'; + t['\uFE82'] = '\u0622'; + t['\uFE83'] = '\u0623'; + t['\uFE84'] = '\u0623'; + t['\uFE85'] = '\u0624'; + t['\uFE86'] = '\u0624'; + t['\uFE87'] = '\u0625'; + t['\uFE88'] = '\u0625'; + t['\uFE89'] = '\u0626'; + t['\uFE8A'] = '\u0626'; + t['\uFE8B'] = '\u0626'; + t['\uFE8C'] = '\u0626'; + t['\uFE8D'] = '\u0627'; + t['\uFE8E'] = '\u0627'; + t['\uFE8F'] = '\u0628'; + t['\uFE90'] = '\u0628'; + t['\uFE91'] = '\u0628'; + t['\uFE92'] = '\u0628'; + t['\uFE93'] = '\u0629'; + t['\uFE94'] = '\u0629'; + t['\uFE95'] = '\u062A'; + t['\uFE96'] = '\u062A'; + t['\uFE97'] = '\u062A'; + t['\uFE98'] = '\u062A'; + t['\uFE99'] = '\u062B'; + t['\uFE9A'] = '\u062B'; + t['\uFE9B'] = '\u062B'; + t['\uFE9C'] = '\u062B'; + t['\uFE9D'] = '\u062C'; + t['\uFE9E'] = '\u062C'; + t['\uFE9F'] = '\u062C'; + t['\uFEA0'] = '\u062C'; + t['\uFEA1'] = '\u062D'; + t['\uFEA2'] = '\u062D'; + t['\uFEA3'] = '\u062D'; + t['\uFEA4'] = '\u062D'; + t['\uFEA5'] = '\u062E'; + t['\uFEA6'] = '\u062E'; + t['\uFEA7'] = '\u062E'; + t['\uFEA8'] = '\u062E'; + t['\uFEA9'] = '\u062F'; + t['\uFEAA'] = '\u062F'; + t['\uFEAB'] = '\u0630'; + t['\uFEAC'] = '\u0630'; + t['\uFEAD'] = '\u0631'; + t['\uFEAE'] = '\u0631'; + t['\uFEAF'] = '\u0632'; + t['\uFEB0'] = '\u0632'; + t['\uFEB1'] = '\u0633'; + t['\uFEB2'] = '\u0633'; + t['\uFEB3'] = '\u0633'; + t['\uFEB4'] = '\u0633'; + t['\uFEB5'] = '\u0634'; + t['\uFEB6'] = '\u0634'; + t['\uFEB7'] = '\u0634'; + t['\uFEB8'] = '\u0634'; + t['\uFEB9'] = '\u0635'; + t['\uFEBA'] = '\u0635'; + t['\uFEBB'] = '\u0635'; + t['\uFEBC'] = '\u0635'; + t['\uFEBD'] = '\u0636'; + t['\uFEBE'] = '\u0636'; + t['\uFEBF'] = '\u0636'; + t['\uFEC0'] = '\u0636'; + t['\uFEC1'] = '\u0637'; + t['\uFEC2'] = '\u0637'; + t['\uFEC3'] = '\u0637'; + t['\uFEC4'] = '\u0637'; + t['\uFEC5'] = '\u0638'; + t['\uFEC6'] = '\u0638'; + t['\uFEC7'] = '\u0638'; + t['\uFEC8'] = '\u0638'; + t['\uFEC9'] = '\u0639'; + t['\uFECA'] = '\u0639'; + t['\uFECB'] = '\u0639'; + t['\uFECC'] = '\u0639'; + t['\uFECD'] = '\u063A'; + t['\uFECE'] = '\u063A'; + t['\uFECF'] = '\u063A'; + t['\uFED0'] = '\u063A'; + t['\uFED1'] = '\u0641'; + t['\uFED2'] = '\u0641'; + t['\uFED3'] = '\u0641'; + t['\uFED4'] = '\u0641'; + t['\uFED5'] = '\u0642'; + t['\uFED6'] = '\u0642'; + t['\uFED7'] = '\u0642'; + t['\uFED8'] = '\u0642'; + t['\uFED9'] = '\u0643'; + t['\uFEDA'] = '\u0643'; + t['\uFEDB'] = '\u0643'; + t['\uFEDC'] = '\u0643'; + t['\uFEDD'] = '\u0644'; + t['\uFEDE'] = '\u0644'; + t['\uFEDF'] = '\u0644'; + t['\uFEE0'] = '\u0644'; + t['\uFEE1'] = '\u0645'; + t['\uFEE2'] = '\u0645'; + t['\uFEE3'] = '\u0645'; + t['\uFEE4'] = '\u0645'; + t['\uFEE5'] = '\u0646'; + t['\uFEE6'] = '\u0646'; + t['\uFEE7'] = '\u0646'; + t['\uFEE8'] = '\u0646'; + t['\uFEE9'] = '\u0647'; + t['\uFEEA'] = '\u0647'; + t['\uFEEB'] = '\u0647'; + t['\uFEEC'] = '\u0647'; + t['\uFEED'] = '\u0648'; + t['\uFEEE'] = '\u0648'; + t['\uFEEF'] = '\u0649'; + t['\uFEF0'] = '\u0649'; + t['\uFEF1'] = '\u064A'; + t['\uFEF2'] = '\u064A'; + t['\uFEF3'] = '\u064A'; + t['\uFEF4'] = '\u064A'; + t['\uFEF5'] = '\u0644\u0622'; + t['\uFEF6'] = '\u0644\u0622'; + t['\uFEF7'] = '\u0644\u0623'; + t['\uFEF8'] = '\u0644\u0623'; + t['\uFEF9'] = '\u0644\u0625'; + t['\uFEFA'] = '\u0644\u0625'; + t['\uFEFB'] = '\u0644\u0627'; + t['\uFEFC'] = '\u0644\u0627'; + }); + function reverseIfRtl(chars) { + var charsLength = chars.length; + if (charsLength <= 1 || !isRTLRangeFor(chars.charCodeAt(0))) { + return chars; + } + var s = ''; + for (var ii = charsLength - 1; ii >= 0; ii--) { + s += chars[ii]; + } + return s; + } + exports.mapSpecialUnicodeValues = mapSpecialUnicodeValues; + exports.reverseIfRtl = reverseIfRtl; + exports.getUnicodeRangeFor = getUnicodeRangeFor; + exports.getNormalizedUnicodes = getNormalizedUnicodes; + exports.getUnicodeForGlyph = getUnicodeForGlyph; + })); + (function (root, factory) { + factory(root.pdfjsCoreStream = {}, root.pdfjsSharedUtil, root.pdfjsCorePrimitives, root.pdfjsCoreJbig2, root.pdfjsCoreJpg, root.pdfjsCoreJpx); + }(this, function (exports, sharedUtil, corePrimitives, coreJbig2, coreJpg, coreJpx) { + var Util = sharedUtil.Util; + var error = sharedUtil.error; + var info = sharedUtil.info; + var isInt = sharedUtil.isInt; + var isArray = sharedUtil.isArray; + var createObjectURL = sharedUtil.createObjectURL; + var shadow = sharedUtil.shadow; + var warn = sharedUtil.warn; + var isSpace = sharedUtil.isSpace; + var Dict = corePrimitives.Dict; + var isDict = corePrimitives.isDict; + var isStream = corePrimitives.isStream; + var Jbig2Image = coreJbig2.Jbig2Image; + var JpegImage = coreJpg.JpegImage; + var JpxImage = coreJpx.JpxImage; + var Stream = function StreamClosure() { + function Stream(arrayBuffer, start, length, dict) { + this.bytes = arrayBuffer instanceof Uint8Array ? arrayBuffer : new Uint8Array(arrayBuffer); + this.start = start || 0; + this.pos = this.start; + this.end = start + length || this.bytes.length; + this.dict = dict; + } + Stream.prototype = { + get length() { + return this.end - this.start; + }, + get isEmpty() { + return this.length === 0; + }, + getByte: function Stream_getByte() { + if (this.pos >= this.end) { + return -1; + } + return this.bytes[this.pos++]; + }, + getUint16: function Stream_getUint16() { + var b0 = this.getByte(); + var b1 = this.getByte(); + if (b0 === -1 || b1 === -1) { + return -1; + } + return (b0 << 8) + b1; + }, + getInt32: function Stream_getInt32() { + var b0 = this.getByte(); + var b1 = this.getByte(); + var b2 = this.getByte(); + var b3 = this.getByte(); + return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; + }, + getBytes: function Stream_getBytes(length) { + var bytes = this.bytes; + var pos = this.pos; + var strEnd = this.end; + if (!length) { + return bytes.subarray(pos, strEnd); + } + var end = pos + length; + if (end > strEnd) { + end = strEnd; + } + this.pos = end; + return bytes.subarray(pos, end); + }, + peekByte: function Stream_peekByte() { + var peekedByte = this.getByte(); + this.pos--; + return peekedByte; + }, + peekBytes: function Stream_peekBytes(length) { + var bytes = this.getBytes(length); + this.pos -= bytes.length; + return bytes; + }, + skip: function Stream_skip(n) { + if (!n) { + n = 1; + } + this.pos += n; + }, + reset: function Stream_reset() { + this.pos = this.start; + }, + moveStart: function Stream_moveStart() { + this.start = this.pos; + }, + makeSubStream: function Stream_makeSubStream(start, length, dict) { + return new Stream(this.bytes.buffer, start, length, dict); + }, + isStream: true + }; + return Stream; + }(); + var StringStream = function StringStreamClosure() { + function StringStream(str) { + var length = str.length; + var bytes = new Uint8Array(length); + for (var n = 0; n < length; ++n) { + bytes[n] = str.charCodeAt(n); + } + Stream.call(this, bytes); + } + StringStream.prototype = Stream.prototype; + return StringStream; + }(); + var DecodeStream = function DecodeStreamClosure() { + var emptyBuffer = new Uint8Array(0); + function DecodeStream(maybeMinBufferLength) { + this.pos = 0; + this.bufferLength = 0; + this.eof = false; + this.buffer = emptyBuffer; + this.minBufferLength = 512; + if (maybeMinBufferLength) { + while (this.minBufferLength < maybeMinBufferLength) { + this.minBufferLength *= 2; + } + } + } + DecodeStream.prototype = { + get isEmpty() { + while (!this.eof && this.bufferLength === 0) { + this.readBlock(); + } + return this.bufferLength === 0; + }, + ensureBuffer: function DecodeStream_ensureBuffer(requested) { + var buffer = this.buffer; + if (requested <= buffer.byteLength) { + return buffer; + } + var size = this.minBufferLength; + while (size < requested) { + size *= 2; + } + var buffer2 = new Uint8Array(size); + buffer2.set(buffer); + return this.buffer = buffer2; + }, + getByte: function DecodeStream_getByte() { + var pos = this.pos; + while (this.bufferLength <= pos) { + if (this.eof) { + return -1; + } + this.readBlock(); + } + return this.buffer[this.pos++]; + }, + getUint16: function DecodeStream_getUint16() { + var b0 = this.getByte(); + var b1 = this.getByte(); + if (b0 === -1 || b1 === -1) { + return -1; + } + return (b0 << 8) + b1; + }, + getInt32: function DecodeStream_getInt32() { + var b0 = this.getByte(); + var b1 = this.getByte(); + var b2 = this.getByte(); + var b3 = this.getByte(); + return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; + }, + getBytes: function DecodeStream_getBytes(length) { + var end, pos = this.pos; + if (length) { + this.ensureBuffer(pos + length); + end = pos + length; + while (!this.eof && this.bufferLength < end) { + this.readBlock(); + } + var bufEnd = this.bufferLength; + if (end > bufEnd) { + end = bufEnd; + } + } else { + while (!this.eof) { + this.readBlock(); + } + end = this.bufferLength; + } + this.pos = end; + return this.buffer.subarray(pos, end); + }, + peekByte: function DecodeStream_peekByte() { + var peekedByte = this.getByte(); + this.pos--; + return peekedByte; + }, + peekBytes: function DecodeStream_peekBytes(length) { + var bytes = this.getBytes(length); + this.pos -= bytes.length; + return bytes; + }, + makeSubStream: function DecodeStream_makeSubStream(start, length, dict) { + var end = start + length; + while (this.bufferLength <= end && !this.eof) { + this.readBlock(); + } + return new Stream(this.buffer, start, length, dict); + }, + skip: function DecodeStream_skip(n) { + if (!n) { + n = 1; + } + this.pos += n; + }, + reset: function DecodeStream_reset() { + this.pos = 0; + }, + getBaseStreams: function DecodeStream_getBaseStreams() { + if (this.str && this.str.getBaseStreams) { + return this.str.getBaseStreams(); + } + return []; + } + }; + return DecodeStream; + }(); + var StreamsSequenceStream = function StreamsSequenceStreamClosure() { + function StreamsSequenceStream(streams) { + this.streams = streams; + DecodeStream.call(this, null); + } + StreamsSequenceStream.prototype = Object.create(DecodeStream.prototype); + StreamsSequenceStream.prototype.readBlock = function streamSequenceStreamReadBlock() { + var streams = this.streams; + if (streams.length === 0) { + this.eof = true; + return; + } + var stream = streams.shift(); + var chunk = stream.getBytes(); + var bufferLength = this.bufferLength; + var newLength = bufferLength + chunk.length; + var buffer = this.ensureBuffer(newLength); + buffer.set(chunk, bufferLength); + this.bufferLength = newLength; + }; + StreamsSequenceStream.prototype.getBaseStreams = function StreamsSequenceStream_getBaseStreams() { + var baseStreams = []; + for (var i = 0, ii = this.streams.length; i < ii; i++) { + var stream = this.streams[i]; + if (stream.getBaseStreams) { + Util.appendToArray(baseStreams, stream.getBaseStreams()); + } + } + return baseStreams; + }; + return StreamsSequenceStream; + }(); + var FlateStream = function FlateStreamClosure() { + var codeLenCodeMap = new Int32Array([ + 16, + 17, + 18, + 0, + 8, + 7, + 9, + 6, + 10, + 5, + 11, + 4, + 12, + 3, + 13, + 2, + 14, + 1, + 15 + ]); + var lengthDecode = new Int32Array([ + 0x00003, + 0x00004, + 0x00005, + 0x00006, + 0x00007, + 0x00008, + 0x00009, + 0x0000a, + 0x1000b, + 0x1000d, + 0x1000f, + 0x10011, + 0x20013, + 0x20017, + 0x2001b, + 0x2001f, + 0x30023, + 0x3002b, + 0x30033, + 0x3003b, + 0x40043, + 0x40053, + 0x40063, + 0x40073, + 0x50083, + 0x500a3, + 0x500c3, + 0x500e3, + 0x00102, + 0x00102, + 0x00102 + ]); + var distDecode = new Int32Array([ + 0x00001, + 0x00002, + 0x00003, + 0x00004, + 0x10005, + 0x10007, + 0x20009, + 0x2000d, + 0x30011, + 0x30019, + 0x40021, + 0x40031, + 0x50041, + 0x50061, + 0x60081, + 0x600c1, + 0x70101, + 0x70181, + 0x80201, + 0x80301, + 0x90401, + 0x90601, + 0xa0801, + 0xa0c01, + 0xb1001, + 0xb1801, + 0xc2001, + 0xc3001, + 0xd4001, + 0xd6001 + ]); + var fixedLitCodeTab = [ + new Int32Array([ + 0x70100, + 0x80050, + 0x80010, + 0x80118, + 0x70110, + 0x80070, + 0x80030, + 0x900c0, + 0x70108, + 0x80060, + 0x80020, + 0x900a0, + 0x80000, + 0x80080, + 0x80040, + 0x900e0, + 0x70104, + 0x80058, + 0x80018, + 0x90090, + 0x70114, + 0x80078, + 0x80038, + 0x900d0, + 0x7010c, + 0x80068, + 0x80028, + 0x900b0, + 0x80008, + 0x80088, + 0x80048, + 0x900f0, + 0x70102, + 0x80054, + 0x80014, + 0x8011c, + 0x70112, + 0x80074, + 0x80034, + 0x900c8, + 0x7010a, + 0x80064, + 0x80024, + 0x900a8, + 0x80004, + 0x80084, + 0x80044, + 0x900e8, + 0x70106, + 0x8005c, + 0x8001c, + 0x90098, + 0x70116, + 0x8007c, + 0x8003c, + 0x900d8, + 0x7010e, + 0x8006c, + 0x8002c, + 0x900b8, + 0x8000c, + 0x8008c, + 0x8004c, + 0x900f8, + 0x70101, + 0x80052, + 0x80012, + 0x8011a, + 0x70111, + 0x80072, + 0x80032, + 0x900c4, + 0x70109, + 0x80062, + 0x80022, + 0x900a4, + 0x80002, + 0x80082, + 0x80042, + 0x900e4, + 0x70105, + 0x8005a, + 0x8001a, + 0x90094, + 0x70115, + 0x8007a, + 0x8003a, + 0x900d4, + 0x7010d, + 0x8006a, + 0x8002a, + 0x900b4, + 0x8000a, + 0x8008a, + 0x8004a, + 0x900f4, + 0x70103, + 0x80056, + 0x80016, + 0x8011e, + 0x70113, + 0x80076, + 0x80036, + 0x900cc, + 0x7010b, + 0x80066, + 0x80026, + 0x900ac, + 0x80006, + 0x80086, + 0x80046, + 0x900ec, + 0x70107, + 0x8005e, + 0x8001e, + 0x9009c, + 0x70117, + 0x8007e, + 0x8003e, + 0x900dc, + 0x7010f, + 0x8006e, + 0x8002e, + 0x900bc, + 0x8000e, + 0x8008e, + 0x8004e, + 0x900fc, + 0x70100, + 0x80051, + 0x80011, + 0x80119, + 0x70110, + 0x80071, + 0x80031, + 0x900c2, + 0x70108, + 0x80061, + 0x80021, + 0x900a2, + 0x80001, + 0x80081, + 0x80041, + 0x900e2, + 0x70104, + 0x80059, + 0x80019, + 0x90092, + 0x70114, + 0x80079, + 0x80039, + 0x900d2, + 0x7010c, + 0x80069, + 0x80029, + 0x900b2, + 0x80009, + 0x80089, + 0x80049, + 0x900f2, + 0x70102, + 0x80055, + 0x80015, + 0x8011d, + 0x70112, + 0x80075, + 0x80035, + 0x900ca, + 0x7010a, + 0x80065, + 0x80025, + 0x900aa, + 0x80005, + 0x80085, + 0x80045, + 0x900ea, + 0x70106, + 0x8005d, + 0x8001d, + 0x9009a, + 0x70116, + 0x8007d, + 0x8003d, + 0x900da, + 0x7010e, + 0x8006d, + 0x8002d, + 0x900ba, + 0x8000d, + 0x8008d, + 0x8004d, + 0x900fa, + 0x70101, + 0x80053, + 0x80013, + 0x8011b, + 0x70111, + 0x80073, + 0x80033, + 0x900c6, + 0x70109, + 0x80063, + 0x80023, + 0x900a6, + 0x80003, + 0x80083, + 0x80043, + 0x900e6, + 0x70105, + 0x8005b, + 0x8001b, + 0x90096, + 0x70115, + 0x8007b, + 0x8003b, + 0x900d6, + 0x7010d, + 0x8006b, + 0x8002b, + 0x900b6, + 0x8000b, + 0x8008b, + 0x8004b, + 0x900f6, + 0x70103, + 0x80057, + 0x80017, + 0x8011f, + 0x70113, + 0x80077, + 0x80037, + 0x900ce, + 0x7010b, + 0x80067, + 0x80027, + 0x900ae, + 0x80007, + 0x80087, + 0x80047, + 0x900ee, + 0x70107, + 0x8005f, + 0x8001f, + 0x9009e, + 0x70117, + 0x8007f, + 0x8003f, + 0x900de, + 0x7010f, + 0x8006f, + 0x8002f, + 0x900be, + 0x8000f, + 0x8008f, + 0x8004f, + 0x900fe, + 0x70100, + 0x80050, + 0x80010, + 0x80118, + 0x70110, + 0x80070, + 0x80030, + 0x900c1, + 0x70108, + 0x80060, + 0x80020, + 0x900a1, + 0x80000, + 0x80080, + 0x80040, + 0x900e1, + 0x70104, + 0x80058, + 0x80018, + 0x90091, + 0x70114, + 0x80078, + 0x80038, + 0x900d1, + 0x7010c, + 0x80068, + 0x80028, + 0x900b1, + 0x80008, + 0x80088, + 0x80048, + 0x900f1, + 0x70102, + 0x80054, + 0x80014, + 0x8011c, + 0x70112, + 0x80074, + 0x80034, + 0x900c9, + 0x7010a, + 0x80064, + 0x80024, + 0x900a9, + 0x80004, + 0x80084, + 0x80044, + 0x900e9, + 0x70106, + 0x8005c, + 0x8001c, + 0x90099, + 0x70116, + 0x8007c, + 0x8003c, + 0x900d9, + 0x7010e, + 0x8006c, + 0x8002c, + 0x900b9, + 0x8000c, + 0x8008c, + 0x8004c, + 0x900f9, + 0x70101, + 0x80052, + 0x80012, + 0x8011a, + 0x70111, + 0x80072, + 0x80032, + 0x900c5, + 0x70109, + 0x80062, + 0x80022, + 0x900a5, + 0x80002, + 0x80082, + 0x80042, + 0x900e5, + 0x70105, + 0x8005a, + 0x8001a, + 0x90095, + 0x70115, + 0x8007a, + 0x8003a, + 0x900d5, + 0x7010d, + 0x8006a, + 0x8002a, + 0x900b5, + 0x8000a, + 0x8008a, + 0x8004a, + 0x900f5, + 0x70103, + 0x80056, + 0x80016, + 0x8011e, + 0x70113, + 0x80076, + 0x80036, + 0x900cd, + 0x7010b, + 0x80066, + 0x80026, + 0x900ad, + 0x80006, + 0x80086, + 0x80046, + 0x900ed, + 0x70107, + 0x8005e, + 0x8001e, + 0x9009d, + 0x70117, + 0x8007e, + 0x8003e, + 0x900dd, + 0x7010f, + 0x8006e, + 0x8002e, + 0x900bd, + 0x8000e, + 0x8008e, + 0x8004e, + 0x900fd, + 0x70100, + 0x80051, + 0x80011, + 0x80119, + 0x70110, + 0x80071, + 0x80031, + 0x900c3, + 0x70108, + 0x80061, + 0x80021, + 0x900a3, + 0x80001, + 0x80081, + 0x80041, + 0x900e3, + 0x70104, + 0x80059, + 0x80019, + 0x90093, + 0x70114, + 0x80079, + 0x80039, + 0x900d3, + 0x7010c, + 0x80069, + 0x80029, + 0x900b3, + 0x80009, + 0x80089, + 0x80049, + 0x900f3, + 0x70102, + 0x80055, + 0x80015, + 0x8011d, + 0x70112, + 0x80075, + 0x80035, + 0x900cb, + 0x7010a, + 0x80065, + 0x80025, + 0x900ab, + 0x80005, + 0x80085, + 0x80045, + 0x900eb, + 0x70106, + 0x8005d, + 0x8001d, + 0x9009b, + 0x70116, + 0x8007d, + 0x8003d, + 0x900db, + 0x7010e, + 0x8006d, + 0x8002d, + 0x900bb, + 0x8000d, + 0x8008d, + 0x8004d, + 0x900fb, + 0x70101, + 0x80053, + 0x80013, + 0x8011b, + 0x70111, + 0x80073, + 0x80033, + 0x900c7, + 0x70109, + 0x80063, + 0x80023, + 0x900a7, + 0x80003, + 0x80083, + 0x80043, + 0x900e7, + 0x70105, + 0x8005b, + 0x8001b, + 0x90097, + 0x70115, + 0x8007b, + 0x8003b, + 0x900d7, + 0x7010d, + 0x8006b, + 0x8002b, + 0x900b7, + 0x8000b, + 0x8008b, + 0x8004b, + 0x900f7, + 0x70103, + 0x80057, + 0x80017, + 0x8011f, + 0x70113, + 0x80077, + 0x80037, + 0x900cf, + 0x7010b, + 0x80067, + 0x80027, + 0x900af, + 0x80007, + 0x80087, + 0x80047, + 0x900ef, + 0x70107, + 0x8005f, + 0x8001f, + 0x9009f, + 0x70117, + 0x8007f, + 0x8003f, + 0x900df, + 0x7010f, + 0x8006f, + 0x8002f, + 0x900bf, + 0x8000f, + 0x8008f, + 0x8004f, + 0x900ff + ]), + 9 + ]; + var fixedDistCodeTab = [ + new Int32Array([ + 0x50000, + 0x50010, + 0x50008, + 0x50018, + 0x50004, + 0x50014, + 0x5000c, + 0x5001c, + 0x50002, + 0x50012, + 0x5000a, + 0x5001a, + 0x50006, + 0x50016, + 0x5000e, + 0x00000, + 0x50001, + 0x50011, + 0x50009, + 0x50019, + 0x50005, + 0x50015, + 0x5000d, + 0x5001d, + 0x50003, + 0x50013, + 0x5000b, + 0x5001b, + 0x50007, + 0x50017, + 0x5000f, + 0x00000 + ]), + 5 + ]; + function FlateStream(str, maybeLength) { + this.str = str; + this.dict = str.dict; + var cmf = str.getByte(); + var flg = str.getByte(); + if (cmf === -1 || flg === -1) { + error('Invalid header in flate stream: ' + cmf + ', ' + flg); + } + if ((cmf & 0x0f) !== 0x08) { + error('Unknown compression method in flate stream: ' + cmf + ', ' + flg); + } + if (((cmf << 8) + flg) % 31 !== 0) { + error('Bad FCHECK in flate stream: ' + cmf + ', ' + flg); + } + if (flg & 0x20) { + error('FDICT bit set in flate stream: ' + cmf + ', ' + flg); + } + this.codeSize = 0; + this.codeBuf = 0; + DecodeStream.call(this, maybeLength); + } + FlateStream.prototype = Object.create(DecodeStream.prototype); + FlateStream.prototype.getBits = function FlateStream_getBits(bits) { + var str = this.str; + var codeSize = this.codeSize; + var codeBuf = this.codeBuf; + var b; + while (codeSize < bits) { + if ((b = str.getByte()) === -1) { + error('Bad encoding in flate stream'); + } + codeBuf |= b << codeSize; + codeSize += 8; + } + b = codeBuf & (1 << bits) - 1; + this.codeBuf = codeBuf >> bits; + this.codeSize = codeSize -= bits; + return b; + }; + FlateStream.prototype.getCode = function FlateStream_getCode(table) { + var str = this.str; + var codes = table[0]; + var maxLen = table[1]; + var codeSize = this.codeSize; + var codeBuf = this.codeBuf; + var b; + while (codeSize < maxLen) { + if ((b = str.getByte()) === -1) { + break; + } + codeBuf |= b << codeSize; + codeSize += 8; + } + var code = codes[codeBuf & (1 << maxLen) - 1]; + var codeLen = code >> 16; + var codeVal = code & 0xffff; + if (codeLen < 1 || codeSize < codeLen) { + error('Bad encoding in flate stream'); + } + this.codeBuf = codeBuf >> codeLen; + this.codeSize = codeSize - codeLen; + return codeVal; + }; + FlateStream.prototype.generateHuffmanTable = function flateStreamGenerateHuffmanTable(lengths) { + var n = lengths.length; + var maxLen = 0; + var i; + for (i = 0; i < n; ++i) { + if (lengths[i] > maxLen) { + maxLen = lengths[i]; + } + } + var size = 1 << maxLen; + var codes = new Int32Array(size); + for (var len = 1, code = 0, skip = 2; len <= maxLen; ++len, code <<= 1, skip <<= 1) { + for (var val = 0; val < n; ++val) { + if (lengths[val] === len) { + var code2 = 0; + var t = code; + for (i = 0; i < len; ++i) { + code2 = code2 << 1 | t & 1; + t >>= 1; + } + for (i = code2; i < size; i += skip) { + codes[i] = len << 16 | val; + } + ++code; + } + } + } + return [ + codes, + maxLen + ]; + }; + FlateStream.prototype.readBlock = function FlateStream_readBlock() { + var buffer, len; + var str = this.str; + var hdr = this.getBits(3); + if (hdr & 1) { + this.eof = true; + } + hdr >>= 1; + if (hdr === 0) { + var b; + if ((b = str.getByte()) === -1) { + error('Bad block header in flate stream'); + } + var blockLen = b; + if ((b = str.getByte()) === -1) { + error('Bad block header in flate stream'); + } + blockLen |= b << 8; + if ((b = str.getByte()) === -1) { + error('Bad block header in flate stream'); + } + var check = b; + if ((b = str.getByte()) === -1) { + error('Bad block header in flate stream'); + } + check |= b << 8; + if (check !== (~blockLen & 0xffff) && (blockLen !== 0 || check !== 0)) { + error('Bad uncompressed block length in flate stream'); + } + this.codeBuf = 0; + this.codeSize = 0; + var bufferLength = this.bufferLength; + buffer = this.ensureBuffer(bufferLength + blockLen); + var end = bufferLength + blockLen; + this.bufferLength = end; + if (blockLen === 0) { + if (str.peekByte() === -1) { + this.eof = true; + } + } else { + for (var n = bufferLength; n < end; ++n) { + if ((b = str.getByte()) === -1) { + this.eof = true; + break; + } + buffer[n] = b; + } + } + return; + } + var litCodeTable; + var distCodeTable; + if (hdr === 1) { + litCodeTable = fixedLitCodeTab; + distCodeTable = fixedDistCodeTab; + } else if (hdr === 2) { + var numLitCodes = this.getBits(5) + 257; + var numDistCodes = this.getBits(5) + 1; + var numCodeLenCodes = this.getBits(4) + 4; + var codeLenCodeLengths = new Uint8Array(codeLenCodeMap.length); + var i; + for (i = 0; i < numCodeLenCodes; ++i) { + codeLenCodeLengths[codeLenCodeMap[i]] = this.getBits(3); + } + var codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths); + len = 0; + i = 0; + var codes = numLitCodes + numDistCodes; + var codeLengths = new Uint8Array(codes); + var bitsLength, bitsOffset, what; + while (i < codes) { + var code = this.getCode(codeLenCodeTab); + if (code === 16) { + bitsLength = 2; + bitsOffset = 3; + what = len; + } else if (code === 17) { + bitsLength = 3; + bitsOffset = 3; + what = len = 0; + } else if (code === 18) { + bitsLength = 7; + bitsOffset = 11; + what = len = 0; + } else { + codeLengths[i++] = len = code; + continue; + } + var repeatLength = this.getBits(bitsLength) + bitsOffset; + while (repeatLength-- > 0) { + codeLengths[i++] = what; + } + } + litCodeTable = this.generateHuffmanTable(codeLengths.subarray(0, numLitCodes)); + distCodeTable = this.generateHuffmanTable(codeLengths.subarray(numLitCodes, codes)); + } else { + error('Unknown block type in flate stream'); + } + buffer = this.buffer; + var limit = buffer ? buffer.length : 0; + var pos = this.bufferLength; + while (true) { + var code1 = this.getCode(litCodeTable); + if (code1 < 256) { + if (pos + 1 >= limit) { + buffer = this.ensureBuffer(pos + 1); + limit = buffer.length; + } + buffer[pos++] = code1; + continue; + } + if (code1 === 256) { + this.bufferLength = pos; + return; + } + code1 -= 257; + code1 = lengthDecode[code1]; + var code2 = code1 >> 16; + if (code2 > 0) { + code2 = this.getBits(code2); + } + len = (code1 & 0xffff) + code2; + code1 = this.getCode(distCodeTable); + code1 = distDecode[code1]; + code2 = code1 >> 16; + if (code2 > 0) { + code2 = this.getBits(code2); + } + var dist = (code1 & 0xffff) + code2; + if (pos + len >= limit) { + buffer = this.ensureBuffer(pos + len); + limit = buffer.length; + } + for (var k = 0; k < len; ++k, ++pos) { + buffer[pos] = buffer[pos - dist]; + } + } + }; + return FlateStream; + }(); + var PredictorStream = function PredictorStreamClosure() { + function PredictorStream(str, maybeLength, params) { + if (!isDict(params)) { + return str; + } + var predictor = this.predictor = params.get('Predictor') || 1; + if (predictor <= 1) { + return str; + } + if (predictor !== 2 && (predictor < 10 || predictor > 15)) { + error('Unsupported predictor: ' + predictor); + } + if (predictor === 2) { + this.readBlock = this.readBlockTiff; + } else { + this.readBlock = this.readBlockPng; + } + this.str = str; + this.dict = str.dict; + var colors = this.colors = params.get('Colors') || 1; + var bits = this.bits = params.get('BitsPerComponent') || 8; + var columns = this.columns = params.get('Columns') || 1; + this.pixBytes = colors * bits + 7 >> 3; + this.rowBytes = columns * colors * bits + 7 >> 3; + DecodeStream.call(this, maybeLength); + return this; + } + PredictorStream.prototype = Object.create(DecodeStream.prototype); + PredictorStream.prototype.readBlockTiff = function predictorStreamReadBlockTiff() { + var rowBytes = this.rowBytes; + var bufferLength = this.bufferLength; + var buffer = this.ensureBuffer(bufferLength + rowBytes); + var bits = this.bits; + var colors = this.colors; + var rawBytes = this.str.getBytes(rowBytes); + this.eof = !rawBytes.length; + if (this.eof) { + return; + } + var inbuf = 0, outbuf = 0; + var inbits = 0, outbits = 0; + var pos = bufferLength; + var i; + if (bits === 1 && colors === 1) { + for (i = 0; i < rowBytes; ++i) { + var c = rawBytes[i] ^ inbuf; + c ^= c >> 1; + c ^= c >> 2; + c ^= c >> 4; + inbuf = (c & 1) << 7; + buffer[pos++] = c; + } + } else if (bits === 8) { + for (i = 0; i < colors; ++i) { + buffer[pos++] = rawBytes[i]; + } + for (; i < rowBytes; ++i) { + buffer[pos] = buffer[pos - colors] + rawBytes[i]; + pos++; + } + } else { + var compArray = new Uint8Array(colors + 1); + var bitMask = (1 << bits) - 1; + var j = 0, k = bufferLength; + var columns = this.columns; + for (i = 0; i < columns; ++i) { + for (var kk = 0; kk < colors; ++kk) { + if (inbits < bits) { + inbuf = inbuf << 8 | rawBytes[j++] & 0xFF; + inbits += 8; + } + compArray[kk] = compArray[kk] + (inbuf >> inbits - bits) & bitMask; + inbits -= bits; + outbuf = outbuf << bits | compArray[kk]; + outbits += bits; + if (outbits >= 8) { + buffer[k++] = outbuf >> outbits - 8 & 0xFF; + outbits -= 8; + } + } + } + if (outbits > 0) { + buffer[k++] = (outbuf << 8 - outbits) + (inbuf & (1 << 8 - outbits) - 1); + } + } + this.bufferLength += rowBytes; + }; + PredictorStream.prototype.readBlockPng = function predictorStreamReadBlockPng() { + var rowBytes = this.rowBytes; + var pixBytes = this.pixBytes; + var predictor = this.str.getByte(); + var rawBytes = this.str.getBytes(rowBytes); + this.eof = !rawBytes.length; + if (this.eof) { + return; + } + var bufferLength = this.bufferLength; + var buffer = this.ensureBuffer(bufferLength + rowBytes); + var prevRow = buffer.subarray(bufferLength - rowBytes, bufferLength); + if (prevRow.length === 0) { + prevRow = new Uint8Array(rowBytes); + } + var i, j = bufferLength, up, c; + switch (predictor) { + case 0: + for (i = 0; i < rowBytes; ++i) { + buffer[j++] = rawBytes[i]; + } + break; + case 1: + for (i = 0; i < pixBytes; ++i) { + buffer[j++] = rawBytes[i]; + } + for (; i < rowBytes; ++i) { + buffer[j] = buffer[j - pixBytes] + rawBytes[i] & 0xFF; + j++; + } + break; + case 2: + for (i = 0; i < rowBytes; ++i) { + buffer[j++] = prevRow[i] + rawBytes[i] & 0xFF; + } + break; + case 3: + for (i = 0; i < pixBytes; ++i) { + buffer[j++] = (prevRow[i] >> 1) + rawBytes[i]; + } + for (; i < rowBytes; ++i) { + buffer[j] = (prevRow[i] + buffer[j - pixBytes] >> 1) + rawBytes[i] & 0xFF; + j++; + } + break; + case 4: + for (i = 0; i < pixBytes; ++i) { + up = prevRow[i]; + c = rawBytes[i]; + buffer[j++] = up + c; + } + for (; i < rowBytes; ++i) { + up = prevRow[i]; + var upLeft = prevRow[i - pixBytes]; + var left = buffer[j - pixBytes]; + var p = left + up - upLeft; + var pa = p - left; + if (pa < 0) { + pa = -pa; + } + var pb = p - up; + if (pb < 0) { + pb = -pb; + } + var pc = p - upLeft; + if (pc < 0) { + pc = -pc; + } + c = rawBytes[i]; + if (pa <= pb && pa <= pc) { + buffer[j++] = left + c; + } else if (pb <= pc) { + buffer[j++] = up + c; + } else { + buffer[j++] = upLeft + c; + } + } + break; + default: + error('Unsupported predictor: ' + predictor); + } + this.bufferLength += rowBytes; + }; + return PredictorStream; + }(); + var JpegStream = function JpegStreamClosure() { + function JpegStream(stream, maybeLength, dict, params) { + var ch; + while ((ch = stream.getByte()) !== -1) { + if (ch === 0xFF) { + stream.skip(-1); + break; + } + } + this.stream = stream; + this.maybeLength = maybeLength; + this.dict = dict; + this.params = params; + DecodeStream.call(this, maybeLength); + } + JpegStream.prototype = Object.create(DecodeStream.prototype); + Object.defineProperty(JpegStream.prototype, 'bytes', { + get: function JpegStream_bytes() { + return shadow(this, 'bytes', this.stream.getBytes(this.maybeLength)); + }, + configurable: true + }); + JpegStream.prototype.ensureBuffer = function JpegStream_ensureBuffer(req) { + if (this.bufferLength) { + return; + } + var jpegImage = new JpegImage(); + var decodeArr = this.dict.getArray('Decode', 'D'); + if (this.forceRGB && isArray(decodeArr)) { + var bitsPerComponent = this.dict.get('BitsPerComponent') || 8; + var decodeArrLength = decodeArr.length; + var transform = new Int32Array(decodeArrLength); + var transformNeeded = false; + var maxValue = (1 << bitsPerComponent) - 1; + for (var i = 0; i < decodeArrLength; i += 2) { + transform[i] = (decodeArr[i + 1] - decodeArr[i]) * 256 | 0; + transform[i + 1] = decodeArr[i] * maxValue | 0; + if (transform[i] !== 256 || transform[i + 1] !== 0) { + transformNeeded = true; + } + } + if (transformNeeded) { + jpegImage.decodeTransform = transform; + } + } + if (isDict(this.params)) { + var colorTransform = this.params.get('ColorTransform'); + if (isInt(colorTransform)) { + jpegImage.colorTransform = colorTransform; + } + } + jpegImage.parse(this.bytes); + var data = jpegImage.getData(this.drawWidth, this.drawHeight, this.forceRGB); + this.buffer = data; + this.bufferLength = data.length; + this.eof = true; + }; + JpegStream.prototype.getBytes = function JpegStream_getBytes(length) { + this.ensureBuffer(); + return this.buffer; + }; + JpegStream.prototype.getIR = function JpegStream_getIR(forceDataSchema) { + return createObjectURL(this.bytes, 'image/jpeg', forceDataSchema); + }; + return JpegStream; + }(); + var JpxStream = function JpxStreamClosure() { + function JpxStream(stream, maybeLength, dict, params) { + this.stream = stream; + this.maybeLength = maybeLength; + this.dict = dict; + this.params = params; + DecodeStream.call(this, maybeLength); + } + JpxStream.prototype = Object.create(DecodeStream.prototype); + Object.defineProperty(JpxStream.prototype, 'bytes', { + get: function JpxStream_bytes() { + return shadow(this, 'bytes', this.stream.getBytes(this.maybeLength)); + }, + configurable: true + }); + JpxStream.prototype.ensureBuffer = function JpxStream_ensureBuffer(req) { + if (this.bufferLength) { + return; + } + var jpxImage = new JpxImage(); + jpxImage.parse(this.bytes); + var width = jpxImage.width; + var height = jpxImage.height; + var componentsCount = jpxImage.componentsCount; + var tileCount = jpxImage.tiles.length; + if (tileCount === 1) { + this.buffer = jpxImage.tiles[0].items; + } else { + var data = new Uint8Array(width * height * componentsCount); + for (var k = 0; k < tileCount; k++) { + var tileComponents = jpxImage.tiles[k]; + var tileWidth = tileComponents.width; + var tileHeight = tileComponents.height; + var tileLeft = tileComponents.left; + var tileTop = tileComponents.top; + var src = tileComponents.items; + var srcPosition = 0; + var dataPosition = (width * tileTop + tileLeft) * componentsCount; + var imgRowSize = width * componentsCount; + var tileRowSize = tileWidth * componentsCount; + for (var j = 0; j < tileHeight; j++) { + var rowBytes = src.subarray(srcPosition, srcPosition + tileRowSize); + data.set(rowBytes, dataPosition); + srcPosition += tileRowSize; + dataPosition += imgRowSize; + } + } + this.buffer = data; + } + this.bufferLength = this.buffer.length; + this.eof = true; + }; + return JpxStream; + }(); + var Jbig2Stream = function Jbig2StreamClosure() { + function Jbig2Stream(stream, maybeLength, dict, params) { + this.stream = stream; + this.maybeLength = maybeLength; + this.dict = dict; + this.params = params; + DecodeStream.call(this, maybeLength); + } + Jbig2Stream.prototype = Object.create(DecodeStream.prototype); + Object.defineProperty(Jbig2Stream.prototype, 'bytes', { + get: function Jbig2Stream_bytes() { + return shadow(this, 'bytes', this.stream.getBytes(this.maybeLength)); + }, + configurable: true + }); + Jbig2Stream.prototype.ensureBuffer = function Jbig2Stream_ensureBuffer(req) { + if (this.bufferLength) { + return; + } + var jbig2Image = new Jbig2Image(); + var chunks = []; + if (isDict(this.params)) { + var globalsStream = this.params.get('JBIG2Globals'); + if (isStream(globalsStream)) { + var globals = globalsStream.getBytes(); + chunks.push({ + data: globals, + start: 0, + end: globals.length + }); + } + } + chunks.push({ + data: this.bytes, + start: 0, + end: this.bytes.length + }); + var data = jbig2Image.parseChunks(chunks); + var dataLength = data.length; + for (var i = 0; i < dataLength; i++) { + data[i] ^= 0xFF; + } + this.buffer = data; + this.bufferLength = dataLength; + this.eof = true; + }; + return Jbig2Stream; + }(); + var DecryptStream = function DecryptStreamClosure() { + function DecryptStream(str, maybeLength, decrypt) { + this.str = str; + this.dict = str.dict; + this.decrypt = decrypt; + this.nextChunk = null; + this.initialized = false; + DecodeStream.call(this, maybeLength); + } + var chunkSize = 512; + DecryptStream.prototype = Object.create(DecodeStream.prototype); + DecryptStream.prototype.readBlock = function DecryptStream_readBlock() { + var chunk; + if (this.initialized) { + chunk = this.nextChunk; + } else { + chunk = this.str.getBytes(chunkSize); + this.initialized = true; + } + if (!chunk || chunk.length === 0) { + this.eof = true; + return; + } + this.nextChunk = this.str.getBytes(chunkSize); + var hasMoreData = this.nextChunk && this.nextChunk.length > 0; + var decrypt = this.decrypt; + chunk = decrypt(chunk, !hasMoreData); + var bufferLength = this.bufferLength; + var i, n = chunk.length; + var buffer = this.ensureBuffer(bufferLength + n); + for (i = 0; i < n; i++) { + buffer[bufferLength++] = chunk[i]; + } + this.bufferLength = bufferLength; + }; + return DecryptStream; + }(); + var Ascii85Stream = function Ascii85StreamClosure() { + function Ascii85Stream(str, maybeLength) { + this.str = str; + this.dict = str.dict; + this.input = new Uint8Array(5); + if (maybeLength) { + maybeLength = 0.8 * maybeLength; + } + DecodeStream.call(this, maybeLength); + } + Ascii85Stream.prototype = Object.create(DecodeStream.prototype); + Ascii85Stream.prototype.readBlock = function Ascii85Stream_readBlock() { + var TILDA_CHAR = 0x7E; + var Z_LOWER_CHAR = 0x7A; + var EOF = -1; + var str = this.str; + var c = str.getByte(); + while (isSpace(c)) { + c = str.getByte(); + } + if (c === EOF || c === TILDA_CHAR) { + this.eof = true; + return; + } + var bufferLength = this.bufferLength, buffer; + var i; + if (c === Z_LOWER_CHAR) { + buffer = this.ensureBuffer(bufferLength + 4); + for (i = 0; i < 4; ++i) { + buffer[bufferLength + i] = 0; + } + this.bufferLength += 4; + } else { + var input = this.input; + input[0] = c; + for (i = 1; i < 5; ++i) { + c = str.getByte(); + while (isSpace(c)) { + c = str.getByte(); + } + input[i] = c; + if (c === EOF || c === TILDA_CHAR) { + break; + } + } + buffer = this.ensureBuffer(bufferLength + i - 1); + this.bufferLength += i - 1; + if (i < 5) { + for (; i < 5; ++i) { + input[i] = 0x21 + 84; + } + this.eof = true; + } + var t = 0; + for (i = 0; i < 5; ++i) { + t = t * 85 + (input[i] - 0x21); + } + for (i = 3; i >= 0; --i) { + buffer[bufferLength + i] = t & 0xFF; + t >>= 8; + } + } + }; + return Ascii85Stream; + }(); + var AsciiHexStream = function AsciiHexStreamClosure() { + function AsciiHexStream(str, maybeLength) { + this.str = str; + this.dict = str.dict; + this.firstDigit = -1; + if (maybeLength) { + maybeLength = 0.5 * maybeLength; + } + DecodeStream.call(this, maybeLength); + } + AsciiHexStream.prototype = Object.create(DecodeStream.prototype); + AsciiHexStream.prototype.readBlock = function AsciiHexStream_readBlock() { + var UPSTREAM_BLOCK_SIZE = 8000; + var bytes = this.str.getBytes(UPSTREAM_BLOCK_SIZE); + if (!bytes.length) { + this.eof = true; + return; + } + var maxDecodeLength = bytes.length + 1 >> 1; + var buffer = this.ensureBuffer(this.bufferLength + maxDecodeLength); + var bufferLength = this.bufferLength; + var firstDigit = this.firstDigit; + for (var i = 0, ii = bytes.length; i < ii; i++) { + var ch = bytes[i], digit; + if (ch >= 0x30 && ch <= 0x39) { + digit = ch & 0x0F; + } else if (ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66) { + digit = (ch & 0x0F) + 9; + } else if (ch === 0x3E) { + this.eof = true; + break; + } else { + continue; + } + if (firstDigit < 0) { + firstDigit = digit; + } else { + buffer[bufferLength++] = firstDigit << 4 | digit; + firstDigit = -1; + } + } + if (firstDigit >= 0 && this.eof) { + buffer[bufferLength++] = firstDigit << 4; + firstDigit = -1; + } + this.firstDigit = firstDigit; + this.bufferLength = bufferLength; + }; + return AsciiHexStream; + }(); + var RunLengthStream = function RunLengthStreamClosure() { + function RunLengthStream(str, maybeLength) { + this.str = str; + this.dict = str.dict; + DecodeStream.call(this, maybeLength); + } + RunLengthStream.prototype = Object.create(DecodeStream.prototype); + RunLengthStream.prototype.readBlock = function RunLengthStream_readBlock() { + var repeatHeader = this.str.getBytes(2); + if (!repeatHeader || repeatHeader.length < 2 || repeatHeader[0] === 128) { + this.eof = true; + return; + } + var buffer; + var bufferLength = this.bufferLength; + var n = repeatHeader[0]; + if (n < 128) { + buffer = this.ensureBuffer(bufferLength + n + 1); + buffer[bufferLength++] = repeatHeader[1]; + if (n > 0) { + var source = this.str.getBytes(n); + buffer.set(source, bufferLength); + bufferLength += n; + } + } else { + n = 257 - n; + var b = repeatHeader[1]; + buffer = this.ensureBuffer(bufferLength + n + 1); + for (var i = 0; i < n; i++) { + buffer[bufferLength++] = b; + } + } + this.bufferLength = bufferLength; + }; + return RunLengthStream; + }(); + var CCITTFaxStream = function CCITTFaxStreamClosure() { + var ccittEOL = -2; + var ccittEOF = -1; + var twoDimPass = 0; + var twoDimHoriz = 1; + var twoDimVert0 = 2; + var twoDimVertR1 = 3; + var twoDimVertL1 = 4; + var twoDimVertR2 = 5; + var twoDimVertL2 = 6; + var twoDimVertR3 = 7; + var twoDimVertL3 = 8; + var twoDimTable = [ + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + 7, + twoDimVertL3 + ], + [ + 7, + twoDimVertR3 + ], + [ + 6, + twoDimVertL2 + ], + [ + 6, + twoDimVertL2 + ], + [ + 6, + twoDimVertR2 + ], + [ + 6, + twoDimVertR2 + ], + [ + 4, + twoDimPass + ], + [ + 4, + twoDimPass + ], + [ + 4, + twoDimPass + ], + [ + 4, + twoDimPass + ], + [ + 4, + twoDimPass + ], + [ + 4, + twoDimPass + ], + [ + 4, + twoDimPass + ], + [ + 4, + twoDimPass + ], + [ + 3, + twoDimHoriz + ], + [ + 3, + twoDimHoriz + ], + [ + 3, + twoDimHoriz + ], + [ + 3, + twoDimHoriz + ], + [ + 3, + twoDimHoriz + ], + [ + 3, + twoDimHoriz + ], + [ + 3, + twoDimHoriz + ], + [ + 3, + twoDimHoriz + ], + [ + 3, + twoDimHoriz + ], + [ + 3, + twoDimHoriz + ], + [ + 3, + twoDimHoriz + ], + [ + 3, + twoDimHoriz + ], + [ + 3, + twoDimHoriz + ], + [ + 3, + twoDimHoriz + ], + [ + 3, + twoDimHoriz + ], + [ + 3, + twoDimHoriz + ], + [ + 3, + twoDimVertL1 + ], + [ + 3, + twoDimVertL1 + ], + [ + 3, + twoDimVertL1 + ], + [ + 3, + twoDimVertL1 + ], + [ + 3, + twoDimVertL1 + ], + [ + 3, + twoDimVertL1 + ], + [ + 3, + twoDimVertL1 + ], + [ + 3, + twoDimVertL1 + ], + [ + 3, + twoDimVertL1 + ], + [ + 3, + twoDimVertL1 + ], + [ + 3, + twoDimVertL1 + ], + [ + 3, + twoDimVertL1 + ], + [ + 3, + twoDimVertL1 + ], + [ + 3, + twoDimVertL1 + ], + [ + 3, + twoDimVertL1 + ], + [ + 3, + twoDimVertL1 + ], + [ + 3, + twoDimVertR1 + ], + [ + 3, + twoDimVertR1 + ], + [ + 3, + twoDimVertR1 + ], + [ + 3, + twoDimVertR1 + ], + [ + 3, + twoDimVertR1 + ], + [ + 3, + twoDimVertR1 + ], + [ + 3, + twoDimVertR1 + ], + [ + 3, + twoDimVertR1 + ], + [ + 3, + twoDimVertR1 + ], + [ + 3, + twoDimVertR1 + ], + [ + 3, + twoDimVertR1 + ], + [ + 3, + twoDimVertR1 + ], + [ + 3, + twoDimVertR1 + ], + [ + 3, + twoDimVertR1 + ], + [ + 3, + twoDimVertR1 + ], + [ + 3, + twoDimVertR1 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ], + [ + 1, + twoDimVert0 + ] + ]; + var whiteTable1 = [ + [ + -1, + -1 + ], + [ + 12, + ccittEOL + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + 11, + 1792 + ], + [ + 11, + 1792 + ], + [ + 12, + 1984 + ], + [ + 12, + 2048 + ], + [ + 12, + 2112 + ], + [ + 12, + 2176 + ], + [ + 12, + 2240 + ], + [ + 12, + 2304 + ], + [ + 11, + 1856 + ], + [ + 11, + 1856 + ], + [ + 11, + 1920 + ], + [ + 11, + 1920 + ], + [ + 12, + 2368 + ], + [ + 12, + 2432 + ], + [ + 12, + 2496 + ], + [ + 12, + 2560 + ] + ]; + var whiteTable2 = [ + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + 8, + 29 + ], + [ + 8, + 29 + ], + [ + 8, + 30 + ], + [ + 8, + 30 + ], + [ + 8, + 45 + ], + [ + 8, + 45 + ], + [ + 8, + 46 + ], + [ + 8, + 46 + ], + [ + 7, + 22 + ], + [ + 7, + 22 + ], + [ + 7, + 22 + ], + [ + 7, + 22 + ], + [ + 7, + 23 + ], + [ + 7, + 23 + ], + [ + 7, + 23 + ], + [ + 7, + 23 + ], + [ + 8, + 47 + ], + [ + 8, + 47 + ], + [ + 8, + 48 + ], + [ + 8, + 48 + ], + [ + 6, + 13 + ], + [ + 6, + 13 + ], + [ + 6, + 13 + ], + [ + 6, + 13 + ], + [ + 6, + 13 + ], + [ + 6, + 13 + ], + [ + 6, + 13 + ], + [ + 6, + 13 + ], + [ + 7, + 20 + ], + [ + 7, + 20 + ], + [ + 7, + 20 + ], + [ + 7, + 20 + ], + [ + 8, + 33 + ], + [ + 8, + 33 + ], + [ + 8, + 34 + ], + [ + 8, + 34 + ], + [ + 8, + 35 + ], + [ + 8, + 35 + ], + [ + 8, + 36 + ], + [ + 8, + 36 + ], + [ + 8, + 37 + ], + [ + 8, + 37 + ], + [ + 8, + 38 + ], + [ + 8, + 38 + ], + [ + 7, + 19 + ], + [ + 7, + 19 + ], + [ + 7, + 19 + ], + [ + 7, + 19 + ], + [ + 8, + 31 + ], + [ + 8, + 31 + ], + [ + 8, + 32 + ], + [ + 8, + 32 + ], + [ + 6, + 1 + ], + [ + 6, + 1 + ], + [ + 6, + 1 + ], + [ + 6, + 1 + ], + [ + 6, + 1 + ], + [ + 6, + 1 + ], + [ + 6, + 1 + ], + [ + 6, + 1 + ], + [ + 6, + 12 + ], + [ + 6, + 12 + ], + [ + 6, + 12 + ], + [ + 6, + 12 + ], + [ + 6, + 12 + ], + [ + 6, + 12 + ], + [ + 6, + 12 + ], + [ + 6, + 12 + ], + [ + 8, + 53 + ], + [ + 8, + 53 + ], + [ + 8, + 54 + ], + [ + 8, + 54 + ], + [ + 7, + 26 + ], + [ + 7, + 26 + ], + [ + 7, + 26 + ], + [ + 7, + 26 + ], + [ + 8, + 39 + ], + [ + 8, + 39 + ], + [ + 8, + 40 + ], + [ + 8, + 40 + ], + [ + 8, + 41 + ], + [ + 8, + 41 + ], + [ + 8, + 42 + ], + [ + 8, + 42 + ], + [ + 8, + 43 + ], + [ + 8, + 43 + ], + [ + 8, + 44 + ], + [ + 8, + 44 + ], + [ + 7, + 21 + ], + [ + 7, + 21 + ], + [ + 7, + 21 + ], + [ + 7, + 21 + ], + [ + 7, + 28 + ], + [ + 7, + 28 + ], + [ + 7, + 28 + ], + [ + 7, + 28 + ], + [ + 8, + 61 + ], + [ + 8, + 61 + ], + [ + 8, + 62 + ], + [ + 8, + 62 + ], + [ + 8, + 63 + ], + [ + 8, + 63 + ], + [ + 8, + 0 + ], + [ + 8, + 0 + ], + [ + 8, + 320 + ], + [ + 8, + 320 + ], + [ + 8, + 384 + ], + [ + 8, + 384 + ], + [ + 5, + 10 + ], + [ + 5, + 10 + ], + [ + 5, + 10 + ], + [ + 5, + 10 + ], + [ + 5, + 10 + ], + [ + 5, + 10 + ], + [ + 5, + 10 + ], + [ + 5, + 10 + ], + [ + 5, + 10 + ], + [ + 5, + 10 + ], + [ + 5, + 10 + ], + [ + 5, + 10 + ], + [ + 5, + 10 + ], + [ + 5, + 10 + ], + [ + 5, + 10 + ], + [ + 5, + 10 + ], + [ + 5, + 11 + ], + [ + 5, + 11 + ], + [ + 5, + 11 + ], + [ + 5, + 11 + ], + [ + 5, + 11 + ], + [ + 5, + 11 + ], + [ + 5, + 11 + ], + [ + 5, + 11 + ], + [ + 5, + 11 + ], + [ + 5, + 11 + ], + [ + 5, + 11 + ], + [ + 5, + 11 + ], + [ + 5, + 11 + ], + [ + 5, + 11 + ], + [ + 5, + 11 + ], + [ + 5, + 11 + ], + [ + 7, + 27 + ], + [ + 7, + 27 + ], + [ + 7, + 27 + ], + [ + 7, + 27 + ], + [ + 8, + 59 + ], + [ + 8, + 59 + ], + [ + 8, + 60 + ], + [ + 8, + 60 + ], + [ + 9, + 1472 + ], + [ + 9, + 1536 + ], + [ + 9, + 1600 + ], + [ + 9, + 1728 + ], + [ + 7, + 18 + ], + [ + 7, + 18 + ], + [ + 7, + 18 + ], + [ + 7, + 18 + ], + [ + 7, + 24 + ], + [ + 7, + 24 + ], + [ + 7, + 24 + ], + [ + 7, + 24 + ], + [ + 8, + 49 + ], + [ + 8, + 49 + ], + [ + 8, + 50 + ], + [ + 8, + 50 + ], + [ + 8, + 51 + ], + [ + 8, + 51 + ], + [ + 8, + 52 + ], + [ + 8, + 52 + ], + [ + 7, + 25 + ], + [ + 7, + 25 + ], + [ + 7, + 25 + ], + [ + 7, + 25 + ], + [ + 8, + 55 + ], + [ + 8, + 55 + ], + [ + 8, + 56 + ], + [ + 8, + 56 + ], + [ + 8, + 57 + ], + [ + 8, + 57 + ], + [ + 8, + 58 + ], + [ + 8, + 58 + ], + [ + 6, + 192 + ], + [ + 6, + 192 + ], + [ + 6, + 192 + ], + [ + 6, + 192 + ], + [ + 6, + 192 + ], + [ + 6, + 192 + ], + [ + 6, + 192 + ], + [ + 6, + 192 + ], + [ + 6, + 1664 + ], + [ + 6, + 1664 + ], + [ + 6, + 1664 + ], + [ + 6, + 1664 + ], + [ + 6, + 1664 + ], + [ + 6, + 1664 + ], + [ + 6, + 1664 + ], + [ + 6, + 1664 + ], + [ + 8, + 448 + ], + [ + 8, + 448 + ], + [ + 8, + 512 + ], + [ + 8, + 512 + ], + [ + 9, + 704 + ], + [ + 9, + 768 + ], + [ + 8, + 640 + ], + [ + 8, + 640 + ], + [ + 8, + 576 + ], + [ + 8, + 576 + ], + [ + 9, + 832 + ], + [ + 9, + 896 + ], + [ + 9, + 960 + ], + [ + 9, + 1024 + ], + [ + 9, + 1088 + ], + [ + 9, + 1152 + ], + [ + 9, + 1216 + ], + [ + 9, + 1280 + ], + [ + 9, + 1344 + ], + [ + 9, + 1408 + ], + [ + 7, + 256 + ], + [ + 7, + 256 + ], + [ + 7, + 256 + ], + [ + 7, + 256 + ], + [ + 4, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 3 + ], + [ + 5, + 128 + ], + [ + 5, + 128 + ], + [ + 5, + 128 + ], + [ + 5, + 128 + ], + [ + 5, + 128 + ], + [ + 5, + 128 + ], + [ + 5, + 128 + ], + [ + 5, + 128 + ], + [ + 5, + 128 + ], + [ + 5, + 128 + ], + [ + 5, + 128 + ], + [ + 5, + 128 + ], + [ + 5, + 128 + ], + [ + 5, + 128 + ], + [ + 5, + 128 + ], + [ + 5, + 128 + ], + [ + 5, + 8 + ], + [ + 5, + 8 + ], + [ + 5, + 8 + ], + [ + 5, + 8 + ], + [ + 5, + 8 + ], + [ + 5, + 8 + ], + [ + 5, + 8 + ], + [ + 5, + 8 + ], + [ + 5, + 8 + ], + [ + 5, + 8 + ], + [ + 5, + 8 + ], + [ + 5, + 8 + ], + [ + 5, + 8 + ], + [ + 5, + 8 + ], + [ + 5, + 8 + ], + [ + 5, + 8 + ], + [ + 5, + 9 + ], + [ + 5, + 9 + ], + [ + 5, + 9 + ], + [ + 5, + 9 + ], + [ + 5, + 9 + ], + [ + 5, + 9 + ], + [ + 5, + 9 + ], + [ + 5, + 9 + ], + [ + 5, + 9 + ], + [ + 5, + 9 + ], + [ + 5, + 9 + ], + [ + 5, + 9 + ], + [ + 5, + 9 + ], + [ + 5, + 9 + ], + [ + 5, + 9 + ], + [ + 5, + 9 + ], + [ + 6, + 16 + ], + [ + 6, + 16 + ], + [ + 6, + 16 + ], + [ + 6, + 16 + ], + [ + 6, + 16 + ], + [ + 6, + 16 + ], + [ + 6, + 16 + ], + [ + 6, + 16 + ], + [ + 6, + 17 + ], + [ + 6, + 17 + ], + [ + 6, + 17 + ], + [ + 6, + 17 + ], + [ + 6, + 17 + ], + [ + 6, + 17 + ], + [ + 6, + 17 + ], + [ + 6, + 17 + ], + [ + 4, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 6, + 14 + ], + [ + 6, + 14 + ], + [ + 6, + 14 + ], + [ + 6, + 14 + ], + [ + 6, + 14 + ], + [ + 6, + 14 + ], + [ + 6, + 14 + ], + [ + 6, + 14 + ], + [ + 6, + 15 + ], + [ + 6, + 15 + ], + [ + 6, + 15 + ], + [ + 6, + 15 + ], + [ + 6, + 15 + ], + [ + 6, + 15 + ], + [ + 6, + 15 + ], + [ + 6, + 15 + ], + [ + 5, + 64 + ], + [ + 5, + 64 + ], + [ + 5, + 64 + ], + [ + 5, + 64 + ], + [ + 5, + 64 + ], + [ + 5, + 64 + ], + [ + 5, + 64 + ], + [ + 5, + 64 + ], + [ + 5, + 64 + ], + [ + 5, + 64 + ], + [ + 5, + 64 + ], + [ + 5, + 64 + ], + [ + 5, + 64 + ], + [ + 5, + 64 + ], + [ + 5, + 64 + ], + [ + 5, + 64 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 7 + ] + ]; + var blackTable1 = [ + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + 12, + ccittEOL + ], + [ + 12, + ccittEOL + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + 11, + 1792 + ], + [ + 11, + 1792 + ], + [ + 11, + 1792 + ], + [ + 11, + 1792 + ], + [ + 12, + 1984 + ], + [ + 12, + 1984 + ], + [ + 12, + 2048 + ], + [ + 12, + 2048 + ], + [ + 12, + 2112 + ], + [ + 12, + 2112 + ], + [ + 12, + 2176 + ], + [ + 12, + 2176 + ], + [ + 12, + 2240 + ], + [ + 12, + 2240 + ], + [ + 12, + 2304 + ], + [ + 12, + 2304 + ], + [ + 11, + 1856 + ], + [ + 11, + 1856 + ], + [ + 11, + 1856 + ], + [ + 11, + 1856 + ], + [ + 11, + 1920 + ], + [ + 11, + 1920 + ], + [ + 11, + 1920 + ], + [ + 11, + 1920 + ], + [ + 12, + 2368 + ], + [ + 12, + 2368 + ], + [ + 12, + 2432 + ], + [ + 12, + 2432 + ], + [ + 12, + 2496 + ], + [ + 12, + 2496 + ], + [ + 12, + 2560 + ], + [ + 12, + 2560 + ], + [ + 10, + 18 + ], + [ + 10, + 18 + ], + [ + 10, + 18 + ], + [ + 10, + 18 + ], + [ + 10, + 18 + ], + [ + 10, + 18 + ], + [ + 10, + 18 + ], + [ + 10, + 18 + ], + [ + 12, + 52 + ], + [ + 12, + 52 + ], + [ + 13, + 640 + ], + [ + 13, + 704 + ], + [ + 13, + 768 + ], + [ + 13, + 832 + ], + [ + 12, + 55 + ], + [ + 12, + 55 + ], + [ + 12, + 56 + ], + [ + 12, + 56 + ], + [ + 13, + 1280 + ], + [ + 13, + 1344 + ], + [ + 13, + 1408 + ], + [ + 13, + 1472 + ], + [ + 12, + 59 + ], + [ + 12, + 59 + ], + [ + 12, + 60 + ], + [ + 12, + 60 + ], + [ + 13, + 1536 + ], + [ + 13, + 1600 + ], + [ + 11, + 24 + ], + [ + 11, + 24 + ], + [ + 11, + 24 + ], + [ + 11, + 24 + ], + [ + 11, + 25 + ], + [ + 11, + 25 + ], + [ + 11, + 25 + ], + [ + 11, + 25 + ], + [ + 13, + 1664 + ], + [ + 13, + 1728 + ], + [ + 12, + 320 + ], + [ + 12, + 320 + ], + [ + 12, + 384 + ], + [ + 12, + 384 + ], + [ + 12, + 448 + ], + [ + 12, + 448 + ], + [ + 13, + 512 + ], + [ + 13, + 576 + ], + [ + 12, + 53 + ], + [ + 12, + 53 + ], + [ + 12, + 54 + ], + [ + 12, + 54 + ], + [ + 13, + 896 + ], + [ + 13, + 960 + ], + [ + 13, + 1024 + ], + [ + 13, + 1088 + ], + [ + 13, + 1152 + ], + [ + 13, + 1216 + ], + [ + 10, + 64 + ], + [ + 10, + 64 + ], + [ + 10, + 64 + ], + [ + 10, + 64 + ], + [ + 10, + 64 + ], + [ + 10, + 64 + ], + [ + 10, + 64 + ], + [ + 10, + 64 + ] + ]; + var blackTable2 = [ + [ + 8, + 13 + ], + [ + 8, + 13 + ], + [ + 8, + 13 + ], + [ + 8, + 13 + ], + [ + 8, + 13 + ], + [ + 8, + 13 + ], + [ + 8, + 13 + ], + [ + 8, + 13 + ], + [ + 8, + 13 + ], + [ + 8, + 13 + ], + [ + 8, + 13 + ], + [ + 8, + 13 + ], + [ + 8, + 13 + ], + [ + 8, + 13 + ], + [ + 8, + 13 + ], + [ + 8, + 13 + ], + [ + 11, + 23 + ], + [ + 11, + 23 + ], + [ + 12, + 50 + ], + [ + 12, + 51 + ], + [ + 12, + 44 + ], + [ + 12, + 45 + ], + [ + 12, + 46 + ], + [ + 12, + 47 + ], + [ + 12, + 57 + ], + [ + 12, + 58 + ], + [ + 12, + 61 + ], + [ + 12, + 256 + ], + [ + 10, + 16 + ], + [ + 10, + 16 + ], + [ + 10, + 16 + ], + [ + 10, + 16 + ], + [ + 10, + 17 + ], + [ + 10, + 17 + ], + [ + 10, + 17 + ], + [ + 10, + 17 + ], + [ + 12, + 48 + ], + [ + 12, + 49 + ], + [ + 12, + 62 + ], + [ + 12, + 63 + ], + [ + 12, + 30 + ], + [ + 12, + 31 + ], + [ + 12, + 32 + ], + [ + 12, + 33 + ], + [ + 12, + 40 + ], + [ + 12, + 41 + ], + [ + 11, + 22 + ], + [ + 11, + 22 + ], + [ + 8, + 14 + ], + [ + 8, + 14 + ], + [ + 8, + 14 + ], + [ + 8, + 14 + ], + [ + 8, + 14 + ], + [ + 8, + 14 + ], + [ + 8, + 14 + ], + [ + 8, + 14 + ], + [ + 8, + 14 + ], + [ + 8, + 14 + ], + [ + 8, + 14 + ], + [ + 8, + 14 + ], + [ + 8, + 14 + ], + [ + 8, + 14 + ], + [ + 8, + 14 + ], + [ + 8, + 14 + ], + [ + 7, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 11 + ], + [ + 7, + 11 + ], + [ + 7, + 11 + ], + [ + 7, + 11 + ], + [ + 7, + 11 + ], + [ + 7, + 11 + ], + [ + 7, + 11 + ], + [ + 7, + 11 + ], + [ + 7, + 11 + ], + [ + 7, + 11 + ], + [ + 7, + 11 + ], + [ + 7, + 11 + ], + [ + 7, + 11 + ], + [ + 7, + 11 + ], + [ + 7, + 11 + ], + [ + 7, + 11 + ], + [ + 7, + 11 + ], + [ + 7, + 11 + ], + [ + 7, + 11 + ], + [ + 7, + 11 + ], + [ + 7, + 11 + ], + [ + 7, + 11 + ], + [ + 7, + 11 + ], + [ + 7, + 11 + ], + [ + 7, + 11 + ], + [ + 7, + 11 + ], + [ + 7, + 11 + ], + [ + 7, + 11 + ], + [ + 7, + 11 + ], + [ + 7, + 11 + ], + [ + 7, + 11 + ], + [ + 7, + 11 + ], + [ + 9, + 15 + ], + [ + 9, + 15 + ], + [ + 9, + 15 + ], + [ + 9, + 15 + ], + [ + 9, + 15 + ], + [ + 9, + 15 + ], + [ + 9, + 15 + ], + [ + 9, + 15 + ], + [ + 12, + 128 + ], + [ + 12, + 192 + ], + [ + 12, + 26 + ], + [ + 12, + 27 + ], + [ + 12, + 28 + ], + [ + 12, + 29 + ], + [ + 11, + 19 + ], + [ + 11, + 19 + ], + [ + 11, + 20 + ], + [ + 11, + 20 + ], + [ + 12, + 34 + ], + [ + 12, + 35 + ], + [ + 12, + 36 + ], + [ + 12, + 37 + ], + [ + 12, + 38 + ], + [ + 12, + 39 + ], + [ + 11, + 21 + ], + [ + 11, + 21 + ], + [ + 12, + 42 + ], + [ + 12, + 43 + ], + [ + 10, + 0 + ], + [ + 10, + 0 + ], + [ + 10, + 0 + ], + [ + 10, + 0 + ], + [ + 7, + 12 + ], + [ + 7, + 12 + ], + [ + 7, + 12 + ], + [ + 7, + 12 + ], + [ + 7, + 12 + ], + [ + 7, + 12 + ], + [ + 7, + 12 + ], + [ + 7, + 12 + ], + [ + 7, + 12 + ], + [ + 7, + 12 + ], + [ + 7, + 12 + ], + [ + 7, + 12 + ], + [ + 7, + 12 + ], + [ + 7, + 12 + ], + [ + 7, + 12 + ], + [ + 7, + 12 + ], + [ + 7, + 12 + ], + [ + 7, + 12 + ], + [ + 7, + 12 + ], + [ + 7, + 12 + ], + [ + 7, + 12 + ], + [ + 7, + 12 + ], + [ + 7, + 12 + ], + [ + 7, + 12 + ], + [ + 7, + 12 + ], + [ + 7, + 12 + ], + [ + 7, + 12 + ], + [ + 7, + 12 + ], + [ + 7, + 12 + ], + [ + 7, + 12 + ], + [ + 7, + 12 + ], + [ + 7, + 12 + ] + ]; + var blackTable3 = [ + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + -1, + -1 + ], + [ + 6, + 9 + ], + [ + 6, + 8 + ], + [ + 5, + 7 + ], + [ + 5, + 7 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 5 + ], + [ + 3, + 1 + ], + [ + 3, + 1 + ], + [ + 3, + 1 + ], + [ + 3, + 1 + ], + [ + 3, + 1 + ], + [ + 3, + 1 + ], + [ + 3, + 1 + ], + [ + 3, + 1 + ], + [ + 3, + 4 + ], + [ + 3, + 4 + ], + [ + 3, + 4 + ], + [ + 3, + 4 + ], + [ + 3, + 4 + ], + [ + 3, + 4 + ], + [ + 3, + 4 + ], + [ + 3, + 4 + ], + [ + 2, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 2 + ], + [ + 2, + 2 + ], + [ + 2, + 2 + ], + [ + 2, + 2 + ], + [ + 2, + 2 + ], + [ + 2, + 2 + ], + [ + 2, + 2 + ], + [ + 2, + 2 + ], + [ + 2, + 2 + ], + [ + 2, + 2 + ], + [ + 2, + 2 + ], + [ + 2, + 2 + ], + [ + 2, + 2 + ], + [ + 2, + 2 + ], + [ + 2, + 2 + ], + [ + 2, + 2 + ] + ]; + function CCITTFaxStream(str, maybeLength, params) { + this.str = str; + this.dict = str.dict; + params = params || Dict.empty; + this.encoding = params.get('K') || 0; + this.eoline = params.get('EndOfLine') || false; + this.byteAlign = params.get('EncodedByteAlign') || false; + this.columns = params.get('Columns') || 1728; + this.rows = params.get('Rows') || 0; + var eoblock = params.get('EndOfBlock'); + if (eoblock === null || eoblock === undefined) { + eoblock = true; + } + this.eoblock = eoblock; + this.black = params.get('BlackIs1') || false; + this.codingLine = new Uint32Array(this.columns + 1); + this.refLine = new Uint32Array(this.columns + 2); + this.codingLine[0] = this.columns; + this.codingPos = 0; + this.row = 0; + this.nextLine2D = this.encoding < 0; + this.inputBits = 0; + this.inputBuf = 0; + this.outputBits = 0; + var code1; + while ((code1 = this.lookBits(12)) === 0) { + this.eatBits(1); + } + if (code1 === 1) { + this.eatBits(12); + } + if (this.encoding > 0) { + this.nextLine2D = !this.lookBits(1); + this.eatBits(1); + } + DecodeStream.call(this, maybeLength); + } + CCITTFaxStream.prototype = Object.create(DecodeStream.prototype); + CCITTFaxStream.prototype.readBlock = function CCITTFaxStream_readBlock() { + while (!this.eof) { + var c = this.lookChar(); + this.ensureBuffer(this.bufferLength + 1); + this.buffer[this.bufferLength++] = c; + } + }; + CCITTFaxStream.prototype.addPixels = function ccittFaxStreamAddPixels(a1, blackPixels) { + var codingLine = this.codingLine; + var codingPos = this.codingPos; + if (a1 > codingLine[codingPos]) { + if (a1 > this.columns) { + info('row is wrong length'); + this.err = true; + a1 = this.columns; + } + if (codingPos & 1 ^ blackPixels) { + ++codingPos; + } + codingLine[codingPos] = a1; + } + this.codingPos = codingPos; + }; + CCITTFaxStream.prototype.addPixelsNeg = function ccittFaxStreamAddPixelsNeg(a1, blackPixels) { + var codingLine = this.codingLine; + var codingPos = this.codingPos; + if (a1 > codingLine[codingPos]) { + if (a1 > this.columns) { + info('row is wrong length'); + this.err = true; + a1 = this.columns; + } + if (codingPos & 1 ^ blackPixels) { + ++codingPos; + } + codingLine[codingPos] = a1; + } else if (a1 < codingLine[codingPos]) { + if (a1 < 0) { + info('invalid code'); + this.err = true; + a1 = 0; + } + while (codingPos > 0 && a1 < codingLine[codingPos - 1]) { + --codingPos; + } + codingLine[codingPos] = a1; + } + this.codingPos = codingPos; + }; + CCITTFaxStream.prototype.lookChar = function CCITTFaxStream_lookChar() { + var refLine = this.refLine; + var codingLine = this.codingLine; + var columns = this.columns; + var refPos, blackPixels, bits, i; + if (this.outputBits === 0) { + if (this.eof) { + return null; + } + this.err = false; + var code1, code2, code3; + if (this.nextLine2D) { + for (i = 0; codingLine[i] < columns; ++i) { + refLine[i] = codingLine[i]; + } + refLine[i++] = columns; + refLine[i] = columns; + codingLine[0] = 0; + this.codingPos = 0; + refPos = 0; + blackPixels = 0; + while (codingLine[this.codingPos] < columns) { + code1 = this.getTwoDimCode(); + switch (code1) { + case twoDimPass: + this.addPixels(refLine[refPos + 1], blackPixels); + if (refLine[refPos + 1] < columns) { + refPos += 2; + } + break; + case twoDimHoriz: + code1 = code2 = 0; + if (blackPixels) { + do { + code1 += code3 = this.getBlackCode(); + } while (code3 >= 64); + do { + code2 += code3 = this.getWhiteCode(); + } while (code3 >= 64); + } else { + do { + code1 += code3 = this.getWhiteCode(); + } while (code3 >= 64); + do { + code2 += code3 = this.getBlackCode(); + } while (code3 >= 64); + } + this.addPixels(codingLine[this.codingPos] + code1, blackPixels); + if (codingLine[this.codingPos] < columns) { + this.addPixels(codingLine[this.codingPos] + code2, blackPixels ^ 1); + } + while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { + refPos += 2; + } + break; + case twoDimVertR3: + this.addPixels(refLine[refPos] + 3, blackPixels); + blackPixels ^= 1; + if (codingLine[this.codingPos] < columns) { + ++refPos; + while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { + refPos += 2; + } + } + break; + case twoDimVertR2: + this.addPixels(refLine[refPos] + 2, blackPixels); + blackPixels ^= 1; + if (codingLine[this.codingPos] < columns) { + ++refPos; + while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { + refPos += 2; + } + } + break; + case twoDimVertR1: + this.addPixels(refLine[refPos] + 1, blackPixels); + blackPixels ^= 1; + if (codingLine[this.codingPos] < columns) { + ++refPos; + while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { + refPos += 2; + } + } + break; + case twoDimVert0: + this.addPixels(refLine[refPos], blackPixels); + blackPixels ^= 1; + if (codingLine[this.codingPos] < columns) { + ++refPos; + while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { + refPos += 2; + } + } + break; + case twoDimVertL3: + this.addPixelsNeg(refLine[refPos] - 3, blackPixels); + blackPixels ^= 1; + if (codingLine[this.codingPos] < columns) { + if (refPos > 0) { + --refPos; + } else { + ++refPos; + } + while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { + refPos += 2; + } + } + break; + case twoDimVertL2: + this.addPixelsNeg(refLine[refPos] - 2, blackPixels); + blackPixels ^= 1; + if (codingLine[this.codingPos] < columns) { + if (refPos > 0) { + --refPos; + } else { + ++refPos; + } + while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { + refPos += 2; + } + } + break; + case twoDimVertL1: + this.addPixelsNeg(refLine[refPos] - 1, blackPixels); + blackPixels ^= 1; + if (codingLine[this.codingPos] < columns) { + if (refPos > 0) { + --refPos; + } else { + ++refPos; + } + while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { + refPos += 2; + } + } + break; + case ccittEOF: + this.addPixels(columns, 0); + this.eof = true; + break; + default: + info('bad 2d code'); + this.addPixels(columns, 0); + this.err = true; + } + } + } else { + codingLine[0] = 0; + this.codingPos = 0; + blackPixels = 0; + while (codingLine[this.codingPos] < columns) { + code1 = 0; + if (blackPixels) { + do { + code1 += code3 = this.getBlackCode(); + } while (code3 >= 64); + } else { + do { + code1 += code3 = this.getWhiteCode(); + } while (code3 >= 64); + } + this.addPixels(codingLine[this.codingPos] + code1, blackPixels); + blackPixels ^= 1; + } + } + var gotEOL = false; + if (this.byteAlign) { + this.inputBits &= ~7; + } + if (!this.eoblock && this.row === this.rows - 1) { + this.eof = true; + } else { + code1 = this.lookBits(12); + if (this.eoline) { + while (code1 !== ccittEOF && code1 !== 1) { + this.eatBits(1); + code1 = this.lookBits(12); + } + } else { + while (code1 === 0) { + this.eatBits(1); + code1 = this.lookBits(12); + } + } + if (code1 === 1) { + this.eatBits(12); + gotEOL = true; + } else if (code1 === ccittEOF) { + this.eof = true; + } + } + if (!this.eof && this.encoding > 0) { + this.nextLine2D = !this.lookBits(1); + this.eatBits(1); + } + if (this.eoblock && gotEOL && this.byteAlign) { + code1 = this.lookBits(12); + if (code1 === 1) { + this.eatBits(12); + if (this.encoding > 0) { + this.lookBits(1); + this.eatBits(1); + } + if (this.encoding >= 0) { + for (i = 0; i < 4; ++i) { + code1 = this.lookBits(12); + if (code1 !== 1) { + info('bad rtc code: ' + code1); + } + this.eatBits(12); + if (this.encoding > 0) { + this.lookBits(1); + this.eatBits(1); + } + } + } + this.eof = true; + } + } else if (this.err && this.eoline) { + while (true) { + code1 = this.lookBits(13); + if (code1 === ccittEOF) { + this.eof = true; + return null; + } + if (code1 >> 1 === 1) { + break; + } + this.eatBits(1); + } + this.eatBits(12); + if (this.encoding > 0) { + this.eatBits(1); + this.nextLine2D = !(code1 & 1); + } + } + if (codingLine[0] > 0) { + this.outputBits = codingLine[this.codingPos = 0]; + } else { + this.outputBits = codingLine[this.codingPos = 1]; + } + this.row++; + } + var c; + if (this.outputBits >= 8) { + c = this.codingPos & 1 ? 0 : 0xFF; + this.outputBits -= 8; + if (this.outputBits === 0 && codingLine[this.codingPos] < columns) { + this.codingPos++; + this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1]; + } + } else { + bits = 8; + c = 0; + do { + if (this.outputBits > bits) { + c <<= bits; + if (!(this.codingPos & 1)) { + c |= 0xFF >> 8 - bits; + } + this.outputBits -= bits; + bits = 0; + } else { + c <<= this.outputBits; + if (!(this.codingPos & 1)) { + c |= 0xFF >> 8 - this.outputBits; + } + bits -= this.outputBits; + this.outputBits = 0; + if (codingLine[this.codingPos] < columns) { + this.codingPos++; + this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1]; + } else if (bits > 0) { + c <<= bits; + bits = 0; + } + } + } while (bits); + } + if (this.black) { + c ^= 0xFF; + } + return c; + }; + CCITTFaxStream.prototype.findTableCode = function ccittFaxStreamFindTableCode(start, end, table, limit) { + var limitValue = limit || 0; + for (var i = start; i <= end; ++i) { + var code = this.lookBits(i); + if (code === ccittEOF) { + return [ + true, + 1, + false + ]; + } + if (i < end) { + code <<= end - i; + } + if (!limitValue || code >= limitValue) { + var p = table[code - limitValue]; + if (p[0] === i) { + this.eatBits(i); + return [ + true, + p[1], + true + ]; + } + } + } + return [ + false, + 0, + false + ]; + }; + CCITTFaxStream.prototype.getTwoDimCode = function ccittFaxStreamGetTwoDimCode() { + var code = 0; + var p; + if (this.eoblock) { + code = this.lookBits(7); + p = twoDimTable[code]; + if (p && p[0] > 0) { + this.eatBits(p[0]); + return p[1]; + } + } else { + var result = this.findTableCode(1, 7, twoDimTable); + if (result[0] && result[2]) { + return result[1]; + } + } + info('Bad two dim code'); + return ccittEOF; + }; + CCITTFaxStream.prototype.getWhiteCode = function ccittFaxStreamGetWhiteCode() { + var code = 0; + var p; + if (this.eoblock) { + code = this.lookBits(12); + if (code === ccittEOF) { + return 1; + } + if (code >> 5 === 0) { + p = whiteTable1[code]; + } else { + p = whiteTable2[code >> 3]; + } + if (p[0] > 0) { + this.eatBits(p[0]); + return p[1]; + } + } else { + var result = this.findTableCode(1, 9, whiteTable2); + if (result[0]) { + return result[1]; + } + result = this.findTableCode(11, 12, whiteTable1); + if (result[0]) { + return result[1]; + } + } + info('bad white code'); + this.eatBits(1); + return 1; + }; + CCITTFaxStream.prototype.getBlackCode = function ccittFaxStreamGetBlackCode() { + var code, p; + if (this.eoblock) { + code = this.lookBits(13); + if (code === ccittEOF) { + return 1; + } + if (code >> 7 === 0) { + p = blackTable1[code]; + } else if (code >> 9 === 0 && code >> 7 !== 0) { + p = blackTable2[(code >> 1) - 64]; + } else { + p = blackTable3[code >> 7]; + } + if (p[0] > 0) { + this.eatBits(p[0]); + return p[1]; + } + } else { + var result = this.findTableCode(2, 6, blackTable3); + if (result[0]) { + return result[1]; + } + result = this.findTableCode(7, 12, blackTable2, 64); + if (result[0]) { + return result[1]; + } + result = this.findTableCode(10, 13, blackTable1); + if (result[0]) { + return result[1]; + } + } + info('bad black code'); + this.eatBits(1); + return 1; + }; + CCITTFaxStream.prototype.lookBits = function CCITTFaxStream_lookBits(n) { + var c; + while (this.inputBits < n) { + if ((c = this.str.getByte()) === -1) { + if (this.inputBits === 0) { + return ccittEOF; + } + return this.inputBuf << n - this.inputBits & 0xFFFF >> 16 - n; + } + this.inputBuf = this.inputBuf << 8 | c; + this.inputBits += 8; + } + return this.inputBuf >> this.inputBits - n & 0xFFFF >> 16 - n; + }; + CCITTFaxStream.prototype.eatBits = function CCITTFaxStream_eatBits(n) { + if ((this.inputBits -= n) < 0) { + this.inputBits = 0; + } + }; + return CCITTFaxStream; + }(); + var LZWStream = function LZWStreamClosure() { + function LZWStream(str, maybeLength, earlyChange) { + this.str = str; + this.dict = str.dict; + this.cachedData = 0; + this.bitsCached = 0; + var maxLzwDictionarySize = 4096; + var lzwState = { + earlyChange: earlyChange, + codeLength: 9, + nextCode: 258, + dictionaryValues: new Uint8Array(maxLzwDictionarySize), + dictionaryLengths: new Uint16Array(maxLzwDictionarySize), + dictionaryPrevCodes: new Uint16Array(maxLzwDictionarySize), + currentSequence: new Uint8Array(maxLzwDictionarySize), + currentSequenceLength: 0 + }; + for (var i = 0; i < 256; ++i) { + lzwState.dictionaryValues[i] = i; + lzwState.dictionaryLengths[i] = 1; + } + this.lzwState = lzwState; + DecodeStream.call(this, maybeLength); + } + LZWStream.prototype = Object.create(DecodeStream.prototype); + LZWStream.prototype.readBits = function LZWStream_readBits(n) { + var bitsCached = this.bitsCached; + var cachedData = this.cachedData; + while (bitsCached < n) { + var c = this.str.getByte(); + if (c === -1) { + this.eof = true; + return null; + } + cachedData = cachedData << 8 | c; + bitsCached += 8; + } + this.bitsCached = bitsCached -= n; + this.cachedData = cachedData; + this.lastCode = null; + return cachedData >>> bitsCached & (1 << n) - 1; + }; + LZWStream.prototype.readBlock = function LZWStream_readBlock() { + var blockSize = 512; + var estimatedDecodedSize = blockSize * 2, decodedSizeDelta = blockSize; + var i, j, q; + var lzwState = this.lzwState; + if (!lzwState) { + return; + } + var earlyChange = lzwState.earlyChange; + var nextCode = lzwState.nextCode; + var dictionaryValues = lzwState.dictionaryValues; + var dictionaryLengths = lzwState.dictionaryLengths; + var dictionaryPrevCodes = lzwState.dictionaryPrevCodes; + var codeLength = lzwState.codeLength; + var prevCode = lzwState.prevCode; + var currentSequence = lzwState.currentSequence; + var currentSequenceLength = lzwState.currentSequenceLength; + var decodedLength = 0; + var currentBufferLength = this.bufferLength; + var buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize); + for (i = 0; i < blockSize; i++) { + var code = this.readBits(codeLength); + var hasPrev = currentSequenceLength > 0; + if (code < 256) { + currentSequence[0] = code; + currentSequenceLength = 1; + } else if (code >= 258) { + if (code < nextCode) { + currentSequenceLength = dictionaryLengths[code]; + for (j = currentSequenceLength - 1, q = code; j >= 0; j--) { + currentSequence[j] = dictionaryValues[q]; + q = dictionaryPrevCodes[q]; + } + } else { + currentSequence[currentSequenceLength++] = currentSequence[0]; + } + } else if (code === 256) { + codeLength = 9; + nextCode = 258; + currentSequenceLength = 0; + continue; + } else { + this.eof = true; + delete this.lzwState; + break; + } + if (hasPrev) { + dictionaryPrevCodes[nextCode] = prevCode; + dictionaryLengths[nextCode] = dictionaryLengths[prevCode] + 1; + dictionaryValues[nextCode] = currentSequence[0]; + nextCode++; + codeLength = nextCode + earlyChange & nextCode + earlyChange - 1 ? codeLength : Math.min(Math.log(nextCode + earlyChange) / 0.6931471805599453 + 1, 12) | 0; + } + prevCode = code; + decodedLength += currentSequenceLength; + if (estimatedDecodedSize < decodedLength) { + do { + estimatedDecodedSize += decodedSizeDelta; + } while (estimatedDecodedSize < decodedLength); + buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize); + } + for (j = 0; j < currentSequenceLength; j++) { + buffer[currentBufferLength++] = currentSequence[j]; + } + } + lzwState.nextCode = nextCode; + lzwState.codeLength = codeLength; + lzwState.prevCode = prevCode; + lzwState.currentSequenceLength = currentSequenceLength; + this.bufferLength = currentBufferLength; + }; + return LZWStream; + }(); + var NullStream = function NullStreamClosure() { + function NullStream() { + Stream.call(this, new Uint8Array(0)); + } + NullStream.prototype = Stream.prototype; + return NullStream; + }(); + exports.Ascii85Stream = Ascii85Stream; + exports.AsciiHexStream = AsciiHexStream; + exports.CCITTFaxStream = CCITTFaxStream; + exports.DecryptStream = DecryptStream; + exports.DecodeStream = DecodeStream; + exports.FlateStream = FlateStream; + exports.Jbig2Stream = Jbig2Stream; + exports.JpegStream = JpegStream; + exports.JpxStream = JpxStream; + exports.NullStream = NullStream; + exports.PredictorStream = PredictorStream; + exports.RunLengthStream = RunLengthStream; + exports.Stream = Stream; + exports.StreamsSequenceStream = StreamsSequenceStream; + exports.StringStream = StringStream; + exports.LZWStream = LZWStream; + })); + (function (root, factory) { + factory(root.pdfjsCoreCrypto = {}, root.pdfjsSharedUtil, root.pdfjsCorePrimitives, root.pdfjsCoreStream); + }(this, function (exports, sharedUtil, corePrimitives, coreStream) { + var PasswordException = sharedUtil.PasswordException; + var PasswordResponses = sharedUtil.PasswordResponses; + var bytesToString = sharedUtil.bytesToString; + var warn = sharedUtil.warn; + var error = sharedUtil.error; + var assert = sharedUtil.assert; + var isInt = sharedUtil.isInt; + var stringToBytes = sharedUtil.stringToBytes; + var utf8StringToString = sharedUtil.utf8StringToString; + var Name = corePrimitives.Name; + var isName = corePrimitives.isName; + var isDict = corePrimitives.isDict; + var DecryptStream = coreStream.DecryptStream; + var ARCFourCipher = function ARCFourCipherClosure() { + function ARCFourCipher(key) { + this.a = 0; + this.b = 0; + var s = new Uint8Array(256); + var i, j = 0, tmp, keyLength = key.length; + for (i = 0; i < 256; ++i) { + s[i] = i; + } + for (i = 0; i < 256; ++i) { + tmp = s[i]; + j = j + tmp + key[i % keyLength] & 0xFF; + s[i] = s[j]; + s[j] = tmp; + } + this.s = s; + } + ARCFourCipher.prototype = { + encryptBlock: function ARCFourCipher_encryptBlock(data) { + var i, n = data.length, tmp, tmp2; + var a = this.a, b = this.b, s = this.s; + var output = new Uint8Array(n); + for (i = 0; i < n; ++i) { + a = a + 1 & 0xFF; + tmp = s[a]; + b = b + tmp & 0xFF; + tmp2 = s[b]; + s[a] = tmp2; + s[b] = tmp; + output[i] = data[i] ^ s[tmp + tmp2 & 0xFF]; + } + this.a = a; + this.b = b; + return output; + } + }; + ARCFourCipher.prototype.decryptBlock = ARCFourCipher.prototype.encryptBlock; + return ARCFourCipher; + }(); + var calculateMD5 = function calculateMD5Closure() { + var r = new Uint8Array([ + 7, + 12, + 17, + 22, + 7, + 12, + 17, + 22, + 7, + 12, + 17, + 22, + 7, + 12, + 17, + 22, + 5, + 9, + 14, + 20, + 5, + 9, + 14, + 20, + 5, + 9, + 14, + 20, + 5, + 9, + 14, + 20, + 4, + 11, + 16, + 23, + 4, + 11, + 16, + 23, + 4, + 11, + 16, + 23, + 4, + 11, + 16, + 23, + 6, + 10, + 15, + 21, + 6, + 10, + 15, + 21, + 6, + 10, + 15, + 21, + 6, + 10, + 15, + 21 + ]); + var k = new Int32Array([ + -680876936, + -389564586, + 606105819, + -1044525330, + -176418897, + 1200080426, + -1473231341, + -45705983, + 1770035416, + -1958414417, + -42063, + -1990404162, + 1804603682, + -40341101, + -1502002290, + 1236535329, + -165796510, + -1069501632, + 643717713, + -373897302, + -701558691, + 38016083, + -660478335, + -405537848, + 568446438, + -1019803690, + -187363961, + 1163531501, + -1444681467, + -51403784, + 1735328473, + -1926607734, + -378558, + -2022574463, + 1839030562, + -35309556, + -1530992060, + 1272893353, + -155497632, + -1094730640, + 681279174, + -358537222, + -722521979, + 76029189, + -640364487, + -421815835, + 530742520, + -995338651, + -198630844, + 1126891415, + -1416354905, + -57434055, + 1700485571, + -1894986606, + -1051523, + -2054922799, + 1873313359, + -30611744, + -1560198380, + 1309151649, + -145523070, + -1120210379, + 718787259, + -343485551 + ]); + function hash(data, offset, length) { + var h0 = 1732584193, h1 = -271733879, h2 = -1732584194, h3 = 271733878; + var paddedLength = length + 72 & ~63; + var padded = new Uint8Array(paddedLength); + var i, j, n; + for (i = 0; i < length; ++i) { + padded[i] = data[offset++]; + } + padded[i++] = 0x80; + n = paddedLength - 8; + while (i < n) { + padded[i++] = 0; + } + padded[i++] = length << 3 & 0xFF; + padded[i++] = length >> 5 & 0xFF; + padded[i++] = length >> 13 & 0xFF; + padded[i++] = length >> 21 & 0xFF; + padded[i++] = length >>> 29 & 0xFF; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + var w = new Int32Array(16); + for (i = 0; i < paddedLength;) { + for (j = 0; j < 16; ++j, i += 4) { + w[j] = padded[i] | padded[i + 1] << 8 | padded[i + 2] << 16 | padded[i + 3] << 24; + } + var a = h0, b = h1, c = h2, d = h3, f, g; + for (j = 0; j < 64; ++j) { + if (j < 16) { + f = b & c | ~b & d; + g = j; + } else if (j < 32) { + f = d & b | ~d & c; + g = 5 * j + 1 & 15; + } else if (j < 48) { + f = b ^ c ^ d; + g = 3 * j + 5 & 15; + } else { + f = c ^ (b | ~d); + g = 7 * j & 15; + } + var tmp = d, rotateArg = a + f + k[j] + w[g] | 0, rotate = r[j]; + d = c; + c = b; + b = b + (rotateArg << rotate | rotateArg >>> 32 - rotate) | 0; + a = tmp; + } + h0 = h0 + a | 0; + h1 = h1 + b | 0; + h2 = h2 + c | 0; + h3 = h3 + d | 0; + } + return new Uint8Array([ + h0 & 0xFF, + h0 >> 8 & 0xFF, + h0 >> 16 & 0xFF, + h0 >>> 24 & 0xFF, + h1 & 0xFF, + h1 >> 8 & 0xFF, + h1 >> 16 & 0xFF, + h1 >>> 24 & 0xFF, + h2 & 0xFF, + h2 >> 8 & 0xFF, + h2 >> 16 & 0xFF, + h2 >>> 24 & 0xFF, + h3 & 0xFF, + h3 >> 8 & 0xFF, + h3 >> 16 & 0xFF, + h3 >>> 24 & 0xFF + ]); + } + return hash; + }(); + var Word64 = function Word64Closure() { + function Word64(highInteger, lowInteger) { + this.high = highInteger | 0; + this.low = lowInteger | 0; + } + Word64.prototype = { + and: function Word64_and(word) { + this.high &= word.high; + this.low &= word.low; + }, + xor: function Word64_xor(word) { + this.high ^= word.high; + this.low ^= word.low; + }, + or: function Word64_or(word) { + this.high |= word.high; + this.low |= word.low; + }, + shiftRight: function Word64_shiftRight(places) { + if (places >= 32) { + this.low = this.high >>> places - 32 | 0; + this.high = 0; + } else { + this.low = this.low >>> places | this.high << 32 - places; + this.high = this.high >>> places | 0; + } + }, + shiftLeft: function Word64_shiftLeft(places) { + if (places >= 32) { + this.high = this.low << places - 32; + this.low = 0; + } else { + this.high = this.high << places | this.low >>> 32 - places; + this.low = this.low << places; + } + }, + rotateRight: function Word64_rotateRight(places) { + var low, high; + if (places & 32) { + high = this.low; + low = this.high; + } else { + low = this.low; + high = this.high; + } + places &= 31; + this.low = low >>> places | high << 32 - places; + this.high = high >>> places | low << 32 - places; + }, + not: function Word64_not() { + this.high = ~this.high; + this.low = ~this.low; + }, + add: function Word64_add(word) { + var lowAdd = (this.low >>> 0) + (word.low >>> 0); + var highAdd = (this.high >>> 0) + (word.high >>> 0); + if (lowAdd > 0xFFFFFFFF) { + highAdd += 1; + } + this.low = lowAdd | 0; + this.high = highAdd | 0; + }, + copyTo: function Word64_copyTo(bytes, offset) { + bytes[offset] = this.high >>> 24 & 0xFF; + bytes[offset + 1] = this.high >> 16 & 0xFF; + bytes[offset + 2] = this.high >> 8 & 0xFF; + bytes[offset + 3] = this.high & 0xFF; + bytes[offset + 4] = this.low >>> 24 & 0xFF; + bytes[offset + 5] = this.low >> 16 & 0xFF; + bytes[offset + 6] = this.low >> 8 & 0xFF; + bytes[offset + 7] = this.low & 0xFF; + }, + assign: function Word64_assign(word) { + this.high = word.high; + this.low = word.low; + } + }; + return Word64; + }(); + var calculateSHA256 = function calculateSHA256Closure() { + function rotr(x, n) { + return x >>> n | x << 32 - n; + } + function ch(x, y, z) { + return x & y ^ ~x & z; + } + function maj(x, y, z) { + return x & y ^ x & z ^ y & z; + } + function sigma(x) { + return rotr(x, 2) ^ rotr(x, 13) ^ rotr(x, 22); + } + function sigmaPrime(x) { + return rotr(x, 6) ^ rotr(x, 11) ^ rotr(x, 25); + } + function littleSigma(x) { + return rotr(x, 7) ^ rotr(x, 18) ^ x >>> 3; + } + function littleSigmaPrime(x) { + return rotr(x, 17) ^ rotr(x, 19) ^ x >>> 10; + } + var k = [ + 0x428a2f98, + 0x71374491, + 0xb5c0fbcf, + 0xe9b5dba5, + 0x3956c25b, + 0x59f111f1, + 0x923f82a4, + 0xab1c5ed5, + 0xd807aa98, + 0x12835b01, + 0x243185be, + 0x550c7dc3, + 0x72be5d74, + 0x80deb1fe, + 0x9bdc06a7, + 0xc19bf174, + 0xe49b69c1, + 0xefbe4786, + 0x0fc19dc6, + 0x240ca1cc, + 0x2de92c6f, + 0x4a7484aa, + 0x5cb0a9dc, + 0x76f988da, + 0x983e5152, + 0xa831c66d, + 0xb00327c8, + 0xbf597fc7, + 0xc6e00bf3, + 0xd5a79147, + 0x06ca6351, + 0x14292967, + 0x27b70a85, + 0x2e1b2138, + 0x4d2c6dfc, + 0x53380d13, + 0x650a7354, + 0x766a0abb, + 0x81c2c92e, + 0x92722c85, + 0xa2bfe8a1, + 0xa81a664b, + 0xc24b8b70, + 0xc76c51a3, + 0xd192e819, + 0xd6990624, + 0xf40e3585, + 0x106aa070, + 0x19a4c116, + 0x1e376c08, + 0x2748774c, + 0x34b0bcb5, + 0x391c0cb3, + 0x4ed8aa4a, + 0x5b9cca4f, + 0x682e6ff3, + 0x748f82ee, + 0x78a5636f, + 0x84c87814, + 0x8cc70208, + 0x90befffa, + 0xa4506ceb, + 0xbef9a3f7, + 0xc67178f2 + ]; + function hash(data, offset, length) { + var h0 = 0x6a09e667, h1 = 0xbb67ae85, h2 = 0x3c6ef372, h3 = 0xa54ff53a, h4 = 0x510e527f, h5 = 0x9b05688c, h6 = 0x1f83d9ab, h7 = 0x5be0cd19; + var paddedLength = Math.ceil((length + 9) / 64) * 64; + var padded = new Uint8Array(paddedLength); + var i, j, n; + for (i = 0; i < length; ++i) { + padded[i] = data[offset++]; + } + padded[i++] = 0x80; + n = paddedLength - 8; + while (i < n) { + padded[i++] = 0; + } + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = length >>> 29 & 0xFF; + padded[i++] = length >> 21 & 0xFF; + padded[i++] = length >> 13 & 0xFF; + padded[i++] = length >> 5 & 0xFF; + padded[i++] = length << 3 & 0xFF; + var w = new Uint32Array(64); + for (i = 0; i < paddedLength;) { + for (j = 0; j < 16; ++j) { + w[j] = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3]; + i += 4; + } + for (j = 16; j < 64; ++j) { + w[j] = littleSigmaPrime(w[j - 2]) + w[j - 7] + littleSigma(w[j - 15]) + w[j - 16] | 0; + } + var a = h0, b = h1, c = h2, d = h3, e = h4, f = h5, g = h6, h = h7, t1, t2; + for (j = 0; j < 64; ++j) { + t1 = h + sigmaPrime(e) + ch(e, f, g) + k[j] + w[j]; + t2 = sigma(a) + maj(a, b, c); + h = g; + g = f; + f = e; + e = d + t1 | 0; + d = c; + c = b; + b = a; + a = t1 + t2 | 0; + } + h0 = h0 + a | 0; + h1 = h1 + b | 0; + h2 = h2 + c | 0; + h3 = h3 + d | 0; + h4 = h4 + e | 0; + h5 = h5 + f | 0; + h6 = h6 + g | 0; + h7 = h7 + h | 0; + } + return new Uint8Array([ + h0 >> 24 & 0xFF, + h0 >> 16 & 0xFF, + h0 >> 8 & 0xFF, + h0 & 0xFF, + h1 >> 24 & 0xFF, + h1 >> 16 & 0xFF, + h1 >> 8 & 0xFF, + h1 & 0xFF, + h2 >> 24 & 0xFF, + h2 >> 16 & 0xFF, + h2 >> 8 & 0xFF, + h2 & 0xFF, + h3 >> 24 & 0xFF, + h3 >> 16 & 0xFF, + h3 >> 8 & 0xFF, + h3 & 0xFF, + h4 >> 24 & 0xFF, + h4 >> 16 & 0xFF, + h4 >> 8 & 0xFF, + h4 & 0xFF, + h5 >> 24 & 0xFF, + h5 >> 16 & 0xFF, + h5 >> 8 & 0xFF, + h5 & 0xFF, + h6 >> 24 & 0xFF, + h6 >> 16 & 0xFF, + h6 >> 8 & 0xFF, + h6 & 0xFF, + h7 >> 24 & 0xFF, + h7 >> 16 & 0xFF, + h7 >> 8 & 0xFF, + h7 & 0xFF + ]); + } + return hash; + }(); + var calculateSHA512 = function calculateSHA512Closure() { + function ch(result, x, y, z, tmp) { + result.assign(x); + result.and(y); + tmp.assign(x); + tmp.not(); + tmp.and(z); + result.xor(tmp); + } + function maj(result, x, y, z, tmp) { + result.assign(x); + result.and(y); + tmp.assign(x); + tmp.and(z); + result.xor(tmp); + tmp.assign(y); + tmp.and(z); + result.xor(tmp); + } + function sigma(result, x, tmp) { + result.assign(x); + result.rotateRight(28); + tmp.assign(x); + tmp.rotateRight(34); + result.xor(tmp); + tmp.assign(x); + tmp.rotateRight(39); + result.xor(tmp); + } + function sigmaPrime(result, x, tmp) { + result.assign(x); + result.rotateRight(14); + tmp.assign(x); + tmp.rotateRight(18); + result.xor(tmp); + tmp.assign(x); + tmp.rotateRight(41); + result.xor(tmp); + } + function littleSigma(result, x, tmp) { + result.assign(x); + result.rotateRight(1); + tmp.assign(x); + tmp.rotateRight(8); + result.xor(tmp); + tmp.assign(x); + tmp.shiftRight(7); + result.xor(tmp); + } + function littleSigmaPrime(result, x, tmp) { + result.assign(x); + result.rotateRight(19); + tmp.assign(x); + tmp.rotateRight(61); + result.xor(tmp); + tmp.assign(x); + tmp.shiftRight(6); + result.xor(tmp); + } + var k = [ + new Word64(0x428a2f98, 0xd728ae22), + new Word64(0x71374491, 0x23ef65cd), + new Word64(0xb5c0fbcf, 0xec4d3b2f), + new Word64(0xe9b5dba5, 0x8189dbbc), + new Word64(0x3956c25b, 0xf348b538), + new Word64(0x59f111f1, 0xb605d019), + new Word64(0x923f82a4, 0xaf194f9b), + new Word64(0xab1c5ed5, 0xda6d8118), + new Word64(0xd807aa98, 0xa3030242), + new Word64(0x12835b01, 0x45706fbe), + new Word64(0x243185be, 0x4ee4b28c), + new Word64(0x550c7dc3, 0xd5ffb4e2), + new Word64(0x72be5d74, 0xf27b896f), + new Word64(0x80deb1fe, 0x3b1696b1), + new Word64(0x9bdc06a7, 0x25c71235), + new Word64(0xc19bf174, 0xcf692694), + new Word64(0xe49b69c1, 0x9ef14ad2), + new Word64(0xefbe4786, 0x384f25e3), + new Word64(0x0fc19dc6, 0x8b8cd5b5), + new Word64(0x240ca1cc, 0x77ac9c65), + new Word64(0x2de92c6f, 0x592b0275), + new Word64(0x4a7484aa, 0x6ea6e483), + new Word64(0x5cb0a9dc, 0xbd41fbd4), + new Word64(0x76f988da, 0x831153b5), + new Word64(0x983e5152, 0xee66dfab), + new Word64(0xa831c66d, 0x2db43210), + new Word64(0xb00327c8, 0x98fb213f), + new Word64(0xbf597fc7, 0xbeef0ee4), + new Word64(0xc6e00bf3, 0x3da88fc2), + new Word64(0xd5a79147, 0x930aa725), + new Word64(0x06ca6351, 0xe003826f), + new Word64(0x14292967, 0x0a0e6e70), + new Word64(0x27b70a85, 0x46d22ffc), + new Word64(0x2e1b2138, 0x5c26c926), + new Word64(0x4d2c6dfc, 0x5ac42aed), + new Word64(0x53380d13, 0x9d95b3df), + new Word64(0x650a7354, 0x8baf63de), + new Word64(0x766a0abb, 0x3c77b2a8), + new Word64(0x81c2c92e, 0x47edaee6), + new Word64(0x92722c85, 0x1482353b), + new Word64(0xa2bfe8a1, 0x4cf10364), + new Word64(0xa81a664b, 0xbc423001), + new Word64(0xc24b8b70, 0xd0f89791), + new Word64(0xc76c51a3, 0x0654be30), + new Word64(0xd192e819, 0xd6ef5218), + new Word64(0xd6990624, 0x5565a910), + new Word64(0xf40e3585, 0x5771202a), + new Word64(0x106aa070, 0x32bbd1b8), + new Word64(0x19a4c116, 0xb8d2d0c8), + new Word64(0x1e376c08, 0x5141ab53), + new Word64(0x2748774c, 0xdf8eeb99), + new Word64(0x34b0bcb5, 0xe19b48a8), + new Word64(0x391c0cb3, 0xc5c95a63), + new Word64(0x4ed8aa4a, 0xe3418acb), + new Word64(0x5b9cca4f, 0x7763e373), + new Word64(0x682e6ff3, 0xd6b2b8a3), + new Word64(0x748f82ee, 0x5defb2fc), + new Word64(0x78a5636f, 0x43172f60), + new Word64(0x84c87814, 0xa1f0ab72), + new Word64(0x8cc70208, 0x1a6439ec), + new Word64(0x90befffa, 0x23631e28), + new Word64(0xa4506ceb, 0xde82bde9), + new Word64(0xbef9a3f7, 0xb2c67915), + new Word64(0xc67178f2, 0xe372532b), + new Word64(0xca273ece, 0xea26619c), + new Word64(0xd186b8c7, 0x21c0c207), + new Word64(0xeada7dd6, 0xcde0eb1e), + new Word64(0xf57d4f7f, 0xee6ed178), + new Word64(0x06f067aa, 0x72176fba), + new Word64(0x0a637dc5, 0xa2c898a6), + new Word64(0x113f9804, 0xbef90dae), + new Word64(0x1b710b35, 0x131c471b), + new Word64(0x28db77f5, 0x23047d84), + new Word64(0x32caab7b, 0x40c72493), + new Word64(0x3c9ebe0a, 0x15c9bebc), + new Word64(0x431d67c4, 0x9c100d4c), + new Word64(0x4cc5d4be, 0xcb3e42b6), + new Word64(0x597f299c, 0xfc657e2a), + new Word64(0x5fcb6fab, 0x3ad6faec), + new Word64(0x6c44198c, 0x4a475817) + ]; + function hash(data, offset, length, mode384) { + mode384 = !!mode384; + var h0, h1, h2, h3, h4, h5, h6, h7; + if (!mode384) { + h0 = new Word64(0x6a09e667, 0xf3bcc908); + h1 = new Word64(0xbb67ae85, 0x84caa73b); + h2 = new Word64(0x3c6ef372, 0xfe94f82b); + h3 = new Word64(0xa54ff53a, 0x5f1d36f1); + h4 = new Word64(0x510e527f, 0xade682d1); + h5 = new Word64(0x9b05688c, 0x2b3e6c1f); + h6 = new Word64(0x1f83d9ab, 0xfb41bd6b); + h7 = new Word64(0x5be0cd19, 0x137e2179); + } else { + h0 = new Word64(0xcbbb9d5d, 0xc1059ed8); + h1 = new Word64(0x629a292a, 0x367cd507); + h2 = new Word64(0x9159015a, 0x3070dd17); + h3 = new Word64(0x152fecd8, 0xf70e5939); + h4 = new Word64(0x67332667, 0xffc00b31); + h5 = new Word64(0x8eb44a87, 0x68581511); + h6 = new Word64(0xdb0c2e0d, 0x64f98fa7); + h7 = new Word64(0x47b5481d, 0xbefa4fa4); + } + var paddedLength = Math.ceil((length + 17) / 128) * 128; + var padded = new Uint8Array(paddedLength); + var i, j, n; + for (i = 0; i < length; ++i) { + padded[i] = data[offset++]; + } + padded[i++] = 0x80; + n = paddedLength - 16; + while (i < n) { + padded[i++] = 0; + } + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = length >>> 29 & 0xFF; + padded[i++] = length >> 21 & 0xFF; + padded[i++] = length >> 13 & 0xFF; + padded[i++] = length >> 5 & 0xFF; + padded[i++] = length << 3 & 0xFF; + var w = new Array(80); + for (i = 0; i < 80; i++) { + w[i] = new Word64(0, 0); + } + var a = new Word64(0, 0), b = new Word64(0, 0), c = new Word64(0, 0); + var d = new Word64(0, 0), e = new Word64(0, 0), f = new Word64(0, 0); + var g = new Word64(0, 0), h = new Word64(0, 0); + var t1 = new Word64(0, 0), t2 = new Word64(0, 0); + var tmp1 = new Word64(0, 0), tmp2 = new Word64(0, 0), tmp3; + for (i = 0; i < paddedLength;) { + for (j = 0; j < 16; ++j) { + w[j].high = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3]; + w[j].low = padded[i + 4] << 24 | padded[i + 5] << 16 | padded[i + 6] << 8 | padded[i + 7]; + i += 8; + } + for (j = 16; j < 80; ++j) { + tmp3 = w[j]; + littleSigmaPrime(tmp3, w[j - 2], tmp2); + tmp3.add(w[j - 7]); + littleSigma(tmp1, w[j - 15], tmp2); + tmp3.add(tmp1); + tmp3.add(w[j - 16]); + } + a.assign(h0); + b.assign(h1); + c.assign(h2); + d.assign(h3); + e.assign(h4); + f.assign(h5); + g.assign(h6); + h.assign(h7); + for (j = 0; j < 80; ++j) { + t1.assign(h); + sigmaPrime(tmp1, e, tmp2); + t1.add(tmp1); + ch(tmp1, e, f, g, tmp2); + t1.add(tmp1); + t1.add(k[j]); + t1.add(w[j]); + sigma(t2, a, tmp2); + maj(tmp1, a, b, c, tmp2); + t2.add(tmp1); + tmp3 = h; + h = g; + g = f; + f = e; + d.add(t1); + e = d; + d = c; + c = b; + b = a; + tmp3.assign(t1); + tmp3.add(t2); + a = tmp3; + } + h0.add(a); + h1.add(b); + h2.add(c); + h3.add(d); + h4.add(e); + h5.add(f); + h6.add(g); + h7.add(h); + } + var result; + if (!mode384) { + result = new Uint8Array(64); + h0.copyTo(result, 0); + h1.copyTo(result, 8); + h2.copyTo(result, 16); + h3.copyTo(result, 24); + h4.copyTo(result, 32); + h5.copyTo(result, 40); + h6.copyTo(result, 48); + h7.copyTo(result, 56); + } else { + result = new Uint8Array(48); + h0.copyTo(result, 0); + h1.copyTo(result, 8); + h2.copyTo(result, 16); + h3.copyTo(result, 24); + h4.copyTo(result, 32); + h5.copyTo(result, 40); + } + return result; + } + return hash; + }(); + var calculateSHA384 = function calculateSHA384Closure() { + function hash(data, offset, length) { + return calculateSHA512(data, offset, length, true); + } + return hash; + }(); + var NullCipher = function NullCipherClosure() { + function NullCipher() { + } + NullCipher.prototype = { + decryptBlock: function NullCipher_decryptBlock(data) { + return data; + } + }; + return NullCipher; + }(); + var AES128Cipher = function AES128CipherClosure() { + var rcon = new Uint8Array([ + 0x8d, + 0x01, + 0x02, + 0x04, + 0x08, + 0x10, + 0x20, + 0x40, + 0x80, + 0x1b, + 0x36, + 0x6c, + 0xd8, + 0xab, + 0x4d, + 0x9a, + 0x2f, + 0x5e, + 0xbc, + 0x63, + 0xc6, + 0x97, + 0x35, + 0x6a, + 0xd4, + 0xb3, + 0x7d, + 0xfa, + 0xef, + 0xc5, + 0x91, + 0x39, + 0x72, + 0xe4, + 0xd3, + 0xbd, + 0x61, + 0xc2, + 0x9f, + 0x25, + 0x4a, + 0x94, + 0x33, + 0x66, + 0xcc, + 0x83, + 0x1d, + 0x3a, + 0x74, + 0xe8, + 0xcb, + 0x8d, + 0x01, + 0x02, + 0x04, + 0x08, + 0x10, + 0x20, + 0x40, + 0x80, + 0x1b, + 0x36, + 0x6c, + 0xd8, + 0xab, + 0x4d, + 0x9a, + 0x2f, + 0x5e, + 0xbc, + 0x63, + 0xc6, + 0x97, + 0x35, + 0x6a, + 0xd4, + 0xb3, + 0x7d, + 0xfa, + 0xef, + 0xc5, + 0x91, + 0x39, + 0x72, + 0xe4, + 0xd3, + 0xbd, + 0x61, + 0xc2, + 0x9f, + 0x25, + 0x4a, + 0x94, + 0x33, + 0x66, + 0xcc, + 0x83, + 0x1d, + 0x3a, + 0x74, + 0xe8, + 0xcb, + 0x8d, + 0x01, + 0x02, + 0x04, + 0x08, + 0x10, + 0x20, + 0x40, + 0x80, + 0x1b, + 0x36, + 0x6c, + 0xd8, + 0xab, + 0x4d, + 0x9a, + 0x2f, + 0x5e, + 0xbc, + 0x63, + 0xc6, + 0x97, + 0x35, + 0x6a, + 0xd4, + 0xb3, + 0x7d, + 0xfa, + 0xef, + 0xc5, + 0x91, + 0x39, + 0x72, + 0xe4, + 0xd3, + 0xbd, + 0x61, + 0xc2, + 0x9f, + 0x25, + 0x4a, + 0x94, + 0x33, + 0x66, + 0xcc, + 0x83, + 0x1d, + 0x3a, + 0x74, + 0xe8, + 0xcb, + 0x8d, + 0x01, + 0x02, + 0x04, + 0x08, + 0x10, + 0x20, + 0x40, + 0x80, + 0x1b, + 0x36, + 0x6c, + 0xd8, + 0xab, + 0x4d, + 0x9a, + 0x2f, + 0x5e, + 0xbc, + 0x63, + 0xc6, + 0x97, + 0x35, + 0x6a, + 0xd4, + 0xb3, + 0x7d, + 0xfa, + 0xef, + 0xc5, + 0x91, + 0x39, + 0x72, + 0xe4, + 0xd3, + 0xbd, + 0x61, + 0xc2, + 0x9f, + 0x25, + 0x4a, + 0x94, + 0x33, + 0x66, + 0xcc, + 0x83, + 0x1d, + 0x3a, + 0x74, + 0xe8, + 0xcb, + 0x8d, + 0x01, + 0x02, + 0x04, + 0x08, + 0x10, + 0x20, + 0x40, + 0x80, + 0x1b, + 0x36, + 0x6c, + 0xd8, + 0xab, + 0x4d, + 0x9a, + 0x2f, + 0x5e, + 0xbc, + 0x63, + 0xc6, + 0x97, + 0x35, + 0x6a, + 0xd4, + 0xb3, + 0x7d, + 0xfa, + 0xef, + 0xc5, + 0x91, + 0x39, + 0x72, + 0xe4, + 0xd3, + 0xbd, + 0x61, + 0xc2, + 0x9f, + 0x25, + 0x4a, + 0x94, + 0x33, + 0x66, + 0xcc, + 0x83, + 0x1d, + 0x3a, + 0x74, + 0xe8, + 0xcb, + 0x8d + ]); + var s = new Uint8Array([ + 0x63, + 0x7c, + 0x77, + 0x7b, + 0xf2, + 0x6b, + 0x6f, + 0xc5, + 0x30, + 0x01, + 0x67, + 0x2b, + 0xfe, + 0xd7, + 0xab, + 0x76, + 0xca, + 0x82, + 0xc9, + 0x7d, + 0xfa, + 0x59, + 0x47, + 0xf0, + 0xad, + 0xd4, + 0xa2, + 0xaf, + 0x9c, + 0xa4, + 0x72, + 0xc0, + 0xb7, + 0xfd, + 0x93, + 0x26, + 0x36, + 0x3f, + 0xf7, + 0xcc, + 0x34, + 0xa5, + 0xe5, + 0xf1, + 0x71, + 0xd8, + 0x31, + 0x15, + 0x04, + 0xc7, + 0x23, + 0xc3, + 0x18, + 0x96, + 0x05, + 0x9a, + 0x07, + 0x12, + 0x80, + 0xe2, + 0xeb, + 0x27, + 0xb2, + 0x75, + 0x09, + 0x83, + 0x2c, + 0x1a, + 0x1b, + 0x6e, + 0x5a, + 0xa0, + 0x52, + 0x3b, + 0xd6, + 0xb3, + 0x29, + 0xe3, + 0x2f, + 0x84, + 0x53, + 0xd1, + 0x00, + 0xed, + 0x20, + 0xfc, + 0xb1, + 0x5b, + 0x6a, + 0xcb, + 0xbe, + 0x39, + 0x4a, + 0x4c, + 0x58, + 0xcf, + 0xd0, + 0xef, + 0xaa, + 0xfb, + 0x43, + 0x4d, + 0x33, + 0x85, + 0x45, + 0xf9, + 0x02, + 0x7f, + 0x50, + 0x3c, + 0x9f, + 0xa8, + 0x51, + 0xa3, + 0x40, + 0x8f, + 0x92, + 0x9d, + 0x38, + 0xf5, + 0xbc, + 0xb6, + 0xda, + 0x21, + 0x10, + 0xff, + 0xf3, + 0xd2, + 0xcd, + 0x0c, + 0x13, + 0xec, + 0x5f, + 0x97, + 0x44, + 0x17, + 0xc4, + 0xa7, + 0x7e, + 0x3d, + 0x64, + 0x5d, + 0x19, + 0x73, + 0x60, + 0x81, + 0x4f, + 0xdc, + 0x22, + 0x2a, + 0x90, + 0x88, + 0x46, + 0xee, + 0xb8, + 0x14, + 0xde, + 0x5e, + 0x0b, + 0xdb, + 0xe0, + 0x32, + 0x3a, + 0x0a, + 0x49, + 0x06, + 0x24, + 0x5c, + 0xc2, + 0xd3, + 0xac, + 0x62, + 0x91, + 0x95, + 0xe4, + 0x79, + 0xe7, + 0xc8, + 0x37, + 0x6d, + 0x8d, + 0xd5, + 0x4e, + 0xa9, + 0x6c, + 0x56, + 0xf4, + 0xea, + 0x65, + 0x7a, + 0xae, + 0x08, + 0xba, + 0x78, + 0x25, + 0x2e, + 0x1c, + 0xa6, + 0xb4, + 0xc6, + 0xe8, + 0xdd, + 0x74, + 0x1f, + 0x4b, + 0xbd, + 0x8b, + 0x8a, + 0x70, + 0x3e, + 0xb5, + 0x66, + 0x48, + 0x03, + 0xf6, + 0x0e, + 0x61, + 0x35, + 0x57, + 0xb9, + 0x86, + 0xc1, + 0x1d, + 0x9e, + 0xe1, + 0xf8, + 0x98, + 0x11, + 0x69, + 0xd9, + 0x8e, + 0x94, + 0x9b, + 0x1e, + 0x87, + 0xe9, + 0xce, + 0x55, + 0x28, + 0xdf, + 0x8c, + 0xa1, + 0x89, + 0x0d, + 0xbf, + 0xe6, + 0x42, + 0x68, + 0x41, + 0x99, + 0x2d, + 0x0f, + 0xb0, + 0x54, + 0xbb, + 0x16 + ]); + var inv_s = new Uint8Array([ + 0x52, + 0x09, + 0x6a, + 0xd5, + 0x30, + 0x36, + 0xa5, + 0x38, + 0xbf, + 0x40, + 0xa3, + 0x9e, + 0x81, + 0xf3, + 0xd7, + 0xfb, + 0x7c, + 0xe3, + 0x39, + 0x82, + 0x9b, + 0x2f, + 0xff, + 0x87, + 0x34, + 0x8e, + 0x43, + 0x44, + 0xc4, + 0xde, + 0xe9, + 0xcb, + 0x54, + 0x7b, + 0x94, + 0x32, + 0xa6, + 0xc2, + 0x23, + 0x3d, + 0xee, + 0x4c, + 0x95, + 0x0b, + 0x42, + 0xfa, + 0xc3, + 0x4e, + 0x08, + 0x2e, + 0xa1, + 0x66, + 0x28, + 0xd9, + 0x24, + 0xb2, + 0x76, + 0x5b, + 0xa2, + 0x49, + 0x6d, + 0x8b, + 0xd1, + 0x25, + 0x72, + 0xf8, + 0xf6, + 0x64, + 0x86, + 0x68, + 0x98, + 0x16, + 0xd4, + 0xa4, + 0x5c, + 0xcc, + 0x5d, + 0x65, + 0xb6, + 0x92, + 0x6c, + 0x70, + 0x48, + 0x50, + 0xfd, + 0xed, + 0xb9, + 0xda, + 0x5e, + 0x15, + 0x46, + 0x57, + 0xa7, + 0x8d, + 0x9d, + 0x84, + 0x90, + 0xd8, + 0xab, + 0x00, + 0x8c, + 0xbc, + 0xd3, + 0x0a, + 0xf7, + 0xe4, + 0x58, + 0x05, + 0xb8, + 0xb3, + 0x45, + 0x06, + 0xd0, + 0x2c, + 0x1e, + 0x8f, + 0xca, + 0x3f, + 0x0f, + 0x02, + 0xc1, + 0xaf, + 0xbd, + 0x03, + 0x01, + 0x13, + 0x8a, + 0x6b, + 0x3a, + 0x91, + 0x11, + 0x41, + 0x4f, + 0x67, + 0xdc, + 0xea, + 0x97, + 0xf2, + 0xcf, + 0xce, + 0xf0, + 0xb4, + 0xe6, + 0x73, + 0x96, + 0xac, + 0x74, + 0x22, + 0xe7, + 0xad, + 0x35, + 0x85, + 0xe2, + 0xf9, + 0x37, + 0xe8, + 0x1c, + 0x75, + 0xdf, + 0x6e, + 0x47, + 0xf1, + 0x1a, + 0x71, + 0x1d, + 0x29, + 0xc5, + 0x89, + 0x6f, + 0xb7, + 0x62, + 0x0e, + 0xaa, + 0x18, + 0xbe, + 0x1b, + 0xfc, + 0x56, + 0x3e, + 0x4b, + 0xc6, + 0xd2, + 0x79, + 0x20, + 0x9a, + 0xdb, + 0xc0, + 0xfe, + 0x78, + 0xcd, + 0x5a, + 0xf4, + 0x1f, + 0xdd, + 0xa8, + 0x33, + 0x88, + 0x07, + 0xc7, + 0x31, + 0xb1, + 0x12, + 0x10, + 0x59, + 0x27, + 0x80, + 0xec, + 0x5f, + 0x60, + 0x51, + 0x7f, + 0xa9, + 0x19, + 0xb5, + 0x4a, + 0x0d, + 0x2d, + 0xe5, + 0x7a, + 0x9f, + 0x93, + 0xc9, + 0x9c, + 0xef, + 0xa0, + 0xe0, + 0x3b, + 0x4d, + 0xae, + 0x2a, + 0xf5, + 0xb0, + 0xc8, + 0xeb, + 0xbb, + 0x3c, + 0x83, + 0x53, + 0x99, + 0x61, + 0x17, + 0x2b, + 0x04, + 0x7e, + 0xba, + 0x77, + 0xd6, + 0x26, + 0xe1, + 0x69, + 0x14, + 0x63, + 0x55, + 0x21, + 0x0c, + 0x7d + ]); + var mixCol = new Uint8Array(256); + for (var i = 0; i < 256; i++) { + if (i < 128) { + mixCol[i] = i << 1; + } else { + mixCol[i] = i << 1 ^ 0x1b; + } + } + var mix = new Uint32Array([ + 0x00000000, + 0x0e090d0b, + 0x1c121a16, + 0x121b171d, + 0x3824342c, + 0x362d3927, + 0x24362e3a, + 0x2a3f2331, + 0x70486858, + 0x7e416553, + 0x6c5a724e, + 0x62537f45, + 0x486c5c74, + 0x4665517f, + 0x547e4662, + 0x5a774b69, + 0xe090d0b0, + 0xee99ddbb, + 0xfc82caa6, + 0xf28bc7ad, + 0xd8b4e49c, + 0xd6bde997, + 0xc4a6fe8a, + 0xcaaff381, + 0x90d8b8e8, + 0x9ed1b5e3, + 0x8ccaa2fe, + 0x82c3aff5, + 0xa8fc8cc4, + 0xa6f581cf, + 0xb4ee96d2, + 0xbae79bd9, + 0xdb3bbb7b, + 0xd532b670, + 0xc729a16d, + 0xc920ac66, + 0xe31f8f57, + 0xed16825c, + 0xff0d9541, + 0xf104984a, + 0xab73d323, + 0xa57ade28, + 0xb761c935, + 0xb968c43e, + 0x9357e70f, + 0x9d5eea04, + 0x8f45fd19, + 0x814cf012, + 0x3bab6bcb, + 0x35a266c0, + 0x27b971dd, + 0x29b07cd6, + 0x038f5fe7, + 0x0d8652ec, + 0x1f9d45f1, + 0x119448fa, + 0x4be30393, + 0x45ea0e98, + 0x57f11985, + 0x59f8148e, + 0x73c737bf, + 0x7dce3ab4, + 0x6fd52da9, + 0x61dc20a2, + 0xad766df6, + 0xa37f60fd, + 0xb16477e0, + 0xbf6d7aeb, + 0x955259da, + 0x9b5b54d1, + 0x894043cc, + 0x87494ec7, + 0xdd3e05ae, + 0xd33708a5, + 0xc12c1fb8, + 0xcf2512b3, + 0xe51a3182, + 0xeb133c89, + 0xf9082b94, + 0xf701269f, + 0x4de6bd46, + 0x43efb04d, + 0x51f4a750, + 0x5ffdaa5b, + 0x75c2896a, + 0x7bcb8461, + 0x69d0937c, + 0x67d99e77, + 0x3daed51e, + 0x33a7d815, + 0x21bccf08, + 0x2fb5c203, + 0x058ae132, + 0x0b83ec39, + 0x1998fb24, + 0x1791f62f, + 0x764dd68d, + 0x7844db86, + 0x6a5fcc9b, + 0x6456c190, + 0x4e69e2a1, + 0x4060efaa, + 0x527bf8b7, + 0x5c72f5bc, + 0x0605bed5, + 0x080cb3de, + 0x1a17a4c3, + 0x141ea9c8, + 0x3e218af9, + 0x302887f2, + 0x223390ef, + 0x2c3a9de4, + 0x96dd063d, + 0x98d40b36, + 0x8acf1c2b, + 0x84c61120, + 0xaef93211, + 0xa0f03f1a, + 0xb2eb2807, + 0xbce2250c, + 0xe6956e65, + 0xe89c636e, + 0xfa877473, + 0xf48e7978, + 0xdeb15a49, + 0xd0b85742, + 0xc2a3405f, + 0xccaa4d54, + 0x41ecdaf7, + 0x4fe5d7fc, + 0x5dfec0e1, + 0x53f7cdea, + 0x79c8eedb, + 0x77c1e3d0, + 0x65daf4cd, + 0x6bd3f9c6, + 0x31a4b2af, + 0x3fadbfa4, + 0x2db6a8b9, + 0x23bfa5b2, + 0x09808683, + 0x07898b88, + 0x15929c95, + 0x1b9b919e, + 0xa17c0a47, + 0xaf75074c, + 0xbd6e1051, + 0xb3671d5a, + 0x99583e6b, + 0x97513360, + 0x854a247d, + 0x8b432976, + 0xd134621f, + 0xdf3d6f14, + 0xcd267809, + 0xc32f7502, + 0xe9105633, + 0xe7195b38, + 0xf5024c25, + 0xfb0b412e, + 0x9ad7618c, + 0x94de6c87, + 0x86c57b9a, + 0x88cc7691, + 0xa2f355a0, + 0xacfa58ab, + 0xbee14fb6, + 0xb0e842bd, + 0xea9f09d4, + 0xe49604df, + 0xf68d13c2, + 0xf8841ec9, + 0xd2bb3df8, + 0xdcb230f3, + 0xcea927ee, + 0xc0a02ae5, + 0x7a47b13c, + 0x744ebc37, + 0x6655ab2a, + 0x685ca621, + 0x42638510, + 0x4c6a881b, + 0x5e719f06, + 0x5078920d, + 0x0a0fd964, + 0x0406d46f, + 0x161dc372, + 0x1814ce79, + 0x322bed48, + 0x3c22e043, + 0x2e39f75e, + 0x2030fa55, + 0xec9ab701, + 0xe293ba0a, + 0xf088ad17, + 0xfe81a01c, + 0xd4be832d, + 0xdab78e26, + 0xc8ac993b, + 0xc6a59430, + 0x9cd2df59, + 0x92dbd252, + 0x80c0c54f, + 0x8ec9c844, + 0xa4f6eb75, + 0xaaffe67e, + 0xb8e4f163, + 0xb6edfc68, + 0x0c0a67b1, + 0x02036aba, + 0x10187da7, + 0x1e1170ac, + 0x342e539d, + 0x3a275e96, + 0x283c498b, + 0x26354480, + 0x7c420fe9, + 0x724b02e2, + 0x605015ff, + 0x6e5918f4, + 0x44663bc5, + 0x4a6f36ce, + 0x587421d3, + 0x567d2cd8, + 0x37a10c7a, + 0x39a80171, + 0x2bb3166c, + 0x25ba1b67, + 0x0f853856, + 0x018c355d, + 0x13972240, + 0x1d9e2f4b, + 0x47e96422, + 0x49e06929, + 0x5bfb7e34, + 0x55f2733f, + 0x7fcd500e, + 0x71c45d05, + 0x63df4a18, + 0x6dd64713, + 0xd731dcca, + 0xd938d1c1, + 0xcb23c6dc, + 0xc52acbd7, + 0xef15e8e6, + 0xe11ce5ed, + 0xf307f2f0, + 0xfd0efffb, + 0xa779b492, + 0xa970b999, + 0xbb6bae84, + 0xb562a38f, + 0x9f5d80be, + 0x91548db5, + 0x834f9aa8, + 0x8d4697a3 + ]); + function expandKey128(cipherKey) { + var b = 176, result = new Uint8Array(b); + result.set(cipherKey); + for (var j = 16, i = 1; j < b; ++i) { + var t1 = result[j - 3], t2 = result[j - 2], t3 = result[j - 1], t4 = result[j - 4]; + t1 = s[t1]; + t2 = s[t2]; + t3 = s[t3]; + t4 = s[t4]; + t1 = t1 ^ rcon[i]; + for (var n = 0; n < 4; ++n) { + result[j] = t1 ^= result[j - 16]; + j++; + result[j] = t2 ^= result[j - 16]; + j++; + result[j] = t3 ^= result[j - 16]; + j++; + result[j] = t4 ^= result[j - 16]; + j++; + } + } + return result; + } + function decrypt128(input, key) { + var state = new Uint8Array(16); + state.set(input); + var i, j, k; + var t, u, v; + for (j = 0, k = 160; j < 16; ++j, ++k) { + state[j] ^= key[k]; + } + for (i = 9; i >= 1; --i) { + t = state[13]; + state[13] = state[9]; + state[9] = state[5]; + state[5] = state[1]; + state[1] = t; + t = state[14]; + u = state[10]; + state[14] = state[6]; + state[10] = state[2]; + state[6] = t; + state[2] = u; + t = state[15]; + u = state[11]; + v = state[7]; + state[15] = state[3]; + state[11] = t; + state[7] = u; + state[3] = v; + for (j = 0; j < 16; ++j) { + state[j] = inv_s[state[j]]; + } + for (j = 0, k = i * 16; j < 16; ++j, ++k) { + state[j] ^= key[k]; + } + for (j = 0; j < 16; j += 4) { + var s0 = mix[state[j]], s1 = mix[state[j + 1]], s2 = mix[state[j + 2]], s3 = mix[state[j + 3]]; + t = s0 ^ s1 >>> 8 ^ s1 << 24 ^ s2 >>> 16 ^ s2 << 16 ^ s3 >>> 24 ^ s3 << 8; + state[j] = t >>> 24 & 0xFF; + state[j + 1] = t >> 16 & 0xFF; + state[j + 2] = t >> 8 & 0xFF; + state[j + 3] = t & 0xFF; + } + } + t = state[13]; + state[13] = state[9]; + state[9] = state[5]; + state[5] = state[1]; + state[1] = t; + t = state[14]; + u = state[10]; + state[14] = state[6]; + state[10] = state[2]; + state[6] = t; + state[2] = u; + t = state[15]; + u = state[11]; + v = state[7]; + state[15] = state[3]; + state[11] = t; + state[7] = u; + state[3] = v; + for (j = 0; j < 16; ++j) { + state[j] = inv_s[state[j]]; + state[j] ^= key[j]; + } + return state; + } + function encrypt128(input, key) { + var t, u, v, k; + var state = new Uint8Array(16); + state.set(input); + for (j = 0; j < 16; ++j) { + state[j] ^= key[j]; + } + for (i = 1; i < 10; i++) { + for (j = 0; j < 16; ++j) { + state[j] = s[state[j]]; + } + v = state[1]; + state[1] = state[5]; + state[5] = state[9]; + state[9] = state[13]; + state[13] = v; + v = state[2]; + u = state[6]; + state[2] = state[10]; + state[6] = state[14]; + state[10] = v; + state[14] = u; + v = state[3]; + u = state[7]; + t = state[11]; + state[3] = state[15]; + state[7] = v; + state[11] = u; + state[15] = t; + for (var j = 0; j < 16; j += 4) { + var s0 = state[j + 0], s1 = state[j + 1]; + var s2 = state[j + 2], s3 = state[j + 3]; + t = s0 ^ s1 ^ s2 ^ s3; + state[j + 0] ^= t ^ mixCol[s0 ^ s1]; + state[j + 1] ^= t ^ mixCol[s1 ^ s2]; + state[j + 2] ^= t ^ mixCol[s2 ^ s3]; + state[j + 3] ^= t ^ mixCol[s3 ^ s0]; + } + for (j = 0, k = i * 16; j < 16; ++j, ++k) { + state[j] ^= key[k]; + } + } + for (j = 0; j < 16; ++j) { + state[j] = s[state[j]]; + } + v = state[1]; + state[1] = state[5]; + state[5] = state[9]; + state[9] = state[13]; + state[13] = v; + v = state[2]; + u = state[6]; + state[2] = state[10]; + state[6] = state[14]; + state[10] = v; + state[14] = u; + v = state[3]; + u = state[7]; + t = state[11]; + state[3] = state[15]; + state[7] = v; + state[11] = u; + state[15] = t; + for (j = 0, k = 160; j < 16; ++j, ++k) { + state[j] ^= key[k]; + } + return state; + } + function AES128Cipher(key) { + this.key = expandKey128(key); + this.buffer = new Uint8Array(16); + this.bufferPosition = 0; + } + function decryptBlock2(data, finalize) { + var i, j, ii, sourceLength = data.length, buffer = this.buffer, bufferLength = this.bufferPosition, result = [], iv = this.iv; + for (i = 0; i < sourceLength; ++i) { + buffer[bufferLength] = data[i]; + ++bufferLength; + if (bufferLength < 16) { + continue; + } + var plain = decrypt128(buffer, this.key); + for (j = 0; j < 16; ++j) { + plain[j] ^= iv[j]; + } + iv = buffer; + result.push(plain); + buffer = new Uint8Array(16); + bufferLength = 0; + } + this.buffer = buffer; + this.bufferLength = bufferLength; + this.iv = iv; + if (result.length === 0) { + return new Uint8Array([]); + } + var outputLength = 16 * result.length; + if (finalize) { + var lastBlock = result[result.length - 1]; + var psLen = lastBlock[15]; + if (psLen <= 16) { + for (i = 15, ii = 16 - psLen; i >= ii; --i) { + if (lastBlock[i] !== psLen) { + psLen = 0; + break; + } + } + outputLength -= psLen; + result[result.length - 1] = lastBlock.subarray(0, 16 - psLen); + } + } + var output = new Uint8Array(outputLength); + for (i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) { + output.set(result[i], j); + } + return output; + } + AES128Cipher.prototype = { + decryptBlock: function AES128Cipher_decryptBlock(data, finalize) { + var i, sourceLength = data.length; + var buffer = this.buffer, bufferLength = this.bufferPosition; + for (i = 0; bufferLength < 16 && i < sourceLength; ++i, ++bufferLength) { + buffer[bufferLength] = data[i]; + } + if (bufferLength < 16) { + this.bufferLength = bufferLength; + return new Uint8Array([]); + } + this.iv = buffer; + this.buffer = new Uint8Array(16); + this.bufferLength = 0; + this.decryptBlock = decryptBlock2; + return this.decryptBlock(data.subarray(16), finalize); + }, + encrypt: function AES128Cipher_encrypt(data, iv) { + var i, j, ii, sourceLength = data.length, buffer = this.buffer, bufferLength = this.bufferPosition, result = []; + if (!iv) { + iv = new Uint8Array(16); + } + for (i = 0; i < sourceLength; ++i) { + buffer[bufferLength] = data[i]; + ++bufferLength; + if (bufferLength < 16) { + continue; + } + for (j = 0; j < 16; ++j) { + buffer[j] ^= iv[j]; + } + var cipher = encrypt128(buffer, this.key); + iv = cipher; + result.push(cipher); + buffer = new Uint8Array(16); + bufferLength = 0; + } + this.buffer = buffer; + this.bufferLength = bufferLength; + this.iv = iv; + if (result.length === 0) { + return new Uint8Array([]); + } + var outputLength = 16 * result.length; + var output = new Uint8Array(outputLength); + for (i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) { + output.set(result[i], j); + } + return output; + } + }; + return AES128Cipher; + }(); + var AES256Cipher = function AES256CipherClosure() { + var rcon = new Uint8Array([ + 0x8d, + 0x01, + 0x02, + 0x04, + 0x08, + 0x10, + 0x20, + 0x40, + 0x80, + 0x1b, + 0x36, + 0x6c, + 0xd8, + 0xab, + 0x4d, + 0x9a, + 0x2f, + 0x5e, + 0xbc, + 0x63, + 0xc6, + 0x97, + 0x35, + 0x6a, + 0xd4, + 0xb3, + 0x7d, + 0xfa, + 0xef, + 0xc5, + 0x91, + 0x39, + 0x72, + 0xe4, + 0xd3, + 0xbd, + 0x61, + 0xc2, + 0x9f, + 0x25, + 0x4a, + 0x94, + 0x33, + 0x66, + 0xcc, + 0x83, + 0x1d, + 0x3a, + 0x74, + 0xe8, + 0xcb, + 0x8d, + 0x01, + 0x02, + 0x04, + 0x08, + 0x10, + 0x20, + 0x40, + 0x80, + 0x1b, + 0x36, + 0x6c, + 0xd8, + 0xab, + 0x4d, + 0x9a, + 0x2f, + 0x5e, + 0xbc, + 0x63, + 0xc6, + 0x97, + 0x35, + 0x6a, + 0xd4, + 0xb3, + 0x7d, + 0xfa, + 0xef, + 0xc5, + 0x91, + 0x39, + 0x72, + 0xe4, + 0xd3, + 0xbd, + 0x61, + 0xc2, + 0x9f, + 0x25, + 0x4a, + 0x94, + 0x33, + 0x66, + 0xcc, + 0x83, + 0x1d, + 0x3a, + 0x74, + 0xe8, + 0xcb, + 0x8d, + 0x01, + 0x02, + 0x04, + 0x08, + 0x10, + 0x20, + 0x40, + 0x80, + 0x1b, + 0x36, + 0x6c, + 0xd8, + 0xab, + 0x4d, + 0x9a, + 0x2f, + 0x5e, + 0xbc, + 0x63, + 0xc6, + 0x97, + 0x35, + 0x6a, + 0xd4, + 0xb3, + 0x7d, + 0xfa, + 0xef, + 0xc5, + 0x91, + 0x39, + 0x72, + 0xe4, + 0xd3, + 0xbd, + 0x61, + 0xc2, + 0x9f, + 0x25, + 0x4a, + 0x94, + 0x33, + 0x66, + 0xcc, + 0x83, + 0x1d, + 0x3a, + 0x74, + 0xe8, + 0xcb, + 0x8d, + 0x01, + 0x02, + 0x04, + 0x08, + 0x10, + 0x20, + 0x40, + 0x80, + 0x1b, + 0x36, + 0x6c, + 0xd8, + 0xab, + 0x4d, + 0x9a, + 0x2f, + 0x5e, + 0xbc, + 0x63, + 0xc6, + 0x97, + 0x35, + 0x6a, + 0xd4, + 0xb3, + 0x7d, + 0xfa, + 0xef, + 0xc5, + 0x91, + 0x39, + 0x72, + 0xe4, + 0xd3, + 0xbd, + 0x61, + 0xc2, + 0x9f, + 0x25, + 0x4a, + 0x94, + 0x33, + 0x66, + 0xcc, + 0x83, + 0x1d, + 0x3a, + 0x74, + 0xe8, + 0xcb, + 0x8d, + 0x01, + 0x02, + 0x04, + 0x08, + 0x10, + 0x20, + 0x40, + 0x80, + 0x1b, + 0x36, + 0x6c, + 0xd8, + 0xab, + 0x4d, + 0x9a, + 0x2f, + 0x5e, + 0xbc, + 0x63, + 0xc6, + 0x97, + 0x35, + 0x6a, + 0xd4, + 0xb3, + 0x7d, + 0xfa, + 0xef, + 0xc5, + 0x91, + 0x39, + 0x72, + 0xe4, + 0xd3, + 0xbd, + 0x61, + 0xc2, + 0x9f, + 0x25, + 0x4a, + 0x94, + 0x33, + 0x66, + 0xcc, + 0x83, + 0x1d, + 0x3a, + 0x74, + 0xe8, + 0xcb, + 0x8d + ]); + var s = new Uint8Array([ + 0x63, + 0x7c, + 0x77, + 0x7b, + 0xf2, + 0x6b, + 0x6f, + 0xc5, + 0x30, + 0x01, + 0x67, + 0x2b, + 0xfe, + 0xd7, + 0xab, + 0x76, + 0xca, + 0x82, + 0xc9, + 0x7d, + 0xfa, + 0x59, + 0x47, + 0xf0, + 0xad, + 0xd4, + 0xa2, + 0xaf, + 0x9c, + 0xa4, + 0x72, + 0xc0, + 0xb7, + 0xfd, + 0x93, + 0x26, + 0x36, + 0x3f, + 0xf7, + 0xcc, + 0x34, + 0xa5, + 0xe5, + 0xf1, + 0x71, + 0xd8, + 0x31, + 0x15, + 0x04, + 0xc7, + 0x23, + 0xc3, + 0x18, + 0x96, + 0x05, + 0x9a, + 0x07, + 0x12, + 0x80, + 0xe2, + 0xeb, + 0x27, + 0xb2, + 0x75, + 0x09, + 0x83, + 0x2c, + 0x1a, + 0x1b, + 0x6e, + 0x5a, + 0xa0, + 0x52, + 0x3b, + 0xd6, + 0xb3, + 0x29, + 0xe3, + 0x2f, + 0x84, + 0x53, + 0xd1, + 0x00, + 0xed, + 0x20, + 0xfc, + 0xb1, + 0x5b, + 0x6a, + 0xcb, + 0xbe, + 0x39, + 0x4a, + 0x4c, + 0x58, + 0xcf, + 0xd0, + 0xef, + 0xaa, + 0xfb, + 0x43, + 0x4d, + 0x33, + 0x85, + 0x45, + 0xf9, + 0x02, + 0x7f, + 0x50, + 0x3c, + 0x9f, + 0xa8, + 0x51, + 0xa3, + 0x40, + 0x8f, + 0x92, + 0x9d, + 0x38, + 0xf5, + 0xbc, + 0xb6, + 0xda, + 0x21, + 0x10, + 0xff, + 0xf3, + 0xd2, + 0xcd, + 0x0c, + 0x13, + 0xec, + 0x5f, + 0x97, + 0x44, + 0x17, + 0xc4, + 0xa7, + 0x7e, + 0x3d, + 0x64, + 0x5d, + 0x19, + 0x73, + 0x60, + 0x81, + 0x4f, + 0xdc, + 0x22, + 0x2a, + 0x90, + 0x88, + 0x46, + 0xee, + 0xb8, + 0x14, + 0xde, + 0x5e, + 0x0b, + 0xdb, + 0xe0, + 0x32, + 0x3a, + 0x0a, + 0x49, + 0x06, + 0x24, + 0x5c, + 0xc2, + 0xd3, + 0xac, + 0x62, + 0x91, + 0x95, + 0xe4, + 0x79, + 0xe7, + 0xc8, + 0x37, + 0x6d, + 0x8d, + 0xd5, + 0x4e, + 0xa9, + 0x6c, + 0x56, + 0xf4, + 0xea, + 0x65, + 0x7a, + 0xae, + 0x08, + 0xba, + 0x78, + 0x25, + 0x2e, + 0x1c, + 0xa6, + 0xb4, + 0xc6, + 0xe8, + 0xdd, + 0x74, + 0x1f, + 0x4b, + 0xbd, + 0x8b, + 0x8a, + 0x70, + 0x3e, + 0xb5, + 0x66, + 0x48, + 0x03, + 0xf6, + 0x0e, + 0x61, + 0x35, + 0x57, + 0xb9, + 0x86, + 0xc1, + 0x1d, + 0x9e, + 0xe1, + 0xf8, + 0x98, + 0x11, + 0x69, + 0xd9, + 0x8e, + 0x94, + 0x9b, + 0x1e, + 0x87, + 0xe9, + 0xce, + 0x55, + 0x28, + 0xdf, + 0x8c, + 0xa1, + 0x89, + 0x0d, + 0xbf, + 0xe6, + 0x42, + 0x68, + 0x41, + 0x99, + 0x2d, + 0x0f, + 0xb0, + 0x54, + 0xbb, + 0x16 + ]); + var inv_s = new Uint8Array([ + 0x52, + 0x09, + 0x6a, + 0xd5, + 0x30, + 0x36, + 0xa5, + 0x38, + 0xbf, + 0x40, + 0xa3, + 0x9e, + 0x81, + 0xf3, + 0xd7, + 0xfb, + 0x7c, + 0xe3, + 0x39, + 0x82, + 0x9b, + 0x2f, + 0xff, + 0x87, + 0x34, + 0x8e, + 0x43, + 0x44, + 0xc4, + 0xde, + 0xe9, + 0xcb, + 0x54, + 0x7b, + 0x94, + 0x32, + 0xa6, + 0xc2, + 0x23, + 0x3d, + 0xee, + 0x4c, + 0x95, + 0x0b, + 0x42, + 0xfa, + 0xc3, + 0x4e, + 0x08, + 0x2e, + 0xa1, + 0x66, + 0x28, + 0xd9, + 0x24, + 0xb2, + 0x76, + 0x5b, + 0xa2, + 0x49, + 0x6d, + 0x8b, + 0xd1, + 0x25, + 0x72, + 0xf8, + 0xf6, + 0x64, + 0x86, + 0x68, + 0x98, + 0x16, + 0xd4, + 0xa4, + 0x5c, + 0xcc, + 0x5d, + 0x65, + 0xb6, + 0x92, + 0x6c, + 0x70, + 0x48, + 0x50, + 0xfd, + 0xed, + 0xb9, + 0xda, + 0x5e, + 0x15, + 0x46, + 0x57, + 0xa7, + 0x8d, + 0x9d, + 0x84, + 0x90, + 0xd8, + 0xab, + 0x00, + 0x8c, + 0xbc, + 0xd3, + 0x0a, + 0xf7, + 0xe4, + 0x58, + 0x05, + 0xb8, + 0xb3, + 0x45, + 0x06, + 0xd0, + 0x2c, + 0x1e, + 0x8f, + 0xca, + 0x3f, + 0x0f, + 0x02, + 0xc1, + 0xaf, + 0xbd, + 0x03, + 0x01, + 0x13, + 0x8a, + 0x6b, + 0x3a, + 0x91, + 0x11, + 0x41, + 0x4f, + 0x67, + 0xdc, + 0xea, + 0x97, + 0xf2, + 0xcf, + 0xce, + 0xf0, + 0xb4, + 0xe6, + 0x73, + 0x96, + 0xac, + 0x74, + 0x22, + 0xe7, + 0xad, + 0x35, + 0x85, + 0xe2, + 0xf9, + 0x37, + 0xe8, + 0x1c, + 0x75, + 0xdf, + 0x6e, + 0x47, + 0xf1, + 0x1a, + 0x71, + 0x1d, + 0x29, + 0xc5, + 0x89, + 0x6f, + 0xb7, + 0x62, + 0x0e, + 0xaa, + 0x18, + 0xbe, + 0x1b, + 0xfc, + 0x56, + 0x3e, + 0x4b, + 0xc6, + 0xd2, + 0x79, + 0x20, + 0x9a, + 0xdb, + 0xc0, + 0xfe, + 0x78, + 0xcd, + 0x5a, + 0xf4, + 0x1f, + 0xdd, + 0xa8, + 0x33, + 0x88, + 0x07, + 0xc7, + 0x31, + 0xb1, + 0x12, + 0x10, + 0x59, + 0x27, + 0x80, + 0xec, + 0x5f, + 0x60, + 0x51, + 0x7f, + 0xa9, + 0x19, + 0xb5, + 0x4a, + 0x0d, + 0x2d, + 0xe5, + 0x7a, + 0x9f, + 0x93, + 0xc9, + 0x9c, + 0xef, + 0xa0, + 0xe0, + 0x3b, + 0x4d, + 0xae, + 0x2a, + 0xf5, + 0xb0, + 0xc8, + 0xeb, + 0xbb, + 0x3c, + 0x83, + 0x53, + 0x99, + 0x61, + 0x17, + 0x2b, + 0x04, + 0x7e, + 0xba, + 0x77, + 0xd6, + 0x26, + 0xe1, + 0x69, + 0x14, + 0x63, + 0x55, + 0x21, + 0x0c, + 0x7d + ]); + var mixCol = new Uint8Array(256); + for (var i = 0; i < 256; i++) { + if (i < 128) { + mixCol[i] = i << 1; + } else { + mixCol[i] = i << 1 ^ 0x1b; + } + } + var mix = new Uint32Array([ + 0x00000000, + 0x0e090d0b, + 0x1c121a16, + 0x121b171d, + 0x3824342c, + 0x362d3927, + 0x24362e3a, + 0x2a3f2331, + 0x70486858, + 0x7e416553, + 0x6c5a724e, + 0x62537f45, + 0x486c5c74, + 0x4665517f, + 0x547e4662, + 0x5a774b69, + 0xe090d0b0, + 0xee99ddbb, + 0xfc82caa6, + 0xf28bc7ad, + 0xd8b4e49c, + 0xd6bde997, + 0xc4a6fe8a, + 0xcaaff381, + 0x90d8b8e8, + 0x9ed1b5e3, + 0x8ccaa2fe, + 0x82c3aff5, + 0xa8fc8cc4, + 0xa6f581cf, + 0xb4ee96d2, + 0xbae79bd9, + 0xdb3bbb7b, + 0xd532b670, + 0xc729a16d, + 0xc920ac66, + 0xe31f8f57, + 0xed16825c, + 0xff0d9541, + 0xf104984a, + 0xab73d323, + 0xa57ade28, + 0xb761c935, + 0xb968c43e, + 0x9357e70f, + 0x9d5eea04, + 0x8f45fd19, + 0x814cf012, + 0x3bab6bcb, + 0x35a266c0, + 0x27b971dd, + 0x29b07cd6, + 0x038f5fe7, + 0x0d8652ec, + 0x1f9d45f1, + 0x119448fa, + 0x4be30393, + 0x45ea0e98, + 0x57f11985, + 0x59f8148e, + 0x73c737bf, + 0x7dce3ab4, + 0x6fd52da9, + 0x61dc20a2, + 0xad766df6, + 0xa37f60fd, + 0xb16477e0, + 0xbf6d7aeb, + 0x955259da, + 0x9b5b54d1, + 0x894043cc, + 0x87494ec7, + 0xdd3e05ae, + 0xd33708a5, + 0xc12c1fb8, + 0xcf2512b3, + 0xe51a3182, + 0xeb133c89, + 0xf9082b94, + 0xf701269f, + 0x4de6bd46, + 0x43efb04d, + 0x51f4a750, + 0x5ffdaa5b, + 0x75c2896a, + 0x7bcb8461, + 0x69d0937c, + 0x67d99e77, + 0x3daed51e, + 0x33a7d815, + 0x21bccf08, + 0x2fb5c203, + 0x058ae132, + 0x0b83ec39, + 0x1998fb24, + 0x1791f62f, + 0x764dd68d, + 0x7844db86, + 0x6a5fcc9b, + 0x6456c190, + 0x4e69e2a1, + 0x4060efaa, + 0x527bf8b7, + 0x5c72f5bc, + 0x0605bed5, + 0x080cb3de, + 0x1a17a4c3, + 0x141ea9c8, + 0x3e218af9, + 0x302887f2, + 0x223390ef, + 0x2c3a9de4, + 0x96dd063d, + 0x98d40b36, + 0x8acf1c2b, + 0x84c61120, + 0xaef93211, + 0xa0f03f1a, + 0xb2eb2807, + 0xbce2250c, + 0xe6956e65, + 0xe89c636e, + 0xfa877473, + 0xf48e7978, + 0xdeb15a49, + 0xd0b85742, + 0xc2a3405f, + 0xccaa4d54, + 0x41ecdaf7, + 0x4fe5d7fc, + 0x5dfec0e1, + 0x53f7cdea, + 0x79c8eedb, + 0x77c1e3d0, + 0x65daf4cd, + 0x6bd3f9c6, + 0x31a4b2af, + 0x3fadbfa4, + 0x2db6a8b9, + 0x23bfa5b2, + 0x09808683, + 0x07898b88, + 0x15929c95, + 0x1b9b919e, + 0xa17c0a47, + 0xaf75074c, + 0xbd6e1051, + 0xb3671d5a, + 0x99583e6b, + 0x97513360, + 0x854a247d, + 0x8b432976, + 0xd134621f, + 0xdf3d6f14, + 0xcd267809, + 0xc32f7502, + 0xe9105633, + 0xe7195b38, + 0xf5024c25, + 0xfb0b412e, + 0x9ad7618c, + 0x94de6c87, + 0x86c57b9a, + 0x88cc7691, + 0xa2f355a0, + 0xacfa58ab, + 0xbee14fb6, + 0xb0e842bd, + 0xea9f09d4, + 0xe49604df, + 0xf68d13c2, + 0xf8841ec9, + 0xd2bb3df8, + 0xdcb230f3, + 0xcea927ee, + 0xc0a02ae5, + 0x7a47b13c, + 0x744ebc37, + 0x6655ab2a, + 0x685ca621, + 0x42638510, + 0x4c6a881b, + 0x5e719f06, + 0x5078920d, + 0x0a0fd964, + 0x0406d46f, + 0x161dc372, + 0x1814ce79, + 0x322bed48, + 0x3c22e043, + 0x2e39f75e, + 0x2030fa55, + 0xec9ab701, + 0xe293ba0a, + 0xf088ad17, + 0xfe81a01c, + 0xd4be832d, + 0xdab78e26, + 0xc8ac993b, + 0xc6a59430, + 0x9cd2df59, + 0x92dbd252, + 0x80c0c54f, + 0x8ec9c844, + 0xa4f6eb75, + 0xaaffe67e, + 0xb8e4f163, + 0xb6edfc68, + 0x0c0a67b1, + 0x02036aba, + 0x10187da7, + 0x1e1170ac, + 0x342e539d, + 0x3a275e96, + 0x283c498b, + 0x26354480, + 0x7c420fe9, + 0x724b02e2, + 0x605015ff, + 0x6e5918f4, + 0x44663bc5, + 0x4a6f36ce, + 0x587421d3, + 0x567d2cd8, + 0x37a10c7a, + 0x39a80171, + 0x2bb3166c, + 0x25ba1b67, + 0x0f853856, + 0x018c355d, + 0x13972240, + 0x1d9e2f4b, + 0x47e96422, + 0x49e06929, + 0x5bfb7e34, + 0x55f2733f, + 0x7fcd500e, + 0x71c45d05, + 0x63df4a18, + 0x6dd64713, + 0xd731dcca, + 0xd938d1c1, + 0xcb23c6dc, + 0xc52acbd7, + 0xef15e8e6, + 0xe11ce5ed, + 0xf307f2f0, + 0xfd0efffb, + 0xa779b492, + 0xa970b999, + 0xbb6bae84, + 0xb562a38f, + 0x9f5d80be, + 0x91548db5, + 0x834f9aa8, + 0x8d4697a3 + ]); + function expandKey256(cipherKey) { + var b = 240, result = new Uint8Array(b); + var r = 1; + result.set(cipherKey); + for (var j = 32, i = 1; j < b; ++i) { + if (j % 32 === 16) { + t1 = s[t1]; + t2 = s[t2]; + t3 = s[t3]; + t4 = s[t4]; + } else if (j % 32 === 0) { + var t1 = result[j - 3], t2 = result[j - 2], t3 = result[j - 1], t4 = result[j - 4]; + t1 = s[t1]; + t2 = s[t2]; + t3 = s[t3]; + t4 = s[t4]; + t1 = t1 ^ r; + if ((r <<= 1) >= 256) { + r = (r ^ 0x1b) & 0xFF; + } + } + for (var n = 0; n < 4; ++n) { + result[j] = t1 ^= result[j - 32]; + j++; + result[j] = t2 ^= result[j - 32]; + j++; + result[j] = t3 ^= result[j - 32]; + j++; + result[j] = t4 ^= result[j - 32]; + j++; + } + } + return result; + } + function decrypt256(input, key) { + var state = new Uint8Array(16); + state.set(input); + var i, j, k; + var t, u, v; + for (j = 0, k = 224; j < 16; ++j, ++k) { + state[j] ^= key[k]; + } + for (i = 13; i >= 1; --i) { + t = state[13]; + state[13] = state[9]; + state[9] = state[5]; + state[5] = state[1]; + state[1] = t; + t = state[14]; + u = state[10]; + state[14] = state[6]; + state[10] = state[2]; + state[6] = t; + state[2] = u; + t = state[15]; + u = state[11]; + v = state[7]; + state[15] = state[3]; + state[11] = t; + state[7] = u; + state[3] = v; + for (j = 0; j < 16; ++j) { + state[j] = inv_s[state[j]]; + } + for (j = 0, k = i * 16; j < 16; ++j, ++k) { + state[j] ^= key[k]; + } + for (j = 0; j < 16; j += 4) { + var s0 = mix[state[j]], s1 = mix[state[j + 1]], s2 = mix[state[j + 2]], s3 = mix[state[j + 3]]; + t = s0 ^ s1 >>> 8 ^ s1 << 24 ^ s2 >>> 16 ^ s2 << 16 ^ s3 >>> 24 ^ s3 << 8; + state[j] = t >>> 24 & 0xFF; + state[j + 1] = t >> 16 & 0xFF; + state[j + 2] = t >> 8 & 0xFF; + state[j + 3] = t & 0xFF; + } + } + t = state[13]; + state[13] = state[9]; + state[9] = state[5]; + state[5] = state[1]; + state[1] = t; + t = state[14]; + u = state[10]; + state[14] = state[6]; + state[10] = state[2]; + state[6] = t; + state[2] = u; + t = state[15]; + u = state[11]; + v = state[7]; + state[15] = state[3]; + state[11] = t; + state[7] = u; + state[3] = v; + for (j = 0; j < 16; ++j) { + state[j] = inv_s[state[j]]; + state[j] ^= key[j]; + } + return state; + } + function encrypt256(input, key) { + var t, u, v, k; + var state = new Uint8Array(16); + state.set(input); + for (j = 0; j < 16; ++j) { + state[j] ^= key[j]; + } + for (i = 1; i < 14; i++) { + for (j = 0; j < 16; ++j) { + state[j] = s[state[j]]; + } + v = state[1]; + state[1] = state[5]; + state[5] = state[9]; + state[9] = state[13]; + state[13] = v; + v = state[2]; + u = state[6]; + state[2] = state[10]; + state[6] = state[14]; + state[10] = v; + state[14] = u; + v = state[3]; + u = state[7]; + t = state[11]; + state[3] = state[15]; + state[7] = v; + state[11] = u; + state[15] = t; + for (var j = 0; j < 16; j += 4) { + var s0 = state[j + 0], s1 = state[j + 1]; + var s2 = state[j + 2], s3 = state[j + 3]; + t = s0 ^ s1 ^ s2 ^ s3; + state[j + 0] ^= t ^ mixCol[s0 ^ s1]; + state[j + 1] ^= t ^ mixCol[s1 ^ s2]; + state[j + 2] ^= t ^ mixCol[s2 ^ s3]; + state[j + 3] ^= t ^ mixCol[s3 ^ s0]; + } + for (j = 0, k = i * 16; j < 16; ++j, ++k) { + state[j] ^= key[k]; + } + } + for (j = 0; j < 16; ++j) { + state[j] = s[state[j]]; + } + v = state[1]; + state[1] = state[5]; + state[5] = state[9]; + state[9] = state[13]; + state[13] = v; + v = state[2]; + u = state[6]; + state[2] = state[10]; + state[6] = state[14]; + state[10] = v; + state[14] = u; + v = state[3]; + u = state[7]; + t = state[11]; + state[3] = state[15]; + state[7] = v; + state[11] = u; + state[15] = t; + for (j = 0, k = 224; j < 16; ++j, ++k) { + state[j] ^= key[k]; + } + return state; + } + function AES256Cipher(key) { + this.key = expandKey256(key); + this.buffer = new Uint8Array(16); + this.bufferPosition = 0; + } + function decryptBlock2(data, finalize) { + var i, j, ii, sourceLength = data.length, buffer = this.buffer, bufferLength = this.bufferPosition, result = [], iv = this.iv; + for (i = 0; i < sourceLength; ++i) { + buffer[bufferLength] = data[i]; + ++bufferLength; + if (bufferLength < 16) { + continue; + } + var plain = decrypt256(buffer, this.key); + for (j = 0; j < 16; ++j) { + plain[j] ^= iv[j]; + } + iv = buffer; + result.push(plain); + buffer = new Uint8Array(16); + bufferLength = 0; + } + this.buffer = buffer; + this.bufferLength = bufferLength; + this.iv = iv; + if (result.length === 0) { + return new Uint8Array([]); + } + var outputLength = 16 * result.length; + if (finalize) { + var lastBlock = result[result.length - 1]; + var psLen = lastBlock[15]; + if (psLen <= 16) { + for (i = 15, ii = 16 - psLen; i >= ii; --i) { + if (lastBlock[i] !== psLen) { + psLen = 0; + break; + } + } + outputLength -= psLen; + result[result.length - 1] = lastBlock.subarray(0, 16 - psLen); + } + } + var output = new Uint8Array(outputLength); + for (i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) { + output.set(result[i], j); + } + return output; + } + AES256Cipher.prototype = { + decryptBlock: function AES256Cipher_decryptBlock(data, finalize, iv) { + var i, sourceLength = data.length; + var buffer = this.buffer, bufferLength = this.bufferPosition; + if (iv) { + this.iv = iv; + } else { + for (i = 0; bufferLength < 16 && i < sourceLength; ++i, ++bufferLength) { + buffer[bufferLength] = data[i]; + } + if (bufferLength < 16) { + this.bufferLength = bufferLength; + return new Uint8Array([]); + } + this.iv = buffer; + data = data.subarray(16); + } + this.buffer = new Uint8Array(16); + this.bufferLength = 0; + this.decryptBlock = decryptBlock2; + return this.decryptBlock(data, finalize); + }, + encrypt: function AES256Cipher_encrypt(data, iv) { + var i, j, ii, sourceLength = data.length, buffer = this.buffer, bufferLength = this.bufferPosition, result = []; + if (!iv) { + iv = new Uint8Array(16); + } + for (i = 0; i < sourceLength; ++i) { + buffer[bufferLength] = data[i]; + ++bufferLength; + if (bufferLength < 16) { + continue; + } + for (j = 0; j < 16; ++j) { + buffer[j] ^= iv[j]; + } + var cipher = encrypt256(buffer, this.key); + this.iv = cipher; + result.push(cipher); + buffer = new Uint8Array(16); + bufferLength = 0; + } + this.buffer = buffer; + this.bufferLength = bufferLength; + this.iv = iv; + if (result.length === 0) { + return new Uint8Array([]); + } + var outputLength = 16 * result.length; + var output = new Uint8Array(outputLength); + for (i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) { + output.set(result[i], j); + } + return output; + } + }; + return AES256Cipher; + }(); + var PDF17 = function PDF17Closure() { + function compareByteArrays(array1, array2) { + if (array1.length !== array2.length) { + return false; + } + for (var i = 0; i < array1.length; i++) { + if (array1[i] !== array2[i]) { + return false; + } + } + return true; + } + function PDF17() { + } + PDF17.prototype = { + checkOwnerPassword: function PDF17_checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) { + var hashData = new Uint8Array(password.length + 56); + hashData.set(password, 0); + hashData.set(ownerValidationSalt, password.length); + hashData.set(userBytes, password.length + ownerValidationSalt.length); + var result = calculateSHA256(hashData, 0, hashData.length); + return compareByteArrays(result, ownerPassword); + }, + checkUserPassword: function PDF17_checkUserPassword(password, userValidationSalt, userPassword) { + var hashData = new Uint8Array(password.length + 8); + hashData.set(password, 0); + hashData.set(userValidationSalt, password.length); + var result = calculateSHA256(hashData, 0, hashData.length); + return compareByteArrays(result, userPassword); + }, + getOwnerKey: function PDF17_getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) { + var hashData = new Uint8Array(password.length + 56); + hashData.set(password, 0); + hashData.set(ownerKeySalt, password.length); + hashData.set(userBytes, password.length + ownerKeySalt.length); + var key = calculateSHA256(hashData, 0, hashData.length); + var cipher = new AES256Cipher(key); + return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16)); + }, + getUserKey: function PDF17_getUserKey(password, userKeySalt, userEncryption) { + var hashData = new Uint8Array(password.length + 8); + hashData.set(password, 0); + hashData.set(userKeySalt, password.length); + var key = calculateSHA256(hashData, 0, hashData.length); + var cipher = new AES256Cipher(key); + return cipher.decryptBlock(userEncryption, false, new Uint8Array(16)); + } + }; + return PDF17; + }(); + var PDF20 = function PDF20Closure() { + function concatArrays(array1, array2) { + var t = new Uint8Array(array1.length + array2.length); + t.set(array1, 0); + t.set(array2, array1.length); + return t; + } + function calculatePDF20Hash(password, input, userBytes) { + var k = calculateSHA256(input, 0, input.length).subarray(0, 32); + var e = [0]; + var i = 0; + while (i < 64 || e[e.length - 1] > i - 32) { + var arrayLength = password.length + k.length + userBytes.length; + var k1 = new Uint8Array(arrayLength * 64); + var array = concatArrays(password, k); + array = concatArrays(array, userBytes); + for (var j = 0, pos = 0; j < 64; j++, pos += arrayLength) { + k1.set(array, pos); + } + var cipher = new AES128Cipher(k.subarray(0, 16)); + e = cipher.encrypt(k1, k.subarray(16, 32)); + var remainder = 0; + for (var z = 0; z < 16; z++) { + remainder *= 256 % 3; + remainder %= 3; + remainder += (e[z] >>> 0) % 3; + remainder %= 3; + } + if (remainder === 0) { + k = calculateSHA256(e, 0, e.length); + } else if (remainder === 1) { + k = calculateSHA384(e, 0, e.length); + } else if (remainder === 2) { + k = calculateSHA512(e, 0, e.length); + } + i++; + } + return k.subarray(0, 32); + } + function PDF20() { + } + function compareByteArrays(array1, array2) { + if (array1.length !== array2.length) { + return false; + } + for (var i = 0; i < array1.length; i++) { + if (array1[i] !== array2[i]) { + return false; + } + } + return true; + } + PDF20.prototype = { + hash: function PDF20_hash(password, concatBytes, userBytes) { + return calculatePDF20Hash(password, concatBytes, userBytes); + }, + checkOwnerPassword: function PDF20_checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) { + var hashData = new Uint8Array(password.length + 56); + hashData.set(password, 0); + hashData.set(ownerValidationSalt, password.length); + hashData.set(userBytes, password.length + ownerValidationSalt.length); + var result = calculatePDF20Hash(password, hashData, userBytes); + return compareByteArrays(result, ownerPassword); + }, + checkUserPassword: function PDF20_checkUserPassword(password, userValidationSalt, userPassword) { + var hashData = new Uint8Array(password.length + 8); + hashData.set(password, 0); + hashData.set(userValidationSalt, password.length); + var result = calculatePDF20Hash(password, hashData, []); + return compareByteArrays(result, userPassword); + }, + getOwnerKey: function PDF20_getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) { + var hashData = new Uint8Array(password.length + 56); + hashData.set(password, 0); + hashData.set(ownerKeySalt, password.length); + hashData.set(userBytes, password.length + ownerKeySalt.length); + var key = calculatePDF20Hash(password, hashData, userBytes); + var cipher = new AES256Cipher(key); + return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16)); + }, + getUserKey: function PDF20_getUserKey(password, userKeySalt, userEncryption) { + var hashData = new Uint8Array(password.length + 8); + hashData.set(password, 0); + hashData.set(userKeySalt, password.length); + var key = calculatePDF20Hash(password, hashData, []); + var cipher = new AES256Cipher(key); + return cipher.decryptBlock(userEncryption, false, new Uint8Array(16)); + } + }; + return PDF20; + }(); + var CipherTransform = function CipherTransformClosure() { + function CipherTransform(stringCipherConstructor, streamCipherConstructor) { + this.StringCipherConstructor = stringCipherConstructor; + this.StreamCipherConstructor = streamCipherConstructor; + } + CipherTransform.prototype = { + createStream: function CipherTransform_createStream(stream, length) { + var cipher = new this.StreamCipherConstructor(); + return new DecryptStream(stream, length, function cipherTransformDecryptStream(data, finalize) { + return cipher.decryptBlock(data, finalize); + }); + }, + decryptString: function CipherTransform_decryptString(s) { + var cipher = new this.StringCipherConstructor(); + var data = stringToBytes(s); + data = cipher.decryptBlock(data, true); + return bytesToString(data); + } + }; + return CipherTransform; + }(); + var CipherTransformFactory = function CipherTransformFactoryClosure() { + var defaultPasswordBytes = new Uint8Array([ + 0x28, + 0xBF, + 0x4E, + 0x5E, + 0x4E, + 0x75, + 0x8A, + 0x41, + 0x64, + 0x00, + 0x4E, + 0x56, + 0xFF, + 0xFA, + 0x01, + 0x08, + 0x2E, + 0x2E, + 0x00, + 0xB6, + 0xD0, + 0x68, + 0x3E, + 0x80, + 0x2F, + 0x0C, + 0xA9, + 0xFE, + 0x64, + 0x53, + 0x69, + 0x7A + ]); + function createEncryptionKey20(revision, password, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms) { + if (password) { + var passwordLength = Math.min(127, password.length); + password = password.subarray(0, passwordLength); + } else { + password = []; + } + var pdfAlgorithm; + if (revision === 6) { + pdfAlgorithm = new PDF20(); + } else { + pdfAlgorithm = new PDF17(); + } + if (pdfAlgorithm.checkUserPassword(password, userValidationSalt, userPassword)) { + return pdfAlgorithm.getUserKey(password, userKeySalt, userEncryption); + } else if (password.length && pdfAlgorithm.checkOwnerPassword(password, ownerValidationSalt, uBytes, ownerPassword)) { + return pdfAlgorithm.getOwnerKey(password, ownerKeySalt, uBytes, ownerEncryption); + } + return null; + } + function prepareKeyData(fileId, password, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata) { + var hashDataSize = 40 + ownerPassword.length + fileId.length; + var hashData = new Uint8Array(hashDataSize), i = 0, j, n; + if (password) { + n = Math.min(32, password.length); + for (; i < n; ++i) { + hashData[i] = password[i]; + } + } + j = 0; + while (i < 32) { + hashData[i++] = defaultPasswordBytes[j++]; + } + for (j = 0, n = ownerPassword.length; j < n; ++j) { + hashData[i++] = ownerPassword[j]; + } + hashData[i++] = flags & 0xFF; + hashData[i++] = flags >> 8 & 0xFF; + hashData[i++] = flags >> 16 & 0xFF; + hashData[i++] = flags >>> 24 & 0xFF; + for (j = 0, n = fileId.length; j < n; ++j) { + hashData[i++] = fileId[j]; + } + if (revision >= 4 && !encryptMetadata) { + hashData[i++] = 0xFF; + hashData[i++] = 0xFF; + hashData[i++] = 0xFF; + hashData[i++] = 0xFF; + } + var hash = calculateMD5(hashData, 0, i); + var keyLengthInBytes = keyLength >> 3; + if (revision >= 3) { + for (j = 0; j < 50; ++j) { + hash = calculateMD5(hash, 0, keyLengthInBytes); + } + } + var encryptionKey = hash.subarray(0, keyLengthInBytes); + var cipher, checkData; + if (revision >= 3) { + for (i = 0; i < 32; ++i) { + hashData[i] = defaultPasswordBytes[i]; + } + for (j = 0, n = fileId.length; j < n; ++j) { + hashData[i++] = fileId[j]; + } + cipher = new ARCFourCipher(encryptionKey); + checkData = cipher.encryptBlock(calculateMD5(hashData, 0, i)); + n = encryptionKey.length; + var derivedKey = new Uint8Array(n), k; + for (j = 1; j <= 19; ++j) { + for (k = 0; k < n; ++k) { + derivedKey[k] = encryptionKey[k] ^ j; + } + cipher = new ARCFourCipher(derivedKey); + checkData = cipher.encryptBlock(checkData); + } + for (j = 0, n = checkData.length; j < n; ++j) { + if (userPassword[j] !== checkData[j]) { + return null; + } + } + } else { + cipher = new ARCFourCipher(encryptionKey); + checkData = cipher.encryptBlock(defaultPasswordBytes); + for (j = 0, n = checkData.length; j < n; ++j) { + if (userPassword[j] !== checkData[j]) { + return null; + } + } + } + return encryptionKey; + } + function decodeUserPassword(password, ownerPassword, revision, keyLength) { + var hashData = new Uint8Array(32), i = 0, j, n; + n = Math.min(32, password.length); + for (; i < n; ++i) { + hashData[i] = password[i]; + } + j = 0; + while (i < 32) { + hashData[i++] = defaultPasswordBytes[j++]; + } + var hash = calculateMD5(hashData, 0, i); + var keyLengthInBytes = keyLength >> 3; + if (revision >= 3) { + for (j = 0; j < 50; ++j) { + hash = calculateMD5(hash, 0, hash.length); + } + } + var cipher, userPassword; + if (revision >= 3) { + userPassword = ownerPassword; + var derivedKey = new Uint8Array(keyLengthInBytes), k; + for (j = 19; j >= 0; j--) { + for (k = 0; k < keyLengthInBytes; ++k) { + derivedKey[k] = hash[k] ^ j; + } + cipher = new ARCFourCipher(derivedKey); + userPassword = cipher.encryptBlock(userPassword); + } + } else { + cipher = new ARCFourCipher(hash.subarray(0, keyLengthInBytes)); + userPassword = cipher.encryptBlock(ownerPassword); + } + return userPassword; + } + var identityName = Name.get('Identity'); + function CipherTransformFactory(dict, fileId, password) { + var filter = dict.get('Filter'); + if (!isName(filter, 'Standard')) { + error('unknown encryption method'); + } + this.dict = dict; + var algorithm = dict.get('V'); + if (!isInt(algorithm) || algorithm !== 1 && algorithm !== 2 && algorithm !== 4 && algorithm !== 5) { + error('unsupported encryption algorithm'); + } + this.algorithm = algorithm; + var keyLength = dict.get('Length'); + if (!keyLength) { + if (algorithm <= 3) { + keyLength = 40; + } else { + var cfDict = dict.get('CF'); + var streamCryptoName = dict.get('StmF'); + if (isDict(cfDict) && isName(streamCryptoName)) { + cfDict.suppressEncryption = true; + var handlerDict = cfDict.get(streamCryptoName.name); + keyLength = handlerDict && handlerDict.get('Length') || 128; + if (keyLength < 40) { + keyLength <<= 3; + } + } + } + } + if (!isInt(keyLength) || keyLength < 40 || keyLength % 8 !== 0) { + error('invalid key length'); + } + var ownerPassword = stringToBytes(dict.get('O')).subarray(0, 32); + var userPassword = stringToBytes(dict.get('U')).subarray(0, 32); + var flags = dict.get('P'); + var revision = dict.get('R'); + var encryptMetadata = (algorithm === 4 || algorithm === 5) && dict.get('EncryptMetadata') !== false; + this.encryptMetadata = encryptMetadata; + var fileIdBytes = stringToBytes(fileId); + var passwordBytes; + if (password) { + if (revision === 6) { + try { + password = utf8StringToString(password); + } catch (ex) { + warn('CipherTransformFactory: ' + 'Unable to convert UTF8 encoded password.'); + } + } + passwordBytes = stringToBytes(password); + } + var encryptionKey; + if (algorithm !== 5) { + encryptionKey = prepareKeyData(fileIdBytes, passwordBytes, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata); + } else { + var ownerValidationSalt = stringToBytes(dict.get('O')).subarray(32, 40); + var ownerKeySalt = stringToBytes(dict.get('O')).subarray(40, 48); + var uBytes = stringToBytes(dict.get('U')).subarray(0, 48); + var userValidationSalt = stringToBytes(dict.get('U')).subarray(32, 40); + var userKeySalt = stringToBytes(dict.get('U')).subarray(40, 48); + var ownerEncryption = stringToBytes(dict.get('OE')); + var userEncryption = stringToBytes(dict.get('UE')); + var perms = stringToBytes(dict.get('Perms')); + encryptionKey = createEncryptionKey20(revision, passwordBytes, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms); + } + if (!encryptionKey && !password) { + throw new PasswordException('No password given', PasswordResponses.NEED_PASSWORD); + } else if (!encryptionKey && password) { + var decodedPassword = decodeUserPassword(passwordBytes, ownerPassword, revision, keyLength); + encryptionKey = prepareKeyData(fileIdBytes, decodedPassword, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata); + } + if (!encryptionKey) { + throw new PasswordException('Incorrect Password', PasswordResponses.INCORRECT_PASSWORD); + } + this.encryptionKey = encryptionKey; + if (algorithm >= 4) { + var cf = dict.get('CF'); + if (isDict(cf)) { + cf.suppressEncryption = true; + } + this.cf = cf; + this.stmf = dict.get('StmF') || identityName; + this.strf = dict.get('StrF') || identityName; + this.eff = dict.get('EFF') || this.stmf; + } + } + function buildObjectKey(num, gen, encryptionKey, isAes) { + var key = new Uint8Array(encryptionKey.length + 9), i, n; + for (i = 0, n = encryptionKey.length; i < n; ++i) { + key[i] = encryptionKey[i]; + } + key[i++] = num & 0xFF; + key[i++] = num >> 8 & 0xFF; + key[i++] = num >> 16 & 0xFF; + key[i++] = gen & 0xFF; + key[i++] = gen >> 8 & 0xFF; + if (isAes) { + key[i++] = 0x73; + key[i++] = 0x41; + key[i++] = 0x6C; + key[i++] = 0x54; + } + var hash = calculateMD5(key, 0, i); + return hash.subarray(0, Math.min(encryptionKey.length + 5, 16)); + } + function buildCipherConstructor(cf, name, num, gen, key) { + assert(isName(name), 'Invalid crypt filter name.'); + var cryptFilter = cf.get(name.name); + var cfm; + if (cryptFilter !== null && cryptFilter !== undefined) { + cfm = cryptFilter.get('CFM'); + } + if (!cfm || cfm.name === 'None') { + return function cipherTransformFactoryBuildCipherConstructorNone() { + return new NullCipher(); + }; + } + if (cfm.name === 'V2') { + return function cipherTransformFactoryBuildCipherConstructorV2() { + return new ARCFourCipher(buildObjectKey(num, gen, key, false)); + }; + } + if (cfm.name === 'AESV2') { + return function cipherTransformFactoryBuildCipherConstructorAESV2() { + return new AES128Cipher(buildObjectKey(num, gen, key, true)); + }; + } + if (cfm.name === 'AESV3') { + return function cipherTransformFactoryBuildCipherConstructorAESV3() { + return new AES256Cipher(key); + }; + } + error('Unknown crypto method'); + } + CipherTransformFactory.prototype = { + createCipherTransform: function CipherTransformFactory_createCipherTransform(num, gen) { + if (this.algorithm === 4 || this.algorithm === 5) { + return new CipherTransform(buildCipherConstructor(this.cf, this.stmf, num, gen, this.encryptionKey), buildCipherConstructor(this.cf, this.strf, num, gen, this.encryptionKey)); + } + var key = buildObjectKey(num, gen, this.encryptionKey, false); + var cipherConstructor = function buildCipherCipherConstructor() { + return new ARCFourCipher(key); + }; + return new CipherTransform(cipherConstructor, cipherConstructor); + } + }; + return CipherTransformFactory; + }(); + exports.AES128Cipher = AES128Cipher; + exports.AES256Cipher = AES256Cipher; + exports.ARCFourCipher = ARCFourCipher; + exports.CipherTransformFactory = CipherTransformFactory; + exports.PDF17 = PDF17; + exports.PDF20 = PDF20; + exports.calculateMD5 = calculateMD5; + exports.calculateSHA256 = calculateSHA256; + exports.calculateSHA384 = calculateSHA384; + exports.calculateSHA512 = calculateSHA512; + })); + (function (root, factory) { + factory(root.pdfjsCoreFontRenderer = {}, root.pdfjsSharedUtil, root.pdfjsCoreStream, root.pdfjsCoreGlyphList, root.pdfjsCoreEncodings, root.pdfjsCoreCFFParser); + }(this, function (exports, sharedUtil, coreStream, coreGlyphList, coreEncodings, coreCFFParser) { + var Util = sharedUtil.Util; + var bytesToString = sharedUtil.bytesToString; + var error = sharedUtil.error; + var Stream = coreStream.Stream; + var getGlyphsUnicode = coreGlyphList.getGlyphsUnicode; + var StandardEncoding = coreEncodings.StandardEncoding; + var CFFParser = coreCFFParser.CFFParser; + var FontRendererFactory = function FontRendererFactoryClosure() { + function getLong(data, offset) { + return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]; + } + function getUshort(data, offset) { + return data[offset] << 8 | data[offset + 1]; + } + function parseCmap(data, start, end) { + var offset = getUshort(data, start + 2) === 1 ? getLong(data, start + 8) : getLong(data, start + 16); + var format = getUshort(data, start + offset); + var length, ranges, p, i; + if (format === 4) { + length = getUshort(data, start + offset + 2); + var segCount = getUshort(data, start + offset + 6) >> 1; + p = start + offset + 14; + ranges = []; + for (i = 0; i < segCount; i++, p += 2) { + ranges[i] = { end: getUshort(data, p) }; + } + p += 2; + for (i = 0; i < segCount; i++, p += 2) { + ranges[i].start = getUshort(data, p); + } + for (i = 0; i < segCount; i++, p += 2) { + ranges[i].idDelta = getUshort(data, p); + } + for (i = 0; i < segCount; i++, p += 2) { + var idOffset = getUshort(data, p); + if (idOffset === 0) { + continue; + } + ranges[i].ids = []; + for (var j = 0, jj = ranges[i].end - ranges[i].start + 1; j < jj; j++) { + ranges[i].ids[j] = getUshort(data, p + idOffset); + idOffset += 2; + } + } + return ranges; + } else if (format === 12) { + length = getLong(data, start + offset + 4); + var groups = getLong(data, start + offset + 12); + p = start + offset + 16; + ranges = []; + for (i = 0; i < groups; i++) { + ranges.push({ + start: getLong(data, p), + end: getLong(data, p + 4), + idDelta: getLong(data, p + 8) - getLong(data, p) + }); + p += 12; + } + return ranges; + } + error('not supported cmap: ' + format); + } + function parseCff(data, start, end, seacAnalysisEnabled) { + var properties = {}; + var parser = new CFFParser(new Stream(data, start, end - start), properties, seacAnalysisEnabled); + var cff = parser.parse(); + return { + glyphs: cff.charStrings.objects, + subrs: cff.topDict.privateDict && cff.topDict.privateDict.subrsIndex && cff.topDict.privateDict.subrsIndex.objects, + gsubrs: cff.globalSubrIndex && cff.globalSubrIndex.objects + }; + } + function parseGlyfTable(glyf, loca, isGlyphLocationsLong) { + var itemSize, itemDecode; + if (isGlyphLocationsLong) { + itemSize = 4; + itemDecode = function fontItemDecodeLong(data, offset) { + return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]; + }; + } else { + itemSize = 2; + itemDecode = function fontItemDecode(data, offset) { + return data[offset] << 9 | data[offset + 1] << 1; + }; + } + var glyphs = []; + var startOffset = itemDecode(loca, 0); + for (var j = itemSize; j < loca.length; j += itemSize) { + var endOffset = itemDecode(loca, j); + glyphs.push(glyf.subarray(startOffset, endOffset)); + startOffset = endOffset; + } + return glyphs; + } + function lookupCmap(ranges, unicode) { + var code = unicode.charCodeAt(0), gid = 0; + var l = 0, r = ranges.length - 1; + while (l < r) { + var c = l + r + 1 >> 1; + if (code < ranges[c].start) { + r = c - 1; + } else { + l = c; + } + } + if (ranges[l].start <= code && code <= ranges[l].end) { + gid = ranges[l].idDelta + (ranges[l].ids ? ranges[l].ids[code - ranges[l].start] : code) & 0xFFFF; + } + return { + charCode: code, + glyphId: gid + }; + } + function compileGlyf(code, cmds, font) { + function moveTo(x, y) { + cmds.push({ + cmd: 'moveTo', + args: [ + x, + y + ] + }); + } + function lineTo(x, y) { + cmds.push({ + cmd: 'lineTo', + args: [ + x, + y + ] + }); + } + function quadraticCurveTo(xa, ya, x, y) { + cmds.push({ + cmd: 'quadraticCurveTo', + args: [ + xa, + ya, + x, + y + ] + }); + } + var i = 0; + var numberOfContours = (code[i] << 24 | code[i + 1] << 16) >> 16; + var flags; + var x = 0, y = 0; + i += 10; + if (numberOfContours < 0) { + do { + flags = code[i] << 8 | code[i + 1]; + var glyphIndex = code[i + 2] << 8 | code[i + 3]; + i += 4; + var arg1, arg2; + if (flags & 0x01) { + arg1 = (code[i] << 24 | code[i + 1] << 16) >> 16; + arg2 = (code[i + 2] << 24 | code[i + 3] << 16) >> 16; + i += 4; + } else { + arg1 = code[i++]; + arg2 = code[i++]; + } + if (flags & 0x02) { + x = arg1; + y = arg2; + } else { + x = 0; + y = 0; + } + var scaleX = 1, scaleY = 1, scale01 = 0, scale10 = 0; + if (flags & 0x08) { + scaleX = scaleY = (code[i] << 24 | code[i + 1] << 16) / 1073741824; + i += 2; + } else if (flags & 0x40) { + scaleX = (code[i] << 24 | code[i + 1] << 16) / 1073741824; + scaleY = (code[i + 2] << 24 | code[i + 3] << 16) / 1073741824; + i += 4; + } else if (flags & 0x80) { + scaleX = (code[i] << 24 | code[i + 1] << 16) / 1073741824; + scale01 = (code[i + 2] << 24 | code[i + 3] << 16) / 1073741824; + scale10 = (code[i + 4] << 24 | code[i + 5] << 16) / 1073741824; + scaleY = (code[i + 6] << 24 | code[i + 7] << 16) / 1073741824; + i += 8; + } + var subglyph = font.glyphs[glyphIndex]; + if (subglyph) { + cmds.push({ cmd: 'save' }); + cmds.push({ + cmd: 'transform', + args: [ + scaleX, + scale01, + scale10, + scaleY, + x, + y + ] + }); + compileGlyf(subglyph, cmds, font); + cmds.push({ cmd: 'restore' }); + } + } while (flags & 0x20); + } else { + var endPtsOfContours = []; + var j, jj; + for (j = 0; j < numberOfContours; j++) { + endPtsOfContours.push(code[i] << 8 | code[i + 1]); + i += 2; + } + var instructionLength = code[i] << 8 | code[i + 1]; + i += 2 + instructionLength; + var numberOfPoints = endPtsOfContours[endPtsOfContours.length - 1] + 1; + var points = []; + while (points.length < numberOfPoints) { + flags = code[i++]; + var repeat = 1; + if (flags & 0x08) { + repeat += code[i++]; + } + while (repeat-- > 0) { + points.push({ flags: flags }); + } + } + for (j = 0; j < numberOfPoints; j++) { + switch (points[j].flags & 0x12) { + case 0x00: + x += (code[i] << 24 | code[i + 1] << 16) >> 16; + i += 2; + break; + case 0x02: + x -= code[i++]; + break; + case 0x12: + x += code[i++]; + break; + } + points[j].x = x; + } + for (j = 0; j < numberOfPoints; j++) { + switch (points[j].flags & 0x24) { + case 0x00: + y += (code[i] << 24 | code[i + 1] << 16) >> 16; + i += 2; + break; + case 0x04: + y -= code[i++]; + break; + case 0x24: + y += code[i++]; + break; + } + points[j].y = y; + } + var startPoint = 0; + for (i = 0; i < numberOfContours; i++) { + var endPoint = endPtsOfContours[i]; + var contour = points.slice(startPoint, endPoint + 1); + if (contour[0].flags & 1) { + contour.push(contour[0]); + } else if (contour[contour.length - 1].flags & 1) { + contour.unshift(contour[contour.length - 1]); + } else { + var p = { + flags: 1, + x: (contour[0].x + contour[contour.length - 1].x) / 2, + y: (contour[0].y + contour[contour.length - 1].y) / 2 + }; + contour.unshift(p); + contour.push(p); + } + moveTo(contour[0].x, contour[0].y); + for (j = 1, jj = contour.length; j < jj; j++) { + if (contour[j].flags & 1) { + lineTo(contour[j].x, contour[j].y); + } else if (contour[j + 1].flags & 1) { + quadraticCurveTo(contour[j].x, contour[j].y, contour[j + 1].x, contour[j + 1].y); + j++; + } else { + quadraticCurveTo(contour[j].x, contour[j].y, (contour[j].x + contour[j + 1].x) / 2, (contour[j].y + contour[j + 1].y) / 2); + } + } + startPoint = endPoint + 1; + } + } + } + function compileCharString(code, cmds, font) { + var stack = []; + var x = 0, y = 0; + var stems = 0; + function moveTo(x, y) { + cmds.push({ + cmd: 'moveTo', + args: [ + x, + y + ] + }); + } + function lineTo(x, y) { + cmds.push({ + cmd: 'lineTo', + args: [ + x, + y + ] + }); + } + function bezierCurveTo(x1, y1, x2, y2, x, y) { + cmds.push({ + cmd: 'bezierCurveTo', + args: [ + x1, + y1, + x2, + y2, + x, + y + ] + }); + } + function parse(code) { + var i = 0; + while (i < code.length) { + var stackClean = false; + var v = code[i++]; + var xa, xb, ya, yb, y1, y2, y3, n, subrCode; + switch (v) { + case 1: + stems += stack.length >> 1; + stackClean = true; + break; + case 3: + stems += stack.length >> 1; + stackClean = true; + break; + case 4: + y += stack.pop(); + moveTo(x, y); + stackClean = true; + break; + case 5: + while (stack.length > 0) { + x += stack.shift(); + y += stack.shift(); + lineTo(x, y); + } + break; + case 6: + while (stack.length > 0) { + x += stack.shift(); + lineTo(x, y); + if (stack.length === 0) { + break; + } + y += stack.shift(); + lineTo(x, y); + } + break; + case 7: + while (stack.length > 0) { + y += stack.shift(); + lineTo(x, y); + if (stack.length === 0) { + break; + } + x += stack.shift(); + lineTo(x, y); + } + break; + case 8: + while (stack.length > 0) { + xa = x + stack.shift(); + ya = y + stack.shift(); + xb = xa + stack.shift(); + yb = ya + stack.shift(); + x = xb + stack.shift(); + y = yb + stack.shift(); + bezierCurveTo(xa, ya, xb, yb, x, y); + } + break; + case 10: + n = stack.pop() + font.subrsBias; + subrCode = font.subrs[n]; + if (subrCode) { + parse(subrCode); + } + break; + case 11: + return; + case 12: + v = code[i++]; + switch (v) { + case 34: + xa = x + stack.shift(); + xb = xa + stack.shift(); + y1 = y + stack.shift(); + x = xb + stack.shift(); + bezierCurveTo(xa, y, xb, y1, x, y1); + xa = x + stack.shift(); + xb = xa + stack.shift(); + x = xb + stack.shift(); + bezierCurveTo(xa, y1, xb, y, x, y); + break; + case 35: + xa = x + stack.shift(); + ya = y + stack.shift(); + xb = xa + stack.shift(); + yb = ya + stack.shift(); + x = xb + stack.shift(); + y = yb + stack.shift(); + bezierCurveTo(xa, ya, xb, yb, x, y); + xa = x + stack.shift(); + ya = y + stack.shift(); + xb = xa + stack.shift(); + yb = ya + stack.shift(); + x = xb + stack.shift(); + y = yb + stack.shift(); + bezierCurveTo(xa, ya, xb, yb, x, y); + stack.pop(); + break; + case 36: + xa = x + stack.shift(); + y1 = y + stack.shift(); + xb = xa + stack.shift(); + y2 = y1 + stack.shift(); + x = xb + stack.shift(); + bezierCurveTo(xa, y1, xb, y2, x, y2); + xa = x + stack.shift(); + xb = xa + stack.shift(); + y3 = y2 + stack.shift(); + x = xb + stack.shift(); + bezierCurveTo(xa, y2, xb, y3, x, y); + break; + case 37: + var x0 = x, y0 = y; + xa = x + stack.shift(); + ya = y + stack.shift(); + xb = xa + stack.shift(); + yb = ya + stack.shift(); + x = xb + stack.shift(); + y = yb + stack.shift(); + bezierCurveTo(xa, ya, xb, yb, x, y); + xa = x + stack.shift(); + ya = y + stack.shift(); + xb = xa + stack.shift(); + yb = ya + stack.shift(); + x = xb; + y = yb; + if (Math.abs(x - x0) > Math.abs(y - y0)) { + x += stack.shift(); + } else { + y += stack.shift(); + } + bezierCurveTo(xa, ya, xb, yb, x, y); + break; + default: + error('unknown operator: 12 ' + v); + } + break; + case 14: + if (stack.length >= 4) { + var achar = stack.pop(); + var bchar = stack.pop(); + y = stack.pop(); + x = stack.pop(); + cmds.push({ cmd: 'save' }); + cmds.push({ + cmd: 'translate', + args: [ + x, + y + ] + }); + var cmap = lookupCmap(font.cmap, String.fromCharCode(font.glyphNameMap[StandardEncoding[achar]])); + compileCharString(font.glyphs[cmap.glyphId], cmds, font); + cmds.push({ cmd: 'restore' }); + cmap = lookupCmap(font.cmap, String.fromCharCode(font.glyphNameMap[StandardEncoding[bchar]])); + compileCharString(font.glyphs[cmap.glyphId], cmds, font); + } + return; + case 18: + stems += stack.length >> 1; + stackClean = true; + break; + case 19: + stems += stack.length >> 1; + i += stems + 7 >> 3; + stackClean = true; + break; + case 20: + stems += stack.length >> 1; + i += stems + 7 >> 3; + stackClean = true; + break; + case 21: + y += stack.pop(); + x += stack.pop(); + moveTo(x, y); + stackClean = true; + break; + case 22: + x += stack.pop(); + moveTo(x, y); + stackClean = true; + break; + case 23: + stems += stack.length >> 1; + stackClean = true; + break; + case 24: + while (stack.length > 2) { + xa = x + stack.shift(); + ya = y + stack.shift(); + xb = xa + stack.shift(); + yb = ya + stack.shift(); + x = xb + stack.shift(); + y = yb + stack.shift(); + bezierCurveTo(xa, ya, xb, yb, x, y); + } + x += stack.shift(); + y += stack.shift(); + lineTo(x, y); + break; + case 25: + while (stack.length > 6) { + x += stack.shift(); + y += stack.shift(); + lineTo(x, y); + } + xa = x + stack.shift(); + ya = y + stack.shift(); + xb = xa + stack.shift(); + yb = ya + stack.shift(); + x = xb + stack.shift(); + y = yb + stack.shift(); + bezierCurveTo(xa, ya, xb, yb, x, y); + break; + case 26: + if (stack.length % 2) { + x += stack.shift(); + } + while (stack.length > 0) { + xa = x; + ya = y + stack.shift(); + xb = xa + stack.shift(); + yb = ya + stack.shift(); + x = xb; + y = yb + stack.shift(); + bezierCurveTo(xa, ya, xb, yb, x, y); + } + break; + case 27: + if (stack.length % 2) { + y += stack.shift(); + } + while (stack.length > 0) { + xa = x + stack.shift(); + ya = y; + xb = xa + stack.shift(); + yb = ya + stack.shift(); + x = xb + stack.shift(); + y = yb; + bezierCurveTo(xa, ya, xb, yb, x, y); + } + break; + case 28: + stack.push((code[i] << 24 | code[i + 1] << 16) >> 16); + i += 2; + break; + case 29: + n = stack.pop() + font.gsubrsBias; + subrCode = font.gsubrs[n]; + if (subrCode) { + parse(subrCode); + } + break; + case 30: + while (stack.length > 0) { + xa = x; + ya = y + stack.shift(); + xb = xa + stack.shift(); + yb = ya + stack.shift(); + x = xb + stack.shift(); + y = yb + (stack.length === 1 ? stack.shift() : 0); + bezierCurveTo(xa, ya, xb, yb, x, y); + if (stack.length === 0) { + break; + } + xa = x + stack.shift(); + ya = y; + xb = xa + stack.shift(); + yb = ya + stack.shift(); + y = yb + stack.shift(); + x = xb + (stack.length === 1 ? stack.shift() : 0); + bezierCurveTo(xa, ya, xb, yb, x, y); + } + break; + case 31: + while (stack.length > 0) { + xa = x + stack.shift(); + ya = y; + xb = xa + stack.shift(); + yb = ya + stack.shift(); + y = yb + stack.shift(); + x = xb + (stack.length === 1 ? stack.shift() : 0); + bezierCurveTo(xa, ya, xb, yb, x, y); + if (stack.length === 0) { + break; + } + xa = x; + ya = y + stack.shift(); + xb = xa + stack.shift(); + yb = ya + stack.shift(); + x = xb + stack.shift(); + y = yb + (stack.length === 1 ? stack.shift() : 0); + bezierCurveTo(xa, ya, xb, yb, x, y); + } + break; + default: + if (v < 32) { + error('unknown operator: ' + v); + } + if (v < 247) { + stack.push(v - 139); + } else if (v < 251) { + stack.push((v - 247) * 256 + code[i++] + 108); + } else if (v < 255) { + stack.push(-(v - 251) * 256 - code[i++] - 108); + } else { + stack.push((code[i] << 24 | code[i + 1] << 16 | code[i + 2] << 8 | code[i + 3]) / 65536); + i += 4; + } + break; + } + if (stackClean) { + stack.length = 0; + } + } + } + parse(code); + } + var noop = ''; + function CompiledFont(fontMatrix) { + this.compiledGlyphs = Object.create(null); + this.compiledCharCodeToGlyphId = Object.create(null); + this.fontMatrix = fontMatrix; + } + CompiledFont.prototype = { + getPathJs: function (unicode) { + var cmap = lookupCmap(this.cmap, unicode); + var fn = this.compiledGlyphs[cmap.glyphId]; + if (!fn) { + fn = this.compileGlyph(this.glyphs[cmap.glyphId]); + this.compiledGlyphs[cmap.glyphId] = fn; + } + if (this.compiledCharCodeToGlyphId[cmap.charCode] === undefined) { + this.compiledCharCodeToGlyphId[cmap.charCode] = cmap.glyphId; + } + return fn; + }, + compileGlyph: function (code) { + if (!code || code.length === 0 || code[0] === 14) { + return noop; + } + var cmds = []; + cmds.push({ cmd: 'save' }); + cmds.push({ + cmd: 'transform', + args: this.fontMatrix.slice() + }); + cmds.push({ + cmd: 'scale', + args: [ + 'size', + '-size' + ] + }); + this.compileGlyphImpl(code, cmds); + cmds.push({ cmd: 'restore' }); + return cmds; + }, + compileGlyphImpl: function () { + error('Children classes should implement this.'); + }, + hasBuiltPath: function (unicode) { + var cmap = lookupCmap(this.cmap, unicode); + return this.compiledGlyphs[cmap.glyphId] !== undefined && this.compiledCharCodeToGlyphId[cmap.charCode] !== undefined; + } + }; + function TrueTypeCompiled(glyphs, cmap, fontMatrix) { + fontMatrix = fontMatrix || [ + 0.000488, + 0, + 0, + 0.000488, + 0, + 0 + ]; + CompiledFont.call(this, fontMatrix); + this.glyphs = glyphs; + this.cmap = cmap; + } + Util.inherit(TrueTypeCompiled, CompiledFont, { + compileGlyphImpl: function (code, cmds) { + compileGlyf(code, cmds, this); + } + }); + function Type2Compiled(cffInfo, cmap, fontMatrix, glyphNameMap) { + fontMatrix = fontMatrix || [ + 0.001, + 0, + 0, + 0.001, + 0, + 0 + ]; + CompiledFont.call(this, fontMatrix); + this.glyphs = cffInfo.glyphs; + this.gsubrs = cffInfo.gsubrs || []; + this.subrs = cffInfo.subrs || []; + this.cmap = cmap; + this.glyphNameMap = glyphNameMap || getGlyphsUnicode(); + this.gsubrsBias = this.gsubrs.length < 1240 ? 107 : this.gsubrs.length < 33900 ? 1131 : 32768; + this.subrsBias = this.subrs.length < 1240 ? 107 : this.subrs.length < 33900 ? 1131 : 32768; + } + Util.inherit(Type2Compiled, CompiledFont, { + compileGlyphImpl: function (code, cmds) { + compileCharString(code, cmds, this); + } + }); + return { + create: function FontRendererFactory_create(font, seacAnalysisEnabled) { + var data = new Uint8Array(font.data); + var cmap, glyf, loca, cff, indexToLocFormat, unitsPerEm; + var numTables = getUshort(data, 4); + for (var i = 0, p = 12; i < numTables; i++, p += 16) { + var tag = bytesToString(data.subarray(p, p + 4)); + var offset = getLong(data, p + 8); + var length = getLong(data, p + 12); + switch (tag) { + case 'cmap': + cmap = parseCmap(data, offset, offset + length); + break; + case 'glyf': + glyf = data.subarray(offset, offset + length); + break; + case 'loca': + loca = data.subarray(offset, offset + length); + break; + case 'head': + unitsPerEm = getUshort(data, offset + 18); + indexToLocFormat = getUshort(data, offset + 50); + break; + case 'CFF ': + cff = parseCff(data, offset, offset + length, seacAnalysisEnabled); + break; + } + } + if (glyf) { + var fontMatrix = !unitsPerEm ? font.fontMatrix : [ + 1 / unitsPerEm, + 0, + 0, + 1 / unitsPerEm, + 0, + 0 + ]; + return new TrueTypeCompiled(parseGlyfTable(glyf, loca, indexToLocFormat), cmap, fontMatrix); + } + return new Type2Compiled(cff, cmap, font.fontMatrix, font.glyphNameMap); + } + }; + }(); + exports.FontRendererFactory = FontRendererFactory; + })); + (function (root, factory) { + factory(root.pdfjsCoreParser = {}, root.pdfjsSharedUtil, root.pdfjsCorePrimitives, root.pdfjsCoreStream); + }(this, function (exports, sharedUtil, corePrimitives, coreStream) { + var MissingDataException = sharedUtil.MissingDataException; + var StreamType = sharedUtil.StreamType; + var assert = sharedUtil.assert; + var error = sharedUtil.error; + var info = sharedUtil.info; + var isArray = sharedUtil.isArray; + var isInt = sharedUtil.isInt; + var isNum = sharedUtil.isNum; + var isString = sharedUtil.isString; + var warn = sharedUtil.warn; + var Cmd = corePrimitives.Cmd; + var Dict = corePrimitives.Dict; + var Name = corePrimitives.Name; + var Ref = corePrimitives.Ref; + var isCmd = corePrimitives.isCmd; + var isDict = corePrimitives.isDict; + var isName = corePrimitives.isName; + var Ascii85Stream = coreStream.Ascii85Stream; + var AsciiHexStream = coreStream.AsciiHexStream; + var CCITTFaxStream = coreStream.CCITTFaxStream; + var FlateStream = coreStream.FlateStream; + var Jbig2Stream = coreStream.Jbig2Stream; + var JpegStream = coreStream.JpegStream; + var JpxStream = coreStream.JpxStream; + var LZWStream = coreStream.LZWStream; + var NullStream = coreStream.NullStream; + var PredictorStream = coreStream.PredictorStream; + var RunLengthStream = coreStream.RunLengthStream; + var EOF = {}; + function isEOF(v) { + return v === EOF; + } + var MAX_LENGTH_TO_CACHE = 1000; + var Parser = function ParserClosure() { + function Parser(lexer, allowStreams, xref, recoveryMode) { + this.lexer = lexer; + this.allowStreams = allowStreams; + this.xref = xref; + this.recoveryMode = recoveryMode || false; + this.imageCache = Object.create(null); + this.refill(); + } + Parser.prototype = { + refill: function Parser_refill() { + this.buf1 = this.lexer.getObj(); + this.buf2 = this.lexer.getObj(); + }, + shift: function Parser_shift() { + if (isCmd(this.buf2, 'ID')) { + this.buf1 = this.buf2; + this.buf2 = null; + } else { + this.buf1 = this.buf2; + this.buf2 = this.lexer.getObj(); + } + }, + tryShift: function Parser_tryShift() { + try { + this.shift(); + return true; + } catch (e) { + if (e instanceof MissingDataException) { + throw e; + } + return false; + } + }, + getObj: function Parser_getObj(cipherTransform) { + var buf1 = this.buf1; + this.shift(); + if (buf1 instanceof Cmd) { + switch (buf1.cmd) { + case 'BI': + return this.makeInlineImage(cipherTransform); + case '[': + var array = []; + while (!isCmd(this.buf1, ']') && !isEOF(this.buf1)) { + array.push(this.getObj(cipherTransform)); + } + if (isEOF(this.buf1)) { + if (!this.recoveryMode) { + error('End of file inside array'); + } + return array; + } + this.shift(); + return array; + case '<<': + var dict = new Dict(this.xref); + while (!isCmd(this.buf1, '>>') && !isEOF(this.buf1)) { + if (!isName(this.buf1)) { + info('Malformed dictionary: key must be a name object'); + this.shift(); + continue; + } + var key = this.buf1.name; + this.shift(); + if (isEOF(this.buf1)) { + break; + } + dict.set(key, this.getObj(cipherTransform)); + } + if (isEOF(this.buf1)) { + if (!this.recoveryMode) { + error('End of file inside dictionary'); + } + return dict; + } + if (isCmd(this.buf2, 'stream')) { + return this.allowStreams ? this.makeStream(dict, cipherTransform) : dict; + } + this.shift(); + return dict; + default: + return buf1; + } + } + if (isInt(buf1)) { + var num = buf1; + if (isInt(this.buf1) && isCmd(this.buf2, 'R')) { + var ref = new Ref(num, this.buf1); + this.shift(); + this.shift(); + return ref; + } + return num; + } + if (isString(buf1)) { + var str = buf1; + if (cipherTransform) { + str = cipherTransform.decryptString(str); + } + return str; + } + return buf1; + }, + findDefaultInlineStreamEnd: function Parser_findDefaultInlineStreamEnd(stream) { + var E = 0x45, I = 0x49, SPACE = 0x20, LF = 0xA, CR = 0xD; + var startPos = stream.pos, state = 0, ch, i, n, followingBytes; + while ((ch = stream.getByte()) !== -1) { + if (state === 0) { + state = ch === E ? 1 : 0; + } else if (state === 1) { + state = ch === I ? 2 : 0; + } else { + assert(state === 2); + if (ch === SPACE || ch === LF || ch === CR) { + n = 5; + followingBytes = stream.peekBytes(n); + for (i = 0; i < n; i++) { + ch = followingBytes[i]; + if (ch !== LF && ch !== CR && (ch < SPACE || ch > 0x7F)) { + state = 0; + break; + } + } + if (state === 2) { + break; + } + } else + { + state = 0; + } + } + } + return stream.pos - 4 - startPos; + }, + findDCTDecodeInlineStreamEnd: function Parser_findDCTDecodeInlineStreamEnd(stream) { + var startPos = stream.pos, foundEOI = false, b, markerLength, length; + while ((b = stream.getByte()) !== -1) { + if (b !== 0xFF) { + continue; + } + switch (stream.getByte()) { + case 0x00: + break; + case 0xFF: + stream.skip(-1); + break; + case 0xD9: + foundEOI = true; + break; + case 0xC0: + case 0xC1: + case 0xC2: + case 0xC3: + case 0xC5: + case 0xC6: + case 0xC7: + case 0xC9: + case 0xCA: + case 0xCB: + case 0xCD: + case 0xCE: + case 0xCF: + case 0xC4: + case 0xCC: + case 0xDA: + case 0xDB: + case 0xDC: + case 0xDD: + case 0xDE: + case 0xDF: + case 0xE0: + case 0xE1: + case 0xE2: + case 0xE3: + case 0xE4: + case 0xE5: + case 0xE6: + case 0xE7: + case 0xE8: + case 0xE9: + case 0xEA: + case 0xEB: + case 0xEC: + case 0xED: + case 0xEE: + case 0xEF: + case 0xFE: + markerLength = stream.getUint16(); + if (markerLength > 2) { + stream.skip(markerLength - 2); + } else + { + stream.skip(-2); + } + break; + } + if (foundEOI) { + break; + } + } + length = stream.pos - startPos; + if (b === -1) { + warn('Inline DCTDecode image stream: ' + 'EOI marker not found, searching for /EI/ instead.'); + stream.skip(-length); + return this.findDefaultInlineStreamEnd(stream); + } + this.inlineStreamSkipEI(stream); + return length; + }, + findASCII85DecodeInlineStreamEnd: function Parser_findASCII85DecodeInlineStreamEnd(stream) { + var TILDE = 0x7E, GT = 0x3E; + var startPos = stream.pos, ch, length; + while ((ch = stream.getByte()) !== -1) { + if (ch === TILDE && stream.peekByte() === GT) { + stream.skip(); + break; + } + } + length = stream.pos - startPos; + if (ch === -1) { + warn('Inline ASCII85Decode image stream: ' + 'EOD marker not found, searching for /EI/ instead.'); + stream.skip(-length); + return this.findDefaultInlineStreamEnd(stream); + } + this.inlineStreamSkipEI(stream); + return length; + }, + findASCIIHexDecodeInlineStreamEnd: function Parser_findASCIIHexDecodeInlineStreamEnd(stream) { + var GT = 0x3E; + var startPos = stream.pos, ch, length; + while ((ch = stream.getByte()) !== -1) { + if (ch === GT) { + break; + } + } + length = stream.pos - startPos; + if (ch === -1) { + warn('Inline ASCIIHexDecode image stream: ' + 'EOD marker not found, searching for /EI/ instead.'); + stream.skip(-length); + return this.findDefaultInlineStreamEnd(stream); + } + this.inlineStreamSkipEI(stream); + return length; + }, + inlineStreamSkipEI: function Parser_inlineStreamSkipEI(stream) { + var E = 0x45, I = 0x49; + var state = 0, ch; + while ((ch = stream.getByte()) !== -1) { + if (state === 0) { + state = ch === E ? 1 : 0; + } else if (state === 1) { + state = ch === I ? 2 : 0; + } else if (state === 2) { + break; + } + } + }, + makeInlineImage: function Parser_makeInlineImage(cipherTransform) { + var lexer = this.lexer; + var stream = lexer.stream; + var dict = new Dict(this.xref); + while (!isCmd(this.buf1, 'ID') && !isEOF(this.buf1)) { + if (!isName(this.buf1)) { + error('Dictionary key must be a name object'); + } + var key = this.buf1.name; + this.shift(); + if (isEOF(this.buf1)) { + break; + } + dict.set(key, this.getObj(cipherTransform)); + } + var filter = dict.get('Filter', 'F'), filterName; + if (isName(filter)) { + filterName = filter.name; + } else if (isArray(filter)) { + var filterZero = this.xref.fetchIfRef(filter[0]); + if (isName(filterZero)) { + filterName = filterZero.name; + } + } + var startPos = stream.pos, length, i, ii; + if (filterName === 'DCTDecode' || filterName === 'DCT') { + length = this.findDCTDecodeInlineStreamEnd(stream); + } else if (filterName === 'ASCII85Decide' || filterName === 'A85') { + length = this.findASCII85DecodeInlineStreamEnd(stream); + } else if (filterName === 'ASCIIHexDecode' || filterName === 'AHx') { + length = this.findASCIIHexDecodeInlineStreamEnd(stream); + } else { + length = this.findDefaultInlineStreamEnd(stream); + } + var imageStream = stream.makeSubStream(startPos, length, dict); + var adler32; + if (length < MAX_LENGTH_TO_CACHE) { + var imageBytes = imageStream.getBytes(); + imageStream.reset(); + var a = 1; + var b = 0; + for (i = 0, ii = imageBytes.length; i < ii; ++i) { + a += imageBytes[i] & 0xff; + b += a; + } + adler32 = b % 65521 << 16 | a % 65521; + if (this.imageCache.adler32 === adler32) { + this.buf2 = Cmd.get('EI'); + this.shift(); + this.imageCache[adler32].reset(); + return this.imageCache[adler32]; + } + } + if (cipherTransform) { + imageStream = cipherTransform.createStream(imageStream, length); + } + imageStream = this.filter(imageStream, dict, length); + imageStream.dict = dict; + if (adler32 !== undefined) { + imageStream.cacheKey = 'inline_' + length + '_' + adler32; + this.imageCache[adler32] = imageStream; + } + this.buf2 = Cmd.get('EI'); + this.shift(); + return imageStream; + }, + makeStream: function Parser_makeStream(dict, cipherTransform) { + var lexer = this.lexer; + var stream = lexer.stream; + lexer.skipToNextLine(); + var pos = stream.pos - 1; + var length = dict.get('Length'); + if (!isInt(length)) { + info('Bad ' + length + ' attribute in stream'); + length = 0; + } + stream.pos = pos + length; + lexer.nextChar(); + if (this.tryShift() && isCmd(this.buf2, 'endstream')) { + this.shift(); + } else + { + stream.pos = pos; + var SCAN_BLOCK_SIZE = 2048; + var ENDSTREAM_SIGNATURE_LENGTH = 9; + var ENDSTREAM_SIGNATURE = [ + 0x65, + 0x6E, + 0x64, + 0x73, + 0x74, + 0x72, + 0x65, + 0x61, + 0x6D + ]; + var skipped = 0, found = false, i, j; + while (stream.pos < stream.end) { + var scanBytes = stream.peekBytes(SCAN_BLOCK_SIZE); + var scanLength = scanBytes.length - ENDSTREAM_SIGNATURE_LENGTH; + if (scanLength <= 0) { + break; + } + found = false; + i = 0; + while (i < scanLength) { + j = 0; + while (j < ENDSTREAM_SIGNATURE_LENGTH && scanBytes[i + j] === ENDSTREAM_SIGNATURE[j]) { + j++; + } + if (j >= ENDSTREAM_SIGNATURE_LENGTH) { + found = true; + break; + } + i++; + } + if (found) { + skipped += i; + stream.pos += i; + break; + } + skipped += scanLength; + stream.pos += scanLength; + } + if (!found) { + error('Missing endstream'); + } + length = skipped; + lexer.nextChar(); + this.shift(); + this.shift(); + } + this.shift(); + stream = stream.makeSubStream(pos, length, dict); + if (cipherTransform) { + stream = cipherTransform.createStream(stream, length); + } + stream = this.filter(stream, dict, length); + stream.dict = dict; + return stream; + }, + filter: function Parser_filter(stream, dict, length) { + var filter = dict.get('Filter', 'F'); + var params = dict.get('DecodeParms', 'DP'); + if (isName(filter)) { + if (isArray(params)) { + params = this.xref.fetchIfRef(params[0]); + } + return this.makeFilter(stream, filter.name, length, params); + } + var maybeLength = length; + if (isArray(filter)) { + var filterArray = filter; + var paramsArray = params; + for (var i = 0, ii = filterArray.length; i < ii; ++i) { + filter = this.xref.fetchIfRef(filterArray[i]); + if (!isName(filter)) { + error('Bad filter name: ' + filter); + } + params = null; + if (isArray(paramsArray) && i in paramsArray) { + params = this.xref.fetchIfRef(paramsArray[i]); + } + stream = this.makeFilter(stream, filter.name, maybeLength, params); + maybeLength = null; + } + } + return stream; + }, + makeFilter: function Parser_makeFilter(stream, name, maybeLength, params) { + if (maybeLength === 0) { + warn('Empty "' + name + '" stream.'); + return new NullStream(stream); + } + try { + var xrefStreamStats = this.xref.stats.streamTypes; + if (name === 'FlateDecode' || name === 'Fl') { + xrefStreamStats[StreamType.FLATE] = true; + if (params) { + return new PredictorStream(new FlateStream(stream, maybeLength), maybeLength, params); + } + return new FlateStream(stream, maybeLength); + } + if (name === 'LZWDecode' || name === 'LZW') { + xrefStreamStats[StreamType.LZW] = true; + var earlyChange = 1; + if (params) { + if (params.has('EarlyChange')) { + earlyChange = params.get('EarlyChange'); + } + return new PredictorStream(new LZWStream(stream, maybeLength, earlyChange), maybeLength, params); + } + return new LZWStream(stream, maybeLength, earlyChange); + } + if (name === 'DCTDecode' || name === 'DCT') { + xrefStreamStats[StreamType.DCT] = true; + return new JpegStream(stream, maybeLength, stream.dict, params); + } + if (name === 'JPXDecode' || name === 'JPX') { + xrefStreamStats[StreamType.JPX] = true; + return new JpxStream(stream, maybeLength, stream.dict, params); + } + if (name === 'ASCII85Decode' || name === 'A85') { + xrefStreamStats[StreamType.A85] = true; + return new Ascii85Stream(stream, maybeLength); + } + if (name === 'ASCIIHexDecode' || name === 'AHx') { + xrefStreamStats[StreamType.AHX] = true; + return new AsciiHexStream(stream, maybeLength); + } + if (name === 'CCITTFaxDecode' || name === 'CCF') { + xrefStreamStats[StreamType.CCF] = true; + return new CCITTFaxStream(stream, maybeLength, params); + } + if (name === 'RunLengthDecode' || name === 'RL') { + xrefStreamStats[StreamType.RL] = true; + return new RunLengthStream(stream, maybeLength); + } + if (name === 'JBIG2Decode') { + xrefStreamStats[StreamType.JBIG] = true; + return new Jbig2Stream(stream, maybeLength, stream.dict, params); + } + warn('filter "' + name + '" not supported yet'); + return stream; + } catch (ex) { + if (ex instanceof MissingDataException) { + throw ex; + } + warn('Invalid stream: \"' + ex + '\"'); + return new NullStream(stream); + } + } + }; + return Parser; + }(); + var Lexer = function LexerClosure() { + function Lexer(stream, knownCommands) { + this.stream = stream; + this.nextChar(); + this.strBuf = []; + this.knownCommands = knownCommands; + } + var specialChars = [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ]; + function toHexDigit(ch) { + if (ch >= 0x30 && ch <= 0x39) { + return ch & 0x0F; + } + if (ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66) { + return (ch & 0x0F) + 9; + } + return -1; + } + Lexer.prototype = { + nextChar: function Lexer_nextChar() { + return this.currentChar = this.stream.getByte(); + }, + peekChar: function Lexer_peekChar() { + return this.stream.peekByte(); + }, + getNumber: function Lexer_getNumber() { + var ch = this.currentChar; + var eNotation = false; + var divideBy = 0; + var sign = 1; + if (ch === 0x2D) { + sign = -1; + ch = this.nextChar(); + if (ch === 0x2D) { + ch = this.nextChar(); + } + } else if (ch === 0x2B) { + ch = this.nextChar(); + } + if (ch === 0x2E) { + divideBy = 10; + ch = this.nextChar(); + } + if (ch < 0x30 || ch > 0x39) { + error('Invalid number: ' + String.fromCharCode(ch)); + return 0; + } + var baseValue = ch - 0x30; + var powerValue = 0; + var powerValueSign = 1; + while ((ch = this.nextChar()) >= 0) { + if (0x30 <= ch && ch <= 0x39) { + var currentDigit = ch - 0x30; + if (eNotation) { + powerValue = powerValue * 10 + currentDigit; + } else { + if (divideBy !== 0) { + divideBy *= 10; + } + baseValue = baseValue * 10 + currentDigit; + } + } else if (ch === 0x2E) { + if (divideBy === 0) { + divideBy = 1; + } else { + break; + } + } else if (ch === 0x2D) { + warn('Badly formatted number'); + } else if (ch === 0x45 || ch === 0x65) { + ch = this.peekChar(); + if (ch === 0x2B || ch === 0x2D) { + powerValueSign = ch === 0x2D ? -1 : 1; + this.nextChar(); + } else if (ch < 0x30 || ch > 0x39) { + break; + } + eNotation = true; + } else { + break; + } + } + if (divideBy !== 0) { + baseValue /= divideBy; + } + if (eNotation) { + baseValue *= Math.pow(10, powerValueSign * powerValue); + } + return sign * baseValue; + }, + getString: function Lexer_getString() { + var numParen = 1; + var done = false; + var strBuf = this.strBuf; + strBuf.length = 0; + var ch = this.nextChar(); + while (true) { + var charBuffered = false; + switch (ch | 0) { + case -1: + warn('Unterminated string'); + done = true; + break; + case 0x28: + ++numParen; + strBuf.push('('); + break; + case 0x29: + if (--numParen === 0) { + this.nextChar(); + done = true; + } else { + strBuf.push(')'); + } + break; + case 0x5C: + ch = this.nextChar(); + switch (ch) { + case -1: + warn('Unterminated string'); + done = true; + break; + case 0x6E: + strBuf.push('\n'); + break; + case 0x72: + strBuf.push('\r'); + break; + case 0x74: + strBuf.push('\t'); + break; + case 0x62: + strBuf.push('\b'); + break; + case 0x66: + strBuf.push('\f'); + break; + case 0x5C: + case 0x28: + case 0x29: + strBuf.push(String.fromCharCode(ch)); + break; + case 0x30: + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + var x = ch & 0x0F; + ch = this.nextChar(); + charBuffered = true; + if (ch >= 0x30 && ch <= 0x37) { + x = (x << 3) + (ch & 0x0F); + ch = this.nextChar(); + if (ch >= 0x30 && ch <= 0x37) { + charBuffered = false; + x = (x << 3) + (ch & 0x0F); + } + } + strBuf.push(String.fromCharCode(x)); + break; + case 0x0D: + if (this.peekChar() === 0x0A) { + this.nextChar(); + } + break; + case 0x0A: + break; + default: + strBuf.push(String.fromCharCode(ch)); + break; + } + break; + default: + strBuf.push(String.fromCharCode(ch)); + break; + } + if (done) { + break; + } + if (!charBuffered) { + ch = this.nextChar(); + } + } + return strBuf.join(''); + }, + getName: function Lexer_getName() { + var ch, previousCh; + var strBuf = this.strBuf; + strBuf.length = 0; + while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) { + if (ch === 0x23) { + ch = this.nextChar(); + if (specialChars[ch]) { + warn('Lexer_getName: ' + 'NUMBER SIGN (#) should be followed by a hexadecimal number.'); + strBuf.push('#'); + break; + } + var x = toHexDigit(ch); + if (x !== -1) { + previousCh = ch; + ch = this.nextChar(); + var x2 = toHexDigit(ch); + if (x2 === -1) { + warn('Lexer_getName: Illegal digit (' + String.fromCharCode(ch) + ') in hexadecimal number.'); + strBuf.push('#', String.fromCharCode(previousCh)); + if (specialChars[ch]) { + break; + } + strBuf.push(String.fromCharCode(ch)); + continue; + } + strBuf.push(String.fromCharCode(x << 4 | x2)); + } else { + strBuf.push('#', String.fromCharCode(ch)); + } + } else { + strBuf.push(String.fromCharCode(ch)); + } + } + if (strBuf.length > 127) { + warn('name token is longer than allowed by the spec: ' + strBuf.length); + } + return Name.get(strBuf.join('')); + }, + getHexString: function Lexer_getHexString() { + var strBuf = this.strBuf; + strBuf.length = 0; + var ch = this.currentChar; + var isFirstHex = true; + var firstDigit; + var secondDigit; + while (true) { + if (ch < 0) { + warn('Unterminated hex string'); + break; + } else if (ch === 0x3E) { + this.nextChar(); + break; + } else if (specialChars[ch] === 1) { + ch = this.nextChar(); + continue; + } else { + if (isFirstHex) { + firstDigit = toHexDigit(ch); + if (firstDigit === -1) { + warn('Ignoring invalid character "' + ch + '" in hex string'); + ch = this.nextChar(); + continue; + } + } else { + secondDigit = toHexDigit(ch); + if (secondDigit === -1) { + warn('Ignoring invalid character "' + ch + '" in hex string'); + ch = this.nextChar(); + continue; + } + strBuf.push(String.fromCharCode(firstDigit << 4 | secondDigit)); + } + isFirstHex = !isFirstHex; + ch = this.nextChar(); + } + } + return strBuf.join(''); + }, + getObj: function Lexer_getObj() { + var comment = false; + var ch = this.currentChar; + while (true) { + if (ch < 0) { + return EOF; + } + if (comment) { + if (ch === 0x0A || ch === 0x0D) { + comment = false; + } + } else if (ch === 0x25) { + comment = true; + } else if (specialChars[ch] !== 1) { + break; + } + ch = this.nextChar(); + } + switch (ch | 0) { + case 0x30: + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + case 0x38: + case 0x39: + case 0x2B: + case 0x2D: + case 0x2E: + return this.getNumber(); + case 0x28: + return this.getString(); + case 0x2F: + return this.getName(); + case 0x5B: + this.nextChar(); + return Cmd.get('['); + case 0x5D: + this.nextChar(); + return Cmd.get(']'); + case 0x3C: + ch = this.nextChar(); + if (ch === 0x3C) { + this.nextChar(); + return Cmd.get('<<'); + } + return this.getHexString(); + case 0x3E: + ch = this.nextChar(); + if (ch === 0x3E) { + this.nextChar(); + return Cmd.get('>>'); + } + return Cmd.get('>'); + case 0x7B: + this.nextChar(); + return Cmd.get('{'); + case 0x7D: + this.nextChar(); + return Cmd.get('}'); + case 0x29: + error('Illegal character: ' + ch); + break; + } + var str = String.fromCharCode(ch); + var knownCommands = this.knownCommands; + var knownCommandFound = knownCommands && knownCommands[str] !== undefined; + while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) { + var possibleCommand = str + String.fromCharCode(ch); + if (knownCommandFound && knownCommands[possibleCommand] === undefined) { + break; + } + if (str.length === 128) { + error('Command token too long: ' + str.length); + } + str = possibleCommand; + knownCommandFound = knownCommands && knownCommands[str] !== undefined; + } + if (str === 'true') { + return true; + } + if (str === 'false') { + return false; + } + if (str === 'null') { + return null; + } + return Cmd.get(str); + }, + skipToNextLine: function Lexer_skipToNextLine() { + var ch = this.currentChar; + while (ch >= 0) { + if (ch === 0x0D) { + ch = this.nextChar(); + if (ch === 0x0A) { + this.nextChar(); + } + break; + } else if (ch === 0x0A) { + this.nextChar(); + break; + } + ch = this.nextChar(); + } + } + }; + return Lexer; + }(); + var Linearization = { + create: function LinearizationCreate(stream) { + function getInt(name, allowZeroValue) { + var obj = linDict.get(name); + if (isInt(obj) && (allowZeroValue ? obj >= 0 : obj > 0)) { + return obj; + } + throw new Error('The "' + name + '" parameter in the linearization ' + 'dictionary is invalid.'); + } + function getHints() { + var hints = linDict.get('H'), hintsLength, item; + if (isArray(hints) && ((hintsLength = hints.length) === 2 || hintsLength === 4)) { + for (var index = 0; index < hintsLength; index++) { + if (!(isInt(item = hints[index]) && item > 0)) { + throw new Error('Hint (' + index + ') in the linearization dictionary is invalid.'); + } + } + return hints; + } + throw new Error('Hint array in the linearization dictionary is invalid.'); + } + var parser = new Parser(new Lexer(stream), false, null); + var obj1 = parser.getObj(); + var obj2 = parser.getObj(); + var obj3 = parser.getObj(); + var linDict = parser.getObj(); + var obj, length; + if (!(isInt(obj1) && isInt(obj2) && isCmd(obj3, 'obj') && isDict(linDict) && isNum(obj = linDict.get('Linearized')) && obj > 0)) { + return null; + } else if ((length = getInt('L')) !== stream.length) { + throw new Error('The "L" parameter in the linearization dictionary ' + 'does not equal the stream length.'); + } + return { + length: length, + hints: getHints(), + objectNumberFirst: getInt('O'), + endFirst: getInt('E'), + numPages: getInt('N'), + mainXRefEntriesOffset: getInt('T'), + pageFirst: linDict.has('P') ? getInt('P', true) : 0 + }; + } + }; + exports.EOF = EOF; + exports.Lexer = Lexer; + exports.Linearization = Linearization; + exports.Parser = Parser; + exports.isEOF = isEOF; + })); + (function (root, factory) { + factory(root.pdfjsCoreType1Parser = {}, root.pdfjsSharedUtil, root.pdfjsCoreStream, root.pdfjsCoreEncodings); + }(this, function (exports, sharedUtil, coreStream, coreEncodings) { + var warn = sharedUtil.warn; + var isSpace = sharedUtil.isSpace; + var Stream = coreStream.Stream; + var getEncoding = coreEncodings.getEncoding; + var HINTING_ENABLED = false; + var Type1CharString = function Type1CharStringClosure() { + var COMMAND_MAP = { + 'hstem': [1], + 'vstem': [3], + 'vmoveto': [4], + 'rlineto': [5], + 'hlineto': [6], + 'vlineto': [7], + 'rrcurveto': [8], + 'callsubr': [10], + 'flex': [ + 12, + 35 + ], + 'drop': [ + 12, + 18 + ], + 'endchar': [14], + 'rmoveto': [21], + 'hmoveto': [22], + 'vhcurveto': [30], + 'hvcurveto': [31] + }; + function Type1CharString() { + this.width = 0; + this.lsb = 0; + this.flexing = false; + this.output = []; + this.stack = []; + } + Type1CharString.prototype = { + convert: function Type1CharString_convert(encoded, subrs, seacAnalysisEnabled) { + var count = encoded.length; + var error = false; + var wx, sbx, subrNumber; + for (var i = 0; i < count; i++) { + var value = encoded[i]; + if (value < 32) { + if (value === 12) { + value = (value << 8) + encoded[++i]; + } + switch (value) { + case 1: + if (!HINTING_ENABLED) { + this.stack = []; + break; + } + error = this.executeCommand(2, COMMAND_MAP.hstem); + break; + case 3: + if (!HINTING_ENABLED) { + this.stack = []; + break; + } + error = this.executeCommand(2, COMMAND_MAP.vstem); + break; + case 4: + if (this.flexing) { + if (this.stack.length < 1) { + error = true; + break; + } + var dy = this.stack.pop(); + this.stack.push(0, dy); + break; + } + error = this.executeCommand(1, COMMAND_MAP.vmoveto); + break; + case 5: + error = this.executeCommand(2, COMMAND_MAP.rlineto); + break; + case 6: + error = this.executeCommand(1, COMMAND_MAP.hlineto); + break; + case 7: + error = this.executeCommand(1, COMMAND_MAP.vlineto); + break; + case 8: + error = this.executeCommand(6, COMMAND_MAP.rrcurveto); + break; + case 9: + this.stack = []; + break; + case 10: + if (this.stack.length < 1) { + error = true; + break; + } + subrNumber = this.stack.pop(); + error = this.convert(subrs[subrNumber], subrs, seacAnalysisEnabled); + break; + case 11: + return error; + case 13: + if (this.stack.length < 2) { + error = true; + break; + } + wx = this.stack.pop(); + sbx = this.stack.pop(); + this.lsb = sbx; + this.width = wx; + this.stack.push(wx, sbx); + error = this.executeCommand(2, COMMAND_MAP.hmoveto); + break; + case 14: + this.output.push(COMMAND_MAP.endchar[0]); + break; + case 21: + if (this.flexing) { + break; + } + error = this.executeCommand(2, COMMAND_MAP.rmoveto); + break; + case 22: + if (this.flexing) { + this.stack.push(0); + break; + } + error = this.executeCommand(1, COMMAND_MAP.hmoveto); + break; + case 30: + error = this.executeCommand(4, COMMAND_MAP.vhcurveto); + break; + case 31: + error = this.executeCommand(4, COMMAND_MAP.hvcurveto); + break; + case (12 << 8) + 0: + this.stack = []; + break; + case (12 << 8) + 1: + if (!HINTING_ENABLED) { + this.stack = []; + break; + } + error = this.executeCommand(2, COMMAND_MAP.vstem); + break; + case (12 << 8) + 2: + if (!HINTING_ENABLED) { + this.stack = []; + break; + } + error = this.executeCommand(2, COMMAND_MAP.hstem); + break; + case (12 << 8) + 6: + if (seacAnalysisEnabled) { + this.seac = this.stack.splice(-4, 4); + error = this.executeCommand(0, COMMAND_MAP.endchar); + } else { + error = this.executeCommand(4, COMMAND_MAP.endchar); + } + break; + case (12 << 8) + 7: + if (this.stack.length < 4) { + error = true; + break; + } + var wy = this.stack.pop(); + wx = this.stack.pop(); + var sby = this.stack.pop(); + sbx = this.stack.pop(); + this.lsb = sbx; + this.width = wx; + this.stack.push(wx, sbx, sby); + error = this.executeCommand(3, COMMAND_MAP.rmoveto); + break; + case (12 << 8) + 12: + if (this.stack.length < 2) { + error = true; + break; + } + var num2 = this.stack.pop(); + var num1 = this.stack.pop(); + this.stack.push(num1 / num2); + break; + case (12 << 8) + 16: + if (this.stack.length < 2) { + error = true; + break; + } + subrNumber = this.stack.pop(); + var numArgs = this.stack.pop(); + if (subrNumber === 0 && numArgs === 3) { + var flexArgs = this.stack.splice(this.stack.length - 17, 17); + this.stack.push(flexArgs[2] + flexArgs[0], flexArgs[3] + flexArgs[1], flexArgs[4], flexArgs[5], flexArgs[6], flexArgs[7], flexArgs[8], flexArgs[9], flexArgs[10], flexArgs[11], flexArgs[12], flexArgs[13], flexArgs[14]); + error = this.executeCommand(13, COMMAND_MAP.flex, true); + this.flexing = false; + this.stack.push(flexArgs[15], flexArgs[16]); + } else if (subrNumber === 1 && numArgs === 0) { + this.flexing = true; + } + break; + case (12 << 8) + 17: + break; + case (12 << 8) + 33: + this.stack = []; + break; + default: + warn('Unknown type 1 charstring command of "' + value + '"'); + break; + } + if (error) { + break; + } + continue; + } else if (value <= 246) { + value = value - 139; + } else if (value <= 250) { + value = (value - 247) * 256 + encoded[++i] + 108; + } else if (value <= 254) { + value = -((value - 251) * 256) - encoded[++i] - 108; + } else { + value = (encoded[++i] & 0xff) << 24 | (encoded[++i] & 0xff) << 16 | (encoded[++i] & 0xff) << 8 | (encoded[++i] & 0xff) << 0; + } + this.stack.push(value); + } + return error; + }, + executeCommand: function (howManyArgs, command, keepStack) { + var stackLength = this.stack.length; + if (howManyArgs > stackLength) { + return true; + } + var start = stackLength - howManyArgs; + for (var i = start; i < stackLength; i++) { + var value = this.stack[i]; + if (value === (value | 0)) { + this.output.push(28, value >> 8 & 0xff, value & 0xff); + } else { + value = 65536 * value | 0; + this.output.push(255, value >> 24 & 0xFF, value >> 16 & 0xFF, value >> 8 & 0xFF, value & 0xFF); + } + } + this.output.push.apply(this.output, command); + if (keepStack) { + this.stack.splice(start, howManyArgs); + } else { + this.stack.length = 0; + } + return false; + } + }; + return Type1CharString; + }(); + var Type1Parser = function Type1ParserClosure() { + var EEXEC_ENCRYPT_KEY = 55665; + var CHAR_STRS_ENCRYPT_KEY = 4330; + function isHexDigit(code) { + return code >= 48 && code <= 57 || code >= 65 && code <= 70 || code >= 97 && code <= 102; + } + function decrypt(data, key, discardNumber) { + if (discardNumber >= data.length) { + return new Uint8Array(0); + } + var r = key | 0, c1 = 52845, c2 = 22719, i, j; + for (i = 0; i < discardNumber; i++) { + r = (data[i] + r) * c1 + c2 & (1 << 16) - 1; + } + var count = data.length - discardNumber; + var decrypted = new Uint8Array(count); + for (i = discardNumber, j = 0; j < count; i++, j++) { + var value = data[i]; + decrypted[j] = value ^ r >> 8; + r = (value + r) * c1 + c2 & (1 << 16) - 1; + } + return decrypted; + } + function decryptAscii(data, key, discardNumber) { + var r = key | 0, c1 = 52845, c2 = 22719; + var count = data.length, maybeLength = count >>> 1; + var decrypted = new Uint8Array(maybeLength); + var i, j; + for (i = 0, j = 0; i < count; i++) { + var digit1 = data[i]; + if (!isHexDigit(digit1)) { + continue; + } + i++; + var digit2; + while (i < count && !isHexDigit(digit2 = data[i])) { + i++; + } + if (i < count) { + var value = parseInt(String.fromCharCode(digit1, digit2), 16); + decrypted[j++] = value ^ r >> 8; + r = (value + r) * c1 + c2 & (1 << 16) - 1; + } + } + return Array.prototype.slice.call(decrypted, discardNumber, j); + } + function isSpecial(c) { + return c === 0x2F || c === 0x5B || c === 0x5D || c === 0x7B || c === 0x7D || c === 0x28 || c === 0x29; + } + function Type1Parser(stream, encrypted, seacAnalysisEnabled) { + if (encrypted) { + var data = stream.getBytes(); + var isBinary = !(isHexDigit(data[0]) && isHexDigit(data[1]) && isHexDigit(data[2]) && isHexDigit(data[3])); + stream = new Stream(isBinary ? decrypt(data, EEXEC_ENCRYPT_KEY, 4) : decryptAscii(data, EEXEC_ENCRYPT_KEY, 4)); + } + this.seacAnalysisEnabled = !!seacAnalysisEnabled; + this.stream = stream; + this.nextChar(); + } + Type1Parser.prototype = { + readNumberArray: function Type1Parser_readNumberArray() { + this.getToken(); + var array = []; + while (true) { + var token = this.getToken(); + if (token === null || token === ']' || token === '}') { + break; + } + array.push(parseFloat(token || 0)); + } + return array; + }, + readNumber: function Type1Parser_readNumber() { + var token = this.getToken(); + return parseFloat(token || 0); + }, + readInt: function Type1Parser_readInt() { + var token = this.getToken(); + return parseInt(token || 0, 10) | 0; + }, + readBoolean: function Type1Parser_readBoolean() { + var token = this.getToken(); + return token === 'true' ? 1 : 0; + }, + nextChar: function Type1_nextChar() { + return this.currentChar = this.stream.getByte(); + }, + getToken: function Type1Parser_getToken() { + var comment = false; + var ch = this.currentChar; + while (true) { + if (ch === -1) { + return null; + } + if (comment) { + if (ch === 0x0A || ch === 0x0D) { + comment = false; + } + } else if (ch === 0x25) { + comment = true; + } else if (!isSpace(ch)) { + break; + } + ch = this.nextChar(); + } + if (isSpecial(ch)) { + this.nextChar(); + return String.fromCharCode(ch); + } + var token = ''; + do { + token += String.fromCharCode(ch); + ch = this.nextChar(); + } while (ch >= 0 && !isSpace(ch) && !isSpecial(ch)); + return token; + }, + extractFontProgram: function Type1Parser_extractFontProgram() { + var stream = this.stream; + var subrs = [], charstrings = []; + var privateData = Object.create(null); + privateData['lenIV'] = 4; + var program = { + subrs: [], + charstrings: [], + properties: { 'privateData': privateData } + }; + var token, length, data, lenIV, encoded; + while ((token = this.getToken()) !== null) { + if (token !== '/') { + continue; + } + token = this.getToken(); + switch (token) { + case 'CharStrings': + this.getToken(); + this.getToken(); + this.getToken(); + this.getToken(); + while (true) { + token = this.getToken(); + if (token === null || token === 'end') { + break; + } + if (token !== '/') { + continue; + } + var glyph = this.getToken(); + length = this.readInt(); + this.getToken(); + data = stream.makeSubStream(stream.pos, length); + lenIV = program.properties.privateData['lenIV']; + encoded = decrypt(data.getBytes(), CHAR_STRS_ENCRYPT_KEY, lenIV); + stream.skip(length); + this.nextChar(); + token = this.getToken(); + if (token === 'noaccess') { + this.getToken(); + } + charstrings.push({ + glyph: glyph, + encoded: encoded + }); + } + break; + case 'Subrs': + var num = this.readInt(); + this.getToken(); + while ((token = this.getToken()) === 'dup') { + var index = this.readInt(); + length = this.readInt(); + this.getToken(); + data = stream.makeSubStream(stream.pos, length); + lenIV = program.properties.privateData['lenIV']; + encoded = decrypt(data.getBytes(), CHAR_STRS_ENCRYPT_KEY, lenIV); + stream.skip(length); + this.nextChar(); + token = this.getToken(); + if (token === 'noaccess') { + this.getToken(); + } + subrs[index] = encoded; + } + break; + case 'BlueValues': + case 'OtherBlues': + case 'FamilyBlues': + case 'FamilyOtherBlues': + var blueArray = this.readNumberArray(); + if (blueArray.length > 0 && blueArray.length % 2 === 0 && HINTING_ENABLED) { + program.properties.privateData[token] = blueArray; + } + break; + case 'StemSnapH': + case 'StemSnapV': + program.properties.privateData[token] = this.readNumberArray(); + break; + case 'StdHW': + case 'StdVW': + program.properties.privateData[token] = this.readNumberArray()[0]; + break; + case 'BlueShift': + case 'lenIV': + case 'BlueFuzz': + case 'BlueScale': + case 'LanguageGroup': + case 'ExpansionFactor': + program.properties.privateData[token] = this.readNumber(); + break; + case 'ForceBold': + program.properties.privateData[token] = this.readBoolean(); + break; + } + } + for (var i = 0; i < charstrings.length; i++) { + glyph = charstrings[i].glyph; + encoded = charstrings[i].encoded; + var charString = new Type1CharString(); + var error = charString.convert(encoded, subrs, this.seacAnalysisEnabled); + var output = charString.output; + if (error) { + output = [14]; + } + program.charstrings.push({ + glyphName: glyph, + charstring: output, + width: charString.width, + lsb: charString.lsb, + seac: charString.seac + }); + } + return program; + }, + extractFontHeader: function Type1Parser_extractFontHeader(properties) { + var token; + while ((token = this.getToken()) !== null) { + if (token !== '/') { + continue; + } + token = this.getToken(); + switch (token) { + case 'FontMatrix': + var matrix = this.readNumberArray(); + properties.fontMatrix = matrix; + break; + case 'Encoding': + var encodingArg = this.getToken(); + var encoding; + if (!/^\d+$/.test(encodingArg)) { + encoding = getEncoding(encodingArg); + } else { + encoding = []; + var size = parseInt(encodingArg, 10) | 0; + this.getToken(); + for (var j = 0; j < size; j++) { + token = this.getToken(); + while (token !== 'dup' && token !== 'def') { + token = this.getToken(); + if (token === null) { + return; + } + } + if (token === 'def') { + break; + } + var index = this.readInt(); + this.getToken(); + var glyph = this.getToken(); + encoding[index] = glyph; + this.getToken(); + } + } + properties.builtInEncoding = encoding; + break; + case 'FontBBox': + var fontBBox = this.readNumberArray(); + properties.ascent = fontBBox[3]; + properties.descent = fontBBox[1]; + properties.ascentScaled = true; + break; + } + } + } + }; + return Type1Parser; + }(); + exports.Type1Parser = Type1Parser; + })); + (function (root, factory) { + factory(root.pdfjsCoreCMap = {}, root.pdfjsSharedUtil, root.pdfjsCorePrimitives, root.pdfjsCoreStream, root.pdfjsCoreParser); + }(this, function (exports, sharedUtil, corePrimitives, coreStream, coreParser) { + var Util = sharedUtil.Util; + var assert = sharedUtil.assert; + var warn = sharedUtil.warn; + var error = sharedUtil.error; + var isInt = sharedUtil.isInt; + var isString = sharedUtil.isString; + var MissingDataException = sharedUtil.MissingDataException; + var isName = corePrimitives.isName; + var isCmd = corePrimitives.isCmd; + var isStream = corePrimitives.isStream; + var StringStream = coreStream.StringStream; + var Lexer = coreParser.Lexer; + var isEOF = coreParser.isEOF; + var BUILT_IN_CMAPS = [ + 'Adobe-GB1-UCS2', + 'Adobe-CNS1-UCS2', + 'Adobe-Japan1-UCS2', + 'Adobe-Korea1-UCS2', + '78-EUC-H', + '78-EUC-V', + '78-H', + '78-RKSJ-H', + '78-RKSJ-V', + '78-V', + '78ms-RKSJ-H', + '78ms-RKSJ-V', + '83pv-RKSJ-H', + '90ms-RKSJ-H', + '90ms-RKSJ-V', + '90msp-RKSJ-H', + '90msp-RKSJ-V', + '90pv-RKSJ-H', + '90pv-RKSJ-V', + 'Add-H', + 'Add-RKSJ-H', + 'Add-RKSJ-V', + 'Add-V', + 'Adobe-CNS1-0', + 'Adobe-CNS1-1', + 'Adobe-CNS1-2', + 'Adobe-CNS1-3', + 'Adobe-CNS1-4', + 'Adobe-CNS1-5', + 'Adobe-CNS1-6', + 'Adobe-GB1-0', + 'Adobe-GB1-1', + 'Adobe-GB1-2', + 'Adobe-GB1-3', + 'Adobe-GB1-4', + 'Adobe-GB1-5', + 'Adobe-Japan1-0', + 'Adobe-Japan1-1', + 'Adobe-Japan1-2', + 'Adobe-Japan1-3', + 'Adobe-Japan1-4', + 'Adobe-Japan1-5', + 'Adobe-Japan1-6', + 'Adobe-Korea1-0', + 'Adobe-Korea1-1', + 'Adobe-Korea1-2', + 'B5-H', + 'B5-V', + 'B5pc-H', + 'B5pc-V', + 'CNS-EUC-H', + 'CNS-EUC-V', + 'CNS1-H', + 'CNS1-V', + 'CNS2-H', + 'CNS2-V', + 'ETHK-B5-H', + 'ETHK-B5-V', + 'ETen-B5-H', + 'ETen-B5-V', + 'ETenms-B5-H', + 'ETenms-B5-V', + 'EUC-H', + 'EUC-V', + 'Ext-H', + 'Ext-RKSJ-H', + 'Ext-RKSJ-V', + 'Ext-V', + 'GB-EUC-H', + 'GB-EUC-V', + 'GB-H', + 'GB-V', + 'GBK-EUC-H', + 'GBK-EUC-V', + 'GBK2K-H', + 'GBK2K-V', + 'GBKp-EUC-H', + 'GBKp-EUC-V', + 'GBT-EUC-H', + 'GBT-EUC-V', + 'GBT-H', + 'GBT-V', + 'GBTpc-EUC-H', + 'GBTpc-EUC-V', + 'GBpc-EUC-H', + 'GBpc-EUC-V', + 'H', + 'HKdla-B5-H', + 'HKdla-B5-V', + 'HKdlb-B5-H', + 'HKdlb-B5-V', + 'HKgccs-B5-H', + 'HKgccs-B5-V', + 'HKm314-B5-H', + 'HKm314-B5-V', + 'HKm471-B5-H', + 'HKm471-B5-V', + 'HKscs-B5-H', + 'HKscs-B5-V', + 'Hankaku', + 'Hiragana', + 'KSC-EUC-H', + 'KSC-EUC-V', + 'KSC-H', + 'KSC-Johab-H', + 'KSC-Johab-V', + 'KSC-V', + 'KSCms-UHC-H', + 'KSCms-UHC-HW-H', + 'KSCms-UHC-HW-V', + 'KSCms-UHC-V', + 'KSCpc-EUC-H', + 'KSCpc-EUC-V', + 'Katakana', + 'NWP-H', + 'NWP-V', + 'RKSJ-H', + 'RKSJ-V', + 'Roman', + 'UniCNS-UCS2-H', + 'UniCNS-UCS2-V', + 'UniCNS-UTF16-H', + 'UniCNS-UTF16-V', + 'UniCNS-UTF32-H', + 'UniCNS-UTF32-V', + 'UniCNS-UTF8-H', + 'UniCNS-UTF8-V', + 'UniGB-UCS2-H', + 'UniGB-UCS2-V', + 'UniGB-UTF16-H', + 'UniGB-UTF16-V', + 'UniGB-UTF32-H', + 'UniGB-UTF32-V', + 'UniGB-UTF8-H', + 'UniGB-UTF8-V', + 'UniJIS-UCS2-H', + 'UniJIS-UCS2-HW-H', + 'UniJIS-UCS2-HW-V', + 'UniJIS-UCS2-V', + 'UniJIS-UTF16-H', + 'UniJIS-UTF16-V', + 'UniJIS-UTF32-H', + 'UniJIS-UTF32-V', + 'UniJIS-UTF8-H', + 'UniJIS-UTF8-V', + 'UniJIS2004-UTF16-H', + 'UniJIS2004-UTF16-V', + 'UniJIS2004-UTF32-H', + 'UniJIS2004-UTF32-V', + 'UniJIS2004-UTF8-H', + 'UniJIS2004-UTF8-V', + 'UniJISPro-UCS2-HW-V', + 'UniJISPro-UCS2-V', + 'UniJISPro-UTF8-V', + 'UniJISX0213-UTF32-H', + 'UniJISX0213-UTF32-V', + 'UniJISX02132004-UTF32-H', + 'UniJISX02132004-UTF32-V', + 'UniKS-UCS2-H', + 'UniKS-UCS2-V', + 'UniKS-UTF16-H', + 'UniKS-UTF16-V', + 'UniKS-UTF32-H', + 'UniKS-UTF32-V', + 'UniKS-UTF8-H', + 'UniKS-UTF8-V', + 'V', + 'WP-Symbol' + ]; + var CMap = function CMapClosure() { + function CMap(builtInCMap) { + this.codespaceRanges = [ + [], + [], + [], + [] + ]; + this.numCodespaceRanges = 0; + this._map = []; + this.name = ''; + this.vertical = false; + this.useCMap = null; + this.builtInCMap = builtInCMap; + } + CMap.prototype = { + addCodespaceRange: function (n, low, high) { + this.codespaceRanges[n - 1].push(low, high); + this.numCodespaceRanges++; + }, + mapCidRange: function (low, high, dstLow) { + while (low <= high) { + this._map[low++] = dstLow++; + } + }, + mapBfRange: function (low, high, dstLow) { + var lastByte = dstLow.length - 1; + while (low <= high) { + this._map[low++] = dstLow; + dstLow = dstLow.substr(0, lastByte) + String.fromCharCode(dstLow.charCodeAt(lastByte) + 1); + } + }, + mapBfRangeToArray: function (low, high, array) { + var i = 0, ii = array.length; + while (low <= high && i < ii) { + this._map[low] = array[i++]; + ++low; + } + }, + mapOne: function (src, dst) { + this._map[src] = dst; + }, + lookup: function (code) { + return this._map[code]; + }, + contains: function (code) { + return this._map[code] !== undefined; + }, + forEach: function (callback) { + var map = this._map; + var length = map.length; + var i; + if (length <= 0x10000) { + for (i = 0; i < length; i++) { + if (map[i] !== undefined) { + callback(i, map[i]); + } + } + } else { + for (i in this._map) { + callback(i, map[i]); + } + } + }, + charCodeOf: function (value) { + return this._map.indexOf(value); + }, + getMap: function () { + return this._map; + }, + readCharCode: function (str, offset, out) { + var c = 0; + var codespaceRanges = this.codespaceRanges; + var codespaceRangesLen = this.codespaceRanges.length; + for (var n = 0; n < codespaceRangesLen; n++) { + c = (c << 8 | str.charCodeAt(offset + n)) >>> 0; + var codespaceRange = codespaceRanges[n]; + for (var k = 0, kk = codespaceRange.length; k < kk;) { + var low = codespaceRange[k++]; + var high = codespaceRange[k++]; + if (c >= low && c <= high) { + out.charcode = c; + out.length = n + 1; + return; + } + } + } + out.charcode = 0; + out.length = 1; + }, + get length() { + return this._map.length; + }, + get isIdentityCMap() { + if (!(this.name === 'Identity-H' || this.name === 'Identity-V')) { + return false; + } + if (this._map.length !== 0x10000) { + return false; + } + for (var i = 0; i < 0x10000; i++) { + if (this._map[i] !== i) { + return false; + } + } + return true; + } + }; + return CMap; + }(); + var IdentityCMap = function IdentityCMapClosure() { + function IdentityCMap(vertical, n) { + CMap.call(this); + this.vertical = vertical; + this.addCodespaceRange(n, 0, 0xffff); + } + Util.inherit(IdentityCMap, CMap, {}); + IdentityCMap.prototype = { + addCodespaceRange: CMap.prototype.addCodespaceRange, + mapCidRange: function (low, high, dstLow) { + error('should not call mapCidRange'); + }, + mapBfRange: function (low, high, dstLow) { + error('should not call mapBfRange'); + }, + mapBfRangeToArray: function (low, high, array) { + error('should not call mapBfRangeToArray'); + }, + mapOne: function (src, dst) { + error('should not call mapCidOne'); + }, + lookup: function (code) { + return isInt(code) && code <= 0xffff ? code : undefined; + }, + contains: function (code) { + return isInt(code) && code <= 0xffff; + }, + forEach: function (callback) { + for (var i = 0; i <= 0xffff; i++) { + callback(i, i); + } + }, + charCodeOf: function (value) { + return isInt(value) && value <= 0xffff ? value : -1; + }, + getMap: function () { + var map = new Array(0x10000); + for (var i = 0; i <= 0xffff; i++) { + map[i] = i; + } + return map; + }, + readCharCode: CMap.prototype.readCharCode, + get length() { + return 0x10000; + }, + get isIdentityCMap() { + error('should not access .isIdentityCMap'); + } + }; + return IdentityCMap; + }(); + var BinaryCMapReader = function BinaryCMapReaderClosure() { + function fetchBinaryData(url) { + return new Promise(function (resolve, reject) { + var request = new XMLHttpRequest(); + request.open('GET', url, true); + request.responseType = 'arraybuffer'; + request.onreadystatechange = function () { + if (request.readyState === XMLHttpRequest.DONE) { + if (!request.response || request.status !== 200 && request.status !== 0) { + reject(new Error('Unable to get binary cMap at: ' + url)); + } else { + resolve(new Uint8Array(request.response)); + } + } + }; + request.send(null); + }); + } + function hexToInt(a, size) { + var n = 0; + for (var i = 0; i <= size; i++) { + n = n << 8 | a[i]; + } + return n >>> 0; + } + function hexToStr(a, size) { + if (size === 1) { + return String.fromCharCode(a[0], a[1]); + } + if (size === 3) { + return String.fromCharCode(a[0], a[1], a[2], a[3]); + } + return String.fromCharCode.apply(null, a.subarray(0, size + 1)); + } + function addHex(a, b, size) { + var c = 0; + for (var i = size; i >= 0; i--) { + c += a[i] + b[i]; + a[i] = c & 255; + c >>= 8; + } + } + function incHex(a, size) { + var c = 1; + for (var i = size; i >= 0 && c > 0; i--) { + c += a[i]; + a[i] = c & 255; + c >>= 8; + } + } + var MAX_NUM_SIZE = 16; + var MAX_ENCODED_NUM_SIZE = 19; + function BinaryCMapStream(data) { + this.buffer = data; + this.pos = 0; + this.end = data.length; + this.tmpBuf = new Uint8Array(MAX_ENCODED_NUM_SIZE); + } + BinaryCMapStream.prototype = { + readByte: function () { + if (this.pos >= this.end) { + return -1; + } + return this.buffer[this.pos++]; + }, + readNumber: function () { + var n = 0; + var last; + do { + var b = this.readByte(); + if (b < 0) { + error('unexpected EOF in bcmap'); + } + last = !(b & 0x80); + n = n << 7 | b & 0x7F; + } while (!last); + return n; + }, + readSigned: function () { + var n = this.readNumber(); + return n & 1 ? ~(n >>> 1) : n >>> 1; + }, + readHex: function (num, size) { + num.set(this.buffer.subarray(this.pos, this.pos + size + 1)); + this.pos += size + 1; + }, + readHexNumber: function (num, size) { + var last; + var stack = this.tmpBuf, sp = 0; + do { + var b = this.readByte(); + if (b < 0) { + error('unexpected EOF in bcmap'); + } + last = !(b & 0x80); + stack[sp++] = b & 0x7F; + } while (!last); + var i = size, buffer = 0, bufferSize = 0; + while (i >= 0) { + while (bufferSize < 8 && stack.length > 0) { + buffer = stack[--sp] << bufferSize | buffer; + bufferSize += 7; + } + num[i] = buffer & 255; + i--; + buffer >>= 8; + bufferSize -= 8; + } + }, + readHexSigned: function (num, size) { + this.readHexNumber(num, size); + var sign = num[size] & 1 ? 255 : 0; + var c = 0; + for (var i = 0; i <= size; i++) { + c = (c & 1) << 8 | num[i]; + num[i] = c >> 1 ^ sign; + } + }, + readString: function () { + var len = this.readNumber(); + var s = ''; + for (var i = 0; i < len; i++) { + s += String.fromCharCode(this.readNumber()); + } + return s; + } + }; + function processBinaryCMap(url, cMap, extend) { + return fetchBinaryData(url).then(function (data) { + var stream = new BinaryCMapStream(data); + var header = stream.readByte(); + cMap.vertical = !!(header & 1); + var useCMap = null; + var start = new Uint8Array(MAX_NUM_SIZE); + var end = new Uint8Array(MAX_NUM_SIZE); + var char = new Uint8Array(MAX_NUM_SIZE); + var charCode = new Uint8Array(MAX_NUM_SIZE); + var tmp = new Uint8Array(MAX_NUM_SIZE); + var code; + var b; + while ((b = stream.readByte()) >= 0) { + var type = b >> 5; + if (type === 7) { + switch (b & 0x1F) { + case 0: + stream.readString(); + break; + case 1: + useCMap = stream.readString(); + break; + } + continue; + } + var sequence = !!(b & 0x10); + var dataSize = b & 15; + assert(dataSize + 1 <= MAX_NUM_SIZE); + var ucs2DataSize = 1; + var subitemsCount = stream.readNumber(); + var i; + switch (type) { + case 0: + stream.readHex(start, dataSize); + stream.readHexNumber(end, dataSize); + addHex(end, start, dataSize); + cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize), hexToInt(end, dataSize)); + for (i = 1; i < subitemsCount; i++) { + incHex(end, dataSize); + stream.readHexNumber(start, dataSize); + addHex(start, end, dataSize); + stream.readHexNumber(end, dataSize); + addHex(end, start, dataSize); + cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize), hexToInt(end, dataSize)); + } + break; + case 1: + stream.readHex(start, dataSize); + stream.readHexNumber(end, dataSize); + addHex(end, start, dataSize); + code = stream.readNumber(); + for (i = 1; i < subitemsCount; i++) { + incHex(end, dataSize); + stream.readHexNumber(start, dataSize); + addHex(start, end, dataSize); + stream.readHexNumber(end, dataSize); + addHex(end, start, dataSize); + code = stream.readNumber(); + } + break; + case 2: + stream.readHex(char, dataSize); + code = stream.readNumber(); + cMap.mapOne(hexToInt(char, dataSize), code); + for (i = 1; i < subitemsCount; i++) { + incHex(char, dataSize); + if (!sequence) { + stream.readHexNumber(tmp, dataSize); + addHex(char, tmp, dataSize); + } + code = stream.readSigned() + (code + 1); + cMap.mapOne(hexToInt(char, dataSize), code); + } + break; + case 3: + stream.readHex(start, dataSize); + stream.readHexNumber(end, dataSize); + addHex(end, start, dataSize); + code = stream.readNumber(); + cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize), code); + for (i = 1; i < subitemsCount; i++) { + incHex(end, dataSize); + if (!sequence) { + stream.readHexNumber(start, dataSize); + addHex(start, end, dataSize); + } else { + start.set(end); + } + stream.readHexNumber(end, dataSize); + addHex(end, start, dataSize); + code = stream.readNumber(); + cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize), code); + } + break; + case 4: + stream.readHex(char, ucs2DataSize); + stream.readHex(charCode, dataSize); + cMap.mapOne(hexToInt(char, ucs2DataSize), hexToStr(charCode, dataSize)); + for (i = 1; i < subitemsCount; i++) { + incHex(char, ucs2DataSize); + if (!sequence) { + stream.readHexNumber(tmp, ucs2DataSize); + addHex(char, tmp, ucs2DataSize); + } + incHex(charCode, dataSize); + stream.readHexSigned(tmp, dataSize); + addHex(charCode, tmp, dataSize); + cMap.mapOne(hexToInt(char, ucs2DataSize), hexToStr(charCode, dataSize)); + } + break; + case 5: + stream.readHex(start, ucs2DataSize); + stream.readHexNumber(end, ucs2DataSize); + addHex(end, start, ucs2DataSize); + stream.readHex(charCode, dataSize); + cMap.mapBfRange(hexToInt(start, ucs2DataSize), hexToInt(end, ucs2DataSize), hexToStr(charCode, dataSize)); + for (i = 1; i < subitemsCount; i++) { + incHex(end, ucs2DataSize); + if (!sequence) { + stream.readHexNumber(start, ucs2DataSize); + addHex(start, end, ucs2DataSize); + } else { + start.set(end); + } + stream.readHexNumber(end, ucs2DataSize); + addHex(end, start, ucs2DataSize); + stream.readHex(charCode, dataSize); + cMap.mapBfRange(hexToInt(start, ucs2DataSize), hexToInt(end, ucs2DataSize), hexToStr(charCode, dataSize)); + } + break; + default: + error('Unknown type: ' + type); + break; + } + } + if (useCMap) { + return extend(useCMap); + } + return cMap; + }); + } + function BinaryCMapReader() { + } + BinaryCMapReader.prototype = { read: processBinaryCMap }; + return BinaryCMapReader; + }(); + var CMapFactory = function CMapFactoryClosure() { + function strToInt(str) { + var a = 0; + for (var i = 0; i < str.length; i++) { + a = a << 8 | str.charCodeAt(i); + } + return a >>> 0; + } + function expectString(obj) { + if (!isString(obj)) { + error('Malformed CMap: expected string.'); + } + } + function expectInt(obj) { + if (!isInt(obj)) { + error('Malformed CMap: expected int.'); + } + } + function parseBfChar(cMap, lexer) { + while (true) { + var obj = lexer.getObj(); + if (isEOF(obj)) { + break; + } + if (isCmd(obj, 'endbfchar')) { + return; + } + expectString(obj); + var src = strToInt(obj); + obj = lexer.getObj(); + expectString(obj); + var dst = obj; + cMap.mapOne(src, dst); + } + } + function parseBfRange(cMap, lexer) { + while (true) { + var obj = lexer.getObj(); + if (isEOF(obj)) { + break; + } + if (isCmd(obj, 'endbfrange')) { + return; + } + expectString(obj); + var low = strToInt(obj); + obj = lexer.getObj(); + expectString(obj); + var high = strToInt(obj); + obj = lexer.getObj(); + if (isInt(obj) || isString(obj)) { + var dstLow = isInt(obj) ? String.fromCharCode(obj) : obj; + cMap.mapBfRange(low, high, dstLow); + } else if (isCmd(obj, '[')) { + obj = lexer.getObj(); + var array = []; + while (!isCmd(obj, ']') && !isEOF(obj)) { + array.push(obj); + obj = lexer.getObj(); + } + cMap.mapBfRangeToArray(low, high, array); + } else { + break; + } + } + error('Invalid bf range.'); + } + function parseCidChar(cMap, lexer) { + while (true) { + var obj = lexer.getObj(); + if (isEOF(obj)) { + break; + } + if (isCmd(obj, 'endcidchar')) { + return; + } + expectString(obj); + var src = strToInt(obj); + obj = lexer.getObj(); + expectInt(obj); + var dst = obj; + cMap.mapOne(src, dst); + } + } + function parseCidRange(cMap, lexer) { + while (true) { + var obj = lexer.getObj(); + if (isEOF(obj)) { + break; + } + if (isCmd(obj, 'endcidrange')) { + return; + } + expectString(obj); + var low = strToInt(obj); + obj = lexer.getObj(); + expectString(obj); + var high = strToInt(obj); + obj = lexer.getObj(); + expectInt(obj); + var dstLow = obj; + cMap.mapCidRange(low, high, dstLow); + } + } + function parseCodespaceRange(cMap, lexer) { + while (true) { + var obj = lexer.getObj(); + if (isEOF(obj)) { + break; + } + if (isCmd(obj, 'endcodespacerange')) { + return; + } + if (!isString(obj)) { + break; + } + var low = strToInt(obj); + obj = lexer.getObj(); + if (!isString(obj)) { + break; + } + var high = strToInt(obj); + cMap.addCodespaceRange(obj.length, low, high); + } + error('Invalid codespace range.'); + } + function parseWMode(cMap, lexer) { + var obj = lexer.getObj(); + if (isInt(obj)) { + cMap.vertical = !!obj; + } + } + function parseCMapName(cMap, lexer) { + var obj = lexer.getObj(); + if (isName(obj) && isString(obj.name)) { + cMap.name = obj.name; + } + } + function parseCMap(cMap, lexer, builtInCMapParams, useCMap) { + var previous; + var embededUseCMap; + objLoop: + while (true) { + try { + var obj = lexer.getObj(); + if (isEOF(obj)) { + break; + } else if (isName(obj)) { + if (obj.name === 'WMode') { + parseWMode(cMap, lexer); + } else if (obj.name === 'CMapName') { + parseCMapName(cMap, lexer); + } + previous = obj; + } else if (isCmd(obj)) { + switch (obj.cmd) { + case 'endcmap': + break objLoop; + case 'usecmap': + if (isName(previous)) { + embededUseCMap = previous.name; + } + break; + case 'begincodespacerange': + parseCodespaceRange(cMap, lexer); + break; + case 'beginbfchar': + parseBfChar(cMap, lexer); + break; + case 'begincidchar': + parseCidChar(cMap, lexer); + break; + case 'beginbfrange': + parseBfRange(cMap, lexer); + break; + case 'begincidrange': + parseCidRange(cMap, lexer); + break; + } + } + } catch (ex) { + if (ex instanceof MissingDataException) { + throw ex; + } + warn('Invalid cMap data: ' + ex); + continue; + } + } + if (!useCMap && embededUseCMap) { + useCMap = embededUseCMap; + } + if (useCMap) { + return extendCMap(cMap, builtInCMapParams, useCMap); + } + return Promise.resolve(cMap); + } + function extendCMap(cMap, builtInCMapParams, useCMap) { + return createBuiltInCMap(useCMap, builtInCMapParams).then(function (newCMap) { + cMap.useCMap = newCMap; + if (cMap.numCodespaceRanges === 0) { + var useCodespaceRanges = cMap.useCMap.codespaceRanges; + for (var i = 0; i < useCodespaceRanges.length; i++) { + cMap.codespaceRanges[i] = useCodespaceRanges[i].slice(); + } + cMap.numCodespaceRanges = cMap.useCMap.numCodespaceRanges; + } + cMap.useCMap.forEach(function (key, value) { + if (!cMap.contains(key)) { + cMap.mapOne(key, cMap.useCMap.lookup(key)); + } + }); + return cMap; + }); + } + function parseBinaryCMap(name, builtInCMapParams) { + var url = builtInCMapParams.url + name + '.bcmap'; + var cMap = new CMap(true); + return new BinaryCMapReader().read(url, cMap, function (useCMap) { + return extendCMap(cMap, builtInCMapParams, useCMap); + }); + } + function createBuiltInCMap(name, builtInCMapParams) { + if (name === 'Identity-H') { + return Promise.resolve(new IdentityCMap(false, 2)); + } else if (name === 'Identity-V') { + return Promise.resolve(new IdentityCMap(true, 2)); + } + if (BUILT_IN_CMAPS.indexOf(name) === -1) { + return Promise.reject(new Error('Unknown cMap name: ' + name)); + } + assert(builtInCMapParams, 'built-in cMap parameters are not provided'); + if (builtInCMapParams.packed) { + return parseBinaryCMap(name, builtInCMapParams); + } + return new Promise(function (resolve, reject) { + var url = builtInCMapParams.url + name; + var request = new XMLHttpRequest(); + request.onreadystatechange = function () { + if (request.readyState === XMLHttpRequest.DONE) { + if (request.status === 200 || request.status === 0) { + var cMap = new CMap(true); + var lexer = new Lexer(new StringStream(request.responseText)); + parseCMap(cMap, lexer, builtInCMapParams, null).then(function (parsedCMap) { + resolve(parsedCMap); + }); + } else { + reject(new Error('Unable to get cMap at: ' + url)); + } + } + }; + request.open('GET', url, true); + request.send(null); + }); + } + return { + create: function (encoding, builtInCMapParams, useCMap) { + if (isName(encoding)) { + return createBuiltInCMap(encoding.name, builtInCMapParams); + } else if (isStream(encoding)) { + var cMap = new CMap(); + var lexer = new Lexer(encoding); + return parseCMap(cMap, lexer, builtInCMapParams, useCMap).then(function (parsedCMap) { + if (parsedCMap.isIdentityCMap) { + return createBuiltInCMap(parsedCMap.name, builtInCMapParams); + } + return parsedCMap; + }); + } + return Promise.reject(new Error('Encoding required.')); + } + }; + }(); + exports.CMap = CMap; + exports.CMapFactory = CMapFactory; + exports.IdentityCMap = IdentityCMap; + })); + (function (root, factory) { + factory(root.pdfjsCoreFonts = {}, root.pdfjsSharedUtil, root.pdfjsCorePrimitives, root.pdfjsCoreStream, root.pdfjsCoreGlyphList, root.pdfjsCoreFontRenderer, root.pdfjsCoreEncodings, root.pdfjsCoreStandardFonts, root.pdfjsCoreUnicode, root.pdfjsCoreType1Parser, root.pdfjsCoreCFFParser); + }(this, function (exports, sharedUtil, corePrimitives, coreStream, coreGlyphList, coreFontRenderer, coreEncodings, coreStandardFonts, coreUnicode, coreType1Parser, coreCFFParser) { + var FONT_IDENTITY_MATRIX = sharedUtil.FONT_IDENTITY_MATRIX; + var FontType = sharedUtil.FontType; + var assert = sharedUtil.assert; + var bytesToString = sharedUtil.bytesToString; + var error = sharedUtil.error; + var info = sharedUtil.info; + var isArray = sharedUtil.isArray; + var isInt = sharedUtil.isInt; + var isNum = sharedUtil.isNum; + var readUint32 = sharedUtil.readUint32; + var shadow = sharedUtil.shadow; + var string32 = sharedUtil.string32; + var warn = sharedUtil.warn; + var MissingDataException = sharedUtil.MissingDataException; + var isSpace = sharedUtil.isSpace; + var Stream = coreStream.Stream; + var getGlyphsUnicode = coreGlyphList.getGlyphsUnicode; + var getDingbatsGlyphsUnicode = coreGlyphList.getDingbatsGlyphsUnicode; + var FontRendererFactory = coreFontRenderer.FontRendererFactory; + var StandardEncoding = coreEncodings.StandardEncoding; + var MacRomanEncoding = coreEncodings.MacRomanEncoding; + var SymbolSetEncoding = coreEncodings.SymbolSetEncoding; + var ZapfDingbatsEncoding = coreEncodings.ZapfDingbatsEncoding; + var getEncoding = coreEncodings.getEncoding; + var getStdFontMap = coreStandardFonts.getStdFontMap; + var getNonStdFontMap = coreStandardFonts.getNonStdFontMap; + var getGlyphMapForStandardFonts = coreStandardFonts.getGlyphMapForStandardFonts; + var getSupplementalGlyphMapForArialBlack = coreStandardFonts.getSupplementalGlyphMapForArialBlack; + var getUnicodeRangeFor = coreUnicode.getUnicodeRangeFor; + var mapSpecialUnicodeValues = coreUnicode.mapSpecialUnicodeValues; + var getUnicodeForGlyph = coreUnicode.getUnicodeForGlyph; + var Type1Parser = coreType1Parser.Type1Parser; + var CFFStandardStrings = coreCFFParser.CFFStandardStrings; + var CFFParser = coreCFFParser.CFFParser; + var CFFCompiler = coreCFFParser.CFFCompiler; + var CFF = coreCFFParser.CFF; + var CFFHeader = coreCFFParser.CFFHeader; + var CFFTopDict = coreCFFParser.CFFTopDict; + var CFFPrivateDict = coreCFFParser.CFFPrivateDict; + var CFFStrings = coreCFFParser.CFFStrings; + var CFFIndex = coreCFFParser.CFFIndex; + var CFFCharset = coreCFFParser.CFFCharset; + var PRIVATE_USE_OFFSET_START = 0xE000; + var PRIVATE_USE_OFFSET_END = 0xF8FF; + var SKIP_PRIVATE_USE_RANGE_F000_TO_F01F = false; + var PDF_GLYPH_SPACE_UNITS = 1000; + var SEAC_ANALYSIS_ENABLED = false; + var FontFlags = { + FixedPitch: 1, + Serif: 2, + Symbolic: 4, + Script: 8, + Nonsymbolic: 32, + Italic: 64, + AllCap: 65536, + SmallCap: 131072, + ForceBold: 262144 + }; + var MacStandardGlyphOrdering = [ + '.notdef', + '.null', + 'nonmarkingreturn', + 'space', + 'exclam', + 'quotedbl', + 'numbersign', + 'dollar', + 'percent', + 'ampersand', + 'quotesingle', + 'parenleft', + 'parenright', + 'asterisk', + 'plus', + 'comma', + 'hyphen', + 'period', + 'slash', + 'zero', + 'one', + 'two', + 'three', + 'four', + 'five', + 'six', + 'seven', + 'eight', + 'nine', + 'colon', + 'semicolon', + 'less', + 'equal', + 'greater', + 'question', + 'at', + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'G', + 'H', + 'I', + 'J', + 'K', + 'L', + 'M', + 'N', + 'O', + 'P', + 'Q', + 'R', + 'S', + 'T', + 'U', + 'V', + 'W', + 'X', + 'Y', + 'Z', + 'bracketleft', + 'backslash', + 'bracketright', + 'asciicircum', + 'underscore', + 'grave', + 'a', + 'b', + 'c', + 'd', + 'e', + 'f', + 'g', + 'h', + 'i', + 'j', + 'k', + 'l', + 'm', + 'n', + 'o', + 'p', + 'q', + 'r', + 's', + 't', + 'u', + 'v', + 'w', + 'x', + 'y', + 'z', + 'braceleft', + 'bar', + 'braceright', + 'asciitilde', + 'Adieresis', + 'Aring', + 'Ccedilla', + 'Eacute', + 'Ntilde', + 'Odieresis', + 'Udieresis', + 'aacute', + 'agrave', + 'acircumflex', + 'adieresis', + 'atilde', + 'aring', + 'ccedilla', + 'eacute', + 'egrave', + 'ecircumflex', + 'edieresis', + 'iacute', + 'igrave', + 'icircumflex', + 'idieresis', + 'ntilde', + 'oacute', + 'ograve', + 'ocircumflex', + 'odieresis', + 'otilde', + 'uacute', + 'ugrave', + 'ucircumflex', + 'udieresis', + 'dagger', + 'degree', + 'cent', + 'sterling', + 'section', + 'bullet', + 'paragraph', + 'germandbls', + 'registered', + 'copyright', + 'trademark', + 'acute', + 'dieresis', + 'notequal', + 'AE', + 'Oslash', + 'infinity', + 'plusminus', + 'lessequal', + 'greaterequal', + 'yen', + 'mu', + 'partialdiff', + 'summation', + 'product', + 'pi', + 'integral', + 'ordfeminine', + 'ordmasculine', + 'Omega', + 'ae', + 'oslash', + 'questiondown', + 'exclamdown', + 'logicalnot', + 'radical', + 'florin', + 'approxequal', + 'Delta', + 'guillemotleft', + 'guillemotright', + 'ellipsis', + 'nonbreakingspace', + 'Agrave', + 'Atilde', + 'Otilde', + 'OE', + 'oe', + 'endash', + 'emdash', + 'quotedblleft', + 'quotedblright', + 'quoteleft', + 'quoteright', + 'divide', + 'lozenge', + 'ydieresis', + 'Ydieresis', + 'fraction', + 'currency', + 'guilsinglleft', + 'guilsinglright', + 'fi', + 'fl', + 'daggerdbl', + 'periodcentered', + 'quotesinglbase', + 'quotedblbase', + 'perthousand', + 'Acircumflex', + 'Ecircumflex', + 'Aacute', + 'Edieresis', + 'Egrave', + 'Iacute', + 'Icircumflex', + 'Idieresis', + 'Igrave', + 'Oacute', + 'Ocircumflex', + 'apple', + 'Ograve', + 'Uacute', + 'Ucircumflex', + 'Ugrave', + 'dotlessi', + 'circumflex', + 'tilde', + 'macron', + 'breve', + 'dotaccent', + 'ring', + 'cedilla', + 'hungarumlaut', + 'ogonek', + 'caron', + 'Lslash', + 'lslash', + 'Scaron', + 'scaron', + 'Zcaron', + 'zcaron', + 'brokenbar', + 'Eth', + 'eth', + 'Yacute', + 'yacute', + 'Thorn', + 'thorn', + 'minus', + 'multiply', + 'onesuperior', + 'twosuperior', + 'threesuperior', + 'onehalf', + 'onequarter', + 'threequarters', + 'franc', + 'Gbreve', + 'gbreve', + 'Idotaccent', + 'Scedilla', + 'scedilla', + 'Cacute', + 'cacute', + 'Ccaron', + 'ccaron', + 'dcroat' + ]; + function adjustWidths(properties) { + if (!properties.fontMatrix) { + return; + } + if (properties.fontMatrix[0] === FONT_IDENTITY_MATRIX[0]) { + return; + } + var scale = 0.001 / properties.fontMatrix[0]; + var glyphsWidths = properties.widths; + for (var glyph in glyphsWidths) { + glyphsWidths[glyph] *= scale; + } + properties.defaultWidth *= scale; + } + function adjustToUnicode(properties, builtInEncoding) { + if (properties.hasIncludedToUnicodeMap) { + return; + } + if (properties.hasEncoding) { + return; + } + if (builtInEncoding === properties.defaultEncoding) { + return; + } + if (properties.toUnicode instanceof IdentityToUnicodeMap) { + return; + } + var toUnicode = [], glyphsUnicodeMap = getGlyphsUnicode(); + for (var charCode in builtInEncoding) { + var glyphName = builtInEncoding[charCode]; + var unicode = getUnicodeForGlyph(glyphName, glyphsUnicodeMap); + if (unicode !== -1) { + toUnicode[charCode] = String.fromCharCode(unicode); + } + } + properties.toUnicode.amend(toUnicode); + } + function getFontType(type, subtype) { + switch (type) { + case 'Type1': + return subtype === 'Type1C' ? FontType.TYPE1C : FontType.TYPE1; + case 'CIDFontType0': + return subtype === 'CIDFontType0C' ? FontType.CIDFONTTYPE0C : FontType.CIDFONTTYPE0; + case 'OpenType': + return FontType.OPENTYPE; + case 'TrueType': + return FontType.TRUETYPE; + case 'CIDFontType2': + return FontType.CIDFONTTYPE2; + case 'MMType1': + return FontType.MMTYPE1; + case 'Type0': + return FontType.TYPE0; + default: + return FontType.UNKNOWN; + } + } + function recoverGlyphName(name, glyphsUnicodeMap) { + if (glyphsUnicodeMap[name] !== undefined) { + return name; + } + var unicode = getUnicodeForGlyph(name, glyphsUnicodeMap); + if (unicode !== -1) { + for (var key in glyphsUnicodeMap) { + if (glyphsUnicodeMap[key] === unicode) { + return key; + } + } + } + info('Unable to recover a standard glyph name for: ' + name); + return name; + } + var Glyph = function GlyphClosure() { + function Glyph(fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) { + this.fontChar = fontChar; + this.unicode = unicode; + this.accent = accent; + this.width = width; + this.vmetric = vmetric; + this.operatorListId = operatorListId; + this.isSpace = isSpace; + this.isInFont = isInFont; + } + Glyph.prototype.matchesForCache = function (fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) { + return this.fontChar === fontChar && this.unicode === unicode && this.accent === accent && this.width === width && this.vmetric === vmetric && this.operatorListId === operatorListId && this.isSpace === isSpace && this.isInFont === isInFont; + }; + return Glyph; + }(); + var ToUnicodeMap = function ToUnicodeMapClosure() { + function ToUnicodeMap(cmap) { + this._map = cmap; + } + ToUnicodeMap.prototype = { + get length() { + return this._map.length; + }, + forEach: function (callback) { + for (var charCode in this._map) { + callback(charCode, this._map[charCode].charCodeAt(0)); + } + }, + has: function (i) { + return this._map[i] !== undefined; + }, + get: function (i) { + return this._map[i]; + }, + charCodeOf: function (v) { + return this._map.indexOf(v); + }, + amend: function (map) { + for (var charCode in map) { + this._map[charCode] = map[charCode]; + } + } + }; + return ToUnicodeMap; + }(); + var IdentityToUnicodeMap = function IdentityToUnicodeMapClosure() { + function IdentityToUnicodeMap(firstChar, lastChar) { + this.firstChar = firstChar; + this.lastChar = lastChar; + } + IdentityToUnicodeMap.prototype = { + get length() { + return this.lastChar + 1 - this.firstChar; + }, + forEach: function (callback) { + for (var i = this.firstChar, ii = this.lastChar; i <= ii; i++) { + callback(i, i); + } + }, + has: function (i) { + return this.firstChar <= i && i <= this.lastChar; + }, + get: function (i) { + if (this.firstChar <= i && i <= this.lastChar) { + return String.fromCharCode(i); + } + return undefined; + }, + charCodeOf: function (v) { + return isInt(v) && v >= this.firstChar && v <= this.lastChar ? v : -1; + }, + amend: function (map) { + error('Should not call amend()'); + } + }; + return IdentityToUnicodeMap; + }(); + var OpenTypeFileBuilder = function OpenTypeFileBuilderClosure() { + function writeInt16(dest, offset, num) { + dest[offset] = num >> 8 & 0xFF; + dest[offset + 1] = num & 0xFF; + } + function writeInt32(dest, offset, num) { + dest[offset] = num >> 24 & 0xFF; + dest[offset + 1] = num >> 16 & 0xFF; + dest[offset + 2] = num >> 8 & 0xFF; + dest[offset + 3] = num & 0xFF; + } + function writeData(dest, offset, data) { + var i, ii; + if (data instanceof Uint8Array) { + dest.set(data, offset); + } else if (typeof data === 'string') { + for (i = 0, ii = data.length; i < ii; i++) { + dest[offset++] = data.charCodeAt(i) & 0xFF; + } + } else { + for (i = 0, ii = data.length; i < ii; i++) { + dest[offset++] = data[i] & 0xFF; + } + } + } + function OpenTypeFileBuilder(sfnt) { + this.sfnt = sfnt; + this.tables = Object.create(null); + } + OpenTypeFileBuilder.getSearchParams = function OpenTypeFileBuilder_getSearchParams(entriesCount, entrySize) { + var maxPower2 = 1, log2 = 0; + while ((maxPower2 ^ entriesCount) > maxPower2) { + maxPower2 <<= 1; + log2++; + } + var searchRange = maxPower2 * entrySize; + return { + range: searchRange, + entry: log2, + rangeShift: entrySize * entriesCount - searchRange + }; + }; + var OTF_HEADER_SIZE = 12; + var OTF_TABLE_ENTRY_SIZE = 16; + OpenTypeFileBuilder.prototype = { + toArray: function OpenTypeFileBuilder_toArray() { + var sfnt = this.sfnt; + var tables = this.tables; + var tablesNames = Object.keys(tables); + tablesNames.sort(); + var numTables = tablesNames.length; + var i, j, jj, table, tableName; + var offset = OTF_HEADER_SIZE + numTables * OTF_TABLE_ENTRY_SIZE; + var tableOffsets = [offset]; + for (i = 0; i < numTables; i++) { + table = tables[tablesNames[i]]; + var paddedLength = (table.length + 3 & ~3) >>> 0; + offset += paddedLength; + tableOffsets.push(offset); + } + var file = new Uint8Array(offset); + for (i = 0; i < numTables; i++) { + table = tables[tablesNames[i]]; + writeData(file, tableOffsets[i], table); + } + if (sfnt === 'true') { + sfnt = string32(0x00010000); + } + file[0] = sfnt.charCodeAt(0) & 0xFF; + file[1] = sfnt.charCodeAt(1) & 0xFF; + file[2] = sfnt.charCodeAt(2) & 0xFF; + file[3] = sfnt.charCodeAt(3) & 0xFF; + writeInt16(file, 4, numTables); + var searchParams = OpenTypeFileBuilder.getSearchParams(numTables, 16); + writeInt16(file, 6, searchParams.range); + writeInt16(file, 8, searchParams.entry); + writeInt16(file, 10, searchParams.rangeShift); + offset = OTF_HEADER_SIZE; + for (i = 0; i < numTables; i++) { + tableName = tablesNames[i]; + file[offset] = tableName.charCodeAt(0) & 0xFF; + file[offset + 1] = tableName.charCodeAt(1) & 0xFF; + file[offset + 2] = tableName.charCodeAt(2) & 0xFF; + file[offset + 3] = tableName.charCodeAt(3) & 0xFF; + var checksum = 0; + for (j = tableOffsets[i], jj = tableOffsets[i + 1]; j < jj; j += 4) { + var quad = readUint32(file, j); + checksum = checksum + quad >>> 0; + } + writeInt32(file, offset + 4, checksum); + writeInt32(file, offset + 8, tableOffsets[i]); + writeInt32(file, offset + 12, tables[tableName].length); + offset += OTF_TABLE_ENTRY_SIZE; + } + return file; + }, + addTable: function OpenTypeFileBuilder_addTable(tag, data) { + if (tag in this.tables) { + throw new Error('Table ' + tag + ' already exists'); + } + this.tables[tag] = data; + } + }; + return OpenTypeFileBuilder; + }(); + var ProblematicCharRanges = new Int32Array([ + 0x0000, + 0x0020, + 0x007F, + 0x00A1, + 0x00AD, + 0x00AE, + 0x0600, + 0x0780, + 0x08A0, + 0x10A0, + 0x1780, + 0x1800, + 0x1C00, + 0x1C50, + 0x2000, + 0x2010, + 0x2011, + 0x2012, + 0x2028, + 0x2030, + 0x205F, + 0x2070, + 0x25CC, + 0x25CD, + 0x3000, + 0x3001, + 0xAA60, + 0xAA80, + 0xFFF0, + 0x10000 + ]); + var Font = function FontClosure() { + function Font(name, file, properties) { + var charCode, glyphName, unicode; + this.name = name; + this.loadedName = properties.loadedName; + this.isType3Font = properties.isType3Font; + this.sizes = []; + this.missingFile = false; + this.glyphCache = Object.create(null); + var names = name.split('+'); + names = names.length > 1 ? names[1] : names[0]; + names = names.split(/[-,_]/g)[0]; + this.isSerifFont = !!(properties.flags & FontFlags.Serif); + this.isSymbolicFont = !!(properties.flags & FontFlags.Symbolic); + this.isMonospace = !!(properties.flags & FontFlags.FixedPitch); + var type = properties.type; + var subtype = properties.subtype; + this.type = type; + this.fallbackName = this.isMonospace ? 'monospace' : this.isSerifFont ? 'serif' : 'sans-serif'; + this.differences = properties.differences; + this.widths = properties.widths; + this.defaultWidth = properties.defaultWidth; + this.composite = properties.composite; + this.wideChars = properties.wideChars; + this.cMap = properties.cMap; + this.ascent = properties.ascent / PDF_GLYPH_SPACE_UNITS; + this.descent = properties.descent / PDF_GLYPH_SPACE_UNITS; + this.fontMatrix = properties.fontMatrix; + this.bbox = properties.bbox; + this.toUnicode = properties.toUnicode; + this.toFontChar = []; + if (properties.type === 'Type3') { + for (charCode = 0; charCode < 256; charCode++) { + this.toFontChar[charCode] = this.differences[charCode] || properties.defaultEncoding[charCode]; + } + this.fontType = FontType.TYPE3; + return; + } + this.cidEncoding = properties.cidEncoding; + this.vertical = properties.vertical; + if (this.vertical) { + this.vmetrics = properties.vmetrics; + this.defaultVMetrics = properties.defaultVMetrics; + } + var glyphsUnicodeMap; + if (!file || file.isEmpty) { + if (file) { + warn('Font file is empty in "' + name + '" (' + this.loadedName + ')'); + } + this.missingFile = true; + var fontName = name.replace(/[,_]/g, '-'); + var stdFontMap = getStdFontMap(), nonStdFontMap = getNonStdFontMap(); + var isStandardFont = !!stdFontMap[fontName] || !!(nonStdFontMap[fontName] && stdFontMap[nonStdFontMap[fontName]]); + fontName = stdFontMap[fontName] || nonStdFontMap[fontName] || fontName; + this.bold = fontName.search(/bold/gi) !== -1; + this.italic = fontName.search(/oblique/gi) !== -1 || fontName.search(/italic/gi) !== -1; + this.black = name.search(/Black/g) !== -1; + this.remeasure = Object.keys(this.widths).length > 0; + if (isStandardFont && type === 'CIDFontType2' && properties.cidEncoding.indexOf('Identity-') === 0) { + var GlyphMapForStandardFonts = getGlyphMapForStandardFonts(); + var map = []; + for (charCode in GlyphMapForStandardFonts) { + map[+charCode] = GlyphMapForStandardFonts[charCode]; + } + if (/Arial-?Black/i.test(name)) { + var SupplementalGlyphMapForArialBlack = getSupplementalGlyphMapForArialBlack(); + for (charCode in SupplementalGlyphMapForArialBlack) { + map[+charCode] = SupplementalGlyphMapForArialBlack[charCode]; + } + } + var isIdentityUnicode = this.toUnicode instanceof IdentityToUnicodeMap; + if (!isIdentityUnicode) { + this.toUnicode.forEach(function (charCode, unicodeCharCode) { + map[+charCode] = unicodeCharCode; + }); + } + this.toFontChar = map; + this.toUnicode = new ToUnicodeMap(map); + } else if (/Symbol/i.test(fontName)) { + this.toFontChar = buildToFontChar(SymbolSetEncoding, getGlyphsUnicode(), properties.differences); + } else if (/Dingbats/i.test(fontName)) { + if (/Wingdings/i.test(name)) { + warn('Non-embedded Wingdings font, falling back to ZapfDingbats.'); + } + this.toFontChar = buildToFontChar(ZapfDingbatsEncoding, getDingbatsGlyphsUnicode(), properties.differences); + } else if (isStandardFont) { + this.toFontChar = buildToFontChar(properties.defaultEncoding, getGlyphsUnicode(), properties.differences); + } else { + glyphsUnicodeMap = getGlyphsUnicode(); + this.toUnicode.forEach(function (charCode, unicodeCharCode) { + if (!this.composite) { + glyphName = properties.differences[charCode] || properties.defaultEncoding[charCode]; + unicode = getUnicodeForGlyph(glyphName, glyphsUnicodeMap); + if (unicode !== -1) { + unicodeCharCode = unicode; + } + } + this.toFontChar[charCode] = unicodeCharCode; + }.bind(this)); + } + this.loadedName = fontName.split('-')[0]; + this.loading = false; + this.fontType = getFontType(type, subtype); + return; + } + if (subtype === 'Type1C') { + if (type !== 'Type1' && type !== 'MMType1') { + if (isTrueTypeFile(file)) { + subtype = 'TrueType'; + } else { + type = 'Type1'; + } + } else if (isOpenTypeFile(file)) { + type = subtype = 'OpenType'; + } + } + if (subtype === 'CIDFontType0C' && type !== 'CIDFontType0') { + type = 'CIDFontType0'; + } + if (subtype === 'OpenType') { + type = 'OpenType'; + } + if (type === 'CIDFontType0') { + if (isType1File(file)) { + subtype = 'CIDFontType0'; + } else if (isOpenTypeFile(file)) { + type = subtype = 'OpenType'; + } else { + subtype = 'CIDFontType0C'; + } + } + var data; + switch (type) { + case 'MMType1': + info('MMType1 font (' + name + '), falling back to Type1.'); + case 'Type1': + case 'CIDFontType0': + this.mimetype = 'font/opentype'; + var cff = subtype === 'Type1C' || subtype === 'CIDFontType0C' ? new CFFFont(file, properties) : new Type1Font(name, file, properties); + adjustWidths(properties); + data = this.convert(name, cff, properties); + break; + case 'OpenType': + case 'TrueType': + case 'CIDFontType2': + this.mimetype = 'font/opentype'; + data = this.checkAndRepair(name, file, properties); + if (this.isOpenType) { + adjustWidths(properties); + type = 'OpenType'; + } + break; + default: + error('Font ' + type + ' is not supported'); + break; + } + this.data = data; + this.fontType = getFontType(type, subtype); + this.fontMatrix = properties.fontMatrix; + this.widths = properties.widths; + this.defaultWidth = properties.defaultWidth; + this.toUnicode = properties.toUnicode; + this.encoding = properties.baseEncoding; + this.seacMap = properties.seacMap; + this.loading = true; + } + Font.getFontID = function () { + var ID = 1; + return function Font_getFontID() { + return String(ID++); + }; + }(); + function int16(b0, b1) { + return (b0 << 8) + b1; + } + function signedInt16(b0, b1) { + var value = (b0 << 8) + b1; + return value & 1 << 15 ? value - 0x10000 : value; + } + function int32(b0, b1, b2, b3) { + return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; + } + function string16(value) { + return String.fromCharCode(value >> 8 & 0xff, value & 0xff); + } + function safeString16(value) { + value = value > 0x7FFF ? 0x7FFF : value < -0x8000 ? -0x8000 : value; + return String.fromCharCode(value >> 8 & 0xff, value & 0xff); + } + function isTrueTypeFile(file) { + var header = file.peekBytes(4); + return readUint32(header, 0) === 0x00010000; + } + function isOpenTypeFile(file) { + var header = file.peekBytes(4); + return bytesToString(header) === 'OTTO'; + } + function isType1File(file) { + var header = file.peekBytes(2); + if (header[0] === 0x25 && header[1] === 0x21) { + return true; + } + if (header[0] === 0x80 && header[1] === 0x01) { + return true; + } + return false; + } + function buildToFontChar(encoding, glyphsUnicodeMap, differences) { + var toFontChar = [], unicode; + for (var i = 0, ii = encoding.length; i < ii; i++) { + unicode = getUnicodeForGlyph(encoding[i], glyphsUnicodeMap); + if (unicode !== -1) { + toFontChar[i] = unicode; + } + } + for (var charCode in differences) { + unicode = getUnicodeForGlyph(differences[charCode], glyphsUnicodeMap); + if (unicode !== -1) { + toFontChar[+charCode] = unicode; + } + } + return toFontChar; + } + function isProblematicUnicodeLocation(code) { + var i = 0, j = ProblematicCharRanges.length - 1; + while (i < j) { + var c = i + j + 1 >> 1; + if (code < ProblematicCharRanges[c]) { + j = c - 1; + } else { + i = c; + } + } + return !(i & 1); + } + function adjustMapping(charCodeToGlyphId, properties) { + var toUnicode = properties.toUnicode; + var isSymbolic = !!(properties.flags & FontFlags.Symbolic); + var isIdentityUnicode = properties.toUnicode instanceof IdentityToUnicodeMap; + var newMap = Object.create(null); + var toFontChar = []; + var usedFontCharCodes = []; + var nextAvailableFontCharCode = PRIVATE_USE_OFFSET_START; + for (var originalCharCode in charCodeToGlyphId) { + originalCharCode |= 0; + var glyphId = charCodeToGlyphId[originalCharCode]; + var fontCharCode = originalCharCode; + var hasUnicodeValue = false; + if (!isIdentityUnicode && toUnicode.has(originalCharCode)) { + hasUnicodeValue = true; + var unicode = toUnicode.get(fontCharCode); + if (unicode.length === 1) { + fontCharCode = unicode.charCodeAt(0); + } + } + if ((usedFontCharCodes[fontCharCode] !== undefined || isProblematicUnicodeLocation(fontCharCode) || isSymbolic && !hasUnicodeValue) && nextAvailableFontCharCode <= PRIVATE_USE_OFFSET_END) { + do { + fontCharCode = nextAvailableFontCharCode++; + if (SKIP_PRIVATE_USE_RANGE_F000_TO_F01F && fontCharCode === 0xF000) { + fontCharCode = 0xF020; + nextAvailableFontCharCode = fontCharCode + 1; + } + } while (usedFontCharCodes[fontCharCode] !== undefined && nextAvailableFontCharCode <= PRIVATE_USE_OFFSET_END); + } + newMap[fontCharCode] = glyphId; + toFontChar[originalCharCode] = fontCharCode; + usedFontCharCodes[fontCharCode] = true; + } + return { + toFontChar: toFontChar, + charCodeToGlyphId: newMap, + nextAvailableFontCharCode: nextAvailableFontCharCode + }; + } + function getRanges(glyphs, numGlyphs) { + var codes = []; + for (var charCode in glyphs) { + if (glyphs[charCode] >= numGlyphs) { + continue; + } + codes.push({ + fontCharCode: charCode | 0, + glyphId: glyphs[charCode] + }); + } + codes.sort(function fontGetRangesSort(a, b) { + return a.fontCharCode - b.fontCharCode; + }); + var ranges = []; + var length = codes.length; + for (var n = 0; n < length;) { + var start = codes[n].fontCharCode; + var codeIndices = [codes[n].glyphId]; + ++n; + var end = start; + while (n < length && end + 1 === codes[n].fontCharCode) { + codeIndices.push(codes[n].glyphId); + ++end; + ++n; + if (end === 0xFFFF) { + break; + } + } + ranges.push([ + start, + end, + codeIndices + ]); + } + return ranges; + } + function createCmapTable(glyphs, numGlyphs) { + var ranges = getRanges(glyphs, numGlyphs); + var numTables = ranges[ranges.length - 1][1] > 0xFFFF ? 2 : 1; + var cmap = '\x00\x00' + string16(numTables) + '\x00\x03' + '\x00\x01' + string32(4 + numTables * 8); + var i, ii, j, jj; + for (i = ranges.length - 1; i >= 0; --i) { + if (ranges[i][0] <= 0xFFFF) { + break; + } + } + var bmpLength = i + 1; + if (ranges[i][0] < 0xFFFF && ranges[i][1] === 0xFFFF) { + ranges[i][1] = 0xFFFE; + } + var trailingRangesCount = ranges[i][1] < 0xFFFF ? 1 : 0; + var segCount = bmpLength + trailingRangesCount; + var searchParams = OpenTypeFileBuilder.getSearchParams(segCount, 2); + var startCount = ''; + var endCount = ''; + var idDeltas = ''; + var idRangeOffsets = ''; + var glyphsIds = ''; + var bias = 0; + var range, start, end, codes; + for (i = 0, ii = bmpLength; i < ii; i++) { + range = ranges[i]; + start = range[0]; + end = range[1]; + startCount += string16(start); + endCount += string16(end); + codes = range[2]; + var contiguous = true; + for (j = 1, jj = codes.length; j < jj; ++j) { + if (codes[j] !== codes[j - 1] + 1) { + contiguous = false; + break; + } + } + if (!contiguous) { + var offset = (segCount - i) * 2 + bias * 2; + bias += end - start + 1; + idDeltas += string16(0); + idRangeOffsets += string16(offset); + for (j = 0, jj = codes.length; j < jj; ++j) { + glyphsIds += string16(codes[j]); + } + } else { + var startCode = codes[0]; + idDeltas += string16(startCode - start & 0xFFFF); + idRangeOffsets += string16(0); + } + } + if (trailingRangesCount > 0) { + endCount += '\xFF\xFF'; + startCount += '\xFF\xFF'; + idDeltas += '\x00\x01'; + idRangeOffsets += '\x00\x00'; + } + var format314 = '\x00\x00' + string16(2 * segCount) + string16(searchParams.range) + string16(searchParams.entry) + string16(searchParams.rangeShift) + endCount + '\x00\x00' + startCount + idDeltas + idRangeOffsets + glyphsIds; + var format31012 = ''; + var header31012 = ''; + if (numTables > 1) { + cmap += '\x00\x03' + '\x00\x0A' + string32(4 + numTables * 8 + 4 + format314.length); + format31012 = ''; + for (i = 0, ii = ranges.length; i < ii; i++) { + range = ranges[i]; + start = range[0]; + codes = range[2]; + var code = codes[0]; + for (j = 1, jj = codes.length; j < jj; ++j) { + if (codes[j] !== codes[j - 1] + 1) { + end = range[0] + j - 1; + format31012 += string32(start) + string32(end) + string32(code); + start = end + 1; + code = codes[j]; + } + } + format31012 += string32(start) + string32(range[1]) + string32(code); + } + header31012 = '\x00\x0C' + '\x00\x00' + string32(format31012.length + 16) + '\x00\x00\x00\x00' + string32(format31012.length / 12); + } + return cmap + '\x00\x04' + string16(format314.length + 4) + format314 + header31012 + format31012; + } + function validateOS2Table(os2) { + var stream = new Stream(os2.data); + var version = stream.getUint16(); + stream.getBytes(60); + var selection = stream.getUint16(); + if (version < 4 && selection & 0x0300) { + return false; + } + var firstChar = stream.getUint16(); + var lastChar = stream.getUint16(); + if (firstChar > lastChar) { + return false; + } + stream.getBytes(6); + var usWinAscent = stream.getUint16(); + if (usWinAscent === 0) { + return false; + } + os2.data[8] = os2.data[9] = 0; + return true; + } + function createOS2Table(properties, charstrings, override) { + override = override || { + unitsPerEm: 0, + yMax: 0, + yMin: 0, + ascent: 0, + descent: 0 + }; + var ulUnicodeRange1 = 0; + var ulUnicodeRange2 = 0; + var ulUnicodeRange3 = 0; + var ulUnicodeRange4 = 0; + var firstCharIndex = null; + var lastCharIndex = 0; + if (charstrings) { + for (var code in charstrings) { + code |= 0; + if (firstCharIndex > code || !firstCharIndex) { + firstCharIndex = code; + } + if (lastCharIndex < code) { + lastCharIndex = code; + } + var position = getUnicodeRangeFor(code); + if (position < 32) { + ulUnicodeRange1 |= 1 << position; + } else if (position < 64) { + ulUnicodeRange2 |= 1 << position - 32; + } else if (position < 96) { + ulUnicodeRange3 |= 1 << position - 64; + } else if (position < 123) { + ulUnicodeRange4 |= 1 << position - 96; + } else { + error('Unicode ranges Bits > 123 are reserved for internal usage'); + } + } + } else { + firstCharIndex = 0; + lastCharIndex = 255; + } + var bbox = properties.bbox || [ + 0, + 0, + 0, + 0 + ]; + var unitsPerEm = override.unitsPerEm || 1 / (properties.fontMatrix || FONT_IDENTITY_MATRIX)[0]; + var scale = properties.ascentScaled ? 1.0 : unitsPerEm / PDF_GLYPH_SPACE_UNITS; + var typoAscent = override.ascent || Math.round(scale * (properties.ascent || bbox[3])); + var typoDescent = override.descent || Math.round(scale * (properties.descent || bbox[1])); + if (typoDescent > 0 && properties.descent > 0 && bbox[1] < 0) { + typoDescent = -typoDescent; + } + var winAscent = override.yMax || typoAscent; + var winDescent = -override.yMin || -typoDescent; + return '\x00\x03' + '\x02\x24' + '\x01\xF4' + '\x00\x05' + '\x00\x00' + '\x02\x8A' + '\x02\xBB' + '\x00\x00' + '\x00\x8C' + '\x02\x8A' + '\x02\xBB' + '\x00\x00' + '\x01\xDF' + '\x00\x31' + '\x01\x02' + '\x00\x00' + '\x00\x00\x06' + String.fromCharCode(properties.fixedPitch ? 0x09 : 0x00) + '\x00\x00\x00\x00\x00\x00' + string32(ulUnicodeRange1) + string32(ulUnicodeRange2) + string32(ulUnicodeRange3) + string32(ulUnicodeRange4) + '\x2A\x32\x31\x2A' + string16(properties.italicAngle ? 1 : 0) + string16(firstCharIndex || properties.firstChar) + string16(lastCharIndex || properties.lastChar) + string16(typoAscent) + string16(typoDescent) + '\x00\x64' + string16(winAscent) + string16(winDescent) + '\x00\x00\x00\x00' + '\x00\x00\x00\x00' + string16(properties.xHeight) + string16(properties.capHeight) + string16(0) + string16(firstCharIndex || properties.firstChar) + '\x00\x03'; + } + function createPostTable(properties) { + var angle = Math.floor(properties.italicAngle * Math.pow(2, 16)); + return '\x00\x03\x00\x00' + string32(angle) + '\x00\x00' + '\x00\x00' + string32(properties.fixedPitch) + '\x00\x00\x00\x00' + '\x00\x00\x00\x00' + '\x00\x00\x00\x00' + '\x00\x00\x00\x00'; + } + function createNameTable(name, proto) { + if (!proto) { + proto = [ + [], + [] + ]; + } + var strings = [ + proto[0][0] || 'Original licence', + proto[0][1] || name, + proto[0][2] || 'Unknown', + proto[0][3] || 'uniqueID', + proto[0][4] || name, + proto[0][5] || 'Version 0.11', + proto[0][6] || '', + proto[0][7] || 'Unknown', + proto[0][8] || 'Unknown', + proto[0][9] || 'Unknown' + ]; + var stringsUnicode = []; + var i, ii, j, jj, str; + for (i = 0, ii = strings.length; i < ii; i++) { + str = proto[1][i] || strings[i]; + var strBufUnicode = []; + for (j = 0, jj = str.length; j < jj; j++) { + strBufUnicode.push(string16(str.charCodeAt(j))); + } + stringsUnicode.push(strBufUnicode.join('')); + } + var names = [ + strings, + stringsUnicode + ]; + var platforms = [ + '\x00\x01', + '\x00\x03' + ]; + var encodings = [ + '\x00\x00', + '\x00\x01' + ]; + var languages = [ + '\x00\x00', + '\x04\x09' + ]; + var namesRecordCount = strings.length * platforms.length; + var nameTable = '\x00\x00' + string16(namesRecordCount) + string16(namesRecordCount * 12 + 6); + var strOffset = 0; + for (i = 0, ii = platforms.length; i < ii; i++) { + var strs = names[i]; + for (j = 0, jj = strs.length; j < jj; j++) { + str = strs[j]; + var nameRecord = platforms[i] + encodings[i] + languages[i] + string16(j) + string16(str.length) + string16(strOffset); + nameTable += nameRecord; + strOffset += str.length; + } + } + nameTable += strings.join('') + stringsUnicode.join(''); + return nameTable; + } + Font.prototype = { + name: null, + font: null, + mimetype: null, + encoding: null, + get renderer() { + var renderer = FontRendererFactory.create(this, SEAC_ANALYSIS_ENABLED); + return shadow(this, 'renderer', renderer); + }, + exportData: function Font_exportData() { + var data = {}; + for (var i in this) { + if (this.hasOwnProperty(i)) { + data[i] = this[i]; + } + } + return data; + }, + checkAndRepair: function Font_checkAndRepair(name, font, properties) { + function readTableEntry(file) { + var tag = bytesToString(file.getBytes(4)); + var checksum = file.getInt32() >>> 0; + var offset = file.getInt32() >>> 0; + var length = file.getInt32() >>> 0; + var previousPosition = file.pos; + file.pos = file.start ? file.start : 0; + file.skip(offset); + var data = file.getBytes(length); + file.pos = previousPosition; + if (tag === 'head') { + data[8] = data[9] = data[10] = data[11] = 0; + data[17] |= 0x20; + } + return { + tag: tag, + checksum: checksum, + length: length, + offset: offset, + data: data + }; + } + function readOpenTypeHeader(ttf) { + return { + version: bytesToString(ttf.getBytes(4)), + numTables: ttf.getUint16(), + searchRange: ttf.getUint16(), + entrySelector: ttf.getUint16(), + rangeShift: ttf.getUint16() + }; + } + function readCmapTable(cmap, font, isSymbolicFont, hasEncoding) { + if (!cmap) { + warn('No cmap table available.'); + return { + platformId: -1, + encodingId: -1, + mappings: [], + hasShortCmap: false + }; + } + var segment; + var start = (font.start ? font.start : 0) + cmap.offset; + font.pos = start; + var version = font.getUint16(); + var numTables = font.getUint16(); + var potentialTable; + var canBreak = false; + for (var i = 0; i < numTables; i++) { + var platformId = font.getUint16(); + var encodingId = font.getUint16(); + var offset = font.getInt32() >>> 0; + var useTable = false; + if (platformId === 0 && encodingId === 0) { + useTable = true; + } else if (platformId === 1 && encodingId === 0) { + useTable = true; + } else if (platformId === 3 && encodingId === 1 && (!isSymbolicFont && hasEncoding || !potentialTable)) { + useTable = true; + if (!isSymbolicFont) { + canBreak = true; + } + } else if (isSymbolicFont && platformId === 3 && encodingId === 0) { + useTable = true; + canBreak = true; + } + if (useTable) { + potentialTable = { + platformId: platformId, + encodingId: encodingId, + offset: offset + }; + } + if (canBreak) { + break; + } + } + if (potentialTable) { + font.pos = start + potentialTable.offset; + } + if (!potentialTable || font.peekByte() === -1) { + warn('Could not find a preferred cmap table.'); + return { + platformId: -1, + encodingId: -1, + mappings: [], + hasShortCmap: false + }; + } + var format = font.getUint16(); + var length = font.getUint16(); + var language = font.getUint16(); + var hasShortCmap = false; + var mappings = []; + var j, glyphId; + if (format === 0) { + for (j = 0; j < 256; j++) { + var index = font.getByte(); + if (!index) { + continue; + } + mappings.push({ + charCode: j, + glyphId: index + }); + } + hasShortCmap = true; + } else if (format === 4) { + var segCount = font.getUint16() >> 1; + font.getBytes(6); + var segIndex, segments = []; + for (segIndex = 0; segIndex < segCount; segIndex++) { + segments.push({ end: font.getUint16() }); + } + font.getUint16(); + for (segIndex = 0; segIndex < segCount; segIndex++) { + segments[segIndex].start = font.getUint16(); + } + for (segIndex = 0; segIndex < segCount; segIndex++) { + segments[segIndex].delta = font.getUint16(); + } + var offsetsCount = 0; + for (segIndex = 0; segIndex < segCount; segIndex++) { + segment = segments[segIndex]; + var rangeOffset = font.getUint16(); + if (!rangeOffset) { + segment.offsetIndex = -1; + continue; + } + var offsetIndex = (rangeOffset >> 1) - (segCount - segIndex); + segment.offsetIndex = offsetIndex; + offsetsCount = Math.max(offsetsCount, offsetIndex + segment.end - segment.start + 1); + } + var offsets = []; + for (j = 0; j < offsetsCount; j++) { + offsets.push(font.getUint16()); + } + for (segIndex = 0; segIndex < segCount; segIndex++) { + segment = segments[segIndex]; + start = segment.start; + var end = segment.end; + var delta = segment.delta; + offsetIndex = segment.offsetIndex; + for (j = start; j <= end; j++) { + if (j === 0xFFFF) { + continue; + } + glyphId = offsetIndex < 0 ? j : offsets[offsetIndex + j - start]; + glyphId = glyphId + delta & 0xFFFF; + if (glyphId === 0) { + continue; + } + mappings.push({ + charCode: j, + glyphId: glyphId + }); + } + } + } else if (format === 6) { + var firstCode = font.getUint16(); + var entryCount = font.getUint16(); + for (j = 0; j < entryCount; j++) { + glyphId = font.getUint16(); + var charCode = firstCode + j; + mappings.push({ + charCode: charCode, + glyphId: glyphId + }); + } + } else { + warn('cmap table has unsupported format: ' + format); + return { + platformId: -1, + encodingId: -1, + mappings: [], + hasShortCmap: false + }; + } + mappings.sort(function (a, b) { + return a.charCode - b.charCode; + }); + for (i = 1; i < mappings.length; i++) { + if (mappings[i - 1].charCode === mappings[i].charCode) { + mappings.splice(i, 1); + i--; + } + } + return { + platformId: potentialTable.platformId, + encodingId: potentialTable.encodingId, + mappings: mappings, + hasShortCmap: hasShortCmap + }; + } + function sanitizeMetrics(font, header, metrics, numGlyphs) { + if (!header) { + if (metrics) { + metrics.data = null; + } + return; + } + font.pos = (font.start ? font.start : 0) + header.offset; + font.pos += header.length - 2; + var numOfMetrics = font.getUint16(); + if (numOfMetrics > numGlyphs) { + info('The numOfMetrics (' + numOfMetrics + ') should not be ' + 'greater than the numGlyphs (' + numGlyphs + ')'); + numOfMetrics = numGlyphs; + header.data[34] = (numOfMetrics & 0xff00) >> 8; + header.data[35] = numOfMetrics & 0x00ff; + } + var numOfSidebearings = numGlyphs - numOfMetrics; + var numMissing = numOfSidebearings - (metrics.length - numOfMetrics * 4 >> 1); + if (numMissing > 0) { + var entries = new Uint8Array(metrics.length + numMissing * 2); + entries.set(metrics.data); + metrics.data = entries; + } + } + function sanitizeGlyph(source, sourceStart, sourceEnd, dest, destStart, hintsValid) { + if (sourceEnd - sourceStart <= 12) { + return 0; + } + var glyf = source.subarray(sourceStart, sourceEnd); + var contoursCount = glyf[0] << 8 | glyf[1]; + if (contoursCount & 0x8000) { + dest.set(glyf, destStart); + return glyf.length; + } + var i, j = 10, flagsCount = 0; + for (i = 0; i < contoursCount; i++) { + var endPoint = glyf[j] << 8 | glyf[j + 1]; + flagsCount = endPoint + 1; + j += 2; + } + var instructionsStart = j; + var instructionsLength = glyf[j] << 8 | glyf[j + 1]; + j += 2 + instructionsLength; + var instructionsEnd = j; + var coordinatesLength = 0; + for (i = 0; i < flagsCount; i++) { + var flag = glyf[j++]; + if (flag & 0xC0) { + glyf[j - 1] = flag & 0x3F; + } + var xyLength = (flag & 2 ? 1 : flag & 16 ? 0 : 2) + (flag & 4 ? 1 : flag & 32 ? 0 : 2); + coordinatesLength += xyLength; + if (flag & 8) { + var repeat = glyf[j++]; + i += repeat; + coordinatesLength += repeat * xyLength; + } + } + if (coordinatesLength === 0) { + return 0; + } + var glyphDataLength = j + coordinatesLength; + if (glyphDataLength > glyf.length) { + return 0; + } + if (!hintsValid && instructionsLength > 0) { + dest.set(glyf.subarray(0, instructionsStart), destStart); + dest.set([ + 0, + 0 + ], destStart + instructionsStart); + dest.set(glyf.subarray(instructionsEnd, glyphDataLength), destStart + instructionsStart + 2); + glyphDataLength -= instructionsLength; + if (glyf.length - glyphDataLength > 3) { + glyphDataLength = glyphDataLength + 3 & ~3; + } + return glyphDataLength; + } + if (glyf.length - glyphDataLength > 3) { + glyphDataLength = glyphDataLength + 3 & ~3; + dest.set(glyf.subarray(0, glyphDataLength), destStart); + return glyphDataLength; + } + dest.set(glyf, destStart); + return glyf.length; + } + function sanitizeHead(head, numGlyphs, locaLength) { + var data = head.data; + var version = int32(data[0], data[1], data[2], data[3]); + if (version >> 16 !== 1) { + info('Attempting to fix invalid version in head table: ' + version); + data[0] = 0; + data[1] = 1; + data[2] = 0; + data[3] = 0; + } + var indexToLocFormat = int16(data[50], data[51]); + if (indexToLocFormat < 0 || indexToLocFormat > 1) { + info('Attempting to fix invalid indexToLocFormat in head table: ' + indexToLocFormat); + var numGlyphsPlusOne = numGlyphs + 1; + if (locaLength === numGlyphsPlusOne << 1) { + data[50] = 0; + data[51] = 0; + } else if (locaLength === numGlyphsPlusOne << 2) { + data[50] = 0; + data[51] = 1; + } else { + warn('Could not fix indexToLocFormat: ' + indexToLocFormat); + } + } + } + function sanitizeGlyphLocations(loca, glyf, numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry) { + var itemSize, itemDecode, itemEncode; + if (isGlyphLocationsLong) { + itemSize = 4; + itemDecode = function fontItemDecodeLong(data, offset) { + return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]; + }; + itemEncode = function fontItemEncodeLong(data, offset, value) { + data[offset] = value >>> 24 & 0xFF; + data[offset + 1] = value >> 16 & 0xFF; + data[offset + 2] = value >> 8 & 0xFF; + data[offset + 3] = value & 0xFF; + }; + } else { + itemSize = 2; + itemDecode = function fontItemDecode(data, offset) { + return data[offset] << 9 | data[offset + 1] << 1; + }; + itemEncode = function fontItemEncode(data, offset, value) { + data[offset] = value >> 9 & 0xFF; + data[offset + 1] = value >> 1 & 0xFF; + }; + } + var locaData = loca.data; + var locaDataSize = itemSize * (1 + numGlyphs); + if (locaData.length !== locaDataSize) { + locaData = new Uint8Array(locaDataSize); + locaData.set(loca.data.subarray(0, locaDataSize)); + loca.data = locaData; + } + var oldGlyfData = glyf.data; + var oldGlyfDataLength = oldGlyfData.length; + var newGlyfData = new Uint8Array(oldGlyfDataLength); + var startOffset = itemDecode(locaData, 0); + var writeOffset = 0; + var missingGlyphData = Object.create(null); + itemEncode(locaData, 0, writeOffset); + var i, j; + for (i = 0, j = itemSize; i < numGlyphs; i++, j += itemSize) { + var endOffset = itemDecode(locaData, j); + if (endOffset > oldGlyfDataLength && (oldGlyfDataLength + 3 & ~3) === endOffset) { + endOffset = oldGlyfDataLength; + } + if (endOffset > oldGlyfDataLength) { + itemEncode(locaData, j, writeOffset); + startOffset = endOffset; + continue; + } + if (startOffset === endOffset) { + missingGlyphData[i] = true; + } + var newLength = sanitizeGlyph(oldGlyfData, startOffset, endOffset, newGlyfData, writeOffset, hintsValid); + writeOffset += newLength; + itemEncode(locaData, j, writeOffset); + startOffset = endOffset; + } + if (writeOffset === 0) { + var simpleGlyph = new Uint8Array([ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 49, + 0 + ]); + for (i = 0, j = itemSize; i < numGlyphs; i++, j += itemSize) { + itemEncode(locaData, j, simpleGlyph.length); + } + glyf.data = simpleGlyph; + return missingGlyphData; + } + if (dupFirstEntry) { + var firstEntryLength = itemDecode(locaData, itemSize); + if (newGlyfData.length > firstEntryLength + writeOffset) { + glyf.data = newGlyfData.subarray(0, firstEntryLength + writeOffset); + } else { + glyf.data = new Uint8Array(firstEntryLength + writeOffset); + glyf.data.set(newGlyfData.subarray(0, writeOffset)); + } + glyf.data.set(newGlyfData.subarray(0, firstEntryLength), writeOffset); + itemEncode(loca.data, locaData.length - itemSize, writeOffset + firstEntryLength); + } else { + glyf.data = newGlyfData.subarray(0, writeOffset); + } + return missingGlyphData; + } + function readPostScriptTable(post, properties, maxpNumGlyphs) { + var start = (font.start ? font.start : 0) + post.offset; + font.pos = start; + var length = post.length, end = start + length; + var version = font.getInt32(); + font.getBytes(28); + var glyphNames; + var valid = true; + var i; + switch (version) { + case 0x00010000: + glyphNames = MacStandardGlyphOrdering; + break; + case 0x00020000: + var numGlyphs = font.getUint16(); + if (numGlyphs !== maxpNumGlyphs) { + valid = false; + break; + } + var glyphNameIndexes = []; + for (i = 0; i < numGlyphs; ++i) { + var index = font.getUint16(); + if (index >= 32768) { + valid = false; + break; + } + glyphNameIndexes.push(index); + } + if (!valid) { + break; + } + var customNames = []; + var strBuf = []; + while (font.pos < end) { + var stringLength = font.getByte(); + strBuf.length = stringLength; + for (i = 0; i < stringLength; ++i) { + strBuf[i] = String.fromCharCode(font.getByte()); + } + customNames.push(strBuf.join('')); + } + glyphNames = []; + for (i = 0; i < numGlyphs; ++i) { + var j = glyphNameIndexes[i]; + if (j < 258) { + glyphNames.push(MacStandardGlyphOrdering[j]); + continue; + } + glyphNames.push(customNames[j - 258]); + } + break; + case 0x00030000: + break; + default: + warn('Unknown/unsupported post table version ' + version); + valid = false; + if (properties.defaultEncoding) { + glyphNames = properties.defaultEncoding; + } + break; + } + properties.glyphNames = glyphNames; + return valid; + } + function readNameTable(nameTable) { + var start = (font.start ? font.start : 0) + nameTable.offset; + font.pos = start; + var names = [ + [], + [] + ]; + var length = nameTable.length, end = start + length; + var format = font.getUint16(); + var FORMAT_0_HEADER_LENGTH = 6; + if (format !== 0 || length < FORMAT_0_HEADER_LENGTH) { + return names; + } + var numRecords = font.getUint16(); + var stringsStart = font.getUint16(); + var records = []; + var NAME_RECORD_LENGTH = 12; + var i, ii; + for (i = 0; i < numRecords && font.pos + NAME_RECORD_LENGTH <= end; i++) { + var r = { + platform: font.getUint16(), + encoding: font.getUint16(), + language: font.getUint16(), + name: font.getUint16(), + length: font.getUint16(), + offset: font.getUint16() + }; + if (r.platform === 1 && r.encoding === 0 && r.language === 0 || r.platform === 3 && r.encoding === 1 && r.language === 0x409) { + records.push(r); + } + } + for (i = 0, ii = records.length; i < ii; i++) { + var record = records[i]; + if (record.length <= 0) { + continue; + } + var pos = start + stringsStart + record.offset; + if (pos + record.length > end) { + continue; + } + font.pos = pos; + var nameIndex = record.name; + if (record.encoding) { + var str = ''; + for (var j = 0, jj = record.length; j < jj; j += 2) { + str += String.fromCharCode(font.getUint16()); + } + names[1][nameIndex] = str; + } else { + names[0][nameIndex] = bytesToString(font.getBytes(record.length)); + } + } + return names; + } + var TTOpsStackDeltas = [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -2, + -2, + -2, + -2, + 0, + 0, + -2, + -5, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 0, + 0, + -1, + 0, + -1, + -1, + -1, + -1, + 1, + -1, + -999, + 0, + 1, + 0, + -1, + -2, + 0, + -1, + -2, + -1, + -1, + 0, + -1, + -1, + 0, + 0, + -999, + -999, + -1, + -1, + -1, + -1, + -2, + -999, + -2, + -2, + -999, + 0, + -2, + -2, + 0, + 0, + -2, + 0, + -2, + 0, + 0, + 0, + -2, + -1, + -1, + 1, + 1, + 0, + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 0, + 0, + -1, + 0, + -1, + -1, + 0, + -999, + -1, + -1, + -1, + -1, + -1, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -2, + -999, + -999, + -999, + -999, + -999, + -1, + -1, + -2, + -2, + 0, + 0, + 0, + 0, + -1, + -1, + -999, + -2, + -2, + 0, + 0, + -1, + -2, + -2, + 0, + 0, + 0, + -1, + -1, + -1, + -2 + ]; + function sanitizeTTProgram(table, ttContext) { + var data = table.data; + var i = 0, j, n, b, funcId, pc, lastEndf = 0, lastDeff = 0; + var stack = []; + var callstack = []; + var functionsCalled = []; + var tooComplexToFollowFunctions = ttContext.tooComplexToFollowFunctions; + var inFDEF = false, ifLevel = 0, inELSE = 0; + for (var ii = data.length; i < ii;) { + var op = data[i++]; + if (op === 0x40) { + n = data[i++]; + if (inFDEF || inELSE) { + i += n; + } else { + for (j = 0; j < n; j++) { + stack.push(data[i++]); + } + } + } else if (op === 0x41) { + n = data[i++]; + if (inFDEF || inELSE) { + i += n * 2; + } else { + for (j = 0; j < n; j++) { + b = data[i++]; + stack.push(b << 8 | data[i++]); + } + } + } else if ((op & 0xF8) === 0xB0) { + n = op - 0xB0 + 1; + if (inFDEF || inELSE) { + i += n; + } else { + for (j = 0; j < n; j++) { + stack.push(data[i++]); + } + } + } else if ((op & 0xF8) === 0xB8) { + n = op - 0xB8 + 1; + if (inFDEF || inELSE) { + i += n * 2; + } else { + for (j = 0; j < n; j++) { + b = data[i++]; + stack.push(b << 8 | data[i++]); + } + } + } else if (op === 0x2B && !tooComplexToFollowFunctions) { + if (!inFDEF && !inELSE) { + funcId = stack[stack.length - 1]; + ttContext.functionsUsed[funcId] = true; + if (funcId in ttContext.functionsStackDeltas) { + stack.length += ttContext.functionsStackDeltas[funcId]; + } else if (funcId in ttContext.functionsDefined && functionsCalled.indexOf(funcId) < 0) { + callstack.push({ + data: data, + i: i, + stackTop: stack.length - 1 + }); + functionsCalled.push(funcId); + pc = ttContext.functionsDefined[funcId]; + if (!pc) { + warn('TT: CALL non-existent function'); + ttContext.hintsValid = false; + return; + } + data = pc.data; + i = pc.i; + } + } + } else if (op === 0x2C && !tooComplexToFollowFunctions) { + if (inFDEF || inELSE) { + warn('TT: nested FDEFs not allowed'); + tooComplexToFollowFunctions = true; + } + inFDEF = true; + lastDeff = i; + funcId = stack.pop(); + ttContext.functionsDefined[funcId] = { + data: data, + i: i + }; + } else if (op === 0x2D) { + if (inFDEF) { + inFDEF = false; + lastEndf = i; + } else { + pc = callstack.pop(); + if (!pc) { + warn('TT: ENDF bad stack'); + ttContext.hintsValid = false; + return; + } + funcId = functionsCalled.pop(); + data = pc.data; + i = pc.i; + ttContext.functionsStackDeltas[funcId] = stack.length - pc.stackTop; + } + } else if (op === 0x89) { + if (inFDEF || inELSE) { + warn('TT: nested IDEFs not allowed'); + tooComplexToFollowFunctions = true; + } + inFDEF = true; + lastDeff = i; + } else if (op === 0x58) { + ++ifLevel; + } else if (op === 0x1B) { + inELSE = ifLevel; + } else if (op === 0x59) { + if (inELSE === ifLevel) { + inELSE = 0; + } + --ifLevel; + } else if (op === 0x1C) { + if (!inFDEF && !inELSE) { + var offset = stack[stack.length - 1]; + if (offset > 0) { + i += offset - 1; + } + } + } + if (!inFDEF && !inELSE) { + var stackDelta = op <= 0x8E ? TTOpsStackDeltas[op] : op >= 0xC0 && op <= 0xDF ? -1 : op >= 0xE0 ? -2 : 0; + if (op >= 0x71 && op <= 0x75) { + n = stack.pop(); + if (!isNaN(n)) { + stackDelta = -n * 2; + } + } + while (stackDelta < 0 && stack.length > 0) { + stack.pop(); + stackDelta++; + } + while (stackDelta > 0) { + stack.push(NaN); + stackDelta--; + } + } + } + ttContext.tooComplexToFollowFunctions = tooComplexToFollowFunctions; + var content = [data]; + if (i > data.length) { + content.push(new Uint8Array(i - data.length)); + } + if (lastDeff > lastEndf) { + warn('TT: complementing a missing function tail'); + content.push(new Uint8Array([ + 0x22, + 0x2D + ])); + } + foldTTTable(table, content); + } + function checkInvalidFunctions(ttContext, maxFunctionDefs) { + if (ttContext.tooComplexToFollowFunctions) { + return; + } + if (ttContext.functionsDefined.length > maxFunctionDefs) { + warn('TT: more functions defined than expected'); + ttContext.hintsValid = false; + return; + } + for (var j = 0, jj = ttContext.functionsUsed.length; j < jj; j++) { + if (j > maxFunctionDefs) { + warn('TT: invalid function id: ' + j); + ttContext.hintsValid = false; + return; + } + if (ttContext.functionsUsed[j] && !ttContext.functionsDefined[j]) { + warn('TT: undefined function: ' + j); + ttContext.hintsValid = false; + return; + } + } + } + function foldTTTable(table, content) { + if (content.length > 1) { + var newLength = 0; + var j, jj; + for (j = 0, jj = content.length; j < jj; j++) { + newLength += content[j].length; + } + newLength = newLength + 3 & ~3; + var result = new Uint8Array(newLength); + var pos = 0; + for (j = 0, jj = content.length; j < jj; j++) { + result.set(content[j], pos); + pos += content[j].length; + } + table.data = result; + table.length = newLength; + } + } + function sanitizeTTPrograms(fpgm, prep, cvt, maxFunctionDefs) { + var ttContext = { + functionsDefined: [], + functionsUsed: [], + functionsStackDeltas: [], + tooComplexToFollowFunctions: false, + hintsValid: true + }; + if (fpgm) { + sanitizeTTProgram(fpgm, ttContext); + } + if (prep) { + sanitizeTTProgram(prep, ttContext); + } + if (fpgm) { + checkInvalidFunctions(ttContext, maxFunctionDefs); + } + if (cvt && cvt.length & 1) { + var cvtData = new Uint8Array(cvt.length + 1); + cvtData.set(cvt.data); + cvt.data = cvtData; + } + return ttContext.hintsValid; + } + font = new Stream(new Uint8Array(font.getBytes())); + var VALID_TABLES = [ + 'OS/2', + 'cmap', + 'head', + 'hhea', + 'hmtx', + 'maxp', + 'name', + 'post', + 'loca', + 'glyf', + 'fpgm', + 'prep', + 'cvt ', + 'CFF ' + ]; + var header = readOpenTypeHeader(font); + var numTables = header.numTables; + var cff, cffFile; + var tables = Object.create(null); + tables['OS/2'] = null; + tables['cmap'] = null; + tables['head'] = null; + tables['hhea'] = null; + tables['hmtx'] = null; + tables['maxp'] = null; + tables['name'] = null; + tables['post'] = null; + var table; + for (var i = 0; i < numTables; i++) { + table = readTableEntry(font); + if (VALID_TABLES.indexOf(table.tag) < 0) { + continue; + } + if (table.length === 0) { + continue; + } + tables[table.tag] = table; + } + var isTrueType = !tables['CFF ']; + if (!isTrueType) { + if (header.version === 'OTTO' && !properties.composite || !tables['head'] || !tables['hhea'] || !tables['maxp'] || !tables['post']) { + cffFile = new Stream(tables['CFF '].data); + cff = new CFFFont(cffFile, properties); + adjustWidths(properties); + return this.convert(name, cff, properties); + } + delete tables['glyf']; + delete tables['loca']; + delete tables['fpgm']; + delete tables['prep']; + delete tables['cvt ']; + this.isOpenType = true; + } else { + if (!tables['loca']) { + error('Required "loca" table is not found'); + } + if (!tables['glyf']) { + warn('Required "glyf" table is not found -- trying to recover.'); + tables['glyf'] = { + tag: 'glyf', + data: new Uint8Array(0) + }; + } + this.isOpenType = false; + } + if (!tables['maxp']) { + error('Required "maxp" table is not found'); + } + font.pos = (font.start || 0) + tables['maxp'].offset; + var version = font.getInt32(); + var numGlyphs = font.getUint16(); + var maxFunctionDefs = 0; + if (version >= 0x00010000 && tables['maxp'].length >= 22) { + font.pos += 8; + var maxZones = font.getUint16(); + if (maxZones > 2) { + tables['maxp'].data[14] = 0; + tables['maxp'].data[15] = 2; + } + font.pos += 4; + maxFunctionDefs = font.getUint16(); + } + var dupFirstEntry = false; + if (properties.type === 'CIDFontType2' && properties.toUnicode && properties.toUnicode.get(0) > '\u0000') { + dupFirstEntry = true; + numGlyphs++; + tables['maxp'].data[4] = numGlyphs >> 8; + tables['maxp'].data[5] = numGlyphs & 255; + } + var hintsValid = sanitizeTTPrograms(tables['fpgm'], tables['prep'], tables['cvt '], maxFunctionDefs); + if (!hintsValid) { + delete tables['fpgm']; + delete tables['prep']; + delete tables['cvt ']; + } + sanitizeMetrics(font, tables['hhea'], tables['hmtx'], numGlyphs); + if (!tables['head']) { + error('Required "head" table is not found'); + } + sanitizeHead(tables['head'], numGlyphs, isTrueType ? tables['loca'].length : 0); + var missingGlyphs = Object.create(null); + if (isTrueType) { + var isGlyphLocationsLong = int16(tables['head'].data[50], tables['head'].data[51]); + missingGlyphs = sanitizeGlyphLocations(tables['loca'], tables['glyf'], numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry); + } + if (!tables['hhea']) { + error('Required "hhea" table is not found'); + } + if (tables['hhea'].data[10] === 0 && tables['hhea'].data[11] === 0) { + tables['hhea'].data[10] = 0xFF; + tables['hhea'].data[11] = 0xFF; + } + var metricsOverride = { + unitsPerEm: int16(tables['head'].data[18], tables['head'].data[19]), + yMax: int16(tables['head'].data[42], tables['head'].data[43]), + yMin: signedInt16(tables['head'].data[38], tables['head'].data[39]), + ascent: int16(tables['hhea'].data[4], tables['hhea'].data[5]), + descent: signedInt16(tables['hhea'].data[6], tables['hhea'].data[7]) + }; + this.ascent = metricsOverride.ascent / metricsOverride.unitsPerEm; + this.descent = metricsOverride.descent / metricsOverride.unitsPerEm; + if (tables['post']) { + var valid = readPostScriptTable(tables['post'], properties, numGlyphs); + if (!valid) { + tables['post'] = null; + } + } + var charCodeToGlyphId = [], charCode; + var toUnicode = properties.toUnicode, widths = properties.widths; + var skipToUnicode = toUnicode instanceof IdentityToUnicodeMap || toUnicode.length === 0x10000; + function hasGlyph(glyphId, charCode, widthCode) { + if (!missingGlyphs[glyphId]) { + return true; + } + if (!skipToUnicode && charCode >= 0 && toUnicode.has(charCode)) { + return true; + } + if (widths && widthCode >= 0 && isNum(widths[widthCode])) { + return true; + } + return false; + } + if (properties.composite) { + var cidToGidMap = properties.cidToGidMap || []; + var isCidToGidMapEmpty = cidToGidMap.length === 0; + properties.cMap.forEach(function (charCode, cid) { + assert(cid <= 0xffff, 'Max size of CID is 65,535'); + var glyphId = -1; + if (isCidToGidMapEmpty) { + glyphId = cid; + } else if (cidToGidMap[cid] !== undefined) { + glyphId = cidToGidMap[cid]; + } + if (glyphId >= 0 && glyphId < numGlyphs && hasGlyph(glyphId, charCode, cid)) { + charCodeToGlyphId[charCode] = glyphId; + } + }); + if (dupFirstEntry && (isCidToGidMapEmpty || !charCodeToGlyphId[0])) { + charCodeToGlyphId[0] = numGlyphs - 1; + } + } else { + var cmapTable = readCmapTable(tables['cmap'], font, this.isSymbolicFont, properties.hasEncoding); + var cmapPlatformId = cmapTable.platformId; + var cmapEncodingId = cmapTable.encodingId; + var cmapMappings = cmapTable.mappings; + var cmapMappingsLength = cmapMappings.length; + if (properties.hasEncoding && (cmapPlatformId === 3 && cmapEncodingId === 1 || cmapPlatformId === 1 && cmapEncodingId === 0) || cmapPlatformId === -1 && cmapEncodingId === -1 && !!getEncoding(properties.baseEncodingName)) { + var baseEncoding = []; + if (properties.baseEncodingName === 'MacRomanEncoding' || properties.baseEncodingName === 'WinAnsiEncoding') { + baseEncoding = getEncoding(properties.baseEncodingName); + } + var glyphsUnicodeMap = getGlyphsUnicode(); + for (charCode = 0; charCode < 256; charCode++) { + var glyphName, standardGlyphName; + if (this.differences && charCode in this.differences) { + glyphName = this.differences[charCode]; + } else if (charCode in baseEncoding && baseEncoding[charCode] !== '') { + glyphName = baseEncoding[charCode]; + } else { + glyphName = StandardEncoding[charCode]; + } + if (!glyphName) { + continue; + } + standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap); + var unicodeOrCharCode, isUnicode = false; + if (cmapPlatformId === 3 && cmapEncodingId === 1) { + unicodeOrCharCode = glyphsUnicodeMap[standardGlyphName]; + isUnicode = true; + } else if (cmapPlatformId === 1 && cmapEncodingId === 0) { + unicodeOrCharCode = MacRomanEncoding.indexOf(standardGlyphName); + } + var found = false; + for (i = 0; i < cmapMappingsLength; ++i) { + if (cmapMappings[i].charCode !== unicodeOrCharCode) { + continue; + } + var code = isUnicode ? charCode : unicodeOrCharCode; + if (hasGlyph(cmapMappings[i].glyphId, code, -1)) { + charCodeToGlyphId[charCode] = cmapMappings[i].glyphId; + found = true; + break; + } + } + if (!found && properties.glyphNames) { + var glyphId = properties.glyphNames.indexOf(glyphName); + if (glyphId === -1 && standardGlyphName !== glyphName) { + glyphId = properties.glyphNames.indexOf(standardGlyphName); + } + if (glyphId > 0 && hasGlyph(glyphId, -1, -1)) { + charCodeToGlyphId[charCode] = glyphId; + found = true; + } + } + if (!found) { + charCodeToGlyphId[charCode] = 0; + } + } + } else if (cmapPlatformId === 0 && cmapEncodingId === 0) { + for (i = 0; i < cmapMappingsLength; ++i) { + charCodeToGlyphId[cmapMappings[i].charCode] = cmapMappings[i].glyphId; + } + } else { + for (i = 0; i < cmapMappingsLength; ++i) { + charCode = cmapMappings[i].charCode & 0xFF; + charCodeToGlyphId[charCode] = cmapMappings[i].glyphId; + } + } + } + if (charCodeToGlyphId.length === 0) { + charCodeToGlyphId[0] = 0; + } + var newMapping = adjustMapping(charCodeToGlyphId, properties); + this.toFontChar = newMapping.toFontChar; + tables['cmap'] = { + tag: 'cmap', + data: createCmapTable(newMapping.charCodeToGlyphId, numGlyphs) + }; + if (!tables['OS/2'] || !validateOS2Table(tables['OS/2'])) { + tables['OS/2'] = { + tag: 'OS/2', + data: createOS2Table(properties, newMapping.charCodeToGlyphId, metricsOverride) + }; + } + if (!tables['post']) { + tables['post'] = { + tag: 'post', + data: createPostTable(properties) + }; + } + if (!isTrueType) { + try { + cffFile = new Stream(tables['CFF '].data); + var parser = new CFFParser(cffFile, properties, SEAC_ANALYSIS_ENABLED); + cff = parser.parse(); + var compiler = new CFFCompiler(cff); + tables['CFF '].data = compiler.compile(); + } catch (e) { + warn('Failed to compile font ' + properties.loadedName); + } + } + if (!tables['name']) { + tables['name'] = { + tag: 'name', + data: createNameTable(this.name) + }; + } else { + var namePrototype = readNameTable(tables['name']); + tables['name'].data = createNameTable(name, namePrototype); + } + var builder = new OpenTypeFileBuilder(header.version); + for (var tableTag in tables) { + builder.addTable(tableTag, tables[tableTag].data); + } + return builder.toArray(); + }, + convert: function Font_convert(fontName, font, properties) { + properties.fixedPitch = false; + if (properties.builtInEncoding) { + adjustToUnicode(properties, properties.builtInEncoding); + } + var mapping = font.getGlyphMapping(properties); + var newMapping = adjustMapping(mapping, properties); + this.toFontChar = newMapping.toFontChar; + var numGlyphs = font.numGlyphs; + function getCharCodes(charCodeToGlyphId, glyphId) { + var charCodes = null; + for (var charCode in charCodeToGlyphId) { + if (glyphId === charCodeToGlyphId[charCode]) { + if (!charCodes) { + charCodes = []; + } + charCodes.push(charCode | 0); + } + } + return charCodes; + } + function createCharCode(charCodeToGlyphId, glyphId) { + for (var charCode in charCodeToGlyphId) { + if (glyphId === charCodeToGlyphId[charCode]) { + return charCode | 0; + } + } + newMapping.charCodeToGlyphId[newMapping.nextAvailableFontCharCode] = glyphId; + return newMapping.nextAvailableFontCharCode++; + } + var seacs = font.seacs; + if (SEAC_ANALYSIS_ENABLED && seacs && seacs.length) { + var matrix = properties.fontMatrix || FONT_IDENTITY_MATRIX; + var charset = font.getCharset(); + var seacMap = Object.create(null); + for (var glyphId in seacs) { + glyphId |= 0; + var seac = seacs[glyphId]; + var baseGlyphName = StandardEncoding[seac[2]]; + var accentGlyphName = StandardEncoding[seac[3]]; + var baseGlyphId = charset.indexOf(baseGlyphName); + var accentGlyphId = charset.indexOf(accentGlyphName); + if (baseGlyphId < 0 || accentGlyphId < 0) { + continue; + } + var accentOffset = { + x: seac[0] * matrix[0] + seac[1] * matrix[2] + matrix[4], + y: seac[0] * matrix[1] + seac[1] * matrix[3] + matrix[5] + }; + var charCodes = getCharCodes(mapping, glyphId); + if (!charCodes) { + continue; + } + for (var i = 0, ii = charCodes.length; i < ii; i++) { + var charCode = charCodes[i]; + var charCodeToGlyphId = newMapping.charCodeToGlyphId; + var baseFontCharCode = createCharCode(charCodeToGlyphId, baseGlyphId); + var accentFontCharCode = createCharCode(charCodeToGlyphId, accentGlyphId); + seacMap[charCode] = { + baseFontCharCode: baseFontCharCode, + accentFontCharCode: accentFontCharCode, + accentOffset: accentOffset + }; + } + } + properties.seacMap = seacMap; + } + var unitsPerEm = 1 / (properties.fontMatrix || FONT_IDENTITY_MATRIX)[0]; + var builder = new OpenTypeFileBuilder('\x4F\x54\x54\x4F'); + builder.addTable('CFF ', font.data); + builder.addTable('OS/2', createOS2Table(properties, newMapping.charCodeToGlyphId)); + builder.addTable('cmap', createCmapTable(newMapping.charCodeToGlyphId, numGlyphs)); + builder.addTable('head', '\x00\x01\x00\x00' + '\x00\x00\x10\x00' + '\x00\x00\x00\x00' + '\x5F\x0F\x3C\xF5' + '\x00\x00' + safeString16(unitsPerEm) + '\x00\x00\x00\x00\x9e\x0b\x7e\x27' + '\x00\x00\x00\x00\x9e\x0b\x7e\x27' + '\x00\x00' + safeString16(properties.descent) + '\x0F\xFF' + safeString16(properties.ascent) + string16(properties.italicAngle ? 2 : 0) + '\x00\x11' + '\x00\x00' + '\x00\x00' + '\x00\x00'); + builder.addTable('hhea', '\x00\x01\x00\x00' + safeString16(properties.ascent) + safeString16(properties.descent) + '\x00\x00' + '\xFF\xFF' + '\x00\x00' + '\x00\x00' + '\x00\x00' + safeString16(properties.capHeight) + safeString16(Math.tan(properties.italicAngle) * properties.xHeight) + '\x00\x00' + '\x00\x00' + '\x00\x00' + '\x00\x00' + '\x00\x00' + '\x00\x00' + string16(numGlyphs)); + builder.addTable('hmtx', function fontFieldsHmtx() { + var charstrings = font.charstrings; + var cffWidths = font.cff ? font.cff.widths : null; + var hmtx = '\x00\x00\x00\x00'; + for (var i = 1, ii = numGlyphs; i < ii; i++) { + var width = 0; + if (charstrings) { + var charstring = charstrings[i - 1]; + width = 'width' in charstring ? charstring.width : 0; + } else if (cffWidths) { + width = Math.ceil(cffWidths[i] || 0); + } + hmtx += string16(width) + string16(0); + } + return hmtx; + }()); + builder.addTable('maxp', '\x00\x00\x50\x00' + string16(numGlyphs)); + builder.addTable('name', createNameTable(fontName)); + builder.addTable('post', createPostTable(properties)); + return builder.toArray(); + }, + get spaceWidth() { + if ('_shadowWidth' in this) { + return this._shadowWidth; + } + var possibleSpaceReplacements = [ + 'space', + 'minus', + 'one', + 'i', + 'I' + ]; + var width; + for (var i = 0, ii = possibleSpaceReplacements.length; i < ii; i++) { + var glyphName = possibleSpaceReplacements[i]; + if (glyphName in this.widths) { + width = this.widths[glyphName]; + break; + } + var glyphsUnicodeMap = getGlyphsUnicode(); + var glyphUnicode = glyphsUnicodeMap[glyphName]; + var charcode = 0; + if (this.composite) { + if (this.cMap.contains(glyphUnicode)) { + charcode = this.cMap.lookup(glyphUnicode); + } + } + if (!charcode && this.toUnicode) { + charcode = this.toUnicode.charCodeOf(glyphUnicode); + } + if (charcode <= 0) { + charcode = glyphUnicode; + } + width = this.widths[charcode]; + if (width) { + break; + } + } + width = width || this.defaultWidth; + this._shadowWidth = width; + return width; + }, + charToGlyph: function Font_charToGlyph(charcode, isSpace) { + var fontCharCode, width, operatorListId; + var widthCode = charcode; + if (this.cMap && this.cMap.contains(charcode)) { + widthCode = this.cMap.lookup(charcode); + } + width = this.widths[widthCode]; + width = isNum(width) ? width : this.defaultWidth; + var vmetric = this.vmetrics && this.vmetrics[widthCode]; + var unicode = this.toUnicode.get(charcode) || charcode; + if (typeof unicode === 'number') { + unicode = String.fromCharCode(unicode); + } + var isInFont = charcode in this.toFontChar; + fontCharCode = this.toFontChar[charcode] || charcode; + if (this.missingFile) { + fontCharCode = mapSpecialUnicodeValues(fontCharCode); + } + if (this.isType3Font) { + operatorListId = fontCharCode; + } + var accent = null; + if (this.seacMap && this.seacMap[charcode]) { + isInFont = true; + var seac = this.seacMap[charcode]; + fontCharCode = seac.baseFontCharCode; + accent = { + fontChar: String.fromCharCode(seac.accentFontCharCode), + offset: seac.accentOffset + }; + } + var fontChar = String.fromCharCode(fontCharCode); + var glyph = this.glyphCache[charcode]; + if (!glyph || !glyph.matchesForCache(fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont)) { + glyph = new Glyph(fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont); + this.glyphCache[charcode] = glyph; + } + return glyph; + }, + charsToGlyphs: function Font_charsToGlyphs(chars) { + var charsCache = this.charsCache; + var glyphs, glyph, charcode; + if (charsCache) { + glyphs = charsCache[chars]; + if (glyphs) { + return glyphs; + } + } + if (!charsCache) { + charsCache = this.charsCache = Object.create(null); + } + glyphs = []; + var charsCacheKey = chars; + var i = 0, ii; + if (this.cMap) { + var c = Object.create(null); + while (i < chars.length) { + this.cMap.readCharCode(chars, i, c); + charcode = c.charcode; + var length = c.length; + i += length; + var isSpace = length === 1 && chars.charCodeAt(i - 1) === 0x20; + glyph = this.charToGlyph(charcode, isSpace); + glyphs.push(glyph); + } + } else { + for (i = 0, ii = chars.length; i < ii; ++i) { + charcode = chars.charCodeAt(i); + glyph = this.charToGlyph(charcode, charcode === 0x20); + glyphs.push(glyph); + } + } + return charsCache[charsCacheKey] = glyphs; + } + }; + return Font; + }(); + var ErrorFont = function ErrorFontClosure() { + function ErrorFont(error) { + this.error = error; + this.loadedName = 'g_font_error'; + this.loading = false; + } + ErrorFont.prototype = { + charsToGlyphs: function ErrorFont_charsToGlyphs() { + return []; + }, + exportData: function ErrorFont_exportData() { + return { error: this.error }; + } + }; + return ErrorFont; + }(); + function type1FontGlyphMapping(properties, builtInEncoding, glyphNames) { + var charCodeToGlyphId = Object.create(null); + var glyphId, charCode, baseEncoding; + var isSymbolicFont = !!(properties.flags & FontFlags.Symbolic); + if (properties.baseEncodingName) { + baseEncoding = getEncoding(properties.baseEncodingName); + for (charCode = 0; charCode < baseEncoding.length; charCode++) { + glyphId = glyphNames.indexOf(baseEncoding[charCode]); + if (glyphId >= 0) { + charCodeToGlyphId[charCode] = glyphId; + } else { + charCodeToGlyphId[charCode] = 0; + } + } + } else if (isSymbolicFont) { + for (charCode in builtInEncoding) { + charCodeToGlyphId[charCode] = builtInEncoding[charCode]; + } + } else { + baseEncoding = StandardEncoding; + for (charCode = 0; charCode < baseEncoding.length; charCode++) { + glyphId = glyphNames.indexOf(baseEncoding[charCode]); + if (glyphId >= 0) { + charCodeToGlyphId[charCode] = glyphId; + } else { + charCodeToGlyphId[charCode] = 0; + } + } + } + var differences = properties.differences, glyphsUnicodeMap; + if (differences) { + for (charCode in differences) { + var glyphName = differences[charCode]; + glyphId = glyphNames.indexOf(glyphName); + if (glyphId === -1) { + if (!glyphsUnicodeMap) { + glyphsUnicodeMap = getGlyphsUnicode(); + } + var standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap); + if (standardGlyphName !== glyphName) { + glyphId = glyphNames.indexOf(standardGlyphName); + } + } + if (glyphId >= 0) { + charCodeToGlyphId[charCode] = glyphId; + } else { + charCodeToGlyphId[charCode] = 0; + } + } + } + return charCodeToGlyphId; + } + var Type1Font = function Type1FontClosure() { + function findBlock(streamBytes, signature, startIndex) { + var streamBytesLength = streamBytes.length; + var signatureLength = signature.length; + var scanLength = streamBytesLength - signatureLength; + var i = startIndex, j, found = false; + while (i < scanLength) { + j = 0; + while (j < signatureLength && streamBytes[i + j] === signature[j]) { + j++; + } + if (j >= signatureLength) { + i += j; + while (i < streamBytesLength && isSpace(streamBytes[i])) { + i++; + } + found = true; + break; + } + i++; + } + return { + found: found, + length: i + }; + } + function getHeaderBlock(stream, suggestedLength) { + var EEXEC_SIGNATURE = [ + 0x65, + 0x65, + 0x78, + 0x65, + 0x63 + ]; + var streamStartPos = stream.pos; + var headerBytes, headerBytesLength, block; + try { + headerBytes = stream.getBytes(suggestedLength); + headerBytesLength = headerBytes.length; + } catch (ex) { + if (ex instanceof MissingDataException) { + throw ex; + } + } + if (headerBytesLength === suggestedLength) { + block = findBlock(headerBytes, EEXEC_SIGNATURE, suggestedLength - 2 * EEXEC_SIGNATURE.length); + if (block.found && block.length === suggestedLength) { + return { + stream: new Stream(headerBytes), + length: suggestedLength + }; + } + } + warn('Invalid "Length1" property in Type1 font -- trying to recover.'); + stream.pos = streamStartPos; + var SCAN_BLOCK_LENGTH = 2048; + var actualLength; + while (true) { + var scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH); + block = findBlock(scanBytes, EEXEC_SIGNATURE, 0); + if (block.length === 0) { + break; + } + stream.pos += block.length; + if (block.found) { + actualLength = stream.pos - streamStartPos; + break; + } + } + stream.pos = streamStartPos; + if (actualLength) { + return { + stream: new Stream(stream.getBytes(actualLength)), + length: actualLength + }; + } + warn('Unable to recover "Length1" property in Type1 font -- using as is.'); + return { + stream: new Stream(stream.getBytes(suggestedLength)), + length: suggestedLength + }; + } + function getEexecBlock(stream, suggestedLength) { + var eexecBytes = stream.getBytes(); + return { + stream: new Stream(eexecBytes), + length: eexecBytes.length + }; + } + function Type1Font(name, file, properties) { + var PFB_HEADER_SIZE = 6; + var headerBlockLength = properties.length1; + var eexecBlockLength = properties.length2; + var pfbHeader = file.peekBytes(PFB_HEADER_SIZE); + var pfbHeaderPresent = pfbHeader[0] === 0x80 && pfbHeader[1] === 0x01; + if (pfbHeaderPresent) { + file.skip(PFB_HEADER_SIZE); + headerBlockLength = pfbHeader[5] << 24 | pfbHeader[4] << 16 | pfbHeader[3] << 8 | pfbHeader[2]; + } + var headerBlock = getHeaderBlock(file, headerBlockLength); + headerBlockLength = headerBlock.length; + var headerBlockParser = new Type1Parser(headerBlock.stream, false, SEAC_ANALYSIS_ENABLED); + headerBlockParser.extractFontHeader(properties); + if (pfbHeaderPresent) { + pfbHeader = file.getBytes(PFB_HEADER_SIZE); + eexecBlockLength = pfbHeader[5] << 24 | pfbHeader[4] << 16 | pfbHeader[3] << 8 | pfbHeader[2]; + } + var eexecBlock = getEexecBlock(file, eexecBlockLength); + eexecBlockLength = eexecBlock.length; + var eexecBlockParser = new Type1Parser(eexecBlock.stream, true, SEAC_ANALYSIS_ENABLED); + var data = eexecBlockParser.extractFontProgram(); + for (var info in data.properties) { + properties[info] = data.properties[info]; + } + var charstrings = data.charstrings; + var type2Charstrings = this.getType2Charstrings(charstrings); + var subrs = this.getType2Subrs(data.subrs); + this.charstrings = charstrings; + this.data = this.wrap(name, type2Charstrings, this.charstrings, subrs, properties); + this.seacs = this.getSeacs(data.charstrings); + } + Type1Font.prototype = { + get numGlyphs() { + return this.charstrings.length + 1; + }, + getCharset: function Type1Font_getCharset() { + var charset = ['.notdef']; + var charstrings = this.charstrings; + for (var glyphId = 0; glyphId < charstrings.length; glyphId++) { + charset.push(charstrings[glyphId].glyphName); + } + return charset; + }, + getGlyphMapping: function Type1Font_getGlyphMapping(properties) { + var charstrings = this.charstrings; + var glyphNames = ['.notdef'], glyphId; + for (glyphId = 0; glyphId < charstrings.length; glyphId++) { + glyphNames.push(charstrings[glyphId].glyphName); + } + var encoding = properties.builtInEncoding; + if (encoding) { + var builtInEncoding = Object.create(null); + for (var charCode in encoding) { + glyphId = glyphNames.indexOf(encoding[charCode]); + if (glyphId >= 0) { + builtInEncoding[charCode] = glyphId; + } + } + } + return type1FontGlyphMapping(properties, builtInEncoding, glyphNames); + }, + getSeacs: function Type1Font_getSeacs(charstrings) { + var i, ii; + var seacMap = []; + for (i = 0, ii = charstrings.length; i < ii; i++) { + var charstring = charstrings[i]; + if (charstring.seac) { + seacMap[i + 1] = charstring.seac; + } + } + return seacMap; + }, + getType2Charstrings: function Type1Font_getType2Charstrings(type1Charstrings) { + var type2Charstrings = []; + for (var i = 0, ii = type1Charstrings.length; i < ii; i++) { + type2Charstrings.push(type1Charstrings[i].charstring); + } + return type2Charstrings; + }, + getType2Subrs: function Type1Font_getType2Subrs(type1Subrs) { + var bias = 0; + var count = type1Subrs.length; + if (count < 1133) { + bias = 107; + } else if (count < 33769) { + bias = 1131; + } else { + bias = 32768; + } + var type2Subrs = []; + var i; + for (i = 0; i < bias; i++) { + type2Subrs.push([0x0B]); + } + for (i = 0; i < count; i++) { + type2Subrs.push(type1Subrs[i]); + } + return type2Subrs; + }, + wrap: function Type1Font_wrap(name, glyphs, charstrings, subrs, properties) { + var cff = new CFF(); + cff.header = new CFFHeader(1, 0, 4, 4); + cff.names = [name]; + var topDict = new CFFTopDict(); + topDict.setByName('version', 391); + topDict.setByName('Notice', 392); + topDict.setByName('FullName', 393); + topDict.setByName('FamilyName', 394); + topDict.setByName('Weight', 395); + topDict.setByName('Encoding', null); + topDict.setByName('FontMatrix', properties.fontMatrix); + topDict.setByName('FontBBox', properties.bbox); + topDict.setByName('charset', null); + topDict.setByName('CharStrings', null); + topDict.setByName('Private', null); + cff.topDict = topDict; + var strings = new CFFStrings(); + strings.add('Version 0.11'); + strings.add('See original notice'); + strings.add(name); + strings.add(name); + strings.add('Medium'); + cff.strings = strings; + cff.globalSubrIndex = new CFFIndex(); + var count = glyphs.length; + var charsetArray = [0]; + var i, ii; + for (i = 0; i < count; i++) { + var index = CFFStandardStrings.indexOf(charstrings[i].glyphName); + if (index === -1) { + index = 0; + } + charsetArray.push(index >> 8 & 0xff, index & 0xff); + } + cff.charset = new CFFCharset(false, 0, [], charsetArray); + var charStringsIndex = new CFFIndex(); + charStringsIndex.add([ + 0x8B, + 0x0E + ]); + for (i = 0; i < count; i++) { + var glyph = glyphs[i]; + if (glyph.length === 0) { + charStringsIndex.add([ + 0x8B, + 0x0E + ]); + continue; + } + charStringsIndex.add(glyph); + } + cff.charStrings = charStringsIndex; + var privateDict = new CFFPrivateDict(); + privateDict.setByName('Subrs', null); + var fields = [ + 'BlueValues', + 'OtherBlues', + 'FamilyBlues', + 'FamilyOtherBlues', + 'StemSnapH', + 'StemSnapV', + 'BlueShift', + 'BlueFuzz', + 'BlueScale', + 'LanguageGroup', + 'ExpansionFactor', + 'ForceBold', + 'StdHW', + 'StdVW' + ]; + for (i = 0, ii = fields.length; i < ii; i++) { + var field = fields[i]; + if (!(field in properties.privateData)) { + continue; + } + var value = properties.privateData[field]; + if (isArray(value)) { + for (var j = value.length - 1; j > 0; j--) { + value[j] -= value[j - 1]; + } + } + privateDict.setByName(field, value); + } + cff.topDict.privateDict = privateDict; + var subrIndex = new CFFIndex(); + for (i = 0, ii = subrs.length; i < ii; i++) { + subrIndex.add(subrs[i]); + } + privateDict.subrsIndex = subrIndex; + var compiler = new CFFCompiler(cff); + return compiler.compile(); + } + }; + return Type1Font; + }(); + var CFFFont = function CFFFontClosure() { + function CFFFont(file, properties) { + this.properties = properties; + var parser = new CFFParser(file, properties, SEAC_ANALYSIS_ENABLED); + this.cff = parser.parse(); + var compiler = new CFFCompiler(this.cff); + this.seacs = this.cff.seacs; + try { + this.data = compiler.compile(); + } catch (e) { + warn('Failed to compile font ' + properties.loadedName); + this.data = file; + } + } + CFFFont.prototype = { + get numGlyphs() { + return this.cff.charStrings.count; + }, + getCharset: function CFFFont_getCharset() { + return this.cff.charset.charset; + }, + getGlyphMapping: function CFFFont_getGlyphMapping() { + var cff = this.cff; + var properties = this.properties; + var charsets = cff.charset.charset; + var charCodeToGlyphId; + var glyphId; + if (properties.composite) { + charCodeToGlyphId = Object.create(null); + if (cff.isCIDFont) { + for (glyphId = 0; glyphId < charsets.length; glyphId++) { + var cid = charsets[glyphId]; + var charCode = properties.cMap.charCodeOf(cid); + charCodeToGlyphId[charCode] = glyphId; + } + } else { + for (glyphId = 0; glyphId < cff.charStrings.count; glyphId++) { + charCodeToGlyphId[glyphId] = glyphId; + } + } + return charCodeToGlyphId; + } + var encoding = cff.encoding ? cff.encoding.encoding : null; + charCodeToGlyphId = type1FontGlyphMapping(properties, encoding, charsets); + return charCodeToGlyphId; + } + }; + return CFFFont; + }(); + (function checkSeacSupport() { + if (typeof navigator !== 'undefined' && /Windows/.test(navigator.userAgent)) { + SEAC_ANALYSIS_ENABLED = true; + } + }()); + (function checkChromeWindows() { + if (typeof navigator !== 'undefined' && /Windows.*Chrome/.test(navigator.userAgent)) { + SKIP_PRIVATE_USE_RANGE_F000_TO_F01F = true; + } + }()); + exports.ErrorFont = ErrorFont; + exports.Font = Font; + exports.FontFlags = FontFlags; + exports.IdentityToUnicodeMap = IdentityToUnicodeMap; + exports.ToUnicodeMap = ToUnicodeMap; + exports.getFontType = getFontType; + })); + (function (root, factory) { + factory(root.pdfjsCorePsParser = {}, root.pdfjsSharedUtil, root.pdfjsCoreParser); + }(this, function (exports, sharedUtil, coreParser) { + var error = sharedUtil.error; + var isSpace = sharedUtil.isSpace; + var EOF = coreParser.EOF; + var PostScriptParser = function PostScriptParserClosure() { + function PostScriptParser(lexer) { + this.lexer = lexer; + this.operators = []; + this.token = null; + this.prev = null; + } + PostScriptParser.prototype = { + nextToken: function PostScriptParser_nextToken() { + this.prev = this.token; + this.token = this.lexer.getToken(); + }, + accept: function PostScriptParser_accept(type) { + if (this.token.type === type) { + this.nextToken(); + return true; + } + return false; + }, + expect: function PostScriptParser_expect(type) { + if (this.accept(type)) { + return true; + } + error('Unexpected symbol: found ' + this.token.type + ' expected ' + type + '.'); + }, + parse: function PostScriptParser_parse() { + this.nextToken(); + this.expect(PostScriptTokenTypes.LBRACE); + this.parseBlock(); + this.expect(PostScriptTokenTypes.RBRACE); + return this.operators; + }, + parseBlock: function PostScriptParser_parseBlock() { + while (true) { + if (this.accept(PostScriptTokenTypes.NUMBER)) { + this.operators.push(this.prev.value); + } else if (this.accept(PostScriptTokenTypes.OPERATOR)) { + this.operators.push(this.prev.value); + } else if (this.accept(PostScriptTokenTypes.LBRACE)) { + this.parseCondition(); + } else { + return; + } + } + }, + parseCondition: function PostScriptParser_parseCondition() { + var conditionLocation = this.operators.length; + this.operators.push(null, null); + this.parseBlock(); + this.expect(PostScriptTokenTypes.RBRACE); + if (this.accept(PostScriptTokenTypes.IF)) { + this.operators[conditionLocation] = this.operators.length; + this.operators[conditionLocation + 1] = 'jz'; + } else if (this.accept(PostScriptTokenTypes.LBRACE)) { + var jumpLocation = this.operators.length; + this.operators.push(null, null); + var endOfTrue = this.operators.length; + this.parseBlock(); + this.expect(PostScriptTokenTypes.RBRACE); + this.expect(PostScriptTokenTypes.IFELSE); + this.operators[jumpLocation] = this.operators.length; + this.operators[jumpLocation + 1] = 'j'; + this.operators[conditionLocation] = endOfTrue; + this.operators[conditionLocation + 1] = 'jz'; + } else { + error('PS Function: error parsing conditional.'); + } + } + }; + return PostScriptParser; + }(); + var PostScriptTokenTypes = { + LBRACE: 0, + RBRACE: 1, + NUMBER: 2, + OPERATOR: 3, + IF: 4, + IFELSE: 5 + }; + var PostScriptToken = function PostScriptTokenClosure() { + function PostScriptToken(type, value) { + this.type = type; + this.value = value; + } + var opCache = Object.create(null); + PostScriptToken.getOperator = function PostScriptToken_getOperator(op) { + var opValue = opCache[op]; + if (opValue) { + return opValue; + } + return opCache[op] = new PostScriptToken(PostScriptTokenTypes.OPERATOR, op); + }; + PostScriptToken.LBRACE = new PostScriptToken(PostScriptTokenTypes.LBRACE, '{'); + PostScriptToken.RBRACE = new PostScriptToken(PostScriptTokenTypes.RBRACE, '}'); + PostScriptToken.IF = new PostScriptToken(PostScriptTokenTypes.IF, 'IF'); + PostScriptToken.IFELSE = new PostScriptToken(PostScriptTokenTypes.IFELSE, 'IFELSE'); + return PostScriptToken; + }(); + var PostScriptLexer = function PostScriptLexerClosure() { + function PostScriptLexer(stream) { + this.stream = stream; + this.nextChar(); + this.strBuf = []; + } + PostScriptLexer.prototype = { + nextChar: function PostScriptLexer_nextChar() { + return this.currentChar = this.stream.getByte(); + }, + getToken: function PostScriptLexer_getToken() { + var comment = false; + var ch = this.currentChar; + while (true) { + if (ch < 0) { + return EOF; + } + if (comment) { + if (ch === 0x0A || ch === 0x0D) { + comment = false; + } + } else if (ch === 0x25) { + comment = true; + } else if (!isSpace(ch)) { + break; + } + ch = this.nextChar(); + } + switch (ch | 0) { + case 0x30: + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + case 0x38: + case 0x39: + case 0x2B: + case 0x2D: + case 0x2E: + return new PostScriptToken(PostScriptTokenTypes.NUMBER, this.getNumber()); + case 0x7B: + this.nextChar(); + return PostScriptToken.LBRACE; + case 0x7D: + this.nextChar(); + return PostScriptToken.RBRACE; + } + var strBuf = this.strBuf; + strBuf.length = 0; + strBuf[0] = String.fromCharCode(ch); + while ((ch = this.nextChar()) >= 0 && (ch >= 0x41 && ch <= 0x5A || ch >= 0x61 && ch <= 0x7A)) { + strBuf.push(String.fromCharCode(ch)); + } + var str = strBuf.join(''); + switch (str.toLowerCase()) { + case 'if': + return PostScriptToken.IF; + case 'ifelse': + return PostScriptToken.IFELSE; + default: + return PostScriptToken.getOperator(str); + } + }, + getNumber: function PostScriptLexer_getNumber() { + var ch = this.currentChar; + var strBuf = this.strBuf; + strBuf.length = 0; + strBuf[0] = String.fromCharCode(ch); + while ((ch = this.nextChar()) >= 0) { + if (ch >= 0x30 && ch <= 0x39 || ch === 0x2D || ch === 0x2E) { + strBuf.push(String.fromCharCode(ch)); + } else { + break; + } + } + var value = parseFloat(strBuf.join('')); + if (isNaN(value)) { + error('Invalid floating point number: ' + value); + } + return value; + } + }; + return PostScriptLexer; + }(); + exports.PostScriptLexer = PostScriptLexer; + exports.PostScriptParser = PostScriptParser; + })); + (function (root, factory) { + factory(root.pdfjsCoreFunction = {}, root.pdfjsSharedUtil, root.pdfjsCorePrimitives, root.pdfjsCorePsParser); + }(this, function (exports, sharedUtil, corePrimitives, corePsParser) { + var error = sharedUtil.error; + var info = sharedUtil.info; + var isArray = sharedUtil.isArray; + var isBool = sharedUtil.isBool; + var isDict = corePrimitives.isDict; + var isStream = corePrimitives.isStream; + var PostScriptLexer = corePsParser.PostScriptLexer; + var PostScriptParser = corePsParser.PostScriptParser; + var PDFFunction = function PDFFunctionClosure() { + var CONSTRUCT_SAMPLED = 0; + var CONSTRUCT_INTERPOLATED = 2; + var CONSTRUCT_STICHED = 3; + var CONSTRUCT_POSTSCRIPT = 4; + return { + getSampleArray: function PDFFunction_getSampleArray(size, outputSize, bps, str) { + var i, ii; + var length = 1; + for (i = 0, ii = size.length; i < ii; i++) { + length *= size[i]; + } + length *= outputSize; + var array = new Array(length); + var codeSize = 0; + var codeBuf = 0; + var sampleMul = 1.0 / (Math.pow(2.0, bps) - 1); + var strBytes = str.getBytes((length * bps + 7) / 8); + var strIdx = 0; + for (i = 0; i < length; i++) { + while (codeSize < bps) { + codeBuf <<= 8; + codeBuf |= strBytes[strIdx++]; + codeSize += 8; + } + codeSize -= bps; + array[i] = (codeBuf >> codeSize) * sampleMul; + codeBuf &= (1 << codeSize) - 1; + } + return array; + }, + getIR: function PDFFunction_getIR(xref, fn) { + var dict = fn.dict; + if (!dict) { + dict = fn; + } + var types = [ + this.constructSampled, + null, + this.constructInterpolated, + this.constructStiched, + this.constructPostScript + ]; + var typeNum = dict.get('FunctionType'); + var typeFn = types[typeNum]; + if (!typeFn) { + error('Unknown type of function'); + } + return typeFn.call(this, fn, dict, xref); + }, + fromIR: function PDFFunction_fromIR(IR) { + var type = IR[0]; + switch (type) { + case CONSTRUCT_SAMPLED: + return this.constructSampledFromIR(IR); + case CONSTRUCT_INTERPOLATED: + return this.constructInterpolatedFromIR(IR); + case CONSTRUCT_STICHED: + return this.constructStichedFromIR(IR); + default: + return this.constructPostScriptFromIR(IR); + } + }, + parse: function PDFFunction_parse(xref, fn) { + var IR = this.getIR(xref, fn); + return this.fromIR(IR); + }, + parseArray: function PDFFunction_parseArray(xref, fnObj) { + if (!isArray(fnObj)) { + return this.parse(xref, fnObj); + } + var fnArray = []; + for (var j = 0, jj = fnObj.length; j < jj; j++) { + var obj = xref.fetchIfRef(fnObj[j]); + fnArray.push(PDFFunction.parse(xref, obj)); + } + return function (src, srcOffset, dest, destOffset) { + for (var i = 0, ii = fnArray.length; i < ii; i++) { + fnArray[i](src, srcOffset, dest, destOffset + i); + } + }; + }, + constructSampled: function PDFFunction_constructSampled(str, dict) { + function toMultiArray(arr) { + var inputLength = arr.length; + var out = []; + var index = 0; + for (var i = 0; i < inputLength; i += 2) { + out[index] = [ + arr[i], + arr[i + 1] + ]; + ++index; + } + return out; + } + var domain = dict.getArray('Domain'); + var range = dict.getArray('Range'); + if (!domain || !range) { + error('No domain or range'); + } + var inputSize = domain.length / 2; + var outputSize = range.length / 2; + domain = toMultiArray(domain); + range = toMultiArray(range); + var size = dict.get('Size'); + var bps = dict.get('BitsPerSample'); + var order = dict.get('Order') || 1; + if (order !== 1) { + info('No support for cubic spline interpolation: ' + order); + } + var encode = dict.getArray('Encode'); + if (!encode) { + encode = []; + for (var i = 0; i < inputSize; ++i) { + encode.push(0); + encode.push(size[i] - 1); + } + } + encode = toMultiArray(encode); + var decode = dict.getArray('Decode'); + if (!decode) { + decode = range; + } else { + decode = toMultiArray(decode); + } + var samples = this.getSampleArray(size, outputSize, bps, str); + return [ + CONSTRUCT_SAMPLED, + inputSize, + domain, + encode, + decode, + samples, + size, + outputSize, + Math.pow(2, bps) - 1, + range + ]; + }, + constructSampledFromIR: function PDFFunction_constructSampledFromIR(IR) { + function interpolate(x, xmin, xmax, ymin, ymax) { + return ymin + (x - xmin) * ((ymax - ymin) / (xmax - xmin)); + } + return function constructSampledFromIRResult(src, srcOffset, dest, destOffset) { + var m = IR[1]; + var domain = IR[2]; + var encode = IR[3]; + var decode = IR[4]; + var samples = IR[5]; + var size = IR[6]; + var n = IR[7]; + var range = IR[9]; + var cubeVertices = 1 << m; + var cubeN = new Float64Array(cubeVertices); + var cubeVertex = new Uint32Array(cubeVertices); + var i, j; + for (j = 0; j < cubeVertices; j++) { + cubeN[j] = 1; + } + var k = n, pos = 1; + for (i = 0; i < m; ++i) { + var domain_2i = domain[i][0]; + var domain_2i_1 = domain[i][1]; + var xi = Math.min(Math.max(src[srcOffset + i], domain_2i), domain_2i_1); + var e = interpolate(xi, domain_2i, domain_2i_1, encode[i][0], encode[i][1]); + var size_i = size[i]; + e = Math.min(Math.max(e, 0), size_i - 1); + var e0 = e < size_i - 1 ? Math.floor(e) : e - 1; + var n0 = e0 + 1 - e; + var n1 = e - e0; + var offset0 = e0 * k; + var offset1 = offset0 + k; + for (j = 0; j < cubeVertices; j++) { + if (j & pos) { + cubeN[j] *= n1; + cubeVertex[j] += offset1; + } else { + cubeN[j] *= n0; + cubeVertex[j] += offset0; + } + } + k *= size_i; + pos <<= 1; + } + for (j = 0; j < n; ++j) { + var rj = 0; + for (i = 0; i < cubeVertices; i++) { + rj += samples[cubeVertex[i] + j] * cubeN[i]; + } + rj = interpolate(rj, 0, 1, decode[j][0], decode[j][1]); + dest[destOffset + j] = Math.min(Math.max(rj, range[j][0]), range[j][1]); + } + }; + }, + constructInterpolated: function PDFFunction_constructInterpolated(str, dict) { + var c0 = dict.getArray('C0') || [0]; + var c1 = dict.getArray('C1') || [1]; + var n = dict.get('N'); + if (!isArray(c0) || !isArray(c1)) { + error('Illegal dictionary for interpolated function'); + } + var length = c0.length; + var diff = []; + for (var i = 0; i < length; ++i) { + diff.push(c1[i] - c0[i]); + } + return [ + CONSTRUCT_INTERPOLATED, + c0, + diff, + n + ]; + }, + constructInterpolatedFromIR: function PDFFunction_constructInterpolatedFromIR(IR) { + var c0 = IR[1]; + var diff = IR[2]; + var n = IR[3]; + var length = diff.length; + return function constructInterpolatedFromIRResult(src, srcOffset, dest, destOffset) { + var x = n === 1 ? src[srcOffset] : Math.pow(src[srcOffset], n); + for (var j = 0; j < length; ++j) { + dest[destOffset + j] = c0[j] + x * diff[j]; + } + }; + }, + constructStiched: function PDFFunction_constructStiched(fn, dict, xref) { + var domain = dict.getArray('Domain'); + if (!domain) { + error('No domain'); + } + var inputSize = domain.length / 2; + if (inputSize !== 1) { + error('Bad domain for stiched function'); + } + var fnRefs = dict.get('Functions'); + var fns = []; + for (var i = 0, ii = fnRefs.length; i < ii; ++i) { + fns.push(PDFFunction.getIR(xref, xref.fetchIfRef(fnRefs[i]))); + } + var bounds = dict.getArray('Bounds'); + var encode = dict.getArray('Encode'); + return [ + CONSTRUCT_STICHED, + domain, + bounds, + encode, + fns + ]; + }, + constructStichedFromIR: function PDFFunction_constructStichedFromIR(IR) { + var domain = IR[1]; + var bounds = IR[2]; + var encode = IR[3]; + var fnsIR = IR[4]; + var fns = []; + var tmpBuf = new Float32Array(1); + for (var i = 0, ii = fnsIR.length; i < ii; i++) { + fns.push(PDFFunction.fromIR(fnsIR[i])); + } + return function constructStichedFromIRResult(src, srcOffset, dest, destOffset) { + var clip = function constructStichedFromIRClip(v, min, max) { + if (v > max) { + v = max; + } else if (v < min) { + v = min; + } + return v; + }; + var v = clip(src[srcOffset], domain[0], domain[1]); + for (var i = 0, ii = bounds.length; i < ii; ++i) { + if (v < bounds[i]) { + break; + } + } + var dmin = domain[0]; + if (i > 0) { + dmin = bounds[i - 1]; + } + var dmax = domain[1]; + if (i < bounds.length) { + dmax = bounds[i]; + } + var rmin = encode[2 * i]; + var rmax = encode[2 * i + 1]; + tmpBuf[0] = dmin === dmax ? rmin : rmin + (v - dmin) * (rmax - rmin) / (dmax - dmin); + fns[i](tmpBuf, 0, dest, destOffset); + }; + }, + constructPostScript: function PDFFunction_constructPostScript(fn, dict, xref) { + var domain = dict.getArray('Domain'); + var range = dict.getArray('Range'); + if (!domain) { + error('No domain.'); + } + if (!range) { + error('No range.'); + } + var lexer = new PostScriptLexer(fn); + var parser = new PostScriptParser(lexer); + var code = parser.parse(); + return [ + CONSTRUCT_POSTSCRIPT, + domain, + range, + code + ]; + }, + constructPostScriptFromIR: function PDFFunction_constructPostScriptFromIR(IR) { + var domain = IR[1]; + var range = IR[2]; + var code = IR[3]; + var compiled = new PostScriptCompiler().compile(code, domain, range); + if (compiled) { + return new Function('src', 'srcOffset', 'dest', 'destOffset', compiled); + } + info('Unable to compile PS function'); + var numOutputs = range.length >> 1; + var numInputs = domain.length >> 1; + var evaluator = new PostScriptEvaluator(code); + var cache = Object.create(null); + var MAX_CACHE_SIZE = 2048 * 4; + var cache_available = MAX_CACHE_SIZE; + var tmpBuf = new Float32Array(numInputs); + return function constructPostScriptFromIRResult(src, srcOffset, dest, destOffset) { + var i, value; + var key = ''; + var input = tmpBuf; + for (i = 0; i < numInputs; i++) { + value = src[srcOffset + i]; + input[i] = value; + key += value + '_'; + } + var cachedValue = cache[key]; + if (cachedValue !== undefined) { + dest.set(cachedValue, destOffset); + return; + } + var output = new Float32Array(numOutputs); + var stack = evaluator.execute(input); + var stackIndex = stack.length - numOutputs; + for (i = 0; i < numOutputs; i++) { + value = stack[stackIndex + i]; + var bound = range[i * 2]; + if (value < bound) { + value = bound; + } else { + bound = range[i * 2 + 1]; + if (value > bound) { + value = bound; + } + } + output[i] = value; + } + if (cache_available > 0) { + cache_available--; + cache[key] = output; + } + dest.set(output, destOffset); + }; + } + }; + }(); + function isPDFFunction(v) { + var fnDict; + if (typeof v !== 'object') { + return false; + } else if (isDict(v)) { + fnDict = v; + } else if (isStream(v)) { + fnDict = v.dict; + } else { + return false; + } + return fnDict.has('FunctionType'); + } + var PostScriptStack = function PostScriptStackClosure() { + var MAX_STACK_SIZE = 100; + function PostScriptStack(initialStack) { + this.stack = !initialStack ? [] : Array.prototype.slice.call(initialStack, 0); + } + PostScriptStack.prototype = { + push: function PostScriptStack_push(value) { + if (this.stack.length >= MAX_STACK_SIZE) { + error('PostScript function stack overflow.'); + } + this.stack.push(value); + }, + pop: function PostScriptStack_pop() { + if (this.stack.length <= 0) { + error('PostScript function stack underflow.'); + } + return this.stack.pop(); + }, + copy: function PostScriptStack_copy(n) { + if (this.stack.length + n >= MAX_STACK_SIZE) { + error('PostScript function stack overflow.'); + } + var stack = this.stack; + for (var i = stack.length - n, j = n - 1; j >= 0; j--, i++) { + stack.push(stack[i]); + } + }, + index: function PostScriptStack_index(n) { + this.push(this.stack[this.stack.length - n - 1]); + }, + roll: function PostScriptStack_roll(n, p) { + var stack = this.stack; + var l = stack.length - n; + var r = stack.length - 1, c = l + (p - Math.floor(p / n) * n), i, j, t; + for (i = l, j = r; i < j; i++, j--) { + t = stack[i]; + stack[i] = stack[j]; + stack[j] = t; + } + for (i = l, j = c - 1; i < j; i++, j--) { + t = stack[i]; + stack[i] = stack[j]; + stack[j] = t; + } + for (i = c, j = r; i < j; i++, j--) { + t = stack[i]; + stack[i] = stack[j]; + stack[j] = t; + } + } + }; + return PostScriptStack; + }(); + var PostScriptEvaluator = function PostScriptEvaluatorClosure() { + function PostScriptEvaluator(operators) { + this.operators = operators; + } + PostScriptEvaluator.prototype = { + execute: function PostScriptEvaluator_execute(initialStack) { + var stack = new PostScriptStack(initialStack); + var counter = 0; + var operators = this.operators; + var length = operators.length; + var operator, a, b; + while (counter < length) { + operator = operators[counter++]; + if (typeof operator === 'number') { + stack.push(operator); + continue; + } + switch (operator) { + case 'jz': + b = stack.pop(); + a = stack.pop(); + if (!a) { + counter = b; + } + break; + case 'j': + a = stack.pop(); + counter = a; + break; + case 'abs': + a = stack.pop(); + stack.push(Math.abs(a)); + break; + case 'add': + b = stack.pop(); + a = stack.pop(); + stack.push(a + b); + break; + case 'and': + b = stack.pop(); + a = stack.pop(); + if (isBool(a) && isBool(b)) { + stack.push(a && b); + } else { + stack.push(a & b); + } + break; + case 'atan': + a = stack.pop(); + stack.push(Math.atan(a)); + break; + case 'bitshift': + b = stack.pop(); + a = stack.pop(); + if (a > 0) { + stack.push(a << b); + } else { + stack.push(a >> b); + } + break; + case 'ceiling': + a = stack.pop(); + stack.push(Math.ceil(a)); + break; + case 'copy': + a = stack.pop(); + stack.copy(a); + break; + case 'cos': + a = stack.pop(); + stack.push(Math.cos(a)); + break; + case 'cvi': + a = stack.pop() | 0; + stack.push(a); + break; + case 'cvr': + break; + case 'div': + b = stack.pop(); + a = stack.pop(); + stack.push(a / b); + break; + case 'dup': + stack.copy(1); + break; + case 'eq': + b = stack.pop(); + a = stack.pop(); + stack.push(a === b); + break; + case 'exch': + stack.roll(2, 1); + break; + case 'exp': + b = stack.pop(); + a = stack.pop(); + stack.push(Math.pow(a, b)); + break; + case 'false': + stack.push(false); + break; + case 'floor': + a = stack.pop(); + stack.push(Math.floor(a)); + break; + case 'ge': + b = stack.pop(); + a = stack.pop(); + stack.push(a >= b); + break; + case 'gt': + b = stack.pop(); + a = stack.pop(); + stack.push(a > b); + break; + case 'idiv': + b = stack.pop(); + a = stack.pop(); + stack.push(a / b | 0); + break; + case 'index': + a = stack.pop(); + stack.index(a); + break; + case 'le': + b = stack.pop(); + a = stack.pop(); + stack.push(a <= b); + break; + case 'ln': + a = stack.pop(); + stack.push(Math.log(a)); + break; + case 'log': + a = stack.pop(); + stack.push(Math.log(a) / Math.LN10); + break; + case 'lt': + b = stack.pop(); + a = stack.pop(); + stack.push(a < b); + break; + case 'mod': + b = stack.pop(); + a = stack.pop(); + stack.push(a % b); + break; + case 'mul': + b = stack.pop(); + a = stack.pop(); + stack.push(a * b); + break; + case 'ne': + b = stack.pop(); + a = stack.pop(); + stack.push(a !== b); + break; + case 'neg': + a = stack.pop(); + stack.push(-a); + break; + case 'not': + a = stack.pop(); + if (isBool(a)) { + stack.push(!a); + } else { + stack.push(~a); + } + break; + case 'or': + b = stack.pop(); + a = stack.pop(); + if (isBool(a) && isBool(b)) { + stack.push(a || b); + } else { + stack.push(a | b); + } + break; + case 'pop': + stack.pop(); + break; + case 'roll': + b = stack.pop(); + a = stack.pop(); + stack.roll(a, b); + break; + case 'round': + a = stack.pop(); + stack.push(Math.round(a)); + break; + case 'sin': + a = stack.pop(); + stack.push(Math.sin(a)); + break; + case 'sqrt': + a = stack.pop(); + stack.push(Math.sqrt(a)); + break; + case 'sub': + b = stack.pop(); + a = stack.pop(); + stack.push(a - b); + break; + case 'true': + stack.push(true); + break; + case 'truncate': + a = stack.pop(); + a = a < 0 ? Math.ceil(a) : Math.floor(a); + stack.push(a); + break; + case 'xor': + b = stack.pop(); + a = stack.pop(); + if (isBool(a) && isBool(b)) { + stack.push(a !== b); + } else { + stack.push(a ^ b); + } + break; + default: + error('Unknown operator ' + operator); + break; + } + } + return stack.stack; + } + }; + return PostScriptEvaluator; + }(); + var PostScriptCompiler = function PostScriptCompilerClosure() { + function AstNode(type) { + this.type = type; + } + AstNode.prototype.visit = function (visitor) { + throw new Error('abstract method'); + }; + function AstArgument(index, min, max) { + AstNode.call(this, 'args'); + this.index = index; + this.min = min; + this.max = max; + } + AstArgument.prototype = Object.create(AstNode.prototype); + AstArgument.prototype.visit = function (visitor) { + visitor.visitArgument(this); + }; + function AstLiteral(number) { + AstNode.call(this, 'literal'); + this.number = number; + this.min = number; + this.max = number; + } + AstLiteral.prototype = Object.create(AstNode.prototype); + AstLiteral.prototype.visit = function (visitor) { + visitor.visitLiteral(this); + }; + function AstBinaryOperation(op, arg1, arg2, min, max) { + AstNode.call(this, 'binary'); + this.op = op; + this.arg1 = arg1; + this.arg2 = arg2; + this.min = min; + this.max = max; + } + AstBinaryOperation.prototype = Object.create(AstNode.prototype); + AstBinaryOperation.prototype.visit = function (visitor) { + visitor.visitBinaryOperation(this); + }; + function AstMin(arg, max) { + AstNode.call(this, 'max'); + this.arg = arg; + this.min = arg.min; + this.max = max; + } + AstMin.prototype = Object.create(AstNode.prototype); + AstMin.prototype.visit = function (visitor) { + visitor.visitMin(this); + }; + function AstVariable(index, min, max) { + AstNode.call(this, 'var'); + this.index = index; + this.min = min; + this.max = max; + } + AstVariable.prototype = Object.create(AstNode.prototype); + AstVariable.prototype.visit = function (visitor) { + visitor.visitVariable(this); + }; + function AstVariableDefinition(variable, arg) { + AstNode.call(this, 'definition'); + this.variable = variable; + this.arg = arg; + } + AstVariableDefinition.prototype = Object.create(AstNode.prototype); + AstVariableDefinition.prototype.visit = function (visitor) { + visitor.visitVariableDefinition(this); + }; + function ExpressionBuilderVisitor() { + this.parts = []; + } + ExpressionBuilderVisitor.prototype = { + visitArgument: function (arg) { + this.parts.push('Math.max(', arg.min, ', Math.min(', arg.max, ', src[srcOffset + ', arg.index, ']))'); + }, + visitVariable: function (variable) { + this.parts.push('v', variable.index); + }, + visitLiteral: function (literal) { + this.parts.push(literal.number); + }, + visitBinaryOperation: function (operation) { + this.parts.push('('); + operation.arg1.visit(this); + this.parts.push(' ', operation.op, ' '); + operation.arg2.visit(this); + this.parts.push(')'); + }, + visitVariableDefinition: function (definition) { + this.parts.push('var '); + definition.variable.visit(this); + this.parts.push(' = '); + definition.arg.visit(this); + this.parts.push(';'); + }, + visitMin: function (max) { + this.parts.push('Math.min('); + max.arg.visit(this); + this.parts.push(', ', max.max, ')'); + }, + toString: function () { + return this.parts.join(''); + } + }; + function buildAddOperation(num1, num2) { + if (num2.type === 'literal' && num2.number === 0) { + return num1; + } + if (num1.type === 'literal' && num1.number === 0) { + return num2; + } + if (num2.type === 'literal' && num1.type === 'literal') { + return new AstLiteral(num1.number + num2.number); + } + return new AstBinaryOperation('+', num1, num2, num1.min + num2.min, num1.max + num2.max); + } + function buildMulOperation(num1, num2) { + if (num2.type === 'literal') { + if (num2.number === 0) { + return new AstLiteral(0); + } else if (num2.number === 1) { + return num1; + } else if (num1.type === 'literal') { + return new AstLiteral(num1.number * num2.number); + } + } + if (num1.type === 'literal') { + if (num1.number === 0) { + return new AstLiteral(0); + } else if (num1.number === 1) { + return num2; + } + } + var min = Math.min(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max); + var max = Math.max(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max); + return new AstBinaryOperation('*', num1, num2, min, max); + } + function buildSubOperation(num1, num2) { + if (num2.type === 'literal') { + if (num2.number === 0) { + return num1; + } else if (num1.type === 'literal') { + return new AstLiteral(num1.number - num2.number); + } + } + if (num2.type === 'binary' && num2.op === '-' && num1.type === 'literal' && num1.number === 1 && num2.arg1.type === 'literal' && num2.arg1.number === 1) { + return num2.arg2; + } + return new AstBinaryOperation('-', num1, num2, num1.min - num2.max, num1.max - num2.min); + } + function buildMinOperation(num1, max) { + if (num1.min >= max) { + return new AstLiteral(max); + } else if (num1.max <= max) { + return num1; + } + return new AstMin(num1, max); + } + function PostScriptCompiler() { + } + PostScriptCompiler.prototype = { + compile: function PostScriptCompiler_compile(code, domain, range) { + var stack = []; + var i, ii; + var instructions = []; + var inputSize = domain.length >> 1, outputSize = range.length >> 1; + var lastRegister = 0; + var n, j; + var num1, num2, ast1, ast2, tmpVar, item; + for (i = 0; i < inputSize; i++) { + stack.push(new AstArgument(i, domain[i * 2], domain[i * 2 + 1])); + } + for (i = 0, ii = code.length; i < ii; i++) { + item = code[i]; + if (typeof item === 'number') { + stack.push(new AstLiteral(item)); + continue; + } + switch (item) { + case 'add': + if (stack.length < 2) { + return null; + } + num2 = stack.pop(); + num1 = stack.pop(); + stack.push(buildAddOperation(num1, num2)); + break; + case 'cvr': + if (stack.length < 1) { + return null; + } + break; + case 'mul': + if (stack.length < 2) { + return null; + } + num2 = stack.pop(); + num1 = stack.pop(); + stack.push(buildMulOperation(num1, num2)); + break; + case 'sub': + if (stack.length < 2) { + return null; + } + num2 = stack.pop(); + num1 = stack.pop(); + stack.push(buildSubOperation(num1, num2)); + break; + case 'exch': + if (stack.length < 2) { + return null; + } + ast1 = stack.pop(); + ast2 = stack.pop(); + stack.push(ast1, ast2); + break; + case 'pop': + if (stack.length < 1) { + return null; + } + stack.pop(); + break; + case 'index': + if (stack.length < 1) { + return null; + } + num1 = stack.pop(); + if (num1.type !== 'literal') { + return null; + } + n = num1.number; + if (n < 0 || (n | 0) !== n || stack.length < n) { + return null; + } + ast1 = stack[stack.length - n - 1]; + if (ast1.type === 'literal' || ast1.type === 'var') { + stack.push(ast1); + break; + } + tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max); + stack[stack.length - n - 1] = tmpVar; + stack.push(tmpVar); + instructions.push(new AstVariableDefinition(tmpVar, ast1)); + break; + case 'dup': + if (stack.length < 1) { + return null; + } + if (typeof code[i + 1] === 'number' && code[i + 2] === 'gt' && code[i + 3] === i + 7 && code[i + 4] === 'jz' && code[i + 5] === 'pop' && code[i + 6] === code[i + 1]) { + num1 = stack.pop(); + stack.push(buildMinOperation(num1, code[i + 1])); + i += 6; + break; + } + ast1 = stack[stack.length - 1]; + if (ast1.type === 'literal' || ast1.type === 'var') { + stack.push(ast1); + break; + } + tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max); + stack[stack.length - 1] = tmpVar; + stack.push(tmpVar); + instructions.push(new AstVariableDefinition(tmpVar, ast1)); + break; + case 'roll': + if (stack.length < 2) { + return null; + } + num2 = stack.pop(); + num1 = stack.pop(); + if (num2.type !== 'literal' || num1.type !== 'literal') { + return null; + } + j = num2.number; + n = num1.number; + if (n <= 0 || (n | 0) !== n || (j | 0) !== j || stack.length < n) { + return null; + } + j = (j % n + n) % n; + if (j === 0) { + break; + } + Array.prototype.push.apply(stack, stack.splice(stack.length - n, n - j)); + break; + default: + return null; + } + } + if (stack.length !== outputSize) { + return null; + } + var result = []; + instructions.forEach(function (instruction) { + var statementBuilder = new ExpressionBuilderVisitor(); + instruction.visit(statementBuilder); + result.push(statementBuilder.toString()); + }); + stack.forEach(function (expr, i) { + var statementBuilder = new ExpressionBuilderVisitor(); + expr.visit(statementBuilder); + var min = range[i * 2], max = range[i * 2 + 1]; + var out = [statementBuilder.toString()]; + if (min > expr.min) { + out.unshift('Math.max(', min, ', '); + out.push(')'); + } + if (max < expr.max) { + out.unshift('Math.min(', max, ', '); + out.push(')'); + } + out.unshift('dest[destOffset + ', i, '] = '); + out.push(';'); + result.push(out.join('')); + }); + return result.join('\n'); + } + }; + return PostScriptCompiler; + }(); + exports.isPDFFunction = isPDFFunction; + exports.PDFFunction = PDFFunction; + exports.PostScriptEvaluator = PostScriptEvaluator; + exports.PostScriptCompiler = PostScriptCompiler; + })); + (function (root, factory) { + factory(root.pdfjsCoreColorSpace = {}, root.pdfjsSharedUtil, root.pdfjsCorePrimitives, root.pdfjsCoreFunction); + }(this, function (exports, sharedUtil, corePrimitives, coreFunction) { + var error = sharedUtil.error; + var info = sharedUtil.info; + var isArray = sharedUtil.isArray; + var isString = sharedUtil.isString; + var shadow = sharedUtil.shadow; + var warn = sharedUtil.warn; + var isDict = corePrimitives.isDict; + var isName = corePrimitives.isName; + var isStream = corePrimitives.isStream; + var PDFFunction = coreFunction.PDFFunction; + var ColorSpace = function ColorSpaceClosure() { + function resizeRgbImage(src, bpc, w1, h1, w2, h2, alpha01, dest) { + var COMPONENTS = 3; + alpha01 = alpha01 !== 1 ? 0 : alpha01; + var xRatio = w1 / w2; + var yRatio = h1 / h2; + var i, j, py, newIndex = 0, oldIndex; + var xScaled = new Uint16Array(w2); + var w1Scanline = w1 * COMPONENTS; + for (i = 0; i < w2; i++) { + xScaled[i] = Math.floor(i * xRatio) * COMPONENTS; + } + for (i = 0; i < h2; i++) { + py = Math.floor(i * yRatio) * w1Scanline; + for (j = 0; j < w2; j++) { + oldIndex = py + xScaled[j]; + dest[newIndex++] = src[oldIndex++]; + dest[newIndex++] = src[oldIndex++]; + dest[newIndex++] = src[oldIndex++]; + newIndex += alpha01; + } + } + } + function ColorSpace() { + error('should not call ColorSpace constructor'); + } + ColorSpace.prototype = { + getRgb: function ColorSpace_getRgb(src, srcOffset) { + var rgb = new Uint8Array(3); + this.getRgbItem(src, srcOffset, rgb, 0); + return rgb; + }, + getRgbItem: function ColorSpace_getRgbItem(src, srcOffset, dest, destOffset) { + error('Should not call ColorSpace.getRgbItem'); + }, + getRgbBuffer: function ColorSpace_getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { + error('Should not call ColorSpace.getRgbBuffer'); + }, + getOutputLength: function ColorSpace_getOutputLength(inputLength, alpha01) { + error('Should not call ColorSpace.getOutputLength'); + }, + isPassthrough: function ColorSpace_isPassthrough(bits) { + return false; + }, + fillRgb: function ColorSpace_fillRgb(dest, originalWidth, originalHeight, width, height, actualHeight, bpc, comps, alpha01) { + var count = originalWidth * originalHeight; + var rgbBuf = null; + var numComponentColors = 1 << bpc; + var needsResizing = originalHeight !== height || originalWidth !== width; + var i, ii; + if (this.isPassthrough(bpc)) { + rgbBuf = comps; + } else if (this.numComps === 1 && count > numComponentColors && this.name !== 'DeviceGray' && this.name !== 'DeviceRGB') { + var allColors = bpc <= 8 ? new Uint8Array(numComponentColors) : new Uint16Array(numComponentColors); + var key; + for (i = 0; i < numComponentColors; i++) { + allColors[i] = i; + } + var colorMap = new Uint8Array(numComponentColors * 3); + this.getRgbBuffer(allColors, 0, numComponentColors, colorMap, 0, bpc, 0); + var destPos, rgbPos; + if (!needsResizing) { + destPos = 0; + for (i = 0; i < count; ++i) { + key = comps[i] * 3; + dest[destPos++] = colorMap[key]; + dest[destPos++] = colorMap[key + 1]; + dest[destPos++] = colorMap[key + 2]; + destPos += alpha01; + } + } else { + rgbBuf = new Uint8Array(count * 3); + rgbPos = 0; + for (i = 0; i < count; ++i) { + key = comps[i] * 3; + rgbBuf[rgbPos++] = colorMap[key]; + rgbBuf[rgbPos++] = colorMap[key + 1]; + rgbBuf[rgbPos++] = colorMap[key + 2]; + } + } + } else { + if (!needsResizing) { + this.getRgbBuffer(comps, 0, width * actualHeight, dest, 0, bpc, alpha01); + } else { + rgbBuf = new Uint8Array(count * 3); + this.getRgbBuffer(comps, 0, count, rgbBuf, 0, bpc, 0); + } + } + if (rgbBuf) { + if (needsResizing) { + resizeRgbImage(rgbBuf, bpc, originalWidth, originalHeight, width, height, alpha01, dest); + } else { + rgbPos = 0; + destPos = 0; + for (i = 0, ii = width * actualHeight; i < ii; i++) { + dest[destPos++] = rgbBuf[rgbPos++]; + dest[destPos++] = rgbBuf[rgbPos++]; + dest[destPos++] = rgbBuf[rgbPos++]; + destPos += alpha01; + } + } + } + }, + usesZeroToOneRange: true + }; + ColorSpace.parse = function ColorSpace_parse(cs, xref, res) { + var IR = ColorSpace.parseToIR(cs, xref, res); + if (IR instanceof AlternateCS) { + return IR; + } + return ColorSpace.fromIR(IR); + }; + ColorSpace.fromIR = function ColorSpace_fromIR(IR) { + var name = isArray(IR) ? IR[0] : IR; + var whitePoint, blackPoint, gamma; + switch (name) { + case 'DeviceGrayCS': + return this.singletons.gray; + case 'DeviceRgbCS': + return this.singletons.rgb; + case 'DeviceCmykCS': + return this.singletons.cmyk; + case 'CalGrayCS': + whitePoint = IR[1]; + blackPoint = IR[2]; + gamma = IR[3]; + return new CalGrayCS(whitePoint, blackPoint, gamma); + case 'CalRGBCS': + whitePoint = IR[1]; + blackPoint = IR[2]; + gamma = IR[3]; + var matrix = IR[4]; + return new CalRGBCS(whitePoint, blackPoint, gamma, matrix); + case 'PatternCS': + var basePatternCS = IR[1]; + if (basePatternCS) { + basePatternCS = ColorSpace.fromIR(basePatternCS); + } + return new PatternCS(basePatternCS); + case 'IndexedCS': + var baseIndexedCS = IR[1]; + var hiVal = IR[2]; + var lookup = IR[3]; + return new IndexedCS(ColorSpace.fromIR(baseIndexedCS), hiVal, lookup); + case 'AlternateCS': + var numComps = IR[1]; + var alt = IR[2]; + var tintFnIR = IR[3]; + return new AlternateCS(numComps, ColorSpace.fromIR(alt), PDFFunction.fromIR(tintFnIR)); + case 'LabCS': + whitePoint = IR[1]; + blackPoint = IR[2]; + var range = IR[3]; + return new LabCS(whitePoint, blackPoint, range); + default: + error('Unknown name ' + name); + } + return null; + }; + ColorSpace.parseToIR = function ColorSpace_parseToIR(cs, xref, res) { + if (isName(cs)) { + var colorSpaces = res.get('ColorSpace'); + if (isDict(colorSpaces)) { + var refcs = colorSpaces.get(cs.name); + if (refcs) { + cs = refcs; + } + } + } + cs = xref.fetchIfRef(cs); + if (isName(cs)) { + switch (cs.name) { + case 'DeviceGray': + case 'G': + return 'DeviceGrayCS'; + case 'DeviceRGB': + case 'RGB': + return 'DeviceRgbCS'; + case 'DeviceCMYK': + case 'CMYK': + return 'DeviceCmykCS'; + case 'Pattern': + return [ + 'PatternCS', + null + ]; + default: + error('unrecognized colorspace ' + cs.name); + } + } else if (isArray(cs)) { + var mode = xref.fetchIfRef(cs[0]).name; + var numComps, params, alt, whitePoint, blackPoint, gamma; + switch (mode) { + case 'DeviceGray': + case 'G': + return 'DeviceGrayCS'; + case 'DeviceRGB': + case 'RGB': + return 'DeviceRgbCS'; + case 'DeviceCMYK': + case 'CMYK': + return 'DeviceCmykCS'; + case 'CalGray': + params = xref.fetchIfRef(cs[1]); + whitePoint = params.getArray('WhitePoint'); + blackPoint = params.getArray('BlackPoint'); + gamma = params.get('Gamma'); + return [ + 'CalGrayCS', + whitePoint, + blackPoint, + gamma + ]; + case 'CalRGB': + params = xref.fetchIfRef(cs[1]); + whitePoint = params.getArray('WhitePoint'); + blackPoint = params.getArray('BlackPoint'); + gamma = params.getArray('Gamma'); + var matrix = params.getArray('Matrix'); + return [ + 'CalRGBCS', + whitePoint, + blackPoint, + gamma, + matrix + ]; + case 'ICCBased': + var stream = xref.fetchIfRef(cs[1]); + var dict = stream.dict; + numComps = dict.get('N'); + alt = dict.get('Alternate'); + if (alt) { + var altIR = ColorSpace.parseToIR(alt, xref, res); + var altCS = ColorSpace.fromIR(altIR); + if (altCS.numComps === numComps) { + return altIR; + } + warn('ICCBased color space: Ignoring incorrect /Alternate entry.'); + } + if (numComps === 1) { + return 'DeviceGrayCS'; + } else if (numComps === 3) { + return 'DeviceRgbCS'; + } else if (numComps === 4) { + return 'DeviceCmykCS'; + } + break; + case 'Pattern': + var basePatternCS = cs[1] || null; + if (basePatternCS) { + basePatternCS = ColorSpace.parseToIR(basePatternCS, xref, res); + } + return [ + 'PatternCS', + basePatternCS + ]; + case 'Indexed': + case 'I': + var baseIndexedCS = ColorSpace.parseToIR(cs[1], xref, res); + var hiVal = xref.fetchIfRef(cs[2]) + 1; + var lookup = xref.fetchIfRef(cs[3]); + if (isStream(lookup)) { + lookup = lookup.getBytes(); + } + return [ + 'IndexedCS', + baseIndexedCS, + hiVal, + lookup + ]; + case 'Separation': + case 'DeviceN': + var name = xref.fetchIfRef(cs[1]); + numComps = isArray(name) ? name.length : 1; + alt = ColorSpace.parseToIR(cs[2], xref, res); + var tintFnIR = PDFFunction.getIR(xref, xref.fetchIfRef(cs[3])); + return [ + 'AlternateCS', + numComps, + alt, + tintFnIR + ]; + case 'Lab': + params = xref.fetchIfRef(cs[1]); + whitePoint = params.getArray('WhitePoint'); + blackPoint = params.getArray('BlackPoint'); + var range = params.getArray('Range'); + return [ + 'LabCS', + whitePoint, + blackPoint, + range + ]; + default: + error('unimplemented color space object "' + mode + '"'); + } + } else { + error('unrecognized color space object: "' + cs + '"'); + } + return null; + }; + ColorSpace.isDefaultDecode = function ColorSpace_isDefaultDecode(decode, n) { + if (!isArray(decode)) { + return true; + } + if (n * 2 !== decode.length) { + warn('The decode map is not the correct length'); + return true; + } + for (var i = 0, ii = decode.length; i < ii; i += 2) { + if (decode[i] !== 0 || decode[i + 1] !== 1) { + return false; + } + } + return true; + }; + ColorSpace.singletons = { + get gray() { + return shadow(this, 'gray', new DeviceGrayCS()); + }, + get rgb() { + return shadow(this, 'rgb', new DeviceRgbCS()); + }, + get cmyk() { + return shadow(this, 'cmyk', new DeviceCmykCS()); + } + }; + return ColorSpace; + }(); + var AlternateCS = function AlternateCSClosure() { + function AlternateCS(numComps, base, tintFn) { + this.name = 'Alternate'; + this.numComps = numComps; + this.defaultColor = new Float32Array(numComps); + for (var i = 0; i < numComps; ++i) { + this.defaultColor[i] = 1; + } + this.base = base; + this.tintFn = tintFn; + this.tmpBuf = new Float32Array(base.numComps); + } + AlternateCS.prototype = { + getRgb: ColorSpace.prototype.getRgb, + getRgbItem: function AlternateCS_getRgbItem(src, srcOffset, dest, destOffset) { + var tmpBuf = this.tmpBuf; + this.tintFn(src, srcOffset, tmpBuf, 0); + this.base.getRgbItem(tmpBuf, 0, dest, destOffset); + }, + getRgbBuffer: function AlternateCS_getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { + var tintFn = this.tintFn; + var base = this.base; + var scale = 1 / ((1 << bits) - 1); + var baseNumComps = base.numComps; + var usesZeroToOneRange = base.usesZeroToOneRange; + var isPassthrough = (base.isPassthrough(8) || !usesZeroToOneRange) && alpha01 === 0; + var pos = isPassthrough ? destOffset : 0; + var baseBuf = isPassthrough ? dest : new Uint8Array(baseNumComps * count); + var numComps = this.numComps; + var scaled = new Float32Array(numComps); + var tinted = new Float32Array(baseNumComps); + var i, j; + for (i = 0; i < count; i++) { + for (j = 0; j < numComps; j++) { + scaled[j] = src[srcOffset++] * scale; + } + tintFn(scaled, 0, tinted, 0); + if (usesZeroToOneRange) { + for (j = 0; j < baseNumComps; j++) { + baseBuf[pos++] = tinted[j] * 255; + } + } else { + base.getRgbItem(tinted, 0, baseBuf, pos); + pos += baseNumComps; + } + } + if (!isPassthrough) { + base.getRgbBuffer(baseBuf, 0, count, dest, destOffset, 8, alpha01); + } + }, + getOutputLength: function AlternateCS_getOutputLength(inputLength, alpha01) { + return this.base.getOutputLength(inputLength * this.base.numComps / this.numComps, alpha01); + }, + isPassthrough: ColorSpace.prototype.isPassthrough, + fillRgb: ColorSpace.prototype.fillRgb, + isDefaultDecode: function AlternateCS_isDefaultDecode(decodeMap) { + return ColorSpace.isDefaultDecode(decodeMap, this.numComps); + }, + usesZeroToOneRange: true + }; + return AlternateCS; + }(); + var PatternCS = function PatternCSClosure() { + function PatternCS(baseCS) { + this.name = 'Pattern'; + this.base = baseCS; + } + PatternCS.prototype = {}; + return PatternCS; + }(); + var IndexedCS = function IndexedCSClosure() { + function IndexedCS(base, highVal, lookup) { + this.name = 'Indexed'; + this.numComps = 1; + this.defaultColor = new Uint8Array(this.numComps); + this.base = base; + this.highVal = highVal; + var baseNumComps = base.numComps; + var length = baseNumComps * highVal; + if (isStream(lookup)) { + this.lookup = new Uint8Array(length); + var bytes = lookup.getBytes(length); + this.lookup.set(bytes); + } else if (isString(lookup)) { + this.lookup = new Uint8Array(length); + for (var i = 0; i < length; ++i) { + this.lookup[i] = lookup.charCodeAt(i); + } + } else if (lookup instanceof Uint8Array || lookup instanceof Array) { + this.lookup = lookup; + } else { + error('Unrecognized lookup table: ' + lookup); + } + } + IndexedCS.prototype = { + getRgb: ColorSpace.prototype.getRgb, + getRgbItem: function IndexedCS_getRgbItem(src, srcOffset, dest, destOffset) { + var numComps = this.base.numComps; + var start = src[srcOffset] * numComps; + this.base.getRgbItem(this.lookup, start, dest, destOffset); + }, + getRgbBuffer: function IndexedCS_getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { + var base = this.base; + var numComps = base.numComps; + var outputDelta = base.getOutputLength(numComps, alpha01); + var lookup = this.lookup; + for (var i = 0; i < count; ++i) { + var lookupPos = src[srcOffset++] * numComps; + base.getRgbBuffer(lookup, lookupPos, 1, dest, destOffset, 8, alpha01); + destOffset += outputDelta; + } + }, + getOutputLength: function IndexedCS_getOutputLength(inputLength, alpha01) { + return this.base.getOutputLength(inputLength * this.base.numComps, alpha01); + }, + isPassthrough: ColorSpace.prototype.isPassthrough, + fillRgb: ColorSpace.prototype.fillRgb, + isDefaultDecode: function IndexedCS_isDefaultDecode(decodeMap) { + return true; + }, + usesZeroToOneRange: true + }; + return IndexedCS; + }(); + var DeviceGrayCS = function DeviceGrayCSClosure() { + function DeviceGrayCS() { + this.name = 'DeviceGray'; + this.numComps = 1; + this.defaultColor = new Float32Array(this.numComps); + } + DeviceGrayCS.prototype = { + getRgb: ColorSpace.prototype.getRgb, + getRgbItem: function DeviceGrayCS_getRgbItem(src, srcOffset, dest, destOffset) { + var c = src[srcOffset] * 255 | 0; + c = c < 0 ? 0 : c > 255 ? 255 : c; + dest[destOffset] = dest[destOffset + 1] = dest[destOffset + 2] = c; + }, + getRgbBuffer: function DeviceGrayCS_getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { + var scale = 255 / ((1 << bits) - 1); + var j = srcOffset, q = destOffset; + for (var i = 0; i < count; ++i) { + var c = scale * src[j++] | 0; + dest[q++] = c; + dest[q++] = c; + dest[q++] = c; + q += alpha01; + } + }, + getOutputLength: function DeviceGrayCS_getOutputLength(inputLength, alpha01) { + return inputLength * (3 + alpha01); + }, + isPassthrough: ColorSpace.prototype.isPassthrough, + fillRgb: ColorSpace.prototype.fillRgb, + isDefaultDecode: function DeviceGrayCS_isDefaultDecode(decodeMap) { + return ColorSpace.isDefaultDecode(decodeMap, this.numComps); + }, + usesZeroToOneRange: true + }; + return DeviceGrayCS; + }(); + var DeviceRgbCS = function DeviceRgbCSClosure() { + function DeviceRgbCS() { + this.name = 'DeviceRGB'; + this.numComps = 3; + this.defaultColor = new Float32Array(this.numComps); + } + DeviceRgbCS.prototype = { + getRgb: ColorSpace.prototype.getRgb, + getRgbItem: function DeviceRgbCS_getRgbItem(src, srcOffset, dest, destOffset) { + var r = src[srcOffset] * 255 | 0; + var g = src[srcOffset + 1] * 255 | 0; + var b = src[srcOffset + 2] * 255 | 0; + dest[destOffset] = r < 0 ? 0 : r > 255 ? 255 : r; + dest[destOffset + 1] = g < 0 ? 0 : g > 255 ? 255 : g; + dest[destOffset + 2] = b < 0 ? 0 : b > 255 ? 255 : b; + }, + getRgbBuffer: function DeviceRgbCS_getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { + if (bits === 8 && alpha01 === 0) { + dest.set(src.subarray(srcOffset, srcOffset + count * 3), destOffset); + return; + } + var scale = 255 / ((1 << bits) - 1); + var j = srcOffset, q = destOffset; + for (var i = 0; i < count; ++i) { + dest[q++] = scale * src[j++] | 0; + dest[q++] = scale * src[j++] | 0; + dest[q++] = scale * src[j++] | 0; + q += alpha01; + } + }, + getOutputLength: function DeviceRgbCS_getOutputLength(inputLength, alpha01) { + return inputLength * (3 + alpha01) / 3 | 0; + }, + isPassthrough: function DeviceRgbCS_isPassthrough(bits) { + return bits === 8; + }, + fillRgb: ColorSpace.prototype.fillRgb, + isDefaultDecode: function DeviceRgbCS_isDefaultDecode(decodeMap) { + return ColorSpace.isDefaultDecode(decodeMap, this.numComps); + }, + usesZeroToOneRange: true + }; + return DeviceRgbCS; + }(); + var DeviceCmykCS = function DeviceCmykCSClosure() { + function convertToRgb(src, srcOffset, srcScale, dest, destOffset) { + var c = src[srcOffset + 0] * srcScale; + var m = src[srcOffset + 1] * srcScale; + var y = src[srcOffset + 2] * srcScale; + var k = src[srcOffset + 3] * srcScale; + var r = c * (-4.387332384609988 * c + 54.48615194189176 * m + 18.82290502165302 * y + 212.25662451639585 * k + -285.2331026137004) + m * (1.7149763477362134 * m - 5.6096736904047315 * y + -17.873870861415444 * k - 5.497006427196366) + y * (-2.5217340131683033 * y - 21.248923337353073 * k + 17.5119270841813) + k * (-21.86122147463605 * k - 189.48180835922747) + 255 | 0; + var g = c * (8.841041422036149 * c + 60.118027045597366 * m + 6.871425592049007 * y + 31.159100130055922 * k + -79.2970844816548) + m * (-15.310361306967817 * m + 17.575251261109482 * y + 131.35250912493976 * k - 190.9453302588951) + y * (4.444339102852739 * y + 9.8632861493405 * k - 24.86741582555878) + k * (-20.737325471181034 * k - 187.80453709719578) + 255 | 0; + var b = c * (0.8842522430003296 * c + 8.078677503112928 * m + 30.89978309703729 * y - 0.23883238689178934 * k + -14.183576799673286) + m * (10.49593273432072 * m + 63.02378494754052 * y + 50.606957656360734 * k - 112.23884253719248) + y * (0.03296041114873217 * y + 115.60384449646641 * k + -193.58209356861505) + k * (-22.33816807309886 * k - 180.12613974708367) + 255 | 0; + dest[destOffset] = r > 255 ? 255 : r < 0 ? 0 : r; + dest[destOffset + 1] = g > 255 ? 255 : g < 0 ? 0 : g; + dest[destOffset + 2] = b > 255 ? 255 : b < 0 ? 0 : b; + } + function DeviceCmykCS() { + this.name = 'DeviceCMYK'; + this.numComps = 4; + this.defaultColor = new Float32Array(this.numComps); + this.defaultColor[3] = 1; + } + DeviceCmykCS.prototype = { + getRgb: ColorSpace.prototype.getRgb, + getRgbItem: function DeviceCmykCS_getRgbItem(src, srcOffset, dest, destOffset) { + convertToRgb(src, srcOffset, 1, dest, destOffset); + }, + getRgbBuffer: function DeviceCmykCS_getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { + var scale = 1 / ((1 << bits) - 1); + for (var i = 0; i < count; i++) { + convertToRgb(src, srcOffset, scale, dest, destOffset); + srcOffset += 4; + destOffset += 3 + alpha01; + } + }, + getOutputLength: function DeviceCmykCS_getOutputLength(inputLength, alpha01) { + return inputLength / 4 * (3 + alpha01) | 0; + }, + isPassthrough: ColorSpace.prototype.isPassthrough, + fillRgb: ColorSpace.prototype.fillRgb, + isDefaultDecode: function DeviceCmykCS_isDefaultDecode(decodeMap) { + return ColorSpace.isDefaultDecode(decodeMap, this.numComps); + }, + usesZeroToOneRange: true + }; + return DeviceCmykCS; + }(); + var CalGrayCS = function CalGrayCSClosure() { + function CalGrayCS(whitePoint, blackPoint, gamma) { + this.name = 'CalGray'; + this.numComps = 1; + this.defaultColor = new Float32Array(this.numComps); + if (!whitePoint) { + error('WhitePoint missing - required for color space CalGray'); + } + blackPoint = blackPoint || [ + 0, + 0, + 0 + ]; + gamma = gamma || 1; + this.XW = whitePoint[0]; + this.YW = whitePoint[1]; + this.ZW = whitePoint[2]; + this.XB = blackPoint[0]; + this.YB = blackPoint[1]; + this.ZB = blackPoint[2]; + this.G = gamma; + if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) { + error('Invalid WhitePoint components for ' + this.name + ', no fallback available'); + } + if (this.XB < 0 || this.YB < 0 || this.ZB < 0) { + info('Invalid BlackPoint for ' + this.name + ', falling back to default'); + this.XB = this.YB = this.ZB = 0; + } + if (this.XB !== 0 || this.YB !== 0 || this.ZB !== 0) { + warn(this.name + ', BlackPoint: XB: ' + this.XB + ', YB: ' + this.YB + ', ZB: ' + this.ZB + ', only default values are supported.'); + } + if (this.G < 1) { + info('Invalid Gamma: ' + this.G + ' for ' + this.name + ', falling back to default'); + this.G = 1; + } + } + function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) { + var A = src[srcOffset] * scale; + var AG = Math.pow(A, cs.G); + var L = cs.YW * AG; + var val = Math.max(295.8 * Math.pow(L, 0.333333333333333333) - 40.8, 0) | 0; + dest[destOffset] = val; + dest[destOffset + 1] = val; + dest[destOffset + 2] = val; + } + CalGrayCS.prototype = { + getRgb: ColorSpace.prototype.getRgb, + getRgbItem: function CalGrayCS_getRgbItem(src, srcOffset, dest, destOffset) { + convertToRgb(this, src, srcOffset, dest, destOffset, 1); + }, + getRgbBuffer: function CalGrayCS_getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { + var scale = 1 / ((1 << bits) - 1); + for (var i = 0; i < count; ++i) { + convertToRgb(this, src, srcOffset, dest, destOffset, scale); + srcOffset += 1; + destOffset += 3 + alpha01; + } + }, + getOutputLength: function CalGrayCS_getOutputLength(inputLength, alpha01) { + return inputLength * (3 + alpha01); + }, + isPassthrough: ColorSpace.prototype.isPassthrough, + fillRgb: ColorSpace.prototype.fillRgb, + isDefaultDecode: function CalGrayCS_isDefaultDecode(decodeMap) { + return ColorSpace.isDefaultDecode(decodeMap, this.numComps); + }, + usesZeroToOneRange: true + }; + return CalGrayCS; + }(); + var CalRGBCS = function CalRGBCSClosure() { + var BRADFORD_SCALE_MATRIX = new Float32Array([ + 0.8951, + 0.2664, + -0.1614, + -0.7502, + 1.7135, + 0.0367, + 0.0389, + -0.0685, + 1.0296 + ]); + var BRADFORD_SCALE_INVERSE_MATRIX = new Float32Array([ + 0.9869929, + -0.1470543, + 0.1599627, + 0.4323053, + 0.5183603, + 0.0492912, + -0.0085287, + 0.0400428, + 0.9684867 + ]); + var SRGB_D65_XYZ_TO_RGB_MATRIX = new Float32Array([ + 3.2404542, + -1.5371385, + -0.4985314, + -0.9692660, + 1.8760108, + 0.0415560, + 0.0556434, + -0.2040259, + 1.0572252 + ]); + var FLAT_WHITEPOINT_MATRIX = new Float32Array([ + 1, + 1, + 1 + ]); + var tempNormalizeMatrix = new Float32Array(3); + var tempConvertMatrix1 = new Float32Array(3); + var tempConvertMatrix2 = new Float32Array(3); + var DECODE_L_CONSTANT = Math.pow((8 + 16) / 116, 3) / 8.0; + function CalRGBCS(whitePoint, blackPoint, gamma, matrix) { + this.name = 'CalRGB'; + this.numComps = 3; + this.defaultColor = new Float32Array(this.numComps); + if (!whitePoint) { + error('WhitePoint missing - required for color space CalRGB'); + } + blackPoint = blackPoint || new Float32Array(3); + gamma = gamma || new Float32Array([ + 1, + 1, + 1 + ]); + matrix = matrix || new Float32Array([ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1 + ]); + var XW = whitePoint[0]; + var YW = whitePoint[1]; + var ZW = whitePoint[2]; + this.whitePoint = whitePoint; + var XB = blackPoint[0]; + var YB = blackPoint[1]; + var ZB = blackPoint[2]; + this.blackPoint = blackPoint; + this.GR = gamma[0]; + this.GG = gamma[1]; + this.GB = gamma[2]; + this.MXA = matrix[0]; + this.MYA = matrix[1]; + this.MZA = matrix[2]; + this.MXB = matrix[3]; + this.MYB = matrix[4]; + this.MZB = matrix[5]; + this.MXC = matrix[6]; + this.MYC = matrix[7]; + this.MZC = matrix[8]; + if (XW < 0 || ZW < 0 || YW !== 1) { + error('Invalid WhitePoint components for ' + this.name + ', no fallback available'); + } + if (XB < 0 || YB < 0 || ZB < 0) { + info('Invalid BlackPoint for ' + this.name + ' [' + XB + ', ' + YB + ', ' + ZB + '], falling back to default'); + this.blackPoint = new Float32Array(3); + } + if (this.GR < 0 || this.GG < 0 || this.GB < 0) { + info('Invalid Gamma [' + this.GR + ', ' + this.GG + ', ' + this.GB + '] for ' + this.name + ', falling back to default'); + this.GR = this.GG = this.GB = 1; + } + if (this.MXA < 0 || this.MYA < 0 || this.MZA < 0 || this.MXB < 0 || this.MYB < 0 || this.MZB < 0 || this.MXC < 0 || this.MYC < 0 || this.MZC < 0) { + info('Invalid Matrix for ' + this.name + ' [' + this.MXA + ', ' + this.MYA + ', ' + this.MZA + this.MXB + ', ' + this.MYB + ', ' + this.MZB + this.MXC + ', ' + this.MYC + ', ' + this.MZC + '], falling back to default'); + this.MXA = this.MYB = this.MZC = 1; + this.MXB = this.MYA = this.MZA = this.MXC = this.MYC = this.MZB = 0; + } + } + function matrixProduct(a, b, result) { + result[0] = a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; + result[1] = a[3] * b[0] + a[4] * b[1] + a[5] * b[2]; + result[2] = a[6] * b[0] + a[7] * b[1] + a[8] * b[2]; + } + function convertToFlat(sourceWhitePoint, LMS, result) { + result[0] = LMS[0] * 1 / sourceWhitePoint[0]; + result[1] = LMS[1] * 1 / sourceWhitePoint[1]; + result[2] = LMS[2] * 1 / sourceWhitePoint[2]; + } + function convertToD65(sourceWhitePoint, LMS, result) { + var D65X = 0.95047; + var D65Y = 1; + var D65Z = 1.08883; + result[0] = LMS[0] * D65X / sourceWhitePoint[0]; + result[1] = LMS[1] * D65Y / sourceWhitePoint[1]; + result[2] = LMS[2] * D65Z / sourceWhitePoint[2]; + } + function sRGBTransferFunction(color) { + if (color <= 0.0031308) { + return adjustToRange(0, 1, 12.92 * color); + } + return adjustToRange(0, 1, (1 + 0.055) * Math.pow(color, 1 / 2.4) - 0.055); + } + function adjustToRange(min, max, value) { + return Math.max(min, Math.min(max, value)); + } + function decodeL(L) { + if (L < 0) { + return -decodeL(-L); + } + if (L > 8.0) { + return Math.pow((L + 16) / 116, 3); + } + return L * DECODE_L_CONSTANT; + } + function compensateBlackPoint(sourceBlackPoint, XYZ_Flat, result) { + if (sourceBlackPoint[0] === 0 && sourceBlackPoint[1] === 0 && sourceBlackPoint[2] === 0) { + result[0] = XYZ_Flat[0]; + result[1] = XYZ_Flat[1]; + result[2] = XYZ_Flat[2]; + return; + } + var zeroDecodeL = decodeL(0); + var X_DST = zeroDecodeL; + var X_SRC = decodeL(sourceBlackPoint[0]); + var Y_DST = zeroDecodeL; + var Y_SRC = decodeL(sourceBlackPoint[1]); + var Z_DST = zeroDecodeL; + var Z_SRC = decodeL(sourceBlackPoint[2]); + var X_Scale = (1 - X_DST) / (1 - X_SRC); + var X_Offset = 1 - X_Scale; + var Y_Scale = (1 - Y_DST) / (1 - Y_SRC); + var Y_Offset = 1 - Y_Scale; + var Z_Scale = (1 - Z_DST) / (1 - Z_SRC); + var Z_Offset = 1 - Z_Scale; + result[0] = XYZ_Flat[0] * X_Scale + X_Offset; + result[1] = XYZ_Flat[1] * Y_Scale + Y_Offset; + result[2] = XYZ_Flat[2] * Z_Scale + Z_Offset; + } + function normalizeWhitePointToFlat(sourceWhitePoint, XYZ_In, result) { + if (sourceWhitePoint[0] === 1 && sourceWhitePoint[2] === 1) { + result[0] = XYZ_In[0]; + result[1] = XYZ_In[1]; + result[2] = XYZ_In[2]; + return; + } + var LMS = result; + matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS); + var LMS_Flat = tempNormalizeMatrix; + convertToFlat(sourceWhitePoint, LMS, LMS_Flat); + matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_Flat, result); + } + function normalizeWhitePointToD65(sourceWhitePoint, XYZ_In, result) { + var LMS = result; + matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS); + var LMS_D65 = tempNormalizeMatrix; + convertToD65(sourceWhitePoint, LMS, LMS_D65); + matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_D65, result); + } + function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) { + var A = adjustToRange(0, 1, src[srcOffset] * scale); + var B = adjustToRange(0, 1, src[srcOffset + 1] * scale); + var C = adjustToRange(0, 1, src[srcOffset + 2] * scale); + var AGR = Math.pow(A, cs.GR); + var BGG = Math.pow(B, cs.GG); + var CGB = Math.pow(C, cs.GB); + var X = cs.MXA * AGR + cs.MXB * BGG + cs.MXC * CGB; + var Y = cs.MYA * AGR + cs.MYB * BGG + cs.MYC * CGB; + var Z = cs.MZA * AGR + cs.MZB * BGG + cs.MZC * CGB; + var XYZ = tempConvertMatrix1; + XYZ[0] = X; + XYZ[1] = Y; + XYZ[2] = Z; + var XYZ_Flat = tempConvertMatrix2; + normalizeWhitePointToFlat(cs.whitePoint, XYZ, XYZ_Flat); + var XYZ_Black = tempConvertMatrix1; + compensateBlackPoint(cs.blackPoint, XYZ_Flat, XYZ_Black); + var XYZ_D65 = tempConvertMatrix2; + normalizeWhitePointToD65(FLAT_WHITEPOINT_MATRIX, XYZ_Black, XYZ_D65); + var SRGB = tempConvertMatrix1; + matrixProduct(SRGB_D65_XYZ_TO_RGB_MATRIX, XYZ_D65, SRGB); + var sR = sRGBTransferFunction(SRGB[0]); + var sG = sRGBTransferFunction(SRGB[1]); + var sB = sRGBTransferFunction(SRGB[2]); + dest[destOffset] = Math.round(sR * 255); + dest[destOffset + 1] = Math.round(sG * 255); + dest[destOffset + 2] = Math.round(sB * 255); + } + CalRGBCS.prototype = { + getRgb: function CalRGBCS_getRgb(src, srcOffset) { + var rgb = new Uint8Array(3); + this.getRgbItem(src, srcOffset, rgb, 0); + return rgb; + }, + getRgbItem: function CalRGBCS_getRgbItem(src, srcOffset, dest, destOffset) { + convertToRgb(this, src, srcOffset, dest, destOffset, 1); + }, + getRgbBuffer: function CalRGBCS_getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { + var scale = 1 / ((1 << bits) - 1); + for (var i = 0; i < count; ++i) { + convertToRgb(this, src, srcOffset, dest, destOffset, scale); + srcOffset += 3; + destOffset += 3 + alpha01; + } + }, + getOutputLength: function CalRGBCS_getOutputLength(inputLength, alpha01) { + return inputLength * (3 + alpha01) / 3 | 0; + }, + isPassthrough: ColorSpace.prototype.isPassthrough, + fillRgb: ColorSpace.prototype.fillRgb, + isDefaultDecode: function CalRGBCS_isDefaultDecode(decodeMap) { + return ColorSpace.isDefaultDecode(decodeMap, this.numComps); + }, + usesZeroToOneRange: true + }; + return CalRGBCS; + }(); + var LabCS = function LabCSClosure() { + function LabCS(whitePoint, blackPoint, range) { + this.name = 'Lab'; + this.numComps = 3; + this.defaultColor = new Float32Array(this.numComps); + if (!whitePoint) { + error('WhitePoint missing - required for color space Lab'); + } + blackPoint = blackPoint || [ + 0, + 0, + 0 + ]; + range = range || [ + -100, + 100, + -100, + 100 + ]; + this.XW = whitePoint[0]; + this.YW = whitePoint[1]; + this.ZW = whitePoint[2]; + this.amin = range[0]; + this.amax = range[1]; + this.bmin = range[2]; + this.bmax = range[3]; + this.XB = blackPoint[0]; + this.YB = blackPoint[1]; + this.ZB = blackPoint[2]; + if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) { + error('Invalid WhitePoint components, no fallback available'); + } + if (this.XB < 0 || this.YB < 0 || this.ZB < 0) { + info('Invalid BlackPoint, falling back to default'); + this.XB = this.YB = this.ZB = 0; + } + if (this.amin > this.amax || this.bmin > this.bmax) { + info('Invalid Range, falling back to defaults'); + this.amin = -100; + this.amax = 100; + this.bmin = -100; + this.bmax = 100; + } + } + function fn_g(x) { + var result; + if (x >= 6 / 29) { + result = x * x * x; + } else { + result = 108 / 841 * (x - 4 / 29); + } + return result; + } + function decode(value, high1, low2, high2) { + return low2 + value * (high2 - low2) / high1; + } + function convertToRgb(cs, src, srcOffset, maxVal, dest, destOffset) { + var Ls = src[srcOffset]; + var as = src[srcOffset + 1]; + var bs = src[srcOffset + 2]; + if (maxVal !== false) { + Ls = decode(Ls, maxVal, 0, 100); + as = decode(as, maxVal, cs.amin, cs.amax); + bs = decode(bs, maxVal, cs.bmin, cs.bmax); + } + as = as > cs.amax ? cs.amax : as < cs.amin ? cs.amin : as; + bs = bs > cs.bmax ? cs.bmax : bs < cs.bmin ? cs.bmin : bs; + var M = (Ls + 16) / 116; + var L = M + as / 500; + var N = M - bs / 200; + var X = cs.XW * fn_g(L); + var Y = cs.YW * fn_g(M); + var Z = cs.ZW * fn_g(N); + var r, g, b; + if (cs.ZW < 1) { + r = X * 3.1339 + Y * -1.6170 + Z * -0.4906; + g = X * -0.9785 + Y * 1.9160 + Z * 0.0333; + b = X * 0.0720 + Y * -0.2290 + Z * 1.4057; + } else { + r = X * 3.2406 + Y * -1.5372 + Z * -0.4986; + g = X * -0.9689 + Y * 1.8758 + Z * 0.0415; + b = X * 0.0557 + Y * -0.2040 + Z * 1.0570; + } + dest[destOffset] = r <= 0 ? 0 : r >= 1 ? 255 : Math.sqrt(r) * 255 | 0; + dest[destOffset + 1] = g <= 0 ? 0 : g >= 1 ? 255 : Math.sqrt(g) * 255 | 0; + dest[destOffset + 2] = b <= 0 ? 0 : b >= 1 ? 255 : Math.sqrt(b) * 255 | 0; + } + LabCS.prototype = { + getRgb: ColorSpace.prototype.getRgb, + getRgbItem: function LabCS_getRgbItem(src, srcOffset, dest, destOffset) { + convertToRgb(this, src, srcOffset, false, dest, destOffset); + }, + getRgbBuffer: function LabCS_getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { + var maxVal = (1 << bits) - 1; + for (var i = 0; i < count; i++) { + convertToRgb(this, src, srcOffset, maxVal, dest, destOffset); + srcOffset += 3; + destOffset += 3 + alpha01; + } + }, + getOutputLength: function LabCS_getOutputLength(inputLength, alpha01) { + return inputLength * (3 + alpha01) / 3 | 0; + }, + isPassthrough: ColorSpace.prototype.isPassthrough, + fillRgb: ColorSpace.prototype.fillRgb, + isDefaultDecode: function LabCS_isDefaultDecode(decodeMap) { + return true; + }, + usesZeroToOneRange: false + }; + return LabCS; + }(); + exports.ColorSpace = ColorSpace; + })); + (function (root, factory) { + factory(root.pdfjsCoreImage = {}, root.pdfjsSharedUtil, root.pdfjsCorePrimitives, root.pdfjsCoreColorSpace, root.pdfjsCoreStream, root.pdfjsCoreJpx); + }(this, function (exports, sharedUtil, corePrimitives, coreColorSpace, coreStream, coreJpx) { + var ImageKind = sharedUtil.ImageKind; + var assert = sharedUtil.assert; + var error = sharedUtil.error; + var info = sharedUtil.info; + var isArray = sharedUtil.isArray; + var warn = sharedUtil.warn; + var Name = corePrimitives.Name; + var isStream = corePrimitives.isStream; + var ColorSpace = coreColorSpace.ColorSpace; + var DecodeStream = coreStream.DecodeStream; + var JpegStream = coreStream.JpegStream; + var JpxImage = coreJpx.JpxImage; + var PDFImage = function PDFImageClosure() { + function handleImageData(image, nativeDecoder) { + if (nativeDecoder && nativeDecoder.canDecode(image)) { + return nativeDecoder.decode(image); + } + return Promise.resolve(image); + } + function decodeAndClamp(value, addend, coefficient, max) { + value = addend + value * coefficient; + return value < 0 ? 0 : value > max ? max : value; + } + function resizeImageMask(src, bpc, w1, h1, w2, h2) { + var length = w2 * h2; + var dest = bpc <= 8 ? new Uint8Array(length) : bpc <= 16 ? new Uint16Array(length) : new Uint32Array(length); + var xRatio = w1 / w2; + var yRatio = h1 / h2; + var i, j, py, newIndex = 0, oldIndex; + var xScaled = new Uint16Array(w2); + var w1Scanline = w1; + for (i = 0; i < w2; i++) { + xScaled[i] = Math.floor(i * xRatio); + } + for (i = 0; i < h2; i++) { + py = Math.floor(i * yRatio) * w1Scanline; + for (j = 0; j < w2; j++) { + oldIndex = py + xScaled[j]; + dest[newIndex++] = src[oldIndex]; + } + } + return dest; + } + function PDFImage(xref, res, image, inline, smask, mask, isMask) { + this.image = image; + var dict = image.dict; + if (dict.has('Filter')) { + var filter = dict.get('Filter').name; + if (filter === 'JPXDecode') { + var jpxImage = new JpxImage(); + jpxImage.parseImageProperties(image.stream); + image.stream.reset(); + image.bitsPerComponent = jpxImage.bitsPerComponent; + image.numComps = jpxImage.componentsCount; + } else if (filter === 'JBIG2Decode') { + image.bitsPerComponent = 1; + image.numComps = 1; + } + } + this.width = dict.get('Width', 'W'); + this.height = dict.get('Height', 'H'); + if (this.width < 1 || this.height < 1) { + error('Invalid image width: ' + this.width + ' or height: ' + this.height); + } + this.interpolate = dict.get('Interpolate', 'I') || false; + this.imageMask = dict.get('ImageMask', 'IM') || false; + this.matte = dict.get('Matte') || false; + var bitsPerComponent = image.bitsPerComponent; + if (!bitsPerComponent) { + bitsPerComponent = dict.get('BitsPerComponent', 'BPC'); + if (!bitsPerComponent) { + if (this.imageMask) { + bitsPerComponent = 1; + } else { + error('Bits per component missing in image: ' + this.imageMask); + } + } + } + this.bpc = bitsPerComponent; + if (!this.imageMask) { + var colorSpace = dict.get('ColorSpace', 'CS'); + if (!colorSpace) { + info('JPX images (which do not require color spaces)'); + switch (image.numComps) { + case 1: + colorSpace = Name.get('DeviceGray'); + break; + case 3: + colorSpace = Name.get('DeviceRGB'); + break; + case 4: + colorSpace = Name.get('DeviceCMYK'); + break; + default: + error('JPX images with ' + this.numComps + ' color components not supported.'); + } + } + this.colorSpace = ColorSpace.parse(colorSpace, xref, res); + this.numComps = this.colorSpace.numComps; + } + this.decode = dict.getArray('Decode', 'D'); + this.needsDecode = false; + if (this.decode && (this.colorSpace && !this.colorSpace.isDefaultDecode(this.decode) || isMask && !ColorSpace.isDefaultDecode(this.decode, 1))) { + this.needsDecode = true; + var max = (1 << bitsPerComponent) - 1; + this.decodeCoefficients = []; + this.decodeAddends = []; + for (var i = 0, j = 0; i < this.decode.length; i += 2, ++j) { + var dmin = this.decode[i]; + var dmax = this.decode[i + 1]; + this.decodeCoefficients[j] = dmax - dmin; + this.decodeAddends[j] = max * dmin; + } + } + if (smask) { + this.smask = new PDFImage(xref, res, smask, false); + } else if (mask) { + if (isStream(mask)) { + var maskDict = mask.dict, imageMask = maskDict.get('ImageMask', 'IM'); + if (!imageMask) { + warn('Ignoring /Mask in image without /ImageMask.'); + } else { + this.mask = new PDFImage(xref, res, mask, false, null, null, true); + } + } else { + this.mask = mask; + } + } + } + PDFImage.buildImage = function PDFImage_buildImage(handler, xref, res, image, inline, nativeDecoder) { + var imagePromise = handleImageData(image, nativeDecoder); + var smaskPromise; + var maskPromise; + var smask = image.dict.get('SMask'); + var mask = image.dict.get('Mask'); + if (smask) { + smaskPromise = handleImageData(smask, nativeDecoder); + maskPromise = Promise.resolve(null); + } else { + smaskPromise = Promise.resolve(null); + if (mask) { + if (isStream(mask)) { + maskPromise = handleImageData(mask, nativeDecoder); + } else if (isArray(mask)) { + maskPromise = Promise.resolve(mask); + } else { + warn('Unsupported mask format.'); + maskPromise = Promise.resolve(null); + } + } else { + maskPromise = Promise.resolve(null); + } + } + return Promise.all([ + imagePromise, + smaskPromise, + maskPromise + ]).then(function (results) { + var imageData = results[0]; + var smaskData = results[1]; + var maskData = results[2]; + return new PDFImage(xref, res, imageData, inline, smaskData, maskData); + }); + }; + PDFImage.createMask = function PDFImage_createMask(imgArray, width, height, imageIsFromDecodeStream, inverseDecode) { + var computedLength = (width + 7 >> 3) * height; + var actualLength = imgArray.byteLength; + var haveFullData = computedLength === actualLength; + var data, i; + if (imageIsFromDecodeStream && (!inverseDecode || haveFullData)) { + data = imgArray; + } else if (!inverseDecode) { + data = new Uint8Array(actualLength); + data.set(imgArray); + } else { + data = new Uint8Array(computedLength); + data.set(imgArray); + for (i = actualLength; i < computedLength; i++) { + data[i] = 0xff; + } + } + if (inverseDecode) { + for (i = 0; i < actualLength; i++) { + data[i] = ~data[i]; + } + } + return { + data: data, + width: width, + height: height + }; + }; + PDFImage.prototype = { + get drawWidth() { + return Math.max(this.width, this.smask && this.smask.width || 0, this.mask && this.mask.width || 0); + }, + get drawHeight() { + return Math.max(this.height, this.smask && this.smask.height || 0, this.mask && this.mask.height || 0); + }, + decodeBuffer: function PDFImage_decodeBuffer(buffer) { + var bpc = this.bpc; + var numComps = this.numComps; + var decodeAddends = this.decodeAddends; + var decodeCoefficients = this.decodeCoefficients; + var max = (1 << bpc) - 1; + var i, ii; + if (bpc === 1) { + for (i = 0, ii = buffer.length; i < ii; i++) { + buffer[i] = +!buffer[i]; + } + return; + } + var index = 0; + for (i = 0, ii = this.width * this.height; i < ii; i++) { + for (var j = 0; j < numComps; j++) { + buffer[index] = decodeAndClamp(buffer[index], decodeAddends[j], decodeCoefficients[j], max); + index++; + } + } + }, + getComponents: function PDFImage_getComponents(buffer) { + var bpc = this.bpc; + if (bpc === 8) { + return buffer; + } + var width = this.width; + var height = this.height; + var numComps = this.numComps; + var length = width * height * numComps; + var bufferPos = 0; + var output = bpc <= 8 ? new Uint8Array(length) : bpc <= 16 ? new Uint16Array(length) : new Uint32Array(length); + var rowComps = width * numComps; + var max = (1 << bpc) - 1; + var i = 0, ii, buf; + if (bpc === 1) { + var mask, loop1End, loop2End; + for (var j = 0; j < height; j++) { + loop1End = i + (rowComps & ~7); + loop2End = i + rowComps; + while (i < loop1End) { + buf = buffer[bufferPos++]; + output[i] = buf >> 7 & 1; + output[i + 1] = buf >> 6 & 1; + output[i + 2] = buf >> 5 & 1; + output[i + 3] = buf >> 4 & 1; + output[i + 4] = buf >> 3 & 1; + output[i + 5] = buf >> 2 & 1; + output[i + 6] = buf >> 1 & 1; + output[i + 7] = buf & 1; + i += 8; + } + if (i < loop2End) { + buf = buffer[bufferPos++]; + mask = 128; + while (i < loop2End) { + output[i++] = +!!(buf & mask); + mask >>= 1; + } + } + } + } else { + var bits = 0; + buf = 0; + for (i = 0, ii = length; i < ii; ++i) { + if (i % rowComps === 0) { + buf = 0; + bits = 0; + } + while (bits < bpc) { + buf = buf << 8 | buffer[bufferPos++]; + bits += 8; + } + var remainingBits = bits - bpc; + var value = buf >> remainingBits; + output[i] = value < 0 ? 0 : value > max ? max : value; + buf = buf & (1 << remainingBits) - 1; + bits = remainingBits; + } + } + return output; + }, + fillOpacity: function PDFImage_fillOpacity(rgbaBuf, width, height, actualHeight, image) { + var smask = this.smask; + var mask = this.mask; + var alphaBuf, sw, sh, i, ii, j; + if (smask) { + sw = smask.width; + sh = smask.height; + alphaBuf = new Uint8Array(sw * sh); + smask.fillGrayBuffer(alphaBuf); + if (sw !== width || sh !== height) { + alphaBuf = resizeImageMask(alphaBuf, smask.bpc, sw, sh, width, height); + } + } else if (mask) { + if (mask instanceof PDFImage) { + sw = mask.width; + sh = mask.height; + alphaBuf = new Uint8Array(sw * sh); + mask.numComps = 1; + mask.fillGrayBuffer(alphaBuf); + for (i = 0, ii = sw * sh; i < ii; ++i) { + alphaBuf[i] = 255 - alphaBuf[i]; + } + if (sw !== width || sh !== height) { + alphaBuf = resizeImageMask(alphaBuf, mask.bpc, sw, sh, width, height); + } + } else if (isArray(mask)) { + alphaBuf = new Uint8Array(width * height); + var numComps = this.numComps; + for (i = 0, ii = width * height; i < ii; ++i) { + var opacity = 0; + var imageOffset = i * numComps; + for (j = 0; j < numComps; ++j) { + var color = image[imageOffset + j]; + var maskOffset = j * 2; + if (color < mask[maskOffset] || color > mask[maskOffset + 1]) { + opacity = 255; + break; + } + } + alphaBuf[i] = opacity; + } + } else { + error('Unknown mask format.'); + } + } + if (alphaBuf) { + for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) { + rgbaBuf[j] = alphaBuf[i]; + } + } else { + for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) { + rgbaBuf[j] = 255; + } + } + }, + undoPreblend: function PDFImage_undoPreblend(buffer, width, height) { + var matte = this.smask && this.smask.matte; + if (!matte) { + return; + } + var matteRgb = this.colorSpace.getRgb(matte, 0); + var matteR = matteRgb[0]; + var matteG = matteRgb[1]; + var matteB = matteRgb[2]; + var length = width * height * 4; + var r, g, b; + for (var i = 0; i < length; i += 4) { + var alpha = buffer[i + 3]; + if (alpha === 0) { + buffer[i] = 255; + buffer[i + 1] = 255; + buffer[i + 2] = 255; + continue; + } + var k = 255 / alpha; + r = (buffer[i] - matteR) * k + matteR; + g = (buffer[i + 1] - matteG) * k + matteG; + b = (buffer[i + 2] - matteB) * k + matteB; + buffer[i] = r <= 0 ? 0 : r >= 255 ? 255 : r | 0; + buffer[i + 1] = g <= 0 ? 0 : g >= 255 ? 255 : g | 0; + buffer[i + 2] = b <= 0 ? 0 : b >= 255 ? 255 : b | 0; + } + }, + createImageData: function PDFImage_createImageData(forceRGBA) { + var drawWidth = this.drawWidth; + var drawHeight = this.drawHeight; + var imgData = { + width: drawWidth, + height: drawHeight + }; + var numComps = this.numComps; + var originalWidth = this.width; + var originalHeight = this.height; + var bpc = this.bpc; + var rowBytes = originalWidth * numComps * bpc + 7 >> 3; + var imgArray; + if (!forceRGBA) { + var kind; + if (this.colorSpace.name === 'DeviceGray' && bpc === 1) { + kind = ImageKind.GRAYSCALE_1BPP; + } else if (this.colorSpace.name === 'DeviceRGB' && bpc === 8 && !this.needsDecode) { + kind = ImageKind.RGB_24BPP; + } + if (kind && !this.smask && !this.mask && drawWidth === originalWidth && drawHeight === originalHeight) { + imgData.kind = kind; + imgArray = this.getImageBytes(originalHeight * rowBytes); + if (this.image instanceof DecodeStream) { + imgData.data = imgArray; + } else { + var newArray = new Uint8Array(imgArray.length); + newArray.set(imgArray); + imgData.data = newArray; + } + if (this.needsDecode) { + assert(kind === ImageKind.GRAYSCALE_1BPP); + var buffer = imgData.data; + for (var i = 0, ii = buffer.length; i < ii; i++) { + buffer[i] ^= 0xff; + } + } + return imgData; + } + if (this.image instanceof JpegStream && !this.smask && !this.mask && (this.colorSpace.name === 'DeviceGray' || this.colorSpace.name === 'DeviceRGB' || this.colorSpace.name === 'DeviceCMYK')) { + imgData.kind = ImageKind.RGB_24BPP; + imgData.data = this.getImageBytes(originalHeight * rowBytes, drawWidth, drawHeight, true); + return imgData; + } + } + imgArray = this.getImageBytes(originalHeight * rowBytes); + var actualHeight = 0 | imgArray.length / rowBytes * drawHeight / originalHeight; + var comps = this.getComponents(imgArray); + var alpha01, maybeUndoPreblend; + if (!forceRGBA && !this.smask && !this.mask) { + imgData.kind = ImageKind.RGB_24BPP; + imgData.data = new Uint8Array(drawWidth * drawHeight * 3); + alpha01 = 0; + maybeUndoPreblend = false; + } else { + imgData.kind = ImageKind.RGBA_32BPP; + imgData.data = new Uint8Array(drawWidth * drawHeight * 4); + alpha01 = 1; + maybeUndoPreblend = true; + this.fillOpacity(imgData.data, drawWidth, drawHeight, actualHeight, comps); + } + if (this.needsDecode) { + this.decodeBuffer(comps); + } + this.colorSpace.fillRgb(imgData.data, originalWidth, originalHeight, drawWidth, drawHeight, actualHeight, bpc, comps, alpha01); + if (maybeUndoPreblend) { + this.undoPreblend(imgData.data, drawWidth, actualHeight); + } + return imgData; + }, + fillGrayBuffer: function PDFImage_fillGrayBuffer(buffer) { + var numComps = this.numComps; + if (numComps !== 1) { + error('Reading gray scale from a color image: ' + numComps); + } + var width = this.width; + var height = this.height; + var bpc = this.bpc; + var rowBytes = width * numComps * bpc + 7 >> 3; + var imgArray = this.getImageBytes(height * rowBytes); + var comps = this.getComponents(imgArray); + var i, length; + if (bpc === 1) { + length = width * height; + if (this.needsDecode) { + for (i = 0; i < length; ++i) { + buffer[i] = comps[i] - 1 & 255; + } + } else { + for (i = 0; i < length; ++i) { + buffer[i] = -comps[i] & 255; + } + } + return; + } + if (this.needsDecode) { + this.decodeBuffer(comps); + } + length = width * height; + var scale = 255 / ((1 << bpc) - 1); + for (i = 0; i < length; ++i) { + buffer[i] = scale * comps[i] | 0; + } + }, + getImageBytes: function PDFImage_getImageBytes(length, drawWidth, drawHeight, forceRGB) { + this.image.reset(); + this.image.drawWidth = drawWidth || this.width; + this.image.drawHeight = drawHeight || this.height; + this.image.forceRGB = !!forceRGB; + return this.image.getBytes(length); + } + }; + return PDFImage; + }(); + exports.PDFImage = PDFImage; + })); + (function (root, factory) { + factory(root.pdfjsCoreObj = {}, root.pdfjsSharedUtil, root.pdfjsCorePrimitives, root.pdfjsCoreCrypto, root.pdfjsCoreParser, root.pdfjsCoreChunkedStream, root.pdfjsCoreColorSpace); + }(this, function (exports, sharedUtil, corePrimitives, coreCrypto, coreParser, coreChunkedStream, coreColorSpace) { + var InvalidPDFException = sharedUtil.InvalidPDFException; + var MissingDataException = sharedUtil.MissingDataException; + var XRefParseException = sharedUtil.XRefParseException; + var assert = sharedUtil.assert; + var bytesToString = sharedUtil.bytesToString; + var createPromiseCapability = sharedUtil.createPromiseCapability; + var error = sharedUtil.error; + var info = sharedUtil.info; + var isArray = sharedUtil.isArray; + var isBool = sharedUtil.isBool; + var isInt = sharedUtil.isInt; + var isString = sharedUtil.isString; + var shadow = sharedUtil.shadow; + var stringToPDFString = sharedUtil.stringToPDFString; + var stringToUTF8String = sharedUtil.stringToUTF8String; + var warn = sharedUtil.warn; + var createValidAbsoluteUrl = sharedUtil.createValidAbsoluteUrl; + var Util = sharedUtil.Util; + var Ref = corePrimitives.Ref; + var RefSet = corePrimitives.RefSet; + var RefSetCache = corePrimitives.RefSetCache; + var isName = corePrimitives.isName; + var isCmd = corePrimitives.isCmd; + var isDict = corePrimitives.isDict; + var isRef = corePrimitives.isRef; + var isRefsEqual = corePrimitives.isRefsEqual; + var isStream = corePrimitives.isStream; + var CipherTransformFactory = coreCrypto.CipherTransformFactory; + var Lexer = coreParser.Lexer; + var Parser = coreParser.Parser; + var ChunkedStream = coreChunkedStream.ChunkedStream; + var ColorSpace = coreColorSpace.ColorSpace; + var Catalog = function CatalogClosure() { + function Catalog(pdfManager, xref, pageFactory) { + this.pdfManager = pdfManager; + this.xref = xref; + this.catDict = xref.getCatalogObj(); + this.fontCache = new RefSetCache(); + assert(isDict(this.catDict), 'catalog object is not a dictionary'); + this.pageFactory = pageFactory; + this.pagePromises = []; + } + Catalog.prototype = { + get metadata() { + var streamRef = this.catDict.getRaw('Metadata'); + if (!isRef(streamRef)) { + return shadow(this, 'metadata', null); + } + var encryptMetadata = !this.xref.encrypt ? false : this.xref.encrypt.encryptMetadata; + var stream = this.xref.fetch(streamRef, !encryptMetadata); + var metadata; + if (stream && isDict(stream.dict)) { + var type = stream.dict.get('Type'); + var subtype = stream.dict.get('Subtype'); + if (isName(type, 'Metadata') && isName(subtype, 'XML')) { + try { + metadata = stringToUTF8String(bytesToString(stream.getBytes())); + } catch (e) { + info('Skipping invalid metadata.'); + } + } + } + return shadow(this, 'metadata', metadata); + }, + get toplevelPagesDict() { + var pagesObj = this.catDict.get('Pages'); + assert(isDict(pagesObj), 'invalid top-level pages dictionary'); + return shadow(this, 'toplevelPagesDict', pagesObj); + }, + get documentOutline() { + var obj = null; + try { + obj = this.readDocumentOutline(); + } catch (ex) { + if (ex instanceof MissingDataException) { + throw ex; + } + warn('Unable to read document outline'); + } + return shadow(this, 'documentOutline', obj); + }, + readDocumentOutline: function Catalog_readDocumentOutline() { + var obj = this.catDict.get('Outlines'); + if (!isDict(obj)) { + return null; + } + obj = obj.getRaw('First'); + if (!isRef(obj)) { + return null; + } + var root = { items: [] }; + var queue = [{ + obj: obj, + parent: root + }]; + var processed = new RefSet(); + processed.put(obj); + var xref = this.xref, blackColor = new Uint8Array(3); + while (queue.length > 0) { + var i = queue.shift(); + var outlineDict = xref.fetchIfRef(i.obj); + if (outlineDict === null) { + continue; + } + assert(outlineDict.has('Title'), 'Invalid outline item'); + var data = { + url: null, + dest: null + }; + Catalog.parseDestDictionary({ + destDict: outlineDict, + resultObj: data, + docBaseUrl: this.pdfManager.docBaseUrl + }); + var title = outlineDict.get('Title'); + var flags = outlineDict.get('F') || 0; + var color = outlineDict.getArray('C'), rgbColor = blackColor; + if (isArray(color) && color.length === 3 && (color[0] !== 0 || color[1] !== 0 || color[2] !== 0)) { + rgbColor = ColorSpace.singletons.rgb.getRgb(color, 0); + } + var outlineItem = { + dest: data.dest, + url: data.url, + unsafeUrl: data.unsafeUrl, + newWindow: data.newWindow, + title: stringToPDFString(title), + color: rgbColor, + count: outlineDict.get('Count'), + bold: !!(flags & 2), + italic: !!(flags & 1), + items: [] + }; + i.parent.items.push(outlineItem); + obj = outlineDict.getRaw('First'); + if (isRef(obj) && !processed.has(obj)) { + queue.push({ + obj: obj, + parent: outlineItem + }); + processed.put(obj); + } + obj = outlineDict.getRaw('Next'); + if (isRef(obj) && !processed.has(obj)) { + queue.push({ + obj: obj, + parent: i.parent + }); + processed.put(obj); + } + } + return root.items.length > 0 ? root.items : null; + }, + get numPages() { + var obj = this.toplevelPagesDict.get('Count'); + assert(isInt(obj), 'page count in top level pages object is not an integer'); + return shadow(this, 'num', obj); + }, + get destinations() { + function fetchDestination(dest) { + return isDict(dest) ? dest.get('D') : dest; + } + var xref = this.xref; + var dests = {}, nameTreeRef, nameDictionaryRef; + var obj = this.catDict.get('Names'); + if (obj && obj.has('Dests')) { + nameTreeRef = obj.getRaw('Dests'); + } else if (this.catDict.has('Dests')) { + nameDictionaryRef = this.catDict.get('Dests'); + } + if (nameDictionaryRef) { + obj = nameDictionaryRef; + obj.forEach(function catalogForEach(key, value) { + if (!value) { + return; + } + dests[key] = fetchDestination(value); + }); + } + if (nameTreeRef) { + var nameTree = new NameTree(nameTreeRef, xref); + var names = nameTree.getAll(); + for (var name in names) { + dests[name] = fetchDestination(names[name]); + } + } + return shadow(this, 'destinations', dests); + }, + getDestination: function Catalog_getDestination(destinationId) { + function fetchDestination(dest) { + return isDict(dest) ? dest.get('D') : dest; + } + var xref = this.xref; + var dest = null, nameTreeRef, nameDictionaryRef; + var obj = this.catDict.get('Names'); + if (obj && obj.has('Dests')) { + nameTreeRef = obj.getRaw('Dests'); + } else if (this.catDict.has('Dests')) { + nameDictionaryRef = this.catDict.get('Dests'); + } + if (nameDictionaryRef) { + var value = nameDictionaryRef.get(destinationId); + if (value) { + dest = fetchDestination(value); + } + } + if (nameTreeRef) { + var nameTree = new NameTree(nameTreeRef, xref); + dest = fetchDestination(nameTree.get(destinationId)); + } + return dest; + }, + get pageLabels() { + var obj = null; + try { + obj = this.readPageLabels(); + } catch (ex) { + if (ex instanceof MissingDataException) { + throw ex; + } + warn('Unable to read page labels.'); + } + return shadow(this, 'pageLabels', obj); + }, + readPageLabels: function Catalog_readPageLabels() { + var obj = this.catDict.getRaw('PageLabels'); + if (!obj) { + return null; + } + var pageLabels = new Array(this.numPages); + var style = null; + var prefix = ''; + var numberTree = new NumberTree(obj, this.xref); + var nums = numberTree.getAll(); + var currentLabel = '', currentIndex = 1; + for (var i = 0, ii = this.numPages; i < ii; i++) { + if (i in nums) { + var labelDict = nums[i]; + assert(isDict(labelDict), 'The PageLabel is not a dictionary.'); + var type = labelDict.get('Type'); + assert(!type || isName(type, 'PageLabel'), 'Invalid type in PageLabel dictionary.'); + var s = labelDict.get('S'); + assert(!s || isName(s), 'Invalid style in PageLabel dictionary.'); + style = s ? s.name : null; + var p = labelDict.get('P'); + assert(!p || isString(p), 'Invalid prefix in PageLabel dictionary.'); + prefix = p ? stringToPDFString(p) : ''; + var st = labelDict.get('St'); + assert(!st || isInt(st) && st >= 1, 'Invalid start in PageLabel dictionary.'); + currentIndex = st || 1; + } + switch (style) { + case 'D': + currentLabel = currentIndex; + break; + case 'R': + case 'r': + currentLabel = Util.toRoman(currentIndex, style === 'r'); + break; + case 'A': + case 'a': + var LIMIT = 26; + var A_UPPER_CASE = 0x41, A_LOWER_CASE = 0x61; + var baseCharCode = style === 'a' ? A_LOWER_CASE : A_UPPER_CASE; + var letterIndex = currentIndex - 1; + var character = String.fromCharCode(baseCharCode + letterIndex % LIMIT); + var charBuf = []; + for (var j = 0, jj = letterIndex / LIMIT | 0; j <= jj; j++) { + charBuf.push(character); + } + currentLabel = charBuf.join(''); + break; + default: + assert(!style, 'Invalid style "' + style + '" in PageLabel dictionary.'); + } + pageLabels[i] = prefix + currentLabel; + currentLabel = ''; + currentIndex++; + } + return pageLabels; + }, + get attachments() { + var xref = this.xref; + var attachments = null, nameTreeRef; + var obj = this.catDict.get('Names'); + if (obj) { + nameTreeRef = obj.getRaw('EmbeddedFiles'); + } + if (nameTreeRef) { + var nameTree = new NameTree(nameTreeRef, xref); + var names = nameTree.getAll(); + for (var name in names) { + var fs = new FileSpec(names[name], xref); + if (!attachments) { + attachments = Object.create(null); + } + attachments[stringToPDFString(name)] = fs.serializable; + } + } + return shadow(this, 'attachments', attachments); + }, + get javaScript() { + var xref = this.xref; + var obj = this.catDict.get('Names'); + var javaScript = []; + function appendIfJavaScriptDict(jsDict) { + var type = jsDict.get('S'); + if (!isName(type, 'JavaScript')) { + return; + } + var js = jsDict.get('JS'); + if (isStream(js)) { + js = bytesToString(js.getBytes()); + } else if (!isString(js)) { + return; + } + javaScript.push(stringToPDFString(js)); + } + if (obj && obj.has('JavaScript')) { + var nameTree = new NameTree(obj.getRaw('JavaScript'), xref); + var names = nameTree.getAll(); + for (var name in names) { + var jsDict = names[name]; + if (isDict(jsDict)) { + appendIfJavaScriptDict(jsDict); + } + } + } + var openactionDict = this.catDict.get('OpenAction'); + if (isDict(openactionDict, 'Action')) { + var actionType = openactionDict.get('S'); + if (isName(actionType, 'Named')) { + var action = openactionDict.get('N'); + if (isName(action, 'Print')) { + javaScript.push('print({});'); + } + } else { + appendIfJavaScriptDict(openactionDict); + } + } + return shadow(this, 'javaScript', javaScript); + }, + cleanup: function Catalog_cleanup() { + var promises = []; + this.fontCache.forEach(function (promise) { + promises.push(promise); + }); + return Promise.all(promises).then(function (translatedFonts) { + for (var i = 0, ii = translatedFonts.length; i < ii; i++) { + var font = translatedFonts[i].dict; + delete font.translated; + } + this.fontCache.clear(); + }.bind(this)); + }, + getPage: function Catalog_getPage(pageIndex) { + if (!(pageIndex in this.pagePromises)) { + this.pagePromises[pageIndex] = this.getPageDict(pageIndex).then(function (a) { + var dict = a[0]; + var ref = a[1]; + return this.pageFactory.createPage(pageIndex, dict, ref, this.fontCache); + }.bind(this)); + } + return this.pagePromises[pageIndex]; + }, + getPageDict: function Catalog_getPageDict(pageIndex) { + var capability = createPromiseCapability(); + var nodesToVisit = [this.catDict.getRaw('Pages')]; + var currentPageIndex = 0; + var xref = this.xref; + var checkAllKids = false; + function next() { + while (nodesToVisit.length) { + var currentNode = nodesToVisit.pop(); + if (isRef(currentNode)) { + xref.fetchAsync(currentNode).then(function (obj) { + if (isDict(obj, 'Page') || isDict(obj) && !obj.has('Kids')) { + if (pageIndex === currentPageIndex) { + capability.resolve([ + obj, + currentNode + ]); + } else { + currentPageIndex++; + next(); + } + return; + } + nodesToVisit.push(obj); + next(); + }, capability.reject); + return; + } + assert(isDict(currentNode), 'page dictionary kid reference points to wrong type of object'); + var count = currentNode.get('Count'); + if (count === 0) { + checkAllKids = true; + } + if (currentPageIndex + count <= pageIndex) { + currentPageIndex += count; + continue; + } + var kids = currentNode.get('Kids'); + assert(isArray(kids), 'page dictionary kids object is not an array'); + if (!checkAllKids && count === kids.length) { + nodesToVisit = [kids[pageIndex - currentPageIndex]]; + currentPageIndex = pageIndex; + continue; + } else { + for (var last = kids.length - 1; last >= 0; last--) { + nodesToVisit.push(kids[last]); + } + } + } + capability.reject('Page index ' + pageIndex + ' not found.'); + } + next(); + return capability.promise; + }, + getPageIndex: function Catalog_getPageIndex(pageRef) { + var xref = this.xref; + function pagesBeforeRef(kidRef) { + var total = 0; + var parentRef; + return xref.fetchAsync(kidRef).then(function (node) { + if (isRefsEqual(kidRef, pageRef) && !isDict(node, 'Page') && !(isDict(node) && !node.has('Type') && node.has('Contents'))) { + throw new Error('The reference does not point to a /Page Dict.'); + } + if (!node) { + return null; + } + assert(isDict(node), 'node must be a Dict.'); + parentRef = node.getRaw('Parent'); + return node.getAsync('Parent'); + }).then(function (parent) { + if (!parent) { + return null; + } + assert(isDict(parent), 'parent must be a Dict.'); + return parent.getAsync('Kids'); + }).then(function (kids) { + if (!kids) { + return null; + } + var kidPromises = []; + var found = false; + for (var i = 0; i < kids.length; i++) { + var kid = kids[i]; + assert(isRef(kid), 'kid must be a Ref.'); + if (kid.num === kidRef.num) { + found = true; + break; + } + kidPromises.push(xref.fetchAsync(kid).then(function (kid) { + if (kid.has('Count')) { + var count = kid.get('Count'); + total += count; + } else { + total++; + } + })); + } + if (!found) { + error('kid ref not found in parents kids'); + } + return Promise.all(kidPromises).then(function () { + return [ + total, + parentRef + ]; + }); + }); + } + var total = 0; + function next(ref) { + return pagesBeforeRef(ref).then(function (args) { + if (!args) { + return total; + } + var count = args[0]; + var parentRef = args[1]; + total += count; + return next(parentRef); + }); + } + return next(pageRef); + } + }; + Catalog.parseDestDictionary = function Catalog_parseDestDictionary(params) { + function addDefaultProtocolToUrl(url) { + if (url.indexOf('www.') === 0) { + return 'http://' + url; + } + return url; + } + function tryConvertUrlEncoding(url) { + try { + return stringToUTF8String(url); + } catch (e) { + return url; + } + } + var destDict = params.destDict; + if (!isDict(destDict)) { + warn('Catalog_parseDestDictionary: "destDict" must be a dictionary.'); + return; + } + var resultObj = params.resultObj; + if (typeof resultObj !== 'object') { + warn('Catalog_parseDestDictionary: "resultObj" must be an object.'); + return; + } + var docBaseUrl = params.docBaseUrl || null; + var action = destDict.get('A'), url, dest; + if (isDict(action)) { + var linkType = action.get('S').name; + switch (linkType) { + case 'URI': + url = action.get('URI'); + if (isName(url)) { + url = '/' + url.name; + } else if (isString(url)) { + url = addDefaultProtocolToUrl(url); + } + break; + case 'GoTo': + dest = action.get('D'); + break; + case 'Launch': + case 'GoToR': + var urlDict = action.get('F'); + if (isDict(urlDict)) { + url = urlDict.get('F') || null; + } else if (isString(urlDict)) { + url = urlDict; + } + var remoteDest = action.get('D'); + if (remoteDest) { + if (isName(remoteDest)) { + remoteDest = remoteDest.name; + } + if (isString(url)) { + var baseUrl = url.split('#')[0]; + if (isString(remoteDest)) { + url = baseUrl + '#' + (/^\d+$/.test(remoteDest) ? 'nameddest=' : '') + remoteDest; + } else if (isArray(remoteDest)) { + url = baseUrl + '#' + JSON.stringify(remoteDest); + } + } + } + var newWindow = action.get('NewWindow'); + if (isBool(newWindow)) { + resultObj.newWindow = newWindow; + } + break; + case 'Named': + var namedAction = action.get('N'); + if (isName(namedAction)) { + resultObj.action = namedAction.name; + } + break; + case 'JavaScript': + var jsAction = action.get('JS'), js; + if (isStream(jsAction)) { + js = bytesToString(jsAction.getBytes()); + } else if (isString(jsAction)) { + js = jsAction; + } + if (js) { + var URL_OPEN_METHODS = [ + 'app.launchURL', + 'window.open' + ]; + var regex = new RegExp('^(?:' + URL_OPEN_METHODS.join('|') + ')' + '\\((?:\'|\")(\\S+)(?:\'|\")(?:,|\\))'); + var jsUrl = regex.exec(stringToPDFString(js), 'i'); + if (jsUrl && jsUrl[1]) { + url = jsUrl[1]; + break; + } + } + default: + warn('Catalog_parseDestDictionary: Unrecognized link type "' + linkType + '".'); + break; + } + } else if (destDict.has('Dest')) { + dest = destDict.get('Dest'); + } + if (isString(url)) { + url = tryConvertUrlEncoding(url); + var absoluteUrl = createValidAbsoluteUrl(url, docBaseUrl); + if (absoluteUrl) { + resultObj.url = absoluteUrl.href; + } + resultObj.unsafeUrl = url; + } + if (dest) { + if (isName(dest)) { + dest = dest.name; + } + if (isString(dest) || isArray(dest)) { + resultObj.dest = dest; + } + } + }; + return Catalog; + }(); + var XRef = function XRefClosure() { + function XRef(stream, pdfManager) { + this.stream = stream; + this.pdfManager = pdfManager; + this.entries = []; + this.xrefstms = Object.create(null); + this.cache = []; + this.stats = { + streamTypes: [], + fontTypes: [] + }; + } + XRef.prototype = { + setStartXRef: function XRef_setStartXRef(startXRef) { + this.startXRefQueue = [startXRef]; + }, + parse: function XRef_parse(recoveryMode) { + var trailerDict; + if (!recoveryMode) { + trailerDict = this.readXRef(); + } else { + warn('Indexing all PDF objects'); + trailerDict = this.indexObjects(); + } + trailerDict.assignXref(this); + this.trailer = trailerDict; + var encrypt = trailerDict.get('Encrypt'); + if (isDict(encrypt)) { + var ids = trailerDict.get('ID'); + var fileId = ids && ids.length ? ids[0] : ''; + encrypt.suppressEncryption = true; + this.encrypt = new CipherTransformFactory(encrypt, fileId, this.pdfManager.password); + } + if (!(this.root = trailerDict.get('Root'))) { + error('Invalid root reference'); + } + }, + processXRefTable: function XRef_processXRefTable(parser) { + if (!('tableState' in this)) { + this.tableState = { + entryNum: 0, + streamPos: parser.lexer.stream.pos, + parserBuf1: parser.buf1, + parserBuf2: parser.buf2 + }; + } + var obj = this.readXRefTable(parser); + if (!isCmd(obj, 'trailer')) { + error('Invalid XRef table: could not find trailer dictionary'); + } + var dict = parser.getObj(); + if (!isDict(dict) && dict.dict) { + dict = dict.dict; + } + if (!isDict(dict)) { + error('Invalid XRef table: could not parse trailer dictionary'); + } + delete this.tableState; + return dict; + }, + readXRefTable: function XRef_readXRefTable(parser) { + var stream = parser.lexer.stream; + var tableState = this.tableState; + stream.pos = tableState.streamPos; + parser.buf1 = tableState.parserBuf1; + parser.buf2 = tableState.parserBuf2; + var obj; + while (true) { + if (!('firstEntryNum' in tableState) || !('entryCount' in tableState)) { + if (isCmd(obj = parser.getObj(), 'trailer')) { + break; + } + tableState.firstEntryNum = obj; + tableState.entryCount = parser.getObj(); + } + var first = tableState.firstEntryNum; + var count = tableState.entryCount; + if (!isInt(first) || !isInt(count)) { + error('Invalid XRef table: wrong types in subsection header'); + } + for (var i = tableState.entryNum; i < count; i++) { + tableState.streamPos = stream.pos; + tableState.entryNum = i; + tableState.parserBuf1 = parser.buf1; + tableState.parserBuf2 = parser.buf2; + var entry = {}; + entry.offset = parser.getObj(); + entry.gen = parser.getObj(); + var type = parser.getObj(); + if (isCmd(type, 'f')) { + entry.free = true; + } else if (isCmd(type, 'n')) { + entry.uncompressed = true; + } + if (!isInt(entry.offset) || !isInt(entry.gen) || !(entry.free || entry.uncompressed)) { + error('Invalid entry in XRef subsection: ' + first + ', ' + count); + } + if (i === 0 && entry.free && first === 1) { + first = 0; + } + if (!this.entries[i + first]) { + this.entries[i + first] = entry; + } + } + tableState.entryNum = 0; + tableState.streamPos = stream.pos; + tableState.parserBuf1 = parser.buf1; + tableState.parserBuf2 = parser.buf2; + delete tableState.firstEntryNum; + delete tableState.entryCount; + } + if (this.entries[0] && !this.entries[0].free) { + error('Invalid XRef table: unexpected first object'); + } + return obj; + }, + processXRefStream: function XRef_processXRefStream(stream) { + if (!('streamState' in this)) { + var streamParameters = stream.dict; + var byteWidths = streamParameters.get('W'); + var range = streamParameters.get('Index'); + if (!range) { + range = [ + 0, + streamParameters.get('Size') + ]; + } + this.streamState = { + entryRanges: range, + byteWidths: byteWidths, + entryNum: 0, + streamPos: stream.pos + }; + } + this.readXRefStream(stream); + delete this.streamState; + return stream.dict; + }, + readXRefStream: function XRef_readXRefStream(stream) { + var i, j; + var streamState = this.streamState; + stream.pos = streamState.streamPos; + var byteWidths = streamState.byteWidths; + var typeFieldWidth = byteWidths[0]; + var offsetFieldWidth = byteWidths[1]; + var generationFieldWidth = byteWidths[2]; + var entryRanges = streamState.entryRanges; + while (entryRanges.length > 0) { + var first = entryRanges[0]; + var n = entryRanges[1]; + if (!isInt(first) || !isInt(n)) { + error('Invalid XRef range fields: ' + first + ', ' + n); + } + if (!isInt(typeFieldWidth) || !isInt(offsetFieldWidth) || !isInt(generationFieldWidth)) { + error('Invalid XRef entry fields length: ' + first + ', ' + n); + } + for (i = streamState.entryNum; i < n; ++i) { + streamState.entryNum = i; + streamState.streamPos = stream.pos; + var type = 0, offset = 0, generation = 0; + for (j = 0; j < typeFieldWidth; ++j) { + type = type << 8 | stream.getByte(); + } + if (typeFieldWidth === 0) { + type = 1; + } + for (j = 0; j < offsetFieldWidth; ++j) { + offset = offset << 8 | stream.getByte(); + } + for (j = 0; j < generationFieldWidth; ++j) { + generation = generation << 8 | stream.getByte(); + } + var entry = {}; + entry.offset = offset; + entry.gen = generation; + switch (type) { + case 0: + entry.free = true; + break; + case 1: + entry.uncompressed = true; + break; + case 2: + break; + default: + error('Invalid XRef entry type: ' + type); + } + if (!this.entries[first + i]) { + this.entries[first + i] = entry; + } + } + streamState.entryNum = 0; + streamState.streamPos = stream.pos; + entryRanges.splice(0, 2); + } + }, + indexObjects: function XRef_indexObjects() { + var TAB = 0x9, LF = 0xA, CR = 0xD, SPACE = 0x20; + var PERCENT = 0x25, LT = 0x3C; + function readToken(data, offset) { + var token = '', ch = data[offset]; + while (ch !== LF && ch !== CR && ch !== LT) { + if (++offset >= data.length) { + break; + } + token += String.fromCharCode(ch); + ch = data[offset]; + } + return token; + } + function skipUntil(data, offset, what) { + var length = what.length, dataLength = data.length; + var skipped = 0; + while (offset < dataLength) { + var i = 0; + while (i < length && data[offset + i] === what[i]) { + ++i; + } + if (i >= length) { + break; + } + offset++; + skipped++; + } + return skipped; + } + var objRegExp = /^(\d+)\s+(\d+)\s+obj\b/; + var trailerBytes = new Uint8Array([ + 116, + 114, + 97, + 105, + 108, + 101, + 114 + ]); + var startxrefBytes = new Uint8Array([ + 115, + 116, + 97, + 114, + 116, + 120, + 114, + 101, + 102 + ]); + var endobjBytes = new Uint8Array([ + 101, + 110, + 100, + 111, + 98, + 106 + ]); + var xrefBytes = new Uint8Array([ + 47, + 88, + 82, + 101, + 102 + ]); + this.entries.length = 0; + var stream = this.stream; + stream.pos = 0; + var buffer = stream.getBytes(); + var position = stream.start, length = buffer.length; + var trailers = [], xrefStms = []; + while (position < length) { + var ch = buffer[position]; + if (ch === TAB || ch === LF || ch === CR || ch === SPACE) { + ++position; + continue; + } + if (ch === PERCENT) { + do { + ++position; + if (position >= length) { + break; + } + ch = buffer[position]; + } while (ch !== LF && ch !== CR); + continue; + } + var token = readToken(buffer, position); + var m; + if (token.indexOf('xref') === 0 && (token.length === 4 || /\s/.test(token[4]))) { + position += skipUntil(buffer, position, trailerBytes); + trailers.push(position); + position += skipUntil(buffer, position, startxrefBytes); + } else if (m = objRegExp.exec(token)) { + if (typeof this.entries[m[1]] === 'undefined') { + this.entries[m[1]] = { + offset: position - stream.start, + gen: m[2] | 0, + uncompressed: true + }; + } + var contentLength = skipUntil(buffer, position, endobjBytes) + 7; + var content = buffer.subarray(position, position + contentLength); + var xrefTagOffset = skipUntil(content, 0, xrefBytes); + if (xrefTagOffset < contentLength && content[xrefTagOffset + 5] < 64) { + xrefStms.push(position - stream.start); + this.xrefstms[position - stream.start] = 1; + } + position += contentLength; + } else if (token.indexOf('trailer') === 0 && (token.length === 7 || /\s/.test(token[7]))) { + trailers.push(position); + position += skipUntil(buffer, position, startxrefBytes); + } else { + position += token.length + 1; + } + } + var i, ii; + for (i = 0, ii = xrefStms.length; i < ii; ++i) { + this.startXRefQueue.push(xrefStms[i]); + this.readXRef(true); + } + var dict; + for (i = 0, ii = trailers.length; i < ii; ++i) { + stream.pos = trailers[i]; + var parser = new Parser(new Lexer(stream), true, this, true); + var obj = parser.getObj(); + if (!isCmd(obj, 'trailer')) { + continue; + } + dict = parser.getObj(); + if (!isDict(dict)) { + continue; + } + if (dict.has('ID')) { + return dict; + } + } + if (dict) { + return dict; + } + throw new InvalidPDFException('Invalid PDF structure'); + }, + readXRef: function XRef_readXRef(recoveryMode) { + var stream = this.stream; + try { + while (this.startXRefQueue.length) { + var startXRef = this.startXRefQueue[0]; + stream.pos = startXRef + stream.start; + var parser = new Parser(new Lexer(stream), true, this); + var obj = parser.getObj(); + var dict; + if (isCmd(obj, 'xref')) { + dict = this.processXRefTable(parser); + if (!this.topDict) { + this.topDict = dict; + } + obj = dict.get('XRefStm'); + if (isInt(obj)) { + var pos = obj; + if (!(pos in this.xrefstms)) { + this.xrefstms[pos] = 1; + this.startXRefQueue.push(pos); + } + } + } else if (isInt(obj)) { + if (!isInt(parser.getObj()) || !isCmd(parser.getObj(), 'obj') || !isStream(obj = parser.getObj())) { + error('Invalid XRef stream'); + } + dict = this.processXRefStream(obj); + if (!this.topDict) { + this.topDict = dict; + } + if (!dict) { + error('Failed to read XRef stream'); + } + } else { + error('Invalid XRef stream header'); + } + obj = dict.get('Prev'); + if (isInt(obj)) { + this.startXRefQueue.push(obj); + } else if (isRef(obj)) { + this.startXRefQueue.push(obj.num); + } + this.startXRefQueue.shift(); + } + return this.topDict; + } catch (e) { + if (e instanceof MissingDataException) { + throw e; + } + info('(while reading XRef): ' + e); + } + if (recoveryMode) { + return; + } + throw new XRefParseException(); + }, + getEntry: function XRef_getEntry(i) { + var xrefEntry = this.entries[i]; + if (xrefEntry && !xrefEntry.free && xrefEntry.offset) { + return xrefEntry; + } + return null; + }, + fetchIfRef: function XRef_fetchIfRef(obj, suppressEncryption) { + if (!isRef(obj)) { + return obj; + } + return this.fetch(obj, suppressEncryption); + }, + fetch: function XRef_fetch(ref, suppressEncryption) { + assert(isRef(ref), 'ref object is not a reference'); + var num = ref.num; + if (num in this.cache) { + var cacheEntry = this.cache[num]; + return cacheEntry; + } + var xrefEntry = this.getEntry(num); + if (xrefEntry === null) { + return this.cache[num] = null; + } + if (xrefEntry.uncompressed) { + xrefEntry = this.fetchUncompressed(ref, xrefEntry, suppressEncryption); + } else { + xrefEntry = this.fetchCompressed(xrefEntry, suppressEncryption); + } + if (isDict(xrefEntry)) { + xrefEntry.objId = ref.toString(); + } else if (isStream(xrefEntry)) { + xrefEntry.dict.objId = ref.toString(); + } + return xrefEntry; + }, + fetchUncompressed: function XRef_fetchUncompressed(ref, xrefEntry, suppressEncryption) { + var gen = ref.gen; + var num = ref.num; + if (xrefEntry.gen !== gen) { + error('inconsistent generation in XRef'); + } + var stream = this.stream.makeSubStream(xrefEntry.offset + this.stream.start); + var parser = new Parser(new Lexer(stream), true, this); + var obj1 = parser.getObj(); + var obj2 = parser.getObj(); + var obj3 = parser.getObj(); + if (!isInt(obj1) || parseInt(obj1, 10) !== num || !isInt(obj2) || parseInt(obj2, 10) !== gen || !isCmd(obj3)) { + error('bad XRef entry'); + } + if (!isCmd(obj3, 'obj')) { + if (obj3.cmd.indexOf('obj') === 0) { + num = parseInt(obj3.cmd.substring(3), 10); + if (!isNaN(num)) { + return num; + } + } + error('bad XRef entry'); + } + if (this.encrypt && !suppressEncryption) { + xrefEntry = parser.getObj(this.encrypt.createCipherTransform(num, gen)); + } else { + xrefEntry = parser.getObj(); + } + if (!isStream(xrefEntry)) { + this.cache[num] = xrefEntry; + } + return xrefEntry; + }, + fetchCompressed: function XRef_fetchCompressed(xrefEntry, suppressEncryption) { + var tableOffset = xrefEntry.offset; + var stream = this.fetch(new Ref(tableOffset, 0)); + if (!isStream(stream)) { + error('bad ObjStm stream'); + } + var first = stream.dict.get('First'); + var n = stream.dict.get('N'); + if (!isInt(first) || !isInt(n)) { + error('invalid first and n parameters for ObjStm stream'); + } + var parser = new Parser(new Lexer(stream), false, this); + parser.allowStreams = true; + var i, entries = [], num, nums = []; + for (i = 0; i < n; ++i) { + num = parser.getObj(); + if (!isInt(num)) { + error('invalid object number in the ObjStm stream: ' + num); + } + nums.push(num); + var offset = parser.getObj(); + if (!isInt(offset)) { + error('invalid object offset in the ObjStm stream: ' + offset); + } + } + for (i = 0; i < n; ++i) { + entries.push(parser.getObj()); + if (isCmd(parser.buf1, 'endobj')) { + parser.shift(); + } + num = nums[i]; + var entry = this.entries[num]; + if (entry && entry.offset === tableOffset && entry.gen === i) { + this.cache[num] = entries[i]; + } + } + xrefEntry = entries[xrefEntry.gen]; + if (xrefEntry === undefined) { + error('bad XRef entry for compressed object'); + } + return xrefEntry; + }, + fetchIfRefAsync: function XRef_fetchIfRefAsync(obj, suppressEncryption) { + if (!isRef(obj)) { + return Promise.resolve(obj); + } + return this.fetchAsync(obj, suppressEncryption); + }, + fetchAsync: function XRef_fetchAsync(ref, suppressEncryption) { + var streamManager = this.stream.manager; + var xref = this; + return new Promise(function tryFetch(resolve, reject) { + try { + resolve(xref.fetch(ref, suppressEncryption)); + } catch (e) { + if (e instanceof MissingDataException) { + streamManager.requestRange(e.begin, e.end).then(function () { + tryFetch(resolve, reject); + }, reject); + return; + } + reject(e); + } + }); + }, + getCatalogObj: function XRef_getCatalogObj() { + return this.root; + } + }; + return XRef; + }(); + var NameOrNumberTree = function NameOrNumberTreeClosure() { + function NameOrNumberTree(root, xref) { + throw new Error('Cannot initialize NameOrNumberTree.'); + } + NameOrNumberTree.prototype = { + getAll: function NameOrNumberTree_getAll() { + var dict = Object.create(null); + if (!this.root) { + return dict; + } + var xref = this.xref; + var processed = new RefSet(); + processed.put(this.root); + var queue = [this.root]; + while (queue.length > 0) { + var i, n; + var obj = xref.fetchIfRef(queue.shift()); + if (!isDict(obj)) { + continue; + } + if (obj.has('Kids')) { + var kids = obj.get('Kids'); + for (i = 0, n = kids.length; i < n; i++) { + var kid = kids[i]; + assert(!processed.has(kid), 'Duplicate entry in "' + this._type + '" tree.'); + queue.push(kid); + processed.put(kid); + } + continue; + } + var entries = obj.get(this._type); + if (isArray(entries)) { + for (i = 0, n = entries.length; i < n; i += 2) { + dict[xref.fetchIfRef(entries[i])] = xref.fetchIfRef(entries[i + 1]); + } + } + } + return dict; + }, + get: function NameOrNumberTree_get(key) { + if (!this.root) { + return null; + } + var xref = this.xref; + var kidsOrEntries = xref.fetchIfRef(this.root); + var loopCount = 0; + var MAX_LEVELS = 10; + var l, r, m; + while (kidsOrEntries.has('Kids')) { + if (++loopCount > MAX_LEVELS) { + warn('Search depth limit reached for "' + this._type + '" tree.'); + return null; + } + var kids = kidsOrEntries.get('Kids'); + if (!isArray(kids)) { + return null; + } + l = 0; + r = kids.length - 1; + while (l <= r) { + m = l + r >> 1; + var kid = xref.fetchIfRef(kids[m]); + var limits = kid.get('Limits'); + if (key < xref.fetchIfRef(limits[0])) { + r = m - 1; + } else if (key > xref.fetchIfRef(limits[1])) { + l = m + 1; + } else { + kidsOrEntries = xref.fetchIfRef(kids[m]); + break; + } + } + if (l > r) { + return null; + } + } + var entries = kidsOrEntries.get(this._type); + if (isArray(entries)) { + l = 0; + r = entries.length - 2; + while (l <= r) { + m = l + r & ~1; + var currentKey = xref.fetchIfRef(entries[m]); + if (key < currentKey) { + r = m - 2; + } else if (key > currentKey) { + l = m + 2; + } else { + return xref.fetchIfRef(entries[m + 1]); + } + } + } + return null; + } + }; + return NameOrNumberTree; + }(); + var NameTree = function NameTreeClosure() { + function NameTree(root, xref) { + this.root = root; + this.xref = xref; + this._type = 'Names'; + } + Util.inherit(NameTree, NameOrNumberTree, {}); + return NameTree; + }(); + var NumberTree = function NumberTreeClosure() { + function NumberTree(root, xref) { + this.root = root; + this.xref = xref; + this._type = 'Nums'; + } + Util.inherit(NumberTree, NameOrNumberTree, {}); + return NumberTree; + }(); + var FileSpec = function FileSpecClosure() { + function FileSpec(root, xref) { + if (!root || !isDict(root)) { + return; + } + this.xref = xref; + this.root = root; + if (root.has('FS')) { + this.fs = root.get('FS'); + } + this.description = root.has('Desc') ? stringToPDFString(root.get('Desc')) : ''; + if (root.has('RF')) { + warn('Related file specifications are not supported'); + } + this.contentAvailable = true; + if (!root.has('EF')) { + this.contentAvailable = false; + warn('Non-embedded file specifications are not supported'); + } + } + function pickPlatformItem(dict) { + if (dict.has('UF')) { + return dict.get('UF'); + } else if (dict.has('F')) { + return dict.get('F'); + } else if (dict.has('Unix')) { + return dict.get('Unix'); + } else if (dict.has('Mac')) { + return dict.get('Mac'); + } else if (dict.has('DOS')) { + return dict.get('DOS'); + } + return null; + } + FileSpec.prototype = { + get filename() { + if (!this._filename && this.root) { + var filename = pickPlatformItem(this.root) || 'unnamed'; + this._filename = stringToPDFString(filename).replace(/\\\\/g, '\\').replace(/\\\//g, '/').replace(/\\/g, '/'); + } + return this._filename; + }, + get content() { + if (!this.contentAvailable) { + return null; + } + if (!this.contentRef && this.root) { + this.contentRef = pickPlatformItem(this.root.get('EF')); + } + var content = null; + if (this.contentRef) { + var xref = this.xref; + var fileObj = xref.fetchIfRef(this.contentRef); + if (fileObj && isStream(fileObj)) { + content = fileObj.getBytes(); + } else { + warn('Embedded file specification points to non-existing/invalid ' + 'content'); + } + } else { + warn('Embedded file specification does not have a content'); + } + return content; + }, + get serializable() { + return { + filename: this.filename, + content: this.content + }; + } + }; + return FileSpec; + }(); + var ObjectLoader = function () { + function mayHaveChildren(value) { + return isRef(value) || isDict(value) || isArray(value) || isStream(value); + } + function addChildren(node, nodesToVisit) { + var value; + if (isDict(node) || isStream(node)) { + var map; + if (isDict(node)) { + map = node.map; + } else { + map = node.dict.map; + } + for (var key in map) { + value = map[key]; + if (mayHaveChildren(value)) { + nodesToVisit.push(value); + } + } + } else if (isArray(node)) { + for (var i = 0, ii = node.length; i < ii; i++) { + value = node[i]; + if (mayHaveChildren(value)) { + nodesToVisit.push(value); + } + } + } + } + function ObjectLoader(obj, keys, xref) { + this.obj = obj; + this.keys = keys; + this.xref = xref; + this.refSet = null; + this.capability = null; + } + ObjectLoader.prototype = { + load: function ObjectLoader_load() { + var keys = this.keys; + this.capability = createPromiseCapability(); + if (!(this.xref.stream instanceof ChunkedStream) || this.xref.stream.getMissingChunks().length === 0) { + this.capability.resolve(); + return this.capability.promise; + } + this.refSet = new RefSet(); + var nodesToVisit = []; + for (var i = 0; i < keys.length; i++) { + nodesToVisit.push(this.obj[keys[i]]); + } + this._walk(nodesToVisit); + return this.capability.promise; + }, + _walk: function ObjectLoader_walk(nodesToVisit) { + var nodesToRevisit = []; + var pendingRequests = []; + while (nodesToVisit.length) { + var currentNode = nodesToVisit.pop(); + if (isRef(currentNode)) { + if (this.refSet.has(currentNode)) { + continue; + } + try { + var ref = currentNode; + this.refSet.put(ref); + currentNode = this.xref.fetch(currentNode); + } catch (e) { + if (!(e instanceof MissingDataException)) { + throw e; + } + nodesToRevisit.push(currentNode); + pendingRequests.push({ + begin: e.begin, + end: e.end + }); + } + } + if (currentNode && currentNode.getBaseStreams) { + var baseStreams = currentNode.getBaseStreams(); + var foundMissingData = false; + for (var i = 0; i < baseStreams.length; i++) { + var stream = baseStreams[i]; + if (stream.getMissingChunks && stream.getMissingChunks().length) { + foundMissingData = true; + pendingRequests.push({ + begin: stream.start, + end: stream.end + }); + } + } + if (foundMissingData) { + nodesToRevisit.push(currentNode); + } + } + addChildren(currentNode, nodesToVisit); + } + if (pendingRequests.length) { + this.xref.stream.manager.requestRanges(pendingRequests).then(function pendingRequestCallback() { + nodesToVisit = nodesToRevisit; + for (var i = 0; i < nodesToRevisit.length; i++) { + var node = nodesToRevisit[i]; + if (isRef(node)) { + this.refSet.remove(node); + } + } + this._walk(nodesToVisit); + }.bind(this), this.capability.reject); + return; + } + this.refSet = null; + this.capability.resolve(); + } + }; + return ObjectLoader; + }(); + exports.Catalog = Catalog; + exports.ObjectLoader = ObjectLoader; + exports.XRef = XRef; + exports.FileSpec = FileSpec; + })); + (function (root, factory) { + factory(root.pdfjsCorePattern = {}, root.pdfjsSharedUtil, root.pdfjsCorePrimitives, root.pdfjsCoreFunction, root.pdfjsCoreColorSpace); + }(this, function (exports, sharedUtil, corePrimitives, coreFunction, coreColorSpace) { + var UNSUPPORTED_FEATURES = sharedUtil.UNSUPPORTED_FEATURES; + var MissingDataException = sharedUtil.MissingDataException; + var Util = sharedUtil.Util; + var assert = sharedUtil.assert; + var error = sharedUtil.error; + var info = sharedUtil.info; + var warn = sharedUtil.warn; + var isStream = corePrimitives.isStream; + var PDFFunction = coreFunction.PDFFunction; + var ColorSpace = coreColorSpace.ColorSpace; + var ShadingType = { + FUNCTION_BASED: 1, + AXIAL: 2, + RADIAL: 3, + FREE_FORM_MESH: 4, + LATTICE_FORM_MESH: 5, + COONS_PATCH_MESH: 6, + TENSOR_PATCH_MESH: 7 + }; + var Pattern = function PatternClosure() { + function Pattern() { + error('should not call Pattern constructor'); + } + Pattern.prototype = { + getPattern: function Pattern_getPattern(ctx) { + error('Should not call Pattern.getStyle: ' + ctx); + } + }; + Pattern.parseShading = function Pattern_parseShading(shading, matrix, xref, res, handler) { + var dict = isStream(shading) ? shading.dict : shading; + var type = dict.get('ShadingType'); + try { + switch (type) { + case ShadingType.AXIAL: + case ShadingType.RADIAL: + return new Shadings.RadialAxial(dict, matrix, xref, res); + case ShadingType.FREE_FORM_MESH: + case ShadingType.LATTICE_FORM_MESH: + case ShadingType.COONS_PATCH_MESH: + case ShadingType.TENSOR_PATCH_MESH: + return new Shadings.Mesh(shading, matrix, xref, res); + default: + throw new Error('Unsupported ShadingType: ' + type); + } + } catch (ex) { + if (ex instanceof MissingDataException) { + throw ex; + } + handler.send('UnsupportedFeature', { featureId: UNSUPPORTED_FEATURES.shadingPattern }); + warn(ex); + return new Shadings.Dummy(); + } + }; + return Pattern; + }(); + var Shadings = {}; + Shadings.SMALL_NUMBER = 1e-6; + Shadings.RadialAxial = function RadialAxialClosure() { + function RadialAxial(dict, matrix, xref, res) { + this.matrix = matrix; + this.coordsArr = dict.getArray('Coords'); + this.shadingType = dict.get('ShadingType'); + this.type = 'Pattern'; + var cs = dict.get('ColorSpace', 'CS'); + cs = ColorSpace.parse(cs, xref, res); + this.cs = cs; + var t0 = 0.0, t1 = 1.0; + if (dict.has('Domain')) { + var domainArr = dict.getArray('Domain'); + t0 = domainArr[0]; + t1 = domainArr[1]; + } + var extendStart = false, extendEnd = false; + if (dict.has('Extend')) { + var extendArr = dict.getArray('Extend'); + extendStart = extendArr[0]; + extendEnd = extendArr[1]; + } + if (this.shadingType === ShadingType.RADIAL && (!extendStart || !extendEnd)) { + var x1 = this.coordsArr[0]; + var y1 = this.coordsArr[1]; + var r1 = this.coordsArr[2]; + var x2 = this.coordsArr[3]; + var y2 = this.coordsArr[4]; + var r2 = this.coordsArr[5]; + var distance = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)); + if (r1 <= r2 + distance && r2 <= r1 + distance) { + warn('Unsupported radial gradient.'); + } + } + this.extendStart = extendStart; + this.extendEnd = extendEnd; + var fnObj = dict.get('Function'); + var fn = PDFFunction.parseArray(xref, fnObj); + var diff = t1 - t0; + var step = diff / 10; + var colorStops = this.colorStops = []; + if (t0 >= t1 || step <= 0) { + info('Bad shading domain.'); + return; + } + var color = new Float32Array(cs.numComps), ratio = new Float32Array(1); + var rgbColor; + for (var i = t0; i <= t1; i += step) { + ratio[0] = i; + fn(ratio, 0, color, 0); + rgbColor = cs.getRgb(color, 0); + var cssColor = Util.makeCssRgb(rgbColor[0], rgbColor[1], rgbColor[2]); + colorStops.push([ + (i - t0) / diff, + cssColor + ]); + } + var background = 'transparent'; + if (dict.has('Background')) { + rgbColor = cs.getRgb(dict.get('Background'), 0); + background = Util.makeCssRgb(rgbColor[0], rgbColor[1], rgbColor[2]); + } + if (!extendStart) { + colorStops.unshift([ + 0, + background + ]); + colorStops[1][0] += Shadings.SMALL_NUMBER; + } + if (!extendEnd) { + colorStops[colorStops.length - 1][0] -= Shadings.SMALL_NUMBER; + colorStops.push([ + 1, + background + ]); + } + this.colorStops = colorStops; + } + RadialAxial.prototype = { + getIR: function RadialAxial_getIR() { + var coordsArr = this.coordsArr; + var shadingType = this.shadingType; + var type, p0, p1, r0, r1; + if (shadingType === ShadingType.AXIAL) { + p0 = [ + coordsArr[0], + coordsArr[1] + ]; + p1 = [ + coordsArr[2], + coordsArr[3] + ]; + r0 = null; + r1 = null; + type = 'axial'; + } else if (shadingType === ShadingType.RADIAL) { + p0 = [ + coordsArr[0], + coordsArr[1] + ]; + p1 = [ + coordsArr[3], + coordsArr[4] + ]; + r0 = coordsArr[2]; + r1 = coordsArr[5]; + type = 'radial'; + } else { + error('getPattern type unknown: ' + shadingType); + } + var matrix = this.matrix; + if (matrix) { + p0 = Util.applyTransform(p0, matrix); + p1 = Util.applyTransform(p1, matrix); + if (shadingType === ShadingType.RADIAL) { + var scale = Util.singularValueDecompose2dScale(matrix); + r0 *= scale[0]; + r1 *= scale[1]; + } + } + return [ + 'RadialAxial', + type, + this.colorStops, + p0, + p1, + r0, + r1 + ]; + } + }; + return RadialAxial; + }(); + Shadings.Mesh = function MeshClosure() { + function MeshStreamReader(stream, context) { + this.stream = stream; + this.context = context; + this.buffer = 0; + this.bufferLength = 0; + var numComps = context.numComps; + this.tmpCompsBuf = new Float32Array(numComps); + var csNumComps = context.colorSpace.numComps; + this.tmpCsCompsBuf = context.colorFn ? new Float32Array(csNumComps) : this.tmpCompsBuf; + } + MeshStreamReader.prototype = { + get hasData() { + if (this.stream.end) { + return this.stream.pos < this.stream.end; + } + if (this.bufferLength > 0) { + return true; + } + var nextByte = this.stream.getByte(); + if (nextByte < 0) { + return false; + } + this.buffer = nextByte; + this.bufferLength = 8; + return true; + }, + readBits: function MeshStreamReader_readBits(n) { + var buffer = this.buffer; + var bufferLength = this.bufferLength; + if (n === 32) { + if (bufferLength === 0) { + return (this.stream.getByte() << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte()) >>> 0; + } + buffer = buffer << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte(); + var nextByte = this.stream.getByte(); + this.buffer = nextByte & (1 << bufferLength) - 1; + return (buffer << 8 - bufferLength | (nextByte & 0xFF) >> bufferLength) >>> 0; + } + if (n === 8 && bufferLength === 0) { + return this.stream.getByte(); + } + while (bufferLength < n) { + buffer = buffer << 8 | this.stream.getByte(); + bufferLength += 8; + } + bufferLength -= n; + this.bufferLength = bufferLength; + this.buffer = buffer & (1 << bufferLength) - 1; + return buffer >> bufferLength; + }, + align: function MeshStreamReader_align() { + this.buffer = 0; + this.bufferLength = 0; + }, + readFlag: function MeshStreamReader_readFlag() { + return this.readBits(this.context.bitsPerFlag); + }, + readCoordinate: function MeshStreamReader_readCoordinate() { + var bitsPerCoordinate = this.context.bitsPerCoordinate; + var xi = this.readBits(bitsPerCoordinate); + var yi = this.readBits(bitsPerCoordinate); + var decode = this.context.decode; + var scale = bitsPerCoordinate < 32 ? 1 / ((1 << bitsPerCoordinate) - 1) : 2.3283064365386963e-10; + return [ + xi * scale * (decode[1] - decode[0]) + decode[0], + yi * scale * (decode[3] - decode[2]) + decode[2] + ]; + }, + readComponents: function MeshStreamReader_readComponents() { + var numComps = this.context.numComps; + var bitsPerComponent = this.context.bitsPerComponent; + var scale = bitsPerComponent < 32 ? 1 / ((1 << bitsPerComponent) - 1) : 2.3283064365386963e-10; + var decode = this.context.decode; + var components = this.tmpCompsBuf; + for (var i = 0, j = 4; i < numComps; i++, j += 2) { + var ci = this.readBits(bitsPerComponent); + components[i] = ci * scale * (decode[j + 1] - decode[j]) + decode[j]; + } + var color = this.tmpCsCompsBuf; + if (this.context.colorFn) { + this.context.colorFn(components, 0, color, 0); + } + return this.context.colorSpace.getRgb(color, 0); + } + }; + function decodeType4Shading(mesh, reader) { + var coords = mesh.coords; + var colors = mesh.colors; + var operators = []; + var ps = []; + var verticesLeft = 0; + while (reader.hasData) { + var f = reader.readFlag(); + var coord = reader.readCoordinate(); + var color = reader.readComponents(); + if (verticesLeft === 0) { + assert(0 <= f && f <= 2, 'Unknown type4 flag'); + switch (f) { + case 0: + verticesLeft = 3; + break; + case 1: + ps.push(ps[ps.length - 2], ps[ps.length - 1]); + verticesLeft = 1; + break; + case 2: + ps.push(ps[ps.length - 3], ps[ps.length - 1]); + verticesLeft = 1; + break; + } + operators.push(f); + } + ps.push(coords.length); + coords.push(coord); + colors.push(color); + verticesLeft--; + reader.align(); + } + mesh.figures.push({ + type: 'triangles', + coords: new Int32Array(ps), + colors: new Int32Array(ps) + }); + } + function decodeType5Shading(mesh, reader, verticesPerRow) { + var coords = mesh.coords; + var colors = mesh.colors; + var ps = []; + while (reader.hasData) { + var coord = reader.readCoordinate(); + var color = reader.readComponents(); + ps.push(coords.length); + coords.push(coord); + colors.push(color); + } + mesh.figures.push({ + type: 'lattice', + coords: new Int32Array(ps), + colors: new Int32Array(ps), + verticesPerRow: verticesPerRow + }); + } + var MIN_SPLIT_PATCH_CHUNKS_AMOUNT = 3; + var MAX_SPLIT_PATCH_CHUNKS_AMOUNT = 20; + var TRIANGLE_DENSITY = 20; + var getB = function getBClosure() { + function buildB(count) { + var lut = []; + for (var i = 0; i <= count; i++) { + var t = i / count, t_ = 1 - t; + lut.push(new Float32Array([ + t_ * t_ * t_, + 3 * t * t_ * t_, + 3 * t * t * t_, + t * t * t + ])); + } + return lut; + } + var cache = []; + return function getB(count) { + if (!cache[count]) { + cache[count] = buildB(count); + } + return cache[count]; + }; + }(); + function buildFigureFromPatch(mesh, index) { + var figure = mesh.figures[index]; + assert(figure.type === 'patch', 'Unexpected patch mesh figure'); + var coords = mesh.coords, colors = mesh.colors; + var pi = figure.coords; + var ci = figure.colors; + var figureMinX = Math.min(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]); + var figureMinY = Math.min(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]); + var figureMaxX = Math.max(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]); + var figureMaxY = Math.max(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]); + var splitXBy = Math.ceil((figureMaxX - figureMinX) * TRIANGLE_DENSITY / (mesh.bounds[2] - mesh.bounds[0])); + splitXBy = Math.max(MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitXBy)); + var splitYBy = Math.ceil((figureMaxY - figureMinY) * TRIANGLE_DENSITY / (mesh.bounds[3] - mesh.bounds[1])); + splitYBy = Math.max(MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitYBy)); + var verticesPerRow = splitXBy + 1; + var figureCoords = new Int32Array((splitYBy + 1) * verticesPerRow); + var figureColors = new Int32Array((splitYBy + 1) * verticesPerRow); + var k = 0; + var cl = new Uint8Array(3), cr = new Uint8Array(3); + var c0 = colors[ci[0]], c1 = colors[ci[1]], c2 = colors[ci[2]], c3 = colors[ci[3]]; + var bRow = getB(splitYBy), bCol = getB(splitXBy); + for (var row = 0; row <= splitYBy; row++) { + cl[0] = (c0[0] * (splitYBy - row) + c2[0] * row) / splitYBy | 0; + cl[1] = (c0[1] * (splitYBy - row) + c2[1] * row) / splitYBy | 0; + cl[2] = (c0[2] * (splitYBy - row) + c2[2] * row) / splitYBy | 0; + cr[0] = (c1[0] * (splitYBy - row) + c3[0] * row) / splitYBy | 0; + cr[1] = (c1[1] * (splitYBy - row) + c3[1] * row) / splitYBy | 0; + cr[2] = (c1[2] * (splitYBy - row) + c3[2] * row) / splitYBy | 0; + for (var col = 0; col <= splitXBy; col++, k++) { + if ((row === 0 || row === splitYBy) && (col === 0 || col === splitXBy)) { + continue; + } + var x = 0, y = 0; + var q = 0; + for (var i = 0; i <= 3; i++) { + for (var j = 0; j <= 3; j++, q++) { + var m = bRow[row][i] * bCol[col][j]; + x += coords[pi[q]][0] * m; + y += coords[pi[q]][1] * m; + } + } + figureCoords[k] = coords.length; + coords.push([ + x, + y + ]); + figureColors[k] = colors.length; + var newColor = new Uint8Array(3); + newColor[0] = (cl[0] * (splitXBy - col) + cr[0] * col) / splitXBy | 0; + newColor[1] = (cl[1] * (splitXBy - col) + cr[1] * col) / splitXBy | 0; + newColor[2] = (cl[2] * (splitXBy - col) + cr[2] * col) / splitXBy | 0; + colors.push(newColor); + } + } + figureCoords[0] = pi[0]; + figureColors[0] = ci[0]; + figureCoords[splitXBy] = pi[3]; + figureColors[splitXBy] = ci[1]; + figureCoords[verticesPerRow * splitYBy] = pi[12]; + figureColors[verticesPerRow * splitYBy] = ci[2]; + figureCoords[verticesPerRow * splitYBy + splitXBy] = pi[15]; + figureColors[verticesPerRow * splitYBy + splitXBy] = ci[3]; + mesh.figures[index] = { + type: 'lattice', + coords: figureCoords, + colors: figureColors, + verticesPerRow: verticesPerRow + }; + } + function decodeType6Shading(mesh, reader) { + var coords = mesh.coords; + var colors = mesh.colors; + var ps = new Int32Array(16); + var cs = new Int32Array(4); + while (reader.hasData) { + var f = reader.readFlag(); + assert(0 <= f && f <= 3, 'Unknown type6 flag'); + var i, ii; + var pi = coords.length; + for (i = 0, ii = f !== 0 ? 8 : 12; i < ii; i++) { + coords.push(reader.readCoordinate()); + } + var ci = colors.length; + for (i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) { + colors.push(reader.readComponents()); + } + var tmp1, tmp2, tmp3, tmp4; + switch (f) { + case 0: + ps[12] = pi + 3; + ps[13] = pi + 4; + ps[14] = pi + 5; + ps[15] = pi + 6; + ps[8] = pi + 2; + ps[11] = pi + 7; + ps[4] = pi + 1; + ps[7] = pi + 8; + ps[0] = pi; + ps[1] = pi + 11; + ps[2] = pi + 10; + ps[3] = pi + 9; + cs[2] = ci + 1; + cs[3] = ci + 2; + cs[0] = ci; + cs[1] = ci + 3; + break; + case 1: + tmp1 = ps[12]; + tmp2 = ps[13]; + tmp3 = ps[14]; + tmp4 = ps[15]; + ps[12] = tmp4; + ps[13] = pi + 0; + ps[14] = pi + 1; + ps[15] = pi + 2; + ps[8] = tmp3; + ps[11] = pi + 3; + ps[4] = tmp2; + ps[7] = pi + 4; + ps[0] = tmp1; + ps[1] = pi + 7; + ps[2] = pi + 6; + ps[3] = pi + 5; + tmp1 = cs[2]; + tmp2 = cs[3]; + cs[2] = tmp2; + cs[3] = ci; + cs[0] = tmp1; + cs[1] = ci + 1; + break; + case 2: + tmp1 = ps[15]; + tmp2 = ps[11]; + ps[12] = ps[3]; + ps[13] = pi + 0; + ps[14] = pi + 1; + ps[15] = pi + 2; + ps[8] = ps[7]; + ps[11] = pi + 3; + ps[4] = tmp2; + ps[7] = pi + 4; + ps[0] = tmp1; + ps[1] = pi + 7; + ps[2] = pi + 6; + ps[3] = pi + 5; + tmp1 = cs[3]; + cs[2] = cs[1]; + cs[3] = ci; + cs[0] = tmp1; + cs[1] = ci + 1; + break; + case 3: + ps[12] = ps[0]; + ps[13] = pi + 0; + ps[14] = pi + 1; + ps[15] = pi + 2; + ps[8] = ps[1]; + ps[11] = pi + 3; + ps[4] = ps[2]; + ps[7] = pi + 4; + ps[0] = ps[3]; + ps[1] = pi + 7; + ps[2] = pi + 6; + ps[3] = pi + 5; + cs[2] = cs[0]; + cs[3] = ci; + cs[0] = cs[1]; + cs[1] = ci + 1; + break; + } + ps[5] = coords.length; + coords.push([ + (-4 * coords[ps[0]][0] - coords[ps[15]][0] + 6 * (coords[ps[4]][0] + coords[ps[1]][0]) - 2 * (coords[ps[12]][0] + coords[ps[3]][0]) + 3 * (coords[ps[13]][0] + coords[ps[7]][0])) / 9, + (-4 * coords[ps[0]][1] - coords[ps[15]][1] + 6 * (coords[ps[4]][1] + coords[ps[1]][1]) - 2 * (coords[ps[12]][1] + coords[ps[3]][1]) + 3 * (coords[ps[13]][1] + coords[ps[7]][1])) / 9 + ]); + ps[6] = coords.length; + coords.push([ + (-4 * coords[ps[3]][0] - coords[ps[12]][0] + 6 * (coords[ps[2]][0] + coords[ps[7]][0]) - 2 * (coords[ps[0]][0] + coords[ps[15]][0]) + 3 * (coords[ps[4]][0] + coords[ps[14]][0])) / 9, + (-4 * coords[ps[3]][1] - coords[ps[12]][1] + 6 * (coords[ps[2]][1] + coords[ps[7]][1]) - 2 * (coords[ps[0]][1] + coords[ps[15]][1]) + 3 * (coords[ps[4]][1] + coords[ps[14]][1])) / 9 + ]); + ps[9] = coords.length; + coords.push([ + (-4 * coords[ps[12]][0] - coords[ps[3]][0] + 6 * (coords[ps[8]][0] + coords[ps[13]][0]) - 2 * (coords[ps[0]][0] + coords[ps[15]][0]) + 3 * (coords[ps[11]][0] + coords[ps[1]][0])) / 9, + (-4 * coords[ps[12]][1] - coords[ps[3]][1] + 6 * (coords[ps[8]][1] + coords[ps[13]][1]) - 2 * (coords[ps[0]][1] + coords[ps[15]][1]) + 3 * (coords[ps[11]][1] + coords[ps[1]][1])) / 9 + ]); + ps[10] = coords.length; + coords.push([ + (-4 * coords[ps[15]][0] - coords[ps[0]][0] + 6 * (coords[ps[11]][0] + coords[ps[14]][0]) - 2 * (coords[ps[12]][0] + coords[ps[3]][0]) + 3 * (coords[ps[2]][0] + coords[ps[8]][0])) / 9, + (-4 * coords[ps[15]][1] - coords[ps[0]][1] + 6 * (coords[ps[11]][1] + coords[ps[14]][1]) - 2 * (coords[ps[12]][1] + coords[ps[3]][1]) + 3 * (coords[ps[2]][1] + coords[ps[8]][1])) / 9 + ]); + mesh.figures.push({ + type: 'patch', + coords: new Int32Array(ps), + colors: new Int32Array(cs) + }); + } + } + function decodeType7Shading(mesh, reader) { + var coords = mesh.coords; + var colors = mesh.colors; + var ps = new Int32Array(16); + var cs = new Int32Array(4); + while (reader.hasData) { + var f = reader.readFlag(); + assert(0 <= f && f <= 3, 'Unknown type7 flag'); + var i, ii; + var pi = coords.length; + for (i = 0, ii = f !== 0 ? 12 : 16; i < ii; i++) { + coords.push(reader.readCoordinate()); + } + var ci = colors.length; + for (i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) { + colors.push(reader.readComponents()); + } + var tmp1, tmp2, tmp3, tmp4; + switch (f) { + case 0: + ps[12] = pi + 3; + ps[13] = pi + 4; + ps[14] = pi + 5; + ps[15] = pi + 6; + ps[8] = pi + 2; + ps[9] = pi + 13; + ps[10] = pi + 14; + ps[11] = pi + 7; + ps[4] = pi + 1; + ps[5] = pi + 12; + ps[6] = pi + 15; + ps[7] = pi + 8; + ps[0] = pi; + ps[1] = pi + 11; + ps[2] = pi + 10; + ps[3] = pi + 9; + cs[2] = ci + 1; + cs[3] = ci + 2; + cs[0] = ci; + cs[1] = ci + 3; + break; + case 1: + tmp1 = ps[12]; + tmp2 = ps[13]; + tmp3 = ps[14]; + tmp4 = ps[15]; + ps[12] = tmp4; + ps[13] = pi + 0; + ps[14] = pi + 1; + ps[15] = pi + 2; + ps[8] = tmp3; + ps[9] = pi + 9; + ps[10] = pi + 10; + ps[11] = pi + 3; + ps[4] = tmp2; + ps[5] = pi + 8; + ps[6] = pi + 11; + ps[7] = pi + 4; + ps[0] = tmp1; + ps[1] = pi + 7; + ps[2] = pi + 6; + ps[3] = pi + 5; + tmp1 = cs[2]; + tmp2 = cs[3]; + cs[2] = tmp2; + cs[3] = ci; + cs[0] = tmp1; + cs[1] = ci + 1; + break; + case 2: + tmp1 = ps[15]; + tmp2 = ps[11]; + ps[12] = ps[3]; + ps[13] = pi + 0; + ps[14] = pi + 1; + ps[15] = pi + 2; + ps[8] = ps[7]; + ps[9] = pi + 9; + ps[10] = pi + 10; + ps[11] = pi + 3; + ps[4] = tmp2; + ps[5] = pi + 8; + ps[6] = pi + 11; + ps[7] = pi + 4; + ps[0] = tmp1; + ps[1] = pi + 7; + ps[2] = pi + 6; + ps[3] = pi + 5; + tmp1 = cs[3]; + cs[2] = cs[1]; + cs[3] = ci; + cs[0] = tmp1; + cs[1] = ci + 1; + break; + case 3: + ps[12] = ps[0]; + ps[13] = pi + 0; + ps[14] = pi + 1; + ps[15] = pi + 2; + ps[8] = ps[1]; + ps[9] = pi + 9; + ps[10] = pi + 10; + ps[11] = pi + 3; + ps[4] = ps[2]; + ps[5] = pi + 8; + ps[6] = pi + 11; + ps[7] = pi + 4; + ps[0] = ps[3]; + ps[1] = pi + 7; + ps[2] = pi + 6; + ps[3] = pi + 5; + cs[2] = cs[0]; + cs[3] = ci; + cs[0] = cs[1]; + cs[1] = ci + 1; + break; + } + mesh.figures.push({ + type: 'patch', + coords: new Int32Array(ps), + colors: new Int32Array(cs) + }); + } + } + function updateBounds(mesh) { + var minX = mesh.coords[0][0], minY = mesh.coords[0][1], maxX = minX, maxY = minY; + for (var i = 1, ii = mesh.coords.length; i < ii; i++) { + var x = mesh.coords[i][0], y = mesh.coords[i][1]; + minX = minX > x ? x : minX; + minY = minY > y ? y : minY; + maxX = maxX < x ? x : maxX; + maxY = maxY < y ? y : maxY; + } + mesh.bounds = [ + minX, + minY, + maxX, + maxY + ]; + } + function packData(mesh) { + var i, ii, j, jj; + var coords = mesh.coords; + var coordsPacked = new Float32Array(coords.length * 2); + for (i = 0, j = 0, ii = coords.length; i < ii; i++) { + var xy = coords[i]; + coordsPacked[j++] = xy[0]; + coordsPacked[j++] = xy[1]; + } + mesh.coords = coordsPacked; + var colors = mesh.colors; + var colorsPacked = new Uint8Array(colors.length * 3); + for (i = 0, j = 0, ii = colors.length; i < ii; i++) { + var c = colors[i]; + colorsPacked[j++] = c[0]; + colorsPacked[j++] = c[1]; + colorsPacked[j++] = c[2]; + } + mesh.colors = colorsPacked; + var figures = mesh.figures; + for (i = 0, ii = figures.length; i < ii; i++) { + var figure = figures[i], ps = figure.coords, cs = figure.colors; + for (j = 0, jj = ps.length; j < jj; j++) { + ps[j] *= 2; + cs[j] *= 3; + } + } + } + function Mesh(stream, matrix, xref, res) { + assert(isStream(stream), 'Mesh data is not a stream'); + var dict = stream.dict; + this.matrix = matrix; + this.shadingType = dict.get('ShadingType'); + this.type = 'Pattern'; + this.bbox = dict.getArray('BBox'); + var cs = dict.get('ColorSpace', 'CS'); + cs = ColorSpace.parse(cs, xref, res); + this.cs = cs; + this.background = dict.has('Background') ? cs.getRgb(dict.get('Background'), 0) : null; + var fnObj = dict.get('Function'); + var fn = fnObj ? PDFFunction.parseArray(xref, fnObj) : null; + this.coords = []; + this.colors = []; + this.figures = []; + var decodeContext = { + bitsPerCoordinate: dict.get('BitsPerCoordinate'), + bitsPerComponent: dict.get('BitsPerComponent'), + bitsPerFlag: dict.get('BitsPerFlag'), + decode: dict.getArray('Decode'), + colorFn: fn, + colorSpace: cs, + numComps: fn ? 1 : cs.numComps + }; + var reader = new MeshStreamReader(stream, decodeContext); + var patchMesh = false; + switch (this.shadingType) { + case ShadingType.FREE_FORM_MESH: + decodeType4Shading(this, reader); + break; + case ShadingType.LATTICE_FORM_MESH: + var verticesPerRow = dict.get('VerticesPerRow') | 0; + assert(verticesPerRow >= 2, 'Invalid VerticesPerRow'); + decodeType5Shading(this, reader, verticesPerRow); + break; + case ShadingType.COONS_PATCH_MESH: + decodeType6Shading(this, reader); + patchMesh = true; + break; + case ShadingType.TENSOR_PATCH_MESH: + decodeType7Shading(this, reader); + patchMesh = true; + break; + default: + error('Unsupported mesh type.'); + break; + } + if (patchMesh) { + updateBounds(this); + for (var i = 0, ii = this.figures.length; i < ii; i++) { + buildFigureFromPatch(this, i); + } + } + updateBounds(this); + packData(this); + } + Mesh.prototype = { + getIR: function Mesh_getIR() { + return [ + 'Mesh', + this.shadingType, + this.coords, + this.colors, + this.figures, + this.bounds, + this.matrix, + this.bbox, + this.background + ]; + } + }; + return Mesh; + }(); + Shadings.Dummy = function DummyClosure() { + function Dummy() { + this.type = 'Pattern'; + } + Dummy.prototype = { + getIR: function Dummy_getIR() { + return ['Dummy']; + } + }; + return Dummy; + }(); + function getTilingPatternIR(operatorList, dict, args) { + var matrix = dict.getArray('Matrix'); + var bbox = dict.getArray('BBox'); + var xstep = dict.get('XStep'); + var ystep = dict.get('YStep'); + var paintType = dict.get('PaintType'); + var tilingType = dict.get('TilingType'); + return [ + 'TilingPattern', + args, + operatorList, + matrix, + bbox, + xstep, + ystep, + paintType, + tilingType + ]; + } + exports.Pattern = Pattern; + exports.getTilingPatternIR = getTilingPatternIR; + })); + (function (root, factory) { + factory(root.pdfjsCoreEvaluator = {}, root.pdfjsSharedUtil, root.pdfjsCorePrimitives, root.pdfjsCoreStream, root.pdfjsCoreParser, root.pdfjsCoreImage, root.pdfjsCoreColorSpace, root.pdfjsCoreMurmurHash3, root.pdfjsCoreFonts, root.pdfjsCoreFunction, root.pdfjsCorePattern, root.pdfjsCoreCMap, root.pdfjsCoreMetrics, root.pdfjsCoreBidi, root.pdfjsCoreEncodings, root.pdfjsCoreStandardFonts, root.pdfjsCoreUnicode, root.pdfjsCoreGlyphList); + }(this, function (exports, sharedUtil, corePrimitives, coreStream, coreParser, coreImage, coreColorSpace, coreMurmurHash3, coreFonts, coreFunction, corePattern, coreCMap, coreMetrics, coreBidi, coreEncodings, coreStandardFonts, coreUnicode, coreGlyphList) { + var FONT_IDENTITY_MATRIX = sharedUtil.FONT_IDENTITY_MATRIX; + var IDENTITY_MATRIX = sharedUtil.IDENTITY_MATRIX; + var UNSUPPORTED_FEATURES = sharedUtil.UNSUPPORTED_FEATURES; + var ImageKind = sharedUtil.ImageKind; + var OPS = sharedUtil.OPS; + var TextRenderingMode = sharedUtil.TextRenderingMode; + var Util = sharedUtil.Util; + var assert = sharedUtil.assert; + var createPromiseCapability = sharedUtil.createPromiseCapability; + var error = sharedUtil.error; + var info = sharedUtil.info; + var isArray = sharedUtil.isArray; + var isNum = sharedUtil.isNum; + var isString = sharedUtil.isString; + var getLookupTableFactory = sharedUtil.getLookupTableFactory; + var warn = sharedUtil.warn; + var Dict = corePrimitives.Dict; + var Name = corePrimitives.Name; + var isCmd = corePrimitives.isCmd; + var isDict = corePrimitives.isDict; + var isName = corePrimitives.isName; + var isRef = corePrimitives.isRef; + var isStream = corePrimitives.isStream; + var DecodeStream = coreStream.DecodeStream; + var JpegStream = coreStream.JpegStream; + var Stream = coreStream.Stream; + var Lexer = coreParser.Lexer; + var Parser = coreParser.Parser; + var isEOF = coreParser.isEOF; + var PDFImage = coreImage.PDFImage; + var ColorSpace = coreColorSpace.ColorSpace; + var MurmurHash3_64 = coreMurmurHash3.MurmurHash3_64; + var ErrorFont = coreFonts.ErrorFont; + var FontFlags = coreFonts.FontFlags; + var Font = coreFonts.Font; + var IdentityToUnicodeMap = coreFonts.IdentityToUnicodeMap; + var ToUnicodeMap = coreFonts.ToUnicodeMap; + var getFontType = coreFonts.getFontType; + var isPDFFunction = coreFunction.isPDFFunction; + var PDFFunction = coreFunction.PDFFunction; + var Pattern = corePattern.Pattern; + var getTilingPatternIR = corePattern.getTilingPatternIR; + var CMapFactory = coreCMap.CMapFactory; + var IdentityCMap = coreCMap.IdentityCMap; + var getMetrics = coreMetrics.getMetrics; + var bidi = coreBidi.bidi; + var WinAnsiEncoding = coreEncodings.WinAnsiEncoding; + var StandardEncoding = coreEncodings.StandardEncoding; + var MacRomanEncoding = coreEncodings.MacRomanEncoding; + var SymbolSetEncoding = coreEncodings.SymbolSetEncoding; + var ZapfDingbatsEncoding = coreEncodings.ZapfDingbatsEncoding; + var getEncoding = coreEncodings.getEncoding; + var getStdFontMap = coreStandardFonts.getStdFontMap; + var getSerifFonts = coreStandardFonts.getSerifFonts; + var getSymbolsFonts = coreStandardFonts.getSymbolsFonts; + var getNormalizedUnicodes = coreUnicode.getNormalizedUnicodes; + var reverseIfRtl = coreUnicode.reverseIfRtl; + var getUnicodeForGlyph = coreUnicode.getUnicodeForGlyph; + var getGlyphsUnicode = coreGlyphList.getGlyphsUnicode; + var PartialEvaluator = function PartialEvaluatorClosure() { + var DefaultPartialEvaluatorOptions = { + forceDataSchema: false, + maxImageSize: -1, + disableFontFace: false, + cMapOptions: { + url: null, + packed: false + } + }; + function NativeImageDecoder(xref, resources, handler, forceDataSchema) { + this.xref = xref; + this.resources = resources; + this.handler = handler; + this.forceDataSchema = forceDataSchema; + } + NativeImageDecoder.prototype = { + canDecode: function (image) { + return image instanceof JpegStream && NativeImageDecoder.isDecodable(image, this.xref, this.resources); + }, + decode: function (image) { + var dict = image.dict; + var colorSpace = dict.get('ColorSpace', 'CS'); + colorSpace = ColorSpace.parse(colorSpace, this.xref, this.resources); + var numComps = colorSpace.numComps; + var decodePromise = this.handler.sendWithPromise('JpegDecode', [ + image.getIR(this.forceDataSchema), + numComps + ]); + return decodePromise.then(function (message) { + var data = message.data; + return new Stream(data, 0, data.length, image.dict); + }); + } + }; + NativeImageDecoder.isSupported = function NativeImageDecoder_isSupported(image, xref, res) { + var dict = image.dict; + if (dict.has('DecodeParms') || dict.has('DP')) { + return false; + } + var cs = ColorSpace.parse(dict.get('ColorSpace', 'CS'), xref, res); + return (cs.name === 'DeviceGray' || cs.name === 'DeviceRGB') && cs.isDefaultDecode(dict.getArray('Decode', 'D')); + }; + NativeImageDecoder.isDecodable = function NativeImageDecoder_isDecodable(image, xref, res) { + var dict = image.dict; + if (dict.has('DecodeParms') || dict.has('DP')) { + return false; + } + var cs = ColorSpace.parse(dict.get('ColorSpace', 'CS'), xref, res); + return (cs.numComps === 1 || cs.numComps === 3) && cs.isDefaultDecode(dict.getArray('Decode', 'D')); + }; + function PartialEvaluator(pdfManager, xref, handler, pageIndex, idFactory, fontCache, options) { + this.pdfManager = pdfManager; + this.xref = xref; + this.handler = handler; + this.pageIndex = pageIndex; + this.idFactory = idFactory; + this.fontCache = fontCache; + this.options = options || DefaultPartialEvaluatorOptions; + } + var TIME_SLOT_DURATION_MS = 20; + var CHECK_TIME_EVERY = 100; + function TimeSlotManager() { + this.reset(); + } + TimeSlotManager.prototype = { + check: function TimeSlotManager_check() { + if (++this.checked < CHECK_TIME_EVERY) { + return false; + } + this.checked = 0; + return this.endTime <= Date.now(); + }, + reset: function TimeSlotManager_reset() { + this.endTime = Date.now() + TIME_SLOT_DURATION_MS; + this.checked = 0; + } + }; + var deferred = Promise.resolve(); + var TILING_PATTERN = 1, SHADING_PATTERN = 2; + PartialEvaluator.prototype = { + hasBlendModes: function PartialEvaluator_hasBlendModes(resources) { + if (!isDict(resources)) { + return false; + } + var processed = Object.create(null); + if (resources.objId) { + processed[resources.objId] = true; + } + var nodes = [resources], xref = this.xref; + while (nodes.length) { + var key, i, ii; + var node = nodes.shift(); + var graphicStates = node.get('ExtGState'); + if (isDict(graphicStates)) { + var graphicStatesKeys = graphicStates.getKeys(); + for (i = 0, ii = graphicStatesKeys.length; i < ii; i++) { + key = graphicStatesKeys[i]; + var graphicState = graphicStates.get(key); + var bm = graphicState.get('BM'); + if (isName(bm) && bm.name !== 'Normal') { + return true; + } + } + } + var xObjects = node.get('XObject'); + if (!isDict(xObjects)) { + continue; + } + var xObjectsKeys = xObjects.getKeys(); + for (i = 0, ii = xObjectsKeys.length; i < ii; i++) { + key = xObjectsKeys[i]; + var xObject = xObjects.getRaw(key); + if (isRef(xObject)) { + if (processed[xObject.toString()]) { + continue; + } + xObject = xref.fetch(xObject); + } + if (!isStream(xObject)) { + continue; + } + if (xObject.dict.objId) { + if (processed[xObject.dict.objId]) { + continue; + } + processed[xObject.dict.objId] = true; + } + var xResources = xObject.dict.get('Resources'); + if (isDict(xResources) && (!xResources.objId || !processed[xResources.objId])) { + nodes.push(xResources); + if (xResources.objId) { + processed[xResources.objId] = true; + } + } + } + } + return false; + }, + buildFormXObject: function PartialEvaluator_buildFormXObject(resources, xobj, smask, operatorList, task, initialState) { + var matrix = xobj.dict.getArray('Matrix'); + var bbox = xobj.dict.getArray('BBox'); + var group = xobj.dict.get('Group'); + if (group) { + var groupOptions = { + matrix: matrix, + bbox: bbox, + smask: smask, + isolated: false, + knockout: false + }; + var groupSubtype = group.get('S'); + var colorSpace; + if (isName(groupSubtype, 'Transparency')) { + groupOptions.isolated = group.get('I') || false; + groupOptions.knockout = group.get('K') || false; + colorSpace = group.has('CS') ? ColorSpace.parse(group.get('CS'), this.xref, resources) : null; + } + if (smask && smask.backdrop) { + colorSpace = colorSpace || ColorSpace.singletons.rgb; + smask.backdrop = colorSpace.getRgb(smask.backdrop, 0); + } + operatorList.addOp(OPS.beginGroup, [groupOptions]); + } + operatorList.addOp(OPS.paintFormXObjectBegin, [ + matrix, + bbox + ]); + return this.getOperatorList(xobj, task, xobj.dict.get('Resources') || resources, operatorList, initialState).then(function () { + operatorList.addOp(OPS.paintFormXObjectEnd, []); + if (group) { + operatorList.addOp(OPS.endGroup, [groupOptions]); + } + }); + }, + buildPaintImageXObject: function PartialEvaluator_buildPaintImageXObject(resources, image, inline, operatorList, cacheKey, imageCache) { + var self = this; + var dict = image.dict; + var w = dict.get('Width', 'W'); + var h = dict.get('Height', 'H'); + if (!(w && isNum(w)) || !(h && isNum(h))) { + warn('Image dimensions are missing, or not numbers.'); + return; + } + var maxImageSize = this.options.maxImageSize; + if (maxImageSize !== -1 && w * h > maxImageSize) { + warn('Image exceeded maximum allowed size and was removed.'); + return; + } + var imageMask = dict.get('ImageMask', 'IM') || false; + var imgData, args; + if (imageMask) { + var width = dict.get('Width', 'W'); + var height = dict.get('Height', 'H'); + var bitStrideLength = width + 7 >> 3; + var imgArray = image.getBytes(bitStrideLength * height); + var decode = dict.getArray('Decode', 'D'); + var inverseDecode = !!decode && decode[0] > 0; + imgData = PDFImage.createMask(imgArray, width, height, image instanceof DecodeStream, inverseDecode); + imgData.cached = true; + args = [imgData]; + operatorList.addOp(OPS.paintImageMaskXObject, args); + if (cacheKey) { + imageCache[cacheKey] = { + fn: OPS.paintImageMaskXObject, + args: args + }; + } + return; + } + var softMask = dict.get('SMask', 'SM') || false; + var mask = dict.get('Mask') || false; + var SMALL_IMAGE_DIMENSIONS = 200; + if (inline && !softMask && !mask && !(image instanceof JpegStream) && w + h < SMALL_IMAGE_DIMENSIONS) { + var imageObj = new PDFImage(this.xref, resources, image, inline, null, null); + imgData = imageObj.createImageData(true); + operatorList.addOp(OPS.paintInlineImageXObject, [imgData]); + return; + } + var objId = 'img_' + this.idFactory.createObjId(); + operatorList.addDependency(objId); + args = [ + objId, + w, + h + ]; + if (!softMask && !mask && image instanceof JpegStream && NativeImageDecoder.isSupported(image, this.xref, resources)) { + operatorList.addOp(OPS.paintJpegXObject, args); + this.handler.send('obj', [ + objId, + this.pageIndex, + 'JpegStream', + image.getIR(this.options.forceDataSchema) + ]); + return; + } + var nativeImageDecoder = null; + if (image instanceof JpegStream || mask instanceof JpegStream || softMask instanceof JpegStream) { + nativeImageDecoder = new NativeImageDecoder(self.xref, resources, self.handler, self.options.forceDataSchema); + } + PDFImage.buildImage(self.handler, self.xref, resources, image, inline, nativeImageDecoder).then(function (imageObj) { + var imgData = imageObj.createImageData(false); + self.handler.send('obj', [ + objId, + self.pageIndex, + 'Image', + imgData + ], [imgData.data.buffer]); + }).then(undefined, function (reason) { + warn('Unable to decode image: ' + reason); + self.handler.send('obj', [ + objId, + self.pageIndex, + 'Image', + null + ]); + }); + operatorList.addOp(OPS.paintImageXObject, args); + if (cacheKey) { + imageCache[cacheKey] = { + fn: OPS.paintImageXObject, + args: args + }; + } + }, + handleSMask: function PartialEvaluator_handleSmask(smask, resources, operatorList, task, stateManager) { + var smaskContent = smask.get('G'); + var smaskOptions = { + subtype: smask.get('S').name, + backdrop: smask.get('BC') + }; + var transferObj = smask.get('TR'); + if (isPDFFunction(transferObj)) { + var transferFn = PDFFunction.parse(this.xref, transferObj); + var transferMap = new Uint8Array(256); + var tmp = new Float32Array(1); + for (var i = 0; i < 256; i++) { + tmp[0] = i / 255; + transferFn(tmp, 0, tmp, 0); + transferMap[i] = tmp[0] * 255 | 0; + } + smaskOptions.transferMap = transferMap; + } + return this.buildFormXObject(resources, smaskContent, smaskOptions, operatorList, task, stateManager.state.clone()); + }, + handleTilingType: function PartialEvaluator_handleTilingType(fn, args, resources, pattern, patternDict, operatorList, task) { + var tilingOpList = new OperatorList(); + var resourcesArray = [ + patternDict.get('Resources'), + resources + ]; + var patternResources = Dict.merge(this.xref, resourcesArray); + return this.getOperatorList(pattern, task, patternResources, tilingOpList).then(function () { + operatorList.addDependencies(tilingOpList.dependencies); + operatorList.addOp(fn, getTilingPatternIR({ + fnArray: tilingOpList.fnArray, + argsArray: tilingOpList.argsArray + }, patternDict, args)); + }); + }, + handleSetFont: function PartialEvaluator_handleSetFont(resources, fontArgs, fontRef, operatorList, task, state) { + var fontName; + if (fontArgs) { + fontArgs = fontArgs.slice(); + fontName = fontArgs[0].name; + } + var self = this; + return this.loadFont(fontName, fontRef, this.xref, resources).then(function (translated) { + if (!translated.font.isType3Font) { + return translated; + } + return translated.loadType3Data(self, resources, operatorList, task).then(function () { + return translated; + }, function (reason) { + self.handler.send('UnsupportedFeature', { featureId: UNSUPPORTED_FEATURES.font }); + return new TranslatedFont('g_font_error', new ErrorFont('Type3 font load error: ' + reason), translated.font); + }); + }).then(function (translated) { + state.font = translated.font; + translated.send(self.handler); + return translated.loadedName; + }); + }, + handleText: function PartialEvaluator_handleText(chars, state) { + var font = state.font; + var glyphs = font.charsToGlyphs(chars); + var isAddToPathSet = !!(state.textRenderingMode & TextRenderingMode.ADD_TO_PATH_FLAG); + if (font.data && (isAddToPathSet || this.options.disableFontFace)) { + var buildPath = function (fontChar) { + if (!font.renderer.hasBuiltPath(fontChar)) { + var path = font.renderer.getPathJs(fontChar); + this.handler.send('commonobj', [ + font.loadedName + '_path_' + fontChar, + 'FontPath', + path + ]); + } + }.bind(this); + for (var i = 0, ii = glyphs.length; i < ii; i++) { + var glyph = glyphs[i]; + buildPath(glyph.fontChar); + var accent = glyph.accent; + if (accent && accent.fontChar) { + buildPath(accent.fontChar); + } + } + } + return glyphs; + }, + setGState: function PartialEvaluator_setGState(resources, gState, operatorList, task, xref, stateManager) { + var gStateObj = []; + var gStateKeys = gState.getKeys(); + var self = this; + var promise = Promise.resolve(); + for (var i = 0, ii = gStateKeys.length; i < ii; i++) { + var key = gStateKeys[i]; + var value = gState.get(key); + switch (key) { + case 'Type': + break; + case 'LW': + case 'LC': + case 'LJ': + case 'ML': + case 'D': + case 'RI': + case 'FL': + case 'CA': + case 'ca': + gStateObj.push([ + key, + value + ]); + break; + case 'Font': + promise = promise.then(function () { + return self.handleSetFont(resources, null, value[0], operatorList, task, stateManager.state).then(function (loadedName) { + operatorList.addDependency(loadedName); + gStateObj.push([ + key, + [ + loadedName, + value[1] + ] + ]); + }); + }); + break; + case 'BM': + gStateObj.push([ + key, + value + ]); + break; + case 'SMask': + if (isName(value, 'None')) { + gStateObj.push([ + key, + false + ]); + break; + } + if (isDict(value)) { + promise = promise.then(function (dict) { + return self.handleSMask(dict, resources, operatorList, task, stateManager); + }.bind(this, value)); + gStateObj.push([ + key, + true + ]); + } else { + warn('Unsupported SMask type'); + } + break; + case 'OP': + case 'op': + case 'OPM': + case 'BG': + case 'BG2': + case 'UCR': + case 'UCR2': + case 'TR': + case 'TR2': + case 'HT': + case 'SM': + case 'SA': + case 'AIS': + case 'TK': + info('graphic state operator ' + key); + break; + default: + info('Unknown graphic state operator ' + key); + break; + } + } + return promise.then(function () { + if (gStateObj.length > 0) { + operatorList.addOp(OPS.setGState, [gStateObj]); + } + }); + }, + loadFont: function PartialEvaluator_loadFont(fontName, font, xref, resources) { + function errorFont() { + return Promise.resolve(new TranslatedFont('g_font_error', new ErrorFont('Font ' + fontName + ' is not available'), font)); + } + var fontRef; + if (font) { + assert(isRef(font)); + fontRef = font; + } else { + var fontRes = resources.get('Font'); + if (fontRes) { + fontRef = fontRes.getRaw(fontName); + } else { + warn('fontRes not available'); + return errorFont(); + } + } + if (!fontRef) { + warn('fontRef not available'); + return errorFont(); + } + if (this.fontCache.has(fontRef)) { + return this.fontCache.get(fontRef); + } + font = xref.fetchIfRef(fontRef); + if (!isDict(font)) { + return errorFont(); + } + if (font.translated) { + return font.translated; + } + var fontCapability = createPromiseCapability(); + var preEvaluatedFont = this.preEvaluateFont(font, xref); + var descriptor = preEvaluatedFont.descriptor; + var fontRefIsRef = isRef(fontRef), fontID; + if (fontRefIsRef) { + fontID = fontRef.toString(); + } + if (isDict(descriptor)) { + if (!descriptor.fontAliases) { + descriptor.fontAliases = Object.create(null); + } + var fontAliases = descriptor.fontAliases; + var hash = preEvaluatedFont.hash; + if (fontAliases[hash]) { + var aliasFontRef = fontAliases[hash].aliasRef; + if (fontRefIsRef && aliasFontRef && this.fontCache.has(aliasFontRef)) { + this.fontCache.putAlias(fontRef, aliasFontRef); + return this.fontCache.get(fontRef); + } + } else { + fontAliases[hash] = { fontID: Font.getFontID() }; + } + if (fontRefIsRef) { + fontAliases[hash].aliasRef = fontRef; + } + fontID = fontAliases[hash].fontID; + } + if (fontRefIsRef) { + this.fontCache.put(fontRef, fontCapability.promise); + } else { + if (!fontID) { + fontID = this.idFactory.createObjId(); + } + this.fontCache.put('id_' + fontID, fontCapability.promise); + } + assert(fontID, 'The "fontID" must be defined.'); + font.loadedName = 'g_' + this.pdfManager.docId + '_f' + fontID; + font.translated = fontCapability.promise; + var translatedPromise; + try { + translatedPromise = this.translateFont(preEvaluatedFont, xref); + } catch (e) { + translatedPromise = Promise.reject(e); + } + var self = this; + translatedPromise.then(function (translatedFont) { + if (translatedFont.fontType !== undefined) { + var xrefFontStats = xref.stats.fontTypes; + xrefFontStats[translatedFont.fontType] = true; + } + fontCapability.resolve(new TranslatedFont(font.loadedName, translatedFont, font)); + }, function (reason) { + self.handler.send('UnsupportedFeature', { featureId: UNSUPPORTED_FEATURES.font }); + try { + var descriptor = preEvaluatedFont.descriptor; + var fontFile3 = descriptor && descriptor.get('FontFile3'); + var subtype = fontFile3 && fontFile3.get('Subtype'); + var fontType = getFontType(preEvaluatedFont.type, subtype && subtype.name); + var xrefFontStats = xref.stats.fontTypes; + xrefFontStats[fontType] = true; + } catch (ex) { + } + fontCapability.resolve(new TranslatedFont(font.loadedName, new ErrorFont(reason instanceof Error ? reason.message : reason), font)); + }); + return fontCapability.promise; + }, + buildPath: function PartialEvaluator_buildPath(operatorList, fn, args) { + var lastIndex = operatorList.length - 1; + if (!args) { + args = []; + } + if (lastIndex < 0 || operatorList.fnArray[lastIndex] !== OPS.constructPath) { + operatorList.addOp(OPS.constructPath, [ + [fn], + args + ]); + } else { + var opArgs = operatorList.argsArray[lastIndex]; + opArgs[0].push(fn); + Array.prototype.push.apply(opArgs[1], args); + } + }, + handleColorN: function PartialEvaluator_handleColorN(operatorList, fn, args, cs, patterns, resources, task, xref) { + var patternName = args[args.length - 1]; + var pattern; + if (isName(patternName) && (pattern = patterns.get(patternName.name))) { + var dict = isStream(pattern) ? pattern.dict : pattern; + var typeNum = dict.get('PatternType'); + if (typeNum === TILING_PATTERN) { + var color = cs.base ? cs.base.getRgb(args, 0) : null; + return this.handleTilingType(fn, color, resources, pattern, dict, operatorList, task); + } else if (typeNum === SHADING_PATTERN) { + var shading = dict.get('Shading'); + var matrix = dict.getArray('Matrix'); + pattern = Pattern.parseShading(shading, matrix, xref, resources, this.handler); + operatorList.addOp(fn, pattern.getIR()); + return Promise.resolve(); + } + return Promise.reject('Unknown PatternType: ' + typeNum); + } + operatorList.addOp(fn, args); + return Promise.resolve(); + }, + getOperatorList: function PartialEvaluator_getOperatorList(stream, task, resources, operatorList, initialState) { + var self = this; + var xref = this.xref; + var imageCache = Object.create(null); + assert(operatorList); + resources = resources || Dict.empty; + var xobjs = resources.get('XObject') || Dict.empty; + var patterns = resources.get('Pattern') || Dict.empty; + var stateManager = new StateManager(initialState || new EvalState()); + var preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager); + var timeSlotManager = new TimeSlotManager(); + return new Promise(function promiseBody(resolve, reject) { + var next = function (promise) { + promise.then(function () { + try { + promiseBody(resolve, reject); + } catch (ex) { + reject(ex); + } + }, reject); + }; + task.ensureNotTerminated(); + timeSlotManager.reset(); + var stop, operation = {}, i, ii, cs; + while (!(stop = timeSlotManager.check())) { + operation.args = null; + if (!preprocessor.read(operation)) { + break; + } + var args = operation.args; + var fn = operation.fn; + switch (fn | 0) { + case OPS.paintXObject: + if (args[0].code) { + break; + } + var name = args[0].name; + if (!name) { + warn('XObject must be referred to by name.'); + continue; + } + if (imageCache[name] !== undefined) { + operatorList.addOp(imageCache[name].fn, imageCache[name].args); + args = null; + continue; + } + var xobj = xobjs.get(name); + if (xobj) { + assert(isStream(xobj), 'XObject should be a stream'); + var type = xobj.dict.get('Subtype'); + assert(isName(type), 'XObject should have a Name subtype'); + if (type.name === 'Form') { + stateManager.save(); + next(self.buildFormXObject(resources, xobj, null, operatorList, task, stateManager.state.clone()).then(function () { + stateManager.restore(); + })); + return; + } else if (type.name === 'Image') { + self.buildPaintImageXObject(resources, xobj, false, operatorList, name, imageCache); + args = null; + continue; + } else if (type.name === 'PS') { + info('Ignored XObject subtype PS'); + continue; + } else { + error('Unhandled XObject subtype ' + type.name); + } + } + break; + case OPS.setFont: + var fontSize = args[1]; + next(self.handleSetFont(resources, args, null, operatorList, task, stateManager.state).then(function (loadedName) { + operatorList.addDependency(loadedName); + operatorList.addOp(OPS.setFont, [ + loadedName, + fontSize + ]); + })); + return; + case OPS.endInlineImage: + var cacheKey = args[0].cacheKey; + if (cacheKey) { + var cacheEntry = imageCache[cacheKey]; + if (cacheEntry !== undefined) { + operatorList.addOp(cacheEntry.fn, cacheEntry.args); + args = null; + continue; + } + } + self.buildPaintImageXObject(resources, args[0], true, operatorList, cacheKey, imageCache); + args = null; + continue; + case OPS.showText: + args[0] = self.handleText(args[0], stateManager.state); + break; + case OPS.showSpacedText: + var arr = args[0]; + var combinedGlyphs = []; + var arrLength = arr.length; + var state = stateManager.state; + for (i = 0; i < arrLength; ++i) { + var arrItem = arr[i]; + if (isString(arrItem)) { + Array.prototype.push.apply(combinedGlyphs, self.handleText(arrItem, state)); + } else if (isNum(arrItem)) { + combinedGlyphs.push(arrItem); + } + } + args[0] = combinedGlyphs; + fn = OPS.showText; + break; + case OPS.nextLineShowText: + operatorList.addOp(OPS.nextLine); + args[0] = self.handleText(args[0], stateManager.state); + fn = OPS.showText; + break; + case OPS.nextLineSetSpacingShowText: + operatorList.addOp(OPS.nextLine); + operatorList.addOp(OPS.setWordSpacing, [args.shift()]); + operatorList.addOp(OPS.setCharSpacing, [args.shift()]); + args[0] = self.handleText(args[0], stateManager.state); + fn = OPS.showText; + break; + case OPS.setTextRenderingMode: + stateManager.state.textRenderingMode = args[0]; + break; + case OPS.setFillColorSpace: + stateManager.state.fillColorSpace = ColorSpace.parse(args[0], xref, resources); + continue; + case OPS.setStrokeColorSpace: + stateManager.state.strokeColorSpace = ColorSpace.parse(args[0], xref, resources); + continue; + case OPS.setFillColor: + cs = stateManager.state.fillColorSpace; + args = cs.getRgb(args, 0); + fn = OPS.setFillRGBColor; + break; + case OPS.setStrokeColor: + cs = stateManager.state.strokeColorSpace; + args = cs.getRgb(args, 0); + fn = OPS.setStrokeRGBColor; + break; + case OPS.setFillGray: + stateManager.state.fillColorSpace = ColorSpace.singletons.gray; + args = ColorSpace.singletons.gray.getRgb(args, 0); + fn = OPS.setFillRGBColor; + break; + case OPS.setStrokeGray: + stateManager.state.strokeColorSpace = ColorSpace.singletons.gray; + args = ColorSpace.singletons.gray.getRgb(args, 0); + fn = OPS.setStrokeRGBColor; + break; + case OPS.setFillCMYKColor: + stateManager.state.fillColorSpace = ColorSpace.singletons.cmyk; + args = ColorSpace.singletons.cmyk.getRgb(args, 0); + fn = OPS.setFillRGBColor; + break; + case OPS.setStrokeCMYKColor: + stateManager.state.strokeColorSpace = ColorSpace.singletons.cmyk; + args = ColorSpace.singletons.cmyk.getRgb(args, 0); + fn = OPS.setStrokeRGBColor; + break; + case OPS.setFillRGBColor: + stateManager.state.fillColorSpace = ColorSpace.singletons.rgb; + args = ColorSpace.singletons.rgb.getRgb(args, 0); + break; + case OPS.setStrokeRGBColor: + stateManager.state.strokeColorSpace = ColorSpace.singletons.rgb; + args = ColorSpace.singletons.rgb.getRgb(args, 0); + break; + case OPS.setFillColorN: + cs = stateManager.state.fillColorSpace; + if (cs.name === 'Pattern') { + next(self.handleColorN(operatorList, OPS.setFillColorN, args, cs, patterns, resources, task, xref)); + return; + } + args = cs.getRgb(args, 0); + fn = OPS.setFillRGBColor; + break; + case OPS.setStrokeColorN: + cs = stateManager.state.strokeColorSpace; + if (cs.name === 'Pattern') { + next(self.handleColorN(operatorList, OPS.setStrokeColorN, args, cs, patterns, resources, task, xref)); + return; + } + args = cs.getRgb(args, 0); + fn = OPS.setStrokeRGBColor; + break; + case OPS.shadingFill: + var shadingRes = resources.get('Shading'); + if (!shadingRes) { + error('No shading resource found'); + } + var shading = shadingRes.get(args[0].name); + if (!shading) { + error('No shading object found'); + } + var shadingFill = Pattern.parseShading(shading, null, xref, resources, self.handler); + var patternIR = shadingFill.getIR(); + args = [patternIR]; + fn = OPS.shadingFill; + break; + case OPS.setGState: + var dictName = args[0]; + var extGState = resources.get('ExtGState'); + if (!isDict(extGState) || !extGState.has(dictName.name)) { + break; + } + var gState = extGState.get(dictName.name); + next(self.setGState(resources, gState, operatorList, task, xref, stateManager)); + return; + case OPS.moveTo: + case OPS.lineTo: + case OPS.curveTo: + case OPS.curveTo2: + case OPS.curveTo3: + case OPS.closePath: + self.buildPath(operatorList, fn, args); + continue; + case OPS.rectangle: + self.buildPath(operatorList, fn, args); + continue; + case OPS.markPoint: + case OPS.markPointProps: + case OPS.beginMarkedContent: + case OPS.beginMarkedContentProps: + case OPS.endMarkedContent: + case OPS.beginCompat: + case OPS.endCompat: + continue; + default: + if (args !== null) { + for (i = 0, ii = args.length; i < ii; i++) { + if (args[i] instanceof Dict) { + break; + } + } + if (i < ii) { + warn('getOperatorList - ignoring operator: ' + fn); + continue; + } + } + } + operatorList.addOp(fn, args); + } + if (stop) { + next(deferred); + return; + } + for (i = 0, ii = preprocessor.savedStatesDepth; i < ii; i++) { + operatorList.addOp(OPS.restore, []); + } + resolve(); + }); + }, + getTextContent: function PartialEvaluator_getTextContent(stream, task, resources, stateManager, normalizeWhitespace, combineTextItems) { + stateManager = stateManager || new StateManager(new TextState()); + var WhitespaceRegexp = /\s/g; + var textContent = { + items: [], + styles: Object.create(null) + }; + var textContentItem = { + initialized: false, + str: [], + width: 0, + height: 0, + vertical: false, + lastAdvanceWidth: 0, + lastAdvanceHeight: 0, + textAdvanceScale: 0, + spaceWidth: 0, + fakeSpaceMin: Infinity, + fakeMultiSpaceMin: Infinity, + fakeMultiSpaceMax: -0, + textRunBreakAllowed: false, + transform: null, + fontName: null + }; + var SPACE_FACTOR = 0.3; + var MULTI_SPACE_FACTOR = 1.5; + var MULTI_SPACE_FACTOR_MAX = 4; + var self = this; + var xref = this.xref; + resources = xref.fetchIfRef(resources) || Dict.empty; + var xobjs = null; + var xobjsCache = Object.create(null); + var preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager); + var textState; + function ensureTextContentItem() { + if (textContentItem.initialized) { + return textContentItem; + } + var font = textState.font; + if (!(font.loadedName in textContent.styles)) { + textContent.styles[font.loadedName] = { + fontFamily: font.fallbackName, + ascent: font.ascent, + descent: font.descent, + vertical: font.vertical + }; + } + textContentItem.fontName = font.loadedName; + var tsm = [ + textState.fontSize * textState.textHScale, + 0, + 0, + textState.fontSize, + 0, + textState.textRise + ]; + if (font.isType3Font && textState.fontMatrix !== FONT_IDENTITY_MATRIX && textState.fontSize === 1) { + var glyphHeight = font.bbox[3] - font.bbox[1]; + if (glyphHeight > 0) { + glyphHeight = glyphHeight * textState.fontMatrix[3]; + tsm[3] *= glyphHeight; + } + } + var trm = Util.transform(textState.ctm, Util.transform(textState.textMatrix, tsm)); + textContentItem.transform = trm; + if (!font.vertical) { + textContentItem.width = 0; + textContentItem.height = Math.sqrt(trm[2] * trm[2] + trm[3] * trm[3]); + textContentItem.vertical = false; + } else { + textContentItem.width = Math.sqrt(trm[0] * trm[0] + trm[1] * trm[1]); + textContentItem.height = 0; + textContentItem.vertical = true; + } + var a = textState.textLineMatrix[0]; + var b = textState.textLineMatrix[1]; + var scaleLineX = Math.sqrt(a * a + b * b); + a = textState.ctm[0]; + b = textState.ctm[1]; + var scaleCtmX = Math.sqrt(a * a + b * b); + textContentItem.textAdvanceScale = scaleCtmX * scaleLineX; + textContentItem.lastAdvanceWidth = 0; + textContentItem.lastAdvanceHeight = 0; + var spaceWidth = font.spaceWidth / 1000 * textState.fontSize; + if (spaceWidth) { + textContentItem.spaceWidth = spaceWidth; + textContentItem.fakeSpaceMin = spaceWidth * SPACE_FACTOR; + textContentItem.fakeMultiSpaceMin = spaceWidth * MULTI_SPACE_FACTOR; + textContentItem.fakeMultiSpaceMax = spaceWidth * MULTI_SPACE_FACTOR_MAX; + textContentItem.textRunBreakAllowed = !font.isMonospace; + } else { + textContentItem.spaceWidth = 0; + textContentItem.fakeSpaceMin = Infinity; + textContentItem.fakeMultiSpaceMin = Infinity; + textContentItem.fakeMultiSpaceMax = 0; + textContentItem.textRunBreakAllowed = false; + } + textContentItem.initialized = true; + return textContentItem; + } + function replaceWhitespace(str) { + var i = 0, ii = str.length, code; + while (i < ii && (code = str.charCodeAt(i)) >= 0x20 && code <= 0x7F) { + i++; + } + return i < ii ? str.replace(WhitespaceRegexp, ' ') : str; + } + function runBidiTransform(textChunk) { + var str = textChunk.str.join(''); + var bidiResult = bidi(str, -1, textChunk.vertical); + return { + str: normalizeWhitespace ? replaceWhitespace(bidiResult.str) : bidiResult.str, + dir: bidiResult.dir, + width: textChunk.width, + height: textChunk.height, + transform: textChunk.transform, + fontName: textChunk.fontName + }; + } + function handleSetFont(fontName, fontRef) { + return self.loadFont(fontName, fontRef, xref, resources).then(function (translated) { + textState.font = translated.font; + textState.fontMatrix = translated.font.fontMatrix || FONT_IDENTITY_MATRIX; + }); + } + function buildTextContentItem(chars) { + var font = textState.font; + var textChunk = ensureTextContentItem(); + var width = 0; + var height = 0; + var glyphs = font.charsToGlyphs(chars); + var defaultVMetrics = font.defaultVMetrics; + for (var i = 0; i < glyphs.length; i++) { + var glyph = glyphs[i]; + var vMetricX = null; + var vMetricY = null; + var glyphWidth = null; + if (font.vertical) { + if (glyph.vmetric) { + glyphWidth = glyph.vmetric[0]; + vMetricX = glyph.vmetric[1]; + vMetricY = glyph.vmetric[2]; + } else { + glyphWidth = glyph.width; + vMetricX = glyph.width * 0.5; + vMetricY = defaultVMetrics[2]; + } + } else { + glyphWidth = glyph.width; + } + var glyphUnicode = glyph.unicode; + var NormalizedUnicodes = getNormalizedUnicodes(); + if (NormalizedUnicodes[glyphUnicode] !== undefined) { + glyphUnicode = NormalizedUnicodes[glyphUnicode]; + } + glyphUnicode = reverseIfRtl(glyphUnicode); + var charSpacing = textState.charSpacing; + if (glyph.isSpace) { + var wordSpacing = textState.wordSpacing; + charSpacing += wordSpacing; + if (wordSpacing > 0) { + addFakeSpaces(wordSpacing, textChunk.str); + } + } + var tx = 0; + var ty = 0; + if (!font.vertical) { + var w0 = glyphWidth * textState.fontMatrix[0]; + tx = (w0 * textState.fontSize + charSpacing) * textState.textHScale; + width += tx; + } else { + var w1 = glyphWidth * textState.fontMatrix[0]; + ty = w1 * textState.fontSize + charSpacing; + height += ty; + } + textState.translateTextMatrix(tx, ty); + textChunk.str.push(glyphUnicode); + } + if (!font.vertical) { + textChunk.lastAdvanceWidth = width; + textChunk.width += width; + } else { + textChunk.lastAdvanceHeight = height; + textChunk.height += Math.abs(height); + } + return textChunk; + } + function addFakeSpaces(width, strBuf) { + if (width < textContentItem.fakeSpaceMin) { + return; + } + if (width < textContentItem.fakeMultiSpaceMin) { + strBuf.push(' '); + return; + } + var fakeSpaces = Math.round(width / textContentItem.spaceWidth); + while (fakeSpaces-- > 0) { + strBuf.push(' '); + } + } + function flushTextContentItem() { + if (!textContentItem.initialized) { + return; + } + textContentItem.width *= textContentItem.textAdvanceScale; + textContentItem.height *= textContentItem.textAdvanceScale; + textContent.items.push(runBidiTransform(textContentItem)); + textContentItem.initialized = false; + textContentItem.str.length = 0; + } + var timeSlotManager = new TimeSlotManager(); + return new Promise(function promiseBody(resolve, reject) { + var next = function (promise) { + promise.then(function () { + try { + promiseBody(resolve, reject); + } catch (ex) { + reject(ex); + } + }, reject); + }; + task.ensureNotTerminated(); + timeSlotManager.reset(); + var stop, operation = {}, args = []; + while (!(stop = timeSlotManager.check())) { + args.length = 0; + operation.args = args; + if (!preprocessor.read(operation)) { + break; + } + textState = stateManager.state; + var fn = operation.fn; + args = operation.args; + var advance, diff; + switch (fn | 0) { + case OPS.setFont: + var fontNameArg = args[0].name, fontSizeArg = args[1]; + if (textState.font && fontNameArg === textState.fontName && fontSizeArg === textState.fontSize) { + break; + } + flushTextContentItem(); + textState.fontName = fontNameArg; + textState.fontSize = fontSizeArg; + next(handleSetFont(fontNameArg, null)); + return; + case OPS.setTextRise: + flushTextContentItem(); + textState.textRise = args[0]; + break; + case OPS.setHScale: + flushTextContentItem(); + textState.textHScale = args[0] / 100; + break; + case OPS.setLeading: + flushTextContentItem(); + textState.leading = args[0]; + break; + case OPS.moveText: + var isSameTextLine = !textState.font ? false : (textState.font.vertical ? args[0] : args[1]) === 0; + advance = args[0] - args[1]; + if (combineTextItems && isSameTextLine && textContentItem.initialized && advance > 0 && advance <= textContentItem.fakeMultiSpaceMax) { + textState.translateTextLineMatrix(args[0], args[1]); + textContentItem.width += args[0] - textContentItem.lastAdvanceWidth; + textContentItem.height += args[1] - textContentItem.lastAdvanceHeight; + diff = args[0] - textContentItem.lastAdvanceWidth - (args[1] - textContentItem.lastAdvanceHeight); + addFakeSpaces(diff, textContentItem.str); + break; + } + flushTextContentItem(); + textState.translateTextLineMatrix(args[0], args[1]); + textState.textMatrix = textState.textLineMatrix.slice(); + break; + case OPS.setLeadingMoveText: + flushTextContentItem(); + textState.leading = -args[1]; + textState.translateTextLineMatrix(args[0], args[1]); + textState.textMatrix = textState.textLineMatrix.slice(); + break; + case OPS.nextLine: + flushTextContentItem(); + textState.carriageReturn(); + break; + case OPS.setTextMatrix: + advance = textState.calcTextLineMatrixAdvance(args[0], args[1], args[2], args[3], args[4], args[5]); + if (combineTextItems && advance !== null && textContentItem.initialized && advance.value > 0 && advance.value <= textContentItem.fakeMultiSpaceMax) { + textState.translateTextLineMatrix(advance.width, advance.height); + textContentItem.width += advance.width - textContentItem.lastAdvanceWidth; + textContentItem.height += advance.height - textContentItem.lastAdvanceHeight; + diff = advance.width - textContentItem.lastAdvanceWidth - (advance.height - textContentItem.lastAdvanceHeight); + addFakeSpaces(diff, textContentItem.str); + break; + } + flushTextContentItem(); + textState.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]); + textState.setTextLineMatrix(args[0], args[1], args[2], args[3], args[4], args[5]); + break; + case OPS.setCharSpacing: + textState.charSpacing = args[0]; + break; + case OPS.setWordSpacing: + textState.wordSpacing = args[0]; + break; + case OPS.beginText: + flushTextContentItem(); + textState.textMatrix = IDENTITY_MATRIX.slice(); + textState.textLineMatrix = IDENTITY_MATRIX.slice(); + break; + case OPS.showSpacedText: + var items = args[0]; + var offset; + for (var j = 0, jj = items.length; j < jj; j++) { + if (typeof items[j] === 'string') { + buildTextContentItem(items[j]); + } else if (isNum(items[j])) { + ensureTextContentItem(); + advance = items[j] * textState.fontSize / 1000; + var breakTextRun = false; + if (textState.font.vertical) { + offset = advance; + textState.translateTextMatrix(0, offset); + breakTextRun = textContentItem.textRunBreakAllowed && advance > textContentItem.fakeMultiSpaceMax; + if (!breakTextRun) { + textContentItem.height += offset; + } + } else { + advance = -advance; + offset = advance * textState.textHScale; + textState.translateTextMatrix(offset, 0); + breakTextRun = textContentItem.textRunBreakAllowed && advance > textContentItem.fakeMultiSpaceMax; + if (!breakTextRun) { + textContentItem.width += offset; + } + } + if (breakTextRun) { + flushTextContentItem(); + } else if (advance > 0) { + addFakeSpaces(advance, textContentItem.str); + } + } + } + break; + case OPS.showText: + buildTextContentItem(args[0]); + break; + case OPS.nextLineShowText: + flushTextContentItem(); + textState.carriageReturn(); + buildTextContentItem(args[0]); + break; + case OPS.nextLineSetSpacingShowText: + flushTextContentItem(); + textState.wordSpacing = args[0]; + textState.charSpacing = args[1]; + textState.carriageReturn(); + buildTextContentItem(args[2]); + break; + case OPS.paintXObject: + flushTextContentItem(); + if (args[0].code) { + break; + } + if (!xobjs) { + xobjs = resources.get('XObject') || Dict.empty; + } + var name = args[0].name; + if (xobjsCache.key === name) { + if (xobjsCache.texts) { + Util.appendToArray(textContent.items, xobjsCache.texts.items); + Util.extendObj(textContent.styles, xobjsCache.texts.styles); + } + break; + } + var xobj = xobjs.get(name); + if (!xobj) { + break; + } + assert(isStream(xobj), 'XObject should be a stream'); + var type = xobj.dict.get('Subtype'); + assert(isName(type), 'XObject should have a Name subtype'); + if ('Form' !== type.name) { + xobjsCache.key = name; + xobjsCache.texts = null; + break; + } + stateManager.save(); + var matrix = xobj.dict.getArray('Matrix'); + if (isArray(matrix) && matrix.length === 6) { + stateManager.transform(matrix); + } + next(self.getTextContent(xobj, task, xobj.dict.get('Resources') || resources, stateManager, normalizeWhitespace, combineTextItems).then(function (formTextContent) { + Util.appendToArray(textContent.items, formTextContent.items); + Util.extendObj(textContent.styles, formTextContent.styles); + stateManager.restore(); + xobjsCache.key = name; + xobjsCache.texts = formTextContent; + })); + return; + case OPS.setGState: + flushTextContentItem(); + var dictName = args[0]; + var extGState = resources.get('ExtGState'); + if (!isDict(extGState) || !isName(dictName)) { + break; + } + var gState = extGState.get(dictName.name); + if (!isDict(gState)) { + break; + } + var gStateFont = gState.get('Font'); + if (gStateFont) { + textState.fontName = null; + textState.fontSize = gStateFont[1]; + next(handleSetFont(null, gStateFont[0])); + return; + } + break; + } + } + if (stop) { + next(deferred); + return; + } + flushTextContentItem(); + resolve(textContent); + }); + }, + extractDataStructures: function PartialEvaluator_extractDataStructures(dict, baseDict, xref, properties) { + var toUnicode = dict.get('ToUnicode') || baseDict.get('ToUnicode'); + var toUnicodePromise = toUnicode ? this.readToUnicode(toUnicode) : Promise.resolve(undefined); + if (properties.composite) { + var cidSystemInfo = dict.get('CIDSystemInfo'); + if (isDict(cidSystemInfo)) { + properties.cidSystemInfo = { + registry: cidSystemInfo.get('Registry'), + ordering: cidSystemInfo.get('Ordering'), + supplement: cidSystemInfo.get('Supplement') + }; + } + var cidToGidMap = dict.get('CIDToGIDMap'); + if (isStream(cidToGidMap)) { + properties.cidToGidMap = this.readCidToGidMap(cidToGidMap); + } + } + var differences = []; + var baseEncodingName = null; + var encoding; + if (dict.has('Encoding')) { + encoding = dict.get('Encoding'); + if (isDict(encoding)) { + baseEncodingName = encoding.get('BaseEncoding'); + baseEncodingName = isName(baseEncodingName) ? baseEncodingName.name : null; + if (encoding.has('Differences')) { + var diffEncoding = encoding.get('Differences'); + var index = 0; + for (var j = 0, jj = diffEncoding.length; j < jj; j++) { + var data = xref.fetchIfRef(diffEncoding[j]); + if (isNum(data)) { + index = data; + } else if (isName(data)) { + differences[index++] = data.name; + } else { + error('Invalid entry in \'Differences\' array: ' + data); + } + } + } + } else if (isName(encoding)) { + baseEncodingName = encoding.name; + } else { + error('Encoding is not a Name nor a Dict'); + } + if (baseEncodingName !== 'MacRomanEncoding' && baseEncodingName !== 'MacExpertEncoding' && baseEncodingName !== 'WinAnsiEncoding') { + baseEncodingName = null; + } + } + if (baseEncodingName) { + properties.defaultEncoding = getEncoding(baseEncodingName).slice(); + } else { + var isSymbolicFont = !!(properties.flags & FontFlags.Symbolic); + var isNonsymbolicFont = !!(properties.flags & FontFlags.Nonsymbolic); + encoding = StandardEncoding; + if (properties.type === 'TrueType' && !isNonsymbolicFont) { + encoding = WinAnsiEncoding; + } + if (isSymbolicFont) { + encoding = MacRomanEncoding; + if (!properties.file) { + if (/Symbol/i.test(properties.name)) { + encoding = SymbolSetEncoding; + } else if (/Dingbats/i.test(properties.name)) { + encoding = ZapfDingbatsEncoding; + } + } + } + properties.defaultEncoding = encoding; + } + properties.differences = differences; + properties.baseEncodingName = baseEncodingName; + properties.hasEncoding = !!baseEncodingName || differences.length > 0; + properties.dict = dict; + return toUnicodePromise.then(function (toUnicode) { + properties.toUnicode = toUnicode; + return this.buildToUnicode(properties); + }.bind(this)).then(function (toUnicode) { + properties.toUnicode = toUnicode; + return properties; + }); + }, + buildToUnicode: function PartialEvaluator_buildToUnicode(properties) { + properties.hasIncludedToUnicodeMap = !!properties.toUnicode && properties.toUnicode.length > 0; + if (properties.hasIncludedToUnicodeMap) { + return Promise.resolve(properties.toUnicode); + } + var toUnicode, charcode, glyphName; + if (!properties.composite) + { + toUnicode = []; + var encoding = properties.defaultEncoding.slice(); + var baseEncodingName = properties.baseEncodingName; + var differences = properties.differences; + for (charcode in differences) { + glyphName = differences[charcode]; + if (glyphName === '.notdef') { + continue; + } + encoding[charcode] = glyphName; + } + var glyphsUnicodeMap = getGlyphsUnicode(); + for (charcode in encoding) { + glyphName = encoding[charcode]; + if (glyphName === '') { + continue; + } else if (glyphsUnicodeMap[glyphName] === undefined) { + var code = 0; + switch (glyphName[0]) { + case 'G': + if (glyphName.length === 3) { + code = parseInt(glyphName.substr(1), 16); + } + break; + case 'g': + if (glyphName.length === 5) { + code = parseInt(glyphName.substr(1), 16); + } + break; + case 'C': + case 'c': + if (glyphName.length >= 3) { + code = +glyphName.substr(1); + } + break; + default: + var unicode = getUnicodeForGlyph(glyphName, glyphsUnicodeMap); + if (unicode !== -1) { + code = unicode; + } + } + if (code) { + if (baseEncodingName && code === +charcode) { + var baseEncoding = getEncoding(baseEncodingName); + if (baseEncoding && (glyphName = baseEncoding[charcode])) { + toUnicode[charcode] = String.fromCharCode(glyphsUnicodeMap[glyphName]); + continue; + } + } + toUnicode[charcode] = String.fromCharCode(code); + } + continue; + } + toUnicode[charcode] = String.fromCharCode(glyphsUnicodeMap[glyphName]); + } + return Promise.resolve(new ToUnicodeMap(toUnicode)); + } + if (properties.composite && (properties.cMap.builtInCMap && !(properties.cMap instanceof IdentityCMap) || properties.cidSystemInfo.registry === 'Adobe' && (properties.cidSystemInfo.ordering === 'GB1' || properties.cidSystemInfo.ordering === 'CNS1' || properties.cidSystemInfo.ordering === 'Japan1' || properties.cidSystemInfo.ordering === 'Korea1'))) { + var registry = properties.cidSystemInfo.registry; + var ordering = properties.cidSystemInfo.ordering; + var ucs2CMapName = Name.get(registry + '-' + ordering + '-UCS2'); + return CMapFactory.create(ucs2CMapName, this.options.cMapOptions, null).then(function (ucs2CMap) { + var cMap = properties.cMap; + toUnicode = []; + cMap.forEach(function (charcode, cid) { + assert(cid <= 0xffff, 'Max size of CID is 65,535'); + var ucs2 = ucs2CMap.lookup(cid); + if (ucs2) { + toUnicode[charcode] = String.fromCharCode((ucs2.charCodeAt(0) << 8) + ucs2.charCodeAt(1)); + } + }); + return new ToUnicodeMap(toUnicode); + }); + } + return Promise.resolve(new IdentityToUnicodeMap(properties.firstChar, properties.lastChar)); + }, + readToUnicode: function PartialEvaluator_readToUnicode(toUnicode) { + var cmapObj = toUnicode; + if (isName(cmapObj)) { + return CMapFactory.create(cmapObj, this.options.cMapOptions, null).then(function (cmap) { + if (cmap instanceof IdentityCMap) { + return new IdentityToUnicodeMap(0, 0xFFFF); + } + return new ToUnicodeMap(cmap.getMap()); + }); + } else if (isStream(cmapObj)) { + return CMapFactory.create(cmapObj, this.options.cMapOptions, null).then(function (cmap) { + if (cmap instanceof IdentityCMap) { + return new IdentityToUnicodeMap(0, 0xFFFF); + } + var map = new Array(cmap.length); + cmap.forEach(function (charCode, token) { + var str = []; + for (var k = 0; k < token.length; k += 2) { + var w1 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1); + if ((w1 & 0xF800) !== 0xD800) { + str.push(w1); + continue; + } + k += 2; + var w2 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1); + str.push(((w1 & 0x3ff) << 10) + (w2 & 0x3ff) + 0x10000); + } + map[charCode] = String.fromCharCode.apply(String, str); + }); + return new ToUnicodeMap(map); + }); + } + return Promise.resolve(null); + }, + readCidToGidMap: function PartialEvaluator_readCidToGidMap(cidToGidStream) { + var glyphsData = cidToGidStream.getBytes(); + var result = []; + for (var j = 0, jj = glyphsData.length; j < jj; j++) { + var glyphID = glyphsData[j++] << 8 | glyphsData[j]; + if (glyphID === 0) { + continue; + } + var code = j >> 1; + result[code] = glyphID; + } + return result; + }, + extractWidths: function PartialEvaluator_extractWidths(dict, xref, descriptor, properties) { + var glyphsWidths = []; + var defaultWidth = 0; + var glyphsVMetrics = []; + var defaultVMetrics; + var i, ii, j, jj, start, code, widths; + if (properties.composite) { + defaultWidth = dict.get('DW') || 1000; + widths = dict.get('W'); + if (widths) { + for (i = 0, ii = widths.length; i < ii; i++) { + start = xref.fetchIfRef(widths[i++]); + code = xref.fetchIfRef(widths[i]); + if (isArray(code)) { + for (j = 0, jj = code.length; j < jj; j++) { + glyphsWidths[start++] = xref.fetchIfRef(code[j]); + } + } else { + var width = xref.fetchIfRef(widths[++i]); + for (j = start; j <= code; j++) { + glyphsWidths[j] = width; + } + } + } + } + if (properties.vertical) { + var vmetrics = dict.getArray('DW2') || [ + 880, + -1000 + ]; + defaultVMetrics = [ + vmetrics[1], + defaultWidth * 0.5, + vmetrics[0] + ]; + vmetrics = dict.get('W2'); + if (vmetrics) { + for (i = 0, ii = vmetrics.length; i < ii; i++) { + start = xref.fetchIfRef(vmetrics[i++]); + code = xref.fetchIfRef(vmetrics[i]); + if (isArray(code)) { + for (j = 0, jj = code.length; j < jj; j++) { + glyphsVMetrics[start++] = [ + xref.fetchIfRef(code[j++]), + xref.fetchIfRef(code[j++]), + xref.fetchIfRef(code[j]) + ]; + } + } else { + var vmetric = [ + xref.fetchIfRef(vmetrics[++i]), + xref.fetchIfRef(vmetrics[++i]), + xref.fetchIfRef(vmetrics[++i]) + ]; + for (j = start; j <= code; j++) { + glyphsVMetrics[j] = vmetric; + } + } + } + } + } + } else { + var firstChar = properties.firstChar; + widths = dict.get('Widths'); + if (widths) { + j = firstChar; + for (i = 0, ii = widths.length; i < ii; i++) { + glyphsWidths[j++] = xref.fetchIfRef(widths[i]); + } + defaultWidth = parseFloat(descriptor.get('MissingWidth')) || 0; + } else { + var baseFontName = dict.get('BaseFont'); + if (isName(baseFontName)) { + var metrics = this.getBaseFontMetrics(baseFontName.name); + glyphsWidths = this.buildCharCodeToWidth(metrics.widths, properties); + defaultWidth = metrics.defaultWidth; + } + } + } + var isMonospace = true; + var firstWidth = defaultWidth; + for (var glyph in glyphsWidths) { + var glyphWidth = glyphsWidths[glyph]; + if (!glyphWidth) { + continue; + } + if (!firstWidth) { + firstWidth = glyphWidth; + continue; + } + if (firstWidth !== glyphWidth) { + isMonospace = false; + break; + } + } + if (isMonospace) { + properties.flags |= FontFlags.FixedPitch; + } + properties.defaultWidth = defaultWidth; + properties.widths = glyphsWidths; + properties.defaultVMetrics = defaultVMetrics; + properties.vmetrics = glyphsVMetrics; + }, + isSerifFont: function PartialEvaluator_isSerifFont(baseFontName) { + var fontNameWoStyle = baseFontName.split('-')[0]; + return fontNameWoStyle in getSerifFonts() || fontNameWoStyle.search(/serif/gi) !== -1; + }, + getBaseFontMetrics: function PartialEvaluator_getBaseFontMetrics(name) { + var defaultWidth = 0; + var widths = []; + var monospace = false; + var stdFontMap = getStdFontMap(); + var lookupName = stdFontMap[name] || name; + var Metrics = getMetrics(); + if (!(lookupName in Metrics)) { + if (this.isSerifFont(name)) { + lookupName = 'Times-Roman'; + } else { + lookupName = 'Helvetica'; + } + } + var glyphWidths = Metrics[lookupName]; + if (isNum(glyphWidths)) { + defaultWidth = glyphWidths; + monospace = true; + } else { + widths = glyphWidths(); + } + return { + defaultWidth: defaultWidth, + monospace: monospace, + widths: widths + }; + }, + buildCharCodeToWidth: function PartialEvaluator_bulildCharCodeToWidth(widthsByGlyphName, properties) { + var widths = Object.create(null); + var differences = properties.differences; + var encoding = properties.defaultEncoding; + for (var charCode = 0; charCode < 256; charCode++) { + if (charCode in differences && widthsByGlyphName[differences[charCode]]) { + widths[charCode] = widthsByGlyphName[differences[charCode]]; + continue; + } + if (charCode in encoding && widthsByGlyphName[encoding[charCode]]) { + widths[charCode] = widthsByGlyphName[encoding[charCode]]; + continue; + } + } + return widths; + }, + preEvaluateFont: function PartialEvaluator_preEvaluateFont(dict, xref) { + var baseDict = dict; + var type = dict.get('Subtype'); + assert(isName(type), 'invalid font Subtype'); + var composite = false; + var uint8array; + if (type.name === 'Type0') { + var df = dict.get('DescendantFonts'); + if (!df) { + error('Descendant fonts are not specified'); + } + dict = isArray(df) ? xref.fetchIfRef(df[0]) : df; + type = dict.get('Subtype'); + assert(isName(type), 'invalid font Subtype'); + composite = true; + } + var descriptor = dict.get('FontDescriptor'); + if (descriptor) { + var hash = new MurmurHash3_64(); + var encoding = baseDict.getRaw('Encoding'); + if (isName(encoding)) { + hash.update(encoding.name); + } else if (isRef(encoding)) { + hash.update(encoding.toString()); + } else if (isDict(encoding)) { + var keys = encoding.getKeys(); + for (var i = 0, ii = keys.length; i < ii; i++) { + var entry = encoding.getRaw(keys[i]); + if (isName(entry)) { + hash.update(entry.name); + } else if (isRef(entry)) { + hash.update(entry.toString()); + } else if (isArray(entry)) { + var diffLength = entry.length, diffBuf = new Array(diffLength); + for (var j = 0; j < diffLength; j++) { + var diffEntry = entry[j]; + if (isName(diffEntry)) { + diffBuf[j] = diffEntry.name; + } else if (isNum(diffEntry) || isRef(diffEntry)) { + diffBuf[j] = diffEntry.toString(); + } + } + hash.update(diffBuf.join()); + } + } + } + var toUnicode = dict.get('ToUnicode') || baseDict.get('ToUnicode'); + if (isStream(toUnicode)) { + var stream = toUnicode.str || toUnicode; + uint8array = stream.buffer ? new Uint8Array(stream.buffer.buffer, 0, stream.bufferLength) : new Uint8Array(stream.bytes.buffer, stream.start, stream.end - stream.start); + hash.update(uint8array); + } else if (isName(toUnicode)) { + hash.update(toUnicode.name); + } + var widths = dict.get('Widths') || baseDict.get('Widths'); + if (widths) { + uint8array = new Uint8Array(new Uint32Array(widths).buffer); + hash.update(uint8array); + } + } + return { + descriptor: descriptor, + dict: dict, + baseDict: baseDict, + composite: composite, + type: type.name, + hash: hash ? hash.hexdigest() : '' + }; + }, + translateFont: function PartialEvaluator_translateFont(preEvaluatedFont, xref) { + var baseDict = preEvaluatedFont.baseDict; + var dict = preEvaluatedFont.dict; + var composite = preEvaluatedFont.composite; + var descriptor = preEvaluatedFont.descriptor; + var type = preEvaluatedFont.type; + var maxCharIndex = composite ? 0xFFFF : 0xFF; + var cMapOptions = this.options.cMapOptions; + var properties; + if (!descriptor) { + if (type === 'Type3') { + descriptor = new Dict(null); + descriptor.set('FontName', Name.get(type)); + descriptor.set('FontBBox', dict.getArray('FontBBox')); + } else { + var baseFontName = dict.get('BaseFont'); + if (!isName(baseFontName)) { + error('Base font is not specified'); + } + baseFontName = baseFontName.name.replace(/[,_]/g, '-'); + var metrics = this.getBaseFontMetrics(baseFontName); + var fontNameWoStyle = baseFontName.split('-')[0]; + var flags = (this.isSerifFont(fontNameWoStyle) ? FontFlags.Serif : 0) | (metrics.monospace ? FontFlags.FixedPitch : 0) | (getSymbolsFonts()[fontNameWoStyle] ? FontFlags.Symbolic : FontFlags.Nonsymbolic); + properties = { + type: type, + name: baseFontName, + widths: metrics.widths, + defaultWidth: metrics.defaultWidth, + flags: flags, + firstChar: 0, + lastChar: maxCharIndex + }; + return this.extractDataStructures(dict, dict, xref, properties).then(function (properties) { + properties.widths = this.buildCharCodeToWidth(metrics.widths, properties); + return new Font(baseFontName, null, properties); + }.bind(this)); + } + } + var firstChar = dict.get('FirstChar') || 0; + var lastChar = dict.get('LastChar') || maxCharIndex; + var fontName = descriptor.get('FontName'); + var baseFont = dict.get('BaseFont'); + if (isString(fontName)) { + fontName = Name.get(fontName); + } + if (isString(baseFont)) { + baseFont = Name.get(baseFont); + } + if (type !== 'Type3') { + var fontNameStr = fontName && fontName.name; + var baseFontStr = baseFont && baseFont.name; + if (fontNameStr !== baseFontStr) { + info('The FontDescriptor\'s FontName is "' + fontNameStr + '" but should be the same as the Font\'s BaseFont "' + baseFontStr + '"'); + if (fontNameStr && baseFontStr && baseFontStr.indexOf(fontNameStr) === 0) { + fontName = baseFont; + } + } + } + fontName = fontName || baseFont; + assert(isName(fontName), 'invalid font name'); + var fontFile = descriptor.get('FontFile', 'FontFile2', 'FontFile3'); + if (fontFile) { + if (fontFile.dict) { + var subtype = fontFile.dict.get('Subtype'); + if (subtype) { + subtype = subtype.name; + } + var length1 = fontFile.dict.get('Length1'); + var length2 = fontFile.dict.get('Length2'); + var length3 = fontFile.dict.get('Length3'); + } + } + properties = { + type: type, + name: fontName.name, + subtype: subtype, + file: fontFile, + length1: length1, + length2: length2, + length3: length3, + loadedName: baseDict.loadedName, + composite: composite, + wideChars: composite, + fixedPitch: false, + fontMatrix: dict.getArray('FontMatrix') || FONT_IDENTITY_MATRIX, + firstChar: firstChar || 0, + lastChar: lastChar || maxCharIndex, + bbox: descriptor.getArray('FontBBox'), + ascent: descriptor.get('Ascent'), + descent: descriptor.get('Descent'), + xHeight: descriptor.get('XHeight'), + capHeight: descriptor.get('CapHeight'), + flags: descriptor.get('Flags'), + italicAngle: descriptor.get('ItalicAngle'), + coded: false + }; + var cMapPromise; + if (composite) { + var cidEncoding = baseDict.get('Encoding'); + if (isName(cidEncoding)) { + properties.cidEncoding = cidEncoding.name; + } + cMapPromise = CMapFactory.create(cidEncoding, cMapOptions, null).then(function (cMap) { + properties.cMap = cMap; + properties.vertical = properties.cMap.vertical; + }); + } else { + cMapPromise = Promise.resolve(undefined); + } + return cMapPromise.then(function () { + return this.extractDataStructures(dict, baseDict, xref, properties); + }.bind(this)).then(function (properties) { + this.extractWidths(dict, xref, descriptor, properties); + if (type === 'Type3') { + properties.isType3Font = true; + } + return new Font(fontName.name, fontFile, properties); + }.bind(this)); + } + }; + return PartialEvaluator; + }(); + var TranslatedFont = function TranslatedFontClosure() { + function TranslatedFont(loadedName, font, dict) { + this.loadedName = loadedName; + this.font = font; + this.dict = dict; + this.type3Loaded = null; + this.sent = false; + } + TranslatedFont.prototype = { + send: function (handler) { + if (this.sent) { + return; + } + var fontData = this.font.exportData(); + handler.send('commonobj', [ + this.loadedName, + 'Font', + fontData + ]); + this.sent = true; + }, + loadType3Data: function (evaluator, resources, parentOperatorList, task) { + assert(this.font.isType3Font); + if (this.type3Loaded) { + return this.type3Loaded; + } + var translatedFont = this.font; + var loadCharProcsPromise = Promise.resolve(); + var charProcs = this.dict.get('CharProcs'); + var fontResources = this.dict.get('Resources') || resources; + var charProcKeys = charProcs.getKeys(); + var charProcOperatorList = Object.create(null); + for (var i = 0, n = charProcKeys.length; i < n; ++i) { + loadCharProcsPromise = loadCharProcsPromise.then(function (key) { + var glyphStream = charProcs.get(key); + var operatorList = new OperatorList(); + return evaluator.getOperatorList(glyphStream, task, fontResources, operatorList).then(function () { + charProcOperatorList[key] = operatorList.getIR(); + parentOperatorList.addDependencies(operatorList.dependencies); + }, function (reason) { + warn('Type3 font resource \"' + key + '\" is not available'); + var operatorList = new OperatorList(); + charProcOperatorList[key] = operatorList.getIR(); + }); + }.bind(this, charProcKeys[i])); + } + this.type3Loaded = loadCharProcsPromise.then(function () { + translatedFont.charProcOperatorList = charProcOperatorList; + }); + return this.type3Loaded; + } + }; + return TranslatedFont; + }(); + var OperatorList = function OperatorListClosure() { + var CHUNK_SIZE = 1000; + var CHUNK_SIZE_ABOUT = CHUNK_SIZE - 5; + function getTransfers(queue) { + var transfers = []; + var fnArray = queue.fnArray, argsArray = queue.argsArray; + for (var i = 0, ii = queue.length; i < ii; i++) { + switch (fnArray[i]) { + case OPS.paintInlineImageXObject: + case OPS.paintInlineImageXObjectGroup: + case OPS.paintImageMaskXObject: + var arg = argsArray[i][0]; + if (!arg.cached) { + transfers.push(arg.data.buffer); + } + break; + } + } + return transfers; + } + function OperatorList(intent, messageHandler, pageIndex) { + this.messageHandler = messageHandler; + this.fnArray = []; + this.argsArray = []; + this.dependencies = Object.create(null); + this._totalLength = 0; + this.pageIndex = pageIndex; + this.intent = intent; + } + OperatorList.prototype = { + get length() { + return this.argsArray.length; + }, + get totalLength() { + return this._totalLength + this.length; + }, + addOp: function (fn, args) { + this.fnArray.push(fn); + this.argsArray.push(args); + if (this.messageHandler) { + if (this.fnArray.length >= CHUNK_SIZE) { + this.flush(); + } else if (this.fnArray.length >= CHUNK_SIZE_ABOUT && (fn === OPS.restore || fn === OPS.endText)) { + this.flush(); + } + } + }, + addDependency: function (dependency) { + if (dependency in this.dependencies) { + return; + } + this.dependencies[dependency] = true; + this.addOp(OPS.dependency, [dependency]); + }, + addDependencies: function (dependencies) { + for (var key in dependencies) { + this.addDependency(key); + } + }, + addOpList: function (opList) { + Util.extendObj(this.dependencies, opList.dependencies); + for (var i = 0, ii = opList.length; i < ii; i++) { + this.addOp(opList.fnArray[i], opList.argsArray[i]); + } + }, + getIR: function () { + return { + fnArray: this.fnArray, + argsArray: this.argsArray, + length: this.length + }; + }, + flush: function (lastChunk) { + if (this.intent !== 'oplist') { + new QueueOptimizer().optimize(this); + } + var transfers = getTransfers(this); + var length = this.length; + this._totalLength += length; + this.messageHandler.send('RenderPageChunk', { + operatorList: { + fnArray: this.fnArray, + argsArray: this.argsArray, + lastChunk: lastChunk, + length: length + }, + pageIndex: this.pageIndex, + intent: this.intent + }, transfers); + this.dependencies = Object.create(null); + this.fnArray.length = 0; + this.argsArray.length = 0; + } + }; + return OperatorList; + }(); + var StateManager = function StateManagerClosure() { + function StateManager(initialState) { + this.state = initialState; + this.stateStack = []; + } + StateManager.prototype = { + save: function () { + var old = this.state; + this.stateStack.push(this.state); + this.state = old.clone(); + }, + restore: function () { + var prev = this.stateStack.pop(); + if (prev) { + this.state = prev; + } + }, + transform: function (args) { + this.state.ctm = Util.transform(this.state.ctm, args); + } + }; + return StateManager; + }(); + var TextState = function TextStateClosure() { + function TextState() { + this.ctm = new Float32Array(IDENTITY_MATRIX); + this.fontName = null; + this.fontSize = 0; + this.font = null; + this.fontMatrix = FONT_IDENTITY_MATRIX; + this.textMatrix = IDENTITY_MATRIX.slice(); + this.textLineMatrix = IDENTITY_MATRIX.slice(); + this.charSpacing = 0; + this.wordSpacing = 0; + this.leading = 0; + this.textHScale = 1; + this.textRise = 0; + } + TextState.prototype = { + setTextMatrix: function TextState_setTextMatrix(a, b, c, d, e, f) { + var m = this.textMatrix; + m[0] = a; + m[1] = b; + m[2] = c; + m[3] = d; + m[4] = e; + m[5] = f; + }, + setTextLineMatrix: function TextState_setTextMatrix(a, b, c, d, e, f) { + var m = this.textLineMatrix; + m[0] = a; + m[1] = b; + m[2] = c; + m[3] = d; + m[4] = e; + m[5] = f; + }, + translateTextMatrix: function TextState_translateTextMatrix(x, y) { + var m = this.textMatrix; + m[4] = m[0] * x + m[2] * y + m[4]; + m[5] = m[1] * x + m[3] * y + m[5]; + }, + translateTextLineMatrix: function TextState_translateTextMatrix(x, y) { + var m = this.textLineMatrix; + m[4] = m[0] * x + m[2] * y + m[4]; + m[5] = m[1] * x + m[3] * y + m[5]; + }, + calcTextLineMatrixAdvance: function TextState_calcTextLineMatrixAdvance(a, b, c, d, e, f) { + var font = this.font; + if (!font) { + return null; + } + var m = this.textLineMatrix; + if (!(a === m[0] && b === m[1] && c === m[2] && d === m[3])) { + return null; + } + var txDiff = e - m[4], tyDiff = f - m[5]; + if (font.vertical && txDiff !== 0 || !font.vertical && tyDiff !== 0) { + return null; + } + var tx, ty, denominator = a * d - b * c; + if (font.vertical) { + tx = -tyDiff * c / denominator; + ty = tyDiff * a / denominator; + } else { + tx = txDiff * d / denominator; + ty = -txDiff * b / denominator; + } + return { + width: tx, + height: ty, + value: font.vertical ? ty : tx + }; + }, + calcRenderMatrix: function TextState_calcRendeMatrix(ctm) { + var tsm = [ + this.fontSize * this.textHScale, + 0, + 0, + this.fontSize, + 0, + this.textRise + ]; + return Util.transform(ctm, Util.transform(this.textMatrix, tsm)); + }, + carriageReturn: function TextState_carriageReturn() { + this.translateTextLineMatrix(0, -this.leading); + this.textMatrix = this.textLineMatrix.slice(); + }, + clone: function TextState_clone() { + var clone = Object.create(this); + clone.textMatrix = this.textMatrix.slice(); + clone.textLineMatrix = this.textLineMatrix.slice(); + clone.fontMatrix = this.fontMatrix.slice(); + return clone; + } + }; + return TextState; + }(); + var EvalState = function EvalStateClosure() { + function EvalState() { + this.ctm = new Float32Array(IDENTITY_MATRIX); + this.font = null; + this.textRenderingMode = TextRenderingMode.FILL; + this.fillColorSpace = ColorSpace.singletons.gray; + this.strokeColorSpace = ColorSpace.singletons.gray; + } + EvalState.prototype = { + clone: function CanvasExtraState_clone() { + return Object.create(this); + } + }; + return EvalState; + }(); + var EvaluatorPreprocessor = function EvaluatorPreprocessorClosure() { + var getOPMap = getLookupTableFactory(function (t) { + t['w'] = { + id: OPS.setLineWidth, + numArgs: 1, + variableArgs: false + }; + t['J'] = { + id: OPS.setLineCap, + numArgs: 1, + variableArgs: false + }; + t['j'] = { + id: OPS.setLineJoin, + numArgs: 1, + variableArgs: false + }; + t['M'] = { + id: OPS.setMiterLimit, + numArgs: 1, + variableArgs: false + }; + t['d'] = { + id: OPS.setDash, + numArgs: 2, + variableArgs: false + }; + t['ri'] = { + id: OPS.setRenderingIntent, + numArgs: 1, + variableArgs: false + }; + t['i'] = { + id: OPS.setFlatness, + numArgs: 1, + variableArgs: false + }; + t['gs'] = { + id: OPS.setGState, + numArgs: 1, + variableArgs: false + }; + t['q'] = { + id: OPS.save, + numArgs: 0, + variableArgs: false + }; + t['Q'] = { + id: OPS.restore, + numArgs: 0, + variableArgs: false + }; + t['cm'] = { + id: OPS.transform, + numArgs: 6, + variableArgs: false + }; + t['m'] = { + id: OPS.moveTo, + numArgs: 2, + variableArgs: false + }; + t['l'] = { + id: OPS.lineTo, + numArgs: 2, + variableArgs: false + }; + t['c'] = { + id: OPS.curveTo, + numArgs: 6, + variableArgs: false + }; + t['v'] = { + id: OPS.curveTo2, + numArgs: 4, + variableArgs: false + }; + t['y'] = { + id: OPS.curveTo3, + numArgs: 4, + variableArgs: false + }; + t['h'] = { + id: OPS.closePath, + numArgs: 0, + variableArgs: false + }; + t['re'] = { + id: OPS.rectangle, + numArgs: 4, + variableArgs: false + }; + t['S'] = { + id: OPS.stroke, + numArgs: 0, + variableArgs: false + }; + t['s'] = { + id: OPS.closeStroke, + numArgs: 0, + variableArgs: false + }; + t['f'] = { + id: OPS.fill, + numArgs: 0, + variableArgs: false + }; + t['F'] = { + id: OPS.fill, + numArgs: 0, + variableArgs: false + }; + t['f*'] = { + id: OPS.eoFill, + numArgs: 0, + variableArgs: false + }; + t['B'] = { + id: OPS.fillStroke, + numArgs: 0, + variableArgs: false + }; + t['B*'] = { + id: OPS.eoFillStroke, + numArgs: 0, + variableArgs: false + }; + t['b'] = { + id: OPS.closeFillStroke, + numArgs: 0, + variableArgs: false + }; + t['b*'] = { + id: OPS.closeEOFillStroke, + numArgs: 0, + variableArgs: false + }; + t['n'] = { + id: OPS.endPath, + numArgs: 0, + variableArgs: false + }; + t['W'] = { + id: OPS.clip, + numArgs: 0, + variableArgs: false + }; + t['W*'] = { + id: OPS.eoClip, + numArgs: 0, + variableArgs: false + }; + t['BT'] = { + id: OPS.beginText, + numArgs: 0, + variableArgs: false + }; + t['ET'] = { + id: OPS.endText, + numArgs: 0, + variableArgs: false + }; + t['Tc'] = { + id: OPS.setCharSpacing, + numArgs: 1, + variableArgs: false + }; + t['Tw'] = { + id: OPS.setWordSpacing, + numArgs: 1, + variableArgs: false + }; + t['Tz'] = { + id: OPS.setHScale, + numArgs: 1, + variableArgs: false + }; + t['TL'] = { + id: OPS.setLeading, + numArgs: 1, + variableArgs: false + }; + t['Tf'] = { + id: OPS.setFont, + numArgs: 2, + variableArgs: false + }; + t['Tr'] = { + id: OPS.setTextRenderingMode, + numArgs: 1, + variableArgs: false + }; + t['Ts'] = { + id: OPS.setTextRise, + numArgs: 1, + variableArgs: false + }; + t['Td'] = { + id: OPS.moveText, + numArgs: 2, + variableArgs: false + }; + t['TD'] = { + id: OPS.setLeadingMoveText, + numArgs: 2, + variableArgs: false + }; + t['Tm'] = { + id: OPS.setTextMatrix, + numArgs: 6, + variableArgs: false + }; + t['T*'] = { + id: OPS.nextLine, + numArgs: 0, + variableArgs: false + }; + t['Tj'] = { + id: OPS.showText, + numArgs: 1, + variableArgs: false + }; + t['TJ'] = { + id: OPS.showSpacedText, + numArgs: 1, + variableArgs: false + }; + t['\''] = { + id: OPS.nextLineShowText, + numArgs: 1, + variableArgs: false + }; + t['"'] = { + id: OPS.nextLineSetSpacingShowText, + numArgs: 3, + variableArgs: false + }; + t['d0'] = { + id: OPS.setCharWidth, + numArgs: 2, + variableArgs: false + }; + t['d1'] = { + id: OPS.setCharWidthAndBounds, + numArgs: 6, + variableArgs: false + }; + t['CS'] = { + id: OPS.setStrokeColorSpace, + numArgs: 1, + variableArgs: false + }; + t['cs'] = { + id: OPS.setFillColorSpace, + numArgs: 1, + variableArgs: false + }; + t['SC'] = { + id: OPS.setStrokeColor, + numArgs: 4, + variableArgs: true + }; + t['SCN'] = { + id: OPS.setStrokeColorN, + numArgs: 33, + variableArgs: true + }; + t['sc'] = { + id: OPS.setFillColor, + numArgs: 4, + variableArgs: true + }; + t['scn'] = { + id: OPS.setFillColorN, + numArgs: 33, + variableArgs: true + }; + t['G'] = { + id: OPS.setStrokeGray, + numArgs: 1, + variableArgs: false + }; + t['g'] = { + id: OPS.setFillGray, + numArgs: 1, + variableArgs: false + }; + t['RG'] = { + id: OPS.setStrokeRGBColor, + numArgs: 3, + variableArgs: false + }; + t['rg'] = { + id: OPS.setFillRGBColor, + numArgs: 3, + variableArgs: false + }; + t['K'] = { + id: OPS.setStrokeCMYKColor, + numArgs: 4, + variableArgs: false + }; + t['k'] = { + id: OPS.setFillCMYKColor, + numArgs: 4, + variableArgs: false + }; + t['sh'] = { + id: OPS.shadingFill, + numArgs: 1, + variableArgs: false + }; + t['BI'] = { + id: OPS.beginInlineImage, + numArgs: 0, + variableArgs: false + }; + t['ID'] = { + id: OPS.beginImageData, + numArgs: 0, + variableArgs: false + }; + t['EI'] = { + id: OPS.endInlineImage, + numArgs: 1, + variableArgs: false + }; + t['Do'] = { + id: OPS.paintXObject, + numArgs: 1, + variableArgs: false + }; + t['MP'] = { + id: OPS.markPoint, + numArgs: 1, + variableArgs: false + }; + t['DP'] = { + id: OPS.markPointProps, + numArgs: 2, + variableArgs: false + }; + t['BMC'] = { + id: OPS.beginMarkedContent, + numArgs: 1, + variableArgs: false + }; + t['BDC'] = { + id: OPS.beginMarkedContentProps, + numArgs: 2, + variableArgs: false + }; + t['EMC'] = { + id: OPS.endMarkedContent, + numArgs: 0, + variableArgs: false + }; + t['BX'] = { + id: OPS.beginCompat, + numArgs: 0, + variableArgs: false + }; + t['EX'] = { + id: OPS.endCompat, + numArgs: 0, + variableArgs: false + }; + t['BM'] = null; + t['BD'] = null; + t['true'] = null; + t['fa'] = null; + t['fal'] = null; + t['fals'] = null; + t['false'] = null; + t['nu'] = null; + t['nul'] = null; + t['null'] = null; + }); + function EvaluatorPreprocessor(stream, xref, stateManager) { + this.opMap = getOPMap(); + this.parser = new Parser(new Lexer(stream, this.opMap), false, xref); + this.stateManager = stateManager; + this.nonProcessedArgs = []; + } + EvaluatorPreprocessor.prototype = { + get savedStatesDepth() { + return this.stateManager.stateStack.length; + }, + read: function EvaluatorPreprocessor_read(operation) { + var args = operation.args; + while (true) { + var obj = this.parser.getObj(); + if (isCmd(obj)) { + var cmd = obj.cmd; + var opSpec = this.opMap[cmd]; + if (!opSpec) { + warn('Unknown command "' + cmd + '"'); + continue; + } + var fn = opSpec.id; + var numArgs = opSpec.numArgs; + var argsLength = args !== null ? args.length : 0; + if (!opSpec.variableArgs) { + if (argsLength !== numArgs) { + var nonProcessedArgs = this.nonProcessedArgs; + while (argsLength > numArgs) { + nonProcessedArgs.push(args.shift()); + argsLength--; + } + while (argsLength < numArgs && nonProcessedArgs.length !== 0) { + if (args === null) { + args = []; + } + args.unshift(nonProcessedArgs.pop()); + argsLength++; + } + } + if (argsLength < numArgs) { + warn('Skipping command ' + fn + ': expected ' + numArgs + ' args, but received ' + argsLength + ' args.'); + if (args !== null) { + args.length = 0; + } + continue; + } + } else if (argsLength > numArgs) { + info('Command ' + fn + ': expected [0,' + numArgs + '] args, but received ' + argsLength + ' args.'); + } + this.preprocessCommand(fn, args); + operation.fn = fn; + operation.args = args; + return true; + } + if (isEOF(obj)) { + return false; + } + if (obj !== null) { + if (args === null) { + args = []; + } + args.push(obj); + assert(args.length <= 33, 'Too many arguments'); + } + } + }, + preprocessCommand: function EvaluatorPreprocessor_preprocessCommand(fn, args) { + switch (fn | 0) { + case OPS.save: + this.stateManager.save(); + break; + case OPS.restore: + this.stateManager.restore(); + break; + case OPS.transform: + this.stateManager.transform(args); + break; + } + } + }; + return EvaluatorPreprocessor; + }(); + var QueueOptimizer = function QueueOptimizerClosure() { + function addState(parentState, pattern, fn) { + var state = parentState; + for (var i = 0, ii = pattern.length - 1; i < ii; i++) { + var item = pattern[i]; + state = state[item] || (state[item] = []); + } + state[pattern[pattern.length - 1]] = fn; + } + function handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray) { + var iFirstPIMXO = iFirstSave + 2; + for (var i = 0; i < count; i++) { + var arg = argsArray[iFirstPIMXO + 4 * i]; + var imageMask = arg.length === 1 && arg[0]; + if (imageMask && imageMask.width === 1 && imageMask.height === 1 && (!imageMask.data.length || imageMask.data.length === 1 && imageMask.data[0] === 0)) { + fnArray[iFirstPIMXO + 4 * i] = OPS.paintSolidColorImageMask; + continue; + } + break; + } + return count - i; + } + var InitialState = []; + addState(InitialState, [ + OPS.save, + OPS.transform, + OPS.paintInlineImageXObject, + OPS.restore + ], function foundInlineImageGroup(context) { + var MIN_IMAGES_IN_INLINE_IMAGES_BLOCK = 10; + var MAX_IMAGES_IN_INLINE_IMAGES_BLOCK = 200; + var MAX_WIDTH = 1000; + var IMAGE_PADDING = 1; + var fnArray = context.fnArray, argsArray = context.argsArray; + var curr = context.iCurr; + var iFirstSave = curr - 3; + var iFirstTransform = curr - 2; + var iFirstPIIXO = curr - 1; + var i = iFirstSave + 4; + var ii = fnArray.length; + while (i + 3 < ii) { + if (fnArray[i] !== OPS.save || fnArray[i + 1] !== OPS.transform || fnArray[i + 2] !== OPS.paintInlineImageXObject || fnArray[i + 3] !== OPS.restore) { + break; + } + i += 4; + } + var count = Math.min((i - iFirstSave) / 4, MAX_IMAGES_IN_INLINE_IMAGES_BLOCK); + if (count < MIN_IMAGES_IN_INLINE_IMAGES_BLOCK) { + return i; + } + var maxX = 0; + var map = [], maxLineHeight = 0; + var currentX = IMAGE_PADDING, currentY = IMAGE_PADDING; + var q; + for (q = 0; q < count; q++) { + var transform = argsArray[iFirstTransform + (q << 2)]; + var img = argsArray[iFirstPIIXO + (q << 2)][0]; + if (currentX + img.width > MAX_WIDTH) { + maxX = Math.max(maxX, currentX); + currentY += maxLineHeight + 2 * IMAGE_PADDING; + currentX = 0; + maxLineHeight = 0; + } + map.push({ + transform: transform, + x: currentX, + y: currentY, + w: img.width, + h: img.height + }); + currentX += img.width + 2 * IMAGE_PADDING; + maxLineHeight = Math.max(maxLineHeight, img.height); + } + var imgWidth = Math.max(maxX, currentX) + IMAGE_PADDING; + var imgHeight = currentY + maxLineHeight + IMAGE_PADDING; + var imgData = new Uint8Array(imgWidth * imgHeight * 4); + var imgRowSize = imgWidth << 2; + for (q = 0; q < count; q++) { + var data = argsArray[iFirstPIIXO + (q << 2)][0].data; + var rowSize = map[q].w << 2; + var dataOffset = 0; + var offset = map[q].x + map[q].y * imgWidth << 2; + imgData.set(data.subarray(0, rowSize), offset - imgRowSize); + for (var k = 0, kk = map[q].h; k < kk; k++) { + imgData.set(data.subarray(dataOffset, dataOffset + rowSize), offset); + dataOffset += rowSize; + offset += imgRowSize; + } + imgData.set(data.subarray(dataOffset - rowSize, dataOffset), offset); + while (offset >= 0) { + data[offset - 4] = data[offset]; + data[offset - 3] = data[offset + 1]; + data[offset - 2] = data[offset + 2]; + data[offset - 1] = data[offset + 3]; + data[offset + rowSize] = data[offset + rowSize - 4]; + data[offset + rowSize + 1] = data[offset + rowSize - 3]; + data[offset + rowSize + 2] = data[offset + rowSize - 2]; + data[offset + rowSize + 3] = data[offset + rowSize - 1]; + offset -= imgRowSize; + } + } + fnArray.splice(iFirstSave, count * 4, OPS.paintInlineImageXObjectGroup); + argsArray.splice(iFirstSave, count * 4, [ + { + width: imgWidth, + height: imgHeight, + kind: ImageKind.RGBA_32BPP, + data: imgData + }, + map + ]); + return iFirstSave + 1; + }); + addState(InitialState, [ + OPS.save, + OPS.transform, + OPS.paintImageMaskXObject, + OPS.restore + ], function foundImageMaskGroup(context) { + var MIN_IMAGES_IN_MASKS_BLOCK = 10; + var MAX_IMAGES_IN_MASKS_BLOCK = 100; + var MAX_SAME_IMAGES_IN_MASKS_BLOCK = 1000; + var fnArray = context.fnArray, argsArray = context.argsArray; + var curr = context.iCurr; + var iFirstSave = curr - 3; + var iFirstTransform = curr - 2; + var iFirstPIMXO = curr - 1; + var i = iFirstSave + 4; + var ii = fnArray.length; + while (i + 3 < ii) { + if (fnArray[i] !== OPS.save || fnArray[i + 1] !== OPS.transform || fnArray[i + 2] !== OPS.paintImageMaskXObject || fnArray[i + 3] !== OPS.restore) { + break; + } + i += 4; + } + var count = (i - iFirstSave) / 4; + count = handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray); + if (count < MIN_IMAGES_IN_MASKS_BLOCK) { + return i; + } + var q; + var isSameImage = false; + var iTransform, transformArgs; + var firstPIMXOArg0 = argsArray[iFirstPIMXO][0]; + if (argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0) { + isSameImage = true; + var firstTransformArg0 = argsArray[iFirstTransform][0]; + var firstTransformArg3 = argsArray[iFirstTransform][3]; + iTransform = iFirstTransform + 4; + var iPIMXO = iFirstPIMXO + 4; + for (q = 1; q < count; q++, iTransform += 4, iPIMXO += 4) { + transformArgs = argsArray[iTransform]; + if (argsArray[iPIMXO][0] !== firstPIMXOArg0 || transformArgs[0] !== firstTransformArg0 || transformArgs[1] !== 0 || transformArgs[2] !== 0 || transformArgs[3] !== firstTransformArg3) { + if (q < MIN_IMAGES_IN_MASKS_BLOCK) { + isSameImage = false; + } else { + count = q; + } + break; + } + } + } + if (isSameImage) { + count = Math.min(count, MAX_SAME_IMAGES_IN_MASKS_BLOCK); + var positions = new Float32Array(count * 2); + iTransform = iFirstTransform; + for (q = 0; q < count; q++, iTransform += 4) { + transformArgs = argsArray[iTransform]; + positions[q << 1] = transformArgs[4]; + positions[(q << 1) + 1] = transformArgs[5]; + } + fnArray.splice(iFirstSave, count * 4, OPS.paintImageMaskXObjectRepeat); + argsArray.splice(iFirstSave, count * 4, [ + firstPIMXOArg0, + firstTransformArg0, + firstTransformArg3, + positions + ]); + } else { + count = Math.min(count, MAX_IMAGES_IN_MASKS_BLOCK); + var images = []; + for (q = 0; q < count; q++) { + transformArgs = argsArray[iFirstTransform + (q << 2)]; + var maskParams = argsArray[iFirstPIMXO + (q << 2)][0]; + images.push({ + data: maskParams.data, + width: maskParams.width, + height: maskParams.height, + transform: transformArgs + }); + } + fnArray.splice(iFirstSave, count * 4, OPS.paintImageMaskXObjectGroup); + argsArray.splice(iFirstSave, count * 4, [images]); + } + return iFirstSave + 1; + }); + addState(InitialState, [ + OPS.save, + OPS.transform, + OPS.paintImageXObject, + OPS.restore + ], function (context) { + var MIN_IMAGES_IN_BLOCK = 3; + var MAX_IMAGES_IN_BLOCK = 1000; + var fnArray = context.fnArray, argsArray = context.argsArray; + var curr = context.iCurr; + var iFirstSave = curr - 3; + var iFirstTransform = curr - 2; + var iFirstPIXO = curr - 1; + var iFirstRestore = curr; + if (argsArray[iFirstTransform][1] !== 0 || argsArray[iFirstTransform][2] !== 0) { + return iFirstRestore + 1; + } + var firstPIXOArg0 = argsArray[iFirstPIXO][0]; + var firstTransformArg0 = argsArray[iFirstTransform][0]; + var firstTransformArg3 = argsArray[iFirstTransform][3]; + var i = iFirstSave + 4; + var ii = fnArray.length; + while (i + 3 < ii) { + if (fnArray[i] !== OPS.save || fnArray[i + 1] !== OPS.transform || fnArray[i + 2] !== OPS.paintImageXObject || fnArray[i + 3] !== OPS.restore) { + break; + } + if (argsArray[i + 1][0] !== firstTransformArg0 || argsArray[i + 1][1] !== 0 || argsArray[i + 1][2] !== 0 || argsArray[i + 1][3] !== firstTransformArg3) { + break; + } + if (argsArray[i + 2][0] !== firstPIXOArg0) { + break; + } + i += 4; + } + var count = Math.min((i - iFirstSave) / 4, MAX_IMAGES_IN_BLOCK); + if (count < MIN_IMAGES_IN_BLOCK) { + return i; + } + var positions = new Float32Array(count * 2); + var iTransform = iFirstTransform; + for (var q = 0; q < count; q++, iTransform += 4) { + var transformArgs = argsArray[iTransform]; + positions[q << 1] = transformArgs[4]; + positions[(q << 1) + 1] = transformArgs[5]; + } + var args = [ + firstPIXOArg0, + firstTransformArg0, + firstTransformArg3, + positions + ]; + fnArray.splice(iFirstSave, count * 4, OPS.paintImageXObjectRepeat); + argsArray.splice(iFirstSave, count * 4, args); + return iFirstSave + 1; + }); + addState(InitialState, [ + OPS.beginText, + OPS.setFont, + OPS.setTextMatrix, + OPS.showText, + OPS.endText + ], function (context) { + var MIN_CHARS_IN_BLOCK = 3; + var MAX_CHARS_IN_BLOCK = 1000; + var fnArray = context.fnArray, argsArray = context.argsArray; + var curr = context.iCurr; + var iFirstBeginText = curr - 4; + var iFirstSetFont = curr - 3; + var iFirstSetTextMatrix = curr - 2; + var iFirstShowText = curr - 1; + var iFirstEndText = curr; + var firstSetFontArg0 = argsArray[iFirstSetFont][0]; + var firstSetFontArg1 = argsArray[iFirstSetFont][1]; + var i = iFirstBeginText + 5; + var ii = fnArray.length; + while (i + 4 < ii) { + if (fnArray[i] !== OPS.beginText || fnArray[i + 1] !== OPS.setFont || fnArray[i + 2] !== OPS.setTextMatrix || fnArray[i + 3] !== OPS.showText || fnArray[i + 4] !== OPS.endText) { + break; + } + if (argsArray[i + 1][0] !== firstSetFontArg0 || argsArray[i + 1][1] !== firstSetFontArg1) { + break; + } + i += 5; + } + var count = Math.min((i - iFirstBeginText) / 5, MAX_CHARS_IN_BLOCK); + if (count < MIN_CHARS_IN_BLOCK) { + return i; + } + var iFirst = iFirstBeginText; + if (iFirstBeginText >= 4 && fnArray[iFirstBeginText - 4] === fnArray[iFirstSetFont] && fnArray[iFirstBeginText - 3] === fnArray[iFirstSetTextMatrix] && fnArray[iFirstBeginText - 2] === fnArray[iFirstShowText] && fnArray[iFirstBeginText - 1] === fnArray[iFirstEndText] && argsArray[iFirstBeginText - 4][0] === firstSetFontArg0 && argsArray[iFirstBeginText - 4][1] === firstSetFontArg1) { + count++; + iFirst -= 5; + } + var iEndText = iFirst + 4; + for (var q = 1; q < count; q++) { + fnArray.splice(iEndText, 3); + argsArray.splice(iEndText, 3); + iEndText += 2; + } + return iEndText + 1; + }); + function QueueOptimizer() { + } + QueueOptimizer.prototype = { + optimize: function QueueOptimizer_optimize(queue) { + var fnArray = queue.fnArray, argsArray = queue.argsArray; + var context = { + iCurr: 0, + fnArray: fnArray, + argsArray: argsArray + }; + var state; + var i = 0, ii = fnArray.length; + while (i < ii) { + state = (state || InitialState)[fnArray[i]]; + if (typeof state === 'function') { + context.iCurr = i; + i = state(context); + state = undefined; + ii = context.fnArray.length; + } else { + i++; + } + } + } + }; + return QueueOptimizer; + }(); + exports.OperatorList = OperatorList; + exports.PartialEvaluator = PartialEvaluator; + })); + (function (root, factory) { + factory(root.pdfjsCoreAnnotation = {}, root.pdfjsSharedUtil, root.pdfjsCorePrimitives, root.pdfjsCoreStream, root.pdfjsCoreColorSpace, root.pdfjsCoreObj, root.pdfjsCoreEvaluator); + }(this, function (exports, sharedUtil, corePrimitives, coreStream, coreColorSpace, coreObj, coreEvaluator) { + var AnnotationBorderStyleType = sharedUtil.AnnotationBorderStyleType; + var AnnotationFieldFlag = sharedUtil.AnnotationFieldFlag; + var AnnotationFlag = sharedUtil.AnnotationFlag; + var AnnotationType = sharedUtil.AnnotationType; + var OPS = sharedUtil.OPS; + var Util = sharedUtil.Util; + var isString = sharedUtil.isString; + var isArray = sharedUtil.isArray; + var isInt = sharedUtil.isInt; + var stringToBytes = sharedUtil.stringToBytes; + var stringToPDFString = sharedUtil.stringToPDFString; + var warn = sharedUtil.warn; + var Dict = corePrimitives.Dict; + var isDict = corePrimitives.isDict; + var isName = corePrimitives.isName; + var isRef = corePrimitives.isRef; + var Stream = coreStream.Stream; + var ColorSpace = coreColorSpace.ColorSpace; + var Catalog = coreObj.Catalog; + var ObjectLoader = coreObj.ObjectLoader; + var FileSpec = coreObj.FileSpec; + var OperatorList = coreEvaluator.OperatorList; + function AnnotationFactory() { + } + AnnotationFactory.prototype = { + create: function AnnotationFactory_create(xref, ref, pdfManager, idFactory) { + var dict = xref.fetchIfRef(ref); + if (!isDict(dict)) { + return; + } + var id = isRef(ref) ? ref.toString() : 'annot_' + idFactory.createObjId(); + var subtype = dict.get('Subtype'); + subtype = isName(subtype) ? subtype.name : null; + var parameters = { + xref: xref, + dict: dict, + ref: isRef(ref) ? ref : null, + subtype: subtype, + id: id, + pdfManager: pdfManager + }; + switch (subtype) { + case 'Link': + return new LinkAnnotation(parameters); + case 'Text': + return new TextAnnotation(parameters); + case 'Widget': + var fieldType = Util.getInheritableProperty(dict, 'FT'); + fieldType = isName(fieldType) ? fieldType.name : null; + switch (fieldType) { + case 'Tx': + return new TextWidgetAnnotation(parameters); + case 'Btn': + return new ButtonWidgetAnnotation(parameters); + case 'Ch': + return new ChoiceWidgetAnnotation(parameters); + } + warn('Unimplemented widget field type "' + fieldType + '", ' + 'falling back to base field type.'); + return new WidgetAnnotation(parameters); + case 'Popup': + return new PopupAnnotation(parameters); + case 'Highlight': + return new HighlightAnnotation(parameters); + case 'Underline': + return new UnderlineAnnotation(parameters); + case 'Squiggly': + return new SquigglyAnnotation(parameters); + case 'StrikeOut': + return new StrikeOutAnnotation(parameters); + case 'FileAttachment': + return new FileAttachmentAnnotation(parameters); + default: + if (!subtype) { + warn('Annotation is missing the required /Subtype.'); + } else { + warn('Unimplemented annotation type "' + subtype + '", ' + 'falling back to base annotation.'); + } + return new Annotation(parameters); + } + } + }; + var Annotation = function AnnotationClosure() { + function getTransformMatrix(rect, bbox, matrix) { + var bounds = Util.getAxialAlignedBoundingBox(bbox, matrix); + var minX = bounds[0]; + var minY = bounds[1]; + var maxX = bounds[2]; + var maxY = bounds[3]; + if (minX === maxX || minY === maxY) { + return [ + 1, + 0, + 0, + 1, + rect[0], + rect[1] + ]; + } + var xRatio = (rect[2] - rect[0]) / (maxX - minX); + var yRatio = (rect[3] - rect[1]) / (maxY - minY); + return [ + xRatio, + 0, + 0, + yRatio, + rect[0] - minX * xRatio, + rect[1] - minY * yRatio + ]; + } + function getDefaultAppearance(dict) { + var appearanceState = dict.get('AP'); + if (!isDict(appearanceState)) { + return; + } + var appearance; + var appearances = appearanceState.get('N'); + if (isDict(appearances)) { + var as = dict.get('AS'); + if (as && appearances.has(as.name)) { + appearance = appearances.get(as.name); + } + } else { + appearance = appearances; + } + return appearance; + } + function Annotation(params) { + var dict = params.dict; + this.setFlags(dict.get('F')); + this.setRectangle(dict.getArray('Rect')); + this.setColor(dict.getArray('C')); + this.setBorderStyle(dict); + this.appearance = getDefaultAppearance(dict); + this.data = {}; + this.data.id = params.id; + this.data.subtype = params.subtype; + this.data.annotationFlags = this.flags; + this.data.rect = this.rectangle; + this.data.color = this.color; + this.data.borderStyle = this.borderStyle; + this.data.hasAppearance = !!this.appearance; + } + Annotation.prototype = { + _hasFlag: function Annotation_hasFlag(flags, flag) { + return !!(flags & flag); + }, + _isViewable: function Annotation_isViewable(flags) { + return !this._hasFlag(flags, AnnotationFlag.INVISIBLE) && !this._hasFlag(flags, AnnotationFlag.HIDDEN) && !this._hasFlag(flags, AnnotationFlag.NOVIEW); + }, + _isPrintable: function AnnotationFlag_isPrintable(flags) { + return this._hasFlag(flags, AnnotationFlag.PRINT) && !this._hasFlag(flags, AnnotationFlag.INVISIBLE) && !this._hasFlag(flags, AnnotationFlag.HIDDEN); + }, + get viewable() { + if (this.flags === 0) { + return true; + } + return this._isViewable(this.flags); + }, + get printable() { + if (this.flags === 0) { + return false; + } + return this._isPrintable(this.flags); + }, + setFlags: function Annotation_setFlags(flags) { + this.flags = isInt(flags) && flags > 0 ? flags : 0; + }, + hasFlag: function Annotation_hasFlag(flag) { + return this._hasFlag(this.flags, flag); + }, + setRectangle: function Annotation_setRectangle(rectangle) { + if (isArray(rectangle) && rectangle.length === 4) { + this.rectangle = Util.normalizeRect(rectangle); + } else { + this.rectangle = [ + 0, + 0, + 0, + 0 + ]; + } + }, + setColor: function Annotation_setColor(color) { + var rgbColor = new Uint8Array(3); + if (!isArray(color)) { + this.color = rgbColor; + return; + } + switch (color.length) { + case 0: + this.color = null; + break; + case 1: + ColorSpace.singletons.gray.getRgbItem(color, 0, rgbColor, 0); + this.color = rgbColor; + break; + case 3: + ColorSpace.singletons.rgb.getRgbItem(color, 0, rgbColor, 0); + this.color = rgbColor; + break; + case 4: + ColorSpace.singletons.cmyk.getRgbItem(color, 0, rgbColor, 0); + this.color = rgbColor; + break; + default: + this.color = rgbColor; + break; + } + }, + setBorderStyle: function Annotation_setBorderStyle(borderStyle) { + this.borderStyle = new AnnotationBorderStyle(); + if (!isDict(borderStyle)) { + return; + } + if (borderStyle.has('BS')) { + var dict = borderStyle.get('BS'); + var dictType = dict.get('Type'); + if (!dictType || isName(dictType, 'Border')) { + this.borderStyle.setWidth(dict.get('W')); + this.borderStyle.setStyle(dict.get('S')); + this.borderStyle.setDashArray(dict.getArray('D')); + } + } else if (borderStyle.has('Border')) { + var array = borderStyle.getArray('Border'); + if (isArray(array) && array.length >= 3) { + this.borderStyle.setHorizontalCornerRadius(array[0]); + this.borderStyle.setVerticalCornerRadius(array[1]); + this.borderStyle.setWidth(array[2]); + if (array.length === 4) { + this.borderStyle.setDashArray(array[3]); + } + } + } else { + this.borderStyle.setWidth(0); + } + }, + _preparePopup: function Annotation_preparePopup(dict) { + if (!dict.has('C')) { + this.data.color = null; + } + this.data.hasPopup = dict.has('Popup'); + this.data.title = stringToPDFString(dict.get('T') || ''); + this.data.contents = stringToPDFString(dict.get('Contents') || ''); + }, + loadResources: function Annotation_loadResources(keys) { + return new Promise(function (resolve, reject) { + this.appearance.dict.getAsync('Resources').then(function (resources) { + if (!resources) { + resolve(); + return; + } + var objectLoader = new ObjectLoader(resources.map, keys, resources.xref); + objectLoader.load().then(function () { + resolve(resources); + }, reject); + }, reject); + }.bind(this)); + }, + getOperatorList: function Annotation_getOperatorList(evaluator, task, renderForms) { + if (!this.appearance) { + return Promise.resolve(new OperatorList()); + } + var data = this.data; + var appearanceDict = this.appearance.dict; + var resourcesPromise = this.loadResources([ + 'ExtGState', + 'ColorSpace', + 'Pattern', + 'Shading', + 'XObject', + 'Font' + ]); + var bbox = appearanceDict.getArray('BBox') || [ + 0, + 0, + 1, + 1 + ]; + var matrix = appearanceDict.getArray('Matrix') || [ + 1, + 0, + 0, + 1, + 0, + 0 + ]; + var transform = getTransformMatrix(data.rect, bbox, matrix); + var self = this; + return resourcesPromise.then(function (resources) { + var opList = new OperatorList(); + opList.addOp(OPS.beginAnnotation, [ + data.rect, + transform, + matrix + ]); + return evaluator.getOperatorList(self.appearance, task, resources, opList).then(function () { + opList.addOp(OPS.endAnnotation, []); + self.appearance.reset(); + return opList; + }); + }); + } + }; + Annotation.appendToOperatorList = function Annotation_appendToOperatorList(annotations, opList, partialEvaluator, task, intent, renderForms) { + var annotationPromises = []; + for (var i = 0, n = annotations.length; i < n; ++i) { + if (intent === 'display' && annotations[i].viewable || intent === 'print' && annotations[i].printable) { + annotationPromises.push(annotations[i].getOperatorList(partialEvaluator, task, renderForms)); + } + } + return Promise.all(annotationPromises).then(function (operatorLists) { + opList.addOp(OPS.beginAnnotations, []); + for (var i = 0, n = operatorLists.length; i < n; ++i) { + opList.addOpList(operatorLists[i]); + } + opList.addOp(OPS.endAnnotations, []); + }); + }; + return Annotation; + }(); + var AnnotationBorderStyle = function AnnotationBorderStyleClosure() { + function AnnotationBorderStyle() { + this.width = 1; + this.style = AnnotationBorderStyleType.SOLID; + this.dashArray = [3]; + this.horizontalCornerRadius = 0; + this.verticalCornerRadius = 0; + } + AnnotationBorderStyle.prototype = { + setWidth: function AnnotationBorderStyle_setWidth(width) { + if (width === (width | 0)) { + this.width = width; + } + }, + setStyle: function AnnotationBorderStyle_setStyle(style) { + if (!style) { + return; + } + switch (style.name) { + case 'S': + this.style = AnnotationBorderStyleType.SOLID; + break; + case 'D': + this.style = AnnotationBorderStyleType.DASHED; + break; + case 'B': + this.style = AnnotationBorderStyleType.BEVELED; + break; + case 'I': + this.style = AnnotationBorderStyleType.INSET; + break; + case 'U': + this.style = AnnotationBorderStyleType.UNDERLINE; + break; + default: + break; + } + }, + setDashArray: function AnnotationBorderStyle_setDashArray(dashArray) { + if (isArray(dashArray) && dashArray.length > 0) { + var isValid = true; + var allZeros = true; + for (var i = 0, len = dashArray.length; i < len; i++) { + var element = dashArray[i]; + var validNumber = +element >= 0; + if (!validNumber) { + isValid = false; + break; + } else if (element > 0) { + allZeros = false; + } + } + if (isValid && !allZeros) { + this.dashArray = dashArray; + } else { + this.width = 0; + } + } else if (dashArray) { + this.width = 0; + } + }, + setHorizontalCornerRadius: function AnnotationBorderStyle_setHorizontalCornerRadius(radius) { + if (radius === (radius | 0)) { + this.horizontalCornerRadius = radius; + } + }, + setVerticalCornerRadius: function AnnotationBorderStyle_setVerticalCornerRadius(radius) { + if (radius === (radius | 0)) { + this.verticalCornerRadius = radius; + } + } + }; + return AnnotationBorderStyle; + }(); + var WidgetAnnotation = function WidgetAnnotationClosure() { + function WidgetAnnotation(params) { + Annotation.call(this, params); + var dict = params.dict; + var data = this.data; + data.annotationType = AnnotationType.WIDGET; + data.fieldName = this._constructFieldName(dict); + data.fieldValue = Util.getInheritableProperty(dict, 'V', true); + data.alternativeText = stringToPDFString(dict.get('TU') || ''); + data.defaultAppearance = Util.getInheritableProperty(dict, 'DA') || ''; + var fieldType = Util.getInheritableProperty(dict, 'FT'); + data.fieldType = isName(fieldType) ? fieldType.name : null; + this.fieldResources = Util.getInheritableProperty(dict, 'DR') || Dict.empty; + data.fieldFlags = Util.getInheritableProperty(dict, 'Ff'); + if (!isInt(data.fieldFlags) || data.fieldFlags < 0) { + data.fieldFlags = 0; + } + data.readOnly = this.hasFieldFlag(AnnotationFieldFlag.READONLY); + if (data.fieldType === 'Sig') { + this.setFlags(AnnotationFlag.HIDDEN); + } + } + Util.inherit(WidgetAnnotation, Annotation, { + _constructFieldName: function WidgetAnnotation_constructFieldName(dict) { + if (!dict.has('T') && !dict.has('Parent')) { + warn('Unknown field name, falling back to empty field name.'); + return ''; + } + if (!dict.has('Parent')) { + return stringToPDFString(dict.get('T')); + } + var fieldName = []; + if (dict.has('T')) { + fieldName.unshift(stringToPDFString(dict.get('T'))); + } + var loopDict = dict; + while (loopDict.has('Parent')) { + loopDict = loopDict.get('Parent'); + if (loopDict.has('T')) { + fieldName.unshift(stringToPDFString(loopDict.get('T'))); + } + } + return fieldName.join('.'); + }, + hasFieldFlag: function WidgetAnnotation_hasFieldFlag(flag) { + return !!(this.data.fieldFlags & flag); + } + }); + return WidgetAnnotation; + }(); + var TextWidgetAnnotation = function TextWidgetAnnotationClosure() { + function TextWidgetAnnotation(params) { + WidgetAnnotation.call(this, params); + this.data.fieldValue = stringToPDFString(this.data.fieldValue || ''); + var alignment = Util.getInheritableProperty(params.dict, 'Q'); + if (!isInt(alignment) || alignment < 0 || alignment > 2) { + alignment = null; + } + this.data.textAlignment = alignment; + var maximumLength = Util.getInheritableProperty(params.dict, 'MaxLen'); + if (!isInt(maximumLength) || maximumLength < 0) { + maximumLength = null; + } + this.data.maxLen = maximumLength; + this.data.multiLine = this.hasFieldFlag(AnnotationFieldFlag.MULTILINE); + this.data.comb = this.hasFieldFlag(AnnotationFieldFlag.COMB) && !this.hasFieldFlag(AnnotationFieldFlag.MULTILINE) && !this.hasFieldFlag(AnnotationFieldFlag.PASSWORD) && !this.hasFieldFlag(AnnotationFieldFlag.FILESELECT) && this.data.maxLen !== null; + } + Util.inherit(TextWidgetAnnotation, WidgetAnnotation, { + getOperatorList: function TextWidgetAnnotation_getOperatorList(evaluator, task, renderForms) { + var operatorList = new OperatorList(); + if (renderForms) { + return Promise.resolve(operatorList); + } + if (this.appearance) { + return Annotation.prototype.getOperatorList.call(this, evaluator, task, renderForms); + } + if (!this.data.defaultAppearance) { + return Promise.resolve(operatorList); + } + var stream = new Stream(stringToBytes(this.data.defaultAppearance)); + return evaluator.getOperatorList(stream, task, this.fieldResources, operatorList).then(function () { + return operatorList; + }); + } + }); + return TextWidgetAnnotation; + }(); + var ButtonWidgetAnnotation = function ButtonWidgetAnnotationClosure() { + function ButtonWidgetAnnotation(params) { + WidgetAnnotation.call(this, params); + this.data.checkBox = !this.hasFieldFlag(AnnotationFieldFlag.RADIO) && !this.hasFieldFlag(AnnotationFieldFlag.PUSHBUTTON); + if (this.data.checkBox) { + if (!isName(this.data.fieldValue)) { + return; + } + this.data.fieldValue = this.data.fieldValue.name; + } + this.data.radioButton = this.hasFieldFlag(AnnotationFieldFlag.RADIO) && !this.hasFieldFlag(AnnotationFieldFlag.PUSHBUTTON); + if (this.data.radioButton) { + this.data.fieldValue = this.data.buttonValue = null; + var fieldParent = params.dict.get('Parent'); + if (!isDict(fieldParent) || !fieldParent.has('V')) { + return; + } + var fieldParentValue = fieldParent.get('V'); + if (!isName(fieldParentValue)) { + return; + } + this.data.fieldValue = fieldParentValue.name; + var appearanceStates = params.dict.get('AP'); + if (!isDict(appearanceStates)) { + return; + } + var normalAppearanceState = appearanceStates.get('N'); + if (!isDict(normalAppearanceState)) { + return; + } + var keys = normalAppearanceState.getKeys(); + for (var i = 0, ii = keys.length; i < ii; i++) { + if (keys[i] !== 'Off') { + this.data.buttonValue = keys[i]; + break; + } + } + } + } + Util.inherit(ButtonWidgetAnnotation, WidgetAnnotation, { + getOperatorList: function ButtonWidgetAnnotation_getOperatorList(evaluator, task, renderForms) { + var operatorList = new OperatorList(); + if (renderForms) { + return Promise.resolve(operatorList); + } + if (this.appearance) { + return Annotation.prototype.getOperatorList.call(this, evaluator, task, renderForms); + } + return Promise.resolve(operatorList); + } + }); + return ButtonWidgetAnnotation; + }(); + var ChoiceWidgetAnnotation = function ChoiceWidgetAnnotationClosure() { + function ChoiceWidgetAnnotation(params) { + WidgetAnnotation.call(this, params); + this.data.options = []; + var options = params.dict.get('Opt'); + if (isArray(options)) { + var xref = params.xref; + for (var i = 0, ii = options.length; i < ii; i++) { + var option = xref.fetchIfRef(options[i]); + var isOptionArray = isArray(option); + this.data.options[i] = { + exportValue: isOptionArray ? xref.fetchIfRef(option[0]) : option, + displayValue: isOptionArray ? xref.fetchIfRef(option[1]) : option + }; + } + } + if (!isArray(this.data.fieldValue)) { + this.data.fieldValue = [this.data.fieldValue]; + } + this.data.combo = this.hasFieldFlag(AnnotationFieldFlag.COMBO); + this.data.multiSelect = this.hasFieldFlag(AnnotationFieldFlag.MULTISELECT); + } + Util.inherit(ChoiceWidgetAnnotation, WidgetAnnotation, { + getOperatorList: function ChoiceWidgetAnnotation_getOperatorList(evaluator, task, renderForms) { + var operatorList = new OperatorList(); + if (renderForms) { + return Promise.resolve(operatorList); + } + return Annotation.prototype.getOperatorList.call(this, evaluator, task, renderForms); + } + }); + return ChoiceWidgetAnnotation; + }(); + var TextAnnotation = function TextAnnotationClosure() { + var DEFAULT_ICON_SIZE = 22; + function TextAnnotation(parameters) { + Annotation.call(this, parameters); + this.data.annotationType = AnnotationType.TEXT; + if (this.data.hasAppearance) { + this.data.name = 'NoIcon'; + } else { + this.data.rect[1] = this.data.rect[3] - DEFAULT_ICON_SIZE; + this.data.rect[2] = this.data.rect[0] + DEFAULT_ICON_SIZE; + this.data.name = parameters.dict.has('Name') ? parameters.dict.get('Name').name : 'Note'; + } + this._preparePopup(parameters.dict); + } + Util.inherit(TextAnnotation, Annotation, {}); + return TextAnnotation; + }(); + var LinkAnnotation = function LinkAnnotationClosure() { + function LinkAnnotation(params) { + Annotation.call(this, params); + var data = this.data; + data.annotationType = AnnotationType.LINK; + Catalog.parseDestDictionary({ + destDict: params.dict, + resultObj: data, + docBaseUrl: params.pdfManager.docBaseUrl + }); + } + Util.inherit(LinkAnnotation, Annotation, {}); + return LinkAnnotation; + }(); + var PopupAnnotation = function PopupAnnotationClosure() { + function PopupAnnotation(parameters) { + Annotation.call(this, parameters); + this.data.annotationType = AnnotationType.POPUP; + var dict = parameters.dict; + var parentItem = dict.get('Parent'); + if (!parentItem) { + warn('Popup annotation has a missing or invalid parent annotation.'); + return; + } + this.data.parentId = dict.getRaw('Parent').toString(); + this.data.title = stringToPDFString(parentItem.get('T') || ''); + this.data.contents = stringToPDFString(parentItem.get('Contents') || ''); + if (!parentItem.has('C')) { + this.data.color = null; + } else { + this.setColor(parentItem.getArray('C')); + this.data.color = this.color; + } + if (!this.viewable) { + var parentFlags = parentItem.get('F'); + if (this._isViewable(parentFlags)) { + this.setFlags(parentFlags); + } + } + } + Util.inherit(PopupAnnotation, Annotation, {}); + return PopupAnnotation; + }(); + var HighlightAnnotation = function HighlightAnnotationClosure() { + function HighlightAnnotation(parameters) { + Annotation.call(this, parameters); + this.data.annotationType = AnnotationType.HIGHLIGHT; + this._preparePopup(parameters.dict); + this.data.borderStyle.setWidth(0); + } + Util.inherit(HighlightAnnotation, Annotation, {}); + return HighlightAnnotation; + }(); + var UnderlineAnnotation = function UnderlineAnnotationClosure() { + function UnderlineAnnotation(parameters) { + Annotation.call(this, parameters); + this.data.annotationType = AnnotationType.UNDERLINE; + this._preparePopup(parameters.dict); + this.data.borderStyle.setWidth(0); + } + Util.inherit(UnderlineAnnotation, Annotation, {}); + return UnderlineAnnotation; + }(); + var SquigglyAnnotation = function SquigglyAnnotationClosure() { + function SquigglyAnnotation(parameters) { + Annotation.call(this, parameters); + this.data.annotationType = AnnotationType.SQUIGGLY; + this._preparePopup(parameters.dict); + this.data.borderStyle.setWidth(0); + } + Util.inherit(SquigglyAnnotation, Annotation, {}); + return SquigglyAnnotation; + }(); + var StrikeOutAnnotation = function StrikeOutAnnotationClosure() { + function StrikeOutAnnotation(parameters) { + Annotation.call(this, parameters); + this.data.annotationType = AnnotationType.STRIKEOUT; + this._preparePopup(parameters.dict); + this.data.borderStyle.setWidth(0); + } + Util.inherit(StrikeOutAnnotation, Annotation, {}); + return StrikeOutAnnotation; + }(); + var FileAttachmentAnnotation = function FileAttachmentAnnotationClosure() { + function FileAttachmentAnnotation(parameters) { + Annotation.call(this, parameters); + var file = new FileSpec(parameters.dict.get('FS'), parameters.xref); + this.data.annotationType = AnnotationType.FILEATTACHMENT; + this.data.file = file.serializable; + this._preparePopup(parameters.dict); + } + Util.inherit(FileAttachmentAnnotation, Annotation, {}); + return FileAttachmentAnnotation; + }(); + exports.Annotation = Annotation; + exports.AnnotationBorderStyle = AnnotationBorderStyle; + exports.AnnotationFactory = AnnotationFactory; + })); + (function (root, factory) { + factory(root.pdfjsCoreDocument = {}, root.pdfjsSharedUtil, root.pdfjsCorePrimitives, root.pdfjsCoreStream, root.pdfjsCoreObj, root.pdfjsCoreParser, root.pdfjsCoreCrypto, root.pdfjsCoreEvaluator, root.pdfjsCoreAnnotation); + }(this, function (exports, sharedUtil, corePrimitives, coreStream, coreObj, coreParser, coreCrypto, coreEvaluator, coreAnnotation) { + var MissingDataException = sharedUtil.MissingDataException; + var Util = sharedUtil.Util; + var assert = sharedUtil.assert; + var error = sharedUtil.error; + var info = sharedUtil.info; + var isArray = sharedUtil.isArray; + var isArrayBuffer = sharedUtil.isArrayBuffer; + var isNum = sharedUtil.isNum; + var isString = sharedUtil.isString; + var shadow = sharedUtil.shadow; + var stringToBytes = sharedUtil.stringToBytes; + var stringToPDFString = sharedUtil.stringToPDFString; + var warn = sharedUtil.warn; + var isSpace = sharedUtil.isSpace; + var Dict = corePrimitives.Dict; + var isDict = corePrimitives.isDict; + var isName = corePrimitives.isName; + var isStream = corePrimitives.isStream; + var NullStream = coreStream.NullStream; + var Stream = coreStream.Stream; + var StreamsSequenceStream = coreStream.StreamsSequenceStream; + var Catalog = coreObj.Catalog; + var ObjectLoader = coreObj.ObjectLoader; + var XRef = coreObj.XRef; + var Linearization = coreParser.Linearization; + var calculateMD5 = coreCrypto.calculateMD5; + var OperatorList = coreEvaluator.OperatorList; + var PartialEvaluator = coreEvaluator.PartialEvaluator; + var Annotation = coreAnnotation.Annotation; + var AnnotationFactory = coreAnnotation.AnnotationFactory; + var Page = function PageClosure() { + var DEFAULT_USER_UNIT = 1.0; + var LETTER_SIZE_MEDIABOX = [ + 0, + 0, + 612, + 792 + ]; + function Page(pdfManager, xref, pageIndex, pageDict, ref, fontCache) { + this.pdfManager = pdfManager; + this.pageIndex = pageIndex; + this.pageDict = pageDict; + this.xref = xref; + this.ref = ref; + this.fontCache = fontCache; + this.evaluatorOptions = pdfManager.evaluatorOptions; + this.resourcesPromise = null; + var uniquePrefix = 'p' + this.pageIndex + '_'; + var idCounters = { obj: 0 }; + this.idFactory = { + createObjId: function () { + return uniquePrefix + ++idCounters.obj; + } + }; + } + Page.prototype = { + getPageProp: function Page_getPageProp(key) { + return this.pageDict.get(key); + }, + getInheritedPageProp: function Page_getInheritedPageProp(key, getArray) { + var dict = this.pageDict, valueArray = null, loopCount = 0; + var MAX_LOOP_COUNT = 100; + getArray = getArray || false; + while (dict) { + var value = getArray ? dict.getArray(key) : dict.get(key); + if (value) { + if (!valueArray) { + valueArray = []; + } + valueArray.push(value); + } + if (++loopCount > MAX_LOOP_COUNT) { + warn('Page_getInheritedPageProp: maximum loop count exceeded.'); + break; + } + dict = dict.get('Parent'); + } + if (!valueArray) { + return Dict.empty; + } + if (valueArray.length === 1 || !isDict(valueArray[0]) || loopCount > MAX_LOOP_COUNT) { + return valueArray[0]; + } + return Dict.merge(this.xref, valueArray); + }, + get content() { + return this.getPageProp('Contents'); + }, + get resources() { + return shadow(this, 'resources', this.getInheritedPageProp('Resources')); + }, + get mediaBox() { + var mediaBox = this.getInheritedPageProp('MediaBox', true); + if (!isArray(mediaBox) || mediaBox.length !== 4) { + return shadow(this, 'mediaBox', LETTER_SIZE_MEDIABOX); + } + return shadow(this, 'mediaBox', mediaBox); + }, + get cropBox() { + var cropBox = this.getInheritedPageProp('CropBox', true); + if (!isArray(cropBox) || cropBox.length !== 4) { + return shadow(this, 'cropBox', this.mediaBox); + } + return shadow(this, 'cropBox', cropBox); + }, + get userUnit() { + var obj = this.getPageProp('UserUnit'); + if (!isNum(obj) || obj <= 0) { + obj = DEFAULT_USER_UNIT; + } + return shadow(this, 'userUnit', obj); + }, + get view() { + var mediaBox = this.mediaBox, cropBox = this.cropBox; + if (mediaBox === cropBox) { + return shadow(this, 'view', mediaBox); + } + var intersection = Util.intersect(cropBox, mediaBox); + return shadow(this, 'view', intersection || mediaBox); + }, + get rotate() { + var rotate = this.getInheritedPageProp('Rotate') || 0; + if (rotate % 90 !== 0) { + rotate = 0; + } else if (rotate >= 360) { + rotate = rotate % 360; + } else if (rotate < 0) { + rotate = (rotate % 360 + 360) % 360; + } + return shadow(this, 'rotate', rotate); + }, + getContentStream: function Page_getContentStream() { + var content = this.content; + var stream; + if (isArray(content)) { + var xref = this.xref; + var i, n = content.length; + var streams = []; + for (i = 0; i < n; ++i) { + streams.push(xref.fetchIfRef(content[i])); + } + stream = new StreamsSequenceStream(streams); + } else if (isStream(content)) { + stream = content; + } else { + stream = new NullStream(); + } + return stream; + }, + loadResources: function Page_loadResources(keys) { + if (!this.resourcesPromise) { + this.resourcesPromise = this.pdfManager.ensure(this, 'resources'); + } + return this.resourcesPromise.then(function resourceSuccess() { + var objectLoader = new ObjectLoader(this.resources.map, keys, this.xref); + return objectLoader.load(); + }.bind(this)); + }, + getOperatorList: function Page_getOperatorList(handler, task, intent, renderInteractiveForms) { + var self = this; + var pdfManager = this.pdfManager; + var contentStreamPromise = pdfManager.ensure(this, 'getContentStream', []); + var resourcesPromise = this.loadResources([ + 'ExtGState', + 'ColorSpace', + 'Pattern', + 'Shading', + 'XObject', + 'Font' + ]); + var partialEvaluator = new PartialEvaluator(pdfManager, this.xref, handler, this.pageIndex, this.idFactory, this.fontCache, this.evaluatorOptions); + var dataPromises = Promise.all([ + contentStreamPromise, + resourcesPromise + ]); + var pageListPromise = dataPromises.then(function (data) { + var contentStream = data[0]; + var opList = new OperatorList(intent, handler, self.pageIndex); + handler.send('StartRenderPage', { + transparency: partialEvaluator.hasBlendModes(self.resources), + pageIndex: self.pageIndex, + intent: intent + }); + return partialEvaluator.getOperatorList(contentStream, task, self.resources, opList).then(function () { + return opList; + }); + }); + var annotationsPromise = pdfManager.ensure(this, 'annotations'); + return Promise.all([ + pageListPromise, + annotationsPromise + ]).then(function (datas) { + var pageOpList = datas[0]; + var annotations = datas[1]; + if (annotations.length === 0) { + pageOpList.flush(true); + return pageOpList; + } + var annotationsReadyPromise = Annotation.appendToOperatorList(annotations, pageOpList, partialEvaluator, task, intent, renderInteractiveForms); + return annotationsReadyPromise.then(function () { + pageOpList.flush(true); + return pageOpList; + }); + }); + }, + extractTextContent: function Page_extractTextContent(task, normalizeWhitespace, combineTextItems) { + var handler = { + on: function nullHandlerOn() { + }, + send: function nullHandlerSend() { + } + }; + var self = this; + var pdfManager = this.pdfManager; + var contentStreamPromise = pdfManager.ensure(this, 'getContentStream', []); + var resourcesPromise = this.loadResources([ + 'ExtGState', + 'XObject', + 'Font' + ]); + var dataPromises = Promise.all([ + contentStreamPromise, + resourcesPromise + ]); + return dataPromises.then(function (data) { + var contentStream = data[0]; + var partialEvaluator = new PartialEvaluator(pdfManager, self.xref, handler, self.pageIndex, self.idFactory, self.fontCache, self.evaluatorOptions); + return partialEvaluator.getTextContent(contentStream, task, self.resources, null, normalizeWhitespace, combineTextItems); + }); + }, + getAnnotationsData: function Page_getAnnotationsData(intent) { + var annotations = this.annotations; + var annotationsData = []; + for (var i = 0, n = annotations.length; i < n; ++i) { + if (intent) { + if (!(intent === 'display' && annotations[i].viewable) && !(intent === 'print' && annotations[i].printable)) { + continue; + } + } + annotationsData.push(annotations[i].data); + } + return annotationsData; + }, + get annotations() { + var annotations = []; + var annotationRefs = this.getInheritedPageProp('Annots') || []; + var annotationFactory = new AnnotationFactory(); + for (var i = 0, n = annotationRefs.length; i < n; ++i) { + var annotationRef = annotationRefs[i]; + var annotation = annotationFactory.create(this.xref, annotationRef, this.pdfManager, this.idFactory); + if (annotation) { + annotations.push(annotation); + } + } + return shadow(this, 'annotations', annotations); + } + }; + return Page; + }(); + var PDFDocument = function PDFDocumentClosure() { + var FINGERPRINT_FIRST_BYTES = 1024; + var EMPTY_FINGERPRINT = '\x00\x00\x00\x00\x00\x00\x00' + '\x00\x00\x00\x00\x00\x00\x00\x00\x00'; + function PDFDocument(pdfManager, arg) { + var stream; + if (isStream(arg)) { + stream = arg; + } else if (isArrayBuffer(arg)) { + stream = new Stream(arg); + } else { + error('PDFDocument: Unknown argument type'); + } + assert(stream.length > 0, 'stream must have data'); + this.pdfManager = pdfManager; + this.stream = stream; + this.xref = new XRef(stream, pdfManager); + } + function find(stream, needle, limit, backwards) { + var pos = stream.pos; + var end = stream.end; + var strBuf = []; + if (pos + limit > end) { + limit = end - pos; + } + for (var n = 0; n < limit; ++n) { + strBuf.push(String.fromCharCode(stream.getByte())); + } + var str = strBuf.join(''); + stream.pos = pos; + var index = backwards ? str.lastIndexOf(needle) : str.indexOf(needle); + if (index === -1) { + return false; + } + stream.pos += index; + return true; + } + var DocumentInfoValidators = { + get entries() { + return shadow(this, 'entries', { + Title: isString, + Author: isString, + Subject: isString, + Keywords: isString, + Creator: isString, + Producer: isString, + CreationDate: isString, + ModDate: isString, + Trapped: isName + }); + } + }; + PDFDocument.prototype = { + parse: function PDFDocument_parse(recoveryMode) { + this.setup(recoveryMode); + var version = this.catalog.catDict.get('Version'); + if (isName(version)) { + this.pdfFormatVersion = version.name; + } + try { + this.acroForm = this.catalog.catDict.get('AcroForm'); + if (this.acroForm) { + this.xfa = this.acroForm.get('XFA'); + var fields = this.acroForm.get('Fields'); + if ((!fields || !isArray(fields) || fields.length === 0) && !this.xfa) { + this.acroForm = null; + } + } + } catch (ex) { + info('Something wrong with AcroForm entry'); + this.acroForm = null; + } + }, + get linearization() { + var linearization = null; + if (this.stream.length) { + try { + linearization = Linearization.create(this.stream); + } catch (err) { + if (err instanceof MissingDataException) { + throw err; + } + info(err); + } + } + return shadow(this, 'linearization', linearization); + }, + get startXRef() { + var stream = this.stream; + var startXRef = 0; + var linearization = this.linearization; + if (linearization) { + stream.reset(); + if (find(stream, 'endobj', 1024)) { + startXRef = stream.pos + 6; + } + } else { + var step = 1024; + var found = false, pos = stream.end; + while (!found && pos > 0) { + pos -= step - 'startxref'.length; + if (pos < 0) { + pos = 0; + } + stream.pos = pos; + found = find(stream, 'startxref', step, true); + } + if (found) { + stream.skip(9); + var ch; + do { + ch = stream.getByte(); + } while (isSpace(ch)); + var str = ''; + while (ch >= 0x20 && ch <= 0x39) { + str += String.fromCharCode(ch); + ch = stream.getByte(); + } + startXRef = parseInt(str, 10); + if (isNaN(startXRef)) { + startXRef = 0; + } + } + } + return shadow(this, 'startXRef', startXRef); + }, + get mainXRefEntriesOffset() { + var mainXRefEntriesOffset = 0; + var linearization = this.linearization; + if (linearization) { + mainXRefEntriesOffset = linearization.mainXRefEntriesOffset; + } + return shadow(this, 'mainXRefEntriesOffset', mainXRefEntriesOffset); + }, + checkHeader: function PDFDocument_checkHeader() { + var stream = this.stream; + stream.reset(); + if (find(stream, '%PDF-', 1024)) { + stream.moveStart(); + var MAX_VERSION_LENGTH = 12; + var version = '', ch; + while ((ch = stream.getByte()) > 0x20) { + if (version.length >= MAX_VERSION_LENGTH) { + break; + } + version += String.fromCharCode(ch); + } + if (!this.pdfFormatVersion) { + this.pdfFormatVersion = version.substring(5); + } + return; + } + }, + parseStartXRef: function PDFDocument_parseStartXRef() { + var startXRef = this.startXRef; + this.xref.setStartXRef(startXRef); + }, + setup: function PDFDocument_setup(recoveryMode) { + this.xref.parse(recoveryMode); + var self = this; + var pageFactory = { + createPage: function (pageIndex, dict, ref, fontCache) { + return new Page(self.pdfManager, self.xref, pageIndex, dict, ref, fontCache); + } + }; + this.catalog = new Catalog(this.pdfManager, this.xref, pageFactory); + }, + get numPages() { + var linearization = this.linearization; + var num = linearization ? linearization.numPages : this.catalog.numPages; + return shadow(this, 'numPages', num); + }, + get documentInfo() { + var docInfo = { + PDFFormatVersion: this.pdfFormatVersion, + IsAcroFormPresent: !!this.acroForm, + IsXFAPresent: !!this.xfa + }; + var infoDict; + try { + infoDict = this.xref.trailer.get('Info'); + } catch (err) { + info('The document information dictionary is invalid.'); + } + if (infoDict) { + var validEntries = DocumentInfoValidators.entries; + for (var key in validEntries) { + if (infoDict.has(key)) { + var value = infoDict.get(key); + if (validEntries[key](value)) { + docInfo[key] = typeof value !== 'string' ? value : stringToPDFString(value); + } else { + info('Bad value in document info for "' + key + '"'); + } + } + } + } + return shadow(this, 'documentInfo', docInfo); + }, + get fingerprint() { + var xref = this.xref, hash, fileID = ''; + var idArray = xref.trailer.get('ID'); + if (idArray && isArray(idArray) && idArray[0] && isString(idArray[0]) && idArray[0] !== EMPTY_FINGERPRINT) { + hash = stringToBytes(idArray[0]); + } else { + if (this.stream.ensureRange) { + this.stream.ensureRange(0, Math.min(FINGERPRINT_FIRST_BYTES, this.stream.end)); + } + hash = calculateMD5(this.stream.bytes.subarray(0, FINGERPRINT_FIRST_BYTES), 0, FINGERPRINT_FIRST_BYTES); + } + for (var i = 0, n = hash.length; i < n; i++) { + var hex = hash[i].toString(16); + fileID += hex.length === 1 ? '0' + hex : hex; + } + return shadow(this, 'fingerprint', fileID); + }, + getPage: function PDFDocument_getPage(pageIndex) { + return this.catalog.getPage(pageIndex); + }, + cleanup: function PDFDocument_cleanup() { + return this.catalog.cleanup(); + } + }; + return PDFDocument; + }(); + exports.Page = Page; + exports.PDFDocument = PDFDocument; + })); + (function (root, factory) { + factory(root.pdfjsCorePdfManager = {}, root.pdfjsSharedUtil, root.pdfjsCoreStream, root.pdfjsCoreChunkedStream, root.pdfjsCoreDocument); + }(this, function (exports, sharedUtil, coreStream, coreChunkedStream, coreDocument) { + var warn = sharedUtil.warn; + var createValidAbsoluteUrl = sharedUtil.createValidAbsoluteUrl; + var shadow = sharedUtil.shadow; + var NotImplementedException = sharedUtil.NotImplementedException; + var MissingDataException = sharedUtil.MissingDataException; + var createPromiseCapability = sharedUtil.createPromiseCapability; + var Util = sharedUtil.Util; + var Stream = coreStream.Stream; + var ChunkedStreamManager = coreChunkedStream.ChunkedStreamManager; + var PDFDocument = coreDocument.PDFDocument; + var BasePdfManager = function BasePdfManagerClosure() { + function BasePdfManager() { + throw new Error('Cannot initialize BaseManagerManager'); + } + BasePdfManager.prototype = { + get docId() { + return this._docId; + }, + get password() { + return this._password; + }, + get docBaseUrl() { + var docBaseUrl = null; + if (this._docBaseUrl) { + var absoluteUrl = createValidAbsoluteUrl(this._docBaseUrl); + if (absoluteUrl) { + docBaseUrl = absoluteUrl.href; + } else { + warn('Invalid absolute docBaseUrl: "' + this._docBaseUrl + '".'); + } + } + return shadow(this, 'docBaseUrl', docBaseUrl); + }, + onLoadedStream: function BasePdfManager_onLoadedStream() { + throw new NotImplementedException(); + }, + ensureDoc: function BasePdfManager_ensureDoc(prop, args) { + return this.ensure(this.pdfDocument, prop, args); + }, + ensureXRef: function BasePdfManager_ensureXRef(prop, args) { + return this.ensure(this.pdfDocument.xref, prop, args); + }, + ensureCatalog: function BasePdfManager_ensureCatalog(prop, args) { + return this.ensure(this.pdfDocument.catalog, prop, args); + }, + getPage: function BasePdfManager_getPage(pageIndex) { + return this.pdfDocument.getPage(pageIndex); + }, + cleanup: function BasePdfManager_cleanup() { + return this.pdfDocument.cleanup(); + }, + ensure: function BasePdfManager_ensure(obj, prop, args) { + return new NotImplementedException(); + }, + requestRange: function BasePdfManager_requestRange(begin, end) { + return new NotImplementedException(); + }, + requestLoadedStream: function BasePdfManager_requestLoadedStream() { + return new NotImplementedException(); + }, + sendProgressiveData: function BasePdfManager_sendProgressiveData(chunk) { + return new NotImplementedException(); + }, + updatePassword: function BasePdfManager_updatePassword(password) { + this._password = password; + }, + terminate: function BasePdfManager_terminate() { + return new NotImplementedException(); + } + }; + return BasePdfManager; + }(); + var LocalPdfManager = function LocalPdfManagerClosure() { + function LocalPdfManager(docId, data, password, evaluatorOptions, docBaseUrl) { + this._docId = docId; + this._password = password; + this._docBaseUrl = docBaseUrl; + this.evaluatorOptions = evaluatorOptions; + var stream = new Stream(data); + this.pdfDocument = new PDFDocument(this, stream); + this._loadedStreamCapability = createPromiseCapability(); + this._loadedStreamCapability.resolve(stream); + } + Util.inherit(LocalPdfManager, BasePdfManager, { + ensure: function LocalPdfManager_ensure(obj, prop, args) { + return new Promise(function (resolve, reject) { + try { + var value = obj[prop]; + var result; + if (typeof value === 'function') { + result = value.apply(obj, args); + } else { + result = value; + } + resolve(result); + } catch (e) { + reject(e); + } + }); + }, + requestRange: function LocalPdfManager_requestRange(begin, end) { + return Promise.resolve(); + }, + requestLoadedStream: function LocalPdfManager_requestLoadedStream() { + }, + onLoadedStream: function LocalPdfManager_onLoadedStream() { + return this._loadedStreamCapability.promise; + }, + terminate: function LocalPdfManager_terminate() { + } + }); + return LocalPdfManager; + }(); + var NetworkPdfManager = function NetworkPdfManagerClosure() { + function NetworkPdfManager(docId, pdfNetworkStream, args, evaluatorOptions, docBaseUrl) { + this._docId = docId; + this._password = args.password; + this._docBaseUrl = docBaseUrl; + this.msgHandler = args.msgHandler; + this.evaluatorOptions = evaluatorOptions; + var params = { + msgHandler: args.msgHandler, + url: args.url, + length: args.length, + disableAutoFetch: args.disableAutoFetch, + rangeChunkSize: args.rangeChunkSize + }; + this.streamManager = new ChunkedStreamManager(pdfNetworkStream, params); + this.pdfDocument = new PDFDocument(this, this.streamManager.getStream()); + } + Util.inherit(NetworkPdfManager, BasePdfManager, { + ensure: function NetworkPdfManager_ensure(obj, prop, args) { + var pdfManager = this; + return new Promise(function (resolve, reject) { + function ensureHelper() { + try { + var result; + var value = obj[prop]; + if (typeof value === 'function') { + result = value.apply(obj, args); + } else { + result = value; + } + resolve(result); + } catch (e) { + if (!(e instanceof MissingDataException)) { + reject(e); + return; + } + pdfManager.streamManager.requestRange(e.begin, e.end).then(ensureHelper, reject); + } + } + ensureHelper(); + }); + }, + requestRange: function NetworkPdfManager_requestRange(begin, end) { + return this.streamManager.requestRange(begin, end); + }, + requestLoadedStream: function NetworkPdfManager_requestLoadedStream() { + this.streamManager.requestAllChunks(); + }, + sendProgressiveData: function NetworkPdfManager_sendProgressiveData(chunk) { + this.streamManager.onReceiveData({ chunk: chunk }); + }, + onLoadedStream: function NetworkPdfManager_onLoadedStream() { + return this.streamManager.onLoadedStream(); + }, + terminate: function NetworkPdfManager_terminate() { + this.streamManager.abort(); + } + }); + return NetworkPdfManager; + }(); + exports.LocalPdfManager = LocalPdfManager; + exports.NetworkPdfManager = NetworkPdfManager; + })); + (function (root, factory) { + factory(root.pdfjsCoreWorker = {}, root.pdfjsSharedUtil, root.pdfjsCorePrimitives, root.pdfjsCorePdfManager); + }(this, function (exports, sharedUtil, corePrimitives, corePdfManager) { + var UNSUPPORTED_FEATURES = sharedUtil.UNSUPPORTED_FEATURES; + var InvalidPDFException = sharedUtil.InvalidPDFException; + var MessageHandler = sharedUtil.MessageHandler; + var MissingPDFException = sharedUtil.MissingPDFException; + var UnexpectedResponseException = sharedUtil.UnexpectedResponseException; + var PasswordException = sharedUtil.PasswordException; + var PasswordResponses = sharedUtil.PasswordResponses; + var UnknownErrorException = sharedUtil.UnknownErrorException; + var XRefParseException = sharedUtil.XRefParseException; + var arrayByteLength = sharedUtil.arrayByteLength; + var arraysToBytes = sharedUtil.arraysToBytes; + var assert = sharedUtil.assert; + var createPromiseCapability = sharedUtil.createPromiseCapability; + var error = sharedUtil.error; + var info = sharedUtil.info; + var warn = sharedUtil.warn; + var setVerbosityLevel = sharedUtil.setVerbosityLevel; + var Ref = corePrimitives.Ref; + var LocalPdfManager = corePdfManager.LocalPdfManager; + var NetworkPdfManager = corePdfManager.NetworkPdfManager; + var globalScope = sharedUtil.globalScope; + var WorkerTask = function WorkerTaskClosure() { + function WorkerTask(name) { + this.name = name; + this.terminated = false; + this._capability = createPromiseCapability(); + } + WorkerTask.prototype = { + get finished() { + return this._capability.promise; + }, + finish: function () { + this._capability.resolve(); + }, + terminate: function () { + this.terminated = true; + }, + ensureNotTerminated: function () { + if (this.terminated) { + throw new Error('Worker task was terminated'); + } + } + }; + return WorkerTask; + }(); + var PDFWorkerStream = function PDFWorkerStreamClosure() { + function PDFWorkerStream(params, msgHandler) { + this._queuedChunks = []; + var initialData = params.initialData; + if (initialData && initialData.length > 0) { + this._queuedChunks.push(initialData); + } + this._msgHandler = msgHandler; + this._isRangeSupported = !params.disableRange; + this._isStreamingSupported = !params.disableStream; + this._contentLength = params.length; + this._fullRequestReader = null; + this._rangeReaders = []; + msgHandler.on('OnDataRange', this._onReceiveData.bind(this)); + msgHandler.on('OnDataProgress', this._onProgress.bind(this)); + } + PDFWorkerStream.prototype = { + _onReceiveData: function PDFWorkerStream_onReceiveData(args) { + if (args.begin === undefined) { + if (this._fullRequestReader) { + this._fullRequestReader._enqueue(args.chunk); + } else { + this._queuedChunks.push(args.chunk); + } + } else { + var found = this._rangeReaders.some(function (rangeReader) { + if (rangeReader._begin !== args.begin) { + return false; + } + rangeReader._enqueue(args.chunk); + return true; + }); + assert(found); + } + }, + _onProgress: function PDFWorkerStream_onProgress(evt) { + if (this._rangeReaders.length > 0) { + var firstReader = this._rangeReaders[0]; + if (firstReader.onProgress) { + firstReader.onProgress({ loaded: evt.loaded }); + } + } + }, + _removeRangeReader: function PDFWorkerStream_removeRangeReader(reader) { + var i = this._rangeReaders.indexOf(reader); + if (i >= 0) { + this._rangeReaders.splice(i, 1); + } + }, + getFullReader: function PDFWorkerStream_getFullReader() { + assert(!this._fullRequestReader); + var queuedChunks = this._queuedChunks; + this._queuedChunks = null; + return new PDFWorkerStreamReader(this, queuedChunks); + }, + getRangeReader: function PDFWorkerStream_getRangeReader(begin, end) { + var reader = new PDFWorkerStreamRangeReader(this, begin, end); + this._msgHandler.send('RequestDataRange', { + begin: begin, + end: end + }); + this._rangeReaders.push(reader); + return reader; + }, + cancelAllRequests: function PDFWorkerStream_cancelAllRequests(reason) { + if (this._fullRequestReader) { + this._fullRequestReader.cancel(reason); + } + var readers = this._rangeReaders.slice(0); + readers.forEach(function (rangeReader) { + rangeReader.cancel(reason); + }); + } + }; + function PDFWorkerStreamReader(stream, queuedChunks) { + this._stream = stream; + this._done = false; + this._queuedChunks = queuedChunks || []; + this._requests = []; + this._headersReady = Promise.resolve(); + stream._fullRequestReader = this; + this.onProgress = null; + } + PDFWorkerStreamReader.prototype = { + _enqueue: function PDFWorkerStreamReader_enqueue(chunk) { + if (this._done) { + return; + } + if (this._requests.length > 0) { + var requestCapability = this._requests.shift(); + requestCapability.resolve({ + value: chunk, + done: false + }); + return; + } + this._queuedChunks.push(chunk); + }, + get headersReady() { + return this._headersReady; + }, + get isRangeSupported() { + return this._stream._isRangeSupported; + }, + get isStreamingSupported() { + return this._stream._isStreamingSupported; + }, + get contentLength() { + return this._stream._contentLength; + }, + read: function PDFWorkerStreamReader_read() { + if (this._queuedChunks.length > 0) { + var chunk = this._queuedChunks.shift(); + return Promise.resolve({ + value: chunk, + done: false + }); + } + if (this._done) { + return Promise.resolve({ + value: undefined, + done: true + }); + } + var requestCapability = createPromiseCapability(); + this._requests.push(requestCapability); + return requestCapability.promise; + }, + cancel: function PDFWorkerStreamReader_cancel(reason) { + this._done = true; + this._requests.forEach(function (requestCapability) { + requestCapability.resolve({ + value: undefined, + done: true + }); + }); + this._requests = []; + } + }; + function PDFWorkerStreamRangeReader(stream, begin, end) { + this._stream = stream; + this._begin = begin; + this._end = end; + this._queuedChunk = null; + this._requests = []; + this._done = false; + this.onProgress = null; + } + PDFWorkerStreamRangeReader.prototype = { + _enqueue: function PDFWorkerStreamRangeReader_enqueue(chunk) { + if (this._done) { + return; + } + if (this._requests.length === 0) { + this._queuedChunk = chunk; + } else { + var requestsCapability = this._requests.shift(); + requestsCapability.resolve({ + value: chunk, + done: false + }); + this._requests.forEach(function (requestCapability) { + requestCapability.resolve({ + value: undefined, + done: true + }); + }); + this._requests = []; + } + this._done = true; + this._stream._removeRangeReader(this); + }, + get isStreamingSupported() { + return false; + }, + read: function PDFWorkerStreamRangeReader_read() { + if (this._queuedChunk) { + return Promise.resolve({ + value: this._queuedChunk, + done: false + }); + } + if (this._done) { + return Promise.resolve({ + value: undefined, + done: true + }); + } + var requestCapability = createPromiseCapability(); + this._requests.push(requestCapability); + return requestCapability.promise; + }, + cancel: function PDFWorkerStreamRangeReader_cancel(reason) { + this._done = true; + this._requests.forEach(function (requestCapability) { + requestCapability.resolve({ + value: undefined, + done: true + }); + }); + this._requests = []; + this._stream._removeRangeReader(this); + } + }; + return PDFWorkerStream; + }(); + var PDFNetworkStream; + function setPDFNetworkStreamClass(cls) { + PDFNetworkStream = cls; + } + var WorkerMessageHandler = { + setup: function wphSetup(handler, port) { + var testMessageProcessed = false; + handler.on('test', function wphSetupTest(data) { + if (testMessageProcessed) { + return; + } + testMessageProcessed = true; + if (!(data instanceof Uint8Array)) { + handler.send('test', 'main', false); + return; + } + var supportTransfers = data[0] === 255; + handler.postMessageTransfers = supportTransfers; + var xhr = new XMLHttpRequest(); + var responseExists = 'response' in xhr; + try { + var dummy = xhr.responseType; + } catch (e) { + responseExists = false; + } + if (!responseExists) { + handler.send('test', false); + return; + } + handler.send('test', { + supportTypedArray: true, + supportTransfers: supportTransfers + }); + }); + handler.on('configure', function wphConfigure(data) { + setVerbosityLevel(data.verbosity); + }); + handler.on('GetDocRequest', function wphSetupDoc(data) { + return WorkerMessageHandler.createDocumentHandler(data, port); + }); + }, + createDocumentHandler: function wphCreateDocumentHandler(docParams, port) { + var pdfManager; + var terminated = false; + var cancelXHRs = null; + var WorkerTasks = []; + var docId = docParams.docId; + var docBaseUrl = docParams.docBaseUrl; + var workerHandlerName = docParams.docId + '_worker'; + var handler = new MessageHandler(workerHandlerName, docId, port); + handler.postMessageTransfers = docParams.postMessageTransfers; + function ensureNotTerminated() { + if (terminated) { + throw new Error('Worker was terminated'); + } + } + function startWorkerTask(task) { + WorkerTasks.push(task); + } + function finishWorkerTask(task) { + task.finish(); + var i = WorkerTasks.indexOf(task); + WorkerTasks.splice(i, 1); + } + function loadDocument(recoveryMode) { + var loadDocumentCapability = createPromiseCapability(); + var parseSuccess = function parseSuccess() { + var numPagesPromise = pdfManager.ensureDoc('numPages'); + var fingerprintPromise = pdfManager.ensureDoc('fingerprint'); + var encryptedPromise = pdfManager.ensureXRef('encrypt'); + Promise.all([ + numPagesPromise, + fingerprintPromise, + encryptedPromise + ]).then(function onDocReady(results) { + var doc = { + numPages: results[0], + fingerprint: results[1], + encrypted: !!results[2] + }; + loadDocumentCapability.resolve(doc); + }, parseFailure); + }; + var parseFailure = function parseFailure(e) { + loadDocumentCapability.reject(e); + }; + pdfManager.ensureDoc('checkHeader', []).then(function () { + pdfManager.ensureDoc('parseStartXRef', []).then(function () { + pdfManager.ensureDoc('parse', [recoveryMode]).then(parseSuccess, parseFailure); + }, parseFailure); + }, parseFailure); + return loadDocumentCapability.promise; + } + function getPdfManager(data, evaluatorOptions) { + var pdfManagerCapability = createPromiseCapability(); + var pdfManager; + var source = data.source; + if (source.data) { + try { + pdfManager = new LocalPdfManager(docId, source.data, source.password, evaluatorOptions, docBaseUrl); + pdfManagerCapability.resolve(pdfManager); + } catch (ex) { + pdfManagerCapability.reject(ex); + } + return pdfManagerCapability.promise; + } + var pdfStream; + try { + if (source.chunkedViewerLoading) { + pdfStream = new PDFWorkerStream(source, handler); + } else { + assert(PDFNetworkStream, 'pdfjs/core/network module is not loaded'); + pdfStream = new PDFNetworkStream(data); + } + } catch (ex) { + pdfManagerCapability.reject(ex); + return pdfManagerCapability.promise; + } + var fullRequest = pdfStream.getFullReader(); + fullRequest.headersReady.then(function () { + if (!fullRequest.isStreamingSupported || !fullRequest.isRangeSupported) { + fullRequest.onProgress = function (evt) { + handler.send('DocProgress', { + loaded: evt.loaded, + total: evt.total + }); + }; + } + if (!fullRequest.isRangeSupported) { + return; + } + var disableAutoFetch = source.disableAutoFetch || fullRequest.isStreamingSupported; + pdfManager = new NetworkPdfManager(docId, pdfStream, { + msgHandler: handler, + url: source.url, + password: source.password, + length: fullRequest.contentLength, + disableAutoFetch: disableAutoFetch, + rangeChunkSize: source.rangeChunkSize + }, evaluatorOptions, docBaseUrl); + pdfManagerCapability.resolve(pdfManager); + cancelXHRs = null; + }).catch(function (reason) { + pdfManagerCapability.reject(reason); + cancelXHRs = null; + }); + var cachedChunks = [], loaded = 0; + var flushChunks = function () { + var pdfFile = arraysToBytes(cachedChunks); + if (source.length && pdfFile.length !== source.length) { + warn('reported HTTP length is different from actual'); + } + try { + pdfManager = new LocalPdfManager(docId, pdfFile, source.password, evaluatorOptions, docBaseUrl); + pdfManagerCapability.resolve(pdfManager); + } catch (ex) { + pdfManagerCapability.reject(ex); + } + cachedChunks = []; + }; + var readPromise = new Promise(function (resolve, reject) { + var readChunk = function (chunk) { + try { + ensureNotTerminated(); + if (chunk.done) { + if (!pdfManager) { + flushChunks(); + } + cancelXHRs = null; + return; + } + var data = chunk.value; + loaded += arrayByteLength(data); + if (!fullRequest.isStreamingSupported) { + handler.send('DocProgress', { + loaded: loaded, + total: Math.max(loaded, fullRequest.contentLength || 0) + }); + } + if (pdfManager) { + pdfManager.sendProgressiveData(data); + } else { + cachedChunks.push(data); + } + fullRequest.read().then(readChunk, reject); + } catch (e) { + reject(e); + } + }; + fullRequest.read().then(readChunk, reject); + }); + readPromise.catch(function (e) { + pdfManagerCapability.reject(e); + cancelXHRs = null; + }); + cancelXHRs = function () { + pdfStream.cancelAllRequests('abort'); + }; + return pdfManagerCapability.promise; + } + function setupDoc(data) { + function onSuccess(doc) { + ensureNotTerminated(); + handler.send('GetDoc', { pdfInfo: doc }); + } + function onFailure(e) { + if (e instanceof PasswordException) { + var task = new WorkerTask('PasswordException: response ' + e.code); + startWorkerTask(task); + handler.sendWithPromise('PasswordRequest', e).then(function (data) { + finishWorkerTask(task); + pdfManager.updatePassword(data.password); + pdfManagerReady(); + }).catch(function (ex) { + finishWorkerTask(task); + handler.send('PasswordException', ex); + }.bind(null, e)); + } else if (e instanceof InvalidPDFException) { + handler.send('InvalidPDF', e); + } else if (e instanceof MissingPDFException) { + handler.send('MissingPDF', e); + } else if (e instanceof UnexpectedResponseException) { + handler.send('UnexpectedResponse', e); + } else { + handler.send('UnknownError', new UnknownErrorException(e.message, e.toString())); + } + } + function pdfManagerReady() { + ensureNotTerminated(); + loadDocument(false).then(onSuccess, function loadFailure(ex) { + ensureNotTerminated(); + if (!(ex instanceof XRefParseException)) { + onFailure(ex); + return; + } + pdfManager.requestLoadedStream(); + pdfManager.onLoadedStream().then(function () { + ensureNotTerminated(); + loadDocument(true).then(onSuccess, onFailure); + }); + }, onFailure); + } + ensureNotTerminated(); + var cMapOptions = { + url: data.cMapUrl === undefined ? null : data.cMapUrl, + packed: data.cMapPacked === true + }; + var evaluatorOptions = { + forceDataSchema: data.disableCreateObjectURL, + maxImageSize: data.maxImageSize === undefined ? -1 : data.maxImageSize, + disableFontFace: data.disableFontFace, + cMapOptions: cMapOptions + }; + getPdfManager(data, evaluatorOptions).then(function (newPdfManager) { + if (terminated) { + newPdfManager.terminate(); + throw new Error('Worker was terminated'); + } + pdfManager = newPdfManager; + handler.send('PDFManagerReady', null); + pdfManager.onLoadedStream().then(function (stream) { + handler.send('DataLoaded', { length: stream.bytes.byteLength }); + }); + }).then(pdfManagerReady, onFailure); + } + handler.on('GetPage', function wphSetupGetPage(data) { + return pdfManager.getPage(data.pageIndex).then(function (page) { + var rotatePromise = pdfManager.ensure(page, 'rotate'); + var refPromise = pdfManager.ensure(page, 'ref'); + var userUnitPromise = pdfManager.ensure(page, 'userUnit'); + var viewPromise = pdfManager.ensure(page, 'view'); + return Promise.all([ + rotatePromise, + refPromise, + userUnitPromise, + viewPromise + ]).then(function (results) { + return { + rotate: results[0], + ref: results[1], + userUnit: results[2], + view: results[3] + }; + }); + }); + }); + handler.on('GetPageIndex', function wphSetupGetPageIndex(data) { + var ref = new Ref(data.ref.num, data.ref.gen); + var catalog = pdfManager.pdfDocument.catalog; + return catalog.getPageIndex(ref); + }); + handler.on('GetDestinations', function wphSetupGetDestinations(data) { + return pdfManager.ensureCatalog('destinations'); + }); + handler.on('GetDestination', function wphSetupGetDestination(data) { + return pdfManager.ensureCatalog('getDestination', [data.id]); + }); + handler.on('GetPageLabels', function wphSetupGetPageLabels(data) { + return pdfManager.ensureCatalog('pageLabels'); + }); + handler.on('GetAttachments', function wphSetupGetAttachments(data) { + return pdfManager.ensureCatalog('attachments'); + }); + handler.on('GetJavaScript', function wphSetupGetJavaScript(data) { + return pdfManager.ensureCatalog('javaScript'); + }); + handler.on('GetOutline', function wphSetupGetOutline(data) { + return pdfManager.ensureCatalog('documentOutline'); + }); + handler.on('GetMetadata', function wphSetupGetMetadata(data) { + return Promise.all([ + pdfManager.ensureDoc('documentInfo'), + pdfManager.ensureCatalog('metadata') + ]); + }); + handler.on('GetData', function wphSetupGetData(data) { + pdfManager.requestLoadedStream(); + return pdfManager.onLoadedStream().then(function (stream) { + return stream.bytes; + }); + }); + handler.on('GetStats', function wphSetupGetStats(data) { + return pdfManager.pdfDocument.xref.stats; + }); + handler.on('GetAnnotations', function wphSetupGetAnnotations(data) { + return pdfManager.getPage(data.pageIndex).then(function (page) { + return pdfManager.ensure(page, 'getAnnotationsData', [data.intent]); + }); + }); + handler.on('RenderPageRequest', function wphSetupRenderPage(data) { + var pageIndex = data.pageIndex; + pdfManager.getPage(pageIndex).then(function (page) { + var task = new WorkerTask('RenderPageRequest: page ' + pageIndex); + startWorkerTask(task); + var pageNum = pageIndex + 1; + var start = Date.now(); + page.getOperatorList(handler, task, data.intent, data.renderInteractiveForms).then(function (operatorList) { + finishWorkerTask(task); + info('page=' + pageNum + ' - getOperatorList: time=' + (Date.now() - start) + 'ms, len=' + operatorList.totalLength); + }, function (e) { + finishWorkerTask(task); + if (task.terminated) { + return; + } + handler.send('UnsupportedFeature', { featureId: UNSUPPORTED_FEATURES.unknown }); + var minimumStackMessage = 'worker.js: while trying to getPage() and getOperatorList()'; + var wrappedException; + if (typeof e === 'string') { + wrappedException = { + message: e, + stack: minimumStackMessage + }; + } else if (typeof e === 'object') { + wrappedException = { + message: e.message || e.toString(), + stack: e.stack || minimumStackMessage + }; + } else { + wrappedException = { + message: 'Unknown exception type: ' + typeof e, + stack: minimumStackMessage + }; + } + handler.send('PageError', { + pageNum: pageNum, + error: wrappedException, + intent: data.intent + }); + }); + }); + }, this); + handler.on('GetTextContent', function wphExtractText(data) { + var pageIndex = data.pageIndex; + var normalizeWhitespace = data.normalizeWhitespace; + var combineTextItems = data.combineTextItems; + return pdfManager.getPage(pageIndex).then(function (page) { + var task = new WorkerTask('GetTextContent: page ' + pageIndex); + startWorkerTask(task); + var pageNum = pageIndex + 1; + var start = Date.now(); + return page.extractTextContent(task, normalizeWhitespace, combineTextItems).then(function (textContent) { + finishWorkerTask(task); + info('text indexing: page=' + pageNum + ' - time=' + (Date.now() - start) + 'ms'); + return textContent; + }, function (reason) { + finishWorkerTask(task); + if (task.terminated) { + return; + } + throw reason; + }); + }); + }); + handler.on('Cleanup', function wphCleanup(data) { + return pdfManager.cleanup(); + }); + handler.on('Terminate', function wphTerminate(data) { + terminated = true; + if (pdfManager) { + pdfManager.terminate(); + pdfManager = null; + } + if (cancelXHRs) { + cancelXHRs(); + } + var waitOn = []; + WorkerTasks.forEach(function (task) { + waitOn.push(task.finished); + task.terminate(); + }); + return Promise.all(waitOn).then(function () { + handler.destroy(); + handler = null; + }); + }); + handler.on('Ready', function wphReady(data) { + setupDoc(docParams); + docParams = null; + }); + return workerHandlerName; + } + }; + function initializeWorker() { + if (!('console' in globalScope)) { + var consoleTimer = {}; + var workerConsole = { + log: function log() { + var args = Array.prototype.slice.call(arguments); + globalScope.postMessage({ + targetName: 'main', + action: 'console_log', + data: args + }); + }, + error: function error() { + var args = Array.prototype.slice.call(arguments); + globalScope.postMessage({ + targetName: 'main', + action: 'console_error', + data: args + }); + throw 'pdf.js execution error'; + }, + time: function time(name) { + consoleTimer[name] = Date.now(); + }, + timeEnd: function timeEnd(name) { + var time = consoleTimer[name]; + if (!time) { + error('Unknown timer name ' + name); + } + this.log('Timer:', name, Date.now() - time); + } + }; + globalScope.console = workerConsole; + } + var handler = new MessageHandler('worker', 'main', self); + WorkerMessageHandler.setup(handler, self); + handler.send('ready', null); + } + if (typeof window === 'undefined' && !(typeof module !== 'undefined' && module.require)) { + initializeWorker(); + } + exports.setPDFNetworkStreamClass = setPDFNetworkStreamClass; + exports.WorkerTask = WorkerTask; + exports.WorkerMessageHandler = WorkerMessageHandler; + })); + (function (root, factory) { + factory(root.pdfjsCoreNetwork = {}, root.pdfjsSharedUtil, root.pdfjsCoreWorker); + }(this, function (exports, sharedUtil, coreWorker) { + var OK_RESPONSE = 200; + var PARTIAL_CONTENT_RESPONSE = 206; + function NetworkManager(url, args) { + this.url = url; + args = args || {}; + this.isHttp = /^https?:/i.test(url); + this.httpHeaders = this.isHttp && args.httpHeaders || {}; + this.withCredentials = args.withCredentials || false; + this.getXhr = args.getXhr || function NetworkManager_getXhr() { + return new XMLHttpRequest(); + }; + this.currXhrId = 0; + this.pendingRequests = Object.create(null); + this.loadedRequests = Object.create(null); + } + function getArrayBuffer(xhr) { + var data = xhr.response; + if (typeof data !== 'string') { + return data; + } + var length = data.length; + var array = new Uint8Array(length); + for (var i = 0; i < length; i++) { + array[i] = data.charCodeAt(i) & 0xFF; + } + return array.buffer; + } + var supportsMozChunked = function supportsMozChunkedClosure() { + try { + var x = new XMLHttpRequest(); + x.open('GET', 'https://example.com'); + x.responseType = 'moz-chunked-arraybuffer'; + return x.responseType === 'moz-chunked-arraybuffer'; + } catch (e) { + return false; + } + }(); + NetworkManager.prototype = { + requestRange: function NetworkManager_requestRange(begin, end, listeners) { + var args = { + begin: begin, + end: end + }; + for (var prop in listeners) { + args[prop] = listeners[prop]; + } + return this.request(args); + }, + requestFull: function NetworkManager_requestFull(listeners) { + return this.request(listeners); + }, + request: function NetworkManager_request(args) { + var xhr = this.getXhr(); + var xhrId = this.currXhrId++; + var pendingRequest = this.pendingRequests[xhrId] = { xhr: xhr }; + xhr.open('GET', this.url); + xhr.withCredentials = this.withCredentials; + for (var property in this.httpHeaders) { + var value = this.httpHeaders[property]; + if (typeof value === 'undefined') { + continue; + } + xhr.setRequestHeader(property, value); + } + if (this.isHttp && 'begin' in args && 'end' in args) { + var rangeStr = args.begin + '-' + (args.end - 1); + xhr.setRequestHeader('Range', 'bytes=' + rangeStr); + pendingRequest.expectedStatus = 206; + } else { + pendingRequest.expectedStatus = 200; + } + var useMozChunkedLoading = supportsMozChunked && !!args.onProgressiveData; + if (useMozChunkedLoading) { + xhr.responseType = 'moz-chunked-arraybuffer'; + pendingRequest.onProgressiveData = args.onProgressiveData; + pendingRequest.mozChunked = true; + } else { + xhr.responseType = 'arraybuffer'; + } + if (args.onError) { + xhr.onerror = function (evt) { + args.onError(xhr.status); + }; + } + xhr.onreadystatechange = this.onStateChange.bind(this, xhrId); + xhr.onprogress = this.onProgress.bind(this, xhrId); + pendingRequest.onHeadersReceived = args.onHeadersReceived; + pendingRequest.onDone = args.onDone; + pendingRequest.onError = args.onError; + pendingRequest.onProgress = args.onProgress; + xhr.send(null); + return xhrId; + }, + onProgress: function NetworkManager_onProgress(xhrId, evt) { + var pendingRequest = this.pendingRequests[xhrId]; + if (!pendingRequest) { + return; + } + if (pendingRequest.mozChunked) { + var chunk = getArrayBuffer(pendingRequest.xhr); + pendingRequest.onProgressiveData(chunk); + } + var onProgress = pendingRequest.onProgress; + if (onProgress) { + onProgress(evt); + } + }, + onStateChange: function NetworkManager_onStateChange(xhrId, evt) { + var pendingRequest = this.pendingRequests[xhrId]; + if (!pendingRequest) { + return; + } + var xhr = pendingRequest.xhr; + if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) { + pendingRequest.onHeadersReceived(); + delete pendingRequest.onHeadersReceived; + } + if (xhr.readyState !== 4) { + return; + } + if (!(xhrId in this.pendingRequests)) { + return; + } + delete this.pendingRequests[xhrId]; + if (xhr.status === 0 && this.isHttp) { + if (pendingRequest.onError) { + pendingRequest.onError(xhr.status); + } + return; + } + var xhrStatus = xhr.status || OK_RESPONSE; + var ok_response_on_range_request = xhrStatus === OK_RESPONSE && pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE; + if (!ok_response_on_range_request && xhrStatus !== pendingRequest.expectedStatus) { + if (pendingRequest.onError) { + pendingRequest.onError(xhr.status); + } + return; + } + this.loadedRequests[xhrId] = true; + var chunk = getArrayBuffer(xhr); + if (xhrStatus === PARTIAL_CONTENT_RESPONSE) { + var rangeHeader = xhr.getResponseHeader('Content-Range'); + var matches = /bytes (\d+)-(\d+)\/(\d+)/.exec(rangeHeader); + var begin = parseInt(matches[1], 10); + pendingRequest.onDone({ + begin: begin, + chunk: chunk + }); + } else if (pendingRequest.onProgressiveData) { + pendingRequest.onDone(null); + } else if (chunk) { + pendingRequest.onDone({ + begin: 0, + chunk: chunk + }); + } else if (pendingRequest.onError) { + pendingRequest.onError(xhr.status); + } + }, + hasPendingRequests: function NetworkManager_hasPendingRequests() { + for (var xhrId in this.pendingRequests) { + return true; + } + return false; + }, + getRequestXhr: function NetworkManager_getXhr(xhrId) { + return this.pendingRequests[xhrId].xhr; + }, + isStreamingRequest: function NetworkManager_isStreamingRequest(xhrId) { + return !!this.pendingRequests[xhrId].onProgressiveData; + }, + isPendingRequest: function NetworkManager_isPendingRequest(xhrId) { + return xhrId in this.pendingRequests; + }, + isLoadedRequest: function NetworkManager_isLoadedRequest(xhrId) { + return xhrId in this.loadedRequests; + }, + abortAllRequests: function NetworkManager_abortAllRequests() { + for (var xhrId in this.pendingRequests) { + this.abortRequest(xhrId | 0); + } + }, + abortRequest: function NetworkManager_abortRequest(xhrId) { + var xhr = this.pendingRequests[xhrId].xhr; + delete this.pendingRequests[xhrId]; + xhr.abort(); + } + }; + var assert = sharedUtil.assert; + var createPromiseCapability = sharedUtil.createPromiseCapability; + var isInt = sharedUtil.isInt; + var MissingPDFException = sharedUtil.MissingPDFException; + var UnexpectedResponseException = sharedUtil.UnexpectedResponseException; + function PDFNetworkStream(options) { + this._options = options; + var source = options.source; + this._manager = new NetworkManager(source.url, { + httpHeaders: source.httpHeaders, + withCredentials: source.withCredentials + }); + this._rangeChunkSize = source.rangeChunkSize; + this._fullRequestReader = null; + this._rangeRequestReaders = []; + } + PDFNetworkStream.prototype = { + _onRangeRequestReaderClosed: function PDFNetworkStream_onRangeRequestReaderClosed(reader) { + var i = this._rangeRequestReaders.indexOf(reader); + if (i >= 0) { + this._rangeRequestReaders.splice(i, 1); + } + }, + getFullReader: function PDFNetworkStream_getFullReader() { + assert(!this._fullRequestReader); + this._fullRequestReader = new PDFNetworkStreamFullRequestReader(this._manager, this._options); + return this._fullRequestReader; + }, + getRangeReader: function PDFNetworkStream_getRangeReader(begin, end) { + var reader = new PDFNetworkStreamRangeRequestReader(this._manager, begin, end); + reader.onClosed = this._onRangeRequestReaderClosed.bind(this); + this._rangeRequestReaders.push(reader); + return reader; + }, + cancelAllRequests: function PDFNetworkStream_cancelAllRequests(reason) { + if (this._fullRequestReader) { + this._fullRequestReader.cancel(reason); + } + var readers = this._rangeRequestReaders.slice(0); + readers.forEach(function (reader) { + reader.cancel(reason); + }); + } + }; + function PDFNetworkStreamFullRequestReader(manager, options) { + this._manager = manager; + var source = options.source; + var args = { + onHeadersReceived: this._onHeadersReceived.bind(this), + onProgressiveData: source.disableStream ? null : this._onProgressiveData.bind(this), + onDone: this._onDone.bind(this), + onError: this._onError.bind(this), + onProgress: this._onProgress.bind(this) + }; + this._url = source.url; + this._fullRequestId = manager.requestFull(args); + this._headersReceivedCapability = createPromiseCapability(); + this._disableRange = options.disableRange || false; + this._contentLength = source.length; + this._rangeChunkSize = source.rangeChunkSize; + if (!this._rangeChunkSize && !this._disableRange) { + this._disableRange = true; + } + this._isStreamingSupported = false; + this._isRangeSupported = false; + this._cachedChunks = []; + this._requests = []; + this._done = false; + this._storedError = undefined; + this.onProgress = null; + } + PDFNetworkStreamFullRequestReader.prototype = { + _validateRangeRequestCapabilities: function PDFNetworkStreamFullRequestReader_validateRangeRequestCapabilities() { + if (this._disableRange) { + return false; + } + var networkManager = this._manager; + if (!networkManager.isHttp) { + return false; + } + var fullRequestXhrId = this._fullRequestId; + var fullRequestXhr = networkManager.getRequestXhr(fullRequestXhrId); + if (fullRequestXhr.getResponseHeader('Accept-Ranges') !== 'bytes') { + return false; + } + var contentEncoding = fullRequestXhr.getResponseHeader('Content-Encoding') || 'identity'; + if (contentEncoding !== 'identity') { + return false; + } + var length = fullRequestXhr.getResponseHeader('Content-Length'); + length = parseInt(length, 10); + if (!isInt(length)) { + return false; + } + this._contentLength = length; + if (length <= 2 * this._rangeChunkSize) { + return false; + } + return true; + }, + _onHeadersReceived: function PDFNetworkStreamFullRequestReader_onHeadersReceived() { + if (this._validateRangeRequestCapabilities()) { + this._isRangeSupported = true; + } + var networkManager = this._manager; + var fullRequestXhrId = this._fullRequestId; + if (networkManager.isStreamingRequest(fullRequestXhrId)) { + this._isStreamingSupported = true; + } else if (this._isRangeSupported) { + networkManager.abortRequest(fullRequestXhrId); + } + this._headersReceivedCapability.resolve(); + }, + _onProgressiveData: function PDFNetworkStreamFullRequestReader_onProgressiveData(chunk) { + if (this._requests.length > 0) { + var requestCapability = this._requests.shift(); + requestCapability.resolve({ + value: chunk, + done: false + }); + } else { + this._cachedChunks.push(chunk); + } + }, + _onDone: function PDFNetworkStreamFullRequestReader_onDone(args) { + if (args) { + this._onProgressiveData(args.chunk); + } + this._done = true; + if (this._cachedChunks.length > 0) { + return; + } + this._requests.forEach(function (requestCapability) { + requestCapability.resolve({ + value: undefined, + done: true + }); + }); + this._requests = []; + }, + _onError: function PDFNetworkStreamFullRequestReader_onError(status) { + var url = this._url; + var exception; + if (status === 404 || status === 0 && /^file:/.test(url)) { + exception = new MissingPDFException('Missing PDF "' + url + '".'); + } else { + exception = new UnexpectedResponseException('Unexpected server response (' + status + ') while retrieving PDF "' + url + '".', status); + } + this._storedError = exception; + this._headersReceivedCapability.reject(exception); + this._requests.forEach(function (requestCapability) { + requestCapability.reject(exception); + }); + this._requests = []; + this._cachedChunks = []; + }, + _onProgress: function PDFNetworkStreamFullRequestReader_onProgress(data) { + if (this.onProgress) { + this.onProgress({ + loaded: data.loaded, + total: data.lengthComputable ? data.total : this._contentLength + }); + } + }, + get isRangeSupported() { + return this._isRangeSupported; + }, + get isStreamingSupported() { + return this._isStreamingSupported; + }, + get contentLength() { + return this._contentLength; + }, + get headersReady() { + return this._headersReceivedCapability.promise; + }, + read: function PDFNetworkStreamFullRequestReader_read() { + if (this._storedError) { + return Promise.reject(this._storedError); + } + if (this._cachedChunks.length > 0) { + var chunk = this._cachedChunks.shift(); + return Promise.resolve(chunk); + } + if (this._done) { + return Promise.resolve({ + value: undefined, + done: true + }); + } + var requestCapability = createPromiseCapability(); + this._requests.push(requestCapability); + return requestCapability.promise; + }, + cancel: function PDFNetworkStreamFullRequestReader_cancel(reason) { + this._done = true; + this._headersReceivedCapability.reject(reason); + this._requests.forEach(function (requestCapability) { + requestCapability.resolve({ + value: undefined, + done: true + }); + }); + this._requests = []; + if (this._manager.isPendingRequest(this._fullRequestId)) { + this._manager.abortRequest(this._fullRequestId); + } + this._fullRequestReader = null; + } + }; + function PDFNetworkStreamRangeRequestReader(manager, begin, end) { + this._manager = manager; + var args = { + onDone: this._onDone.bind(this), + onProgress: this._onProgress.bind(this) + }; + this._requestId = manager.requestRange(begin, end, args); + this._requests = []; + this._queuedChunk = null; + this._done = false; + this.onProgress = null; + this.onClosed = null; + } + PDFNetworkStreamRangeRequestReader.prototype = { + _close: function PDFNetworkStreamRangeRequestReader_close() { + if (this.onClosed) { + this.onClosed(this); + } + }, + _onDone: function PDFNetworkStreamRangeRequestReader_onDone(data) { + var chunk = data.chunk; + if (this._requests.length > 0) { + var requestCapability = this._requests.shift(); + requestCapability.resolve({ + value: chunk, + done: false + }); + } else { + this._queuedChunk = chunk; + } + this._done = true; + this._requests.forEach(function (requestCapability) { + requestCapability.resolve({ + value: undefined, + done: true + }); + }); + this._requests = []; + this._close(); + }, + _onProgress: function PDFNetworkStreamRangeRequestReader_onProgress(evt) { + if (!this.isStreamingSupported && this.onProgress) { + this.onProgress({ loaded: evt.loaded }); + } + }, + get isStreamingSupported() { + return false; + }, + read: function PDFNetworkStreamRangeRequestReader_read() { + if (this._queuedChunk !== null) { + var chunk = this._queuedChunk; + this._queuedChunk = null; + return Promise.resolve({ + value: chunk, + done: false + }); + } + if (this._done) { + return Promise.resolve({ + value: undefined, + done: true + }); + } + var requestCapability = createPromiseCapability(); + this._requests.push(requestCapability); + return requestCapability.promise; + }, + cancel: function PDFNetworkStreamRangeRequestReader_cancel(reason) { + this._done = true; + this._requests.forEach(function (requestCapability) { + requestCapability.resolve({ + value: undefined, + done: true + }); + }); + this._requests = []; + if (this._manager.isPendingRequest(this._requestId)) { + this._manager.abortRequest(this._requestId); + } + this._close(); + } + }; + coreWorker.setPDFNetworkStreamClass(PDFNetworkStream); + exports.PDFNetworkStream = PDFNetworkStream; + exports.NetworkManager = NetworkManager; + })); + }.call(pdfjsLibs)); + exports.WorkerMessageHandler = pdfjsLibs.pdfjsCoreWorker.WorkerMessageHandler; +})); \ No newline at end of file diff --git a/qdntz/inc/tzzc/canvas/pdfh5.js b/qdntz/inc/tzzc/canvas/pdfh5.js new file mode 100644 index 0000000..5442047 --- /dev/null +++ b/qdntz/inc/tzzc/canvas/pdfh5.js @@ -0,0 +1,1415 @@ +; +(function(g, fn) { + var version = "1.3.9", + pdfjsVersion = "2.3.200"; + console.log("pdfh5.js v" + version + " & https://www.gjtool.cn") + if (typeof require !== 'undefined') { + if (g.$ === undefined) { + g.$ = require('./jquery-1.11.3.min.js'); + } + g.pdfjsWorker = require('./pdf.worker.js'); + g.pdfjsLib = require('./pdf.js'); + } + var pdfjsLib = g.pdfjsLib, + $ = g.$, + pdfjsWorker = g.pdfjsWorker; + if (typeof define === 'function' && define.amd) { + define(function() { + return fn(g, pdfjsWorker, pdfjsLib, $, version) + }) + } else if (typeof module !== 'undefined' && module.exports) { + module.exports = fn(g, pdfjsWorker, pdfjsLib, $, version) + } else { + g.Pdfh5 = fn(g, pdfjsWorker, pdfjsLib, $, version) + } +})(typeof window !== 'undefined' ? window : this, function(g, pdfjsWorker, pdfjsLib, $, version) { + 'use strict'; + var definePinchZoom = function($) { + var PinchZoom = function(el, options, viewerContainer) { + this.el = $(el); + this.viewerContainer = viewerContainer; + this.zoomFactor = 1; + this.lastScale = 1; + this.offset = { + x: 0, + y: 0 + }; + this.options = $.extend({}, this.defaults, options); + this.options.zoomOutFactor = isNaN(options.zoomOutFactor) ? 1.2 : options.zoomOutFactor; + this.options.animationDuration = isNaN(options.animationDuration) ? 300 : options.animationDuration; + this.options.maxZoom = isNaN(options.maxZoom) ? 3 : options.maxZoom; + this.options.minZoom = isNaN(options.minZoom) ? 0.8 : options.minZoom; + this.setupMarkup(); + this.bindEvents(); + this.update(); + this.enable(); + this.height = 0; + this.load = false; + this.direction = null; + this.clientY = null; + this.lastclientY = null; + }, + sum = function(a, b) { + return a + b; + }, + isCloseTo = function(value, expected) { + return value > expected - 0.01 && value < expected + 0.01; + }; + + PinchZoom.prototype = { + defaults: { + tapZoomFactor: 3, + zoomOutFactor: 1.2, + animationDuration: 300, + maxZoom: 3, + minZoom: 0.8, + lockDragAxis: false, + use2d: true, + zoomStartEventName: 'pz_zoomstart', + zoomEndEventName: 'pz_zoomend', + dragStartEventName: 'pz_dragstart', + dragEndEventName: 'pz_dragend', + doubleTapEventName: 'pz_doubletap' + }, + handleDragStart: function(event) { + this.el.trigger(this.options.dragStartEventName); + this.stopAnimation(); + this.lastDragPosition = false; + this.hasInteraction = true; + this.handleDrag(event); + }, + handleDrag: function(event) { + + if (this.zoomFactor > 1.0) { + var touch = this.getTouches(event)[0]; + this.drag(touch, this.lastDragPosition, event); + this.offset = this.sanitizeOffset(this.offset); + this.lastDragPosition = touch; + } + }, + + handleDragEnd: function() { + this.el.trigger(this.options.dragEndEventName); + this.end(); + }, + handleZoomStart: function(event) { + this.el.trigger(this.options.zoomStartEventName); + this.stopAnimation(); + this.lastScale = 1; + this.nthZoom = 0; + this.lastZoomCenter = false; + this.hasInteraction = true; + }, + handleZoom: function(event, newScale) { + var touchCenter = this.getTouchCenter(this.getTouches(event)), + scale = newScale / this.lastScale; + this.lastScale = newScale; + this.nthZoom += 1; + if (this.nthZoom > 3) { + + this.scale(scale, touchCenter); + this.drag(touchCenter, this.lastZoomCenter); + } + this.lastZoomCenter = touchCenter; + }, + + handleZoomEnd: function() { + this.el.trigger(this.options.zoomEndEventName); + this.end(); + }, + handleDoubleTap: function(event) { + var center = this.getTouches(event)[0], + zoomFactor = this.zoomFactor > 1 ? 1 : this.options.tapZoomFactor, + startZoomFactor = this.zoomFactor, + updateProgress = (function(progress) { + this.scaleTo(startZoomFactor + progress * (zoomFactor - startZoomFactor), center); + }).bind(this); + + if (this.hasInteraction) { + return; + } + if (startZoomFactor > zoomFactor) { + center = this.getCurrentZoomCenter(); + } + + this.animate(this.options.animationDuration, updateProgress, this.swing); + this.el.trigger(this.options.doubleTapEventName); + }, + sanitizeOffset: function(offset) { + var maxX = (this.zoomFactor - 1) * this.getContainerX(), + maxY = (this.zoomFactor - 1) * this.getContainerY(), + maxOffsetX = Math.max(maxX, 0), + maxOffsetY = Math.max(maxY, 0), + minOffsetX = Math.min(maxX, 0), + minOffsetY = Math.min(maxY, 0); + + var x = Math.min(Math.max(offset.x, minOffsetX), maxOffsetX), + y = Math.min(Math.max(offset.y, minOffsetY), maxOffsetY); + + + return { + x: x, + y: y + }; + }, + scaleTo: function(zoomFactor, center) { + this.scale(zoomFactor / this.zoomFactor, center); + }, + scale: function(scale, center) { + scale = this.scaleZoomFactor(scale); + this.addOffset({ + x: (scale - 1) * (center.x + this.offset.x), + y: (scale - 1) * (center.y + this.offset.y) + }); + this.done && this.done.call(this, this.getInitialZoomFactor() * this.zoomFactor) + }, + scaleZoomFactor: function(scale) { + var originalZoomFactor = this.zoomFactor; + this.zoomFactor *= scale; + this.zoomFactor = Math.min(this.options.maxZoom, Math.max(this.zoomFactor, this.options.minZoom)); + return this.zoomFactor / originalZoomFactor; + }, + drag: function(center, lastCenter, event) { + if (lastCenter) { + if (this.options.lockDragAxis) { + if (Math.abs(center.x - lastCenter.x) > Math.abs(center.y - lastCenter.y)) { + this.addOffset({ + x: -(center.x - lastCenter.x), + y: 0 + }); + } else { + this.addOffset({ + y: -(center.y - lastCenter.y), + x: 0 + }); + } + } else { + if (center.y - lastCenter.y < 0) { + this.direction = "down"; + } else if (center.y - lastCenter.y > 10) { + this.direction = "up"; + } + this.addOffset({ + y: -(center.y - lastCenter.y), + x: -(center.x - lastCenter.x) + }); + } + } + }, + getTouchCenter: function(touches) { + return this.getVectorAvg(touches); + }, + getVectorAvg: function(vectors) { + return { + x: vectors.map(function(v) { + return v.x; + }).reduce(sum) / vectors.length, + y: vectors.map(function(v) { + return v.y; + }).reduce(sum) / vectors.length + }; + }, + addOffset: function(offset) { + this.offset = { + x: this.offset.x + offset.x, + y: this.offset.y + offset.y + }; + }, + + sanitize: function() { + if (this.zoomFactor < this.options.zoomOutFactor) { + this.zoomOutAnimation(); + } else if (this.isInsaneOffset(this.offset)) { + this.sanitizeOffsetAnimation(); + } + }, + isInsaneOffset: function(offset) { + var sanitizedOffset = this.sanitizeOffset(offset); + return sanitizedOffset.x !== offset.x || + sanitizedOffset.y !== offset.y; + }, + sanitizeOffsetAnimation: function() { + var targetOffset = this.sanitizeOffset(this.offset), + startOffset = { + x: this.offset.x, + y: this.offset.y + }, + updateProgress = (function(progress) { + this.offset.x = startOffset.x + progress * (targetOffset.x - startOffset.x); + this.offset.y = startOffset.y + progress * (targetOffset.y - startOffset.y); + this.update(); + }).bind(this); + + this.animate( + this.options.animationDuration, + updateProgress, + this.swing + ); + }, + zoomOutAnimation: function() { + var startZoomFactor = this.zoomFactor, + zoomFactor = 1, + center = this.getCurrentZoomCenter(), + updateProgress = (function(progress) { + this.scaleTo(startZoomFactor + progress * (zoomFactor - startZoomFactor), center); + }).bind(this); + + this.animate( + this.options.animationDuration, + updateProgress, + this.swing + ); + }, + updateAspectRatio: function() { + this.setContainerY(this.getContainerX() / this.getAspectRatio()); + }, + getInitialZoomFactor: function() { + if (this.container[0] && this.el[0]) { + return this.container[0].offsetWidth / this.el[0].offsetWidth; + } else { + return 0 + } + }, + getAspectRatio: function() { + if (this.el[0]) { + var offsetHeight = this.el[0].offsetHeight; + return this.container[0].offsetWidth / offsetHeight; + } else { + return 0 + } + + }, + getCurrentZoomCenter: function() { + var length = this.container[0].offsetWidth * this.zoomFactor, + offsetLeft = this.offset.x, + offsetRight = length - offsetLeft - this.container[0].offsetWidth, + widthOffsetRatio = offsetLeft / offsetRight, + centerX = widthOffsetRatio * this.container[0].offsetWidth / (widthOffsetRatio + 1), + + height = this.container[0].offsetHeight * this.zoomFactor, + offsetTop = this.offset.y, + offsetBottom = height - offsetTop - this.container[0].offsetHeight, + heightOffsetRatio = offsetTop / offsetBottom, + centerY = heightOffsetRatio * this.container[0].offsetHeight / (heightOffsetRatio + 1); + + if (offsetRight === 0) { + centerX = this.container[0].offsetWidth; + } + if (offsetBottom === 0) { + centerY = this.container[0].offsetHeight; + } + + return { + x: centerX, + y: centerY + }; + }, + + canDrag: function() { + return !isCloseTo(this.zoomFactor, 1); + }, + + getTouches: function(event) { + var position = this.container.offset(); + return Array.prototype.slice.call(event.touches).map(function(touch) { + return { + x: touch.pageX - position.left, + y: touch.pageY - position.top + }; + }); + }, + animate: function(duration, framefn, timefn, callback) { + var startTime = new Date().getTime(), + renderFrame = (function() { + if (!this.inAnimation) { + return; + } + var frameTime = new Date().getTime() - startTime, + progress = frameTime / duration; + if (frameTime >= duration) { + framefn(1); + if (callback) { + callback(); + } + this.update(); + this.stopAnimation(); + } else { + if (timefn) { + progress = timefn(progress); + } + framefn(progress); + this.update(); + requestAnimationFrame(renderFrame); + } + }).bind(this); + this.inAnimation = true; + requestAnimationFrame(renderFrame); + }, + stopAnimation: function() { + this.inAnimation = false; + + }, + swing: function(p) { + return -Math.cos(p * Math.PI) / 2 + 0.5; + }, + + getContainerX: function() { + if (this.el[0]) { + return this.el[0].offsetWidth; + } else { + return 0; + } + }, + + getContainerY: function() { + return this.el[0].offsetHeight; + }, + setContainerY: function(y) { + y = y.toFixed(2); + return this.container.height(y); + }, + setupMarkup: function() { + this.container = $('
'); + this.el.before(this.container); + this.container.append(this.el); + + this.container.css({ + 'position': 'relative', + }); + + this.el.css({ + '-webkit-transform-origin': '0% 0%', + '-moz-transform-origin': '0% 0%', + '-ms-transform-origin': '0% 0%', + '-o-transform-origin': '0% 0%', + 'transform-origin': '0% 0%', + 'position': 'relative' + }); + + }, + + end: function() { + this.hasInteraction = false; + this.sanitize(); + this.update(); + + }, + bindEvents: function() { + detectGestures(this.container.eq(0), this, this.viewerContainer); + $(g).on('resize', this.update.bind(this)); + $(this.el).find('img').on('load', this.update.bind(this)); + + }, + update: function() { + + if (this.updatePlaned) { + return; + } + this.updatePlaned = true; + setTimeout((function() { + this.updatePlaned = false; + this.updateAspectRatio(); + var zoomFactor = this.getInitialZoomFactor() * this.zoomFactor, + offsetX = (-this.offset.x / zoomFactor).toFixed(3), + offsetY = (-this.offset.y / zoomFactor).toFixed(3); + this.lastclientY = offsetY; + + var transform3d = 'scale3d(' + zoomFactor + ', ' + zoomFactor + ',1) ' + + 'translate3d(' + offsetX + 'px,' + offsetY + 'px,0px)', + transform2d = 'scale(' + zoomFactor + ', ' + zoomFactor + ') ' + + 'translate(' + offsetX + 'px,' + offsetY + 'px)', + removeClone = (function() { + if (this.clone) { + this.clone.remove(); + delete this.clone; + } + }).bind(this); + if (!this.options.use2d || this.hasInteraction || this.inAnimation) { + this.is3d = true; + this.el.css({ + '-webkit-transform': transform3d, + '-o-transform': transform2d, + '-ms-transform': transform2d, + '-moz-transform': transform2d, + 'transform': transform3d + }); + } else { + this.el.css({ + '-webkit-transform': transform2d, + '-o-transform': transform2d, + '-ms-transform': transform2d, + '-moz-transform': transform2d, + 'transform': transform2d + }); + this.is3d = false; + } + }).bind(this), 0); + }, + enable: function() { + this.enabled = true; + }, + disable: function() { + this.enabled = false; + }, + destroy: function() { + var dom = this.el.clone(); + var p = this.container.parent(); + this.container.remove(); + dom.removeAttr('style'); + p.append(dom); + } + }; + + var detectGestures = function(el, target, viewerContainer) { + var interaction = null, + fingers = 0, + lastTouchStart = null, + startTouches = null, + lastTouchY = null, + clientY = null, + lastclientY = 0, + lastTop = 0, + setInteraction = function(newInteraction, event) { + if (interaction !== newInteraction) { + + if (interaction && !newInteraction) { + switch (interaction) { + case "zoom": + target.handleZoomEnd(event); + break; + case 'drag': + target.handleDragEnd(event); + break; + } + } + + switch (newInteraction) { + case 'zoom': + target.handleZoomStart(event); + break; + case 'drag': + target.handleDragStart(event); + break; + } + } + interaction = newInteraction; + }, + + updateInteraction = function(event) { + if (fingers === 2) { + setInteraction('zoom'); + } else if (fingers === 1 && target.canDrag()) { + setInteraction('drag', event); + } else { + setInteraction(null, event); + } + }, + + targetTouches = function(touches) { + return Array.prototype.slice.call(touches).map(function(touch) { + return { + x: touch.pageX, + y: touch.pageY + }; + }); + }, + + getDistance = function(a, b) { + var x, y; + x = a.x - b.x; + y = a.y - b.y; + return Math.sqrt(x * x + y * y); + }, + + calculateScale = function(startTouches, endTouches) { + var startDistance = getDistance(startTouches[0], startTouches[1]), + endDistance = getDistance(endTouches[0], endTouches[1]); + return endDistance / startDistance; + }, + + cancelEvent = function(event) { + event.stopPropagation(); + event.preventDefault(); + }, + + detectDoubleTap = function(event) { + var time = (new Date()).getTime(); + var pageY = event.changedTouches[0].pageY; + var top = parentNode.scrollTop || 0; + if (fingers > 1) { + lastTouchStart = null; + lastTouchY = null; + cancelEvent(event); + } + + if (time - lastTouchStart < 300 && Math.abs(pageY - lastTouchY) < 10 && Math.abs(lastTop - top) < 10) { + cancelEvent(event); + target.handleDoubleTap(event); + switch (interaction) { + case "zoom": + target.handleZoomEnd(event); + break; + case 'drag': + target.handleDragEnd(event); + break; + } + } + + if (fingers === 1) { + lastTouchStart = time; + lastTouchY = pageY; + lastTop = top; + } + }, + firstMove = true; + if (viewerContainer) { + var parentNode = viewerContainer[0]; + } + if (parentNode) { + parentNode.addEventListener('touchstart', function(event) { + if (target.enabled) { + firstMove = true; + fingers = event.touches.length; + detectDoubleTap(event); + clientY = event.changedTouches[0].clientY; + if (fingers > 1) { + cancelEvent(event); + } + } + }); + + parentNode.addEventListener('touchmove', function(event) { + if (target.enabled) { + lastclientY = event.changedTouches[0].clientY; + if (firstMove) { + updateInteraction(event); + startTouches = targetTouches(event.touches); + } else { + switch (interaction) { + case 'zoom': + target.handleZoom(event, calculateScale(startTouches, targetTouches(event.touches))); + break; + case 'drag': + target.handleDrag(event); + break; + } + if (interaction) { + target.update(lastclientY); + } + } + if (fingers > 1) { + cancelEvent(event); + } + firstMove = false; + } + }); + + parentNode.addEventListener('touchend', function(event) { + if (target.enabled) { + fingers = event.touches.length; + if (fingers > 1) { + cancelEvent(event); + } + updateInteraction(event); + } + }); + } + + }; + return PinchZoom; + }; + var PinchZoom = definePinchZoom($); + var Pdfh5 = function(dom, options) { + this.version = version; + this.container = $(dom); + this.options = options; + this.init(); + }; + Pdfh5.prototype = { + init: function() { + var self = this; + this.thePDF = null; + this.totalNum = null; + this.pages = null; + this.initTime = 0; + this.scale = 1; + this.currentNum = 1; + this.loadedCount = 0; + this.endTime = 0; + this.pinchZoom = null; + this.timer = null; + this.docWidth = document.documentElement.clientWidth; + this.winWidth = $(window).width(); + this.cache = {}; + this.eventType = {}; + this.cacheNum = 1; + this.resizeEvent = false; + this.cacheData = null; + this.pdfjsLibPromise = null; + if (this.container[0].pdfLoaded) { + this.destroy(); + } + this.container[0].pdfLoaded = false; + this.container.addClass("pdfjs") + this.initTime = new Date().getTime(); + setTimeout(function() { + var arr1 = self.eventType["scroll"]; + if (arr1 && arr1 instanceof Array) { + for (var i = 0; i < arr1.length; i++) { + arr1[i] && arr1[i].call(self, self.initTime) + } + } + }, 0) + this.options = this.options ? this.options : {}; + this.options.pdfurl = this.options.pdfurl ? this.options.pdfurl : null; + this.options.data = this.options.data ? this.options.data : null; + this.options.scale = this.scale; + this.options.zoomEnable = this.options.zoomEnable === false ? false : true; + this.options.scrollEnable = this.options.scrollEnable === false ? false : true; + this.options.loadingBar = this.options.loadingBar === false ? false : true; + this.options.pageNum = this.options.pageNum === false ? false : true; + this.options.backTop = this.options.backTop === false ? false : true; + this.options.URIenable = this.options.URIenable === true ? true : false; + this.options.fullscreen = this.options.fullscreen === false ? false : true; + this.options.lazy = this.options.lazy === true ? true : false; + this.options.renderType = this.options.renderType === "svg" ? "svg" : "canvas"; + this.options.resize = this.options.resize === false ? false : true; + if (this.options.limit) { + var n = parseFloat(this.options.limit) + this.options.limit = isNaN(n) ? 0 : n < 0 ? 0 : n; + } else { + this.options.limit = 0 + } + var html = '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + ' 1/' + + '1' + + '
' + + '
' + + '
' + + '
' + + '
'; + if (!this.container.find('.pageNum')[0]) { + this.container.append(html); + } + var viewer = document.createElement("div"); + viewer.className = 'pdfViewer'; + var viewerContainer = document.createElement("div"); + viewerContainer.className = 'viewerContainer'; + viewerContainer.appendChild(viewer); + this.container.append(viewerContainer); + this.viewer = $(viewer); + this.viewerContainer = $(viewerContainer); + this.pageNum = this.container.find('.pageNum'); + this.pageNow = this.pageNum.find('.pageNow'); + this.pageTotal = this.pageNum.find('.pageTotal'); + this.loadingBar = this.container.find('.loadingBar'); + this.progress = this.loadingBar.find('.progress'); + this.progressDom = this.progress[0]; + this.backTop = this.container.find('.backTop'); + this.loading = this.container.find('.loading'); + if (!this.options.loadingBar) { + this.loadingBar.hide() + } + var containerH = this.container.height(), + height = containerH * (1 / 3); + + if (!this.options.scrollEnable) { + this.viewerContainer.css({ + "overflow": "hidden" + }) + } else { + this.viewerContainer.css({ + "overflow": "auto" + }) + } + viewerContainer.addEventListener('scroll', function() { + var scrollTop = viewerContainer.scrollTop; + if (scrollTop >= 150) { + if (self.options.backTop) { + self.backTop.show(); + } + } else { + if (self.options.backTop) { + self.backTop.fadeOut(200); + } + } + if (self.viewerContainer) { + self.pages = self.viewerContainer.find('.pageContainer'); + } + clearTimeout(self.timer); + if (self.options.pageNum && self.pageNum) { + self.pageNum.show(); + } + var h = containerH; + if (self.pages) { + self.pages.each(function(index, obj) { + var top = obj.getBoundingClientRect().top; + var bottom = obj.getBoundingClientRect().bottom; + if (top <= height && bottom > height) { + if (self.options.pageNum) { + self.pageNow.text(index + 1) + } + self.currentNum = index + 1; + } + if (top <= h && bottom > h) { + self.cacheNum = index + 1; + } + }) + } + if (scrollTop + self.container.height() >= self.viewer[0].offsetHeight) { + self.pageNow.text(self.totalNum) + } + if (scrollTop === 0) { + self.pageNow.text(1) + } + self.timer = setTimeout(function() { + if (self.options.pageNum && self.pageNum) { + self.pageNum.fadeOut(200); + } + }, 1500) + if (self.options.lazy) { + var num = Math.floor(100 / self.totalNum).toFixed(2); + if (self.cache[self.cacheNum + ""] && !self.cache[self.cacheNum + ""].loaded) { + var page = self.cache[self.cacheNum + ""].page; + var container = self.cache[self.cacheNum + ""].container; + var pageNum = self.cacheNum; + self.cache[pageNum + ""].loaded = true; + var scaledViewport = self.cache[pageNum + ""].scaledViewport; + if (self.options.renderType === "svg") { + self.renderSvg(page, scaledViewport, pageNum, num, container, self.options) + } else { + self.renderCanvas(page, scaledViewport, pageNum, num, container, self.options) + } + } + if (self.cache[(self.totalNum - 1) + ""] && self.cache[(self.totalNum - 1) + ""].loaded && !self.cache[self.totalNum + ""].loaded) { + var page = self.cache[self.totalNum + ""].page; + var container = self.cache[self.totalNum + ""].container; + var pageNum = self.totalNum; + self.cache[pageNum + ""].loaded = true; + var scaledViewport = self.cache[pageNum + ""].scaledViewport; + if (self.options.renderType === "svg") { + self.renderSvg(page, scaledViewport, pageNum, num, container, self.options) + } else { + self.renderCanvas(page, scaledViewport, pageNum, num, container, self.options) + } + } + } + var arr1 = self.eventType["scroll"]; + if (arr1 && arr1 instanceof Array) { + for (var i = 0; i < arr1.length; i++) { + arr1[i] && arr1[i].call(self, scrollTop) + } + } + }) + this.backTop.on('click tap', function() { + var mart = self.viewer.css('transform'); + var arr = mart.replace(/[a-z\(\)\s]/g, '').split(','); + var s1 = arr[0]; + var s2 = arr[3]; + var x = arr[4] / 2; + var left = self.viewer[0].getBoundingClientRect().left; + if (left <= -self.docWidth * 2) { + x = -self.docWidth / 2 + } + self.viewer.css({ + transform: 'scale(' + s1 + ', ' + s2 + ') translate(' + x + 'px, 0px)' + }) + if (self.pinchZoom) { + self.pinchZoom.offset.y = 0; + self.pinchZoom.lastclientY = 0; + } + self.viewerContainer.animate({ + scrollTop: 0 + }, 300) + var arr1 = self.eventType["backTop"]; + if (arr1 && arr1 instanceof Array) { + for (var i = 0; i < arr1.length; i++) { + arr1[i] && arr1[i].call(self) + } + } + }) + + function GetQueryString(name) { + var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); + var r = g.location.search.substr(1).match(reg); + if (r != null) return decodeURIComponent(r[2]); + return ""; + } + var pdfurl = GetQueryString("file"), + url = ""; + if (pdfurl && self.options.URIenable) { + url = pdfurl + } else if (self.options.pdfurl) { + url = self.options.pdfurl + } + if (self.options.loadingBar) { + self.loadingBar.show(); + self.progress.css({ + width: "3%" + }) + } + + if (url) { + $.ajax({ + type: "get", + mimeType: 'text/plain; charset=x-user-defined', + url: url, + success: function(data) { + var rawLength = data.length; + // var array = new Uint8Array(new ArrayBuffer(rawLength)); + // for (i = 0; i < rawLength; i++) { + // array[i] = data.charCodeAt(i) & 0xff; + // } + var array = []; + for (i = 0; i < rawLength; i++) { + array.push(data.charCodeAt(i) & 0xff); + } + self.cacheData = array + self.renderPdf(self.options, { + data: array + }) + }, + error: function(err) { + self.loading.hide() + var time = new Date().getTime(); + self.endTime = time - self.initTime; + var arr1 = self.eventType["complete"]; + if (arr1 && arr1 instanceof Array) { + for (var i = 0; i < arr1.length; i++) { + arr1[i] && arr1[i].call(self, "error", err.statusText, self.endTime) + } + } + var arr2 = self.eventType["error"]; + if (arr2 && arr2 instanceof Array) { + for (var i = 0; i < arr2.length; i++) { + arr2[i] && arr2[i].call(self, err.statusText, self.endTime) + } + } + throw Error(err.statusText) + } + }); + } else if (self.options.data) { + var data = self.options.data; + var rawLength = data.length; + if (typeof data === "string" && data != "") { + var array = []; + for (i = 0; i < rawLength; i++) { + array.push(data.charCodeAt(i) & 0xff); + } + self.cacheData = array + self.renderPdf(self.options, { + data: array + }) + } else if (typeof data === "object") { + if (data.length == 0) { + var time = new Date().getTime(); + self.endTime = time - self.initTime; + var arr1 = self.eventType["complete"]; + if (arr1 && arr1 instanceof Array) { + for (var i = 0; i < arr1.length; i++) { + arr1[i] && arr1[i].call(self, "error", "options.data is empty Array", self.endTime) + } + } + var arr2 = self.eventType["error"]; + if (arr2 && arr2 instanceof Array) { + for (var i = 0; i < arr2.length; i++) { + arr2[i] && arr2[i].call(self, "options.data is empty Array", self.endTime) + } + } + throw Error("options.data is empty Array") + } else { + self.cacheData = data + self.renderPdf(self.options, { + data: data + }) + } + } + + } else { + var time = new Date().getTime(); + self.endTime = time - self.initTime; + var arr1 = self.eventType["complete"]; + if (arr1 && arr1 instanceof Array) { + for (var i = 0; i < arr1.length; i++) { + arr1[i] && arr1[i].call(self, "error", "Expect options.pdfurl or options.data!", self.endTime) + } + } + var arr2 = self.eventType["error"]; + if (arr2 && arr2 instanceof Array) { + for (var i = 0; i < arr2.length; i++) { + arr2[i] && arr2[i].call(self, "Expect options.pdfurl or options.data!", self.endTime) + } + } + throw Error("Expect options.pdfurl or options.data!") + } + }, + renderPdf: function(options, obj) { + this.container[0].pdfLoaded = true; + var self = this; + if (options.cMapUrl) { + obj.cMapUrl = options.cMapUrl; + } else { + obj.cMapUrl = 'https://unpkg.com/pdfjs-dist@2.0.943/cmaps/'; + } + obj.cMapPacked = true; + + this.pdfjsLibPromise = pdfjsLib.getDocument(obj).then(function(pdf) { + self.loading.hide() + self.thePDF = pdf; + self.totalNum = pdf.numPages; + if (options.limit > 0) { + self.totalNum = options.limit + } + self.pageTotal.text(self.totalNum) + if (!self.pinchZoom) { + var arr1 = self.eventType["ready"]; + if (arr1 && arr1 instanceof Array) { + for (var i = 0; i < arr1.length; i++) { + arr1[i] && arr1[i].call(self) + } + } + self.pinchZoom = new PinchZoom(self.viewer, { + tapZoomFactor: options.tapZoomFactor, + zoomOutFactor: options.zoomOutFactor, + animationDuration: options.animationDuration, + maxZoom: options.maxZoom, + minZoom: options.minZoom + }, self.viewerContainer); + var timeout, firstZoom = true; + self.pinchZoom.done = function(scale) { + clearTimeout(timeout) + timeout = setTimeout(function() { + if (self.options.renderType === "svg") { + return + } + if (scale <= 1 || self.options.scale == 3) { + return + } + console.log(scale, self.options.scale) + if (self.thePDF) { + self.thePDF.destroy(); + self.thePDF = null; + } + self.options.scale = scale; + self.renderPdf(self.options, { data: self.cacheData }) + }, 310) + if (scale == 1) { + if (self.viewerContainer) { + self.viewerContainer.css({ + '-webkit-overflow-scrolling': 'touch' + }) + } + + } else { + if (self.viewerContainer) { + self.viewerContainer.css({ + '-webkit-overflow-scrolling': 'auto' + }) + } + } + var arr1 = self.eventType["zoom"]; + if (arr1 && arr1 instanceof Array) { + for (var i = 0; i < arr1.length; i++) { + arr1[i] && arr1[i].call(self, scale) + } + } + } + if (options.zoomEnable) { + self.pinchZoom.enable() + } else { + self.pinchZoom.disable() + } + } + + var promise = Promise.resolve(); + var num = Math.floor(100 / self.totalNum).toFixed(2); + for (var i = 1; i <= self.totalNum; i++) { + self.cache[i + ""] = { + page: null, + loaded: false, + container: null, + scaledViewport: null + }; + promise = promise.then(function(pageNum) { + return self.thePDF.getPage(pageNum).then(function(page) { + self.cache[pageNum + ""].page = page; + var viewport = page.getViewport(options.scale); + var scale = (self.docWidth / viewport.width).toFixed(2) + var scaledViewport = page.getViewport(parseFloat(scale)) + var div = document.getElementById('pageContainer' + pageNum) + var container; + if (!div) { + container = document.createElement('div'); + container.id = 'pageContainer' + pageNum; + container.className = 'pageContainer'; + container.setAttribute('name', 'page=' + pageNum); + container.setAttribute('title', 'Page ' + pageNum); + var loadEffect = document.createElement('div'); + loadEffect.className = 'loadEffect'; + container.appendChild(loadEffect); + self.viewer[0].appendChild(container); + if (window.ActiveXObject || "ActiveXObject" in window) { + $(container).css({ + 'width': viewport.width + 'px', + "height": viewport.height + 'px' + }).attr("data-scale", viewport.width / viewport.height) + } else { + var h = $(container).width() / (viewport.viewBox[2] / viewport.viewBox[3]); + if (h > viewport.height) { + h = viewport.height + } + $(container).css({ + 'max-width': viewport.width, + "max-height": viewport.height, + "min-height": h + 'px' + }).attr("data-scale", viewport.width / viewport.height) + } + } else { + container = div + } + self.cache[pageNum + ""].container = container; + self.cache[pageNum + ""].scaledViewport = scaledViewport; + var sum = 0, + containerH = self.container.height(); + self.pages = self.viewerContainer.find('.pageContainer'); + if (options.resize) { + self.resize() + } + if (self.pages && options.lazy) { + self.pages.each(function(index, obj) { + var top = obj.offsetTop; + if (top <= containerH) { + sum = index + 1; + self.cache[sum + ""].loaded = true; + } + }) + } + + if (pageNum > sum && options.lazy) { + return + } + if (options.renderType === "svg") { + return self.renderSvg(page, scaledViewport, pageNum, num, container, options, viewport) + } + return self.renderCanvas(page, scaledViewport, pageNum, num, container, options) + }); + }.bind(null, i)); + } + + }).catch(function(err) { + self.loading.hide(); + var time = new Date().getTime(); + self.endTime = time - self.initTime; + var arr1 = self.eventType["complete"]; + if (arr1 && arr1 instanceof Array) { + for (var i = 0; i < arr1.length; i++) { + arr1[i] && arr1[i].call(self, "error", err.message, self.endTime) + } + } + var arr2 = self.eventType["error"]; + if (arr2 && arr2 instanceof Array) { + for (var i = 0; i < arr2.length; i++) { + arr2[i] && arr2[i].call(self, err.message, self.endTime) + } + } + }) + }, + renderSvg: function(page, scaledViewport, pageNum, num, container, options, viewport) { + var self = this; + return page.getOperatorList().then(function(opList) { + var svgGfx = new pdfjsLib.SVGGraphics(page.commonObjs, page.objs); + return svgGfx.getSVG(opList, scaledViewport).then(function(svg) { + self.loadedCount++; + container.children[0].style.display = "none"; + container.appendChild(svg); + svg.style.width = "100%"; + svg.style.height = "100%"; + if (self.options.loadingBar) { + self.progress.css({ + width: num * self.loadedCount + "%" + }) + } + var time = new Date().getTime(); + var arr1 = self.eventType["render"]; + if (arr1 && arr1 instanceof Array) { + for (var i = 0; i < arr1.length; i++) { + arr1[i] && arr1[i].call(self, pageNum, time - self.initTime, container) + } + } + if (self.loadedCount === self.totalNum) { + self.finalRender(options) + } + }); + }); + }, + renderCanvas: function(page, viewport, pageNum, num, container, options) { + var self = this; + var viewport = page.getViewport(options.scale); + var scale = (self.docWidth / viewport.width).toFixed(2) + var canvas = document.createElement("canvas"); + var obj2 = { + 'Cheight': viewport.height * scale, + 'width': viewport.width, + 'height': viewport.height, + 'canvas': canvas, + 'index': self.loadedCount + } + var context = canvas.getContext('2d'); + canvas.height = viewport.height; + canvas.width = viewport.width; + if (self.options.loadingBar) { + self.progress.css({ + width: num * self.loadedCount + "%" + }) + } + obj2.src = obj2.canvas.toDataURL("image/jpeg"); + return page.render({ + canvasContext: context, + viewport: viewport + }).then(function() { + self.loadedCount++; + var img = new Image(); + var time = new Date().getTime(); + var time2 = 0; + if (self.renderTime == 0) { + time2 = time - self.startTime + } else { + time2 = time - self.renderTime + } + obj2.src = obj2.canvas.toDataURL("image/jpeg"); + img.src = obj2.src; + img.className = "canvasImg" + pageNum; + var img0 = $("#pageContainer" + pageNum).find(".canvasImg" + pageNum)[0]; + if (container && !img0) { + container.appendChild(img); + img.onload = function() { + // $(container).css({ + // "min-height": img.height + 'px' + // }) + } + } else if (img0) { + img0.src = obj2.src + } + var time = new Date().getTime(); + var arr1 = self.eventType["render"]; + if (arr1 && arr1 instanceof Array) { + for (var i = 0; i < arr1.length; i++) { + arr1[i] && arr1[i].call(self, pageNum, time - self.initTime, container) + } + } + if (self.loadedCount === self.totalNum) { + self.finalRender(options) + } + }) + }, + finalRender: function(options) { + var time = new Date().getTime(); + var self = this; + if (self.options.loadingBar) { + self.progress.css({ + width: "100%" + }); + } + setTimeout(function() { + self.loadingBar.hide(); + }, 300) + self.endTime = time - self.initTime; + if (options.renderType === "svg") { + if (self.totalNum !== 1) { + self.cache[(self.totalNum - 1) + ""].loaded = true; + } else { + self.cache["1"].loaded = true; + } + } + if (options.zoomEnable) { + if (self.pinchZoom) { + self.pinchZoom.enable() + } + } else { + if (self.pinchZoom) { + self.pinchZoom.disable() + } + } + var arr1 = self.eventType["complete"]; + if (arr1 && arr1 instanceof Array) { + for (var i = 0; i < arr1.length; i++) { + arr1[i] && arr1[i].call(self, "success", "pdf加载完成", self.endTime) + } + } + var arr2 = self.eventType["success"]; + if (arr2 && arr2 instanceof Array) { + for (var i = 0; i < arr2.length; i++) { + arr2[i] && arr2[i].call(self, self.endTime) + } + } + }, + resize: function() { + var self = this; + if (self.resizeEvent) { + return + } + self.resizeEvent = true; + var timer; + if (self.pages) { + self.getH() + $(window).on("resize", function() { + clearTimeout(timer) + timer = setTimeout(function() { + var winWidth = $(window).width(); + if (self.winWidth !== winWidth) { + self.pages.each(function(i, item) { + var w = $(item).width(), + s = $(item).attr("data-scale"); + $(item).css({ + "min-height": w / s + 'px' + }) + }) + } + self.getH() + }, 300) + }) + } + }, + getH: function() { + var self = this; + var num = 0; + self.pages.each(function(i, item) { + var w = $(item).height(); + num + w + }) + $(".pinch-zoom-container").height(num) + }, + show: function(callback) { + this.container.show(); + callback && callback.call(this) + var arr = this.eventType["show"]; + if (arr && arr instanceof Array) { + for (var i = 0; i < arr.length; i++) { + arr[i] && arr[i].call(this) + } + } + }, + hide: function(callback) { + this.container.hide() + callback && callback.call(this) + var arr = this.eventType["hide"]; + if (arr && arr instanceof Array) { + for (var i = 0; i < arr.length; i++) { + arr[i] && arr[i].call(this) + } + } + }, + on: function(type, callback) { + if (this.eventType[type] && this.eventType[type] instanceof Array) { + this.eventType[type].push(callback) + } + this.eventType[type] = [callback] + }, + off: function(type) { + if (type !== undefined) { + this.eventType[type] = [null] + } else { + for (var i in this.eventType) { + this.eventType[i] = [null] + } + } + }, + scrollEnable: function(flag) { + if (flag === false) { + this.viewerContainer.css({ + "overflow": "hidden" + }) + } else { + this.viewerContainer.css({ + "overflow": "auto" + }) + } + var arr = this.eventType["scrollEnable"]; + if (arr && arr instanceof Array) { + for (var i = 0; i < arr.length; i++) { + arr[i] && arr[i].call(this, flag) + } + } + }, + zoomEnable: function(flag) { + if (!this.pinchZoom) { + return + } + if (flag === false) { + this.pinchZoom.disable() + } else { + this.pinchZoom.enable() + } + var arr = this.eventType["zoomEnable"]; + if (arr && arr instanceof Array) { + for (var i = 0; i < arr.length; i++) { + arr[i] && arr[i].call(this, flag) + } + } + }, + reset: function(callback) { + if (this.pinchZoom) { + this.pinchZoom.offset.y = 0; + this.pinchZoom.offset.x = 0; + this.pinchZoom.lastclientY = 0; + this.pinchZoom.zoomFactor = 1; + this.pinchZoom.update(); + } + if (this.viewerContainer) { + this.viewerContainer.scrollTop(0); + } + callback && callback.call(this) + var arr = this.eventType["reset"]; + if (arr && arr instanceof Array) { + for (var i = 0; i < arr.length; i++) { + arr[i] && arr[i].call(this) + } + } + }, + destroy: function(callback) { + this.reset(); + this.off(); + if (this.thePDF) { + this.thePDF.destroy(); + this.thePDF = null; + } + if (this.viewerContainer) { + this.viewerContainer.remove(); + this.viewerContainer = null; + } + if (this.container) { + this.container.html(''); + } + this.totalNum = null; + this.pages = null; + this.initTime = 0; + this.endTime = 0; + this.viewer = null; + this.pageNum = null; + this.pageNow = null; + this.pageTotal = null; + this.loadingBar = null; + this.progress = null; + this.loadedCount = 0; + this.timer = null; + this.show = null; + this.hide = null; + callback && callback.call(this) + var arr = this.eventType["destroy"]; + if (arr && arr instanceof Array) { + for (var i = 0; i < arr.length; i++) { + arr[i] && arr[i].call(this) + } + } + } + } + return Pdfh5; +}); \ No newline at end of file diff --git a/qdntz/inc/tzzc/index.html b/qdntz/inc/tzzc/index.html new file mode 100644 index 0000000..3f3d76e --- /dev/null +++ b/qdntz/inc/tzzc/index.html @@ -0,0 +1,26 @@ + + + + 投资政策 + + + + + +
+ + + \ No newline at end of file diff --git a/qdntz/inc/tzzc/pdfobject.min.js b/qdntz/inc/tzzc/pdfobject.min.js new file mode 100644 index 0000000..026b4d2 --- /dev/null +++ b/qdntz/inc/tzzc/pdfobject.min.js @@ -0,0 +1,8 @@ +/* + PDFObject v2.0.201604172 + https://github.com/pipwerks/PDFObject + Copyright (c) 2008-2016 Philip Hutchison + MIT-style license: http://pipwerks.mit-license.org/ + UMD module pattern from https://github.com/umdjs/umd/blob/master/templates/returnExports.js +*/ +(function(root,factory){if(typeof define==="function"&&define.amd){define([],factory)}else if(typeof module==="object"&&module.exports){module.exports=factory()}else{root.PDFObject=factory()}})(this,function(){"use strict";if(typeof window==="undefined"||typeof navigator==="undefined"){return false}var pdfobjectversion="2.0.201604172",supportsPDFs,createAXO,isIE,supportsPdfMimeType=typeof navigator.mimeTypes["application/pdf"]!=="undefined",supportsPdfActiveX,buildFragmentString,log,embedError,embed,getTargetElement,generatePDFJSiframe,isIOS=function(){return/iphone|ipad|ipod/i.test(navigator.userAgent.toLowerCase())}(),generateEmbedElement;createAXO=function(type){var ax;try{ax=new ActiveXObject(type)}catch(e){ax=null}return ax};isIE=function(){return!!(window.ActiveXObject||"ActiveXObject"in window)};supportsPdfActiveX=function(){return!!(createAXO("AcroPDF.PDF")||createAXO("PDF.PdfCtrl"))};supportsPDFs=supportsPdfMimeType||isIE()&&supportsPdfActiveX();buildFragmentString=function(pdfParams){var string="",prop;if(pdfParams){for(prop in pdfParams){if(pdfParams.hasOwnProperty(prop)){string+=encodeURIComponent(prop)+"="+encodeURIComponent(pdfParams[prop])+"&"}}if(string){string="#"+string;string=string.slice(0,string.length-1)}}return string};log=function(msg){if(typeof console!=="undefined"&&console.log){console.log("[PDFObject] "+msg)}};embedError=function(msg){log(msg);return false};getTargetElement=function(targetSelector){var targetNode=document.body;if(typeof targetSelector==="string"){targetNode=document.querySelector(targetSelector)}else if(typeof jQuery!=="undefined"&&targetSelector instanceof jQuery&&targetSelector.length){targetNode=targetSelector.get(0)}else if(typeof targetSelector.nodeType!=="undefined"&&targetSelector.nodeType===1){targetNode=targetSelector}return targetNode};generatePDFJSiframe=function(targetNode,url,pdfOpenFragment,PDFJS_URL,id){var fullURL=PDFJS_URL+"?file="+encodeURIComponent(url)+pdfOpenFragment;var scrollfix=isIOS?"-webkit-overflow-scrolling: touch; overflow-y: scroll; ":"overflow: hidden; ";var iframe="
";targetNode.className+=" pdfobject-container";targetNode.style.position="relative";targetNode.style.overflow="auto";targetNode.innerHTML=iframe;return targetNode.getElementsByTagName("iframe")[0]};generateEmbedElement=function(targetNode,targetSelector,url,pdfOpenFragment,width,height,id){var style="";if(targetSelector&&targetSelector!==document.body){style="width: "+width+"; height: "+height+";"}else{style="position: absolute; top: 0; right: 0; bottom: 0; left: 0; width: 100%; height: 100%;"}targetNode.className+=" pdfobject-container";targetNode.innerHTML="";return targetNode.getElementsByTagName("embed")[0]};embed=function(url,targetSelector,options){if(typeof url!=="string"){return embedError("URL is not valid")}targetSelector=typeof targetSelector!=="undefined"?targetSelector:false;options=typeof options!=="undefined"?options:{};var id=options.id&&typeof options.id==="string"?"id='"+options.id+"'":"",page=options.page?options.page:false,pdfOpenParams=options.pdfOpenParams?options.pdfOpenParams:{},fallbackLink=typeof options.fallbackLink!=="undefined"?options.fallbackLink:true,width=options.width?options.width:"100%",height=options.height?options.height:"100%",forcePDFJS=typeof options.forcePDFJS==="boolean"?options.forcePDFJS:false,PDFJS_URL=options.PDFJS_URL?options.PDFJS_URL:false,targetNode=getTargetElement(targetSelector),fallbackHTML="",pdfOpenFragment="",fallbackHTML_default="

This browser does not support inline PDFs. Please download the PDF to view it: Download PDF

";if(!targetNode){return embedError("Target element cannot be determined")}if(page){pdfOpenParams.page=page}pdfOpenFragment=buildFragmentString(pdfOpenParams);if(forcePDFJS&&PDFJS_URL){return generatePDFJSiframe(targetNode,url,pdfOpenFragment,PDFJS_URL,id)}else if(supportsPDFs){return generateEmbedElement(targetNode,targetSelector,url,pdfOpenFragment,width,height,id)}else{if(PDFJS_URL){return generatePDFJSiframe(targetNode,url,pdfOpenFragment,PDFJS_URL,id)}else if(fallbackLink){fallbackHTML=typeof fallbackLink==="string"?fallbackLink:fallbackHTML_default;targetNode.innerHTML=fallbackHTML.replace(/\[url\]/g,url)}return embedError("This browser does not support embedded PDFs")}};return{embed:function(a,b,c){return embed(a,b,c)},pdfobjectversion:function(){return pdfobjectversion}(),supportsPDFs:function(){return supportsPDFs}()}}); \ No newline at end of file diff --git a/qdntz/inc/tzzc/黔东南州产业大招商政策摘编(2023版).pdf b/qdntz/inc/tzzc/黔东南州产业大招商政策摘编(2023版).pdf new file mode 100644 index 0000000..8852b98 Binary files /dev/null and b/qdntz/inc/tzzc/黔东南州产业大招商政策摘编(2023版).pdf differ diff --git a/qdntz/inc/xmtzk/css/01.css b/qdntz/inc/xmtzk/css/01.css new file mode 100644 index 0000000..583e37d --- /dev/null +++ b/qdntz/inc/xmtzk/css/01.css @@ -0,0 +1,80 @@ +*{ + margin: 0; + padding: 0; + text-decoration: none !important; + width: 100%; + height: 100%; +} +div,a{ + display: block; +} +p,h5{ + height: auto; + padding: auto; + margin: auto; +} +/* 最大盒子 */ +.container-01{ + max-width: 800px; + width: 100%; + height:100%; + margin: 0 auto; +} +/* 整体盒子大小 */ +.Background{ + max-width:600px; + min-height:680px; + margin:0 auto; + width: 100%; + height:100%; +} +.Background-01{ + background-repeat:round; + background-size: 100% 100%; + background-image: url('../image/backgroudImg.7baac09c.jpg'); +} +.btn_box01{ + height: 60%; +} +.btn_box02{ + height: 40%; +} +.btn_box02_small_01{ + width: 50%; + margin: 0 auto; +} +.btn_01{ + width: 100%; + height: 12%; + text-align: center; + margin-top: 4%; +} +/* 二级页面 */ +.column_01{ + height: 6%; + line-height: 41px; + background-color: #0d6efd; + color:#fff; +} +.return_Arrow{ + height: 15px; + width: 15px; + line-height: 40px; + float: left; +} +.input_01{ + height: 6%; +} +table{ + height: auto; +} + +.erweima{ + width: 120px; + height: 120px; + margin: 40% auto; +} +.erweima_02{ + width: 80px; + height: 80px; +} diff --git a/qdntz/inc/xmtzk/css/bootstrap.min.css b/qdntz/inc/xmtzk/css/bootstrap.min.css new file mode 100644 index 0000000..97551fe --- /dev/null +++ b/qdntz/inc/xmtzk/css/bootstrap.min.css @@ -0,0 +1,7 @@ +@charset "UTF-8";/*! + * Bootstrap v5.1.2 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-color-rgb:33,37,41;--bs-body-bg-rgb:255,255,255;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-bg:#fff}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:#6c757d}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{width:100%;padding-right:var(--bs-gutter-x,.75rem);padding-left:var(--bs-gutter-x,.75rem);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.table{--bs-table-bg:transparent;--bs-table-accent-bg:transparent;--bs-table-striped-color:#212529;--bs-table-striped-bg:rgba(0, 0, 0, 0.05);--bs-table-active-color:#212529;--bs-table-active-bg:rgba(0, 0, 0, 0.1);--bs-table-hover-color:#212529;--bs-table-hover-bg:rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;color:#212529;vertical-align:top;border-color:#dee2e6}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>:not(:first-child){border-top:2px solid currentColor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-accent-bg:var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg:var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover>*{--bs-table-accent-bg:var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg:#cfe2ff;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000;color:#000;border-color:#bacbe6}.table-secondary{--bs-table-bg:#e2e3e5;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000;color:#000;border-color:#cbccce}.table-success{--bs-table-bg:#d1e7dd;--bs-table-striped-bg:#c7dbd2;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000;color:#000;border-color:#bcd0c7}.table-info{--bs-table-bg:#cff4fc;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000;color:#000;border-color:#badce3}.table-warning{--bs-table-bg:#fff3cd;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000;color:#000;border-color:#e6dbb9}.table-danger{--bs-table-bg:#f8d7da;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000;color:#000;border-color:#dfc2c4}.table-light{--bs-table-bg:#f8f9fa;--bs-table-striped-bg:#ecedee;--bs-table-striped-color:#000;--bs-table-active-bg:#dfe0e1;--bs-table-active-color:#000;--bs-table-hover-bg:#e5e6e7;--bs-table-hover-color:#000;color:#000;border-color:#dfe0e1}.table-dark{--bs-table-bg:#212529;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:#fff;border-color:#373b3e}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width:575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#212529;background-color:#fff;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + .5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1.5em;border-radius:.25rem}.form-control-color::-webkit-color-swatch{height:1.5em;border-radius:.25rem}.form-select{display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;-moz-padding-start:calc(0.75rem - 3px);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #212529}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem;border-radius:.2rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:.3rem}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#0d6efd;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid transparent;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media (prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control{padding:1rem .75rem}.form-floating>.form-control::-moz-placeholder{color:transparent}.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(25,135,84,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#198754;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:#198754}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:#198754}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:#198754}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group .form-control.is-valid,.input-group .form-select.is-valid,.was-validated .input-group .form-control:valid,.was-validated .input-group .form-select:valid{z-index:1}.input-group .form-control.is-valid:focus,.input-group .form-select.is-valid:focus,.was-validated .input-group .form-control:valid:focus,.was-validated .input-group .form-select:valid:focus{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:#dc3545}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:#dc3545}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:#dc3545}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group .form-control.is-invalid,.input-group .form-select.is-invalid,.was-validated .input-group .form-control:invalid,.was-validated .input-group .form-select:invalid{z-index:2}.input-group .form-control.is-invalid:focus,.input-group .form-select.is-invalid:focus,.was-validated .input-group .form-control:invalid:focus,.was-validated .input-group .form-select:invalid:focus{z-index:3}.btn{display:inline-block;align-self:center;font-weight:400;line-height:1.5;color:#212529;text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-primary{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-primary:hover{color:#fff;background-color:#0b5ed7;border-color:#0a58ca}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#0b5ed7;border-color:#0a58ca;box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-check:active+.btn-primary,.btn-check:checked+.btn-primary,.btn-primary.active,.btn-primary:active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0a58ca;border-color:#0a53be}.btn-check:active+.btn-primary:focus,.btn-check:checked+.btn-primary:focus,.btn-primary.active:focus,.btn-primary:active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5c636a;border-color:#565e64}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#fff;background-color:#5c636a;border-color:#565e64;box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-check:active+.btn-secondary,.btn-check:checked+.btn-secondary,.btn-secondary.active,.btn-secondary:active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#565e64;border-color:#51585e}.btn-check:active+.btn-secondary:focus,.btn-check:checked+.btn-secondary:focus,.btn-secondary.active:focus,.btn-secondary:active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-success{color:#fff;background-color:#198754;border-color:#198754}.btn-success:hover{color:#fff;background-color:#157347;border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#157347;border-color:#146c43;box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-check:active+.btn-success,.btn-check:checked+.btn-success,.btn-success.active,.btn-success:active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f}.btn-check:active+.btn-success:focus,.btn-check:checked+.btn-success:focus,.btn-success.active:focus,.btn-success:active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#198754;border-color:#198754}.btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{color:#000;background-color:#31d2f2;border-color:#25cff2;box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-check:active+.btn-info,.btn-check:checked+.btn-info,.btn-info.active,.btn-info:active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2}.btn-check:active+.btn-info:focus,.btn-check:checked+.btn-info:focus,.btn-info.active:focus,.btn-info:active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-info.disabled,.btn-info:disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;border-color:#ffc720;box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-check:active+.btn-warning,.btn-check:checked+.btn-warning,.btn-warning.active,.btn-warning:active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720}.btn-check:active+.btn-warning:focus,.btn-check:checked+.btn-warning:focus,.btn-warning.active:focus,.btn-warning:active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#bb2d3b;border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#bb2d3b;border-color:#b02a37;box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-check:active+.btn-danger,.btn-check:checked+.btn-danger,.btn-danger.active,.btn-danger:active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:active+.btn-danger:focus,.btn-check:checked+.btn-danger:focus,.btn-danger.active:focus,.btn-danger:active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#f9fafb;border-color:#f9fafb;box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-check:active+.btn-light,.btn-check:checked+.btn-light,.btn-light.active,.btn-light:active,.show>.btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:active+.btn-light:focus,.btn-check:checked+.btn-light:focus,.btn-light.active:focus,.btn-light:active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-light.disabled,.btn-light:disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#212529;border-color:#212529}.btn-dark:hover{color:#fff;background-color:#1c1f23;border-color:#1a1e21}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#1c1f23;border-color:#1a1e21;box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-check:active+.btn-dark,.btn-check:checked+.btn-dark,.btn-dark.active,.btn-dark:active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f}.btn-check:active+.btn-dark:focus,.btn-check:checked+.btn-dark:focus,.btn-dark.active:focus,.btn-dark:active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#212529;border-color:#212529}.btn-outline-primary{color:#0d6efd;border-color:#0d6efd}.btn-outline-primary:hover{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-check:active+.btn-outline-primary,.btn-check:checked+.btn-outline-primary,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show,.btn-outline-primary:active{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:active+.btn-outline-primary:focus,.btn-check:checked+.btn-outline-primary:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus,.btn-outline-primary:active:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#0d6efd;background-color:transparent}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-check:active+.btn-outline-secondary,.btn-check:checked+.btn-outline-secondary,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show,.btn-outline-secondary:active{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:active+.btn-outline-secondary:focus,.btn-check:checked+.btn-outline-secondary:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus,.btn-outline-secondary:active:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-success{color:#198754;border-color:#198754}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-check:active+.btn-outline-success,.btn-check:checked+.btn-outline-success,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show,.btn-outline-success:active{color:#fff;background-color:#198754;border-color:#198754}.btn-check:active+.btn-outline-success:focus,.btn-check:checked+.btn-outline-success:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus,.btn-outline-success:active:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#198754;background-color:transparent}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-check:active+.btn-outline-info,.btn-check:checked+.btn-outline-info,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show,.btn-outline-info:active{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:active+.btn-outline-info:focus,.btn-check:checked+.btn-outline-info:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus,.btn-outline-info:active:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#0dcaf0;background-color:transparent}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-check:active+.btn-outline-warning,.btn-check:checked+.btn-outline-warning,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show,.btn-outline-warning:active{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:active+.btn-outline-warning:focus,.btn-check:checked+.btn-outline-warning:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus,.btn-outline-warning:active:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-check:active+.btn-outline-danger,.btn-check:checked+.btn-outline-danger,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show,.btn-outline-danger:active{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:active+.btn-outline-danger:focus,.btn-check:checked+.btn-outline-danger:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus,.btn-outline-danger:active:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-check:active+.btn-outline-light,.btn-check:checked+.btn-outline-light,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show,.btn-outline-light:active{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:active+.btn-outline-light:focus,.btn-check:checked+.btn-outline-light:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus,.btn-outline-light:active:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-dark{color:#212529;border-color:#212529}.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-check:active+.btn-outline-dark,.btn-check:checked+.btn-outline-dark,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show,.btn-outline-dark:active{color:#fff;background-color:#212529;border-color:#212529}.btn-check:active+.btn-outline-dark:focus,.btn-check:checked+.btn-outline-dark:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus,.btn-outline-dark:active:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#212529;background-color:transparent}.btn-link{font-weight:400;color:#0d6efd;text-decoration:underline}.btn-link:hover{color:#0a58ca}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropend,.dropstart,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;z-index:1000;display:none;min-width:10rem;padding:.5rem 0;margin:0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:.125rem}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#212529;text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#1e2125;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0d6efd}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#212529}.dropdown-menu-dark{color:#dee2e6;background-color:#343a40;border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item{color:#dee2e6}.dropdown-menu-dark .dropdown-item:focus,.dropdown-menu-dark .dropdown-item:hover{color:#fff;background-color:rgba(255,255,255,.15)}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#0d6efd}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#adb5bd}.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item-text{color:#dee2e6}.dropdown-menu-dark .dropdown-header{color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;color:#0d6efd;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:#0a58ca}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;background:0 0;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6;isolation:isolate}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{background:0 0;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#0d6efd}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:.5rem;padding-bottom:.5rem}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;text-decoration:none;white-space:nowrap}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem;transition:box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas-header{display:none}.navbar-expand-sm .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-sm .offcanvas-bottom,.navbar-expand-sm .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas-header{display:none}.navbar-expand-md .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-md .offcanvas-bottom,.navbar-expand-md .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas-header{display:none}.navbar-expand-lg .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-lg .offcanvas-bottom,.navbar-expand-lg .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas-header{display:none}.navbar-expand-xl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-xl .offcanvas-bottom,.navbar-expand-xl .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-xxl .offcanvas-bottom,.navbar-expand-xxl .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas-header{display:none}.navbar-expand .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand .offcanvas-bottom,.navbar-expand .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.55)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.55);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.55)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.55)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.55);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:1rem 1rem}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.5rem 1rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.5rem;margin-bottom:-.5rem;margin-left:-.5rem;border-bottom:0}.card-header-pills{margin-right:-.5rem;margin-left:-.5rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-group>.card{margin-bottom:.75rem}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:1rem 1.25rem;font-size:1rem;color:#212529;text-align:left;background-color:#fff;border:0;border-radius:0;overflow-anchor:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,border-radius .15s ease}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:#0c63e4;background-color:#e7f1ff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.125)}.accordion-button:not(.collapsed)::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");transform:rotate(-180deg)}.accordion-button::after{flex-shrink:0;width:1.25rem;height:1.25rem;margin-left:auto;content:"";background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-size:1.25rem;transition:transform .2s ease-in-out}@media (prefers-reduced-motion:reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.accordion-header{margin-bottom:0}.accordion-item{background-color:#fff;border:1px solid rgba(0,0,0,.125)}.accordion-item:first-of-type{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.accordion-item:first-of-type .accordion-button{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-body{padding:1rem 1.25rem}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button{border-radius:0}.breadcrumb{display:flex;flex-wrap:wrap;padding:0 0;margin-bottom:1rem;list-style:none}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#6c757d;content:var(--bs-breadcrumb-divider, "/")}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;color:#0d6efd;text-decoration:none;background-color:#fff;border:1px solid #dee2e6;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:#0a58ca;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;color:#0a58ca;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.page-item:not(:first-child) .page-link{margin-left:-1px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#dee2e6}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{position:relative;padding:1rem 1rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{color:#084298;background-color:#cfe2ff;border-color:#b6d4fe}.alert-primary .alert-link{color:#06357a}.alert-secondary{color:#41464b;background-color:#e2e3e5;border-color:#d3d6d8}.alert-secondary .alert-link{color:#34383c}.alert-success{color:#0f5132;background-color:#d1e7dd;border-color:#badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{color:#055160;background-color:#cff4fc;border-color:#b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5}.alert-warning .alert-link{color:#523e02}.alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{color:#636464;background-color:#fefefe;border-color:#fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{color:#141619;background-color:#d3d3d4;border-color:#bcbebf}.alert-dark .alert-link{color:#101214}@-webkit-keyframes progress-bar-stripes{0%{background-position-x:1rem}}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#0d6efd;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:1s linear infinite progress-bar-stripes;animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>li::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.5rem 1rem;color:#212529;text-decoration:none;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#084298;background-color:#cfe2ff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#084298;background-color:#bacbe6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#084298;border-color:#084298}.list-group-item-secondary{color:#41464b;background-color:#e2e3e5}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#41464b;background-color:#cbccce}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#41464b;border-color:#41464b}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:#000;background:transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;border:0;border-radius:.25rem;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25);opacity:1}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.toast{width:350px;max-width:100%;font-size:.875rem;pointer-events:auto;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .5rem 1rem rgba(0,0,0,.15);border-radius:.25rem}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:.75rem}.toast-header{display:flex;align-items:center;padding:.5rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-header .btn-close{margin-right:-.375rem;margin-left:.75rem}.toast-body{padding:.75rem;word-wrap:break-word}.modal{position:fixed;top:0;left:0;z-index:1055;display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1050;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .btn-close{padding:.5rem .5rem;margin:-.5rem -.5rem -.5rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-down .modal-footer{border-radius:0}}.tooltip{position:absolute;z-index:1080;display:block;margin:0;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .tooltip-arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[data-popper-placement^=right],.bs-tooltip-end{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[data-popper-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[data-popper-placement^=left],.bs-tooltip-start{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1070;display:block;max-width:276px;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .popover-arrow{position:absolute;display:block;width:1rem;height:.5rem}.popover .popover-arrow::after,.popover .popover-arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-top>.popover-arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-end>.popover-arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f0f0f0}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-start>.popover-arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem 1rem;margin-bottom:0;font-size:1rem;background-color:#f0f0f0;border-bottom:1px solid rgba(0,0,0,.2);border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:1rem 1rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%;list-style:none}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}@-webkit-keyframes spinner-border{to{transform:rotate(360deg)}}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.offcanvas{position:fixed;bottom:0;z-index:1045;display:flex;flex-direction:column;max-width:100%;visibility:hidden;background-color:#fff;background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1rem}.offcanvas-header .btn-close{padding:.5rem .5rem;margin-top:-.5rem;margin-right:-.5rem;margin-bottom:-.5rem}.offcanvas-title{margin-bottom:0;line-height:1.5}.offcanvas-body{flex-grow:1;padding:1rem 1rem;overflow-y:auto}.offcanvas-start{top:0;left:0;width:400px;border-right:1px solid rgba(0,0,0,.2);transform:translateX(-100%)}.offcanvas-end{top:0;right:0;width:400px;border-left:1px solid rgba(0,0,0,.2);transform:translateX(100%)}.offcanvas-top{top:0;right:0;left:0;height:30vh;max-height:100%;border-bottom:1px solid rgba(0,0,0,.2);transform:translateY(-100%)}.offcanvas-bottom{right:0;left:0;height:30vh;max-height:100%;border-top:1px solid rgba(0,0,0,.2);transform:translateY(100%)}.offcanvas.show{transform:none}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentColor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{-webkit-animation:placeholder-glow 2s ease-in-out infinite;animation:placeholder-glow 2s ease-in-out infinite}@-webkit-keyframes placeholder-glow{50%{opacity:.2}}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{-webkit-mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%;-webkit-animation:placeholder-wave 2s linear infinite;animation:placeholder-wave 2s linear infinite}@-webkit-keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}@keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.link-primary{color:#0d6efd}.link-primary:focus,.link-primary:hover{color:#0a58ca}.link-secondary{color:#6c757d}.link-secondary:focus,.link-secondary:hover{color:#565e64}.link-success{color:#198754}.link-success:focus,.link-success:hover{color:#146c43}.link-info{color:#0dcaf0}.link-info:focus,.link-info:hover{color:#3dd5f3}.link-warning{color:#ffc107}.link-warning:focus,.link-warning:hover{color:#ffcd39}.link-danger{color:#dc3545}.link-danger:focus,.link-danger:hover{color:#b02a37}.link-light{color:#f8f9fa}.link-light:focus,.link-light:hover{color:#f9fafb}.link-dark{color:#212529}.link-dark:focus,.link-dark:hover{color:#1a1e21}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:75%}.ratio-16x9{--bs-aspect-ratio:56.25%}.ratio-21x9{--bs-aspect-ratio:42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentColor;opacity:.25}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:1px solid #dee2e6!important}.border-0{border:0!important}.border-top{border-top:1px solid #dee2e6!important}.border-top-0{border-top:0!important}.border-end{border-right:1px solid #dee2e6!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:1px solid #dee2e6!important}.border-start-0{border-left:0!important}.border-primary{border-color:#0d6efd!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#198754!important}.border-info{border-color:#0dcaf0!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#212529!important}.border-white{border-color:#fff!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-light{font-weight:300!important}.fw-lighter{font-weight:lighter!important}.fw-normal{font-weight:400!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-color-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:#6c757d!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:rgba(255,255,255,.5)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:0.25}.text-opacity-50{--bs-text-opacity:0.5}.text-opacity-75{--bs-text-opacity:0.75}.text-opacity-100{--bs-text-opacity:1}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity:1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(var(--bs-body-bg-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-opacity-10{--bs-bg-opacity:0.1}.bg-opacity-25{--bs-bg-opacity:0.25}.bg-opacity-50{--bs-bg-opacity:0.5}.bg-opacity-75{--bs-bg-opacity:0.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:.25rem!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:.2rem!important}.rounded-2{border-radius:.25rem!important}.rounded-3{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-end{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-start{border-bottom-left-radius:.25rem!important;border-top-left-radius:.25rem!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/qdntz/inc/xmtzk/css/index.css b/qdntz/inc/xmtzk/css/index.css new file mode 100644 index 0000000..f831f4a --- /dev/null +++ b/qdntz/inc/xmtzk/css/index.css @@ -0,0 +1,69 @@ + +*{ + margin: 0; + padding: 0; + text-decoration: none !important; + height: 100%; + width: 100%; +} +div,a{ + display: block; +} +/* 最大盒子 */ +.container-01{ + max-width: 800px; + width: 100%; + height:100%; + margin: 0 auto; +} +/* 整体盒子大小 */ +.Background{ + max-width:600px; + min-height:680px; + margin:0 auto; + width: 100%; + height:100%; +} +.Background-01{ + background-repeat:round; + background-image: url('../image/backgroudImg.7baac09c.jpg'); +} +.btn_box01{ + height: 40%; +} +.btn_box02{ + height: 40%; +} +.btn_box02_small_01{ + width: 50%; + margin: 0 auto; +} +.btn_01{ + width: 100%; + height: 12%; + text-align: center; + margin-top: 4%; +} + +/* 二级页面 */ +.column_01{ + height: 5%; + line-height: 38.55px; + background-color: #0d6efd; + color:#fff; +} +.return_Arrow{ + height: 15px; + width: 15px; + line-height: 38.55px; + float: left; + margin-left: 5px; +} +.input_01{ + height: 40px; +} +.container-02{ + height: 580px; +} + +/*三级页面*/ diff --git a/qdntz/inc/xmtzk/image/02.jpg b/qdntz/inc/xmtzk/image/02.jpg new file mode 100644 index 0000000..7fb94b5 Binary files /dev/null and b/qdntz/inc/xmtzk/image/02.jpg differ diff --git a/qdntz/inc/xmtzk/image/1679366979689.jpg b/qdntz/inc/xmtzk/image/1679366979689.jpg new file mode 100644 index 0000000..9b96675 Binary files /dev/null and b/qdntz/inc/xmtzk/image/1679366979689.jpg differ diff --git a/qdntz/inc/xmtzk/image/backgroudImg.7baac09c.jpg b/qdntz/inc/xmtzk/image/backgroudImg.7baac09c.jpg new file mode 100644 index 0000000..205418f Binary files /dev/null and b/qdntz/inc/xmtzk/image/backgroudImg.7baac09c.jpg differ diff --git a/qdntz/inc/xmtzk/image/download.png b/qdntz/inc/xmtzk/image/download.png new file mode 100644 index 0000000..c4bd954 Binary files /dev/null and b/qdntz/inc/xmtzk/image/download.png differ diff --git a/qdntz/inc/xmtzk/image/qdn.jpg b/qdntz/inc/xmtzk/image/qdn.jpg new file mode 100644 index 0000000..244bc70 Binary files /dev/null and b/qdntz/inc/xmtzk/image/qdn.jpg differ diff --git a/qdntz/inc/xmtzk/image/soushuo.png b/qdntz/inc/xmtzk/image/soushuo.png new file mode 100644 index 0000000..8d0cdcc Binary files /dev/null and b/qdntz/inc/xmtzk/image/soushuo.png differ diff --git a/qdntz/inc/xmtzk/image/xiangxia.png b/qdntz/inc/xmtzk/image/xiangxia.png new file mode 100644 index 0000000..2314d9c Binary files /dev/null and b/qdntz/inc/xmtzk/image/xiangxia.png differ diff --git a/qdntz/inc/xmtzk/image/xiangyoujiantou.png b/qdntz/inc/xmtzk/image/xiangyoujiantou.png new file mode 100644 index 0000000..bf69000 Binary files /dev/null and b/qdntz/inc/xmtzk/image/xiangyoujiantou.png differ diff --git a/qdntz/inc/xmtzk/image/zuojiantou.png b/qdntz/inc/xmtzk/image/zuojiantou.png new file mode 100644 index 0000000..1879b6b Binary files /dev/null and b/qdntz/inc/xmtzk/image/zuojiantou.png differ diff --git a/qdntz/inc/xmtzk/index.html b/qdntz/inc/xmtzk/index.html new file mode 100644 index 0000000..9607fbc --- /dev/null +++ b/qdntz/inc/xmtzk/index.html @@ -0,0 +1,31 @@ + + + + + + 投资黔东南 + + + + + + + + \ No newline at end of file diff --git a/qdntz/inc/xmtzk/js/bootstrap.bundle.min.js b/qdntz/inc/xmtzk/js/bootstrap.bundle.min.js new file mode 100644 index 0000000..e4f2756 --- /dev/null +++ b/qdntz/inc/xmtzk/js/bootstrap.bundle.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v5.1.2 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t="transitionend",e=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return e},i=t=>{const i=e(t);return i&&document.querySelector(i)?i:null},n=t=>{const i=e(t);return i?document.querySelector(i):null},s=e=>{e.dispatchEvent(new Event(t))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(t):null,a=(t,e,i)=>{Object.keys(i).forEach((n=>{const s=i[n],r=e[n],a=r&&o(r)?"element":null==(l=r)?`${l}`:{}.toString.call(l).match(/\s([a-z]+)/i)[1].toLowerCase();var l;if(!new RegExp(s).test(a))throw new TypeError(`${t.toUpperCase()}: Option "${n}" provided type "${a}" but expected type "${s}".`)}))},l=t=>!(!o(t)||0===t.getClientRects().length)&&"visible"===getComputedStyle(t).getPropertyValue("visibility"),c=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),h=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?h(t.parentNode):null},d=()=>{},u=t=>{t.offsetHeight},f=()=>{const{jQuery:t}=window;return t&&!document.body.hasAttribute("data-bs-no-jquery")?t:null},p=[],m=()=>"rtl"===document.documentElement.dir,g=t=>{var e;e=()=>{const e=f();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(p.length||document.addEventListener("DOMContentLoaded",(()=>{p.forEach((t=>t()))})),p.push(e)):e()},_=t=>{"function"==typeof t&&t()},b=(e,i,n=!0)=>{if(!n)return void _(e);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(i)+5;let r=!1;const a=({target:n})=>{n===i&&(r=!0,i.removeEventListener(t,a),_(e))};i.addEventListener(t,a),setTimeout((()=>{r||s(i)}),o)},v=(t,e,i,n)=>{let s=t.indexOf(e);if(-1===s)return t[!i&&n?t.length-1:0];const o=t.length;return s+=i?1:-1,n&&(s=(s+o)%o),t[Math.max(0,Math.min(s,o-1))]},y=/[^.]*(?=\..*)\.|.*/,w=/\..*/,E=/::\d+$/,A={};let T=1;const O={mouseenter:"mouseover",mouseleave:"mouseout"},C=/^(mouseenter|mouseleave)/i,k=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function L(t,e){return e&&`${e}::${T++}`||t.uidEvent||T++}function x(t){const e=L(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function D(t,e,i=null){const n=Object.keys(t);for(let s=0,o=n.length;sfunction(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};n?n=t(n):i=t(i)}const[o,r,a]=S(e,i,n),l=x(t),c=l[a]||(l[a]={}),h=D(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=L(r,e.replace(y,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(let a=o.length;a--;)if(o[a]===r)return s.delegateTarget=r,n.oneOff&&j.off(t,s.type,e,i),i.apply(r,[s]);return null}}(t,i,n):function(t,e){return function i(n){return n.delegateTarget=t,i.oneOff&&j.off(t,n.type,e),e.apply(t,[n])}}(t,i);u.delegationSelector=o?i:null,u.originalHandler=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function I(t,e,i,n,s){const o=D(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function P(t){return t=t.replace(w,""),O[t]||t}const j={on(t,e,i,n){N(t,e,i,n,!1)},one(t,e,i,n){N(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=S(e,i,n),a=r!==e,l=x(t),c=e.startsWith(".");if(void 0!==o){if(!l||!l[r])return;return void I(t,l,r,o,s?i:null)}c&&Object.keys(l).forEach((i=>{!function(t,e,i,n){const s=e[i]||{};Object.keys(s).forEach((o=>{if(o.includes(n)){const n=s[o];I(t,e,i,n.originalHandler,n.delegationSelector)}}))}(t,l,i,e.slice(1))}));const h=l[r]||{};Object.keys(h).forEach((i=>{const n=i.replace(E,"");if(!a||e.includes(n)){const e=h[i];I(t,l,r,e.originalHandler,e.delegationSelector)}}))},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=f(),s=P(e),o=e!==s,r=k.has(s);let a,l=!0,c=!0,h=!1,d=null;return o&&n&&(a=n.Event(e,i),n(t).trigger(a),l=!a.isPropagationStopped(),c=!a.isImmediatePropagationStopped(),h=a.isDefaultPrevented()),r?(d=document.createEvent("HTMLEvents"),d.initEvent(s,l,!0)):d=new CustomEvent(e,{bubbles:l,cancelable:!0}),void 0!==i&&Object.keys(i).forEach((t=>{Object.defineProperty(d,t,{get:()=>i[t]})})),h&&d.preventDefault(),c&&t.dispatchEvent(d),d.defaultPrevented&&void 0!==a&&a.preventDefault(),d}},M=new Map,H={set(t,e,i){M.has(t)||M.set(t,new Map);const n=M.get(t);n.has(e)||0===n.size?n.set(e,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(n.keys())[0]}.`)},get:(t,e)=>M.has(t)&&M.get(t).get(e)||null,remove(t,e){if(!M.has(t))return;const i=M.get(t);i.delete(e),0===i.size&&M.delete(t)}};class B{constructor(t){(t=r(t))&&(this._element=t,H.set(this._element,this.constructor.DATA_KEY,this))}dispose(){H.remove(this._element,this.constructor.DATA_KEY),j.off(this._element,this.constructor.EVENT_KEY),Object.getOwnPropertyNames(this).forEach((t=>{this[t]=null}))}_queueCallback(t,e,i=!0){b(t,e,i)}static getInstance(t){return H.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.1.2"}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}}const R=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,s=t.NAME;j.on(document,i,`[data-bs-dismiss="${s}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),c(this))return;const o=n(this)||this.closest(`.${s}`);t.getOrCreateInstance(o)[e]()}))};class W extends B{static get NAME(){return"alert"}close(){if(j.trigger(this._element,"close.bs.alert").defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),j.trigger(this._element,"closed.bs.alert"),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=W.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}R(W,"close"),g(W);const $='[data-bs-toggle="button"]';class z extends B{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=z.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}function q(t){return"true"===t||"false"!==t&&(t===Number(t).toString()?Number(t):""===t||"null"===t?null:t)}function F(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}j.on(document,"click.bs.button.data-api",$,(t=>{t.preventDefault();const e=t.target.closest($);z.getOrCreateInstance(e).toggle()})),g(z);const U={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${F(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${F(e)}`)},getDataAttributes(t){if(!t)return{};const e={};return Object.keys(t.dataset).filter((t=>t.startsWith("bs"))).forEach((i=>{let n=i.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1,n.length),e[n]=q(t.dataset[i])})),e},getDataAttribute:(t,e)=>q(t.getAttribute(`data-bs-${F(e)}`)),offset(t){const e=t.getBoundingClientRect();return{top:e.top+window.pageYOffset,left:e.left+window.pageXOffset}},position:t=>({top:t.offsetTop,left:t.offsetLeft})},V={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode;for(;n&&n.nodeType===Node.ELEMENT_NODE&&3!==n.nodeType;)n.matches(e)&&i.push(n),n=n.parentNode;return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(", ");return this.find(e,t).filter((t=>!c(t)&&l(t)))}},K="carousel",X={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},Y={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},Q="next",G="prev",Z="left",J="right",tt={ArrowLeft:J,ArrowRight:Z},et="slid.bs.carousel",it="active",nt=".active.carousel-item";class st extends B{constructor(t,e){super(t),this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._indicatorsElement=V.findOne(".carousel-indicators",this._element),this._touchSupported="ontouchstart"in document.documentElement||navigator.maxTouchPoints>0,this._pointerEvent=Boolean(window.PointerEvent),this._addEventListeners()}static get Default(){return X}static get NAME(){return K}next(){this._slide(Q)}nextWhenVisible(){!document.hidden&&l(this._element)&&this.next()}prev(){this._slide(G)}pause(t){t||(this._isPaused=!0),V.findOne(".carousel-item-next, .carousel-item-prev",this._element)&&(s(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null}cycle(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config&&this._config.interval&&!this._isPaused&&(this._updateInterval(),this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))}to(t){this._activeElement=V.findOne(nt,this._element);const e=this._getItemIndex(this._activeElement);if(t>this._items.length-1||t<0)return;if(this._isSliding)return void j.one(this._element,et,(()=>this.to(t)));if(e===t)return this.pause(),void this.cycle();const i=t>e?Q:G;this._slide(i,this._items[t])}_getConfig(t){return t={...X,...U.getDataAttributes(this._element),..."object"==typeof t?t:{}},a(K,t,Y),t}_handleSwipe(){const t=Math.abs(this.touchDeltaX);if(t<=40)return;const e=t/this.touchDeltaX;this.touchDeltaX=0,e&&this._slide(e>0?J:Z)}_addEventListeners(){this._config.keyboard&&j.on(this._element,"keydown.bs.carousel",(t=>this._keydown(t))),"hover"===this._config.pause&&(j.on(this._element,"mouseenter.bs.carousel",(t=>this.pause(t))),j.on(this._element,"mouseleave.bs.carousel",(t=>this.cycle(t)))),this._config.touch&&this._touchSupported&&this._addTouchEventListeners()}_addTouchEventListeners(){const t=t=>this._pointerEvent&&("pen"===t.pointerType||"touch"===t.pointerType),e=e=>{t(e)?this.touchStartX=e.clientX:this._pointerEvent||(this.touchStartX=e.touches[0].clientX)},i=t=>{this.touchDeltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this.touchStartX},n=e=>{t(e)&&(this.touchDeltaX=e.clientX-this.touchStartX),this._handleSwipe(),"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((t=>this.cycle(t)),500+this._config.interval))};V.find(".carousel-item img",this._element).forEach((t=>{j.on(t,"dragstart.bs.carousel",(t=>t.preventDefault()))})),this._pointerEvent?(j.on(this._element,"pointerdown.bs.carousel",(t=>e(t))),j.on(this._element,"pointerup.bs.carousel",(t=>n(t))),this._element.classList.add("pointer-event")):(j.on(this._element,"touchstart.bs.carousel",(t=>e(t))),j.on(this._element,"touchmove.bs.carousel",(t=>i(t))),j.on(this._element,"touchend.bs.carousel",(t=>n(t))))}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=tt[t.key];e&&(t.preventDefault(),this._slide(e))}_getItemIndex(t){return this._items=t&&t.parentNode?V.find(".carousel-item",t.parentNode):[],this._items.indexOf(t)}_getItemByOrder(t,e){const i=t===Q;return v(this._items,e,i,this._config.wrap)}_triggerSlideEvent(t,e){const i=this._getItemIndex(t),n=this._getItemIndex(V.findOne(nt,this._element));return j.trigger(this._element,"slide.bs.carousel",{relatedTarget:t,direction:e,from:n,to:i})}_setActiveIndicatorElement(t){if(this._indicatorsElement){const e=V.findOne(".active",this._indicatorsElement);e.classList.remove(it),e.removeAttribute("aria-current");const i=V.find("[data-bs-target]",this._indicatorsElement);for(let e=0;e{j.trigger(this._element,et,{relatedTarget:o,direction:d,from:s,to:r})};if(this._element.classList.contains("slide")){o.classList.add(h),u(o),n.classList.add(c),o.classList.add(c);const t=()=>{o.classList.remove(c,h),o.classList.add(it),n.classList.remove(it,h,c),this._isSliding=!1,setTimeout(f,0)};this._queueCallback(t,n,!0)}else n.classList.remove(it),o.classList.add(it),this._isSliding=!1,f();a&&this.cycle()}_directionToOrder(t){return[J,Z].includes(t)?m()?t===Z?G:Q:t===Z?Q:G:t}_orderToDirection(t){return[Q,G].includes(t)?m()?t===G?Z:J:t===G?J:Z:t}static carouselInterface(t,e){const i=st.getOrCreateInstance(t,e);let{_config:n}=i;"object"==typeof e&&(n={...n,...e});const s="string"==typeof e?e:n.slide;if("number"==typeof e)i.to(e);else if("string"==typeof s){if(void 0===i[s])throw new TypeError(`No method named "${s}"`);i[s]()}else n.interval&&n.ride&&(i.pause(),i.cycle())}static jQueryInterface(t){return this.each((function(){st.carouselInterface(this,t)}))}static dataApiClickHandler(t){const e=n(this);if(!e||!e.classList.contains("carousel"))return;const i={...U.getDataAttributes(e),...U.getDataAttributes(this)},s=this.getAttribute("data-bs-slide-to");s&&(i.interval=!1),st.carouselInterface(e,i),s&&st.getInstance(e).to(s),t.preventDefault()}}j.on(document,"click.bs.carousel.data-api","[data-bs-slide], [data-bs-slide-to]",st.dataApiClickHandler),j.on(window,"load.bs.carousel.data-api",(()=>{const t=V.find('[data-bs-ride="carousel"]');for(let e=0,i=t.length;et===this._element));null!==s&&o.length&&(this._selector=s,this._triggerArray.push(e))}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return rt}static get NAME(){return ot}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t,e=[];if(this._config.parent){const t=V.find(ut,this._config.parent);e=V.find(".collapse.show, .collapse.collapsing",this._config.parent).filter((e=>!t.includes(e)))}const i=V.findOne(this._selector);if(e.length){const n=e.find((t=>i!==t));if(t=n?pt.getInstance(n):null,t&&t._isTransitioning)return}if(j.trigger(this._element,"show.bs.collapse").defaultPrevented)return;e.forEach((e=>{i!==e&&pt.getOrCreateInstance(e,{toggle:!1}).hide(),t||H.set(e,"bs.collapse",null)}));const n=this._getDimension();this._element.classList.remove(ct),this._element.classList.add(ht),this._element.style[n]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const s=`scroll${n[0].toUpperCase()+n.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(ht),this._element.classList.add(ct,lt),this._element.style[n]="",j.trigger(this._element,"shown.bs.collapse")}),this._element,!0),this._element.style[n]=`${this._element[s]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(j.trigger(this._element,"hide.bs.collapse").defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,u(this._element),this._element.classList.add(ht),this._element.classList.remove(ct,lt);const e=this._triggerArray.length;for(let t=0;t{this._isTransitioning=!1,this._element.classList.remove(ht),this._element.classList.add(ct),j.trigger(this._element,"hidden.bs.collapse")}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(lt)}_getConfig(t){return(t={...rt,...U.getDataAttributes(this._element),...t}).toggle=Boolean(t.toggle),t.parent=r(t.parent),a(ot,t,at),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=V.find(ut,this._config.parent);V.find(ft,this._config.parent).filter((e=>!t.includes(e))).forEach((t=>{const e=n(t);e&&this._addAriaAndCollapsedClass([t],this._isShown(e))}))}_addAriaAndCollapsedClass(t,e){t.length&&t.forEach((t=>{e?t.classList.remove(dt):t.classList.add(dt),t.setAttribute("aria-expanded",e)}))}static jQueryInterface(t){return this.each((function(){const e={};"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1);const i=pt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}j.on(document,"click.bs.collapse.data-api",ft,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();const e=i(this);V.find(e).forEach((t=>{pt.getOrCreateInstance(t,{toggle:!1}).toggle()}))})),g(pt);var mt="top",gt="bottom",_t="right",bt="left",vt="auto",yt=[mt,gt,_t,bt],wt="start",Et="end",At="clippingParents",Tt="viewport",Ot="popper",Ct="reference",kt=yt.reduce((function(t,e){return t.concat([e+"-"+wt,e+"-"+Et])}),[]),Lt=[].concat(yt,[vt]).reduce((function(t,e){return t.concat([e,e+"-"+wt,e+"-"+Et])}),[]),xt="beforeRead",Dt="read",St="afterRead",Nt="beforeMain",It="main",Pt="afterMain",jt="beforeWrite",Mt="write",Ht="afterWrite",Bt=[xt,Dt,St,Nt,It,Pt,jt,Mt,Ht];function Rt(t){return t?(t.nodeName||"").toLowerCase():null}function Wt(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function $t(t){return t instanceof Wt(t).Element||t instanceof Element}function zt(t){return t instanceof Wt(t).HTMLElement||t instanceof HTMLElement}function qt(t){return"undefined"!=typeof ShadowRoot&&(t instanceof Wt(t).ShadowRoot||t instanceof ShadowRoot)}const Ft={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];zt(s)&&Rt(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});zt(n)&&Rt(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function Ut(t){return t.split("-")[0]}function Vt(t,e){var i=t.getBoundingClientRect();return{width:i.width/1,height:i.height/1,top:i.top/1,right:i.right/1,bottom:i.bottom/1,left:i.left/1,x:i.left/1,y:i.top/1}}function Kt(t){var e=Vt(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Xt(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&qt(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function Yt(t){return Wt(t).getComputedStyle(t)}function Qt(t){return["table","td","th"].indexOf(Rt(t))>=0}function Gt(t){return(($t(t)?t.ownerDocument:t.document)||window.document).documentElement}function Zt(t){return"html"===Rt(t)?t:t.assignedSlot||t.parentNode||(qt(t)?t.host:null)||Gt(t)}function Jt(t){return zt(t)&&"fixed"!==Yt(t).position?t.offsetParent:null}function te(t){for(var e=Wt(t),i=Jt(t);i&&Qt(i)&&"static"===Yt(i).position;)i=Jt(i);return i&&("html"===Rt(i)||"body"===Rt(i)&&"static"===Yt(i).position)?e:i||function(t){var e=-1!==navigator.userAgent.toLowerCase().indexOf("firefox");if(-1!==navigator.userAgent.indexOf("Trident")&&zt(t)&&"fixed"===Yt(t).position)return null;for(var i=Zt(t);zt(i)&&["html","body"].indexOf(Rt(i))<0;){var n=Yt(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function ee(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}var ie=Math.max,ne=Math.min,se=Math.round;function oe(t,e,i){return ie(t,ne(e,i))}function re(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function ae(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const le={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=Ut(i.placement),l=ee(a),c=[bt,_t].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return re("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:ae(t,yt))}(s.padding,i),d=Kt(o),u="y"===l?mt:bt,f="y"===l?gt:_t,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m=r[l]-i.rects.reference[l],g=te(o),_=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=p/2-m/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,E=oe(v,w,y),A=l;i.modifiersData[n]=((e={})[A]=E,e.centerOffset=E-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Xt(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function ce(t){return t.split("-")[1]}var he={top:"auto",right:"auto",bottom:"auto",left:"auto"};function de(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=!0===h?function(t){var e=t.x,i=t.y,n=window.devicePixelRatio||1;return{x:se(se(e*n)/n)||0,y:se(se(i*n)/n)||0}}(r):"function"==typeof h?h(r):r,u=d.x,f=void 0===u?0:u,p=d.y,m=void 0===p?0:p,g=r.hasOwnProperty("x"),_=r.hasOwnProperty("y"),b=bt,v=mt,y=window;if(c){var w=te(i),E="clientHeight",A="clientWidth";w===Wt(i)&&"static"!==Yt(w=Gt(i)).position&&"absolute"===a&&(E="scrollHeight",A="scrollWidth"),w=w,s!==mt&&(s!==bt&&s!==_t||o!==Et)||(v=gt,m-=w[E]-n.height,m*=l?1:-1),s!==bt&&(s!==mt&&s!==gt||o!==Et)||(b=_t,f-=w[A]-n.width,f*=l?1:-1)}var T,O=Object.assign({position:a},c&&he);return l?Object.assign({},O,((T={})[v]=_?"0":"",T[b]=g?"0":"",T.transform=(y.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",T)):Object.assign({},O,((e={})[v]=_?m+"px":"",e[b]=g?f+"px":"",e.transform="",e))}const ue={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:Ut(e.placement),variation:ce(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,de(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,de(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var fe={passive:!0};const pe={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=Wt(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,fe)})),a&&l.addEventListener("resize",i.update,fe),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,fe)})),a&&l.removeEventListener("resize",i.update,fe)}},data:{}};var me={left:"right",right:"left",bottom:"top",top:"bottom"};function ge(t){return t.replace(/left|right|bottom|top/g,(function(t){return me[t]}))}var _e={start:"end",end:"start"};function be(t){return t.replace(/start|end/g,(function(t){return _e[t]}))}function ve(t){var e=Wt(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function ye(t){return Vt(Gt(t)).left+ve(t).scrollLeft}function we(t){var e=Yt(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Ee(t){return["html","body","#document"].indexOf(Rt(t))>=0?t.ownerDocument.body:zt(t)&&we(t)?t:Ee(Zt(t))}function Ae(t,e){var i;void 0===e&&(e=[]);var n=Ee(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=Wt(n),r=s?[o].concat(o.visualViewport||[],we(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Ae(Zt(r)))}function Te(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function Oe(t,e){return e===Tt?Te(function(t){var e=Wt(t),i=Gt(t),n=e.visualViewport,s=i.clientWidth,o=i.clientHeight,r=0,a=0;return n&&(s=n.width,o=n.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(r=n.offsetLeft,a=n.offsetTop)),{width:s,height:o,x:r+ye(t),y:a}}(t)):zt(e)?function(t){var e=Vt(t);return e.top=e.top+t.clientTop,e.left=e.left+t.clientLeft,e.bottom=e.top+t.clientHeight,e.right=e.left+t.clientWidth,e.width=t.clientWidth,e.height=t.clientHeight,e.x=e.left,e.y=e.top,e}(e):Te(function(t){var e,i=Gt(t),n=ve(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=ie(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=ie(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+ye(t),l=-n.scrollTop;return"rtl"===Yt(s||i).direction&&(a+=ie(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(Gt(t)))}function Ce(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?Ut(s):null,r=s?ce(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case mt:e={x:a,y:i.y-n.height};break;case gt:e={x:a,y:i.y+i.height};break;case _t:e={x:i.x+i.width,y:l};break;case bt:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?ee(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case wt:e[c]=e[c]-(i[h]/2-n[h]/2);break;case Et:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function ke(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.boundary,r=void 0===o?At:o,a=i.rootBoundary,l=void 0===a?Tt:a,c=i.elementContext,h=void 0===c?Ot:c,d=i.altBoundary,u=void 0!==d&&d,f=i.padding,p=void 0===f?0:f,m=re("number"!=typeof p?p:ae(p,yt)),g=h===Ot?Ct:Ot,_=t.rects.popper,b=t.elements[u?g:h],v=function(t,e,i){var n="clippingParents"===e?function(t){var e=Ae(Zt(t)),i=["absolute","fixed"].indexOf(Yt(t).position)>=0&&zt(t)?te(t):t;return $t(i)?e.filter((function(t){return $t(t)&&Xt(t,i)&&"body"!==Rt(t)})):[]}(t):[].concat(e),s=[].concat(n,[i]),o=s[0],r=s.reduce((function(e,i){var n=Oe(t,i);return e.top=ie(n.top,e.top),e.right=ne(n.right,e.right),e.bottom=ne(n.bottom,e.bottom),e.left=ie(n.left,e.left),e}),Oe(t,o));return r.width=r.right-r.left,r.height=r.bottom-r.top,r.x=r.left,r.y=r.top,r}($t(b)?b:b.contextElement||Gt(t.elements.popper),r,l),y=Vt(t.elements.reference),w=Ce({reference:y,element:_,strategy:"absolute",placement:s}),E=Te(Object.assign({},_,w)),A=h===Ot?E:y,T={top:v.top-A.top+m.top,bottom:A.bottom-v.bottom+m.bottom,left:v.left-A.left+m.left,right:A.right-v.right+m.right},O=t.modifiersData.offset;if(h===Ot&&O){var C=O[s];Object.keys(T).forEach((function(t){var e=[_t,gt].indexOf(t)>=0?1:-1,i=[mt,gt].indexOf(t)>=0?"y":"x";T[t]+=C[i]*e}))}return T}function Le(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?Lt:l,h=ce(n),d=h?a?kt:kt.filter((function(t){return ce(t)===h})):yt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=ke(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[Ut(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const xe={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,m=i.allowedAutoPlacements,g=e.options.placement,_=Ut(g),b=l||(_!==g&&p?function(t){if(Ut(t)===vt)return[];var e=ge(t);return[be(t),e,be(e)]}(g):[ge(g)]),v=[g].concat(b).reduce((function(t,i){return t.concat(Ut(i)===vt?Le(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y=e.rects.reference,w=e.rects.popper,E=new Map,A=!0,T=v[0],O=0;O=0,D=x?"width":"height",S=ke(e,{placement:C,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),N=x?L?_t:bt:L?gt:mt;y[D]>w[D]&&(N=ge(N));var I=ge(N),P=[];if(o&&P.push(S[k]<=0),a&&P.push(S[N]<=0,S[I]<=0),P.every((function(t){return t}))){T=C,A=!1;break}E.set(C,P)}if(A)for(var j=function(t){var e=v.find((function(e){var i=E.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},M=p?3:1;M>0&&"break"!==j(M);M--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function De(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function Se(t){return[mt,_t,gt,bt].some((function(e){return t[e]>=0}))}const Ne={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=ke(e,{elementContext:"reference"}),a=ke(e,{altBoundary:!0}),l=De(r,n),c=De(a,s,o),h=Se(l),d=Se(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},Ie={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=Lt.reduce((function(t,i){return t[i]=function(t,e,i){var n=Ut(t),s=[bt,mt].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[bt,_t].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},Pe={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=Ce({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},je={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,m=void 0===p?0:p,g=ke(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=Ut(e.placement),b=ce(e.placement),v=!b,y=ee(_),w="x"===y?"y":"x",E=e.modifiersData.popperOffsets,A=e.rects.reference,T=e.rects.popper,O="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,C={x:0,y:0};if(E){if(o||a){var k="y"===y?mt:bt,L="y"===y?gt:_t,x="y"===y?"height":"width",D=E[y],S=E[y]+g[k],N=E[y]-g[L],I=f?-T[x]/2:0,P=b===wt?A[x]:T[x],j=b===wt?-T[x]:-A[x],M=e.elements.arrow,H=f&&M?Kt(M):{width:0,height:0},B=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},R=B[k],W=B[L],$=oe(0,A[x],H[x]),z=v?A[x]/2-I-$-R-O:P-$-R-O,q=v?-A[x]/2+I+$+W+O:j+$+W+O,F=e.elements.arrow&&te(e.elements.arrow),U=F?"y"===y?F.clientTop||0:F.clientLeft||0:0,V=e.modifiersData.offset?e.modifiersData.offset[e.placement][y]:0,K=E[y]+z-V-U,X=E[y]+q-V;if(o){var Y=oe(f?ne(S,K):S,D,f?ie(N,X):N);E[y]=Y,C[y]=Y-D}if(a){var Q="x"===y?mt:bt,G="x"===y?gt:_t,Z=E[w],J=Z+g[Q],tt=Z-g[G],et=oe(f?ne(J,K):J,Z,f?ie(tt,X):tt);E[w]=et,C[w]=et-Z}}e.modifiersData[n]=C}},requiresIfExists:["offset"]};function Me(t,e,i){void 0===i&&(i=!1);var n=zt(e);zt(e)&&function(t){var e=t.getBoundingClientRect();e.width,t.offsetWidth,e.height,t.offsetHeight}(e);var s,o,r=Gt(e),a=Vt(t),l={scrollLeft:0,scrollTop:0},c={x:0,y:0};return(n||!n&&!i)&&(("body"!==Rt(e)||we(r))&&(l=(s=e)!==Wt(s)&&zt(s)?{scrollLeft:(o=s).scrollLeft,scrollTop:o.scrollTop}:ve(s)),zt(e)?((c=Vt(e)).x+=e.clientLeft,c.y+=e.clientTop):r&&(c.x=ye(r))),{x:a.left+l.scrollLeft-c.x,y:a.top+l.scrollTop-c.y,width:a.width,height:a.height}}function He(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var Be={placement:"bottom",modifiers:[],strategy:"absolute"};function Re(){for(var t=arguments.length,e=new Array(t),i=0;ij.on(t,"mouseover",d))),this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Je),this._element.classList.add(Je),j.trigger(this._element,"shown.bs.dropdown",t)}hide(){if(c(this._element)||!this._isShown(this._menu))return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){j.trigger(this._element,"hide.bs.dropdown",t).defaultPrevented||("ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach((t=>j.off(t,"mouseover",d))),this._popper&&this._popper.destroy(),this._menu.classList.remove(Je),this._element.classList.remove(Je),this._element.setAttribute("aria-expanded","false"),U.removeDataAttribute(this._menu,"popper"),j.trigger(this._element,"hidden.bs.dropdown",t))}_getConfig(t){if(t={...this.constructor.Default,...U.getDataAttributes(this._element),...t},a(Ue,t,this.constructor.DefaultType),"object"==typeof t.reference&&!o(t.reference)&&"function"!=typeof t.reference.getBoundingClientRect)throw new TypeError(`${Ue.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return t}_createPopper(t){if(void 0===Fe)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let e=this._element;"parent"===this._config.reference?e=t:o(this._config.reference)?e=r(this._config.reference):"object"==typeof this._config.reference&&(e=this._config.reference);const i=this._getPopperConfig(),n=i.modifiers.find((t=>"applyStyles"===t.name&&!1===t.enabled));this._popper=qe(e,this._menu,i),n&&U.setDataAttribute(this._menu,"popper","static")}_isShown(t=this._element){return t.classList.contains(Je)}_getMenuElement(){return V.next(this._element,ei)[0]}_getPlacement(){const t=this._element.parentNode;if(t.classList.contains("dropend"))return ri;if(t.classList.contains("dropstart"))return ai;const e="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return t.classList.contains("dropup")?e?ni:ii:e?oi:si}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return"static"===this._config.display&&(t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,..."function"==typeof this._config.popperConfig?this._config.popperConfig(t):this._config.popperConfig}}_selectMenuItem({key:t,target:e}){const i=V.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter(l);i.length&&v(i,e,t===Ye,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=hi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(t&&(2===t.button||"keyup"===t.type&&"Tab"!==t.key))return;const e=V.find(ti);for(let i=0,n=e.length;ie+t)),this._setElementAttributes(di,"paddingRight",(e=>e+t)),this._setElementAttributes(ui,"marginRight",(e=>e-t))}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t)[e];t.style[e]=`${i(Number.parseFloat(s))}px`}))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,"paddingRight"),this._resetElementAttributes(di,"paddingRight"),this._resetElementAttributes(ui,"marginRight")}_saveInitialAttribute(t,e){const i=t.style[e];i&&U.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=U.getDataAttribute(t,e);void 0===i?t.style.removeProperty(e):(U.removeDataAttribute(t,e),t.style[e]=i)}))}_applyManipulationCallback(t,e){o(t)?e(t):V.find(t,this._element).forEach(e)}isOverflowing(){return this.getWidth()>0}}const pi={className:"modal-backdrop",isVisible:!0,isAnimated:!1,rootElement:"body",clickCallback:null},mi={className:"string",isVisible:"boolean",isAnimated:"boolean",rootElement:"(element|string)",clickCallback:"(function|null)"},gi="show",_i="mousedown.bs.backdrop";class bi{constructor(t){this._config=this._getConfig(t),this._isAppended=!1,this._element=null}show(t){this._config.isVisible?(this._append(),this._config.isAnimated&&u(this._getElement()),this._getElement().classList.add(gi),this._emulateAnimation((()=>{_(t)}))):_(t)}hide(t){this._config.isVisible?(this._getElement().classList.remove(gi),this._emulateAnimation((()=>{this.dispose(),_(t)}))):_(t)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_getConfig(t){return(t={...pi,..."object"==typeof t?t:{}}).rootElement=r(t.rootElement),a("backdrop",t,mi),t}_append(){this._isAppended||(this._config.rootElement.append(this._getElement()),j.on(this._getElement(),_i,(()=>{_(this._config.clickCallback)})),this._isAppended=!0)}dispose(){this._isAppended&&(j.off(this._element,_i),this._element.remove(),this._isAppended=!1)}_emulateAnimation(t){b(t,this._getElement(),this._config.isAnimated)}}const vi={trapElement:null,autofocus:!0},yi={trapElement:"element",autofocus:"boolean"},wi=".bs.focustrap",Ei="backward";class Ai{constructor(t){this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}activate(){const{trapElement:t,autofocus:e}=this._config;this._isActive||(e&&t.focus(),j.off(document,wi),j.on(document,"focusin.bs.focustrap",(t=>this._handleFocusin(t))),j.on(document,"keydown.tab.bs.focustrap",(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,j.off(document,wi))}_handleFocusin(t){const{target:e}=t,{trapElement:i}=this._config;if(e===document||e===i||i.contains(e))return;const n=V.focusableChildren(i);0===n.length?i.focus():this._lastTabNavDirection===Ei?n[n.length-1].focus():n[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?Ei:"forward")}_getConfig(t){return t={...vi,..."object"==typeof t?t:{}},a("focustrap",t,yi),t}}const Ti="modal",Oi="Escape",Ci={backdrop:!0,keyboard:!0,focus:!0},ki={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean"},Li="hidden.bs.modal",xi="show.bs.modal",Di="resize.bs.modal",Si="click.dismiss.bs.modal",Ni="keydown.dismiss.bs.modal",Ii="mousedown.dismiss.bs.modal",Pi="modal-open",ji="show",Mi="modal-static";class Hi extends B{constructor(t,e){super(t),this._config=this._getConfig(e),this._dialog=V.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollBar=new fi}static get Default(){return Ci}static get NAME(){return Ti}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||j.trigger(this._element,xi,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isAnimated()&&(this._isTransitioning=!0),this._scrollBar.hide(),document.body.classList.add(Pi),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),j.on(this._dialog,Ii,(()=>{j.one(this._element,"mouseup.dismiss.bs.modal",(t=>{t.target===this._element&&(this._ignoreBackdropClick=!0)}))})),this._showBackdrop((()=>this._showElement(t))))}hide(){if(!this._isShown||this._isTransitioning)return;if(j.trigger(this._element,"hide.bs.modal").defaultPrevented)return;this._isShown=!1;const t=this._isAnimated();t&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),this._focustrap.deactivate(),this._element.classList.remove(ji),j.off(this._element,Si),j.off(this._dialog,Ii),this._queueCallback((()=>this._hideModal()),this._element,t)}dispose(){[window,this._dialog].forEach((t=>j.off(t,".bs.modal"))),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new bi({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new Ai({trapElement:this._element})}_getConfig(t){return t={...Ci,...U.getDataAttributes(this._element),..."object"==typeof t?t:{}},a(Ti,t,ki),t}_showElement(t){const e=this._isAnimated(),i=V.findOne(".modal-body",this._dialog);this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0,i&&(i.scrollTop=0),e&&u(this._element),this._element.classList.add(ji),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,j.trigger(this._element,"shown.bs.modal",{relatedTarget:t})}),this._dialog,e)}_setEscapeEvent(){this._isShown?j.on(this._element,Ni,(t=>{this._config.keyboard&&t.key===Oi?(t.preventDefault(),this.hide()):this._config.keyboard||t.key!==Oi||this._triggerBackdropTransition()})):j.off(this._element,Ni)}_setResizeEvent(){this._isShown?j.on(window,Di,(()=>this._adjustDialog())):j.off(window,Di)}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(Pi),this._resetAdjustments(),this._scrollBar.reset(),j.trigger(this._element,Li)}))}_showBackdrop(t){j.on(this._element,Si,(t=>{this._ignoreBackdropClick?this._ignoreBackdropClick=!1:t.target===t.currentTarget&&(!0===this._config.backdrop?this.hide():"static"===this._config.backdrop&&this._triggerBackdropTransition())})),this._backdrop.show(t)}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(j.trigger(this._element,"hidePrevented.bs.modal").defaultPrevented)return;const{classList:t,scrollHeight:e,style:i}=this._element,n=e>document.documentElement.clientHeight;!n&&"hidden"===i.overflowY||t.contains(Mi)||(n||(i.overflowY="hidden"),t.add(Mi),this._queueCallback((()=>{t.remove(Mi),n||this._queueCallback((()=>{i.overflowY=""}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;(!i&&t&&!m()||i&&!t&&m())&&(this._element.style.paddingLeft=`${e}px`),(i&&!t&&!m()||!i&&t&&m())&&(this._element.style.paddingRight=`${e}px`)}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=Hi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}j.on(document,"click.bs.modal.data-api",'[data-bs-toggle="modal"]',(function(t){const e=n(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),j.one(e,xi,(t=>{t.defaultPrevented||j.one(e,Li,(()=>{l(this)&&this.focus()}))}));const i=V.findOne(".modal.show");i&&Hi.getInstance(i).hide(),Hi.getOrCreateInstance(e).toggle(this)})),R(Hi),g(Hi);const Bi="offcanvas",Ri={backdrop:!0,keyboard:!0,scroll:!1},Wi={backdrop:"boolean",keyboard:"boolean",scroll:"boolean"},$i="show",zi=".offcanvas.show",qi="hidden.bs.offcanvas";class Fi extends B{constructor(t,e){super(t),this._config=this._getConfig(e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get NAME(){return Bi}static get Default(){return Ri}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||j.trigger(this._element,"show.bs.offcanvas",{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._element.style.visibility="visible",this._backdrop.show(),this._config.scroll||(new fi).hide(),this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add($i),this._queueCallback((()=>{this._config.scroll||this._focustrap.activate(),j.trigger(this._element,"shown.bs.offcanvas",{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(j.trigger(this._element,"hide.bs.offcanvas").defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.remove($i),this._backdrop.hide(),this._queueCallback((()=>{this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._element.style.visibility="hidden",this._config.scroll||(new fi).reset(),j.trigger(this._element,qi)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_getConfig(t){return t={...Ri,...U.getDataAttributes(this._element),..."object"==typeof t?t:{}},a(Bi,t,Wi),t}_initializeBackDrop(){return new bi({className:"offcanvas-backdrop",isVisible:this._config.backdrop,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:()=>this.hide()})}_initializeFocusTrap(){return new Ai({trapElement:this._element})}_addEventListeners(){j.on(this._element,"keydown.dismiss.bs.offcanvas",(t=>{this._config.keyboard&&"Escape"===t.key&&this.hide()}))}static jQueryInterface(t){return this.each((function(){const e=Fi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}j.on(document,"click.bs.offcanvas.data-api",'[data-bs-toggle="offcanvas"]',(function(t){const e=n(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),c(this))return;j.one(e,qi,(()=>{l(this)&&this.focus()}));const i=V.findOne(zi);i&&i!==e&&Fi.getInstance(i).hide(),Fi.getOrCreateInstance(e).toggle(this)})),j.on(window,"load.bs.offcanvas.data-api",(()=>V.find(zi).forEach((t=>Fi.getOrCreateInstance(t).show())))),R(Fi),g(Fi);const Ui=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Vi=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i,Ki=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i,Xi=(t,e)=>{const i=t.nodeName.toLowerCase();if(e.includes(i))return!Ui.has(i)||Boolean(Vi.test(t.nodeValue)||Ki.test(t.nodeValue));const n=e.filter((t=>t instanceof RegExp));for(let t=0,e=n.length;t{Xi(t,r)||i.removeAttribute(t.nodeName)}))}return n.body.innerHTML}const Qi="tooltip",Gi=new Set(["sanitize","allowList","sanitizeFn"]),Zi={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(array|string|function)",container:"(string|element|boolean)",fallbackPlacements:"array",boundary:"(string|element)",customClass:"(string|function)",sanitize:"boolean",sanitizeFn:"(null|function)",allowList:"object",popperConfig:"(null|object|function)"},Ji={AUTO:"auto",TOP:"top",RIGHT:m()?"left":"right",BOTTOM:"bottom",LEFT:m()?"right":"left"},tn={animation:!0,template:'',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:[0,0],container:!1,fallbackPlacements:["top","right","bottom","left"],boundary:"clippingParents",customClass:"",sanitize:!0,sanitizeFn:null,allowList:{"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},popperConfig:null},en={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"},nn="fade",sn="show",on="show",rn="out",an=".tooltip-inner",ln=".modal",cn="hide.bs.modal",hn="hover",dn="focus";class un extends B{constructor(t,e){if(void 0===Fe)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t),this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this._config=this._getConfig(e),this.tip=null,this._setListeners()}static get Default(){return tn}static get NAME(){return Qi}static get Event(){return en}static get DefaultType(){return Zi}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(t){if(this._isEnabled)if(t){const e=this._initializeOnDelegatedTarget(t);e._activeTrigger.click=!e._activeTrigger.click,e._isWithActiveTrigger()?e._enter(null,e):e._leave(null,e)}else{if(this.getTipElement().classList.contains(sn))return void this._leave(null,this);this._enter(null,this)}}dispose(){clearTimeout(this._timeout),j.off(this._element.closest(ln),cn,this._hideModalHandler),this.tip&&this.tip.remove(),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this.isWithContent()||!this._isEnabled)return;const t=j.trigger(this._element,this.constructor.Event.SHOW),e=h(this._element),i=null===e?this._element.ownerDocument.documentElement.contains(this._element):e.contains(this._element);if(t.defaultPrevented||!i)return;"tooltip"===this.constructor.NAME&&this.tip&&this.getTitle()!==this.tip.querySelector(an).innerHTML&&(this._disposePopper(),this.tip.remove(),this.tip=null);const n=this.getTipElement(),s=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME);n.setAttribute("id",s),this._element.setAttribute("aria-describedby",s),this._config.animation&&n.classList.add(nn);const o="function"==typeof this._config.placement?this._config.placement.call(this,n,this._element):this._config.placement,r=this._getAttachment(o);this._addAttachmentClass(r);const{container:a}=this._config;H.set(n,this.constructor.DATA_KEY,this),this._element.ownerDocument.documentElement.contains(this.tip)||(a.append(n),j.trigger(this._element,this.constructor.Event.INSERTED)),this._popper?this._popper.update():this._popper=qe(this._element,n,this._getPopperConfig(r)),n.classList.add(sn);const l=this._resolvePossibleFunction(this._config.customClass);l&&n.classList.add(...l.split(" ")),"ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach((t=>{j.on(t,"mouseover",d)}));const c=this.tip.classList.contains(nn);this._queueCallback((()=>{const t=this._hoverState;this._hoverState=null,j.trigger(this._element,this.constructor.Event.SHOWN),t===rn&&this._leave(null,this)}),this.tip,c)}hide(){if(!this._popper)return;const t=this.getTipElement();if(j.trigger(this._element,this.constructor.Event.HIDE).defaultPrevented)return;t.classList.remove(sn),"ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach((t=>j.off(t,"mouseover",d))),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1;const e=this.tip.classList.contains(nn);this._queueCallback((()=>{this._isWithActiveTrigger()||(this._hoverState!==on&&t.remove(),this._cleanTipClass(),this._element.removeAttribute("aria-describedby"),j.trigger(this._element,this.constructor.Event.HIDDEN),this._disposePopper())}),this.tip,e),this._hoverState=""}update(){null!==this._popper&&this._popper.update()}isWithContent(){return Boolean(this.getTitle())}getTipElement(){if(this.tip)return this.tip;const t=document.createElement("div");t.innerHTML=this._config.template;const e=t.children[0];return this.setContent(e),e.classList.remove(nn,sn),this.tip=e,this.tip}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),an)}_sanitizeAndSetContent(t,e,i){const n=V.findOne(i,t);e||!n?this.setElementContent(n,e):n.remove()}setElementContent(t,e){if(null!==t)return o(e)?(e=r(e),void(this._config.html?e.parentNode!==t&&(t.innerHTML="",t.append(e)):t.textContent=e.textContent)):void(this._config.html?(this._config.sanitize&&(e=Yi(e,this._config.allowList,this._config.sanitizeFn)),t.innerHTML=e):t.textContent=e)}getTitle(){const t=this._element.getAttribute("data-bs-original-title")||this._config.title;return this._resolvePossibleFunction(t)}updateAttachment(t){return"right"===t?"end":"left"===t?"start":t}_initializeOnDelegatedTarget(t,e){return e||this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return"function"==typeof t?t.call(this._element):t}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"onChange",enabled:!0,phase:"afterWrite",fn:t=>this._handlePopperPlacementChange(t)}],onFirstUpdate:t=>{t.options.placement!==t.placement&&this._handlePopperPlacementChange(t)}};return{...e,..."function"==typeof this._config.popperConfig?this._config.popperConfig(e):this._config.popperConfig}}_addAttachmentClass(t){this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(t)}`)}_getAttachment(t){return Ji[t.toUpperCase()]}_setListeners(){this._config.trigger.split(" ").forEach((t=>{if("click"===t)j.on(this._element,this.constructor.Event.CLICK,this._config.selector,(t=>this.toggle(t)));else if("manual"!==t){const e=t===hn?this.constructor.Event.MOUSEENTER:this.constructor.Event.FOCUSIN,i=t===hn?this.constructor.Event.MOUSELEAVE:this.constructor.Event.FOCUSOUT;j.on(this._element,e,this._config.selector,(t=>this._enter(t))),j.on(this._element,i,this._config.selector,(t=>this._leave(t)))}})),this._hideModalHandler=()=>{this._element&&this.hide()},j.on(this._element.closest(ln),cn,this._hideModalHandler),this._config.selector?this._config={...this._config,trigger:"manual",selector:""}:this._fixTitle()}_fixTitle(){const t=this._element.getAttribute("title"),e=typeof this._element.getAttribute("data-bs-original-title");(t||"string"!==e)&&(this._element.setAttribute("data-bs-original-title",t||""),!t||this._element.getAttribute("aria-label")||this._element.textContent||this._element.setAttribute("aria-label",t),this._element.setAttribute("title",""))}_enter(t,e){e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger["focusin"===t.type?dn:hn]=!0),e.getTipElement().classList.contains(sn)||e._hoverState===on?e._hoverState=on:(clearTimeout(e._timeout),e._hoverState=on,e._config.delay&&e._config.delay.show?e._timeout=setTimeout((()=>{e._hoverState===on&&e.show()}),e._config.delay.show):e.show())}_leave(t,e){e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger["focusout"===t.type?dn:hn]=e._element.contains(t.relatedTarget)),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=rn,e._config.delay&&e._config.delay.hide?e._timeout=setTimeout((()=>{e._hoverState===rn&&e.hide()}),e._config.delay.hide):e.hide())}_isWithActiveTrigger(){for(const t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1}_getConfig(t){const e=U.getDataAttributes(this._element);return Object.keys(e).forEach((t=>{Gi.has(t)&&delete e[t]})),(t={...this.constructor.Default,...e,..."object"==typeof t&&t?t:{}}).container=!1===t.container?document.body:r(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),a(Qi,t,this.constructor.DefaultType),t.sanitize&&(t.template=Yi(t.template,t.allowList,t.sanitizeFn)),t}_getDelegateConfig(){const t={};for(const e in this._config)this.constructor.Default[e]!==this._config[e]&&(t[e]=this._config[e]);return t}_cleanTipClass(){const t=this.getTipElement(),e=new RegExp(`(^|\\s)${this._getBasicClassPrefix()}\\S+`,"g"),i=t.getAttribute("class").match(e);null!==i&&i.length>0&&i.map((t=>t.trim())).forEach((e=>t.classList.remove(e)))}_getBasicClassPrefix(){return"bs-tooltip"}_handlePopperPlacementChange(t){const{state:e}=t;e&&(this.tip=e.elements.popper,this._cleanTipClass(),this._addAttachmentClass(this._getAttachment(e.placement)))}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null)}static jQueryInterface(t){return this.each((function(){const e=un.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}g(un);const fn={...un.Default,placement:"right",offset:[0,8],trigger:"click",content:"",template:''},pn={...un.DefaultType,content:"(string|element|function)"},mn={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"};class gn extends un{static get Default(){return fn}static get NAME(){return"popover"}static get Event(){return mn}static get DefaultType(){return pn}isWithContent(){return this.getTitle()||this._getContent()}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),".popover-header"),this._sanitizeAndSetContent(t,this._getContent(),".popover-body")}_getContent(){return this._resolvePossibleFunction(this._config.content)}_getBasicClassPrefix(){return"bs-popover"}static jQueryInterface(t){return this.each((function(){const e=gn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}g(gn);const _n="scrollspy",bn={offset:10,method:"auto",target:""},vn={offset:"number",method:"string",target:"(string|element)"},yn="active",wn=".nav-link, .list-group-item, .dropdown-item",En="position";class An extends B{constructor(t,e){super(t),this._scrollElement="BODY"===this._element.tagName?window:this._element,this._config=this._getConfig(e),this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,j.on(this._scrollElement,"scroll.bs.scrollspy",(()=>this._process())),this.refresh(),this._process()}static get Default(){return bn}static get NAME(){return _n}refresh(){const t=this._scrollElement===this._scrollElement.window?"offset":En,e="auto"===this._config.method?t:this._config.method,n=e===En?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),V.find(wn,this._config.target).map((t=>{const s=i(t),o=s?V.findOne(s):null;if(o){const t=o.getBoundingClientRect();if(t.width||t.height)return[U[e](o).top+n,s]}return null})).filter((t=>t)).sort(((t,e)=>t[0]-e[0])).forEach((t=>{this._offsets.push(t[0]),this._targets.push(t[1])}))}dispose(){j.off(this._scrollElement,".bs.scrollspy"),super.dispose()}_getConfig(t){return(t={...bn,...U.getDataAttributes(this._element),..."object"==typeof t&&t?t:{}}).target=r(t.target)||document.documentElement,a(_n,t,vn),t}_getScrollTop(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop}_getScrollHeight(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)}_getOffsetHeight(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height}_process(){const t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),i=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=i){const t=this._targets[this._targets.length-1];this._activeTarget!==t&&this._activate(t)}else{if(this._activeTarget&&t0)return this._activeTarget=null,void this._clear();for(let e=this._offsets.length;e--;)this._activeTarget!==this._targets[e]&&t>=this._offsets[e]&&(void 0===this._offsets[e+1]||t`${e}[data-bs-target="${t}"],${e}[href="${t}"]`)),i=V.findOne(e.join(","),this._config.target);i.classList.add(yn),i.classList.contains("dropdown-item")?V.findOne(".dropdown-toggle",i.closest(".dropdown")).classList.add(yn):V.parents(i,".nav, .list-group").forEach((t=>{V.prev(t,".nav-link, .list-group-item").forEach((t=>t.classList.add(yn))),V.prev(t,".nav-item").forEach((t=>{V.children(t,".nav-link").forEach((t=>t.classList.add(yn)))}))})),j.trigger(this._scrollElement,"activate.bs.scrollspy",{relatedTarget:t})}_clear(){V.find(wn,this._config.target).filter((t=>t.classList.contains(yn))).forEach((t=>t.classList.remove(yn)))}static jQueryInterface(t){return this.each((function(){const e=An.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}j.on(window,"load.bs.scrollspy.data-api",(()=>{V.find('[data-bs-spy="scroll"]').forEach((t=>new An(t)))})),g(An);const Tn="active",On="fade",Cn="show",kn=".active",Ln=":scope > li > .active";class xn extends B{static get NAME(){return"tab"}show(){if(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&this._element.classList.contains(Tn))return;let t;const e=n(this._element),i=this._element.closest(".nav, .list-group");if(i){const e="UL"===i.nodeName||"OL"===i.nodeName?Ln:kn;t=V.find(e,i),t=t[t.length-1]}const s=t?j.trigger(t,"hide.bs.tab",{relatedTarget:this._element}):null;if(j.trigger(this._element,"show.bs.tab",{relatedTarget:t}).defaultPrevented||null!==s&&s.defaultPrevented)return;this._activate(this._element,i);const o=()=>{j.trigger(t,"hidden.bs.tab",{relatedTarget:this._element}),j.trigger(this._element,"shown.bs.tab",{relatedTarget:t})};e?this._activate(e,e.parentNode,o):o()}_activate(t,e,i){const n=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?V.children(e,kn):V.find(Ln,e))[0],s=i&&n&&n.classList.contains(On),o=()=>this._transitionComplete(t,n,i);n&&s?(n.classList.remove(Cn),this._queueCallback(o,t,!0)):o()}_transitionComplete(t,e,i){if(e){e.classList.remove(Tn);const t=V.findOne(":scope > .dropdown-menu .active",e.parentNode);t&&t.classList.remove(Tn),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}t.classList.add(Tn),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),u(t),t.classList.contains(On)&&t.classList.add(Cn);let n=t.parentNode;if(n&&"LI"===n.nodeName&&(n=n.parentNode),n&&n.classList.contains("dropdown-menu")){const e=t.closest(".dropdown");e&&V.find(".dropdown-toggle",e).forEach((t=>t.classList.add(Tn))),t.setAttribute("aria-expanded",!0)}i&&i()}static jQueryInterface(t){return this.each((function(){const e=xn.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}j.on(document,"click.bs.tab.data-api",'[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),c(this)||xn.getOrCreateInstance(this).show()})),g(xn);const Dn="toast",Sn="hide",Nn="show",In="showing",Pn={animation:"boolean",autohide:"boolean",delay:"number"},jn={animation:!0,autohide:!0,delay:5e3};class Mn extends B{constructor(t,e){super(t),this._config=this._getConfig(e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get DefaultType(){return Pn}static get Default(){return jn}static get NAME(){return Dn}show(){j.trigger(this._element,"show.bs.toast").defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(Sn),u(this._element),this._element.classList.add(Nn),this._element.classList.add(In),this._queueCallback((()=>{this._element.classList.remove(In),j.trigger(this._element,"shown.bs.toast"),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this._element.classList.contains(Nn)&&(j.trigger(this._element,"hide.bs.toast").defaultPrevented||(this._element.classList.add(In),this._queueCallback((()=>{this._element.classList.add(Sn),this._element.classList.remove(In),this._element.classList.remove(Nn),j.trigger(this._element,"hidden.bs.toast")}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this._element.classList.contains(Nn)&&this._element.classList.remove(Nn),super.dispose()}_getConfig(t){return t={...jn,...U.getDataAttributes(this._element),..."object"==typeof t&&t?t:{}},a(Dn,t,this.constructor.DefaultType),t}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){j.on(this._element,"mouseover.bs.toast",(t=>this._onInteraction(t,!0))),j.on(this._element,"mouseout.bs.toast",(t=>this._onInteraction(t,!1))),j.on(this._element,"focusin.bs.toast",(t=>this._onInteraction(t,!0))),j.on(this._element,"focusout.bs.toast",(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=Mn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return R(Mn),g(Mn),{Alert:W,Button:z,Carousel:st,Collapse:pt,Dropdown:hi,Modal:Hi,Offcanvas:Fi,Popover:gn,ScrollSpy:An,Tab:xn,Toast:Mn,Tooltip:un}})); +//# sourceMappingURL=bootstrap.bundle.min.js.map \ No newline at end of file diff --git a/qdntz/inc/xmtzk/js/jquery.js b/qdntz/inc/xmtzk/js/jquery.js new file mode 100644 index 0000000..3e3c8d8 --- /dev/null +++ b/qdntz/inc/xmtzk/js/jquery.js @@ -0,0 +1,5574 @@ +/*! jQuery v3.6.4 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!(function (e, t) { + 'use strict' + 'object' == typeof module && 'object' == typeof module.exports + ? (module.exports = e.document + ? t(e, !0) + : function (e) { + if (!e.document) + throw new Error('jQuery requires a window with a document') + return t(e) + }) + : t(e) +})('undefined' != typeof window ? window : this, function (C, e) { + 'use strict' + var t = [], + r = Object.getPrototypeOf, + s = t.slice, + g = t.flat + ? function (e) { + return t.flat.call(e) + } + : function (e) { + return t.concat.apply([], e) + }, + u = t.push, + i = t.indexOf, + n = {}, + o = n.toString, + y = n.hasOwnProperty, + a = y.toString, + l = a.call(Object), + v = {}, + m = function (e) { + return ( + 'function' == typeof e && + 'number' != typeof e.nodeType && + 'function' != typeof e.item + ) + }, + x = function (e) { + return null != e && e === e.window + }, + E = C.document, + c = { type: !0, src: !0, nonce: !0, noModule: !0 } + function b(e, t, n) { + var r, + i, + o = (n = n || E).createElement('script') + if (((o.text = e), t)) + for (r in c) + (i = t[r] || (t.getAttribute && t.getAttribute(r))) && + o.setAttribute(r, i) + n.head.appendChild(o).parentNode.removeChild(o) + } + function w(e) { + return null == e + ? e + '' + : 'object' == typeof e || 'function' == typeof e + ? n[o.call(e)] || 'object' + : typeof e + } + var f = '3.6.4', + S = function (e, t) { + return new S.fn.init(e, t) + } + function p(e) { + var t = !!e && 'length' in e && e.length, + n = w(e) + return ( + !m(e) && + !x(e) && + ('array' === n || + 0 === t || + ('number' == typeof t && 0 < t && t - 1 in e)) + ) + } + ;(S.fn = S.prototype = + { + jquery: f, + constructor: S, + length: 0, + toArray: function () { + return s.call(this) + }, + get: function (e) { + return null == e + ? s.call(this) + : e < 0 + ? this[e + this.length] + : this[e] + }, + pushStack: function (e) { + var t = S.merge(this.constructor(), e) + return (t.prevObject = this), t + }, + each: function (e) { + return S.each(this, e) + }, + map: function (n) { + return this.pushStack( + S.map(this, function (e, t) { + return n.call(e, t, e) + }) + ) + }, + slice: function () { + return this.pushStack(s.apply(this, arguments)) + }, + first: function () { + return this.eq(0) + }, + last: function () { + return this.eq(-1) + }, + even: function () { + return this.pushStack( + S.grep(this, function (e, t) { + return (t + 1) % 2 + }) + ) + }, + odd: function () { + return this.pushStack( + S.grep(this, function (e, t) { + return t % 2 + }) + ) + }, + eq: function (e) { + var t = this.length, + n = +e + (e < 0 ? t : 0) + return this.pushStack(0 <= n && n < t ? [this[n]] : []) + }, + end: function () { + return this.prevObject || this.constructor() + }, + push: u, + sort: t.sort, + splice: t.splice, + }), + (S.extend = S.fn.extend = + function () { + var e, + t, + n, + r, + i, + o, + a = arguments[0] || {}, + s = 1, + u = arguments.length, + l = !1 + for ( + 'boolean' == typeof a && ((l = a), (a = arguments[s] || {}), s++), + 'object' == typeof a || m(a) || (a = {}), + s === u && ((a = this), s--); + s < u; + s++ + ) + if (null != (e = arguments[s])) + for (t in e) + (r = e[t]), + '__proto__' !== t && + a !== r && + (l && r && (S.isPlainObject(r) || (i = Array.isArray(r))) + ? ((n = a[t]), + (o = + i && !Array.isArray(n) + ? [] + : i || S.isPlainObject(n) + ? n + : {}), + (i = !1), + (a[t] = S.extend(l, o, r))) + : void 0 !== r && (a[t] = r)) + return a + }), + S.extend({ + expando: 'jQuery' + (f + Math.random()).replace(/\D/g, ''), + isReady: !0, + error: function (e) { + throw new Error(e) + }, + noop: function () {}, + isPlainObject: function (e) { + var t, n + return ( + !(!e || '[object Object]' !== o.call(e)) && + (!(t = r(e)) || + ('function' == + typeof (n = y.call(t, 'constructor') && t.constructor) && + a.call(n) === l)) + ) + }, + isEmptyObject: function (e) { + var t + for (t in e) return !1 + return !0 + }, + globalEval: function (e, t, n) { + b(e, { nonce: t && t.nonce }, n) + }, + each: function (e, t) { + var n, + r = 0 + if (p(e)) { + for (n = e.length; r < n; r++) if (!1 === t.call(e[r], r, e[r])) break + } else for (r in e) if (!1 === t.call(e[r], r, e[r])) break + return e + }, + makeArray: function (e, t) { + var n = t || [] + return ( + null != e && + (p(Object(e)) + ? S.merge(n, 'string' == typeof e ? [e] : e) + : u.call(n, e)), + n + ) + }, + inArray: function (e, t, n) { + return null == t ? -1 : i.call(t, e, n) + }, + merge: function (e, t) { + for (var n = +t.length, r = 0, i = e.length; r < n; r++) e[i++] = t[r] + return (e.length = i), e + }, + grep: function (e, t, n) { + for (var r = [], i = 0, o = e.length, a = !n; i < o; i++) + !t(e[i], i) !== a && r.push(e[i]) + return r + }, + map: function (e, t, n) { + var r, + i, + o = 0, + a = [] + if (p(e)) + for (r = e.length; o < r; o++) + null != (i = t(e[o], o, n)) && a.push(i) + else for (o in e) null != (i = t(e[o], o, n)) && a.push(i) + return g(a) + }, + guid: 1, + support: v, + }), + 'function' == typeof Symbol && (S.fn[Symbol.iterator] = t[Symbol.iterator]), + S.each( + 'Boolean Number String Function Array Date RegExp Object Error Symbol'.split( + ' ' + ), + function (e, t) { + n['[object ' + t + ']'] = t.toLowerCase() + } + ) + var d = (function (n) { + var e, + d, + b, + o, + i, + h, + f, + g, + w, + u, + l, + T, + C, + a, + E, + y, + s, + c, + v, + S = 'sizzle' + 1 * new Date(), + p = n.document, + k = 0, + r = 0, + m = ue(), + x = ue(), + A = ue(), + N = ue(), + j = function (e, t) { + return e === t && (l = !0), 0 + }, + D = {}.hasOwnProperty, + t = [], + q = t.pop, + L = t.push, + H = t.push, + O = t.slice, + P = function (e, t) { + for (var n = 0, r = e.length; n < r; n++) if (e[n] === t) return n + return -1 + }, + R = + 'checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped', + M = '[\\x20\\t\\r\\n\\f]', + I = + '(?:\\\\[\\da-fA-F]{1,6}' + + M + + '?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+', + W = + '\\[' + + M + + '*(' + + I + + ')(?:' + + M + + '*([*^$|!~]?=)' + + M + + '*(?:\'((?:\\\\.|[^\\\\\'])*)\'|"((?:\\\\.|[^\\\\"])*)"|(' + + I + + '))|)' + + M + + '*\\]', + F = + ':(' + + I + + ')(?:\\(((\'((?:\\\\.|[^\\\\\'])*)\'|"((?:\\\\.|[^\\\\"])*)")|((?:\\\\.|[^\\\\()[\\]]|' + + W + + ')*)|.*)\\)|)', + $ = new RegExp(M + '+', 'g'), + B = new RegExp('^' + M + '+|((?:^|[^\\\\])(?:\\\\.)*)' + M + '+$', 'g'), + _ = new RegExp('^' + M + '*,' + M + '*'), + z = new RegExp('^' + M + '*([>+~]|' + M + ')' + M + '*'), + U = new RegExp(M + '|>'), + X = new RegExp(F), + V = new RegExp('^' + I + '$'), + G = { + ID: new RegExp('^#(' + I + ')'), + CLASS: new RegExp('^\\.(' + I + ')'), + TAG: new RegExp('^(' + I + '|[*])'), + ATTR: new RegExp('^' + W), + PSEUDO: new RegExp('^' + F), + CHILD: new RegExp( + '^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(' + + M + + '*(even|odd|(([+-]|)(\\d*)n|)' + + M + + '*(?:([+-]|)' + + M + + '*(\\d+)|))' + + M + + '*\\)|)', + 'i' + ), + bool: new RegExp('^(?:' + R + ')$', 'i'), + needsContext: new RegExp( + '^' + + M + + '*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(' + + M + + '*((?:-\\d)?\\d*)' + + M + + '*\\)|)(?=[^-]|$)', + 'i' + ), + }, + Y = /HTML$/i, + Q = /^(?:input|select|textarea|button)$/i, + J = /^h\d$/i, + K = /^[^{]+\{\s*\[native \w/, + Z = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + ee = /[+~]/, + te = new RegExp('\\\\[\\da-fA-F]{1,6}' + M + '?|\\\\([^\\r\\n\\f])', 'g'), + ne = function (e, t) { + var n = '0x' + e.slice(1) - 65536 + return ( + t || + (n < 0 + ? String.fromCharCode(n + 65536) + : String.fromCharCode((n >> 10) | 55296, (1023 & n) | 56320)) + ) + }, + re = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + ie = function (e, t) { + return t + ? '\0' === e + ? '\ufffd' + : e.slice(0, -1) + + '\\' + + e.charCodeAt(e.length - 1).toString(16) + + ' ' + : '\\' + e + }, + oe = function () { + T() + }, + ae = be( + function (e) { + return !0 === e.disabled && 'fieldset' === e.nodeName.toLowerCase() + }, + { dir: 'parentNode', next: 'legend' } + ) + try { + H.apply((t = O.call(p.childNodes)), p.childNodes), + t[p.childNodes.length].nodeType + } catch (e) { + H = { + apply: t.length + ? function (e, t) { + L.apply(e, O.call(t)) + } + : function (e, t) { + var n = e.length, + r = 0 + while ((e[n++] = t[r++])); + e.length = n - 1 + }, + } + } + function se(t, e, n, r) { + var i, + o, + a, + s, + u, + l, + c, + f = e && e.ownerDocument, + p = e ? e.nodeType : 9 + if ( + ((n = n || []), + 'string' != typeof t || !t || (1 !== p && 9 !== p && 11 !== p)) + ) + return n + if (!r && (T(e), (e = e || C), E)) { + if (11 !== p && (u = Z.exec(t))) + if ((i = u[1])) { + if (9 === p) { + if (!(a = e.getElementById(i))) return n + if (a.id === i) return n.push(a), n + } else if (f && (a = f.getElementById(i)) && v(e, a) && a.id === i) + return n.push(a), n + } else { + if (u[2]) return H.apply(n, e.getElementsByTagName(t)), n + if ( + (i = u[3]) && + d.getElementsByClassName && + e.getElementsByClassName + ) + return H.apply(n, e.getElementsByClassName(i)), n + } + if ( + d.qsa && + !N[t + ' '] && + (!y || !y.test(t)) && + (1 !== p || 'object' !== e.nodeName.toLowerCase()) + ) { + if (((c = t), (f = e), 1 === p && (U.test(t) || z.test(t)))) { + ;((f = (ee.test(t) && ve(e.parentNode)) || e) === e && d.scope) || + ((s = e.getAttribute('id')) + ? (s = s.replace(re, ie)) + : e.setAttribute('id', (s = S))), + (o = (l = h(t)).length) + while (o--) l[o] = (s ? '#' + s : ':scope') + ' ' + xe(l[o]) + c = l.join(',') + } + try { + return H.apply(n, f.querySelectorAll(c)), n + } catch (e) { + N(t, !0) + } finally { + s === S && e.removeAttribute('id') + } + } + } + return g(t.replace(B, '$1'), e, n, r) + } + function ue() { + var r = [] + return function e(t, n) { + return ( + r.push(t + ' ') > b.cacheLength && delete e[r.shift()], + (e[t + ' '] = n) + ) + } + } + function le(e) { + return (e[S] = !0), e + } + function ce(e) { + var t = C.createElement('fieldset') + try { + return !!e(t) + } catch (e) { + return !1 + } finally { + t.parentNode && t.parentNode.removeChild(t), (t = null) + } + } + function fe(e, t) { + var n = e.split('|'), + r = n.length + while (r--) b.attrHandle[n[r]] = t + } + function pe(e, t) { + var n = t && e, + r = + n && + 1 === e.nodeType && + 1 === t.nodeType && + e.sourceIndex - t.sourceIndex + if (r) return r + if (n) while ((n = n.nextSibling)) if (n === t) return -1 + return e ? 1 : -1 + } + function de(t) { + return function (e) { + return 'input' === e.nodeName.toLowerCase() && e.type === t + } + } + function he(n) { + return function (e) { + var t = e.nodeName.toLowerCase() + return ('input' === t || 'button' === t) && e.type === n + } + } + function ge(t) { + return function (e) { + return 'form' in e + ? e.parentNode && !1 === e.disabled + ? 'label' in e + ? 'label' in e.parentNode + ? e.parentNode.disabled === t + : e.disabled === t + : e.isDisabled === t || (e.isDisabled !== !t && ae(e) === t) + : e.disabled === t + : 'label' in e && e.disabled === t + } + } + function ye(a) { + return le(function (o) { + return ( + (o = +o), + le(function (e, t) { + var n, + r = a([], e.length, o), + i = r.length + while (i--) e[(n = r[i])] && (e[n] = !(t[n] = e[n])) + }) + ) + }) + } + function ve(e) { + return e && 'undefined' != typeof e.getElementsByTagName && e + } + for (e in ((d = se.support = {}), + (i = se.isXML = + function (e) { + var t = e && e.namespaceURI, + n = e && (e.ownerDocument || e).documentElement + return !Y.test(t || (n && n.nodeName) || 'HTML') + }), + (T = se.setDocument = + function (e) { + var t, + n, + r = e ? e.ownerDocument || e : p + return ( + r != C && + 9 === r.nodeType && + r.documentElement && + ((a = (C = r).documentElement), + (E = !i(C)), + p != C && + (n = C.defaultView) && + n.top !== n && + (n.addEventListener + ? n.addEventListener('unload', oe, !1) + : n.attachEvent && n.attachEvent('onunload', oe)), + (d.scope = ce(function (e) { + return ( + a.appendChild(e).appendChild(C.createElement('div')), + 'undefined' != typeof e.querySelectorAll && + !e.querySelectorAll(':scope fieldset div').length + ) + })), + (d.cssHas = ce(function () { + try { + return C.querySelector(':has(*,:jqfake)'), !1 + } catch (e) { + return !0 + } + })), + (d.attributes = ce(function (e) { + return (e.className = 'i'), !e.getAttribute('className') + })), + (d.getElementsByTagName = ce(function (e) { + return ( + e.appendChild(C.createComment('')), + !e.getElementsByTagName('*').length + ) + })), + (d.getElementsByClassName = K.test(C.getElementsByClassName)), + (d.getById = ce(function (e) { + return ( + (a.appendChild(e).id = S), + !C.getElementsByName || !C.getElementsByName(S).length + ) + })), + d.getById + ? ((b.filter.ID = function (e) { + var t = e.replace(te, ne) + return function (e) { + return e.getAttribute('id') === t + } + }), + (b.find.ID = function (e, t) { + if ('undefined' != typeof t.getElementById && E) { + var n = t.getElementById(e) + return n ? [n] : [] + } + })) + : ((b.filter.ID = function (e) { + var n = e.replace(te, ne) + return function (e) { + var t = + 'undefined' != typeof e.getAttributeNode && + e.getAttributeNode('id') + return t && t.value === n + } + }), + (b.find.ID = function (e, t) { + if ('undefined' != typeof t.getElementById && E) { + var n, + r, + i, + o = t.getElementById(e) + if (o) { + if ((n = o.getAttributeNode('id')) && n.value === e) + return [o] + ;(i = t.getElementsByName(e)), (r = 0) + while ((o = i[r++])) + if ((n = o.getAttributeNode('id')) && n.value === e) + return [o] + } + return [] + } + })), + (b.find.TAG = d.getElementsByTagName + ? function (e, t) { + return 'undefined' != typeof t.getElementsByTagName + ? t.getElementsByTagName(e) + : d.qsa + ? t.querySelectorAll(e) + : void 0 + } + : function (e, t) { + var n, + r = [], + i = 0, + o = t.getElementsByTagName(e) + if ('*' === e) { + while ((n = o[i++])) 1 === n.nodeType && r.push(n) + return r + } + return o + }), + (b.find.CLASS = + d.getElementsByClassName && + function (e, t) { + if ('undefined' != typeof t.getElementsByClassName && E) + return t.getElementsByClassName(e) + }), + (s = []), + (y = []), + (d.qsa = K.test(C.querySelectorAll)) && + (ce(function (e) { + var t + ;(a.appendChild(e).innerHTML = + ""), + e.querySelectorAll("[msallowcapture^='']").length && + y.push('[*^$]=' + M + '*(?:\'\'|"")'), + e.querySelectorAll('[selected]').length || + y.push('\\[' + M + '*(?:value|' + R + ')'), + e.querySelectorAll('[id~=' + S + '-]').length || y.push('~='), + (t = C.createElement('input')).setAttribute('name', ''), + e.appendChild(t), + e.querySelectorAll("[name='']").length || + y.push('\\[' + M + '*name' + M + '*=' + M + '*(?:\'\'|"")'), + e.querySelectorAll(':checked').length || y.push(':checked'), + e.querySelectorAll('a#' + S + '+*').length || + y.push('.#.+[+~]'), + e.querySelectorAll('\\\f'), + y.push('[\\r\\n\\f]') + }), + ce(function (e) { + e.innerHTML = + "" + var t = C.createElement('input') + t.setAttribute('type', 'hidden'), + e.appendChild(t).setAttribute('name', 'D'), + e.querySelectorAll('[name=d]').length && + y.push('name' + M + '*[*^$|!~]?='), + 2 !== e.querySelectorAll(':enabled').length && + y.push(':enabled', ':disabled'), + (a.appendChild(e).disabled = !0), + 2 !== e.querySelectorAll(':disabled').length && + y.push(':enabled', ':disabled'), + e.querySelectorAll('*,:x'), + y.push(',.*:') + })), + (d.matchesSelector = K.test( + (c = + a.matches || + a.webkitMatchesSelector || + a.mozMatchesSelector || + a.oMatchesSelector || + a.msMatchesSelector) + )) && + ce(function (e) { + ;(d.disconnectedMatch = c.call(e, '*')), + c.call(e, "[s!='']:x"), + s.push('!=', F) + }), + d.cssHas || y.push(':has'), + (y = y.length && new RegExp(y.join('|'))), + (s = s.length && new RegExp(s.join('|'))), + (t = K.test(a.compareDocumentPosition)), + (v = + t || K.test(a.contains) + ? function (e, t) { + var n = (9 === e.nodeType && e.documentElement) || e, + r = t && t.parentNode + return ( + e === r || + !( + !r || + 1 !== r.nodeType || + !(n.contains + ? n.contains(r) + : e.compareDocumentPosition && + 16 & e.compareDocumentPosition(r)) + ) + ) + } + : function (e, t) { + if (t) while ((t = t.parentNode)) if (t === e) return !0 + return !1 + }), + (j = t + ? function (e, t) { + if (e === t) return (l = !0), 0 + var n = + !e.compareDocumentPosition - !t.compareDocumentPosition + return ( + n || + (1 & + (n = + (e.ownerDocument || e) == (t.ownerDocument || t) + ? e.compareDocumentPosition(t) + : 1) || + (!d.sortDetached && t.compareDocumentPosition(e) === n) + ? e == C || (e.ownerDocument == p && v(p, e)) + ? -1 + : t == C || (t.ownerDocument == p && v(p, t)) + ? 1 + : u + ? P(u, e) - P(u, t) + : 0 + : 4 & n + ? -1 + : 1) + ) + } + : function (e, t) { + if (e === t) return (l = !0), 0 + var n, + r = 0, + i = e.parentNode, + o = t.parentNode, + a = [e], + s = [t] + if (!i || !o) + return e == C + ? -1 + : t == C + ? 1 + : i + ? -1 + : o + ? 1 + : u + ? P(u, e) - P(u, t) + : 0 + if (i === o) return pe(e, t) + n = e + while ((n = n.parentNode)) a.unshift(n) + n = t + while ((n = n.parentNode)) s.unshift(n) + while (a[r] === s[r]) r++ + return r ? pe(a[r], s[r]) : a[r] == p ? -1 : s[r] == p ? 1 : 0 + })), + C + ) + }), + (se.matches = function (e, t) { + return se(e, null, null, t) + }), + (se.matchesSelector = function (e, t) { + if ( + (T(e), + d.matchesSelector && + E && + !N[t + ' '] && + (!s || !s.test(t)) && + (!y || !y.test(t))) + ) + try { + var n = c.call(e, t) + if ( + n || + d.disconnectedMatch || + (e.document && 11 !== e.document.nodeType) + ) + return n + } catch (e) { + N(t, !0) + } + return 0 < se(t, C, null, [e]).length + }), + (se.contains = function (e, t) { + return (e.ownerDocument || e) != C && T(e), v(e, t) + }), + (se.attr = function (e, t) { + ;(e.ownerDocument || e) != C && T(e) + var n = b.attrHandle[t.toLowerCase()], + r = n && D.call(b.attrHandle, t.toLowerCase()) ? n(e, t, !E) : void 0 + return void 0 !== r + ? r + : d.attributes || !E + ? e.getAttribute(t) + : (r = e.getAttributeNode(t)) && r.specified + ? r.value + : null + }), + (se.escape = function (e) { + return (e + '').replace(re, ie) + }), + (se.error = function (e) { + throw new Error('Syntax error, unrecognized expression: ' + e) + }), + (se.uniqueSort = function (e) { + var t, + n = [], + r = 0, + i = 0 + if ( + ((l = !d.detectDuplicates), + (u = !d.sortStable && e.slice(0)), + e.sort(j), + l) + ) { + while ((t = e[i++])) t === e[i] && (r = n.push(i)) + while (r--) e.splice(n[r], 1) + } + return (u = null), e + }), + (o = se.getText = + function (e) { + var t, + n = '', + r = 0, + i = e.nodeType + if (i) { + if (1 === i || 9 === i || 11 === i) { + if ('string' == typeof e.textContent) return e.textContent + for (e = e.firstChild; e; e = e.nextSibling) n += o(e) + } else if (3 === i || 4 === i) return e.nodeValue + } else while ((t = e[r++])) n += o(t) + return n + }), + ((b = se.selectors = + { + cacheLength: 50, + createPseudo: le, + match: G, + attrHandle: {}, + find: {}, + relative: { + '>': { dir: 'parentNode', first: !0 }, + ' ': { dir: 'parentNode' }, + '+': { dir: 'previousSibling', first: !0 }, + '~': { dir: 'previousSibling' }, + }, + preFilter: { + ATTR: function (e) { + return ( + (e[1] = e[1].replace(te, ne)), + (e[3] = (e[3] || e[4] || e[5] || '').replace(te, ne)), + '~=' === e[2] && (e[3] = ' ' + e[3] + ' '), + e.slice(0, 4) + ) + }, + CHILD: function (e) { + return ( + (e[1] = e[1].toLowerCase()), + 'nth' === e[1].slice(0, 3) + ? (e[3] || se.error(e[0]), + (e[4] = +(e[4] + ? e[5] + (e[6] || 1) + : 2 * ('even' === e[3] || 'odd' === e[3]))), + (e[5] = +(e[7] + e[8] || 'odd' === e[3]))) + : e[3] && se.error(e[0]), + e + ) + }, + PSEUDO: function (e) { + var t, + n = !e[6] && e[2] + return G.CHILD.test(e[0]) + ? null + : (e[3] + ? (e[2] = e[4] || e[5] || '') + : n && + X.test(n) && + (t = h(n, !0)) && + (t = n.indexOf(')', n.length - t) - n.length) && + ((e[0] = e[0].slice(0, t)), (e[2] = n.slice(0, t))), + e.slice(0, 3)) + }, + }, + filter: { + TAG: function (e) { + var t = e.replace(te, ne).toLowerCase() + return '*' === e + ? function () { + return !0 + } + : function (e) { + return e.nodeName && e.nodeName.toLowerCase() === t + } + }, + CLASS: function (e) { + var t = m[e + ' '] + return ( + t || + ((t = new RegExp('(^|' + M + ')' + e + '(' + M + '|$)')) && + m(e, function (e) { + return t.test( + ('string' == typeof e.className && e.className) || + ('undefined' != typeof e.getAttribute && + e.getAttribute('class')) || + '' + ) + })) + ) + }, + ATTR: function (n, r, i) { + return function (e) { + var t = se.attr(e, n) + return null == t + ? '!=' === r + : !r || + ((t += ''), + '=' === r + ? t === i + : '!=' === r + ? t !== i + : '^=' === r + ? i && 0 === t.indexOf(i) + : '*=' === r + ? i && -1 < t.indexOf(i) + : '$=' === r + ? i && t.slice(-i.length) === i + : '~=' === r + ? -1 < (' ' + t.replace($, ' ') + ' ').indexOf(i) + : '|=' === r && + (t === i || t.slice(0, i.length + 1) === i + '-')) + } + }, + CHILD: function (h, e, t, g, y) { + var v = 'nth' !== h.slice(0, 3), + m = 'last' !== h.slice(-4), + x = 'of-type' === e + return 1 === g && 0 === y + ? function (e) { + return !!e.parentNode + } + : function (e, t, n) { + var r, + i, + o, + a, + s, + u, + l = v !== m ? 'nextSibling' : 'previousSibling', + c = e.parentNode, + f = x && e.nodeName.toLowerCase(), + p = !n && !x, + d = !1 + if (c) { + if (v) { + while (l) { + a = e + while ((a = a[l])) + if ( + x + ? a.nodeName.toLowerCase() === f + : 1 === a.nodeType + ) + return !1 + u = l = 'only' === h && !u && 'nextSibling' + } + return !0 + } + if (((u = [m ? c.firstChild : c.lastChild]), m && p)) { + ;(d = + (s = + (r = + (i = + (o = (a = c)[S] || (a[S] = {}))[a.uniqueID] || + (o[a.uniqueID] = {}))[h] || [])[0] === k && + r[1]) && r[2]), + (a = s && c.childNodes[s]) + while ((a = (++s && a && a[l]) || (d = s = 0) || u.pop())) + if (1 === a.nodeType && ++d && a === e) { + i[h] = [k, s, d] + break + } + } else if ( + (p && + (d = s = + (r = + (i = + (o = (a = e)[S] || (a[S] = {}))[a.uniqueID] || + (o[a.uniqueID] = {}))[h] || [])[0] === k && r[1]), + !1 === d) + ) + while ((a = (++s && a && a[l]) || (d = s = 0) || u.pop())) + if ( + (x + ? a.nodeName.toLowerCase() === f + : 1 === a.nodeType) && + ++d && + (p && + ((i = + (o = a[S] || (a[S] = {}))[a.uniqueID] || + (o[a.uniqueID] = {}))[h] = [k, d]), + a === e) + ) + break + return (d -= y) === g || (d % g == 0 && 0 <= d / g) + } + } + }, + PSEUDO: function (e, o) { + var t, + a = + b.pseudos[e] || + b.setFilters[e.toLowerCase()] || + se.error('unsupported pseudo: ' + e) + return a[S] + ? a(o) + : 1 < a.length + ? ((t = [e, e, '', o]), + b.setFilters.hasOwnProperty(e.toLowerCase()) + ? le(function (e, t) { + var n, + r = a(e, o), + i = r.length + while (i--) e[(n = P(e, r[i]))] = !(t[n] = r[i]) + }) + : function (e) { + return a(e, 0, t) + }) + : a + }, + }, + pseudos: { + not: le(function (e) { + var r = [], + i = [], + s = f(e.replace(B, '$1')) + return s[S] + ? le(function (e, t, n, r) { + var i, + o = s(e, null, r, []), + a = e.length + while (a--) (i = o[a]) && (e[a] = !(t[a] = i)) + }) + : function (e, t, n) { + return (r[0] = e), s(r, null, n, i), (r[0] = null), !i.pop() + } + }), + has: le(function (t) { + return function (e) { + return 0 < se(t, e).length + } + }), + contains: le(function (t) { + return ( + (t = t.replace(te, ne)), + function (e) { + return -1 < (e.textContent || o(e)).indexOf(t) + } + ) + }), + lang: le(function (n) { + return ( + V.test(n || '') || se.error('unsupported lang: ' + n), + (n = n.replace(te, ne).toLowerCase()), + function (e) { + var t + do { + if ( + (t = E + ? e.lang + : e.getAttribute('xml:lang') || e.getAttribute('lang')) + ) + return ( + (t = t.toLowerCase()) === n || 0 === t.indexOf(n + '-') + ) + } while ((e = e.parentNode) && 1 === e.nodeType) + return !1 + } + ) + }), + target: function (e) { + var t = n.location && n.location.hash + return t && t.slice(1) === e.id + }, + root: function (e) { + return e === a + }, + focus: function (e) { + return ( + e === C.activeElement && + (!C.hasFocus || C.hasFocus()) && + !!(e.type || e.href || ~e.tabIndex) + ) + }, + enabled: ge(!1), + disabled: ge(!0), + checked: function (e) { + var t = e.nodeName.toLowerCase() + return ( + ('input' === t && !!e.checked) || ('option' === t && !!e.selected) + ) + }, + selected: function (e) { + return e.parentNode && e.parentNode.selectedIndex, !0 === e.selected + }, + empty: function (e) { + for (e = e.firstChild; e; e = e.nextSibling) + if (e.nodeType < 6) return !1 + return !0 + }, + parent: function (e) { + return !b.pseudos.empty(e) + }, + header: function (e) { + return J.test(e.nodeName) + }, + input: function (e) { + return Q.test(e.nodeName) + }, + button: function (e) { + var t = e.nodeName.toLowerCase() + return ('input' === t && 'button' === e.type) || 'button' === t + }, + text: function (e) { + var t + return ( + 'input' === e.nodeName.toLowerCase() && + 'text' === e.type && + (null == (t = e.getAttribute('type')) || + 'text' === t.toLowerCase()) + ) + }, + first: ye(function () { + return [0] + }), + last: ye(function (e, t) { + return [t - 1] + }), + eq: ye(function (e, t, n) { + return [n < 0 ? n + t : n] + }), + even: ye(function (e, t) { + for (var n = 0; n < t; n += 2) e.push(n) + return e + }), + odd: ye(function (e, t) { + for (var n = 1; n < t; n += 2) e.push(n) + return e + }), + lt: ye(function (e, t, n) { + for (var r = n < 0 ? n + t : t < n ? t : n; 0 <= --r; ) e.push(r) + return e + }), + gt: ye(function (e, t, n) { + for (var r = n < 0 ? n + t : n; ++r < t; ) e.push(r) + return e + }), + }, + }).pseudos.nth = b.pseudos.eq), + { radio: !0, checkbox: !0, file: !0, password: !0, image: !0 })) + b.pseudos[e] = de(e) + for (e in { submit: !0, reset: !0 }) b.pseudos[e] = he(e) + function me() {} + function xe(e) { + for (var t = 0, n = e.length, r = ''; t < n; t++) r += e[t].value + return r + } + function be(s, e, t) { + var u = e.dir, + l = e.next, + c = l || u, + f = t && 'parentNode' === c, + p = r++ + return e.first + ? function (e, t, n) { + while ((e = e[u])) if (1 === e.nodeType || f) return s(e, t, n) + return !1 + } + : function (e, t, n) { + var r, + i, + o, + a = [k, p] + if (n) { + while ((e = e[u])) + if ((1 === e.nodeType || f) && s(e, t, n)) return !0 + } else + while ((e = e[u])) + if (1 === e.nodeType || f) + if ( + ((i = + (o = e[S] || (e[S] = {}))[e.uniqueID] || + (o[e.uniqueID] = {})), + l && l === e.nodeName.toLowerCase()) + ) + e = e[u] || e + else { + if ((r = i[c]) && r[0] === k && r[1] === p) + return (a[2] = r[2]) + if (((i[c] = a)[2] = s(e, t, n))) return !0 + } + return !1 + } + } + function we(i) { + return 1 < i.length + ? function (e, t, n) { + var r = i.length + while (r--) if (!i[r](e, t, n)) return !1 + return !0 + } + : i[0] + } + function Te(e, t, n, r, i) { + for (var o, a = [], s = 0, u = e.length, l = null != t; s < u; s++) + (o = e[s]) && ((n && !n(o, r, i)) || (a.push(o), l && t.push(s))) + return a + } + function Ce(d, h, g, y, v, e) { + return ( + y && !y[S] && (y = Ce(y)), + v && !v[S] && (v = Ce(v, e)), + le(function (e, t, n, r) { + var i, + o, + a, + s = [], + u = [], + l = t.length, + c = + e || + (function (e, t, n) { + for (var r = 0, i = t.length; r < i; r++) se(e, t[r], n) + return n + })(h || '*', n.nodeType ? [n] : n, []), + f = !d || (!e && h) ? c : Te(c, s, d, n, r), + p = g ? (v || (e ? d : l || y) ? [] : t) : f + if ((g && g(f, p, n, r), y)) { + ;(i = Te(p, u)), y(i, [], n, r), (o = i.length) + while (o--) (a = i[o]) && (p[u[o]] = !(f[u[o]] = a)) + } + if (e) { + if (v || d) { + if (v) { + ;(i = []), (o = p.length) + while (o--) (a = p[o]) && i.push((f[o] = a)) + v(null, (p = []), i, r) + } + o = p.length + while (o--) + (a = p[o]) && + -1 < (i = v ? P(e, a) : s[o]) && + (e[i] = !(t[i] = a)) + } + } else (p = Te(p === t ? p.splice(l, p.length) : p)), v ? v(null, t, p, r) : H.apply(t, p) + }) + ) + } + function Ee(e) { + for ( + var i, + t, + n, + r = e.length, + o = b.relative[e[0].type], + a = o || b.relative[' '], + s = o ? 1 : 0, + u = be( + function (e) { + return e === i + }, + a, + !0 + ), + l = be( + function (e) { + return -1 < P(i, e) + }, + a, + !0 + ), + c = [ + function (e, t, n) { + var r = + (!o && (n || t !== w)) || + ((i = t).nodeType ? u(e, t, n) : l(e, t, n)) + return (i = null), r + }, + ]; + s < r; + s++ + ) + if ((t = b.relative[e[s].type])) c = [be(we(c), t)] + else { + if ((t = b.filter[e[s].type].apply(null, e[s].matches))[S]) { + for (n = ++s; n < r; n++) if (b.relative[e[n].type]) break + return Ce( + 1 < s && we(c), + 1 < s && + xe( + e + .slice(0, s - 1) + .concat({ value: ' ' === e[s - 2].type ? '*' : '' }) + ).replace(B, '$1'), + t, + s < n && Ee(e.slice(s, n)), + n < r && Ee((e = e.slice(n))), + n < r && xe(e) + ) + } + c.push(t) + } + return we(c) + } + return ( + (me.prototype = b.filters = b.pseudos), + (b.setFilters = new me()), + (h = se.tokenize = + function (e, t) { + var n, + r, + i, + o, + a, + s, + u, + l = x[e + ' '] + if (l) return t ? 0 : l.slice(0) + ;(a = e), (s = []), (u = b.preFilter) + while (a) { + for (o in ((n && !(r = _.exec(a))) || + (r && (a = a.slice(r[0].length) || a), s.push((i = []))), + (n = !1), + (r = z.exec(a)) && + ((n = r.shift()), + i.push({ value: n, type: r[0].replace(B, ' ') }), + (a = a.slice(n.length))), + b.filter)) + !(r = G[o].exec(a)) || + (u[o] && !(r = u[o](r))) || + ((n = r.shift()), + i.push({ value: n, type: o, matches: r }), + (a = a.slice(n.length))) + if (!n) break + } + return t ? a.length : a ? se.error(e) : x(e, s).slice(0) + }), + (f = se.compile = + function (e, t) { + var n, + y, + v, + m, + x, + r, + i = [], + o = [], + a = A[e + ' '] + if (!a) { + t || (t = h(e)), (n = t.length) + while (n--) (a = Ee(t[n]))[S] ? i.push(a) : o.push(a) + ;(a = A( + e, + ((y = o), + (m = 0 < (v = i).length), + (x = 0 < y.length), + (r = function (e, t, n, r, i) { + var o, + a, + s, + u = 0, + l = '0', + c = e && [], + f = [], + p = w, + d = e || (x && b.find.TAG('*', i)), + h = (k += null == p ? 1 : Math.random() || 0.1), + g = d.length + for ( + i && (w = t == C || t || i); + l !== g && null != (o = d[l]); + l++ + ) { + if (x && o) { + ;(a = 0), t || o.ownerDocument == C || (T(o), (n = !E)) + while ((s = y[a++])) + if (s(o, t || C, n)) { + r.push(o) + break + } + i && (k = h) + } + m && ((o = !s && o) && u--, e && c.push(o)) + } + if (((u += l), m && l !== u)) { + a = 0 + while ((s = v[a++])) s(c, f, t, n) + if (e) { + if (0 < u) while (l--) c[l] || f[l] || (f[l] = q.call(r)) + f = Te(f) + } + H.apply(r, f), + i && + !e && + 0 < f.length && + 1 < u + v.length && + se.uniqueSort(r) + } + return i && ((k = h), (w = p)), c + }), + m ? le(r) : r) + )).selector = e + } + return a + }), + (g = se.select = + function (e, t, n, r) { + var i, + o, + a, + s, + u, + l = 'function' == typeof e && e, + c = !r && h((e = l.selector || e)) + if (((n = n || []), 1 === c.length)) { + if ( + 2 < (o = c[0] = c[0].slice(0)).length && + 'ID' === (a = o[0]).type && + 9 === t.nodeType && + E && + b.relative[o[1].type] + ) { + if (!(t = (b.find.ID(a.matches[0].replace(te, ne), t) || [])[0])) + return n + l && (t = t.parentNode), (e = e.slice(o.shift().value.length)) + } + i = G.needsContext.test(e) ? 0 : o.length + while (i--) { + if (((a = o[i]), b.relative[(s = a.type)])) break + if ( + (u = b.find[s]) && + (r = u( + a.matches[0].replace(te, ne), + (ee.test(o[0].type) && ve(t.parentNode)) || t + )) + ) { + if ((o.splice(i, 1), !(e = r.length && xe(o)))) + return H.apply(n, r), n + break + } + } + } + return ( + (l || f(e, c))( + r, + t, + !E, + n, + !t || (ee.test(e) && ve(t.parentNode)) || t + ), + n + ) + }), + (d.sortStable = S.split('').sort(j).join('') === S), + (d.detectDuplicates = !!l), + T(), + (d.sortDetached = ce(function (e) { + return 1 & e.compareDocumentPosition(C.createElement('fieldset')) + })), + ce(function (e) { + return ( + (e.innerHTML = ""), + '#' === e.firstChild.getAttribute('href') + ) + }) || + fe('type|href|height|width', function (e, t, n) { + if (!n) return e.getAttribute(t, 'type' === t.toLowerCase() ? 1 : 2) + }), + (d.attributes && + ce(function (e) { + return ( + (e.innerHTML = ''), + e.firstChild.setAttribute('value', ''), + '' === e.firstChild.getAttribute('value') + ) + })) || + fe('value', function (e, t, n) { + if (!n && 'input' === e.nodeName.toLowerCase()) return e.defaultValue + }), + ce(function (e) { + return null == e.getAttribute('disabled') + }) || + fe(R, function (e, t, n) { + var r + if (!n) + return !0 === e[t] + ? t.toLowerCase() + : (r = e.getAttributeNode(t)) && r.specified + ? r.value + : null + }), + se + ) + })(C) + ;(S.find = d), + (S.expr = d.selectors), + (S.expr[':'] = S.expr.pseudos), + (S.uniqueSort = S.unique = d.uniqueSort), + (S.text = d.getText), + (S.isXMLDoc = d.isXML), + (S.contains = d.contains), + (S.escapeSelector = d.escape) + var h = function (e, t, n) { + var r = [], + i = void 0 !== n + while ((e = e[t]) && 9 !== e.nodeType) + if (1 === e.nodeType) { + if (i && S(e).is(n)) break + r.push(e) + } + return r + }, + T = function (e, t) { + for (var n = []; e; e = e.nextSibling) + 1 === e.nodeType && e !== t && n.push(e) + return n + }, + k = S.expr.match.needsContext + function A(e, t) { + return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase() + } + var N = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i + function j(e, n, r) { + return m(n) + ? S.grep(e, function (e, t) { + return !!n.call(e, t, e) !== r + }) + : n.nodeType + ? S.grep(e, function (e) { + return (e === n) !== r + }) + : 'string' != typeof n + ? S.grep(e, function (e) { + return -1 < i.call(n, e) !== r + }) + : S.filter(n, e, r) + } + ;(S.filter = function (e, t, n) { + var r = t[0] + return ( + n && (e = ':not(' + e + ')'), + 1 === t.length && 1 === r.nodeType + ? S.find.matchesSelector(r, e) + ? [r] + : [] + : S.find.matches( + e, + S.grep(t, function (e) { + return 1 === e.nodeType + }) + ) + ) + }), + S.fn.extend({ + find: function (e) { + var t, + n, + r = this.length, + i = this + if ('string' != typeof e) + return this.pushStack( + S(e).filter(function () { + for (t = 0; t < r; t++) if (S.contains(i[t], this)) return !0 + }) + ) + for (n = this.pushStack([]), t = 0; t < r; t++) S.find(e, i[t], n) + return 1 < r ? S.uniqueSort(n) : n + }, + filter: function (e) { + return this.pushStack(j(this, e || [], !1)) + }, + not: function (e) { + return this.pushStack(j(this, e || [], !0)) + }, + is: function (e) { + return !!j(this, 'string' == typeof e && k.test(e) ? S(e) : e || [], !1) + .length + }, + }) + var D, + q = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/ + ;((S.fn.init = function (e, t, n) { + var r, i + if (!e) return this + if (((n = n || D), 'string' == typeof e)) { + if ( + !(r = + '<' === e[0] && '>' === e[e.length - 1] && 3 <= e.length + ? [null, e, null] + : q.exec(e)) || + (!r[1] && t) + ) + return !t || t.jquery ? (t || n).find(e) : this.constructor(t).find(e) + if (r[1]) { + if ( + ((t = t instanceof S ? t[0] : t), + S.merge( + this, + S.parseHTML(r[1], t && t.nodeType ? t.ownerDocument || t : E, !0) + ), + N.test(r[1]) && S.isPlainObject(t)) + ) + for (r in t) m(this[r]) ? this[r](t[r]) : this.attr(r, t[r]) + return this + } + return ( + (i = E.getElementById(r[2])) && ((this[0] = i), (this.length = 1)), this + ) + } + return e.nodeType + ? ((this[0] = e), (this.length = 1), this) + : m(e) + ? void 0 !== n.ready + ? n.ready(e) + : e(S) + : S.makeArray(e, this) + }).prototype = S.fn), + (D = S(E)) + var L = /^(?:parents|prev(?:Until|All))/, + H = { children: !0, contents: !0, next: !0, prev: !0 } + function O(e, t) { + while ((e = e[t]) && 1 !== e.nodeType); + return e + } + S.fn.extend({ + has: function (e) { + var t = S(e, this), + n = t.length + return this.filter(function () { + for (var e = 0; e < n; e++) if (S.contains(this, t[e])) return !0 + }) + }, + closest: function (e, t) { + var n, + r = 0, + i = this.length, + o = [], + a = 'string' != typeof e && S(e) + if (!k.test(e)) + for (; r < i; r++) + for (n = this[r]; n && n !== t; n = n.parentNode) + if ( + n.nodeType < 11 && + (a + ? -1 < a.index(n) + : 1 === n.nodeType && S.find.matchesSelector(n, e)) + ) { + o.push(n) + break + } + return this.pushStack(1 < o.length ? S.uniqueSort(o) : o) + }, + index: function (e) { + return e + ? 'string' == typeof e + ? i.call(S(e), this[0]) + : i.call(this, e.jquery ? e[0] : e) + : this[0] && this[0].parentNode + ? this.first().prevAll().length + : -1 + }, + add: function (e, t) { + return this.pushStack(S.uniqueSort(S.merge(this.get(), S(e, t)))) + }, + addBack: function (e) { + return this.add(null == e ? this.prevObject : this.prevObject.filter(e)) + }, + }), + S.each( + { + parent: function (e) { + var t = e.parentNode + return t && 11 !== t.nodeType ? t : null + }, + parents: function (e) { + return h(e, 'parentNode') + }, + parentsUntil: function (e, t, n) { + return h(e, 'parentNode', n) + }, + next: function (e) { + return O(e, 'nextSibling') + }, + prev: function (e) { + return O(e, 'previousSibling') + }, + nextAll: function (e) { + return h(e, 'nextSibling') + }, + prevAll: function (e) { + return h(e, 'previousSibling') + }, + nextUntil: function (e, t, n) { + return h(e, 'nextSibling', n) + }, + prevUntil: function (e, t, n) { + return h(e, 'previousSibling', n) + }, + siblings: function (e) { + return T((e.parentNode || {}).firstChild, e) + }, + children: function (e) { + return T(e.firstChild) + }, + contents: function (e) { + return null != e.contentDocument && r(e.contentDocument) + ? e.contentDocument + : (A(e, 'template') && (e = e.content || e), + S.merge([], e.childNodes)) + }, + }, + function (r, i) { + S.fn[r] = function (e, t) { + var n = S.map(this, i, e) + return ( + 'Until' !== r.slice(-5) && (t = e), + t && 'string' == typeof t && (n = S.filter(t, n)), + 1 < this.length && + (H[r] || S.uniqueSort(n), L.test(r) && n.reverse()), + this.pushStack(n) + ) + } + } + ) + var P = /[^\x20\t\r\n\f]+/g + function R(e) { + return e + } + function M(e) { + throw e + } + function I(e, t, n, r) { + var i + try { + e && m((i = e.promise)) + ? i.call(e).done(t).fail(n) + : e && m((i = e.then)) + ? i.call(e, t, n) + : t.apply(void 0, [e].slice(r)) + } catch (e) { + n.apply(void 0, [e]) + } + } + ;(S.Callbacks = function (r) { + var e, n + r = + 'string' == typeof r + ? ((e = r), + (n = {}), + S.each(e.match(P) || [], function (e, t) { + n[t] = !0 + }), + n) + : S.extend({}, r) + var i, + t, + o, + a, + s = [], + u = [], + l = -1, + c = function () { + for (a = a || r.once, o = i = !0; u.length; l = -1) { + t = u.shift() + while (++l < s.length) + !1 === s[l].apply(t[0], t[1]) && + r.stopOnFalse && + ((l = s.length), (t = !1)) + } + r.memory || (t = !1), (i = !1), a && (s = t ? [] : '') + }, + f = { + add: function () { + return ( + s && + (t && !i && ((l = s.length - 1), u.push(t)), + (function n(e) { + S.each(e, function (e, t) { + m(t) + ? (r.unique && f.has(t)) || s.push(t) + : t && t.length && 'string' !== w(t) && n(t) + }) + })(arguments), + t && !i && c()), + this + ) + }, + remove: function () { + return ( + S.each(arguments, function (e, t) { + var n + while (-1 < (n = S.inArray(t, s, n))) + s.splice(n, 1), n <= l && l-- + }), + this + ) + }, + has: function (e) { + return e ? -1 < S.inArray(e, s) : 0 < s.length + }, + empty: function () { + return s && (s = []), this + }, + disable: function () { + return (a = u = []), (s = t = ''), this + }, + disabled: function () { + return !s + }, + lock: function () { + return (a = u = []), t || i || (s = t = ''), this + }, + locked: function () { + return !!a + }, + fireWith: function (e, t) { + return ( + a || + ((t = [e, (t = t || []).slice ? t.slice() : t]), + u.push(t), + i || c()), + this + ) + }, + fire: function () { + return f.fireWith(this, arguments), this + }, + fired: function () { + return !!o + }, + } + return f + }), + S.extend({ + Deferred: function (e) { + var o = [ + [ + 'notify', + 'progress', + S.Callbacks('memory'), + S.Callbacks('memory'), + 2, + ], + [ + 'resolve', + 'done', + S.Callbacks('once memory'), + S.Callbacks('once memory'), + 0, + 'resolved', + ], + [ + 'reject', + 'fail', + S.Callbacks('once memory'), + S.Callbacks('once memory'), + 1, + 'rejected', + ], + ], + i = 'pending', + a = { + state: function () { + return i + }, + always: function () { + return s.done(arguments).fail(arguments), this + }, + catch: function (e) { + return a.then(null, e) + }, + pipe: function () { + var i = arguments + return S.Deferred(function (r) { + S.each(o, function (e, t) { + var n = m(i[t[4]]) && i[t[4]] + s[t[1]](function () { + var e = n && n.apply(this, arguments) + e && m(e.promise) + ? e + .promise() + .progress(r.notify) + .done(r.resolve) + .fail(r.reject) + : r[t[0] + 'With'](this, n ? [e] : arguments) + }) + }), + (i = null) + }).promise() + }, + then: function (t, n, r) { + var u = 0 + function l(i, o, a, s) { + return function () { + var n = this, + r = arguments, + e = function () { + var e, t + if (!(i < u)) { + if ((e = a.apply(n, r)) === o.promise()) + throw new TypeError('Thenable self-resolution') + ;(t = + e && + ('object' == typeof e || 'function' == typeof e) && + e.then), + m(t) + ? s + ? t.call(e, l(u, o, R, s), l(u, o, M, s)) + : (u++, + t.call( + e, + l(u, o, R, s), + l(u, o, M, s), + l(u, o, R, o.notifyWith) + )) + : (a !== R && ((n = void 0), (r = [e])), + (s || o.resolveWith)(n, r)) + } + }, + t = s + ? e + : function () { + try { + e() + } catch (e) { + S.Deferred.exceptionHook && + S.Deferred.exceptionHook(e, t.stackTrace), + u <= i + 1 && + (a !== M && ((n = void 0), (r = [e])), + o.rejectWith(n, r)) + } + } + i + ? t() + : (S.Deferred.getStackHook && + (t.stackTrace = S.Deferred.getStackHook()), + C.setTimeout(t)) + } + } + return S.Deferred(function (e) { + o[0][3].add(l(0, e, m(r) ? r : R, e.notifyWith)), + o[1][3].add(l(0, e, m(t) ? t : R)), + o[2][3].add(l(0, e, m(n) ? n : M)) + }).promise() + }, + promise: function (e) { + return null != e ? S.extend(e, a) : a + }, + }, + s = {} + return ( + S.each(o, function (e, t) { + var n = t[2], + r = t[5] + ;(a[t[1]] = n.add), + r && + n.add( + function () { + i = r + }, + o[3 - e][2].disable, + o[3 - e][3].disable, + o[0][2].lock, + o[0][3].lock + ), + n.add(t[3].fire), + (s[t[0]] = function () { + return ( + s[t[0] + 'With'](this === s ? void 0 : this, arguments), this + ) + }), + (s[t[0] + 'With'] = n.fireWith) + }), + a.promise(s), + e && e.call(s, s), + s + ) + }, + when: function (e) { + var n = arguments.length, + t = n, + r = Array(t), + i = s.call(arguments), + o = S.Deferred(), + a = function (t) { + return function (e) { + ;(r[t] = this), + (i[t] = 1 < arguments.length ? s.call(arguments) : e), + --n || o.resolveWith(r, i) + } + } + if ( + n <= 1 && + (I(e, o.done(a(t)).resolve, o.reject, !n), + 'pending' === o.state() || m(i[t] && i[t].then)) + ) + return o.then() + while (t--) I(i[t], a(t), o.reject) + return o.promise() + }, + }) + var W = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/ + ;(S.Deferred.exceptionHook = function (e, t) { + C.console && + C.console.warn && + e && + W.test(e.name) && + C.console.warn('jQuery.Deferred exception: ' + e.message, e.stack, t) + }), + (S.readyException = function (e) { + C.setTimeout(function () { + throw e + }) + }) + var F = S.Deferred() + function $() { + E.removeEventListener('DOMContentLoaded', $), + C.removeEventListener('load', $), + S.ready() + } + ;(S.fn.ready = function (e) { + return ( + F.then(e)['catch'](function (e) { + S.readyException(e) + }), + this + ) + }), + S.extend({ + isReady: !1, + readyWait: 1, + ready: function (e) { + ;(!0 === e ? --S.readyWait : S.isReady) || + ((S.isReady = !0) !== e && 0 < --S.readyWait) || + F.resolveWith(E, [S]) + }, + }), + (S.ready.then = F.then), + 'complete' === E.readyState || + ('loading' !== E.readyState && !E.documentElement.doScroll) + ? C.setTimeout(S.ready) + : (E.addEventListener('DOMContentLoaded', $), + C.addEventListener('load', $)) + var B = function (e, t, n, r, i, o, a) { + var s = 0, + u = e.length, + l = null == n + if ('object' === w(n)) for (s in ((i = !0), n)) B(e, t, s, n[s], !0, o, a) + else if ( + void 0 !== r && + ((i = !0), + m(r) || (a = !0), + l && + (a + ? (t.call(e, r), (t = null)) + : ((l = t), + (t = function (e, t, n) { + return l.call(S(e), n) + }))), + t) + ) + for (; s < u; s++) t(e[s], n, a ? r : r.call(e[s], s, t(e[s], n))) + return i ? e : l ? t.call(e) : u ? t(e[0], n) : o + }, + _ = /^-ms-/, + z = /-([a-z])/g + function U(e, t) { + return t.toUpperCase() + } + function X(e) { + return e.replace(_, 'ms-').replace(z, U) + } + var V = function (e) { + return 1 === e.nodeType || 9 === e.nodeType || !+e.nodeType + } + function G() { + this.expando = S.expando + G.uid++ + } + ;(G.uid = 1), + (G.prototype = { + cache: function (e) { + var t = e[this.expando] + return ( + t || + ((t = {}), + V(e) && + (e.nodeType + ? (e[this.expando] = t) + : Object.defineProperty(e, this.expando, { + value: t, + configurable: !0, + }))), + t + ) + }, + set: function (e, t, n) { + var r, + i = this.cache(e) + if ('string' == typeof t) i[X(t)] = n + else for (r in t) i[X(r)] = t[r] + return i + }, + get: function (e, t) { + return void 0 === t + ? this.cache(e) + : e[this.expando] && e[this.expando][X(t)] + }, + access: function (e, t, n) { + return void 0 === t || (t && 'string' == typeof t && void 0 === n) + ? this.get(e, t) + : (this.set(e, t, n), void 0 !== n ? n : t) + }, + remove: function (e, t) { + var n, + r = e[this.expando] + if (void 0 !== r) { + if (void 0 !== t) { + n = (t = Array.isArray(t) + ? t.map(X) + : (t = X(t)) in r + ? [t] + : t.match(P) || []).length + while (n--) delete r[t[n]] + } + ;(void 0 === t || S.isEmptyObject(r)) && + (e.nodeType ? (e[this.expando] = void 0) : delete e[this.expando]) + } + }, + hasData: function (e) { + var t = e[this.expando] + return void 0 !== t && !S.isEmptyObject(t) + }, + }) + var Y = new G(), + Q = new G(), + J = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + K = /[A-Z]/g + function Z(e, t, n) { + var r, i + if (void 0 === n && 1 === e.nodeType) + if ( + ((r = 'data-' + t.replace(K, '-$&').toLowerCase()), + 'string' == typeof (n = e.getAttribute(r))) + ) { + try { + n = + 'true' === (i = n) || + ('false' !== i && + ('null' === i + ? null + : i === +i + '' + ? +i + : J.test(i) + ? JSON.parse(i) + : i)) + } catch (e) {} + Q.set(e, t, n) + } else n = void 0 + return n + } + S.extend({ + hasData: function (e) { + return Q.hasData(e) || Y.hasData(e) + }, + data: function (e, t, n) { + return Q.access(e, t, n) + }, + removeData: function (e, t) { + Q.remove(e, t) + }, + _data: function (e, t, n) { + return Y.access(e, t, n) + }, + _removeData: function (e, t) { + Y.remove(e, t) + }, + }), + S.fn.extend({ + data: function (n, e) { + var t, + r, + i, + o = this[0], + a = o && o.attributes + if (void 0 === n) { + if ( + this.length && + ((i = Q.get(o)), 1 === o.nodeType && !Y.get(o, 'hasDataAttrs')) + ) { + t = a.length + while (t--) + a[t] && + 0 === (r = a[t].name).indexOf('data-') && + ((r = X(r.slice(5))), Z(o, r, i[r])) + Y.set(o, 'hasDataAttrs', !0) + } + return i + } + return 'object' == typeof n + ? this.each(function () { + Q.set(this, n) + }) + : B( + this, + function (e) { + var t + if (o && void 0 === e) + return void 0 !== (t = Q.get(o, n)) + ? t + : void 0 !== (t = Z(o, n)) + ? t + : void 0 + this.each(function () { + Q.set(this, n, e) + }) + }, + null, + e, + 1 < arguments.length, + null, + !0 + ) + }, + removeData: function (e) { + return this.each(function () { + Q.remove(this, e) + }) + }, + }), + S.extend({ + queue: function (e, t, n) { + var r + if (e) + return ( + (t = (t || 'fx') + 'queue'), + (r = Y.get(e, t)), + n && + (!r || Array.isArray(n) + ? (r = Y.access(e, t, S.makeArray(n))) + : r.push(n)), + r || [] + ) + }, + dequeue: function (e, t) { + t = t || 'fx' + var n = S.queue(e, t), + r = n.length, + i = n.shift(), + o = S._queueHooks(e, t) + 'inprogress' === i && ((i = n.shift()), r--), + i && + ('fx' === t && n.unshift('inprogress'), + delete o.stop, + i.call( + e, + function () { + S.dequeue(e, t) + }, + o + )), + !r && o && o.empty.fire() + }, + _queueHooks: function (e, t) { + var n = t + 'queueHooks' + return ( + Y.get(e, n) || + Y.access(e, n, { + empty: S.Callbacks('once memory').add(function () { + Y.remove(e, [t + 'queue', n]) + }), + }) + ) + }, + }), + S.fn.extend({ + queue: function (t, n) { + var e = 2 + return ( + 'string' != typeof t && ((n = t), (t = 'fx'), e--), + arguments.length < e + ? S.queue(this[0], t) + : void 0 === n + ? this + : this.each(function () { + var e = S.queue(this, t, n) + S._queueHooks(this, t), + 'fx' === t && 'inprogress' !== e[0] && S.dequeue(this, t) + }) + ) + }, + dequeue: function (e) { + return this.each(function () { + S.dequeue(this, e) + }) + }, + clearQueue: function (e) { + return this.queue(e || 'fx', []) + }, + promise: function (e, t) { + var n, + r = 1, + i = S.Deferred(), + o = this, + a = this.length, + s = function () { + --r || i.resolveWith(o, [o]) + } + 'string' != typeof e && ((t = e), (e = void 0)), (e = e || 'fx') + while (a--) + (n = Y.get(o[a], e + 'queueHooks')) && + n.empty && + (r++, n.empty.add(s)) + return s(), i.promise(t) + }, + }) + var ee = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, + te = new RegExp('^(?:([+-])=|)(' + ee + ')([a-z%]*)$', 'i'), + ne = ['Top', 'Right', 'Bottom', 'Left'], + re = E.documentElement, + ie = function (e) { + return S.contains(e.ownerDocument, e) + }, + oe = { composed: !0 } + re.getRootNode && + (ie = function (e) { + return ( + S.contains(e.ownerDocument, e) || e.getRootNode(oe) === e.ownerDocument + ) + }) + var ae = function (e, t) { + return ( + 'none' === (e = t || e).style.display || + ('' === e.style.display && ie(e) && 'none' === S.css(e, 'display')) + ) + } + function se(e, t, n, r) { + var i, + o, + a = 20, + s = r + ? function () { + return r.cur() + } + : function () { + return S.css(e, t, '') + }, + u = s(), + l = (n && n[3]) || (S.cssNumber[t] ? '' : 'px'), + c = + e.nodeType && + (S.cssNumber[t] || ('px' !== l && +u)) && + te.exec(S.css(e, t)) + if (c && c[3] !== l) { + ;(u /= 2), (l = l || c[3]), (c = +u || 1) + while (a--) + S.style(e, t, c + l), + (1 - o) * (1 - (o = s() / u || 0.5)) <= 0 && (a = 0), + (c /= o) + ;(c *= 2), S.style(e, t, c + l), (n = n || []) + } + return ( + n && + ((c = +c || +u || 0), + (i = n[1] ? c + (n[1] + 1) * n[2] : +n[2]), + r && ((r.unit = l), (r.start = c), (r.end = i))), + i + ) + } + var ue = {} + function le(e, t) { + for (var n, r, i, o, a, s, u, l = [], c = 0, f = e.length; c < f; c++) + (r = e[c]).style && + ((n = r.style.display), + t + ? ('none' === n && + ((l[c] = Y.get(r, 'display') || null), + l[c] || (r.style.display = '')), + '' === r.style.display && + ae(r) && + (l[c] = + ((u = a = o = void 0), + (a = (i = r).ownerDocument), + (s = i.nodeName), + (u = ue[s]) || + ((o = a.body.appendChild(a.createElement(s))), + (u = S.css(o, 'display')), + o.parentNode.removeChild(o), + 'none' === u && (u = 'block'), + (ue[s] = u))))) + : 'none' !== n && ((l[c] = 'none'), Y.set(r, 'display', n))) + for (c = 0; c < f; c++) null != l[c] && (e[c].style.display = l[c]) + return e + } + S.fn.extend({ + show: function () { + return le(this, !0) + }, + hide: function () { + return le(this) + }, + toggle: function (e) { + return 'boolean' == typeof e + ? e + ? this.show() + : this.hide() + : this.each(function () { + ae(this) ? S(this).show() : S(this).hide() + }) + }, + }) + var ce, + fe, + pe = /^(?:checkbox|radio)$/i, + de = /<([a-z][^\/\0>\x20\t\r\n\f]*)/i, + he = /^$|^module$|\/(?:java|ecma)script/i + ;(ce = E.createDocumentFragment().appendChild(E.createElement('div'))), + (fe = E.createElement('input')).setAttribute('type', 'radio'), + fe.setAttribute('checked', 'checked'), + fe.setAttribute('name', 't'), + ce.appendChild(fe), + (v.checkClone = ce.cloneNode(!0).cloneNode(!0).lastChild.checked), + (ce.innerHTML = ''), + (v.noCloneChecked = !!ce.cloneNode(!0).lastChild.defaultValue), + (ce.innerHTML = ''), + (v.option = !!ce.lastChild) + var ge = { + thead: [1, '', '
'], + col: [2, '', '
'], + tr: [2, '', '
'], + td: [3, '', '
'], + _default: [0, '', ''], + } + function ye(e, t) { + var n + return ( + (n = + 'undefined' != typeof e.getElementsByTagName + ? e.getElementsByTagName(t || '*') + : 'undefined' != typeof e.querySelectorAll + ? e.querySelectorAll(t || '*') + : []), + void 0 === t || (t && A(e, t)) ? S.merge([e], n) : n + ) + } + function ve(e, t) { + for (var n = 0, r = e.length; n < r; n++) + Y.set(e[n], 'globalEval', !t || Y.get(t[n], 'globalEval')) + } + ;(ge.tbody = ge.tfoot = ge.colgroup = ge.caption = ge.thead), + (ge.th = ge.td), + v.option || + (ge.optgroup = ge.option = + [1, "']) + var me = /<|&#?\w+;/ + function xe(e, t, n, r, i) { + for ( + var o, + a, + s, + u, + l, + c, + f = t.createDocumentFragment(), + p = [], + d = 0, + h = e.length; + d < h; + d++ + ) + if ((o = e[d]) || 0 === o) + if ('object' === w(o)) S.merge(p, o.nodeType ? [o] : o) + else if (me.test(o)) { + ;(a = a || f.appendChild(t.createElement('div'))), + (s = (de.exec(o) || ['', ''])[1].toLowerCase()), + (u = ge[s] || ge._default), + (a.innerHTML = u[1] + S.htmlPrefilter(o) + u[2]), + (c = u[0]) + while (c--) a = a.lastChild + S.merge(p, a.childNodes), ((a = f.firstChild).textContent = '') + } else p.push(t.createTextNode(o)) + ;(f.textContent = ''), (d = 0) + while ((o = p[d++])) + if (r && -1 < S.inArray(o, r)) i && i.push(o) + else if ( + ((l = ie(o)), (a = ye(f.appendChild(o), 'script')), l && ve(a), n) + ) { + c = 0 + while ((o = a[c++])) he.test(o.type || '') && n.push(o) + } + return f + } + var be = /^([^.]*)(?:\.(.+)|)/ + function we() { + return !0 + } + function Te() { + return !1 + } + function Ce(e, t) { + return ( + (e === + (function () { + try { + return E.activeElement + } catch (e) {} + })()) == + ('focus' === t) + ) + } + function Ee(e, t, n, r, i, o) { + var a, s + if ('object' == typeof t) { + for (s in ('string' != typeof n && ((r = r || n), (n = void 0)), t)) + Ee(e, s, n, r, t[s], o) + return e + } + if ( + (null == r && null == i + ? ((i = n), (r = n = void 0)) + : null == i && + ('string' == typeof n + ? ((i = r), (r = void 0)) + : ((i = r), (r = n), (n = void 0))), + !1 === i) + ) + i = Te + else if (!i) return e + return ( + 1 === o && + ((a = i), + ((i = function (e) { + return S().off(e), a.apply(this, arguments) + }).guid = a.guid || (a.guid = S.guid++))), + e.each(function () { + S.event.add(this, t, i, r, n) + }) + ) + } + function Se(e, i, o) { + o + ? (Y.set(e, i, !1), + S.event.add(e, i, { + namespace: !1, + handler: function (e) { + var t, + n, + r = Y.get(this, i) + if (1 & e.isTrigger && this[i]) { + if (r.length) + (S.event.special[i] || {}).delegateType && e.stopPropagation() + else if ( + ((r = s.call(arguments)), + Y.set(this, i, r), + (t = o(this, i)), + this[i](), + r !== (n = Y.get(this, i)) || t ? Y.set(this, i, !1) : (n = {}), + r !== n) + ) + return ( + e.stopImmediatePropagation(), e.preventDefault(), n && n.value + ) + } else + r.length && + (Y.set(this, i, { + value: S.event.trigger( + S.extend(r[0], S.Event.prototype), + r.slice(1), + this + ), + }), + e.stopImmediatePropagation()) + }, + })) + : void 0 === Y.get(e, i) && S.event.add(e, i, we) + } + ;(S.event = { + global: {}, + add: function (t, e, n, r, i) { + var o, + a, + s, + u, + l, + c, + f, + p, + d, + h, + g, + y = Y.get(t) + if (V(t)) { + n.handler && ((n = (o = n).handler), (i = o.selector)), + i && S.find.matchesSelector(re, i), + n.guid || (n.guid = S.guid++), + (u = y.events) || (u = y.events = Object.create(null)), + (a = y.handle) || + (a = y.handle = + function (e) { + return 'undefined' != typeof S && S.event.triggered !== e.type + ? S.event.dispatch.apply(t, arguments) + : void 0 + }), + (l = (e = (e || '').match(P) || ['']).length) + while (l--) + (d = g = (s = be.exec(e[l]) || [])[1]), + (h = (s[2] || '').split('.').sort()), + d && + ((f = S.event.special[d] || {}), + (d = (i ? f.delegateType : f.bindType) || d), + (f = S.event.special[d] || {}), + (c = S.extend( + { + type: d, + origType: g, + data: r, + handler: n, + guid: n.guid, + selector: i, + needsContext: i && S.expr.match.needsContext.test(i), + namespace: h.join('.'), + }, + o + )), + (p = u[d]) || + (((p = u[d] = []).delegateCount = 0), + (f.setup && !1 !== f.setup.call(t, r, h, a)) || + (t.addEventListener && t.addEventListener(d, a))), + f.add && + (f.add.call(t, c), c.handler.guid || (c.handler.guid = n.guid)), + i ? p.splice(p.delegateCount++, 0, c) : p.push(c), + (S.event.global[d] = !0)) + } + }, + remove: function (e, t, n, r, i) { + var o, + a, + s, + u, + l, + c, + f, + p, + d, + h, + g, + y = Y.hasData(e) && Y.get(e) + if (y && (u = y.events)) { + l = (t = (t || '').match(P) || ['']).length + while (l--) + if ( + ((d = g = (s = be.exec(t[l]) || [])[1]), + (h = (s[2] || '').split('.').sort()), + d) + ) { + ;(f = S.event.special[d] || {}), + (p = u[(d = (r ? f.delegateType : f.bindType) || d)] || []), + (s = + s[2] && + new RegExp('(^|\\.)' + h.join('\\.(?:.*\\.|)') + '(\\.|$)')), + (a = o = p.length) + while (o--) + (c = p[o]), + (!i && g !== c.origType) || + (n && n.guid !== c.guid) || + (s && !s.test(c.namespace)) || + (r && r !== c.selector && ('**' !== r || !c.selector)) || + (p.splice(o, 1), + c.selector && p.delegateCount--, + f.remove && f.remove.call(e, c)) + a && + !p.length && + ((f.teardown && !1 !== f.teardown.call(e, h, y.handle)) || + S.removeEvent(e, d, y.handle), + delete u[d]) + } else for (d in u) S.event.remove(e, d + t[l], n, r, !0) + S.isEmptyObject(u) && Y.remove(e, 'handle events') + } + }, + dispatch: function (e) { + var t, + n, + r, + i, + o, + a, + s = new Array(arguments.length), + u = S.event.fix(e), + l = (Y.get(this, 'events') || Object.create(null))[u.type] || [], + c = S.event.special[u.type] || {} + for (s[0] = u, t = 1; t < arguments.length; t++) s[t] = arguments[t] + if ( + ((u.delegateTarget = this), + !c.preDispatch || !1 !== c.preDispatch.call(this, u)) + ) { + ;(a = S.event.handlers.call(this, u, l)), (t = 0) + while ((i = a[t++]) && !u.isPropagationStopped()) { + ;(u.currentTarget = i.elem), (n = 0) + while ((o = i.handlers[n++]) && !u.isImmediatePropagationStopped()) + (u.rnamespace && + !1 !== o.namespace && + !u.rnamespace.test(o.namespace)) || + ((u.handleObj = o), + (u.data = o.data), + void 0 !== + (r = ( + (S.event.special[o.origType] || {}).handle || o.handler + ).apply(i.elem, s)) && + !1 === (u.result = r) && + (u.preventDefault(), u.stopPropagation())) + } + return c.postDispatch && c.postDispatch.call(this, u), u.result + } + }, + handlers: function (e, t) { + var n, + r, + i, + o, + a, + s = [], + u = t.delegateCount, + l = e.target + if (u && l.nodeType && !('click' === e.type && 1 <= e.button)) + for (; l !== this; l = l.parentNode || this) + if (1 === l.nodeType && ('click' !== e.type || !0 !== l.disabled)) { + for (o = [], a = {}, n = 0; n < u; n++) + void 0 === a[(i = (r = t[n]).selector + ' ')] && + (a[i] = r.needsContext + ? -1 < S(i, this).index(l) + : S.find(i, this, null, [l]).length), + a[i] && o.push(r) + o.length && s.push({ elem: l, handlers: o }) + } + return ( + (l = this), u < t.length && s.push({ elem: l, handlers: t.slice(u) }), s + ) + }, + addProp: function (t, e) { + Object.defineProperty(S.Event.prototype, t, { + enumerable: !0, + configurable: !0, + get: m(e) + ? function () { + if (this.originalEvent) return e(this.originalEvent) + } + : function () { + if (this.originalEvent) return this.originalEvent[t] + }, + set: function (e) { + Object.defineProperty(this, t, { + enumerable: !0, + configurable: !0, + writable: !0, + value: e, + }) + }, + }) + }, + fix: function (e) { + return e[S.expando] ? e : new S.Event(e) + }, + special: { + load: { noBubble: !0 }, + click: { + setup: function (e) { + var t = this || e + return ( + pe.test(t.type) && t.click && A(t, 'input') && Se(t, 'click', we), + !1 + ) + }, + trigger: function (e) { + var t = this || e + return ( + pe.test(t.type) && t.click && A(t, 'input') && Se(t, 'click'), !0 + ) + }, + _default: function (e) { + var t = e.target + return ( + (pe.test(t.type) && + t.click && + A(t, 'input') && + Y.get(t, 'click')) || + A(t, 'a') + ) + }, + }, + beforeunload: { + postDispatch: function (e) { + void 0 !== e.result && + e.originalEvent && + (e.originalEvent.returnValue = e.result) + }, + }, + }, + }), + (S.removeEvent = function (e, t, n) { + e.removeEventListener && e.removeEventListener(t, n) + }), + (S.Event = function (e, t) { + if (!(this instanceof S.Event)) return new S.Event(e, t) + e && e.type + ? ((this.originalEvent = e), + (this.type = e.type), + (this.isDefaultPrevented = + e.defaultPrevented || + (void 0 === e.defaultPrevented && !1 === e.returnValue) + ? we + : Te), + (this.target = + e.target && 3 === e.target.nodeType + ? e.target.parentNode + : e.target), + (this.currentTarget = e.currentTarget), + (this.relatedTarget = e.relatedTarget)) + : (this.type = e), + t && S.extend(this, t), + (this.timeStamp = (e && e.timeStamp) || Date.now()), + (this[S.expando] = !0) + }), + (S.Event.prototype = { + constructor: S.Event, + isDefaultPrevented: Te, + isPropagationStopped: Te, + isImmediatePropagationStopped: Te, + isSimulated: !1, + preventDefault: function () { + var e = this.originalEvent + ;(this.isDefaultPrevented = we), + e && !this.isSimulated && e.preventDefault() + }, + stopPropagation: function () { + var e = this.originalEvent + ;(this.isPropagationStopped = we), + e && !this.isSimulated && e.stopPropagation() + }, + stopImmediatePropagation: function () { + var e = this.originalEvent + ;(this.isImmediatePropagationStopped = we), + e && !this.isSimulated && e.stopImmediatePropagation(), + this.stopPropagation() + }, + }), + S.each( + { + altKey: !0, + bubbles: !0, + cancelable: !0, + changedTouches: !0, + ctrlKey: !0, + detail: !0, + eventPhase: !0, + metaKey: !0, + pageX: !0, + pageY: !0, + shiftKey: !0, + view: !0, + char: !0, + code: !0, + charCode: !0, + key: !0, + keyCode: !0, + button: !0, + buttons: !0, + clientX: !0, + clientY: !0, + offsetX: !0, + offsetY: !0, + pointerId: !0, + pointerType: !0, + screenX: !0, + screenY: !0, + targetTouches: !0, + toElement: !0, + touches: !0, + which: !0, + }, + S.event.addProp + ), + S.each({ focus: 'focusin', blur: 'focusout' }, function (t, e) { + S.event.special[t] = { + setup: function () { + return Se(this, t, Ce), !1 + }, + trigger: function () { + return Se(this, t), !0 + }, + _default: function (e) { + return Y.get(e.target, t) + }, + delegateType: e, + } + }), + S.each( + { + mouseenter: 'mouseover', + mouseleave: 'mouseout', + pointerenter: 'pointerover', + pointerleave: 'pointerout', + }, + function (e, i) { + S.event.special[e] = { + delegateType: i, + bindType: i, + handle: function (e) { + var t, + n = e.relatedTarget, + r = e.handleObj + return ( + (n && (n === this || S.contains(this, n))) || + ((e.type = r.origType), + (t = r.handler.apply(this, arguments)), + (e.type = i)), + t + ) + }, + } + } + ), + S.fn.extend({ + on: function (e, t, n, r) { + return Ee(this, e, t, n, r) + }, + one: function (e, t, n, r) { + return Ee(this, e, t, n, r, 1) + }, + off: function (e, t, n) { + var r, i + if (e && e.preventDefault && e.handleObj) + return ( + (r = e.handleObj), + S(e.delegateTarget).off( + r.namespace ? r.origType + '.' + r.namespace : r.origType, + r.selector, + r.handler + ), + this + ) + if ('object' == typeof e) { + for (i in e) this.off(i, t, e[i]) + return this + } + return ( + (!1 !== t && 'function' != typeof t) || ((n = t), (t = void 0)), + !1 === n && (n = Te), + this.each(function () { + S.event.remove(this, e, n, t) + }) + ) + }, + }) + var ke = /\s*$/g + function je(e, t) { + return ( + (A(e, 'table') && + A(11 !== t.nodeType ? t : t.firstChild, 'tr') && + S(e).children('tbody')[0]) || + e + ) + } + function De(e) { + return (e.type = (null !== e.getAttribute('type')) + '/' + e.type), e + } + function qe(e) { + return ( + 'true/' === (e.type || '').slice(0, 5) + ? (e.type = e.type.slice(5)) + : e.removeAttribute('type'), + e + ) + } + function Le(e, t) { + var n, r, i, o, a, s + if (1 === t.nodeType) { + if (Y.hasData(e) && (s = Y.get(e).events)) + for (i in (Y.remove(t, 'handle events'), s)) + for (n = 0, r = s[i].length; n < r; n++) S.event.add(t, i, s[i][n]) + Q.hasData(e) && ((o = Q.access(e)), (a = S.extend({}, o)), Q.set(t, a)) + } + } + function He(n, r, i, o) { + r = g(r) + var e, + t, + a, + s, + u, + l, + c = 0, + f = n.length, + p = f - 1, + d = r[0], + h = m(d) + if (h || (1 < f && 'string' == typeof d && !v.checkClone && Ae.test(d))) + return n.each(function (e) { + var t = n.eq(e) + h && (r[0] = d.call(this, e, t.html())), He(t, r, i, o) + }) + if ( + f && + ((t = (e = xe(r, n[0].ownerDocument, !1, n, o)).firstChild), + 1 === e.childNodes.length && (e = t), + t || o) + ) { + for (s = (a = S.map(ye(e, 'script'), De)).length; c < f; c++) + (u = e), + c !== p && + ((u = S.clone(u, !0, !0)), s && S.merge(a, ye(u, 'script'))), + i.call(n[c], u, c) + if (s) + for (l = a[a.length - 1].ownerDocument, S.map(a, qe), c = 0; c < s; c++) + (u = a[c]), + he.test(u.type || '') && + !Y.access(u, 'globalEval') && + S.contains(l, u) && + (u.src && 'module' !== (u.type || '').toLowerCase() + ? S._evalUrl && + !u.noModule && + S._evalUrl( + u.src, + { nonce: u.nonce || u.getAttribute('nonce') }, + l + ) + : b(u.textContent.replace(Ne, ''), u, l)) + } + return n + } + function Oe(e, t, n) { + for (var r, i = t ? S.filter(t, e) : e, o = 0; null != (r = i[o]); o++) + n || 1 !== r.nodeType || S.cleanData(ye(r)), + r.parentNode && + (n && ie(r) && ve(ye(r, 'script')), r.parentNode.removeChild(r)) + return e + } + S.extend({ + htmlPrefilter: function (e) { + return e + }, + clone: function (e, t, n) { + var r, + i, + o, + a, + s, + u, + l, + c = e.cloneNode(!0), + f = ie(e) + if ( + !( + v.noCloneChecked || + (1 !== e.nodeType && 11 !== e.nodeType) || + S.isXMLDoc(e) + ) + ) + for (a = ye(c), r = 0, i = (o = ye(e)).length; r < i; r++) + (s = o[r]), + (u = a[r]), + void 0, + 'input' === (l = u.nodeName.toLowerCase()) && pe.test(s.type) + ? (u.checked = s.checked) + : ('input' !== l && 'textarea' !== l) || + (u.defaultValue = s.defaultValue) + if (t) + if (n) + for (o = o || ye(e), a = a || ye(c), r = 0, i = o.length; r < i; r++) + Le(o[r], a[r]) + else Le(e, c) + return 0 < (a = ye(c, 'script')).length && ve(a, !f && ye(e, 'script')), c + }, + cleanData: function (e) { + for (var t, n, r, i = S.event.special, o = 0; void 0 !== (n = e[o]); o++) + if (V(n)) { + if ((t = n[Y.expando])) { + if (t.events) + for (r in t.events) + i[r] ? S.event.remove(n, r) : S.removeEvent(n, r, t.handle) + n[Y.expando] = void 0 + } + n[Q.expando] && (n[Q.expando] = void 0) + } + }, + }), + S.fn.extend({ + detach: function (e) { + return Oe(this, e, !0) + }, + remove: function (e) { + return Oe(this, e) + }, + text: function (e) { + return B( + this, + function (e) { + return void 0 === e + ? S.text(this) + : this.empty().each(function () { + ;(1 !== this.nodeType && + 11 !== this.nodeType && + 9 !== this.nodeType) || + (this.textContent = e) + }) + }, + null, + e, + arguments.length + ) + }, + append: function () { + return He(this, arguments, function (e) { + ;(1 !== this.nodeType && + 11 !== this.nodeType && + 9 !== this.nodeType) || + je(this, e).appendChild(e) + }) + }, + prepend: function () { + return He(this, arguments, function (e) { + if ( + 1 === this.nodeType || + 11 === this.nodeType || + 9 === this.nodeType + ) { + var t = je(this, e) + t.insertBefore(e, t.firstChild) + } + }) + }, + before: function () { + return He(this, arguments, function (e) { + this.parentNode && this.parentNode.insertBefore(e, this) + }) + }, + after: function () { + return He(this, arguments, function (e) { + this.parentNode && this.parentNode.insertBefore(e, this.nextSibling) + }) + }, + empty: function () { + for (var e, t = 0; null != (e = this[t]); t++) + 1 === e.nodeType && (S.cleanData(ye(e, !1)), (e.textContent = '')) + return this + }, + clone: function (e, t) { + return ( + (e = null != e && e), + (t = null == t ? e : t), + this.map(function () { + return S.clone(this, e, t) + }) + ) + }, + html: function (e) { + return B( + this, + function (e) { + var t = this[0] || {}, + n = 0, + r = this.length + if (void 0 === e && 1 === t.nodeType) return t.innerHTML + if ( + 'string' == typeof e && + !ke.test(e) && + !ge[(de.exec(e) || ['', ''])[1].toLowerCase()] + ) { + e = S.htmlPrefilter(e) + try { + for (; n < r; n++) + 1 === (t = this[n] || {}).nodeType && + (S.cleanData(ye(t, !1)), (t.innerHTML = e)) + t = 0 + } catch (e) {} + } + t && this.empty().append(e) + }, + null, + e, + arguments.length + ) + }, + replaceWith: function () { + var n = [] + return He( + this, + arguments, + function (e) { + var t = this.parentNode + S.inArray(this, n) < 0 && + (S.cleanData(ye(this)), t && t.replaceChild(e, this)) + }, + n + ) + }, + }), + S.each( + { + appendTo: 'append', + prependTo: 'prepend', + insertBefore: 'before', + insertAfter: 'after', + replaceAll: 'replaceWith', + }, + function (e, a) { + S.fn[e] = function (e) { + for (var t, n = [], r = S(e), i = r.length - 1, o = 0; o <= i; o++) + (t = o === i ? this : this.clone(!0)), + S(r[o])[a](t), + u.apply(n, t.get()) + return this.pushStack(n) + } + } + ) + var Pe = new RegExp('^(' + ee + ')(?!px)[a-z%]+$', 'i'), + Re = /^--/, + Me = function (e) { + var t = e.ownerDocument.defaultView + return (t && t.opener) || (t = C), t.getComputedStyle(e) + }, + Ie = function (e, t, n) { + var r, + i, + o = {} + for (i in t) (o[i] = e.style[i]), (e.style[i] = t[i]) + for (i in ((r = n.call(e)), t)) e.style[i] = o[i] + return r + }, + We = new RegExp(ne.join('|'), 'i'), + Fe = '[\\x20\\t\\r\\n\\f]', + $e = new RegExp('^' + Fe + '+|((?:^|[^\\\\])(?:\\\\.)*)' + Fe + '+$', 'g') + function Be(e, t, n) { + var r, + i, + o, + a, + s = Re.test(t), + u = e.style + return ( + (n = n || Me(e)) && + ((a = n.getPropertyValue(t) || n[t]), + s && a && (a = a.replace($e, '$1') || void 0), + '' !== a || ie(e) || (a = S.style(e, t)), + !v.pixelBoxStyles() && + Pe.test(a) && + We.test(t) && + ((r = u.width), + (i = u.minWidth), + (o = u.maxWidth), + (u.minWidth = u.maxWidth = u.width = a), + (a = n.width), + (u.width = r), + (u.minWidth = i), + (u.maxWidth = o))), + void 0 !== a ? a + '' : a + ) + } + function _e(e, t) { + return { + get: function () { + if (!e()) return (this.get = t).apply(this, arguments) + delete this.get + }, + } + } + !(function () { + function e() { + if (l) { + ;(u.style.cssText = + 'position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0'), + (l.style.cssText = + 'position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%'), + re.appendChild(u).appendChild(l) + var e = C.getComputedStyle(l) + ;(n = '1%' !== e.top), + (s = 12 === t(e.marginLeft)), + (l.style.right = '60%'), + (o = 36 === t(e.right)), + (r = 36 === t(e.width)), + (l.style.position = 'absolute'), + (i = 12 === t(l.offsetWidth / 3)), + re.removeChild(u), + (l = null) + } + } + function t(e) { + return Math.round(parseFloat(e)) + } + var n, + r, + i, + o, + a, + s, + u = E.createElement('div'), + l = E.createElement('div') + l.style && + ((l.style.backgroundClip = 'content-box'), + (l.cloneNode(!0).style.backgroundClip = ''), + (v.clearCloneStyle = 'content-box' === l.style.backgroundClip), + S.extend(v, { + boxSizingReliable: function () { + return e(), r + }, + pixelBoxStyles: function () { + return e(), o + }, + pixelPosition: function () { + return e(), n + }, + reliableMarginLeft: function () { + return e(), s + }, + scrollboxSize: function () { + return e(), i + }, + reliableTrDimensions: function () { + var e, t, n, r + return ( + null == a && + ((e = E.createElement('table')), + (t = E.createElement('tr')), + (n = E.createElement('div')), + (e.style.cssText = + 'position:absolute;left:-11111px;border-collapse:separate'), + (t.style.cssText = 'border:1px solid'), + (t.style.height = '1px'), + (n.style.height = '9px'), + (n.style.display = 'block'), + re.appendChild(e).appendChild(t).appendChild(n), + (r = C.getComputedStyle(t)), + (a = + parseInt(r.height, 10) + + parseInt(r.borderTopWidth, 10) + + parseInt(r.borderBottomWidth, 10) === + t.offsetHeight), + re.removeChild(e)), + a + ) + }, + })) + })() + var ze = ['Webkit', 'Moz', 'ms'], + Ue = E.createElement('div').style, + Xe = {} + function Ve(e) { + var t = S.cssProps[e] || Xe[e] + return ( + t || + (e in Ue + ? e + : (Xe[e] = + (function (e) { + var t = e[0].toUpperCase() + e.slice(1), + n = ze.length + while (n--) if ((e = ze[n] + t) in Ue) return e + })(e) || e)) + ) + } + var Ge = /^(none|table(?!-c[ea]).+)/, + Ye = { position: 'absolute', visibility: 'hidden', display: 'block' }, + Qe = { letterSpacing: '0', fontWeight: '400' } + function Je(e, t, n) { + var r = te.exec(t) + return r ? Math.max(0, r[2] - (n || 0)) + (r[3] || 'px') : t + } + function Ke(e, t, n, r, i, o) { + var a = 'width' === t ? 1 : 0, + s = 0, + u = 0 + if (n === (r ? 'border' : 'content')) return 0 + for (; a < 4; a += 2) + 'margin' === n && (u += S.css(e, n + ne[a], !0, i)), + r + ? ('content' === n && (u -= S.css(e, 'padding' + ne[a], !0, i)), + 'margin' !== n && + (u -= S.css(e, 'border' + ne[a] + 'Width', !0, i))) + : ((u += S.css(e, 'padding' + ne[a], !0, i)), + 'padding' !== n + ? (u += S.css(e, 'border' + ne[a] + 'Width', !0, i)) + : (s += S.css(e, 'border' + ne[a] + 'Width', !0, i))) + return ( + !r && + 0 <= o && + (u += + Math.max( + 0, + Math.ceil( + e['offset' + t[0].toUpperCase() + t.slice(1)] - o - u - s - 0.5 + ) + ) || 0), + u + ) + } + function Ze(e, t, n) { + var r = Me(e), + i = + (!v.boxSizingReliable() || n) && + 'border-box' === S.css(e, 'boxSizing', !1, r), + o = i, + a = Be(e, t, r), + s = 'offset' + t[0].toUpperCase() + t.slice(1) + if (Pe.test(a)) { + if (!n) return a + a = 'auto' + } + return ( + ((!v.boxSizingReliable() && i) || + (!v.reliableTrDimensions() && A(e, 'tr')) || + 'auto' === a || + (!parseFloat(a) && 'inline' === S.css(e, 'display', !1, r))) && + e.getClientRects().length && + ((i = 'border-box' === S.css(e, 'boxSizing', !1, r)), + (o = s in e) && (a = e[s])), + (a = parseFloat(a) || 0) + + Ke(e, t, n || (i ? 'border' : 'content'), o, r, a) + + 'px' + ) + } + function et(e, t, n, r, i) { + return new et.prototype.init(e, t, n, r, i) + } + S.extend({ + cssHooks: { + opacity: { + get: function (e, t) { + if (t) { + var n = Be(e, 'opacity') + return '' === n ? '1' : n + } + }, + }, + }, + cssNumber: { + animationIterationCount: !0, + columnCount: !0, + fillOpacity: !0, + flexGrow: !0, + flexShrink: !0, + fontWeight: !0, + gridArea: !0, + gridColumn: !0, + gridColumnEnd: !0, + gridColumnStart: !0, + gridRow: !0, + gridRowEnd: !0, + gridRowStart: !0, + lineHeight: !0, + opacity: !0, + order: !0, + orphans: !0, + widows: !0, + zIndex: !0, + zoom: !0, + }, + cssProps: {}, + style: function (e, t, n, r) { + if (e && 3 !== e.nodeType && 8 !== e.nodeType && e.style) { + var i, + o, + a, + s = X(t), + u = Re.test(t), + l = e.style + if ( + (u || (t = Ve(s)), (a = S.cssHooks[t] || S.cssHooks[s]), void 0 === n) + ) + return a && 'get' in a && void 0 !== (i = a.get(e, !1, r)) ? i : l[t] + 'string' === (o = typeof n) && + (i = te.exec(n)) && + i[1] && + ((n = se(e, t, i)), (o = 'number')), + null != n && + n == n && + ('number' !== o || + u || + (n += (i && i[3]) || (S.cssNumber[s] ? '' : 'px')), + v.clearCloneStyle || + '' !== n || + 0 !== t.indexOf('background') || + (l[t] = 'inherit'), + (a && 'set' in a && void 0 === (n = a.set(e, n, r))) || + (u ? l.setProperty(t, n) : (l[t] = n))) + } + }, + css: function (e, t, n, r) { + var i, + o, + a, + s = X(t) + return ( + Re.test(t) || (t = Ve(s)), + (a = S.cssHooks[t] || S.cssHooks[s]) && + 'get' in a && + (i = a.get(e, !0, n)), + void 0 === i && (i = Be(e, t, r)), + 'normal' === i && t in Qe && (i = Qe[t]), + '' === n || n + ? ((o = parseFloat(i)), !0 === n || isFinite(o) ? o || 0 : i) + : i + ) + }, + }), + S.each(['height', 'width'], function (e, u) { + S.cssHooks[u] = { + get: function (e, t, n) { + if (t) + return !Ge.test(S.css(e, 'display')) || + (e.getClientRects().length && e.getBoundingClientRect().width) + ? Ze(e, u, n) + : Ie(e, Ye, function () { + return Ze(e, u, n) + }) + }, + set: function (e, t, n) { + var r, + i = Me(e), + o = !v.scrollboxSize() && 'absolute' === i.position, + a = (o || n) && 'border-box' === S.css(e, 'boxSizing', !1, i), + s = n ? Ke(e, u, n, a, i) : 0 + return ( + a && + o && + (s -= Math.ceil( + e['offset' + u[0].toUpperCase() + u.slice(1)] - + parseFloat(i[u]) - + Ke(e, u, 'border', !1, i) - + 0.5 + )), + s && + (r = te.exec(t)) && + 'px' !== (r[3] || 'px') && + ((e.style[u] = t), (t = S.css(e, u))), + Je(0, t, s) + ) + }, + } + }), + (S.cssHooks.marginLeft = _e(v.reliableMarginLeft, function (e, t) { + if (t) + return ( + (parseFloat(Be(e, 'marginLeft')) || + e.getBoundingClientRect().left - + Ie(e, { marginLeft: 0 }, function () { + return e.getBoundingClientRect().left + })) + 'px' + ) + })), + S.each({ margin: '', padding: '', border: 'Width' }, function (i, o) { + ;(S.cssHooks[i + o] = { + expand: function (e) { + for ( + var t = 0, n = {}, r = 'string' == typeof e ? e.split(' ') : [e]; + t < 4; + t++ + ) + n[i + ne[t] + o] = r[t] || r[t - 2] || r[0] + return n + }, + }), + 'margin' !== i && (S.cssHooks[i + o].set = Je) + }), + S.fn.extend({ + css: function (e, t) { + return B( + this, + function (e, t, n) { + var r, + i, + o = {}, + a = 0 + if (Array.isArray(t)) { + for (r = Me(e), i = t.length; a < i; a++) + o[t[a]] = S.css(e, t[a], !1, r) + return o + } + return void 0 !== n ? S.style(e, t, n) : S.css(e, t) + }, + e, + t, + 1 < arguments.length + ) + }, + }), + (((S.Tween = et).prototype = { + constructor: et, + init: function (e, t, n, r, i, o) { + ;(this.elem = e), + (this.prop = n), + (this.easing = i || S.easing._default), + (this.options = t), + (this.start = this.now = this.cur()), + (this.end = r), + (this.unit = o || (S.cssNumber[n] ? '' : 'px')) + }, + cur: function () { + var e = et.propHooks[this.prop] + return e && e.get ? e.get(this) : et.propHooks._default.get(this) + }, + run: function (e) { + var t, + n = et.propHooks[this.prop] + return ( + this.options.duration + ? (this.pos = t = + S.easing[this.easing]( + e, + this.options.duration * e, + 0, + 1, + this.options.duration + )) + : (this.pos = t = e), + (this.now = (this.end - this.start) * t + this.start), + this.options.step && + this.options.step.call(this.elem, this.now, this), + n && n.set ? n.set(this) : et.propHooks._default.set(this), + this + ) + }, + }).init.prototype = et.prototype), + ((et.propHooks = { + _default: { + get: function (e) { + var t + return 1 !== e.elem.nodeType || + (null != e.elem[e.prop] && null == e.elem.style[e.prop]) + ? e.elem[e.prop] + : (t = S.css(e.elem, e.prop, '')) && 'auto' !== t + ? t + : 0 + }, + set: function (e) { + S.fx.step[e.prop] + ? S.fx.step[e.prop](e) + : 1 !== e.elem.nodeType || + (!S.cssHooks[e.prop] && null == e.elem.style[Ve(e.prop)]) + ? (e.elem[e.prop] = e.now) + : S.style(e.elem, e.prop, e.now + e.unit) + }, + }, + }).scrollTop = et.propHooks.scrollLeft = + { + set: function (e) { + e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now) + }, + }), + (S.easing = { + linear: function (e) { + return e + }, + swing: function (e) { + return 0.5 - Math.cos(e * Math.PI) / 2 + }, + _default: 'swing', + }), + (S.fx = et.prototype.init), + (S.fx.step = {}) + var tt, + nt, + rt, + it, + ot = /^(?:toggle|show|hide)$/, + at = /queueHooks$/ + function st() { + nt && + (!1 === E.hidden && C.requestAnimationFrame + ? C.requestAnimationFrame(st) + : C.setTimeout(st, S.fx.interval), + S.fx.tick()) + } + function ut() { + return ( + C.setTimeout(function () { + tt = void 0 + }), + (tt = Date.now()) + ) + } + function lt(e, t) { + var n, + r = 0, + i = { height: e } + for (t = t ? 1 : 0; r < 4; r += 2 - t) + i['margin' + (n = ne[r])] = i['padding' + n] = e + return t && (i.opacity = i.width = e), i + } + function ct(e, t, n) { + for ( + var r, + i = (ft.tweeners[t] || []).concat(ft.tweeners['*']), + o = 0, + a = i.length; + o < a; + o++ + ) + if ((r = i[o].call(n, t, e))) return r + } + function ft(o, e, t) { + var n, + a, + r = 0, + i = ft.prefilters.length, + s = S.Deferred().always(function () { + delete u.elem + }), + u = function () { + if (a) return !1 + for ( + var e = tt || ut(), + t = Math.max(0, l.startTime + l.duration - e), + n = 1 - (t / l.duration || 0), + r = 0, + i = l.tweens.length; + r < i; + r++ + ) + l.tweens[r].run(n) + return ( + s.notifyWith(o, [l, n, t]), + n < 1 && i + ? t + : (i || s.notifyWith(o, [l, 1, 0]), s.resolveWith(o, [l]), !1) + ) + }, + l = s.promise({ + elem: o, + props: S.extend({}, e), + opts: S.extend(!0, { specialEasing: {}, easing: S.easing._default }, t), + originalProperties: e, + originalOptions: t, + startTime: tt || ut(), + duration: t.duration, + tweens: [], + createTween: function (e, t) { + var n = S.Tween( + o, + l.opts, + e, + t, + l.opts.specialEasing[e] || l.opts.easing + ) + return l.tweens.push(n), n + }, + stop: function (e) { + var t = 0, + n = e ? l.tweens.length : 0 + if (a) return this + for (a = !0; t < n; t++) l.tweens[t].run(1) + return ( + e + ? (s.notifyWith(o, [l, 1, 0]), s.resolveWith(o, [l, e])) + : s.rejectWith(o, [l, e]), + this + ) + }, + }), + c = l.props + for ( + !(function (e, t) { + var n, r, i, o, a + for (n in e) + if ( + ((i = t[(r = X(n))]), + (o = e[n]), + Array.isArray(o) && ((i = o[1]), (o = e[n] = o[0])), + n !== r && ((e[r] = o), delete e[n]), + (a = S.cssHooks[r]) && ('expand' in a)) + ) + for (n in ((o = a.expand(o)), delete e[r], o)) + (n in e) || ((e[n] = o[n]), (t[n] = i)) + else t[r] = i + })(c, l.opts.specialEasing); + r < i; + r++ + ) + if ((n = ft.prefilters[r].call(l, o, c, l.opts))) + return ( + m(n.stop) && + (S._queueHooks(l.elem, l.opts.queue).stop = n.stop.bind(n)), + n + ) + return ( + S.map(c, ct, l), + m(l.opts.start) && l.opts.start.call(o, l), + l + .progress(l.opts.progress) + .done(l.opts.done, l.opts.complete) + .fail(l.opts.fail) + .always(l.opts.always), + S.fx.timer(S.extend(u, { elem: o, anim: l, queue: l.opts.queue })), + l + ) + } + ;(S.Animation = S.extend(ft, { + tweeners: { + '*': [ + function (e, t) { + var n = this.createTween(e, t) + return se(n.elem, e, te.exec(t), n), n + }, + ], + }, + tweener: function (e, t) { + m(e) ? ((t = e), (e = ['*'])) : (e = e.match(P)) + for (var n, r = 0, i = e.length; r < i; r++) + (n = e[r]), + (ft.tweeners[n] = ft.tweeners[n] || []), + ft.tweeners[n].unshift(t) + }, + prefilters: [ + function (e, t, n) { + var r, + i, + o, + a, + s, + u, + l, + c, + f = 'width' in t || 'height' in t, + p = this, + d = {}, + h = e.style, + g = e.nodeType && ae(e), + y = Y.get(e, 'fxshow') + for (r in (n.queue || + (null == (a = S._queueHooks(e, 'fx')).unqueued && + ((a.unqueued = 0), + (s = a.empty.fire), + (a.empty.fire = function () { + a.unqueued || s() + })), + a.unqueued++, + p.always(function () { + p.always(function () { + a.unqueued--, S.queue(e, 'fx').length || a.empty.fire() + }) + })), + t)) + if (((i = t[r]), ot.test(i))) { + if ( + (delete t[r], + (o = o || 'toggle' === i), + i === (g ? 'hide' : 'show')) + ) { + if ('show' !== i || !y || void 0 === y[r]) continue + g = !0 + } + d[r] = (y && y[r]) || S.style(e, r) + } + if ((u = !S.isEmptyObject(t)) || !S.isEmptyObject(d)) + for (r in (f && + 1 === e.nodeType && + ((n.overflow = [h.overflow, h.overflowX, h.overflowY]), + null == (l = y && y.display) && (l = Y.get(e, 'display')), + 'none' === (c = S.css(e, 'display')) && + (l + ? (c = l) + : (le([e], !0), + (l = e.style.display || l), + (c = S.css(e, 'display')), + le([e]))), + ('inline' === c || ('inline-block' === c && null != l)) && + 'none' === S.css(e, 'float') && + (u || + (p.done(function () { + h.display = l + }), + null == l && ((c = h.display), (l = 'none' === c ? '' : c))), + (h.display = 'inline-block'))), + n.overflow && + ((h.overflow = 'hidden'), + p.always(function () { + ;(h.overflow = n.overflow[0]), + (h.overflowX = n.overflow[1]), + (h.overflowY = n.overflow[2]) + })), + (u = !1), + d)) + u || + (y + ? 'hidden' in y && (g = y.hidden) + : (y = Y.access(e, 'fxshow', { display: l })), + o && (y.hidden = !g), + g && le([e], !0), + p.done(function () { + for (r in (g || le([e]), Y.remove(e, 'fxshow'), d)) + S.style(e, r, d[r]) + })), + (u = ct(g ? y[r] : 0, r, p)), + r in y || + ((y[r] = u.start), g && ((u.end = u.start), (u.start = 0))) + }, + ], + prefilter: function (e, t) { + t ? ft.prefilters.unshift(e) : ft.prefilters.push(e) + }, + })), + (S.speed = function (e, t, n) { + var r = + e && 'object' == typeof e + ? S.extend({}, e) + : { + complete: n || (!n && t) || (m(e) && e), + duration: e, + easing: (n && t) || (t && !m(t) && t), + } + return ( + S.fx.off + ? (r.duration = 0) + : 'number' != typeof r.duration && + (r.duration in S.fx.speeds + ? (r.duration = S.fx.speeds[r.duration]) + : (r.duration = S.fx.speeds._default)), + (null != r.queue && !0 !== r.queue) || (r.queue = 'fx'), + (r.old = r.complete), + (r.complete = function () { + m(r.old) && r.old.call(this), r.queue && S.dequeue(this, r.queue) + }), + r + ) + }), + S.fn.extend({ + fadeTo: function (e, t, n, r) { + return this.filter(ae) + .css('opacity', 0) + .show() + .end() + .animate({ opacity: t }, e, n, r) + }, + animate: function (t, e, n, r) { + var i = S.isEmptyObject(t), + o = S.speed(e, n, r), + a = function () { + var e = ft(this, S.extend({}, t), o) + ;(i || Y.get(this, 'finish')) && e.stop(!0) + } + return ( + (a.finish = a), + i || !1 === o.queue ? this.each(a) : this.queue(o.queue, a) + ) + }, + stop: function (i, e, o) { + var a = function (e) { + var t = e.stop + delete e.stop, t(o) + } + return ( + 'string' != typeof i && ((o = e), (e = i), (i = void 0)), + e && this.queue(i || 'fx', []), + this.each(function () { + var e = !0, + t = null != i && i + 'queueHooks', + n = S.timers, + r = Y.get(this) + if (t) r[t] && r[t].stop && a(r[t]) + else for (t in r) r[t] && r[t].stop && at.test(t) && a(r[t]) + for (t = n.length; t--; ) + n[t].elem !== this || + (null != i && n[t].queue !== i) || + (n[t].anim.stop(o), (e = !1), n.splice(t, 1)) + ;(!e && o) || S.dequeue(this, i) + }) + ) + }, + finish: function (a) { + return ( + !1 !== a && (a = a || 'fx'), + this.each(function () { + var e, + t = Y.get(this), + n = t[a + 'queue'], + r = t[a + 'queueHooks'], + i = S.timers, + o = n ? n.length : 0 + for ( + t.finish = !0, + S.queue(this, a, []), + r && r.stop && r.stop.call(this, !0), + e = i.length; + e--; + + ) + i[e].elem === this && + i[e].queue === a && + (i[e].anim.stop(!0), i.splice(e, 1)) + for (e = 0; e < o; e++) + n[e] && n[e].finish && n[e].finish.call(this) + delete t.finish + }) + ) + }, + }), + S.each(['toggle', 'show', 'hide'], function (e, r) { + var i = S.fn[r] + S.fn[r] = function (e, t, n) { + return null == e || 'boolean' == typeof e + ? i.apply(this, arguments) + : this.animate(lt(r, !0), e, t, n) + } + }), + S.each( + { + slideDown: lt('show'), + slideUp: lt('hide'), + slideToggle: lt('toggle'), + fadeIn: { opacity: 'show' }, + fadeOut: { opacity: 'hide' }, + fadeToggle: { opacity: 'toggle' }, + }, + function (e, r) { + S.fn[e] = function (e, t, n) { + return this.animate(r, e, t, n) + } + } + ), + (S.timers = []), + (S.fx.tick = function () { + var e, + t = 0, + n = S.timers + for (tt = Date.now(); t < n.length; t++) + (e = n[t])() || n[t] !== e || n.splice(t--, 1) + n.length || S.fx.stop(), (tt = void 0) + }), + (S.fx.timer = function (e) { + S.timers.push(e), S.fx.start() + }), + (S.fx.interval = 13), + (S.fx.start = function () { + nt || ((nt = !0), st()) + }), + (S.fx.stop = function () { + nt = null + }), + (S.fx.speeds = { slow: 600, fast: 200, _default: 400 }), + (S.fn.delay = function (r, e) { + return ( + (r = (S.fx && S.fx.speeds[r]) || r), + (e = e || 'fx'), + this.queue(e, function (e, t) { + var n = C.setTimeout(e, r) + t.stop = function () { + C.clearTimeout(n) + } + }) + ) + }), + (rt = E.createElement('input')), + (it = E.createElement('select').appendChild(E.createElement('option'))), + (rt.type = 'checkbox'), + (v.checkOn = '' !== rt.value), + (v.optSelected = it.selected), + ((rt = E.createElement('input')).value = 't'), + (rt.type = 'radio'), + (v.radioValue = 't' === rt.value) + var pt, + dt = S.expr.attrHandle + S.fn.extend({ + attr: function (e, t) { + return B(this, S.attr, e, t, 1 < arguments.length) + }, + removeAttr: function (e) { + return this.each(function () { + S.removeAttr(this, e) + }) + }, + }), + S.extend({ + attr: function (e, t, n) { + var r, + i, + o = e.nodeType + if (3 !== o && 8 !== o && 2 !== o) + return 'undefined' == typeof e.getAttribute + ? S.prop(e, t, n) + : ((1 === o && S.isXMLDoc(e)) || + (i = + S.attrHooks[t.toLowerCase()] || + (S.expr.match.bool.test(t) ? pt : void 0)), + void 0 !== n + ? null === n + ? void S.removeAttr(e, t) + : i && 'set' in i && void 0 !== (r = i.set(e, n, t)) + ? r + : (e.setAttribute(t, n + ''), n) + : i && 'get' in i && null !== (r = i.get(e, t)) + ? r + : null == (r = S.find.attr(e, t)) + ? void 0 + : r) + }, + attrHooks: { + type: { + set: function (e, t) { + if (!v.radioValue && 'radio' === t && A(e, 'input')) { + var n = e.value + return e.setAttribute('type', t), n && (e.value = n), t + } + }, + }, + }, + removeAttr: function (e, t) { + var n, + r = 0, + i = t && t.match(P) + if (i && 1 === e.nodeType) while ((n = i[r++])) e.removeAttribute(n) + }, + }), + (pt = { + set: function (e, t, n) { + return !1 === t ? S.removeAttr(e, n) : e.setAttribute(n, n), n + }, + }), + S.each(S.expr.match.bool.source.match(/\w+/g), function (e, t) { + var a = dt[t] || S.find.attr + dt[t] = function (e, t, n) { + var r, + i, + o = t.toLowerCase() + return ( + n || + ((i = dt[o]), + (dt[o] = r), + (r = null != a(e, t, n) ? o : null), + (dt[o] = i)), + r + ) + } + }) + var ht = /^(?:input|select|textarea|button)$/i, + gt = /^(?:a|area)$/i + function yt(e) { + return (e.match(P) || []).join(' ') + } + function vt(e) { + return (e.getAttribute && e.getAttribute('class')) || '' + } + function mt(e) { + return Array.isArray(e) ? e : ('string' == typeof e && e.match(P)) || [] + } + S.fn.extend({ + prop: function (e, t) { + return B(this, S.prop, e, t, 1 < arguments.length) + }, + removeProp: function (e) { + return this.each(function () { + delete this[S.propFix[e] || e] + }) + }, + }), + S.extend({ + prop: function (e, t, n) { + var r, + i, + o = e.nodeType + if (3 !== o && 8 !== o && 2 !== o) + return ( + (1 === o && S.isXMLDoc(e)) || + ((t = S.propFix[t] || t), (i = S.propHooks[t])), + void 0 !== n + ? i && 'set' in i && void 0 !== (r = i.set(e, n, t)) + ? r + : (e[t] = n) + : i && 'get' in i && null !== (r = i.get(e, t)) + ? r + : e[t] + ) + }, + propHooks: { + tabIndex: { + get: function (e) { + var t = S.find.attr(e, 'tabindex') + return t + ? parseInt(t, 10) + : ht.test(e.nodeName) || (gt.test(e.nodeName) && e.href) + ? 0 + : -1 + }, + }, + }, + propFix: { for: 'htmlFor', class: 'className' }, + }), + v.optSelected || + (S.propHooks.selected = { + get: function (e) { + var t = e.parentNode + return t && t.parentNode && t.parentNode.selectedIndex, null + }, + set: function (e) { + var t = e.parentNode + t && (t.selectedIndex, t.parentNode && t.parentNode.selectedIndex) + }, + }), + S.each( + [ + 'tabIndex', + 'readOnly', + 'maxLength', + 'cellSpacing', + 'cellPadding', + 'rowSpan', + 'colSpan', + 'useMap', + 'frameBorder', + 'contentEditable', + ], + function () { + S.propFix[this.toLowerCase()] = this + } + ), + S.fn.extend({ + addClass: function (t) { + var e, n, r, i, o, a + return m(t) + ? this.each(function (e) { + S(this).addClass(t.call(this, e, vt(this))) + }) + : (e = mt(t)).length + ? this.each(function () { + if ( + ((r = vt(this)), (n = 1 === this.nodeType && ' ' + yt(r) + ' ')) + ) { + for (o = 0; o < e.length; o++) + (i = e[o]), n.indexOf(' ' + i + ' ') < 0 && (n += i + ' ') + ;(a = yt(n)), r !== a && this.setAttribute('class', a) + } + }) + : this + }, + removeClass: function (t) { + var e, n, r, i, o, a + return m(t) + ? this.each(function (e) { + S(this).removeClass(t.call(this, e, vt(this))) + }) + : arguments.length + ? (e = mt(t)).length + ? this.each(function () { + if ( + ((r = vt(this)), + (n = 1 === this.nodeType && ' ' + yt(r) + ' ')) + ) { + for (o = 0; o < e.length; o++) { + i = e[o] + while (-1 < n.indexOf(' ' + i + ' ')) + n = n.replace(' ' + i + ' ', ' ') + } + ;(a = yt(n)), r !== a && this.setAttribute('class', a) + } + }) + : this + : this.attr('class', '') + }, + toggleClass: function (t, n) { + var e, + r, + i, + o, + a = typeof t, + s = 'string' === a || Array.isArray(t) + return m(t) + ? this.each(function (e) { + S(this).toggleClass(t.call(this, e, vt(this), n), n) + }) + : 'boolean' == typeof n && s + ? n + ? this.addClass(t) + : this.removeClass(t) + : ((e = mt(t)), + this.each(function () { + if (s) + for (o = S(this), i = 0; i < e.length; i++) + (r = e[i]), o.hasClass(r) ? o.removeClass(r) : o.addClass(r) + else + (void 0 !== t && 'boolean' !== a) || + ((r = vt(this)) && Y.set(this, '__className__', r), + this.setAttribute && + this.setAttribute( + 'class', + r || !1 === t ? '' : Y.get(this, '__className__') || '' + )) + })) + }, + hasClass: function (e) { + var t, + n, + r = 0 + t = ' ' + e + ' ' + while ((n = this[r++])) + if (1 === n.nodeType && -1 < (' ' + yt(vt(n)) + ' ').indexOf(t)) + return !0 + return !1 + }, + }) + var xt = /\r/g + S.fn.extend({ + val: function (n) { + var r, + e, + i, + t = this[0] + return arguments.length + ? ((i = m(n)), + this.each(function (e) { + var t + 1 === this.nodeType && + (null == (t = i ? n.call(this, e, S(this).val()) : n) + ? (t = '') + : 'number' == typeof t + ? (t += '') + : Array.isArray(t) && + (t = S.map(t, function (e) { + return null == e ? '' : e + '' + })), + ((r = + S.valHooks[this.type] || + S.valHooks[this.nodeName.toLowerCase()]) && + 'set' in r && + void 0 !== r.set(this, t, 'value')) || + (this.value = t)) + })) + : t + ? (r = S.valHooks[t.type] || S.valHooks[t.nodeName.toLowerCase()]) && + 'get' in r && + void 0 !== (e = r.get(t, 'value')) + ? e + : 'string' == typeof (e = t.value) + ? e.replace(xt, '') + : null == e + ? '' + : e + : void 0 + }, + }), + S.extend({ + valHooks: { + option: { + get: function (e) { + var t = S.find.attr(e, 'value') + return null != t ? t : yt(S.text(e)) + }, + }, + select: { + get: function (e) { + var t, + n, + r, + i = e.options, + o = e.selectedIndex, + a = 'select-one' === e.type, + s = a ? null : [], + u = a ? o + 1 : i.length + for (r = o < 0 ? u : a ? o : 0; r < u; r++) + if ( + ((n = i[r]).selected || r === o) && + !n.disabled && + (!n.parentNode.disabled || !A(n.parentNode, 'optgroup')) + ) { + if (((t = S(n).val()), a)) return t + s.push(t) + } + return s + }, + set: function (e, t) { + var n, + r, + i = e.options, + o = S.makeArray(t), + a = i.length + while (a--) + ((r = i[a]).selected = + -1 < S.inArray(S.valHooks.option.get(r), o)) && (n = !0) + return n || (e.selectedIndex = -1), o + }, + }, + }, + }), + S.each(['radio', 'checkbox'], function () { + ;(S.valHooks[this] = { + set: function (e, t) { + if (Array.isArray(t)) + return (e.checked = -1 < S.inArray(S(e).val(), t)) + }, + }), + v.checkOn || + (S.valHooks[this].get = function (e) { + return null === e.getAttribute('value') ? 'on' : e.value + }) + }), + (v.focusin = 'onfocusin' in C) + var bt = /^(?:focusinfocus|focusoutblur)$/, + wt = function (e) { + e.stopPropagation() + } + S.extend(S.event, { + trigger: function (e, t, n, r) { + var i, + o, + a, + s, + u, + l, + c, + f, + p = [n || E], + d = y.call(e, 'type') ? e.type : e, + h = y.call(e, 'namespace') ? e.namespace.split('.') : [] + if ( + ((o = f = a = n = n || E), + 3 !== n.nodeType && + 8 !== n.nodeType && + !bt.test(d + S.event.triggered) && + (-1 < d.indexOf('.') && ((d = (h = d.split('.')).shift()), h.sort()), + (u = d.indexOf(':') < 0 && 'on' + d), + ((e = e[S.expando] + ? e + : new S.Event(d, 'object' == typeof e && e)).isTrigger = r ? 2 : 3), + (e.namespace = h.join('.')), + (e.rnamespace = e.namespace + ? new RegExp('(^|\\.)' + h.join('\\.(?:.*\\.|)') + '(\\.|$)') + : null), + (e.result = void 0), + e.target || (e.target = n), + (t = null == t ? [e] : S.makeArray(t, [e])), + (c = S.event.special[d] || {}), + r || !c.trigger || !1 !== c.trigger.apply(n, t))) + ) { + if (!r && !c.noBubble && !x(n)) { + for ( + s = c.delegateType || d, bt.test(s + d) || (o = o.parentNode); + o; + o = o.parentNode + ) + p.push(o), (a = o) + a === (n.ownerDocument || E) && + p.push(a.defaultView || a.parentWindow || C) + } + i = 0 + while ((o = p[i++]) && !e.isPropagationStopped()) + (f = o), + (e.type = 1 < i ? s : c.bindType || d), + (l = + (Y.get(o, 'events') || Object.create(null))[e.type] && + Y.get(o, 'handle')) && l.apply(o, t), + (l = u && o[u]) && + l.apply && + V(o) && + ((e.result = l.apply(o, t)), + !1 === e.result && e.preventDefault()) + return ( + (e.type = d), + r || + e.isDefaultPrevented() || + (c._default && !1 !== c._default.apply(p.pop(), t)) || + !V(n) || + (u && + m(n[d]) && + !x(n) && + ((a = n[u]) && (n[u] = null), + (S.event.triggered = d), + e.isPropagationStopped() && f.addEventListener(d, wt), + n[d](), + e.isPropagationStopped() && f.removeEventListener(d, wt), + (S.event.triggered = void 0), + a && (n[u] = a))), + e.result + ) + } + }, + simulate: function (e, t, n) { + var r = S.extend(new S.Event(), n, { type: e, isSimulated: !0 }) + S.event.trigger(r, null, t) + }, + }), + S.fn.extend({ + trigger: function (e, t) { + return this.each(function () { + S.event.trigger(e, t, this) + }) + }, + triggerHandler: function (e, t) { + var n = this[0] + if (n) return S.event.trigger(e, t, n, !0) + }, + }), + v.focusin || + S.each({ focus: 'focusin', blur: 'focusout' }, function (n, r) { + var i = function (e) { + S.event.simulate(r, e.target, S.event.fix(e)) + } + S.event.special[r] = { + setup: function () { + var e = this.ownerDocument || this.document || this, + t = Y.access(e, r) + t || e.addEventListener(n, i, !0), Y.access(e, r, (t || 0) + 1) + }, + teardown: function () { + var e = this.ownerDocument || this.document || this, + t = Y.access(e, r) - 1 + t + ? Y.access(e, r, t) + : (e.removeEventListener(n, i, !0), Y.remove(e, r)) + }, + } + }) + var Tt = C.location, + Ct = { guid: Date.now() }, + Et = /\?/ + S.parseXML = function (e) { + var t, n + if (!e || 'string' != typeof e) return null + try { + t = new C.DOMParser().parseFromString(e, 'text/xml') + } catch (e) {} + return ( + (n = t && t.getElementsByTagName('parsererror')[0]), + (t && !n) || + S.error( + 'Invalid XML: ' + + (n + ? S.map(n.childNodes, function (e) { + return e.textContent + }).join('\n') + : e) + ), + t + ) + } + var St = /\[\]$/, + kt = /\r?\n/g, + At = /^(?:submit|button|image|reset|file)$/i, + Nt = /^(?:input|select|textarea|keygen)/i + function jt(n, e, r, i) { + var t + if (Array.isArray(e)) + S.each(e, function (e, t) { + r || St.test(n) + ? i(n, t) + : jt( + n + '[' + ('object' == typeof t && null != t ? e : '') + ']', + t, + r, + i + ) + }) + else if (r || 'object' !== w(e)) i(n, e) + else for (t in e) jt(n + '[' + t + ']', e[t], r, i) + } + ;(S.param = function (e, t) { + var n, + r = [], + i = function (e, t) { + var n = m(t) ? t() : t + r[r.length] = + encodeURIComponent(e) + '=' + encodeURIComponent(null == n ? '' : n) + } + if (null == e) return '' + if (Array.isArray(e) || (e.jquery && !S.isPlainObject(e))) + S.each(e, function () { + i(this.name, this.value) + }) + else for (n in e) jt(n, e[n], t, i) + return r.join('&') + }), + S.fn.extend({ + serialize: function () { + return S.param(this.serializeArray()) + }, + serializeArray: function () { + return this.map(function () { + var e = S.prop(this, 'elements') + return e ? S.makeArray(e) : this + }) + .filter(function () { + var e = this.type + return ( + this.name && + !S(this).is(':disabled') && + Nt.test(this.nodeName) && + !At.test(e) && + (this.checked || !pe.test(e)) + ) + }) + .map(function (e, t) { + var n = S(this).val() + return null == n + ? null + : Array.isArray(n) + ? S.map(n, function (e) { + return { name: t.name, value: e.replace(kt, '\r\n') } + }) + : { name: t.name, value: n.replace(kt, '\r\n') } + }) + .get() + }, + }) + var Dt = /%20/g, + qt = /#.*$/, + Lt = /([?&])_=[^&]*/, + Ht = /^(.*?):[ \t]*([^\r\n]*)$/gm, + Ot = /^(?:GET|HEAD)$/, + Pt = /^\/\//, + Rt = {}, + Mt = {}, + It = '*/'.concat('*'), + Wt = E.createElement('a') + function Ft(o) { + return function (e, t) { + 'string' != typeof e && ((t = e), (e = '*')) + var n, + r = 0, + i = e.toLowerCase().match(P) || [] + if (m(t)) + while ((n = i[r++])) + '+' === n[0] + ? ((n = n.slice(1) || '*'), (o[n] = o[n] || []).unshift(t)) + : (o[n] = o[n] || []).push(t) + } + } + function $t(t, i, o, a) { + var s = {}, + u = t === Mt + function l(e) { + var r + return ( + (s[e] = !0), + S.each(t[e] || [], function (e, t) { + var n = t(i, o, a) + return 'string' != typeof n || u || s[n] + ? u + ? !(r = n) + : void 0 + : (i.dataTypes.unshift(n), l(n), !1) + }), + r + ) + } + return l(i.dataTypes[0]) || (!s['*'] && l('*')) + } + function Bt(e, t) { + var n, + r, + i = S.ajaxSettings.flatOptions || {} + for (n in t) void 0 !== t[n] && ((i[n] ? e : r || (r = {}))[n] = t[n]) + return r && S.extend(!0, e, r), e + } + ;(Wt.href = Tt.href), + S.extend({ + active: 0, + lastModified: {}, + etag: {}, + ajaxSettings: { + url: Tt.href, + type: 'GET', + isLocal: + /^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test( + Tt.protocol + ), + global: !0, + processData: !0, + async: !0, + contentType: 'application/x-www-form-urlencoded; charset=UTF-8', + accepts: { + '*': It, + text: 'text/plain', + html: 'text/html', + xml: 'application/xml, text/xml', + json: 'application/json, text/javascript', + }, + contents: { xml: /\bxml\b/, html: /\bhtml/, json: /\bjson\b/ }, + responseFields: { + xml: 'responseXML', + text: 'responseText', + json: 'responseJSON', + }, + converters: { + '* text': String, + 'text html': !0, + 'text json': JSON.parse, + 'text xml': S.parseXML, + }, + flatOptions: { url: !0, context: !0 }, + }, + ajaxSetup: function (e, t) { + return t ? Bt(Bt(e, S.ajaxSettings), t) : Bt(S.ajaxSettings, e) + }, + ajaxPrefilter: Ft(Rt), + ajaxTransport: Ft(Mt), + ajax: function (e, t) { + 'object' == typeof e && ((t = e), (e = void 0)), (t = t || {}) + var c, + f, + p, + n, + d, + r, + h, + g, + i, + o, + y = S.ajaxSetup({}, t), + v = y.context || y, + m = y.context && (v.nodeType || v.jquery) ? S(v) : S.event, + x = S.Deferred(), + b = S.Callbacks('once memory'), + w = y.statusCode || {}, + a = {}, + s = {}, + u = 'canceled', + T = { + readyState: 0, + getResponseHeader: function (e) { + var t + if (h) { + if (!n) { + n = {} + while ((t = Ht.exec(p))) + n[t[1].toLowerCase() + ' '] = ( + n[t[1].toLowerCase() + ' '] || [] + ).concat(t[2]) + } + t = n[e.toLowerCase() + ' '] + } + return null == t ? null : t.join(', ') + }, + getAllResponseHeaders: function () { + return h ? p : null + }, + setRequestHeader: function (e, t) { + return ( + null == h && + ((e = s[e.toLowerCase()] = s[e.toLowerCase()] || e), + (a[e] = t)), + this + ) + }, + overrideMimeType: function (e) { + return null == h && (y.mimeType = e), this + }, + statusCode: function (e) { + var t + if (e) + if (h) T.always(e[T.status]) + else for (t in e) w[t] = [w[t], e[t]] + return this + }, + abort: function (e) { + var t = e || u + return c && c.abort(t), l(0, t), this + }, + } + if ( + (x.promise(T), + (y.url = ((e || y.url || Tt.href) + '').replace( + Pt, + Tt.protocol + '//' + )), + (y.type = t.method || t.type || y.method || y.type), + (y.dataTypes = (y.dataType || '*').toLowerCase().match(P) || ['']), + null == y.crossDomain) + ) { + r = E.createElement('a') + try { + ;(r.href = y.url), + (r.href = r.href), + (y.crossDomain = + Wt.protocol + '//' + Wt.host != r.protocol + '//' + r.host) + } catch (e) { + y.crossDomain = !0 + } + } + if ( + (y.data && + y.processData && + 'string' != typeof y.data && + (y.data = S.param(y.data, y.traditional)), + $t(Rt, y, t, T), + h) + ) + return T + for (i in ((g = S.event && y.global) && + 0 == S.active++ && + S.event.trigger('ajaxStart'), + (y.type = y.type.toUpperCase()), + (y.hasContent = !Ot.test(y.type)), + (f = y.url.replace(qt, '')), + y.hasContent + ? y.data && + y.processData && + 0 === + (y.contentType || '').indexOf( + 'application/x-www-form-urlencoded' + ) && + (y.data = y.data.replace(Dt, '+')) + : ((o = y.url.slice(f.length)), + y.data && + (y.processData || 'string' == typeof y.data) && + ((f += (Et.test(f) ? '&' : '?') + y.data), delete y.data), + !1 === y.cache && + ((f = f.replace(Lt, '$1')), + (o = (Et.test(f) ? '&' : '?') + '_=' + Ct.guid++ + o)), + (y.url = f + o)), + y.ifModified && + (S.lastModified[f] && + T.setRequestHeader('If-Modified-Since', S.lastModified[f]), + S.etag[f] && T.setRequestHeader('If-None-Match', S.etag[f])), + ((y.data && y.hasContent && !1 !== y.contentType) || t.contentType) && + T.setRequestHeader('Content-Type', y.contentType), + T.setRequestHeader( + 'Accept', + y.dataTypes[0] && y.accepts[y.dataTypes[0]] + ? y.accepts[y.dataTypes[0]] + + ('*' !== y.dataTypes[0] ? ', ' + It + '; q=0.01' : '') + : y.accepts['*'] + ), + y.headers)) + T.setRequestHeader(i, y.headers[i]) + if (y.beforeSend && (!1 === y.beforeSend.call(v, T, y) || h)) + return T.abort() + if ( + ((u = 'abort'), + b.add(y.complete), + T.done(y.success), + T.fail(y.error), + (c = $t(Mt, y, t, T))) + ) { + if (((T.readyState = 1), g && m.trigger('ajaxSend', [T, y]), h)) + return T + y.async && + 0 < y.timeout && + (d = C.setTimeout(function () { + T.abort('timeout') + }, y.timeout)) + try { + ;(h = !1), c.send(a, l) + } catch (e) { + if (h) throw e + l(-1, e) + } + } else l(-1, 'No Transport') + function l(e, t, n, r) { + var i, + o, + a, + s, + u, + l = t + h || + ((h = !0), + d && C.clearTimeout(d), + (c = void 0), + (p = r || ''), + (T.readyState = 0 < e ? 4 : 0), + (i = (200 <= e && e < 300) || 304 === e), + n && + (s = (function (e, t, n) { + var r, + i, + o, + a, + s = e.contents, + u = e.dataTypes + while ('*' === u[0]) + u.shift(), + void 0 === r && + (r = e.mimeType || t.getResponseHeader('Content-Type')) + if (r) + for (i in s) + if (s[i] && s[i].test(r)) { + u.unshift(i) + break + } + if (u[0] in n) o = u[0] + else { + for (i in n) { + if (!u[0] || e.converters[i + ' ' + u[0]]) { + o = i + break + } + a || (a = i) + } + o = o || a + } + if (o) return o !== u[0] && u.unshift(o), n[o] + })(y, T, n)), + !i && + -1 < S.inArray('script', y.dataTypes) && + S.inArray('json', y.dataTypes) < 0 && + (y.converters['text script'] = function () {}), + (s = (function (e, t, n, r) { + var i, + o, + a, + s, + u, + l = {}, + c = e.dataTypes.slice() + if (c[1]) + for (a in e.converters) l[a.toLowerCase()] = e.converters[a] + o = c.shift() + while (o) + if ( + (e.responseFields[o] && (n[e.responseFields[o]] = t), + !u && r && e.dataFilter && (t = e.dataFilter(t, e.dataType)), + (u = o), + (o = c.shift())) + ) + if ('*' === o) o = u + else if ('*' !== u && u !== o) { + if (!(a = l[u + ' ' + o] || l['* ' + o])) + for (i in l) + if ( + (s = i.split(' '))[1] === o && + (a = l[u + ' ' + s[0]] || l['* ' + s[0]]) + ) { + !0 === a + ? (a = l[i]) + : !0 !== l[i] && ((o = s[0]), c.unshift(s[1])) + break + } + if (!0 !== a) + if (a && e['throws']) t = a(t) + else + try { + t = a(t) + } catch (e) { + return { + state: 'parsererror', + error: a + ? e + : 'No conversion from ' + u + ' to ' + o, + } + } + } + return { state: 'success', data: t } + })(y, s, T, i)), + i + ? (y.ifModified && + ((u = T.getResponseHeader('Last-Modified')) && + (S.lastModified[f] = u), + (u = T.getResponseHeader('etag')) && (S.etag[f] = u)), + 204 === e || 'HEAD' === y.type + ? (l = 'nocontent') + : 304 === e + ? (l = 'notmodified') + : ((l = s.state), (o = s.data), (i = !(a = s.error)))) + : ((a = l), (!e && l) || ((l = 'error'), e < 0 && (e = 0))), + (T.status = e), + (T.statusText = (t || l) + ''), + i ? x.resolveWith(v, [o, l, T]) : x.rejectWith(v, [T, l, a]), + T.statusCode(w), + (w = void 0), + g && m.trigger(i ? 'ajaxSuccess' : 'ajaxError', [T, y, i ? o : a]), + b.fireWith(v, [T, l]), + g && + (m.trigger('ajaxComplete', [T, y]), + --S.active || S.event.trigger('ajaxStop'))) + } + return T + }, + getJSON: function (e, t, n) { + return S.get(e, t, n, 'json') + }, + getScript: function (e, t) { + return S.get(e, void 0, t, 'script') + }, + }), + S.each(['get', 'post'], function (e, i) { + S[i] = function (e, t, n, r) { + return ( + m(t) && ((r = r || n), (n = t), (t = void 0)), + S.ajax( + S.extend( + { url: e, type: i, dataType: r, data: t, success: n }, + S.isPlainObject(e) && e + ) + ) + ) + } + }), + S.ajaxPrefilter(function (e) { + var t + for (t in e.headers) + 'content-type' === t.toLowerCase() && + (e.contentType = e.headers[t] || '') + }), + (S._evalUrl = function (e, t, n) { + return S.ajax({ + url: e, + type: 'GET', + dataType: 'script', + cache: !0, + async: !1, + global: !1, + converters: { 'text script': function () {} }, + dataFilter: function (e) { + S.globalEval(e, t, n) + }, + }) + }), + S.fn.extend({ + wrapAll: function (e) { + var t + return ( + this[0] && + (m(e) && (e = e.call(this[0])), + (t = S(e, this[0].ownerDocument).eq(0).clone(!0)), + this[0].parentNode && t.insertBefore(this[0]), + t + .map(function () { + var e = this + while (e.firstElementChild) e = e.firstElementChild + return e + }) + .append(this)), + this + ) + }, + wrapInner: function (n) { + return m(n) + ? this.each(function (e) { + S(this).wrapInner(n.call(this, e)) + }) + : this.each(function () { + var e = S(this), + t = e.contents() + t.length ? t.wrapAll(n) : e.append(n) + }) + }, + wrap: function (t) { + var n = m(t) + return this.each(function (e) { + S(this).wrapAll(n ? t.call(this, e) : t) + }) + }, + unwrap: function (e) { + return ( + this.parent(e) + .not('body') + .each(function () { + S(this).replaceWith(this.childNodes) + }), + this + ) + }, + }), + (S.expr.pseudos.hidden = function (e) { + return !S.expr.pseudos.visible(e) + }), + (S.expr.pseudos.visible = function (e) { + return !!(e.offsetWidth || e.offsetHeight || e.getClientRects().length) + }), + (S.ajaxSettings.xhr = function () { + try { + return new C.XMLHttpRequest() + } catch (e) {} + }) + var _t = { 0: 200, 1223: 204 }, + zt = S.ajaxSettings.xhr() + ;(v.cors = !!zt && 'withCredentials' in zt), + (v.ajax = zt = !!zt), + S.ajaxTransport(function (i) { + var o, a + if (v.cors || (zt && !i.crossDomain)) + return { + send: function (e, t) { + var n, + r = i.xhr() + if ( + (r.open(i.type, i.url, i.async, i.username, i.password), + i.xhrFields) + ) + for (n in i.xhrFields) r[n] = i.xhrFields[n] + for (n in (i.mimeType && + r.overrideMimeType && + r.overrideMimeType(i.mimeType), + i.crossDomain || + e['X-Requested-With'] || + (e['X-Requested-With'] = 'XMLHttpRequest'), + e)) + r.setRequestHeader(n, e[n]) + ;(o = function (e) { + return function () { + o && + ((o = + a = + r.onload = + r.onerror = + r.onabort = + r.ontimeout = + r.onreadystatechange = + null), + 'abort' === e + ? r.abort() + : 'error' === e + ? 'number' != typeof r.status + ? t(0, 'error') + : t(r.status, r.statusText) + : t( + _t[r.status] || r.status, + r.statusText, + 'text' !== (r.responseType || 'text') || + 'string' != typeof r.responseText + ? { binary: r.response } + : { text: r.responseText }, + r.getAllResponseHeaders() + )) + } + }), + (r.onload = o()), + (a = r.onerror = r.ontimeout = o('error')), + void 0 !== r.onabort + ? (r.onabort = a) + : (r.onreadystatechange = function () { + 4 === r.readyState && + C.setTimeout(function () { + o && a() + }) + }), + (o = o('abort')) + try { + r.send((i.hasContent && i.data) || null) + } catch (e) { + if (o) throw e + } + }, + abort: function () { + o && o() + }, + } + }), + S.ajaxPrefilter(function (e) { + e.crossDomain && (e.contents.script = !1) + }), + S.ajaxSetup({ + accepts: { + script: + 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript', + }, + contents: { script: /\b(?:java|ecma)script\b/ }, + converters: { + 'text script': function (e) { + return S.globalEval(e), e + }, + }, + }), + S.ajaxPrefilter('script', function (e) { + void 0 === e.cache && (e.cache = !1), e.crossDomain && (e.type = 'GET') + }), + S.ajaxTransport('script', function (n) { + var r, i + if (n.crossDomain || n.scriptAttrs) + return { + send: function (e, t) { + ;(r = S(' + + + + + \ No newline at end of file diff --git a/qdntz/inc/xmtzk/kc/show-kc.html b/qdntz/inc/xmtzk/kc/show-kc.html new file mode 100644 index 0000000..fcb49cc --- /dev/null +++ b/qdntz/inc/xmtzk/kc/show-kc.html @@ -0,0 +1,238 @@ + + + + + + + 投资黔东南 + + + + + + + +
+
+ +
+
+ + + +
+
+ +
+
+
+ +
+
+
+
+ + + \ No newline at end of file diff --git a/qdntz/inc/xmtzk/mc/list.html b/qdntz/inc/xmtzk/mc/list.html new file mode 100644 index 0000000..67d18da --- /dev/null +++ b/qdntz/inc/xmtzk/mc/list.html @@ -0,0 +1,99 @@ + + + + + + + 投资黔东南 + + + + +
+
+ +
+
+ + + +
+ 木材加工及家具制造 +
+ +
+
+ +
+
+
+
+ + + +
+
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/qdntz/inc/xmtzk/mc/show-mc.html b/qdntz/inc/xmtzk/mc/show-mc.html new file mode 100644 index 0000000..61b906c --- /dev/null +++ b/qdntz/inc/xmtzk/mc/show-mc.html @@ -0,0 +1,240 @@ + + + + + + + 投资黔东南 + + + + + + + +
+
+ +
+
+ + + +
+
+ +
+
+
+ +
+
+
+
+ + + \ No newline at end of file diff --git a/qdntz/inc/xmtzk/qt/list.html b/qdntz/inc/xmtzk/qt/list.html new file mode 100644 index 0000000..fce389f --- /dev/null +++ b/qdntz/inc/xmtzk/qt/list.html @@ -0,0 +1,100 @@ + + + + + + + 投资黔东南 + + + + +
+
+ +
+
+ + + +
+ 其它N个产业 +
+ +
+
+ +
+
+ +
+
+ + + +
+
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/qdntz/inc/xmtzk/qt/show-qt.html b/qdntz/inc/xmtzk/qt/show-qt.html new file mode 100644 index 0000000..e9a4a62 --- /dev/null +++ b/qdntz/inc/xmtzk/qt/show-qt.html @@ -0,0 +1,239 @@ + + + + + + + 投资黔东南 + + + + + + + +
+
+
+
+ + + +
+
+
+
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/qdntz/inc/xmtzk/sp/list.html b/qdntz/inc/xmtzk/sp/list.html new file mode 100644 index 0000000..74de9f4 --- /dev/null +++ b/qdntz/inc/xmtzk/sp/list.html @@ -0,0 +1,100 @@ + + + + + + + 投资黔东南 + + + + +
+
+ +
+
+ + + +
+ 特色食品 +
+ +
+
+ +
+
+ +
+
+ + + +
+
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/qdntz/inc/xmtzk/sp/show-sp.html b/qdntz/inc/xmtzk/sp/show-sp.html new file mode 100644 index 0000000..3abb592 --- /dev/null +++ b/qdntz/inc/xmtzk/sp/show-sp.html @@ -0,0 +1,240 @@ + + + + + + + 投资黔东南 + + + + + + + +
+
+ +
+
+ + + +
+
+ +
+
+
+ +
+
+
+
+ + + \ No newline at end of file diff --git a/qdntz/inc/xmtzk/wh/list.html b/qdntz/inc/xmtzk/wh/list.html new file mode 100644 index 0000000..de75a04 --- /dev/null +++ b/qdntz/inc/xmtzk/wh/list.html @@ -0,0 +1,100 @@ + + + + + + + 投资黔东南 + + + + +
+
+ +
+
+ + + +
+ 文化旅游康养 +
+ +
+
+ +
+
+ +
+
+ + + +
+
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/qdntz/inc/xmtzk/wh/show-wh.html b/qdntz/inc/xmtzk/wh/show-wh.html new file mode 100644 index 0000000..63bce74 --- /dev/null +++ b/qdntz/inc/xmtzk/wh/show-wh.html @@ -0,0 +1,237 @@ + + + + + + + 投资黔东南 + + + + + + + +
+
+
+
+ + + +
+
+ +
+
+
+ +
+
+
+
+ + + \ No newline at end of file diff --git a/qdntz/inc/xmtzk/yy/list.html b/qdntz/inc/xmtzk/yy/list.html new file mode 100644 index 0000000..ac8f38b --- /dev/null +++ b/qdntz/inc/xmtzk/yy/list.html @@ -0,0 +1,107 @@ + + + + + + + 投资黔东南 + + + + +
+
+ +
+
+ + + +
+ 大健康医药制造 +
+ +
+
+ +
+
+ +
+
+ + + +
+
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/qdntz/inc/xmtzk/yy/show-yy.html b/qdntz/inc/xmtzk/yy/show-yy.html new file mode 100644 index 0000000..d755d20 --- /dev/null +++ b/qdntz/inc/xmtzk/yy/show-yy.html @@ -0,0 +1,240 @@ + + + + + + + 投资黔东南 + + + + + + + +
+
+ +
+
+ + + +
+
+ +
+
+
+ +
+
+
+
+ + + \ No newline at end of file diff --git a/qdntz/inc/xmtzk/zs/list.html b/qdntz/inc/xmtzk/zs/list.html new file mode 100644 index 0000000..fabbaa4 --- /dev/null +++ b/qdntz/inc/xmtzk/zs/list.html @@ -0,0 +1,99 @@ + + + + + + + 投资黔东南 + + + + +
+
+ +
+
+ + + +
+ 再生资源循环材料 +
+ +
+
+ +
+
+ +
+
+ + + +
+
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/qdntz/inc/xmtzk/zs/show-zs.html b/qdntz/inc/xmtzk/zs/show-zs.html new file mode 100644 index 0000000..b07e038 --- /dev/null +++ b/qdntz/inc/xmtzk/zs/show-zs.html @@ -0,0 +1,241 @@ + + + + + + + 投资黔东南 + + + + + + + +
+
+ +
+
+ + + +
+
+ +
+
+
+ +
+
+
+
+ + + \ No newline at end of file diff --git a/qdntz/index.html b/qdntz/index.html new file mode 100644 index 0000000..712176a --- /dev/null +++ b/qdntz/index.html @@ -0,0 +1,57 @@ + + + + 投资黔东南 + + + + + + + + +
+ Park +
+ +
+ +
+ + +
+ +
+ +
+ +
+ + +
+ Park +
+ +
+

黔东南州投资促进局
技术支持:工诚云网

+

+ + + + + diff --git a/qdntz/js/bootstrap.bundle.min.js b/qdntz/js/bootstrap.bundle.min.js new file mode 100644 index 0000000..e4f2756 --- /dev/null +++ b/qdntz/js/bootstrap.bundle.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v5.1.2 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t="transitionend",e=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return e},i=t=>{const i=e(t);return i&&document.querySelector(i)?i:null},n=t=>{const i=e(t);return i?document.querySelector(i):null},s=e=>{e.dispatchEvent(new Event(t))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(t):null,a=(t,e,i)=>{Object.keys(i).forEach((n=>{const s=i[n],r=e[n],a=r&&o(r)?"element":null==(l=r)?`${l}`:{}.toString.call(l).match(/\s([a-z]+)/i)[1].toLowerCase();var l;if(!new RegExp(s).test(a))throw new TypeError(`${t.toUpperCase()}: Option "${n}" provided type "${a}" but expected type "${s}".`)}))},l=t=>!(!o(t)||0===t.getClientRects().length)&&"visible"===getComputedStyle(t).getPropertyValue("visibility"),c=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),h=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?h(t.parentNode):null},d=()=>{},u=t=>{t.offsetHeight},f=()=>{const{jQuery:t}=window;return t&&!document.body.hasAttribute("data-bs-no-jquery")?t:null},p=[],m=()=>"rtl"===document.documentElement.dir,g=t=>{var e;e=()=>{const e=f();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(p.length||document.addEventListener("DOMContentLoaded",(()=>{p.forEach((t=>t()))})),p.push(e)):e()},_=t=>{"function"==typeof t&&t()},b=(e,i,n=!0)=>{if(!n)return void _(e);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(i)+5;let r=!1;const a=({target:n})=>{n===i&&(r=!0,i.removeEventListener(t,a),_(e))};i.addEventListener(t,a),setTimeout((()=>{r||s(i)}),o)},v=(t,e,i,n)=>{let s=t.indexOf(e);if(-1===s)return t[!i&&n?t.length-1:0];const o=t.length;return s+=i?1:-1,n&&(s=(s+o)%o),t[Math.max(0,Math.min(s,o-1))]},y=/[^.]*(?=\..*)\.|.*/,w=/\..*/,E=/::\d+$/,A={};let T=1;const O={mouseenter:"mouseover",mouseleave:"mouseout"},C=/^(mouseenter|mouseleave)/i,k=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function L(t,e){return e&&`${e}::${T++}`||t.uidEvent||T++}function x(t){const e=L(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function D(t,e,i=null){const n=Object.keys(t);for(let s=0,o=n.length;sfunction(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};n?n=t(n):i=t(i)}const[o,r,a]=S(e,i,n),l=x(t),c=l[a]||(l[a]={}),h=D(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=L(r,e.replace(y,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(let a=o.length;a--;)if(o[a]===r)return s.delegateTarget=r,n.oneOff&&j.off(t,s.type,e,i),i.apply(r,[s]);return null}}(t,i,n):function(t,e){return function i(n){return n.delegateTarget=t,i.oneOff&&j.off(t,n.type,e),e.apply(t,[n])}}(t,i);u.delegationSelector=o?i:null,u.originalHandler=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function I(t,e,i,n,s){const o=D(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function P(t){return t=t.replace(w,""),O[t]||t}const j={on(t,e,i,n){N(t,e,i,n,!1)},one(t,e,i,n){N(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=S(e,i,n),a=r!==e,l=x(t),c=e.startsWith(".");if(void 0!==o){if(!l||!l[r])return;return void I(t,l,r,o,s?i:null)}c&&Object.keys(l).forEach((i=>{!function(t,e,i,n){const s=e[i]||{};Object.keys(s).forEach((o=>{if(o.includes(n)){const n=s[o];I(t,e,i,n.originalHandler,n.delegationSelector)}}))}(t,l,i,e.slice(1))}));const h=l[r]||{};Object.keys(h).forEach((i=>{const n=i.replace(E,"");if(!a||e.includes(n)){const e=h[i];I(t,l,r,e.originalHandler,e.delegationSelector)}}))},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=f(),s=P(e),o=e!==s,r=k.has(s);let a,l=!0,c=!0,h=!1,d=null;return o&&n&&(a=n.Event(e,i),n(t).trigger(a),l=!a.isPropagationStopped(),c=!a.isImmediatePropagationStopped(),h=a.isDefaultPrevented()),r?(d=document.createEvent("HTMLEvents"),d.initEvent(s,l,!0)):d=new CustomEvent(e,{bubbles:l,cancelable:!0}),void 0!==i&&Object.keys(i).forEach((t=>{Object.defineProperty(d,t,{get:()=>i[t]})})),h&&d.preventDefault(),c&&t.dispatchEvent(d),d.defaultPrevented&&void 0!==a&&a.preventDefault(),d}},M=new Map,H={set(t,e,i){M.has(t)||M.set(t,new Map);const n=M.get(t);n.has(e)||0===n.size?n.set(e,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(n.keys())[0]}.`)},get:(t,e)=>M.has(t)&&M.get(t).get(e)||null,remove(t,e){if(!M.has(t))return;const i=M.get(t);i.delete(e),0===i.size&&M.delete(t)}};class B{constructor(t){(t=r(t))&&(this._element=t,H.set(this._element,this.constructor.DATA_KEY,this))}dispose(){H.remove(this._element,this.constructor.DATA_KEY),j.off(this._element,this.constructor.EVENT_KEY),Object.getOwnPropertyNames(this).forEach((t=>{this[t]=null}))}_queueCallback(t,e,i=!0){b(t,e,i)}static getInstance(t){return H.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.1.2"}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}}const R=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,s=t.NAME;j.on(document,i,`[data-bs-dismiss="${s}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),c(this))return;const o=n(this)||this.closest(`.${s}`);t.getOrCreateInstance(o)[e]()}))};class W extends B{static get NAME(){return"alert"}close(){if(j.trigger(this._element,"close.bs.alert").defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),j.trigger(this._element,"closed.bs.alert"),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=W.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}R(W,"close"),g(W);const $='[data-bs-toggle="button"]';class z extends B{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=z.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}function q(t){return"true"===t||"false"!==t&&(t===Number(t).toString()?Number(t):""===t||"null"===t?null:t)}function F(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}j.on(document,"click.bs.button.data-api",$,(t=>{t.preventDefault();const e=t.target.closest($);z.getOrCreateInstance(e).toggle()})),g(z);const U={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${F(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${F(e)}`)},getDataAttributes(t){if(!t)return{};const e={};return Object.keys(t.dataset).filter((t=>t.startsWith("bs"))).forEach((i=>{let n=i.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1,n.length),e[n]=q(t.dataset[i])})),e},getDataAttribute:(t,e)=>q(t.getAttribute(`data-bs-${F(e)}`)),offset(t){const e=t.getBoundingClientRect();return{top:e.top+window.pageYOffset,left:e.left+window.pageXOffset}},position:t=>({top:t.offsetTop,left:t.offsetLeft})},V={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode;for(;n&&n.nodeType===Node.ELEMENT_NODE&&3!==n.nodeType;)n.matches(e)&&i.push(n),n=n.parentNode;return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(", ");return this.find(e,t).filter((t=>!c(t)&&l(t)))}},K="carousel",X={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},Y={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},Q="next",G="prev",Z="left",J="right",tt={ArrowLeft:J,ArrowRight:Z},et="slid.bs.carousel",it="active",nt=".active.carousel-item";class st extends B{constructor(t,e){super(t),this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._indicatorsElement=V.findOne(".carousel-indicators",this._element),this._touchSupported="ontouchstart"in document.documentElement||navigator.maxTouchPoints>0,this._pointerEvent=Boolean(window.PointerEvent),this._addEventListeners()}static get Default(){return X}static get NAME(){return K}next(){this._slide(Q)}nextWhenVisible(){!document.hidden&&l(this._element)&&this.next()}prev(){this._slide(G)}pause(t){t||(this._isPaused=!0),V.findOne(".carousel-item-next, .carousel-item-prev",this._element)&&(s(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null}cycle(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config&&this._config.interval&&!this._isPaused&&(this._updateInterval(),this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))}to(t){this._activeElement=V.findOne(nt,this._element);const e=this._getItemIndex(this._activeElement);if(t>this._items.length-1||t<0)return;if(this._isSliding)return void j.one(this._element,et,(()=>this.to(t)));if(e===t)return this.pause(),void this.cycle();const i=t>e?Q:G;this._slide(i,this._items[t])}_getConfig(t){return t={...X,...U.getDataAttributes(this._element),..."object"==typeof t?t:{}},a(K,t,Y),t}_handleSwipe(){const t=Math.abs(this.touchDeltaX);if(t<=40)return;const e=t/this.touchDeltaX;this.touchDeltaX=0,e&&this._slide(e>0?J:Z)}_addEventListeners(){this._config.keyboard&&j.on(this._element,"keydown.bs.carousel",(t=>this._keydown(t))),"hover"===this._config.pause&&(j.on(this._element,"mouseenter.bs.carousel",(t=>this.pause(t))),j.on(this._element,"mouseleave.bs.carousel",(t=>this.cycle(t)))),this._config.touch&&this._touchSupported&&this._addTouchEventListeners()}_addTouchEventListeners(){const t=t=>this._pointerEvent&&("pen"===t.pointerType||"touch"===t.pointerType),e=e=>{t(e)?this.touchStartX=e.clientX:this._pointerEvent||(this.touchStartX=e.touches[0].clientX)},i=t=>{this.touchDeltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this.touchStartX},n=e=>{t(e)&&(this.touchDeltaX=e.clientX-this.touchStartX),this._handleSwipe(),"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((t=>this.cycle(t)),500+this._config.interval))};V.find(".carousel-item img",this._element).forEach((t=>{j.on(t,"dragstart.bs.carousel",(t=>t.preventDefault()))})),this._pointerEvent?(j.on(this._element,"pointerdown.bs.carousel",(t=>e(t))),j.on(this._element,"pointerup.bs.carousel",(t=>n(t))),this._element.classList.add("pointer-event")):(j.on(this._element,"touchstart.bs.carousel",(t=>e(t))),j.on(this._element,"touchmove.bs.carousel",(t=>i(t))),j.on(this._element,"touchend.bs.carousel",(t=>n(t))))}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=tt[t.key];e&&(t.preventDefault(),this._slide(e))}_getItemIndex(t){return this._items=t&&t.parentNode?V.find(".carousel-item",t.parentNode):[],this._items.indexOf(t)}_getItemByOrder(t,e){const i=t===Q;return v(this._items,e,i,this._config.wrap)}_triggerSlideEvent(t,e){const i=this._getItemIndex(t),n=this._getItemIndex(V.findOne(nt,this._element));return j.trigger(this._element,"slide.bs.carousel",{relatedTarget:t,direction:e,from:n,to:i})}_setActiveIndicatorElement(t){if(this._indicatorsElement){const e=V.findOne(".active",this._indicatorsElement);e.classList.remove(it),e.removeAttribute("aria-current");const i=V.find("[data-bs-target]",this._indicatorsElement);for(let e=0;e{j.trigger(this._element,et,{relatedTarget:o,direction:d,from:s,to:r})};if(this._element.classList.contains("slide")){o.classList.add(h),u(o),n.classList.add(c),o.classList.add(c);const t=()=>{o.classList.remove(c,h),o.classList.add(it),n.classList.remove(it,h,c),this._isSliding=!1,setTimeout(f,0)};this._queueCallback(t,n,!0)}else n.classList.remove(it),o.classList.add(it),this._isSliding=!1,f();a&&this.cycle()}_directionToOrder(t){return[J,Z].includes(t)?m()?t===Z?G:Q:t===Z?Q:G:t}_orderToDirection(t){return[Q,G].includes(t)?m()?t===G?Z:J:t===G?J:Z:t}static carouselInterface(t,e){const i=st.getOrCreateInstance(t,e);let{_config:n}=i;"object"==typeof e&&(n={...n,...e});const s="string"==typeof e?e:n.slide;if("number"==typeof e)i.to(e);else if("string"==typeof s){if(void 0===i[s])throw new TypeError(`No method named "${s}"`);i[s]()}else n.interval&&n.ride&&(i.pause(),i.cycle())}static jQueryInterface(t){return this.each((function(){st.carouselInterface(this,t)}))}static dataApiClickHandler(t){const e=n(this);if(!e||!e.classList.contains("carousel"))return;const i={...U.getDataAttributes(e),...U.getDataAttributes(this)},s=this.getAttribute("data-bs-slide-to");s&&(i.interval=!1),st.carouselInterface(e,i),s&&st.getInstance(e).to(s),t.preventDefault()}}j.on(document,"click.bs.carousel.data-api","[data-bs-slide], [data-bs-slide-to]",st.dataApiClickHandler),j.on(window,"load.bs.carousel.data-api",(()=>{const t=V.find('[data-bs-ride="carousel"]');for(let e=0,i=t.length;et===this._element));null!==s&&o.length&&(this._selector=s,this._triggerArray.push(e))}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return rt}static get NAME(){return ot}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t,e=[];if(this._config.parent){const t=V.find(ut,this._config.parent);e=V.find(".collapse.show, .collapse.collapsing",this._config.parent).filter((e=>!t.includes(e)))}const i=V.findOne(this._selector);if(e.length){const n=e.find((t=>i!==t));if(t=n?pt.getInstance(n):null,t&&t._isTransitioning)return}if(j.trigger(this._element,"show.bs.collapse").defaultPrevented)return;e.forEach((e=>{i!==e&&pt.getOrCreateInstance(e,{toggle:!1}).hide(),t||H.set(e,"bs.collapse",null)}));const n=this._getDimension();this._element.classList.remove(ct),this._element.classList.add(ht),this._element.style[n]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const s=`scroll${n[0].toUpperCase()+n.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(ht),this._element.classList.add(ct,lt),this._element.style[n]="",j.trigger(this._element,"shown.bs.collapse")}),this._element,!0),this._element.style[n]=`${this._element[s]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(j.trigger(this._element,"hide.bs.collapse").defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,u(this._element),this._element.classList.add(ht),this._element.classList.remove(ct,lt);const e=this._triggerArray.length;for(let t=0;t{this._isTransitioning=!1,this._element.classList.remove(ht),this._element.classList.add(ct),j.trigger(this._element,"hidden.bs.collapse")}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(lt)}_getConfig(t){return(t={...rt,...U.getDataAttributes(this._element),...t}).toggle=Boolean(t.toggle),t.parent=r(t.parent),a(ot,t,at),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=V.find(ut,this._config.parent);V.find(ft,this._config.parent).filter((e=>!t.includes(e))).forEach((t=>{const e=n(t);e&&this._addAriaAndCollapsedClass([t],this._isShown(e))}))}_addAriaAndCollapsedClass(t,e){t.length&&t.forEach((t=>{e?t.classList.remove(dt):t.classList.add(dt),t.setAttribute("aria-expanded",e)}))}static jQueryInterface(t){return this.each((function(){const e={};"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1);const i=pt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}j.on(document,"click.bs.collapse.data-api",ft,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();const e=i(this);V.find(e).forEach((t=>{pt.getOrCreateInstance(t,{toggle:!1}).toggle()}))})),g(pt);var mt="top",gt="bottom",_t="right",bt="left",vt="auto",yt=[mt,gt,_t,bt],wt="start",Et="end",At="clippingParents",Tt="viewport",Ot="popper",Ct="reference",kt=yt.reduce((function(t,e){return t.concat([e+"-"+wt,e+"-"+Et])}),[]),Lt=[].concat(yt,[vt]).reduce((function(t,e){return t.concat([e,e+"-"+wt,e+"-"+Et])}),[]),xt="beforeRead",Dt="read",St="afterRead",Nt="beforeMain",It="main",Pt="afterMain",jt="beforeWrite",Mt="write",Ht="afterWrite",Bt=[xt,Dt,St,Nt,It,Pt,jt,Mt,Ht];function Rt(t){return t?(t.nodeName||"").toLowerCase():null}function Wt(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function $t(t){return t instanceof Wt(t).Element||t instanceof Element}function zt(t){return t instanceof Wt(t).HTMLElement||t instanceof HTMLElement}function qt(t){return"undefined"!=typeof ShadowRoot&&(t instanceof Wt(t).ShadowRoot||t instanceof ShadowRoot)}const Ft={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];zt(s)&&Rt(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});zt(n)&&Rt(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function Ut(t){return t.split("-")[0]}function Vt(t,e){var i=t.getBoundingClientRect();return{width:i.width/1,height:i.height/1,top:i.top/1,right:i.right/1,bottom:i.bottom/1,left:i.left/1,x:i.left/1,y:i.top/1}}function Kt(t){var e=Vt(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Xt(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&qt(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function Yt(t){return Wt(t).getComputedStyle(t)}function Qt(t){return["table","td","th"].indexOf(Rt(t))>=0}function Gt(t){return(($t(t)?t.ownerDocument:t.document)||window.document).documentElement}function Zt(t){return"html"===Rt(t)?t:t.assignedSlot||t.parentNode||(qt(t)?t.host:null)||Gt(t)}function Jt(t){return zt(t)&&"fixed"!==Yt(t).position?t.offsetParent:null}function te(t){for(var e=Wt(t),i=Jt(t);i&&Qt(i)&&"static"===Yt(i).position;)i=Jt(i);return i&&("html"===Rt(i)||"body"===Rt(i)&&"static"===Yt(i).position)?e:i||function(t){var e=-1!==navigator.userAgent.toLowerCase().indexOf("firefox");if(-1!==navigator.userAgent.indexOf("Trident")&&zt(t)&&"fixed"===Yt(t).position)return null;for(var i=Zt(t);zt(i)&&["html","body"].indexOf(Rt(i))<0;){var n=Yt(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function ee(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}var ie=Math.max,ne=Math.min,se=Math.round;function oe(t,e,i){return ie(t,ne(e,i))}function re(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function ae(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const le={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=Ut(i.placement),l=ee(a),c=[bt,_t].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return re("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:ae(t,yt))}(s.padding,i),d=Kt(o),u="y"===l?mt:bt,f="y"===l?gt:_t,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m=r[l]-i.rects.reference[l],g=te(o),_=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=p/2-m/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,E=oe(v,w,y),A=l;i.modifiersData[n]=((e={})[A]=E,e.centerOffset=E-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Xt(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function ce(t){return t.split("-")[1]}var he={top:"auto",right:"auto",bottom:"auto",left:"auto"};function de(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=!0===h?function(t){var e=t.x,i=t.y,n=window.devicePixelRatio||1;return{x:se(se(e*n)/n)||0,y:se(se(i*n)/n)||0}}(r):"function"==typeof h?h(r):r,u=d.x,f=void 0===u?0:u,p=d.y,m=void 0===p?0:p,g=r.hasOwnProperty("x"),_=r.hasOwnProperty("y"),b=bt,v=mt,y=window;if(c){var w=te(i),E="clientHeight",A="clientWidth";w===Wt(i)&&"static"!==Yt(w=Gt(i)).position&&"absolute"===a&&(E="scrollHeight",A="scrollWidth"),w=w,s!==mt&&(s!==bt&&s!==_t||o!==Et)||(v=gt,m-=w[E]-n.height,m*=l?1:-1),s!==bt&&(s!==mt&&s!==gt||o!==Et)||(b=_t,f-=w[A]-n.width,f*=l?1:-1)}var T,O=Object.assign({position:a},c&&he);return l?Object.assign({},O,((T={})[v]=_?"0":"",T[b]=g?"0":"",T.transform=(y.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",T)):Object.assign({},O,((e={})[v]=_?m+"px":"",e[b]=g?f+"px":"",e.transform="",e))}const ue={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:Ut(e.placement),variation:ce(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,de(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,de(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var fe={passive:!0};const pe={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=Wt(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,fe)})),a&&l.addEventListener("resize",i.update,fe),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,fe)})),a&&l.removeEventListener("resize",i.update,fe)}},data:{}};var me={left:"right",right:"left",bottom:"top",top:"bottom"};function ge(t){return t.replace(/left|right|bottom|top/g,(function(t){return me[t]}))}var _e={start:"end",end:"start"};function be(t){return t.replace(/start|end/g,(function(t){return _e[t]}))}function ve(t){var e=Wt(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function ye(t){return Vt(Gt(t)).left+ve(t).scrollLeft}function we(t){var e=Yt(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Ee(t){return["html","body","#document"].indexOf(Rt(t))>=0?t.ownerDocument.body:zt(t)&&we(t)?t:Ee(Zt(t))}function Ae(t,e){var i;void 0===e&&(e=[]);var n=Ee(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=Wt(n),r=s?[o].concat(o.visualViewport||[],we(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Ae(Zt(r)))}function Te(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function Oe(t,e){return e===Tt?Te(function(t){var e=Wt(t),i=Gt(t),n=e.visualViewport,s=i.clientWidth,o=i.clientHeight,r=0,a=0;return n&&(s=n.width,o=n.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(r=n.offsetLeft,a=n.offsetTop)),{width:s,height:o,x:r+ye(t),y:a}}(t)):zt(e)?function(t){var e=Vt(t);return e.top=e.top+t.clientTop,e.left=e.left+t.clientLeft,e.bottom=e.top+t.clientHeight,e.right=e.left+t.clientWidth,e.width=t.clientWidth,e.height=t.clientHeight,e.x=e.left,e.y=e.top,e}(e):Te(function(t){var e,i=Gt(t),n=ve(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=ie(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=ie(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+ye(t),l=-n.scrollTop;return"rtl"===Yt(s||i).direction&&(a+=ie(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(Gt(t)))}function Ce(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?Ut(s):null,r=s?ce(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case mt:e={x:a,y:i.y-n.height};break;case gt:e={x:a,y:i.y+i.height};break;case _t:e={x:i.x+i.width,y:l};break;case bt:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?ee(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case wt:e[c]=e[c]-(i[h]/2-n[h]/2);break;case Et:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function ke(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.boundary,r=void 0===o?At:o,a=i.rootBoundary,l=void 0===a?Tt:a,c=i.elementContext,h=void 0===c?Ot:c,d=i.altBoundary,u=void 0!==d&&d,f=i.padding,p=void 0===f?0:f,m=re("number"!=typeof p?p:ae(p,yt)),g=h===Ot?Ct:Ot,_=t.rects.popper,b=t.elements[u?g:h],v=function(t,e,i){var n="clippingParents"===e?function(t){var e=Ae(Zt(t)),i=["absolute","fixed"].indexOf(Yt(t).position)>=0&&zt(t)?te(t):t;return $t(i)?e.filter((function(t){return $t(t)&&Xt(t,i)&&"body"!==Rt(t)})):[]}(t):[].concat(e),s=[].concat(n,[i]),o=s[0],r=s.reduce((function(e,i){var n=Oe(t,i);return e.top=ie(n.top,e.top),e.right=ne(n.right,e.right),e.bottom=ne(n.bottom,e.bottom),e.left=ie(n.left,e.left),e}),Oe(t,o));return r.width=r.right-r.left,r.height=r.bottom-r.top,r.x=r.left,r.y=r.top,r}($t(b)?b:b.contextElement||Gt(t.elements.popper),r,l),y=Vt(t.elements.reference),w=Ce({reference:y,element:_,strategy:"absolute",placement:s}),E=Te(Object.assign({},_,w)),A=h===Ot?E:y,T={top:v.top-A.top+m.top,bottom:A.bottom-v.bottom+m.bottom,left:v.left-A.left+m.left,right:A.right-v.right+m.right},O=t.modifiersData.offset;if(h===Ot&&O){var C=O[s];Object.keys(T).forEach((function(t){var e=[_t,gt].indexOf(t)>=0?1:-1,i=[mt,gt].indexOf(t)>=0?"y":"x";T[t]+=C[i]*e}))}return T}function Le(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?Lt:l,h=ce(n),d=h?a?kt:kt.filter((function(t){return ce(t)===h})):yt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=ke(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[Ut(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const xe={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,m=i.allowedAutoPlacements,g=e.options.placement,_=Ut(g),b=l||(_!==g&&p?function(t){if(Ut(t)===vt)return[];var e=ge(t);return[be(t),e,be(e)]}(g):[ge(g)]),v=[g].concat(b).reduce((function(t,i){return t.concat(Ut(i)===vt?Le(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y=e.rects.reference,w=e.rects.popper,E=new Map,A=!0,T=v[0],O=0;O=0,D=x?"width":"height",S=ke(e,{placement:C,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),N=x?L?_t:bt:L?gt:mt;y[D]>w[D]&&(N=ge(N));var I=ge(N),P=[];if(o&&P.push(S[k]<=0),a&&P.push(S[N]<=0,S[I]<=0),P.every((function(t){return t}))){T=C,A=!1;break}E.set(C,P)}if(A)for(var j=function(t){var e=v.find((function(e){var i=E.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},M=p?3:1;M>0&&"break"!==j(M);M--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function De(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function Se(t){return[mt,_t,gt,bt].some((function(e){return t[e]>=0}))}const Ne={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=ke(e,{elementContext:"reference"}),a=ke(e,{altBoundary:!0}),l=De(r,n),c=De(a,s,o),h=Se(l),d=Se(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},Ie={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=Lt.reduce((function(t,i){return t[i]=function(t,e,i){var n=Ut(t),s=[bt,mt].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[bt,_t].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},Pe={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=Ce({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},je={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,m=void 0===p?0:p,g=ke(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=Ut(e.placement),b=ce(e.placement),v=!b,y=ee(_),w="x"===y?"y":"x",E=e.modifiersData.popperOffsets,A=e.rects.reference,T=e.rects.popper,O="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,C={x:0,y:0};if(E){if(o||a){var k="y"===y?mt:bt,L="y"===y?gt:_t,x="y"===y?"height":"width",D=E[y],S=E[y]+g[k],N=E[y]-g[L],I=f?-T[x]/2:0,P=b===wt?A[x]:T[x],j=b===wt?-T[x]:-A[x],M=e.elements.arrow,H=f&&M?Kt(M):{width:0,height:0},B=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},R=B[k],W=B[L],$=oe(0,A[x],H[x]),z=v?A[x]/2-I-$-R-O:P-$-R-O,q=v?-A[x]/2+I+$+W+O:j+$+W+O,F=e.elements.arrow&&te(e.elements.arrow),U=F?"y"===y?F.clientTop||0:F.clientLeft||0:0,V=e.modifiersData.offset?e.modifiersData.offset[e.placement][y]:0,K=E[y]+z-V-U,X=E[y]+q-V;if(o){var Y=oe(f?ne(S,K):S,D,f?ie(N,X):N);E[y]=Y,C[y]=Y-D}if(a){var Q="x"===y?mt:bt,G="x"===y?gt:_t,Z=E[w],J=Z+g[Q],tt=Z-g[G],et=oe(f?ne(J,K):J,Z,f?ie(tt,X):tt);E[w]=et,C[w]=et-Z}}e.modifiersData[n]=C}},requiresIfExists:["offset"]};function Me(t,e,i){void 0===i&&(i=!1);var n=zt(e);zt(e)&&function(t){var e=t.getBoundingClientRect();e.width,t.offsetWidth,e.height,t.offsetHeight}(e);var s,o,r=Gt(e),a=Vt(t),l={scrollLeft:0,scrollTop:0},c={x:0,y:0};return(n||!n&&!i)&&(("body"!==Rt(e)||we(r))&&(l=(s=e)!==Wt(s)&&zt(s)?{scrollLeft:(o=s).scrollLeft,scrollTop:o.scrollTop}:ve(s)),zt(e)?((c=Vt(e)).x+=e.clientLeft,c.y+=e.clientTop):r&&(c.x=ye(r))),{x:a.left+l.scrollLeft-c.x,y:a.top+l.scrollTop-c.y,width:a.width,height:a.height}}function He(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var Be={placement:"bottom",modifiers:[],strategy:"absolute"};function Re(){for(var t=arguments.length,e=new Array(t),i=0;ij.on(t,"mouseover",d))),this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Je),this._element.classList.add(Je),j.trigger(this._element,"shown.bs.dropdown",t)}hide(){if(c(this._element)||!this._isShown(this._menu))return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){j.trigger(this._element,"hide.bs.dropdown",t).defaultPrevented||("ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach((t=>j.off(t,"mouseover",d))),this._popper&&this._popper.destroy(),this._menu.classList.remove(Je),this._element.classList.remove(Je),this._element.setAttribute("aria-expanded","false"),U.removeDataAttribute(this._menu,"popper"),j.trigger(this._element,"hidden.bs.dropdown",t))}_getConfig(t){if(t={...this.constructor.Default,...U.getDataAttributes(this._element),...t},a(Ue,t,this.constructor.DefaultType),"object"==typeof t.reference&&!o(t.reference)&&"function"!=typeof t.reference.getBoundingClientRect)throw new TypeError(`${Ue.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return t}_createPopper(t){if(void 0===Fe)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let e=this._element;"parent"===this._config.reference?e=t:o(this._config.reference)?e=r(this._config.reference):"object"==typeof this._config.reference&&(e=this._config.reference);const i=this._getPopperConfig(),n=i.modifiers.find((t=>"applyStyles"===t.name&&!1===t.enabled));this._popper=qe(e,this._menu,i),n&&U.setDataAttribute(this._menu,"popper","static")}_isShown(t=this._element){return t.classList.contains(Je)}_getMenuElement(){return V.next(this._element,ei)[0]}_getPlacement(){const t=this._element.parentNode;if(t.classList.contains("dropend"))return ri;if(t.classList.contains("dropstart"))return ai;const e="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return t.classList.contains("dropup")?e?ni:ii:e?oi:si}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return"static"===this._config.display&&(t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,..."function"==typeof this._config.popperConfig?this._config.popperConfig(t):this._config.popperConfig}}_selectMenuItem({key:t,target:e}){const i=V.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter(l);i.length&&v(i,e,t===Ye,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=hi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(t&&(2===t.button||"keyup"===t.type&&"Tab"!==t.key))return;const e=V.find(ti);for(let i=0,n=e.length;ie+t)),this._setElementAttributes(di,"paddingRight",(e=>e+t)),this._setElementAttributes(ui,"marginRight",(e=>e-t))}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t)[e];t.style[e]=`${i(Number.parseFloat(s))}px`}))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,"paddingRight"),this._resetElementAttributes(di,"paddingRight"),this._resetElementAttributes(ui,"marginRight")}_saveInitialAttribute(t,e){const i=t.style[e];i&&U.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=U.getDataAttribute(t,e);void 0===i?t.style.removeProperty(e):(U.removeDataAttribute(t,e),t.style[e]=i)}))}_applyManipulationCallback(t,e){o(t)?e(t):V.find(t,this._element).forEach(e)}isOverflowing(){return this.getWidth()>0}}const pi={className:"modal-backdrop",isVisible:!0,isAnimated:!1,rootElement:"body",clickCallback:null},mi={className:"string",isVisible:"boolean",isAnimated:"boolean",rootElement:"(element|string)",clickCallback:"(function|null)"},gi="show",_i="mousedown.bs.backdrop";class bi{constructor(t){this._config=this._getConfig(t),this._isAppended=!1,this._element=null}show(t){this._config.isVisible?(this._append(),this._config.isAnimated&&u(this._getElement()),this._getElement().classList.add(gi),this._emulateAnimation((()=>{_(t)}))):_(t)}hide(t){this._config.isVisible?(this._getElement().classList.remove(gi),this._emulateAnimation((()=>{this.dispose(),_(t)}))):_(t)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_getConfig(t){return(t={...pi,..."object"==typeof t?t:{}}).rootElement=r(t.rootElement),a("backdrop",t,mi),t}_append(){this._isAppended||(this._config.rootElement.append(this._getElement()),j.on(this._getElement(),_i,(()=>{_(this._config.clickCallback)})),this._isAppended=!0)}dispose(){this._isAppended&&(j.off(this._element,_i),this._element.remove(),this._isAppended=!1)}_emulateAnimation(t){b(t,this._getElement(),this._config.isAnimated)}}const vi={trapElement:null,autofocus:!0},yi={trapElement:"element",autofocus:"boolean"},wi=".bs.focustrap",Ei="backward";class Ai{constructor(t){this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}activate(){const{trapElement:t,autofocus:e}=this._config;this._isActive||(e&&t.focus(),j.off(document,wi),j.on(document,"focusin.bs.focustrap",(t=>this._handleFocusin(t))),j.on(document,"keydown.tab.bs.focustrap",(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,j.off(document,wi))}_handleFocusin(t){const{target:e}=t,{trapElement:i}=this._config;if(e===document||e===i||i.contains(e))return;const n=V.focusableChildren(i);0===n.length?i.focus():this._lastTabNavDirection===Ei?n[n.length-1].focus():n[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?Ei:"forward")}_getConfig(t){return t={...vi,..."object"==typeof t?t:{}},a("focustrap",t,yi),t}}const Ti="modal",Oi="Escape",Ci={backdrop:!0,keyboard:!0,focus:!0},ki={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean"},Li="hidden.bs.modal",xi="show.bs.modal",Di="resize.bs.modal",Si="click.dismiss.bs.modal",Ni="keydown.dismiss.bs.modal",Ii="mousedown.dismiss.bs.modal",Pi="modal-open",ji="show",Mi="modal-static";class Hi extends B{constructor(t,e){super(t),this._config=this._getConfig(e),this._dialog=V.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollBar=new fi}static get Default(){return Ci}static get NAME(){return Ti}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||j.trigger(this._element,xi,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isAnimated()&&(this._isTransitioning=!0),this._scrollBar.hide(),document.body.classList.add(Pi),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),j.on(this._dialog,Ii,(()=>{j.one(this._element,"mouseup.dismiss.bs.modal",(t=>{t.target===this._element&&(this._ignoreBackdropClick=!0)}))})),this._showBackdrop((()=>this._showElement(t))))}hide(){if(!this._isShown||this._isTransitioning)return;if(j.trigger(this._element,"hide.bs.modal").defaultPrevented)return;this._isShown=!1;const t=this._isAnimated();t&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),this._focustrap.deactivate(),this._element.classList.remove(ji),j.off(this._element,Si),j.off(this._dialog,Ii),this._queueCallback((()=>this._hideModal()),this._element,t)}dispose(){[window,this._dialog].forEach((t=>j.off(t,".bs.modal"))),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new bi({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new Ai({trapElement:this._element})}_getConfig(t){return t={...Ci,...U.getDataAttributes(this._element),..."object"==typeof t?t:{}},a(Ti,t,ki),t}_showElement(t){const e=this._isAnimated(),i=V.findOne(".modal-body",this._dialog);this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0,i&&(i.scrollTop=0),e&&u(this._element),this._element.classList.add(ji),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,j.trigger(this._element,"shown.bs.modal",{relatedTarget:t})}),this._dialog,e)}_setEscapeEvent(){this._isShown?j.on(this._element,Ni,(t=>{this._config.keyboard&&t.key===Oi?(t.preventDefault(),this.hide()):this._config.keyboard||t.key!==Oi||this._triggerBackdropTransition()})):j.off(this._element,Ni)}_setResizeEvent(){this._isShown?j.on(window,Di,(()=>this._adjustDialog())):j.off(window,Di)}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(Pi),this._resetAdjustments(),this._scrollBar.reset(),j.trigger(this._element,Li)}))}_showBackdrop(t){j.on(this._element,Si,(t=>{this._ignoreBackdropClick?this._ignoreBackdropClick=!1:t.target===t.currentTarget&&(!0===this._config.backdrop?this.hide():"static"===this._config.backdrop&&this._triggerBackdropTransition())})),this._backdrop.show(t)}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(j.trigger(this._element,"hidePrevented.bs.modal").defaultPrevented)return;const{classList:t,scrollHeight:e,style:i}=this._element,n=e>document.documentElement.clientHeight;!n&&"hidden"===i.overflowY||t.contains(Mi)||(n||(i.overflowY="hidden"),t.add(Mi),this._queueCallback((()=>{t.remove(Mi),n||this._queueCallback((()=>{i.overflowY=""}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;(!i&&t&&!m()||i&&!t&&m())&&(this._element.style.paddingLeft=`${e}px`),(i&&!t&&!m()||!i&&t&&m())&&(this._element.style.paddingRight=`${e}px`)}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=Hi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}j.on(document,"click.bs.modal.data-api",'[data-bs-toggle="modal"]',(function(t){const e=n(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),j.one(e,xi,(t=>{t.defaultPrevented||j.one(e,Li,(()=>{l(this)&&this.focus()}))}));const i=V.findOne(".modal.show");i&&Hi.getInstance(i).hide(),Hi.getOrCreateInstance(e).toggle(this)})),R(Hi),g(Hi);const Bi="offcanvas",Ri={backdrop:!0,keyboard:!0,scroll:!1},Wi={backdrop:"boolean",keyboard:"boolean",scroll:"boolean"},$i="show",zi=".offcanvas.show",qi="hidden.bs.offcanvas";class Fi extends B{constructor(t,e){super(t),this._config=this._getConfig(e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get NAME(){return Bi}static get Default(){return Ri}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||j.trigger(this._element,"show.bs.offcanvas",{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._element.style.visibility="visible",this._backdrop.show(),this._config.scroll||(new fi).hide(),this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add($i),this._queueCallback((()=>{this._config.scroll||this._focustrap.activate(),j.trigger(this._element,"shown.bs.offcanvas",{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(j.trigger(this._element,"hide.bs.offcanvas").defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.remove($i),this._backdrop.hide(),this._queueCallback((()=>{this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._element.style.visibility="hidden",this._config.scroll||(new fi).reset(),j.trigger(this._element,qi)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_getConfig(t){return t={...Ri,...U.getDataAttributes(this._element),..."object"==typeof t?t:{}},a(Bi,t,Wi),t}_initializeBackDrop(){return new bi({className:"offcanvas-backdrop",isVisible:this._config.backdrop,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:()=>this.hide()})}_initializeFocusTrap(){return new Ai({trapElement:this._element})}_addEventListeners(){j.on(this._element,"keydown.dismiss.bs.offcanvas",(t=>{this._config.keyboard&&"Escape"===t.key&&this.hide()}))}static jQueryInterface(t){return this.each((function(){const e=Fi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}j.on(document,"click.bs.offcanvas.data-api",'[data-bs-toggle="offcanvas"]',(function(t){const e=n(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),c(this))return;j.one(e,qi,(()=>{l(this)&&this.focus()}));const i=V.findOne(zi);i&&i!==e&&Fi.getInstance(i).hide(),Fi.getOrCreateInstance(e).toggle(this)})),j.on(window,"load.bs.offcanvas.data-api",(()=>V.find(zi).forEach((t=>Fi.getOrCreateInstance(t).show())))),R(Fi),g(Fi);const Ui=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Vi=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i,Ki=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i,Xi=(t,e)=>{const i=t.nodeName.toLowerCase();if(e.includes(i))return!Ui.has(i)||Boolean(Vi.test(t.nodeValue)||Ki.test(t.nodeValue));const n=e.filter((t=>t instanceof RegExp));for(let t=0,e=n.length;t{Xi(t,r)||i.removeAttribute(t.nodeName)}))}return n.body.innerHTML}const Qi="tooltip",Gi=new Set(["sanitize","allowList","sanitizeFn"]),Zi={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(array|string|function)",container:"(string|element|boolean)",fallbackPlacements:"array",boundary:"(string|element)",customClass:"(string|function)",sanitize:"boolean",sanitizeFn:"(null|function)",allowList:"object",popperConfig:"(null|object|function)"},Ji={AUTO:"auto",TOP:"top",RIGHT:m()?"left":"right",BOTTOM:"bottom",LEFT:m()?"right":"left"},tn={animation:!0,template:'',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:[0,0],container:!1,fallbackPlacements:["top","right","bottom","left"],boundary:"clippingParents",customClass:"",sanitize:!0,sanitizeFn:null,allowList:{"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},popperConfig:null},en={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"},nn="fade",sn="show",on="show",rn="out",an=".tooltip-inner",ln=".modal",cn="hide.bs.modal",hn="hover",dn="focus";class un extends B{constructor(t,e){if(void 0===Fe)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t),this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this._config=this._getConfig(e),this.tip=null,this._setListeners()}static get Default(){return tn}static get NAME(){return Qi}static get Event(){return en}static get DefaultType(){return Zi}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(t){if(this._isEnabled)if(t){const e=this._initializeOnDelegatedTarget(t);e._activeTrigger.click=!e._activeTrigger.click,e._isWithActiveTrigger()?e._enter(null,e):e._leave(null,e)}else{if(this.getTipElement().classList.contains(sn))return void this._leave(null,this);this._enter(null,this)}}dispose(){clearTimeout(this._timeout),j.off(this._element.closest(ln),cn,this._hideModalHandler),this.tip&&this.tip.remove(),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this.isWithContent()||!this._isEnabled)return;const t=j.trigger(this._element,this.constructor.Event.SHOW),e=h(this._element),i=null===e?this._element.ownerDocument.documentElement.contains(this._element):e.contains(this._element);if(t.defaultPrevented||!i)return;"tooltip"===this.constructor.NAME&&this.tip&&this.getTitle()!==this.tip.querySelector(an).innerHTML&&(this._disposePopper(),this.tip.remove(),this.tip=null);const n=this.getTipElement(),s=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME);n.setAttribute("id",s),this._element.setAttribute("aria-describedby",s),this._config.animation&&n.classList.add(nn);const o="function"==typeof this._config.placement?this._config.placement.call(this,n,this._element):this._config.placement,r=this._getAttachment(o);this._addAttachmentClass(r);const{container:a}=this._config;H.set(n,this.constructor.DATA_KEY,this),this._element.ownerDocument.documentElement.contains(this.tip)||(a.append(n),j.trigger(this._element,this.constructor.Event.INSERTED)),this._popper?this._popper.update():this._popper=qe(this._element,n,this._getPopperConfig(r)),n.classList.add(sn);const l=this._resolvePossibleFunction(this._config.customClass);l&&n.classList.add(...l.split(" ")),"ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach((t=>{j.on(t,"mouseover",d)}));const c=this.tip.classList.contains(nn);this._queueCallback((()=>{const t=this._hoverState;this._hoverState=null,j.trigger(this._element,this.constructor.Event.SHOWN),t===rn&&this._leave(null,this)}),this.tip,c)}hide(){if(!this._popper)return;const t=this.getTipElement();if(j.trigger(this._element,this.constructor.Event.HIDE).defaultPrevented)return;t.classList.remove(sn),"ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach((t=>j.off(t,"mouseover",d))),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1;const e=this.tip.classList.contains(nn);this._queueCallback((()=>{this._isWithActiveTrigger()||(this._hoverState!==on&&t.remove(),this._cleanTipClass(),this._element.removeAttribute("aria-describedby"),j.trigger(this._element,this.constructor.Event.HIDDEN),this._disposePopper())}),this.tip,e),this._hoverState=""}update(){null!==this._popper&&this._popper.update()}isWithContent(){return Boolean(this.getTitle())}getTipElement(){if(this.tip)return this.tip;const t=document.createElement("div");t.innerHTML=this._config.template;const e=t.children[0];return this.setContent(e),e.classList.remove(nn,sn),this.tip=e,this.tip}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),an)}_sanitizeAndSetContent(t,e,i){const n=V.findOne(i,t);e||!n?this.setElementContent(n,e):n.remove()}setElementContent(t,e){if(null!==t)return o(e)?(e=r(e),void(this._config.html?e.parentNode!==t&&(t.innerHTML="",t.append(e)):t.textContent=e.textContent)):void(this._config.html?(this._config.sanitize&&(e=Yi(e,this._config.allowList,this._config.sanitizeFn)),t.innerHTML=e):t.textContent=e)}getTitle(){const t=this._element.getAttribute("data-bs-original-title")||this._config.title;return this._resolvePossibleFunction(t)}updateAttachment(t){return"right"===t?"end":"left"===t?"start":t}_initializeOnDelegatedTarget(t,e){return e||this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return"function"==typeof t?t.call(this._element):t}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"onChange",enabled:!0,phase:"afterWrite",fn:t=>this._handlePopperPlacementChange(t)}],onFirstUpdate:t=>{t.options.placement!==t.placement&&this._handlePopperPlacementChange(t)}};return{...e,..."function"==typeof this._config.popperConfig?this._config.popperConfig(e):this._config.popperConfig}}_addAttachmentClass(t){this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(t)}`)}_getAttachment(t){return Ji[t.toUpperCase()]}_setListeners(){this._config.trigger.split(" ").forEach((t=>{if("click"===t)j.on(this._element,this.constructor.Event.CLICK,this._config.selector,(t=>this.toggle(t)));else if("manual"!==t){const e=t===hn?this.constructor.Event.MOUSEENTER:this.constructor.Event.FOCUSIN,i=t===hn?this.constructor.Event.MOUSELEAVE:this.constructor.Event.FOCUSOUT;j.on(this._element,e,this._config.selector,(t=>this._enter(t))),j.on(this._element,i,this._config.selector,(t=>this._leave(t)))}})),this._hideModalHandler=()=>{this._element&&this.hide()},j.on(this._element.closest(ln),cn,this._hideModalHandler),this._config.selector?this._config={...this._config,trigger:"manual",selector:""}:this._fixTitle()}_fixTitle(){const t=this._element.getAttribute("title"),e=typeof this._element.getAttribute("data-bs-original-title");(t||"string"!==e)&&(this._element.setAttribute("data-bs-original-title",t||""),!t||this._element.getAttribute("aria-label")||this._element.textContent||this._element.setAttribute("aria-label",t),this._element.setAttribute("title",""))}_enter(t,e){e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger["focusin"===t.type?dn:hn]=!0),e.getTipElement().classList.contains(sn)||e._hoverState===on?e._hoverState=on:(clearTimeout(e._timeout),e._hoverState=on,e._config.delay&&e._config.delay.show?e._timeout=setTimeout((()=>{e._hoverState===on&&e.show()}),e._config.delay.show):e.show())}_leave(t,e){e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger["focusout"===t.type?dn:hn]=e._element.contains(t.relatedTarget)),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=rn,e._config.delay&&e._config.delay.hide?e._timeout=setTimeout((()=>{e._hoverState===rn&&e.hide()}),e._config.delay.hide):e.hide())}_isWithActiveTrigger(){for(const t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1}_getConfig(t){const e=U.getDataAttributes(this._element);return Object.keys(e).forEach((t=>{Gi.has(t)&&delete e[t]})),(t={...this.constructor.Default,...e,..."object"==typeof t&&t?t:{}}).container=!1===t.container?document.body:r(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),a(Qi,t,this.constructor.DefaultType),t.sanitize&&(t.template=Yi(t.template,t.allowList,t.sanitizeFn)),t}_getDelegateConfig(){const t={};for(const e in this._config)this.constructor.Default[e]!==this._config[e]&&(t[e]=this._config[e]);return t}_cleanTipClass(){const t=this.getTipElement(),e=new RegExp(`(^|\\s)${this._getBasicClassPrefix()}\\S+`,"g"),i=t.getAttribute("class").match(e);null!==i&&i.length>0&&i.map((t=>t.trim())).forEach((e=>t.classList.remove(e)))}_getBasicClassPrefix(){return"bs-tooltip"}_handlePopperPlacementChange(t){const{state:e}=t;e&&(this.tip=e.elements.popper,this._cleanTipClass(),this._addAttachmentClass(this._getAttachment(e.placement)))}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null)}static jQueryInterface(t){return this.each((function(){const e=un.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}g(un);const fn={...un.Default,placement:"right",offset:[0,8],trigger:"click",content:"",template:''},pn={...un.DefaultType,content:"(string|element|function)"},mn={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"};class gn extends un{static get Default(){return fn}static get NAME(){return"popover"}static get Event(){return mn}static get DefaultType(){return pn}isWithContent(){return this.getTitle()||this._getContent()}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),".popover-header"),this._sanitizeAndSetContent(t,this._getContent(),".popover-body")}_getContent(){return this._resolvePossibleFunction(this._config.content)}_getBasicClassPrefix(){return"bs-popover"}static jQueryInterface(t){return this.each((function(){const e=gn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}g(gn);const _n="scrollspy",bn={offset:10,method:"auto",target:""},vn={offset:"number",method:"string",target:"(string|element)"},yn="active",wn=".nav-link, .list-group-item, .dropdown-item",En="position";class An extends B{constructor(t,e){super(t),this._scrollElement="BODY"===this._element.tagName?window:this._element,this._config=this._getConfig(e),this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,j.on(this._scrollElement,"scroll.bs.scrollspy",(()=>this._process())),this.refresh(),this._process()}static get Default(){return bn}static get NAME(){return _n}refresh(){const t=this._scrollElement===this._scrollElement.window?"offset":En,e="auto"===this._config.method?t:this._config.method,n=e===En?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),V.find(wn,this._config.target).map((t=>{const s=i(t),o=s?V.findOne(s):null;if(o){const t=o.getBoundingClientRect();if(t.width||t.height)return[U[e](o).top+n,s]}return null})).filter((t=>t)).sort(((t,e)=>t[0]-e[0])).forEach((t=>{this._offsets.push(t[0]),this._targets.push(t[1])}))}dispose(){j.off(this._scrollElement,".bs.scrollspy"),super.dispose()}_getConfig(t){return(t={...bn,...U.getDataAttributes(this._element),..."object"==typeof t&&t?t:{}}).target=r(t.target)||document.documentElement,a(_n,t,vn),t}_getScrollTop(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop}_getScrollHeight(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)}_getOffsetHeight(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height}_process(){const t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),i=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=i){const t=this._targets[this._targets.length-1];this._activeTarget!==t&&this._activate(t)}else{if(this._activeTarget&&t0)return this._activeTarget=null,void this._clear();for(let e=this._offsets.length;e--;)this._activeTarget!==this._targets[e]&&t>=this._offsets[e]&&(void 0===this._offsets[e+1]||t`${e}[data-bs-target="${t}"],${e}[href="${t}"]`)),i=V.findOne(e.join(","),this._config.target);i.classList.add(yn),i.classList.contains("dropdown-item")?V.findOne(".dropdown-toggle",i.closest(".dropdown")).classList.add(yn):V.parents(i,".nav, .list-group").forEach((t=>{V.prev(t,".nav-link, .list-group-item").forEach((t=>t.classList.add(yn))),V.prev(t,".nav-item").forEach((t=>{V.children(t,".nav-link").forEach((t=>t.classList.add(yn)))}))})),j.trigger(this._scrollElement,"activate.bs.scrollspy",{relatedTarget:t})}_clear(){V.find(wn,this._config.target).filter((t=>t.classList.contains(yn))).forEach((t=>t.classList.remove(yn)))}static jQueryInterface(t){return this.each((function(){const e=An.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}j.on(window,"load.bs.scrollspy.data-api",(()=>{V.find('[data-bs-spy="scroll"]').forEach((t=>new An(t)))})),g(An);const Tn="active",On="fade",Cn="show",kn=".active",Ln=":scope > li > .active";class xn extends B{static get NAME(){return"tab"}show(){if(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&this._element.classList.contains(Tn))return;let t;const e=n(this._element),i=this._element.closest(".nav, .list-group");if(i){const e="UL"===i.nodeName||"OL"===i.nodeName?Ln:kn;t=V.find(e,i),t=t[t.length-1]}const s=t?j.trigger(t,"hide.bs.tab",{relatedTarget:this._element}):null;if(j.trigger(this._element,"show.bs.tab",{relatedTarget:t}).defaultPrevented||null!==s&&s.defaultPrevented)return;this._activate(this._element,i);const o=()=>{j.trigger(t,"hidden.bs.tab",{relatedTarget:this._element}),j.trigger(this._element,"shown.bs.tab",{relatedTarget:t})};e?this._activate(e,e.parentNode,o):o()}_activate(t,e,i){const n=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?V.children(e,kn):V.find(Ln,e))[0],s=i&&n&&n.classList.contains(On),o=()=>this._transitionComplete(t,n,i);n&&s?(n.classList.remove(Cn),this._queueCallback(o,t,!0)):o()}_transitionComplete(t,e,i){if(e){e.classList.remove(Tn);const t=V.findOne(":scope > .dropdown-menu .active",e.parentNode);t&&t.classList.remove(Tn),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}t.classList.add(Tn),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),u(t),t.classList.contains(On)&&t.classList.add(Cn);let n=t.parentNode;if(n&&"LI"===n.nodeName&&(n=n.parentNode),n&&n.classList.contains("dropdown-menu")){const e=t.closest(".dropdown");e&&V.find(".dropdown-toggle",e).forEach((t=>t.classList.add(Tn))),t.setAttribute("aria-expanded",!0)}i&&i()}static jQueryInterface(t){return this.each((function(){const e=xn.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}j.on(document,"click.bs.tab.data-api",'[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),c(this)||xn.getOrCreateInstance(this).show()})),g(xn);const Dn="toast",Sn="hide",Nn="show",In="showing",Pn={animation:"boolean",autohide:"boolean",delay:"number"},jn={animation:!0,autohide:!0,delay:5e3};class Mn extends B{constructor(t,e){super(t),this._config=this._getConfig(e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get DefaultType(){return Pn}static get Default(){return jn}static get NAME(){return Dn}show(){j.trigger(this._element,"show.bs.toast").defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(Sn),u(this._element),this._element.classList.add(Nn),this._element.classList.add(In),this._queueCallback((()=>{this._element.classList.remove(In),j.trigger(this._element,"shown.bs.toast"),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this._element.classList.contains(Nn)&&(j.trigger(this._element,"hide.bs.toast").defaultPrevented||(this._element.classList.add(In),this._queueCallback((()=>{this._element.classList.add(Sn),this._element.classList.remove(In),this._element.classList.remove(Nn),j.trigger(this._element,"hidden.bs.toast")}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this._element.classList.contains(Nn)&&this._element.classList.remove(Nn),super.dispose()}_getConfig(t){return t={...jn,...U.getDataAttributes(this._element),..."object"==typeof t&&t?t:{}},a(Dn,t,this.constructor.DefaultType),t}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){j.on(this._element,"mouseover.bs.toast",(t=>this._onInteraction(t,!0))),j.on(this._element,"mouseout.bs.toast",(t=>this._onInteraction(t,!1))),j.on(this._element,"focusin.bs.toast",(t=>this._onInteraction(t,!0))),j.on(this._element,"focusout.bs.toast",(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=Mn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return R(Mn),g(Mn),{Alert:W,Button:z,Carousel:st,Collapse:pt,Dropdown:hi,Modal:Hi,Offcanvas:Fi,Popover:gn,ScrollSpy:An,Tab:xn,Toast:Mn,Tooltip:un}})); +//# sourceMappingURL=bootstrap.bundle.min.js.map \ No newline at end of file diff --git a/qdntz/tzzc.html b/qdntz/tzzc.html new file mode 100644 index 0000000..1b9ae17 --- /dev/null +++ b/qdntz/tzzc.html @@ -0,0 +1,1545 @@ + + + + + + + + + + + + + + + + + +
+
黔东南州产业大招商
政策摘编
黔东南州投资促进局
二零二三年
+
一、精选八
二、综合保障类政策
(一)综合性政策 .......................................... 3
(二)支持民族地区政策 ................................... 10
(三)土地利用政策 ....................................... 10
(四)财政金融政策 ....................................... 15
(五)科技创新政策 ....................................... 20
(六)税收支持政策 ....................................... 29
(七)人才扶持政策 ....................................... 36
(八)用电、物流政策 ..................................... 51
三、产业类政策
(一)大数据信息产业 ..................................... 55
(二)大健康医药产业 ..................................... 60
(三)新型建材产业 ....................................... 63
(四)生态特色食品加工产业 ............................... 65
(五)农业特色产业 ....................................... 66
(六)特色林业 ........................................... 68
(七)文化和旅游产业 ..................................... 71
(八)现代服务业 ......................................... 75
(九)新能源汽车及电池材料 ............................... 76
(十)酱香白酒 ........................................... 77
(十一)生猪 ............................................. 78
+
(十二)生态渔业 ......................................... 79
四、基金类政策
一、新型工业化基金 ....................................... 81
二、新型城镇化基金 ....................................... 86
三、农业现代化基金 ....................................... 89
四、旅游产业化基金 ....................................... 93
五、新动能产业发展基金 ................................... 96
六、生态环保发展基金 ..................................... 98
七、“桥头堡”专项资金使用办法 .......................... 102
五、东西部协作政策
(一)国家政策 .......................................... 102
(二)省级政策 .......................................... 103
(三)州级政策 .......................................... 107
六、县市政
(一)凯里市(黔东南高新区、贵州炉碧经济开发区) ........ 107
(二)丹寨县 ............................................ 115
(三)黄平县 ............................................ 118
(四)镇远县 ............................................ 119
(五)三穗县 ............................................ 120
(六)天柱县 ............................................ 131
(七)台江县 ............................................ 132
(八)从江县 ............................................ 141
(九)岑巩县 ............................................ 144
(十)榕江县 ............................................ 152
(十一)黎平县 .......................................... 163
七、营商服务类政策
(一)贵州省优化营商环境条例 ............................ 165
(二)“贵人服务”政策 .................................. 167
+
(三)贵州省2023年度优化营商环境重点任务清单 ............ 170
(四)项目投资服务政策 .................................. 179
(五)贵州省招商引资项目代办服务暂行办法 ................ 183
(六)贵州省生态环境厅关于生态环境保护优化推动产业高质量发展
的指导意见 .................................................. 183
+
黔东南州产业大招商政策
摘编
·1·
(一)自202111日至20301231日,对设在西部地区
的鼓
励类产业企业减按1
5
%的税率征收企业所得税;对从事民族
业、特色食
品生产的企业,符合国家重点扶持的高新技术企业条件
15
%
的税企业税;资额
1000
元(1000元)上的
药企业,从企产之日起3年内,企业所交纳的增值税地方分成部
助给持企
3
以上
5
年以以减
方式给予扶持。经认定为高新技术企业的,减按1
5
%率征收企业所税;
经认定的高新术企业来
可按15%
所得税和15%的优惠税率
内外纳税;对技术
型企业,减按1
5%
税率征收企业所得税。
政策依据:财政部税务总局国家发展改革委关于延续西部大开发企业
所得税政的公告(
2020
年第
23
号)省政民族业和特色
食品产业发展的意见(黔府发
2
012
32
号);贵州省关于加快推进新
医药产业发展的指导意见(黔府发〔
2014
24
号);贵州省人民政府关
的实意见(黔府发2019
7号)
(二)对首次入评中国500的民营企业,省级给予300元奖
励,次入中国民
5
00
”的民营业,省级给予
200
万元
门分别给予
300万元或100万元的补助。
政策依据:省委、省政府关于《进一步促进民营经济加快发展的若干
一、精选政策八条
+
黔东南州产业大招商政策
摘编
·2·
意见》(黔党发〔201616号)
亿亿亿级、亿给予
500
万元
400万元、300万元、200
万元的一次性奖励。
进到贵州落户发展总部经济的批零住餐、电商等现代商贸服务企业,年销
售额首次突破
100
亿元、50亿元10
亿元且入统的,别给予
500
万元、
300万元、100
万元的一次性奖励。
业,
400
万元,在创业板、科创板、北京证券
交易所上市的一次性奖励350万元,在新三板挂牌的一次性奖励50万元。
政策依据:省人民政府关于印发贵州省培育壮大市场主体行动方案
(20222025)的通知(黔府发〔20228号)
业项目,在确定土地出让底价时可按不低于所在地土地等别相对应《全国
工业用地出让最低价标准》的70%执行。以农、林、牧、渔业产品初加工
为主的工业项目,在确定土地出让底价时可按不低于所在地土地等别相对
应《全国工业用地出让最低价标准》的70%执行。
政策依据:省自然资源厅关于进一步做好新型工业化用地保障的若干
意见(黔自然资函〔2021541号)
1
亿元
支持民贸民品企业发展。统筹安排财政衔接推进乡村振兴补助资金等相
关转移支付支持低氟边销茶等民族地区农业产业发展。
政策依据:关于支持民族地区高质量发展若干政策措施的意见(黔党
+
黔东南州产业大招商政策
摘编
·3·
发〔202134号)
广广
产生业固1
5
%总限
500万元。
政策依据:州人民政府关于印发黔东南州东西部协作以奖代补鼓励
广
2021117
号)
(一)综合性政策
政策一
支持贵州积极接融入粤港澳大湾区建设,探索“大湾区总部+贵州
基地”、“大区研+贵州制造等合作模式,支持粤黔合作建产业
园区;积极对接成渝地区双城经济圈建设,推进交通、能源、大数据、文
化和旅游等领域合作。支持贵州加大磷、铝、锰、金、萤石、重晶石等资
源绿色勘探开发利用,加快磷化工精细化、有色冶金高端化发展,打造全
国重要的资源精深加工基地;支持布局建设关键零部件、关键材料、关键
设备等产业备份基地;支持建设产地冷链物流设施,鼓励农业产业化龙头
企业、农产品流通企业和大型商超在贵州建设绿色农产品供应基地,推动
“黔货出山”。推进特色食品、中药材精深加工产业发展,支持将符合要
求的贵州苗药等民族医药列入《中华人民共和国药典》。
政策依据:国务院关于支持贵州在新时代西部大开发上闯新路的意见
(国发〔20222号)
二、综合保障类政
+
黔东南州产业大招商政策
摘编
·4·
政策二
省级财政连续5年每年安排专项资金5亿元,按照“资金跟着项目走
的原则,用于支持“桥头堡”建设。加大对融入大湾区重大建设项目、旅
游产业化项目等的支持力度,支持黔东南州储备一批补齐短板、增强发展
后劲的优质项目。支持黔东南州在财税体制改革上先行先试,贯彻落实民
族自治地方企业所得税减免政策,提高黔东南州企业发展的动力。明确支
持黔东南州重大工程项目103个,重大政策117项,试点示范21个。
政策依据:关于支持黔东南自治州“黎从榕”打造对接融入港澳大
湾区“桥头堡”的实施意见(黔府发〔20227号)
政策三
5
00
3
00
万元奖励,
首次入评中国民营
500
强”民营企业,省级给
200
万元
300
元或100万元的补助。
政策依据:省委、省政府关于《进一步促进民营经济加快发展的若干
意见》(黔党发〔201829号)
政策四
1.做大做强龙头企业。通过省工业和信息化发展专项资金,对营
突破亿亿级亿亿级的
500
400万元、300万元、200
励。通过省级服
务业促进工业化城镇化专项资金,对本省和引进到贵州落户发展总部经济
的批零住餐、电商等现代商贸服务企业,年销售额首次突
100
亿元、50
亿元、10
亿元且入统的,分别给予
500
万元、300万元、100
万元的一次
性奖励。
2.大力培育上市企业。通过省级金融业态发展奖补资金,对注册地在
+
黔东南州产业大招商政策
摘编
·5·
我省的企业,在境内主板上的一次性奖400万元,在板、科创板、
北京证券交易上市的一次性奖励350元,在新三板牌的一次性奖
50万元。
3.
资金,对新增上规入库的规模以上工业企业、规模以上服务业企业、限额
以上批零住餐企业,分别按照每户
20
万元、1
0
万元、1
0
万元标准给予一
次性奖励。
政策依据:省人民政府关于印发贵州省培育壮大市场主体行动方案
(20222025)的通知(黔府发〔20228号)
政策五
1.定的新技术企业来源于境外所得按照15%的优惠税率
企业所得税和15%优惠率计算境内外应纳税总额;对经认定的技
进型企业,减按15%的税率征收企业所得税。
2.对外商在黔设立的独立法人研发机构,以及出资设立或参与设立的
国家工程研究中心、国家技术创新中心、国家重点实验室、国家工程实验
省相现有
300万元至500万元补助。外商投资企业提供技术转让、技术开发及与之相
关的技术咨询、技术服务,可按规定免征增值税。
3.关部门现有专项对在主板上的外商投资企业给400万元
励,在中小板创业板上市的给予350万元奖励,对纳省级上市后备
源库并在新三板挂牌的给予一次性奖励50万元。
政策依据:贵州省人民政府关于加大利用外资力度推动经济高质量发
展的实施意见(黔府发〔20197号)
政策六
1.小规模纳税人增值税起征点从月销售额10万元提高到15元;对小
+
黔东南州产业大招商政策
摘编
·6·
微企业和个体商户年应纳税所得额不100元的部分,在行优
策基础上,再减半征收所得税延续执行企业研发费用加计扣除75%政策,
将制造业企业加计扣除比例提高到100%
2.纳税人在资产重组过程中,通过合并、分立、出售、置换等方式,
将全部或者部分实物资产以及与其相关联的债权、负债和劳动力一并转让
给其他企业和个人,对其中符合条件的货物、不动产、土地使用权转让行
为,不征收增值税。
3.对新增上规入库的规模以上工业企业,按照每户20万元的标准给予
企业一次性奖励;对新增上规入库的规模以上服务业企业,按照每户10
元的标准给予企业一次性奖励;对新增上限入库的限上批零住餐企业,按
照每户10万元的标准给予企业一次性奖励。
4.册地在我省,且在境内主板市的企业,奖400万元;在
业板、科创板市的企业,奖350元;对纳入省级上市后资源库并
在新三板挂牌的企业,一次性奖励50万元。
政策依据省发展改革委5关于印发《关于深人实施贵省市
场主体培育“四转”工程的若干政策措施》的通知(黔发改服务〔2021
394号)
政策七
1.新引的外商投资工项目,对其实际发生的项目备的/
安装费、设备转移的搬迁运输费、厂房装修设计费、环评费、规划设计和
施工图设计费、项目地质勘察费等费用按实际发生费用给予一定比例资金
支持。
2.对符合条件的外商投资工业企业生产经营成本中实际发生的物流费、
认证费、房产税、土地使用税、环评费、生产经营场所租赁费等费用按实
际发生费用给予一定比例资金支持。
+
黔东南州产业大招商政策
摘编
·7·
3.支持外资跨国公司地区总部和功能性机构做强对在黔新设的外资跨
国公司总部或地区总部对省级财政年度贡献首次超过5000万元人民币的,
按其当年对地方税收贡献的增量部分给予一定比例的支持;对符合条件的
外资跨国公司地区总部和功能性机构年度营业收入作为基数给予分档支持。
4.对中东部加工贸易企业搬迁至贵州的工业企业,在搬迁费用、产线
提质增效等方面给予一定比例资金支持。
5.支持工业企业布局海外仓拓展业务,在运营费用等方面给予一定比
例资金支持。支持工业企业扩大进口,对进口《贵州省鼓励进口产品和技
术目录》中的关键设备、关键零部件、重要原材料给予一定比例资金支持。
支持工业企业通过陆海新通道及中欧(中亚)班列开展进出口业务,有效
降低物流成本。
6.对工业企业出口国家准许的技术,以及进口国家鼓励的技术按一定
比例给予贷款贴息支持。
7.支持工业企业开展境外实业投资、海外并购和国际产能合作,对境
外项目给予一定比例资金支持。
8.对参加境外展会的工业企业,展位费给予一定比例的支持;对属于
脱贫地区的参加中国进出口商品交易会的工业企业,展位费全免;对参加
省商务厅组团参加中-盟博览会、中国国际服务贸易、中国(上海)
国际技术进出口交易会等境内外知名展会的工业企业,展位费全免。
9.支持工业企业参加中国国际进口博览会贵州经贸交流会、中国国际
投资贸易洽谈会等重大投资促进活动,围绕产业链开展补链强链招商。
10.将符条件的外资工业企业纳贵州重点外商投资企业名单
及时有效处理外资工业企业投诉,保护外资工业企业合法权益,持续优化
外商投资环境。
政策依据:省商务厅关于印发《关于支持新型工业化高质量发展的若
+
黔东南州产业大招商政策
摘编
·8·
干措施》的通知(黔商发〔202113号)
政策八
202211日至20241231对增值税规模税人继续50%
建设税、使
(不含证券交易印花税)、耕地占用税和教育费附加、地方教育附加,并将
小型微利企业和个体工商户纳入政策适用范围。增值税小规模纳税人、小
型微利企业和个体工商户已依法享受资源税、城市维护建设税、房产税、
城镇土地使用税、印花税(不含证券交易印花税)、耕地占用税和教育费附
加、地方教育附加其他优惠政策的,可叠加享受上述“六税两费”减免政
策。
积极落实小型微利企业所得税优惠政策。自202211日至202412
31日,对年应纳税所得额超100万元但不超过300万元的部分,减按25%
计入应纳税所额,20%的税率缴纳企业所得税。完善小型微利企
标监控,实时跟踪管理,及时纠正应享未享、不应享而享受、超额享受、
未足额享受等。
加快推进新型工业化各项政策落实落地。支持工业企业主导或参与制
订技术标准。对牵头制定并获批准发布国家标准和地方标准,符合法律法
规规定且符合省委省政府确定的重点支持发展产业和项目、对贵州经济社
会发展有较大的促进作用的企,给予省级相应资20万元5万元的补
助。切实发挥知识产权激励制度作用。对省级和国家级知识产权优势或示
范企业给予20万元—50万元资助;对获得中国专利金奖、中国外观设计金
奖、中国驰名商标(行政认定)的各一次性奖励50万元;对获得贵州省专利
金奖、贵州省外观设计金奖的各一次性奖励10万元;支持创新型企业运用
专利商标进行质押融资,给予企业最高10万元贴息资助,给予银行贷款金
0.2%的风险资助,知识产权证券化每单最高给予200万元资助。
+
黔东南州产业大招商政策
摘编
·9·
政策依据:省人民政府办公厅关于印发贵州省工业企业纾困解难实施
方案的通知(黔府办函〔202241号)
政策
20251231日前,对符合规定的重点群体人员,从事个体经营的,
自办理个体工商户登记当月起,在3(36个月)内按每户每年14400元为限
额依次扣减其当年实际应缴纳增值税、城市维护建设税、教育费附加、地
方教育附加和个人所得税。企业招用符合规定的重点群体人员,与其签订
1以上期限劳动合同并依法缴纳社会保险费的,自签订劳动合同并缴
社会保险当月,在3内按照实际招用人数给予定额每每年7800元依
次扣减增值税、城市维护建设税、教育费附加、地方教育附加和企业所得
税。
加大规上(限上)服务业企业支持力度,对新入统的企业每户给予10
元奖补。
政策依据:省人民政府办公厅关于印发贵州省促进服务业领域困难行
业恢复发展实施方案的通知(黔府办函〔202242号)
政策
继续推进减税降费。切实落实常态化疫情防控各项措施,严格落实物
流企业大宗商品仓储用地城镇土地使用税减半征收等政策。在政策期内,
允许符合条件物流辅助服务业纳税人按照当期可抵扣进项税加计10%
抵减应纳税额。
进一步降低用电成本。深化电价机制改革,落实好第二监管周期输配
电价,切实降低实体经济输配电价。有序放开竞争性环节上网电价,推动
各类用户参与电力市场交易,实行峰谷分时电价。落实降低贵安新区数据
中心和省内5G基站用电成本政策。
政策依据:省人民政府办公厅关于印发贵州省支持民营企业加快改革
+
黔东南州产业大招商政策
摘编
·10·
发展与转型升级政策措施的通知(黔府办发〔202113号)
(二)支持民族地区政策
1.支持民族地区有条件的开发区升级为省级或国家级开发区。重点支
持黔东南高新技术产业开发区等加快转型升级发展,2025年主要经济指标
力争实现倍增。支持黔东南州大健康医药产业集群等加快建设。
2.支持天柱钡化工产业园、兴仁化工产业园等创建省级化工园区。
3.支持麻江县、安龙县等创建国家现代农业产业园,支持民族地区其
他县()积极申报创建农业产业融合发展项(家现代农业产业园、
势特色产业集群、农业产业强镇)
4.加大对“苗绣”“贵银”产业高质量发展资金支持,省现代服务业
发展专项资金、省文化产业发展专项资金、省中小企业发展专项资金、省
特色手工产业锦绣计划专项资金向“苗绣”“贵银”产业项目倾斜支持。
5.打造100个民族特色村,推进民特色村寨和传统村落旅
产业融合发展。支持民族地区发展养老产业,重点打造20个康养示范基地。
6.支持民族地区发展林业经济,创建10个以上国家林下经济产业示范
基地。支持黔东南州创建国家级林下经济示范区。
7.在满足国家、省相关能耗双控、双碳以及产业政策的基础上,对民
族地区优势产业能耗增量和能耗强度指标给予差异化支持和倾斜。支持民
族地区电解铝等高载能优势产业购买产能指标。
8.优先支持符合条件的民族地区企业在主板、创业板、科创板和新三
板上市或挂牌。
政策依据:关于支持民族地区高质量发展若干政策措施的意见(黔党
发〔202134号)
(三)土地利用政策
+
黔东南州产业大招商政策
摘编
·11·
政策一
纳入国家重大项目清单的项目用地,以及纳入省重大项目清单的单独
选址的能源、交通、水利、军事设施、产业项目用地,在用地审批时直接
配置计划指标。农业十二大特色优势产业、十大工业产业、服务业创新发
展十大工程,以及教育、医疗等公共服务和基础设施重点项目用地优先保
障,“六稳”“六保”项目应保尽保。
政策依据:省人民政府办公厅《关于进一步做好用地审批和计划管理
的通知》(黔府办函〔202070号)
政策二
1.落实出让要求。市、县人民政府出让土地前,应完成地块内土地及
房屋征收、补偿等工作,处理好土地、矿权、房屋产权、安置补偿等法律
经济关系,防止因政府及政府有关部门的行为造成土地闲置。拟出让的土
地应土地权利清晰,安置补偿到位,没有法律经济纠纷,具备施工设备与
人员进场的道路、施工所需的供水和供电等动工开发必需的基本条件。
2.规范出让方式。符合《划拨用地目录》的建设用地项目,可以按划
拨方式供应土地。对能源、环境保护、保障性安居工程和非营利性的养老、
教育、文化等项目,除可按划拨方式供应外,鼓励以出让、租赁等方式供
应土地。工业、商业、旅游、娱乐和商品住宅等经营性用地以及同一宗地
2个以上意向用地者的,应当以招标、拍卖或者挂牌方式出让。不得把
应当进行招标拍卖挂牌方式出让的经营性用地,违反规定通过划拨方式或
协议方式出让。
3.范土出让金管理。地出让合同签订后1月内,受让人
纳出让价款的50%,余款要按照合同约定及时缴纳,最迟付款时间不得超
过一年。属国家、省确定的优先发展产业且用地集约的特殊工业项目,经
当地出让协调决策机构集体认定,土地出让金可约定在两年内全部缴清,
+
黔东南州产业大招商政策
摘编
·12·
首次缴纳比例不得低于出让价款的50%。受让人付清全部土地出让价款后,
方可申请办理不动产登记。未按出让合同约定缴清全部土地出让价款的,
不得发放不动产权证书,也不得按出让价款缴纳比例分割发放不动产权证
书,不得少征、减免土地出让收入和违约金,也不得以任何形式变相减免
土地出让收入。
4.开展存量土地处置。未动工开发满一年的闲置土地,市、县自然资
源主管部门应报经本级人民政府批准后,依法向国有建设用地使用权人征
缴土地出让或者划拨价款20%的土地闲置费;属未动工开发满两年的闲置
土地,市、县自然资源主管部门按照相关规定,报经有批准权的人民政府
批准后,依法无偿收回国有建设用地使用权。会同市场监管、发展改革、
金融监管部门建立土地市场诚信体系,对失信企业实施联合惩戒。
政策据:
省人民政府办公厅印发关于进一步加强国有建设用地出让
和供后监管工作的意见(试行)的通知(黔府办发〔202135号)
政策
优先保障工业用地指标。推进新增建设用地计划分配与存量建设用地
盘活挂钩,根据各地处置批而未供和闲置土地情况配置新增建设用地年度
计划指标,优先保障开发区工业项目用地。纳入省级以上重点项目清单的
工业项目,由省级统筹优先保障用地计划指标。工业项目新增用地,一般
不安排使用增减挂钩节余指标。开发区工业用地项目,按照“特事特办、
急事急办”的原则,开辟绿色通道,优先审批,即到即办,快捷报批。
优先出让工业用地。有序推进开发区内建设用地供应,优先出让工业
用地,引导和支持有条件的企业,特别是大中型工业企业参与工业用地招
标拍卖挂牌。各地按照“以投定供”的原则,合理确定大型工业项目建设
时序,根据项目投产计划,制定分期供地计划,优先保障项目首期建设用
地,定期对已供地项目亩均投资强度、单位面积产值等进行效益评估,决
+
黔东南州产业大招商政策
摘编
·13·
定是否继续供地或调整后续供地规模。分期建设的工业项目,不得改变土
地用途。
推进“标准地”出让。鼓励“标准地”改革试点地区和有条件的开发
区,在完成环境影响、节能、压覆重要矿产资源、地质灾害危险性等相关
区域评估基础上,因地制宜建立新增工业项目“标准地”的投资、能耗、
环境、建设、亩均产出等引导性指标体系,并将具体指标纳入项目投资建
设协议和国有建设用地使用权出让合同,强化前期服务,加快办理用地审
批等相关手续,切实提高土地资源配置效率。
提高标准厂房利用率。各地要引导无特殊工艺要求的中小微型企业租
赁或购买存量标准厂房,对于投资额小于5000万元或用地面积小于30亩的
工业企业,原则上入驻标准厂房,不提倡单独供地。鼓励企业通过建设用
地使用权分割或合并转让方式盘活闲置厂房和国有建设用地使用权。
创新工业用地供应方式。鼓励各地采取长期租赁、先租后让、租让结
合、弹性年期出让等方式供应工业用地,出让土地需依法以招标拍卖挂牌
方式供应。达到土地出让合同约定的固定资产投资强度、亩均税收等条件
后,经出租人同意,可申请将承租的全部或部分土地按协议方式办理出让
手续。在弹性年期土地使用权期满时,达到出让合同约定的固定资产投资
强度、亩均税收等条件的,可申请延长土地使用年期,经批准并按相关规
定补缴土地出让金后,办理不动产变更登记。
引导工业用地混合使用。经市、县自然资源主管部门充分论证,新增
工业项目用地,生产服务、行政办公、生活服务设施建筑面积占项目总建
筑面积比例不15%的,仍按工业用管理,兼容用途的土地、房
得分割转让。出让兼容用途的土地,按主用途确定供应方式,在现有建设
用地上增加兼容的,可以协议方式办理用地手续。
政策依据:省自然资源厅省工业和信息化厅省科技厅省商务厅关于强
+
黔东南州产业大招商政策
摘编
·14·
化开发区规划引领推动土地节约集约利用的指导意见(黔自然资发〔2021
14号)
政策
推进土地供应方式改革。各地要大力推行长期租赁、先租后让、租让
结合、弹性年期出让的方式,降低企业用地成本。对确定为优先发展产业
和以农、林、牧、渔业产品初加工为主的脱贫攻坚工业项目,在符合集约
用地标准前提下,土地出让底价可按不低于所在地土地等别相对应的工业
用地最低价标准的70%执行,但不得低于实际各项成本费用之和。
允许项目建设先行用地。对疫情防控及抢险救灾急需使用的土地,可
根据需要先行使用,对难以避让永久基本农田和生态保护红线的,视作重
大项目允许占用。属临时用地的,使用结束后恢复原状,交还原土地使用
者;属永久性建设用地的,依法办理建设用地审批手续。对符合先行用地
规定的重大工程,可按程序申报办理先行用地审批手续,保障依法用地。
光伏方阵用地不得占用耕地,占用其他农用地的,应节约集约用地,
避免对生态和农业生产造成影响。光伏方阵用地涉及使用林地的,须采用
林光互补模式可使用年降水400米以下区域的灌木林地及其他区
域覆盖
度低于50%的灌木林地;光伏支架最低点应高于灌木高度1米以上。光
伏方阵用地不得改变地表形态,以第三次全国国土调查及后续开展的年度
国土变更调查成果为底版进行管理,实行用地备案,不需按非农建设用地
审批。
政策依据:省自然资源厅关于进一步加强建设用地保障服务推动经济
社会高质发展的通(黔自然函〔2020392)、自然资源部办
厅国家林业和草原局办公室国家能源局综合司关于支持光伏发电产业发展
规范用地管理有关工作的通知(自然资办发〔202312号)
+
黔东南州产业大招商政策
摘编
·15·
(四)财政金融政策
政策一
支持商业金融、合作金融等更好为西部地区发展服务。引导金融机构
加大对西部地区小微企业融资支持力度。落实无还本续贷、尽职免责等监
管政策,在风险总体可控前提下加大对西部地区符合条件的小微企业续贷
支持力度。引导和鼓励银行业金融机构合理调配信贷资源,加大对西部贫
困地区扶贫产业支持力度。支持轻资产实体经济企业或项目以适当方式融
资。增加绿色金融供给,推动西部地区经济绿色转型升级。依法合规探索
建立西部地区基础设施领域融资风险分担机制。
政策依据:中共中央国务院关于新时代推进西部大开发形成新格局的
指导意见(中发〔201913号)
政策二
对注册地在我省的企业,上市挂牌后切实发挥产业集群引领、科技创
新引领等作用,有力推动地方经济社会高质量发展的,经评定后给予奖励。
其中,境内主上市的企业,奖励400万元;在创业板科创板、北京
券交易所上市企业,奖350万元;对在新三板挂牌的企业奖励50
元。
政策依据:民政公厅印发省推市高
量发展三年行动方案的通知》(黔府办发〔202132号)
政策三
1.省应用技术研究与开发资金以财政后补助方式对入选创新型领军企
业给予500-1000万元补助,对入选科技型小巨人企业给予50万元补助,
对入选科技型小巨人成长企业给予20万元补助,对入选科技型种子企业给
15万元补助,对经认定的大学生创业企业给予5-10万元补助。
2.对具有外贸经营权的工业生产、仓储、物流、电子商务等企业到境
+
黔东南州产业大招商政策
摘编
·16·
外参展会生的展位费、人员费按有关定给50%-70%金支持,
对出企业出口信用保险机构投保发生保险费给50%-80%的资
(单个企业最高支持金额100万元)
政策依据:省政府关于进一步支持工业企业加快发展若干政策措施的
通知(黔府发〔201512号)
政策四
符合我省特色优势产业发展导向,年实际外资金额(不含外方股东贷
款,下同)超过3000万美元的新项目(房地产业、金融业及类金融业项目
除外,下同)或超过1000万美元的跨国公司总部或地区总部;新引进符合
我省产业发展向的境外世界500强投资项目;已在我省落户属于我省
特色优势产业的生产性外资项目,年实际外资金额超过2000万美元的增资
项目。上述项目落地我省的,按其当年对省级财政贡献量的一定比例给予
支持。外资跨国公司总部或地区总部对省级财政年度贡献首次超过5000
元人民币的,按其当年对省级财政贡献量的一定比例加大支持力度。
政策依据:贵州省引进重大外资项目支持办法(暂行)(黔府办函
201949号)
政策五
1.通过贵州省工业和信息化发展专项资金,支持“千企改造”工程,
按项目实施单位在同一年度获专项资金支持额度原则上不超过2000万元、
单个项目获支持额度原则上不超过1000万元的标准给予支持。
2.通过贵州省应用技术研究与开发专项资金、贵州省工业和信息化发
展专项资金,对我省高新技术产业和战略性新兴产业发展中的重要核心技
术攻关、重点装备研发、重点引进技术(装备)的消化吸收再创新项目,
给予最高1000万元的补助。
3.通过贵州省工业和信息化发展专项资金、贵州省能源结构调整专项
+
黔东南州产业大招商政策
摘编
·17·
资金,按照十大工业产业分类,在“十四五”期间,对营业收入首次突破
1000亿级、500亿级、100亿级、10亿级的企业,分档分别给予一次性奖励,
单户企业(一级企业)奖励不低于200万元,最高不超过1000万元。
4.落实企业上市挂牌专项奖励措施。对注册地在我省,且在境内主板
上市的工业企,奖400万元;在中小板、创业板、科创板上市的
企业,奖350元;对纳入省上市后备资源库并在新三板挂牌的工
企业,一次性奖励50万元。省内企业境外上市和并购重组上市可参照执行。
5.通过贵州省工业和信息化发展专项资金,对新认定的国家级企业技
术中心国家级术创新示范企业、国家工业设计中心给予一次补助100
万元,对新认定的省级企业技术中心、技术创新示范企业、工业设计中心
给予一次性补助50万元。
6.通过贵州省商务发展专项资金,对新认定的省级创业创新示范基地
等分别给予一次性补助。企业在同一年度获得专项资金支持额度原则上不
超过1000万元。
7.通过贵州省工业和信息化发展专项资金,对新增上规入统工业企业
按每户20万元的标准实施奖励;利用贵州省中小企业发展专项资金,对新
认定为国家级精特“小巨人”的企业,按每户100万元标准给予
一次性奖励;对新认定国家级中小企业公共服务示范平台,按照每户40
元的标准给予一次性奖励,对新认定省级中小企业公共服务示范平台,按
照每户20万元的标准给予一次性奖励。
政策依据:省财政厅关于印发《支持新型工业化若干财政政策措施》
的通知(黔财工〔202146号)
政策六
1.对文化旅游重点项目贷款贴息。
省级财政1亿元文化旅游重点项目贷款贴息资金,要支促进
+
黔东南州产业大招商政策
摘编
·18·
农村产业融合发展、实施休闲农业和乡村旅游精品工程、助力全省乡村振
兴的文化旅游重点项目,着力巩固脱贫攻坚成果,助推乡村产业兴旺,推
动旅游产业提质增效。
2.对新评定的高星级酒店给予奖励。对新评定上规入统的五星级饭店、
四星级饭店,省级财政分别一次性奖励100万元、30万元。
3.对新增上规入统旅游企业给予奖励。
省级财政统筹文化和旅游发展专项等相关资金对当年新增上规入统的
旅游企业给予奖励。2021年对新增上规入统的旅游企业给予1000万元激励
支持。
4.实施旅游企业上市挂牌奖励政策。
对注地在省,且在境内主板上市的旅企业,一次性奖励400
京证上市
350万元;对在新三板挂牌的旅游企业,一次性奖励50万元。
政策依据:省财政厅关于印发《省财政厅支持旅游产业化的若干政策
措施》的通知(黔财教〔2021178号)
政策七
1.建设补贴。对非财政性资金投资、符合国家标准的公用或专用充电
设施,按直流桩200/千瓦、交流桩100/千瓦的标准给予一定补贴。
2.符合贵州省电动汽充电基础设施示范项目管理(暂行
规定条件,并经省能源局会同有关部门确定为充电基础设施建设示范的项
目,按照本办规定程序实施奖补,奖补金100万元,单个企业奖
金最高不超过200万元。
政策依据:省财政厅省能源局关于印发《充电基础设施建设补助资金
绩效承诺奖补办法》的通知(黔财工〔2019114号)
+
黔东南州产业大招商政策
摘编
·19·
政策八
创新试点目的总投资,226比例构成即地方国企业出20%、
社会资本出资20%、银行贷60%。其中,地方国有企业出资部分可申请
省级资金200-3000元(超过投资20%,由创新点项
报单位所在地人民政府授权地方国有企业履行出资人职责。
政策依据:贵州省农业农村厅关于开展农银企产业共同体创新试点的
通知(黔农发〔201937号)
政策
支持市场主体做大做强
()激发就业创业活力。省市财政在分配就业专项资金时将城镇常住
人口和城镇新增就业人口作为分配因素。省级通过中小企业发展专项资金、
妇女儿童专项资金、锦绣计划专项资金等,大力支持中小企业星光培训及
人才培训、中小企业服务体系建设、中小企业发展及巾帽家政、妇女手工
特色产业等发展。
()推进产城融合发展。以工业大突破助推新型城镇化,
统筹省工业和信息化发展专项资金、省中小企业发展专项资金及新型
工业化基金等,采取直接补助、贷款贴息、投贷联动、股权投资等方式支
持培育壮大市场主体。
()支持实施人才新政。充分用好省级人才发展专项资金,支持符合
条件的人才引进和培养,对引进的高层次紧缺人才、重点产业高端人才团
队等,在推动新型城镇化建设、促进地方经济社会发展方面有突出贡献的,
重点给予奖励。
提升政府投资基金引导作用
充分发挥贵州省新型城镇化投资基金的引领、撬动作用,省级财政在
20212025年,连续5年每年出资30亿元-50亿元,注入贵州省新型城镇化
+
黔东南州产业大招商政策
摘编
·20·
发展基金,重点围绕我省新型城镇化建设工作,以经营城市的理念、商业
化的模式、市场化的手段,经营盘活城市资产、丰富城市功能、满足市民
需求,改善城乡人居环境,重点投向城市更新、产城融合、特色小镇、特
色小城镇和绿色小镇等项目,以产业化促进城镇化。通过贵州省新型城镇
化投资基金与贵州省新型工业化发展基金、贵州省文化旅游产业投资基金
等省级政府投资基金间的相互联动,形成财政出资合力,引导金融机构等
社会资本进一步加大对新型城镇化的投入。
政策依据:省财政厅关于印发《支持新型城镇化若干财政政策措施》
的通知(黔财建〔202164号)
(五)科技创新政策
政策一
一、一般资助标准
(一)国内发明专利实施。发明专利权利人(不包括自然人)将其国
内授权发明专利(包括以受让或被许可方式引进的省内外授权发明专利)
实际运用于本单位生产经营,每件实施的发明专利资助3000元。
(二)高价值发明专利授权。新授权的高价值发明专利,尚未实施的,
每件资助1500元;已实施的,按照本条第(一)项标准资助。高价值发明
专利的范围,按照国家知识产权局明确的范围为准。
(三)高价值发明专利维持。对申请日起满10年的高价值发明专利,
自届满10年之日起6个月内提出资助申请,每件资助3000元。
(四)国外发明专利授权。对国外授权发明专利,一个国家或地区每
件资助1.5万元,每件发明专利资助不超过3个国家或地区。
(五)地理标志注册(批准、登记)。获得地理标志注册(批准、登
记),每件资助2万元,仅资助一个渠道。
(六)集成电路布图设计专有权登记。获得集成电路布图设计专有权
+
黔东南州产业大招商政策
摘编
·21·
登记,每件资助2000元。
(七)植物新品种授权。获得植物新品种授权,每件资助5000元。
(八)地理标志产品专用标志使用核准。对经核准使用地理标志产品
专用标志的市场主体,每家资助5000元。
二、知识产权运用项目资助标准
(一)首通过知识产权理体系认证的,资3万元。每家单
资助一次。
(二)购买知识产权保险的保费金额在2万元以上的,资助3000元。
(三)知识产权权利人向银行申请专利、商标等知识产权质押贷款本
息还清后,按照贷款市场报价利率(LPR)计算利息的20%给予贴息资助,每
个资助对象每年最高资助10万元;贴息资助时对知识产权评估中介服务费
按实际支出给予不超过2万元资助。
(四)银行向我省知识产权权利人发放一年期以上专利、商标质押贷
款,按照质押贷款额的0.2%给予风险资助,同一银行对同一知识产权权利
人发放的专利、商标质押贷款,年度风险资助金额最高不超过20万元。全
年风险资助总额以当年预算资金为限,用完即止。
(五)知识产权运营资助:
1.高校院所、企业等创新主体建立健全专利运营激励机制,积极探索
方法利转
300万元以上的资助20万元。
2.知识产权运营服务机构创新知识产权运营方法,建设并有效运行知
识产权运营服平台知识产权运营交易主营业务年收300万元以上
资助20万元。
(六)对以知识产权为基础资产公开发行资产证券化产品的融资企业
给予一次性资,资助金额为发行规模5%,最高不超过200元。每年
+
黔东南州产业大招商政策
摘编
·22·
按发行规模排序资助不超过3单。
三、知识产权服务项目资助标准
(一)经国家知识产权局批准在贵州设立满3年、拥有2名以上在贵州
省备案执业的专利代理师、上年度代理贵州申请人的国内发明专利授权50
件以上的专利代理机构(含外在贵州省设立的分支机构)资助2万元
不重复资助。
(二)在家知识产权局标局备案成立3年,并且在代理的
注册申请中上年度被核准的商标注册500件以上的商标代理机构,资助2
元,不重复资助。
(三)对获得专利代理师资格证书在国家知识产权局《专利代理管理
系统》进行首次执业备案,并在贵州省内专利代理机构(含外省在贵州省
设立的分支机构)执业满1年的专利代理师,资助2000元。
(四)对获得知识产权师中级以上(含中级)专业技术职称、国家级
知识产权人才、受聘为国家级知识产权专家的自然人,资助2000元。
(五)对承担省知识产权局组织开展的贵州省重大经济活动知识产权
分析评议、专利导航、知识产权战略研究项目的承担单位,每个项目资助
15万元。
(六知识权服务机构开展知识产权托服务,帮500家以上中
小微企业开展知识产权管理制度制定、战略规划编制、专利技术挖掘、知
识产权申请与维护、许可转让、知识产权评估、知识产权维权援助等服务
一年以上的,给予30万元资助。
四、知识产权发展项目资助标准
(一)对获得批准的国家知识产权强国建设示范城市(县、园区)、
国家知识产权示范企业、国家技术与创新支持中(TISC)、国家知识产权
示范高校和科研机构、国家知识产权信息服务中心、全国中小学知识产权
+
黔东南州产业大招商政策
摘编
·23·
教育示范学校等国家级示范项目,以及贵州省高价值核心专利项目、贵州
省地理标志产品产业化促进项目,给予一次性资助50万元。
(二)对获得批准的国家知识产权强国建设试点城市(县、园区)、
国家知识产权优势企业、国家知识产权试点高校和科研机构、全国中小学
知识产权教育试点学校、全国知识产权服务品牌机构、国家知识产权信息
公共服务网点等国家级试点项目,给予一次性资助30万元。
(三)对贵州省知识产权优势企业、县域(园区)经济知识产权战略
推进工程、贵州省知识产权信息公共服务网点,以及其他省级知识产权试
点或示范项目,给予一次性资助20万元。
政策依据:省知识产权局关于印发《贵州省知识产权高质量发展资助
办法》的通知(黔知发〔20221号)
政策二
1.中国专利金奖、中国外观设计金奖、中国驰名商标(行政认定)各一
次性奖励50万元。
2.中国专利银奖、中国外观设计银奖各一次性奖励20万元。
3.中国专利优秀奖、中国外观设计优秀奖各一次性奖励10万元。
4.贵州省专利金奖、贵州省外观设计金奖各一次性奖励10万元,且每
届评选名额贵州省专利金奖不超过2个,贵州省外观设计金奖不超过1个。
5.州省利银奖、贵州外观设计银奖各一次性奖励5元,且每
届评选名额贵州省专利银奖不超过6个,贵州省外观设计银奖不超过3个。
6.州省利优秀奖、贵州省外观设计优秀奖,各一次性奖励3元,
且每届评选名额贵州省专利优秀奖不超过20个、贵州省外观设计优秀奖不
超过5个。
同一专利、商标,不能重复申报奖励。获得贵州省专利奖后申报中国
专利奖的除外。
+
黔东南州产业大招商政策
摘编
·24·
本省专利权人与省外专利权人共同获得中国专利奖的,按照本办法奖
励标准对本省专利权人给予奖励。
政策依据:贵州省知识产权局贵州省人力资源和社会保障厅贵州省财
政厅关于印发《贵州省知识产奖励办法》的通知(黔知发20213号)
政策三
对在我州建立院士工作站和博士后科研流动工作站,并组建有高层次
科技人才团队的单位,州级财政一次性给予10万元建站资助。
(一)积极支持知识产权创造及应用。
1.请并获受理的发明专利,州财政给予1000/资助;对
权的实用新型和外观设计专利州级财政给予300/件资助。
2.对中小微企业通过专利权质押方式获得银行贷款,按正常还贷期的
贷款年利息额50%予贴补助,年度内贴息额度最高不超20万元
息年限不超过2年。
(二)积极支持科技成果转化。
对新认定的科技和知识产权品牌服务机构,州级财政给予一次性20
元补助。对新认定的国家级科技服务机构,州级财政给予一次性10万元补
助。
政策依据:中共黔东南州办公室黔东南州人民政府办公室关于印发
《黔东南州促进科技创新加快科技进步奖励补助办法》的通知(黔东南党
办通〔201677号)
政策
对新认定的国家级科技企业孵化器,给予300万元补助。
采取省、市、区三级财政共同资助的方式对拟上市企业分阶段给予共
150万元的补助。
对获国家技财政拨款的重大科技项目给予国家拨款50%、最
+
黔东南州产业大招商政策
摘编
·25·
高不超过1000万元的补助。
支持大型科学仪器共享平台的建设,向公众开放成效显著的共享平台
每年给予10万元—30万元的运行维修服务补助。
政策依据:贵州省加强科技创新加快科技进步奖励补助办法实施细则
(暂行)(黔科通〔2012114号)
政策
()基础研究
基础研究计划项目包括一般项目和重点项目。一般项目资助经费不超
10万元,重点项目资助经费不超过30万元,重大基础研究“一事一议”。
()科技支撑项目
一般目资经费不低50元,不超100元;重点项目
事一议”,资助经费不超过500万元。产业关键共性技术研究目申报主
体为企业。
()科技成果应用及产业化项目。
适用于企业的,包括科技成果转化、创新券和科技金融等3类。
1.成果转化项目。一般项目不50万元,但不超100万元
重点项目“一事一议”,资助经费一般不超过1000万元。
2.创新券。创新券用于支持企业向高校、科研院所、新型研发机构购
买科技创新服务或技术成果。资助经费不超过50万元,其中对技术服务合
同、技术咨询合同的资助经费不超过20万元。
3.科技保险、科技贷款贴息对高新技术企业和科技部备案的科技型中
小企业研发活动的贷款和保险进行补助。
(1)科技险。对新研发和推广给予30%50%的保费助,
具体补助比例视险种、年度保费总额、科技保险补助资金总预算确定。每
个企业每年补助额度不超过15万元。
+
黔东南州产业大招商政策
摘编
·26·
(2)科技贷款贴息。按超过企支付同期银行贷款市场报价
(LPR)计算的利息额20给予业贴息,个企业每年贴息额度不
10万元。对已享受专利权质押贷款贴息补助的企业,不再享受该项贴息。
()科技重大专项
科技重大专项项目下设课题,每个课题资助一般不超过1000万元,承
担单位须提供1.5倍以上配套资金。首次拨付资助额的30%,通过中期评估
后拨付70%对省内资源不能解决的重大项目实行揭榜挂帅,采
向省内外发布技术榜单的方式,竞争择优遴选承担单位。参与科技重大专
项的省外单位的项目经费,从企业配套经费中支出。科技重大专项实施周
期一般为3年,最多不超过5年。
()科技平台及人才团队建设项目。
1.创新基地:
(1)重点实验室。企业类重点实验室建设项目资助经费不超过200万元。
(2)技术创新中心。资助经费不超过200万元。
2.创新创业载体:
(1)科技企业孵化器。资助经费不超过100万元。
(2)众创空间。资助经费不超过100万元。
(3)星创天地:资助经费不超过100万元。
3.高新技术企业。对认定的高新技术企业,一次性资助30万元。其中,
重新认定的高新技术企业须核实其研发投入。
4.其他:
(1)院士工作站:建设项目资助经费不超过50万元。
(2)技术转移机构。资助经费不超过30万元。
(3)科技创新人才团队。资助经费50万元。
(4)科普示范基地。项目资助经费不超过50万元。
+
黔东南州产业大招商政策
摘编
·27·
(5)国际科技合作基地。资助经费不超过50万元。
上述科技计划项目详细申报条件以年度项目申报通知或指南为准。
政策依据:省科技厅权责事项运行规定2023年修改版
政策
201711日起,经认定的技术先进型服务企业可享受下列税收优
惠:
1.减按15%的税率征收企业所得税;
2.企业发生的职工教育经费支出,不超过工资薪金总额8%的部分,准
予在计算应纳税所得额时扣除;超过部分,准予在以后纳税年度结转扣除。
政策依据:贵州省技术先进型服务企业认定管理办法(试行)(黔科通
2017178号)
政策
支持方向:符合国家和省对产业发展的方向,聚焦省委省政府围绕
“四新”推动“四化”高质量发展需求,以研制实用化、商品化的产品为
目标,支持重大科技成果在贵州落地转化和产业化。
支持方式:对每个根据有关标准可独立鉴定(定型)的系统/分系统/
键技术元素,可各给予不高1000万元的无偿资助。项目立项后按研制阶
段推进,各研阶段先拨付该阶段资助金额30%,阶段验收后拨付
70%尾款。
政策依据:《贵州省工业领域重大科技成果转化项目工作指引(试行)
(黔科通〔202137号)
政策
调整专利费减缴条件。《财政部国家发展改革委关印发<专利
收费减缴办法>的通知》(财税〔201678)第三条规定可以申请减缴专
利收费的专利请人和专利权人条件,由上年度月均收入低于3500(
+
黔东南州产业大招商政策
摘编
·28·
4.2万元)的个人,调整为上年度月均收入低5000(6万元)的个人;
由上年度企业应纳税所得额低于30万元的企业,调整为上年度企业应纳税
所得额低于100万元的企业。
政策依据:省财政厅省发展改革委关于转发《财政部国家发展改革委
关于减免部分行政事业性收费有关政策的通知》的通知(黔财非税〔2019
21号)
政策
强化政策扶持。落实国家和省委、省政府促进中小企业发展的各项政
策措施,对获得省级认定的“专精特新”中小企业,在申报省新型工业化
发展基金和专项资金相关项目时予以重点支持。每年在省“专精特新”中
小企业中择优支持一批贵州省专精特新“小巨人”企业,在省中小专项资
金中安排经费给予一次性奖励。
每年按要求选择部分省专精特新“小巨人”企业推荐为国家专精特新
“小巨人”企业,获国家专精特新“小巨人”企业认定的,在省中小专项
资金中安排经费给予一次性奖励,同时获省和国家专精特新“小巨人”企
业认定的按就高原则进行奖励。
政策依据:贵州省工业和信息化厅贵州省财政厅关于印发《贵州省中
小企业“专精特新”培育实施方案》的通知(黔工信中小〔202137号)
政策
1.奖补对象为贵州省内注册的规模以上工业企业,具有独立法人资格、
健全的财务管理机构和财务管理制度,诚信经营、依法纳税的。企业无财
政资金使用违纪、违规、违法行为,近三年未发生较大及以上安全事故或
者违法失信行为的。
2.按照“分类施策、综合扶持”的原则,对企业(不含集团公司)按有
研发活动和无研发活动两类进行奖补。
+
黔东南州产业大招商政策
摘编
·29·
(1)2020研发活动规上工业业:2022根据2021年相对于
2020年研发投入增量奖补2023年根据2021年、2022年分别相对于2020
研发投入各自增量的合计额奖补;2024年,续三年分
2020研发入各自增量的合计奖补。每年分别对100家企业进
补。分为档:研发投入量合计额1-10,每家奖500元;研发
入增量合计额11-100位,每家奖补100万元;其中年度研发投入增量超过1
亿元(),每家奖补1000万元,以上奖补同一年度同一企业按就高原则执
行。
(2)2020年无活动的规上工企业,以2020年后才的业企
业:2022年根据2021年研发投入进行奖补;2023年根据2021年、2022年研
发投入合计额奖补;2024年,按此前连续三年合计额奖补。每年分别对前
150家进行奖补。分为四档:年度研发经费总1-5位,每家奖励300万元
年度经费总量6-50,每家100万元;年研发经费总量51-100
位,每家奖励80万元;年度研发经费总量101-150位,每家奖励30万元。
3.综合施策鼓励规上工业企业研发活动。
(1)给予平台扶持:年度研发投入经费超过5亿元,或研发投入占比高
5%投入经费超过2亿元的企业,支持设立省级重点实验室、省级技
创新中心、院士工作站等创新平台,择优推荐申建国家创新平台。
(2)给予项目扶持:对连续两年研发经费超1亿元、且排名前10强的,
定向安排一个省级科技重大专项;对连续三年进入激励名单且研发投入占
比高于5%的企业,定向安排一个省级重大科技项目。
政策依据:《贵州省规上工业企业研发活动扶持计划实施办法(试行)
(黔科通〔202251号)
(六)税收支持政策
+
黔东南州产业大招商政策
摘编
·30·
政策一
对设在西部地区的鼓励类产业企业所得税优惠政策到期后继续执行。
赋予西部地区具备条件且有需求的海关特殊监管区域内企业增值税一般纳
税人资格。对西部地区鼓励类产业项目在投资总额内进口的自用设备,在
政策规定范围内免征关税。
政策依据:中共中央国务院关于新时代推进西部大开发形成新格局的
指导意见(中发〔201913号)
政策
科技型中小企业开展研发活动中实际发生的研发费用,未形成无形资
产计入当期损益的,在按规定据实扣除的基础上,202211日起,再
按照实际发生额的100%在税前加计扣除;形成无形资产的,自202211
日起,按照无形资产成本的200%在税前摊销。
政策依据:财政部税务总局科技部关于进一步提高科技型中小企业研
发费用税前加计扣除比例的公告(2022年第16号)
政策
一、增值税一般纳税人(以下称纳税人)发生增值税应税销售行为或者
进口货物原适16%率的,税率调13%原适10%税率的,
调整为9%
二、税人进农产品,原适用10%扣除率的扣除率调整为9%。纳
税人购进用于生产或者委托加工13%税率货物的农产品,按照10%的扣除率
计算进项税额。
三、原适用16%税率且出口退税率为16%的出口货物劳务,出口退税
率调整为13%原适10%率且出口退税率10%出口货物
应税行为,出口退税率调整为9%
四、适用13%税率的境外旅客购物离境退税物品,退税率为11%;适用
+
黔东南州产业大招商政策
摘编
·31·
9%税率的境外旅客购物离境退税物品,退税率为8%
五、自201941日起,《营业税改征增值税试点有关事项的规定》
(财税〔201636号印发)第一条第()项第1点、第二条第()项第1点停
止执行,纳税人取得不动产或不动产在建工程的进项税额不再分2年抵
扣。此前按照述规定尚未抵扣完毕的待抵扣进项税额,可自20194
税款所属期起从销项税额中抵扣。
六、纳税人购进国内旅客运输服务,其进项税额允许从销项税额中抵
扣。()纳税人未取得增值税专用发票的,暂按照以下规定确定进项税额:
1.取得增值税电子普通发票的,为发票上注明的税额;
2.取得注明旅客身份信息的航空运输电子客票行程单的,为按照下列
=( 票价+ 燃油附加
费)÷(1+9%)×9%
3.取得注明旅客身份信息的铁路车票的,为按照下列公式计算的进项
税额:铁路旅客运输进项税额=票面金额÷(1+9%)×9%
4.取得注明旅客身份信息的公路、水路等其他客票的,按照下列公式
计算进项税额:公路、水路等其他旅客运输进项税额= 票面金额
÷(1+3%)×3%
()《营业税改征增值税试点实施办法》(税〔201636号印发)
二十七条第()(财税
201636号印发)第二条第()项第5点中“购进的旅客运输服务、贷款
服务、餐饮服务、居民日常服务和娱乐服务”修改为“购进的贷款服务、
餐饮服务、居民日常服务和娱乐服务”。
政策依据:财政部税务总局海关总署关于深化增值税改革有关政策的
公告(2019年第39号)
+
黔东南州产业大招商政策
摘编
·32·
政策
202211日至20241231日,对小型微利企业年应纳税所得额
超过100万元但不超过300万元的部分,减按25%计入应纳税所得额,按20%
的税率缴纳企业所得税。
202311日至20241231日,对小型微利企业年应纳税所得额
不超过100元的部分,减25%入应税所得额,按20%的税率缴
业所得税。
政策依据:财政部税务总局关于进一步实施小微企业所得税优惠政策
的公告(2022年第13号)、财政部税务总局关于小微企业和个体工商户所
得税优惠政策的公告(2023年第6号)
政策
一、自202311日至20231231,对月销售额10元以(
本数)的增值税小规模纳税人,免征增值税。
二、自202311日至20231231日,增值税小规模纳税人适用3%
征收率的应税销售收入,减按1%征收率征收增值税;适用3%
征率的预缴增值税项目,减按1%预征率预缴增值税。
三、自202311日至20231231日,增值税加计抵减政策按照以
下规定执行:
()允许生产性服务业纳税人按照当期可抵扣进项税额加计5%抵减应
纳税额。生产性服务业纳税人,是指提供邮政服务、电信服务、现代服务、
生活服务取得的销售额占全部销售额的比重超过50%的纳税人。
()允许生活性服务业税人按当期可抵扣进项税额加10%抵减
应纳税额。生活性服务业纳税人,是指提供生活服务取得的销售额占全部
销售额的比重超过50%的纳税人。
()纳税人适用加计抵减政策的其他有关事项,按照《财政部税务总
+
黔东南州产业大招商政策
摘编
·33·
局海关总署关于深化增值税改有关政策的公告》(财政税务总局海
总署公告2019年第39)《财部税务总局关于明确生活性务业增值
税加计抵减政策的公告》(财政部税务总局公告2019年第87)等有关规定
执行。
政策依据:财政部税务总局关于明确增值税小规模纳税人减免增值税
等政策的公告(2023年第1号)
政策
企业开展研发活动中实际发生的研发费用,未形成无形资产计入当期
损益的,在按规定据实扣除的基础上,自202311日起,再按照实际发
生额的100%在税前加计扣除;形成无形资产的,2023l1日起,按照
无形资产成本的200%在税前摊销。
政策依据:财政部税务总局关于进一步完善研发费用税前加计扣除政
策的公告(2023年第7号)
政策
一、加大小微企业增值税期末留抵退税政策力度,将先进制造业按月
全额退还增值税增量留抵税额策范围扩大至符合条件的小微企业(含个
体工商户,下同),并一次性退还小微企业存量留抵税额。
()符合条件的小微企,可以20224月纳税申期起向主
务机关申请退还增量留抵税额。在20221231日前,退税条件按照第三
条规定执行。
()符合条件的微型企,可以20224月纳税申期起向主
务机关申请一次性退还存量留抵税额;符合条件的小型企业,可以自2022
5月纳税申报期起向主管税务机关申请一次性退还存量留抵税额。
二、加大“制造业”、“科学研究和技术服务业”、“电力、热力、
燃气及水生产和供应业”、“软件和信息技术服务业”、“生态保护和环
+
黔东南州产业大招商政策
摘编
·34·
境治理业”、“交通运输、仓储和邮政业”“批发和零售业”、“农、林、
宿业”服务
“教育”、“卫生和社会工作和“文化、体育和娱乐业”(以下称制
业等行)值税期末留抵退税政策力度,将先进制造业按月全额退还增
值税增量留抵税额政策范围扩至符合条件的制造业等行业企业(含个
工商户,下同),并一次性退还制造业等行业企业存量留抵税额。
()符合条件的制造业行业企,可以自20224纳税申报
向主管税务机关申请退还增量留抵税额。
()符合条件的制造业行业中企业,可以自20225纳税
期起向主管税务机关申请一次性退还存量留抵税额;符合条件的制造业等
行业大型企业可以20226纳税申报期起向主管税务机关申请一
性退还存量留抵税额。
三、适用政策纳税人需同时符合以下条件()纳税信用等A
级或者B级;
()申请退税前36个月未发生骗取留抵退税、骗取出口退税或虚开增
值税专用发票情形;
( ) 退 36
()201941日起未享受即征即退、先征后返(退)政策。
政策依据:财政部税务总局关于进一步加大增值税期末留抵退税政策
实施力度的公告(2022年第14号)、财政部税务总局关于扩大全额退还增
值税留抵税额政策行业范围的公告财政部税务总局公告(2022年第21号)
政策
202311日起20271231止,物流企业自有(包括自用
和出租)或承租的大宗商品仓储设施用地,减按所属土地等级适用额标
准的50%计征城镇土地使用税。
+
黔东南州产业大招商政策
摘编
·35·
财政部税务总局关于继续实施物流企业大宗商品仓储设施用地城镇土
地使用税优惠政策的公告
政策依据:财政部税务总局公告(2023年第5
政策
一、个体商户经营所得年应纳税所得不超100万元的分,
在现行优惠政策基础上,再减半征收个人所得税。个体工商户不区分征收
方式,均可享受。
二、个体工商户在预缴税款时即可享受,其年应纳税所得额暂按截至
本期申报所属期末的情况进行判断,并在年度汇算清缴时按年计算、多退
少补。若个体工商户从两处以上取得经营所得,需在办理年度汇总纳税申
报时,合并个体工商户经营所得年应纳税所得额,重新计算减免税额,多
退少补。
三、个体工商户按照以下方法计算减免税额:减免税额=(个体工商户
经营所得应纳税所得额不超100万元部分的应纳税额-其他政策减免税额
×个体工户经营所得应纳税所得额不超过100万元部分÷经所得应纳
税所得额)×(1-50%)
四、个体工商户需将按上述方法计算得出的减免税额填入对应经营所
栏次《个
表》。对于通过电子税务局申报的个体工商户,税务机关将提供该优惠政
策减免税额和报告表的预填服务。实行简易申报的定期定额个体工商户,
税务机关按照减免后的税额进行税款划缴。
五、本公告自202311日起施行,20241231日终止执行。
202311日至本公告发布前,个体工商户已经缴纳经营所得个人所
得税的,可自动抵减以后月份的税款,当年抵减不完的可在汇算清缴时办
理退税;也可直接申请退还应减免的税款。
+
黔东南州产业大招商政策
摘编
·36·
政策依据:国家税务总局关于落实支持个体工商户发展个人所得税优
惠政策有关事项的公告(国家税务总局公告<2023年第5>
(七)人才扶持政策
政策一
1.对引进并在我省服务一定年限的“两院”院士、国家最高科学技术
奖获得者,国家自然科学奖、技术发明奖、科学技术进步一等奖获得者,
以及长江学者、国家杰出青年科学基金获得者等高层次创新创业人才,根
据情分别100-500万元的科启动经费和创创业资金资助。对
每个获批的省级人才基地、高技能人才培训基地,给予50-200万元建设经
费;对每个获批的省级人才团队,给予50-100万元的项目经费资助;对于
被列入“两院”院士候选人才培养工程的人才及其团队,由省给予一次性
120万元经费支持。
2.实行“高层次人才服务绿卡”制度,向经认定的高层次创新创业人
才和急需紧缺特殊人才发放绿卡,持卡者在户籍、住房、经费资助、家属
就业、子女入学及保险、就医、职称评聘、出入境等方面,享受优惠政策
和便捷服务。
3.对引进并在我省服务一定年限的“两院”院士,国家“千人计划”
和“万人计划”入选者、长江学者、国家有突出贡献中青年专家、国家杰
出专业技术人才、国家杰出青年科学基金获得者和国家级重点学科、重点
实验室学术技带头人,具有学历学位的博士,分别提供100万元60
元、15万元的购房补贴。
4.对我省管理期内的省管专家,每月补贴1200元;对高级技师每月补
500元;对在企事业单位工作的具有学历学位的博士,每月补贴800元;
对在机关工作的具有学历学位的博士,每月补贴300元。
5.对在县(市、区)及以下工作的正高职称专家、具有学历学位的博
+
黔东南州产业大招商政策
摘编
·37·
士,每月分别补贴1000元。对在乡镇及以下工作的各类人才,每月按本人
基本工资的20%发放基层工作津贴。
6.对于获得国家科技进步奖奖励的,省给予同国家奖励额度相当的奖
励;对于新当选“两院”院士、入选国家“万人计划”和教育部“长江学
者奖励计划”、获得全国杰出专业技术人才、国家杰出青年科学基金者,
分别奖励10万元。对于贡献特别突出的,由省委、省政府授予“黔灵科技
贡献奖”等称号,并给予100万元的奖励。
政策依据:省委关于进一步实施科教兴黔战略大力加强人才队伍建设
的决定(黔党发〔201231号)
政策
本细则涉及发放对象包括六个类别:
第一类:国科学院院士、中国工程院士,国家最高学技术奖
得者。第二:家自然科奖、技术发明奖、科学技术进步奖一等奖获
得者前三位完成人;国际科技合作奖获得者,全国杰出专业技术人才、国
家杰出青年科学基金获得者;国家级人才计划入选者,教育部“长江学者”
奖励计划入选者、“国家百千万人才工程”国家级人选、国家有突出贡献
的中青年专家、科技部创新人才推进计划入选者、中宣部文化名家暨“四
个一批”人才;国家级重点学科、重点实验室、技术创新中心、工程研究
中心学术技术带头人;国医大师、全国名中医、国家卫生健康突出贡献中
青年专家;教育部“国培计划”中小学名师名校长领航工程入选者;中华
技能大奖获得者、世界技能大赛获奖者。
第三类:理期内的贵州省核心专家,“贵州杰出人才奖获得者。
第四类:管理期内的贵州省省管专家,全国技术能手。
第五类:企事业单位从事工艺加工、术改造、生产造、复杂
备管理等工作,具有一级技能等级证书或职业资格证书的高级技师;具有
+
黔东南州产业大招商政策
摘编
·38·
学历学位证书的博士。
第六类:由市()省级行业主管门推荐,经省委人才工作领
组办公室认定的其他高层次人才。
发放标准。
第一人才2万元津贴;第、第三类才每5000津贴
四类人才1200元津贴;第五人才,高级技师每500元津贴,
企事业单位工作的博士每月800元津贴,在行政单位工作的博士每月300
津贴。
政策依据:贵州省委人才工作领导小组关于印发《贵州省高层次人才
津贴发放实施细则》的通知(黔委人领发〔20212号)
政策
一、创业人才项目
1.住房保障。由创办企业所在地政府或园区管委会为创业人才及其团
队成员就近提供人才公寓,并收取较低的房屋租金,引进人才可一直入住
到离开贵州或在贵州购房或退休。创业人才在企业所在地购买商品房,且
未享受过购房地政府给予的人才住房补贴让利等政策的,企业所在地可结
合实际给予购房政策优惠。
2.场地保障。创办企业所在地政府或园区管委会根据企业需要为创业
人才及其创办企业提供办公场所,由地方财政给予一定的场租补贴,补贴
最高可达场租的70%,补贴期最高可达3年。
3.贴息支持。支持创业人才创办的企业申请银行贷款用于企业生产经
营,省级对不超过100万元的银行贷款部分给予贴息支持,贴息比例50%
贴息期最高可达3年。
4.贡献激励。设立贵州创业人才奖,省级对作出重要贡献的创业人才
给予最高250万元奖励。
+
黔东南州产业大招商政策
摘编
·39·
5.推荐申报国家计划项目。创业人才符合申报条件的,优先推荐申报
国家高层次人才特殊支持计划科技创业领军人才等国家级计划项目。
6.其他支持。鼓励政府投资基金按市场化方式跟投。组织创业指导机
构和创业导师为创业人才提供市场、融资、生产、管理等辅导服务。创业
人才作出突出贡献的,可发放人才服务卡,用于解决创业人才及团队成员
子女入学、医疗保障等方面的问题。
省内创业人才达到人才项目认定条件的,享受引进人才相关支持政策。
国内()500企业、省外上市公司、国家专精特新“小巨人企业到贵
州创建分公司和子公司,在人才认定、奖励、服务保障等方面按照“一事
一议”进行支持。
二、企业科技创新人才项目
1.住房保障。由企业所在地政府或园区管委会为引进人才及其团队成
员就近提供人才公寓,并收取较低的房屋租金,引进人才可一直入住到离
开贵州或在贵州购房或退休。引进人才在企业所在地购买商品房,且未享
受过购房地政府给予的人才住房补贴让利等政策的,企业所在地可结合实
际给予购房政策优惠。
2.人才“蓄水池”政策。企业按照《贵州省重点人才“蓄水池”管理
办法(试行)》引进的人才,按规定可享受相关政策支持。
3.才激。企业引进科技创新人才认3内,黔税前30
万元至36万元之间的,省级财政每年按税前年薪的4%进行奖励;在黔税前
年薪36万元(36万元)50万元之间的,省级财政每年按5%进行奖励;在
黔税前年薪50万元(50万元)80万元之间的,省级财政每年按6%进行奖
励;在黔税前年薪80万元(80万元)120万元之间的,省级财政每年按7%
进行奖励;在黔税前年薪120万元以上(120万元)的,省级财政每年按8%
进行奖励。
+
黔东南州产业大招商政策
摘编
·40·
4.贡献奖励。设立贵州企业科技创新人才奖,对作出重要贡献的科技
创新人才给予奖励。一是经济贡献奖励,引进人才研发成果使企业经营效
益显著提升,地方经济作出重大贡献的,省级给予最高100万元奖励
二是科研贡献奖励,对获得国家级、省()级科技奖、专利奖的,按其个
人所获奖金可给予1:1配套奖励或一定配套奖励。
5.服务政策。按照省级相关政策发放人才服务卡,给予医疗待遇、子
女入学、配偶安置、旅游服务等方面的优惠待遇。不符合发放省级人才服
务卡的,由企业所在地政府按规定为引进人才做好子女入学等方面的服务。
三、高技能人才项目
1.设立工作室。引进的“技能大师”“优秀技能人才”,用人单位可
结合实际设立以人才姓名命名的工作室。对“技能大师”“优秀技能人才”
分别按照我省国家级和省级技能大师工作室补助标准进行补助,优先支持
申报设立国家级、省级大师工作室,获批后不重复享受补助。
2.住房保障。用人单位、企业所在地县级政府或园区管委会向引进人
才提供人才公寓,并收取较低的房屋租金,引进人才可一直入住到离开贵
州或在贵州购房或退休。
3.才激。企业引进技能人才认定后3内,在黔税前年薪30万元
36万元之间的,省级财政每年按税前年薪的4%进行奖励;在黔税前年薪
36万元(36万元)50万元之间的,省级财政每年按5%进行奖励;在黔税
前年薪50万元(50万元)80万元之间的,省级财政每年按6%进行奖励;
在黔税前年80万元(80万元)120万元之间的,省级财政每年按7%
行奖励;在黔税前年薪120万元以上(120万元)的,省级财政每年按8%
行奖励。
4.贡献奖励。引进的“技能大师”“优秀技能人才”作出重要贡献的,
给予最高20万元奖励。
+
黔东南州产业大招商政策
摘编
·41·
5.服务政策。按规定条件向认定人才颁发省级人才服务卡,按政策给
予医疗服务、子女入学、配偶安置、旅游服务、金融服务等方面的优惠待
遇。
政策依据:关于优化整合贵州省百千万人才引进计划的指导意见(黔
党办发〔20231号)
政策
享受人才公寓政策的对象。
()持有我省省级“优才卡”的高层次人才;
()通过“一事一议”方式引的产业重点人(进的产业重点
才团队其他成员住房由用人单位保障,确有困难需申请租住省级人才公寓
的,由用人单位向省委人才工作领导小组办公室申请,可采取多人合租一
套人才公寓的方式解决)
()经省委人才工作领导小组办公室认定的重点领域、重点行业、重
点学科等各类发展急需高层次人才。
以上人才需全职在我省工作,或通过“柔性引进”方式在我省每年累
计工作6个月以上,且在贵阳市区(特指不含三县一市的区)无自有产
住房。
免费租住。
()符合第七条规定条件的人才可申请免费租住人才公寓,首次申请
租住期限原则上不超过5年。5年期满后,需继续租住的,根据人才的业绩
贡献情况,可申请不超过3年的续租期。
()人才公寓提供简装环境和基本生活保障,包含通水、通电、通气、
通网,配置床、沙发、衣柜等家具,以及电视、冰箱、洗衣机等家电,配
置标准由省机关事务管理局另行确定。人才可自行购置自身所需的其他生
活用具,退出时带走。
+
黔东南州产业大招商政策
摘编
·42·
()人才租住公寓后产生的物业、水、电、燃气、有线电视、网络等
相关费用,由租住人才自行承担。
人才公寓出售。
符合第七条规定条件,且未享受过我省高层次人才住房(购房)补贴,
在我省全职工作5年以上且内无自有产权住房,对我省经济社会发展作
出突出贡献的人才,经省委人才工作领导小组认定,可按不高于购置价格
向其出售一套人才公(售时市场价格低于购置价格,按照不高于
出售时市场价格向其出售)
人才公寓奖励。
符合第七条规定条件,且未享受过我省高层次人才住房(购房)补贴,
在我省全职工作8年以上且内无自有产权住房,对我省经济社会发展作
出重大贡献的人才,经省委人才工作领导小组认定,可奖励一套人才公寓。
我省奖励给高层次人才的人才公寓,视同省级人民政府颁发的科学、教育、
技术、文化、卫生、体育、环境保护等方面的奖励,享受免征个人所得税
优惠政策。
政策依据:贵州省委人才工作领导小组关于印发《贵州省省级人才公
寓管理办法(试行)》的通知(黔委人领发〔20213号)
政策
改进设站和培养方式。鼓励和支持中小型高科技企业特别是民营中小
型高科技企业设立工作站。对我省高校、科研院所、企业、事业单位、产
业园区建立流动站、工作站并开展相关工作,省级一次性给予设站单位建
站补助50万元,所需经费从省级应用技术研究与开发资金中列支。
完善博士后科研经费和生活资助经费投入机制。按照《贵州省博士后
管理工作实施办法(试行)》《贵州省博士后工作经费资助管理办法(试行)
有关规定,给予进站博士后研究人员连续两年生活资助经费补助,所需经
+
黔东南州产业大招商政策
摘编
·43·
费从全省高层次创新创业人才培养引进专项经费中列支。
政策依据:省人民政府办公厅关于改革完善博士后制度的实施意见
(黔府办发〔20186号)
政策
高层次留学人才创新创业项目择优资助经费,从贵州省“高层次创新
创业人才培养引进专项经费”中列支,每年不超过200万元。
按照分类资助原则对留学人员创新创业项目进行资助,其中重大项目
资助30万元、优秀项目资助20万元、启动项目资助10万元。对已通过其他
渠道获得省级财政资金支持的项目,原则上不再给予资助。
()重大项目:申报项目为申请人参与的国家科技重大专项、国家重
点研发计划等科技项目、国家自然科学基金委员会重点项目、国家重大技
术改造/创新项目,或者申请人主持的国家科技计划和国家自然科基金
委员会项目;或者投资总额大于500万以上的创业项目。
()秀项目:申报项目为申请人主持的省()级科技计项目(
省科学技术基金一般项目)、省级技术改造项目其他省级技术创新项
目;或者投资总额大于300万以上的创业项目。
()启动项目:申报项目为申请人主持的市()级以上并具有较好应
用开展前景的创新项目;或者投资总额大于100万以上的创业项目。
政策依据:省人力资源社会保障厅关于印发《贵州省高层次留学人才
创新创业项目优资助管理办(试行)的通(黔人社通〔2018271
号)
政策
就业困难人员社会保险补贴。
对招用就业困难人员并缴纳社会保险费的单位,以及通过公益性岗位
安置就业困难人员并缴纳社会保险费的单位,按其为就业困难人员实际缴
+
黔东南州产业大招商政策
摘编
·44·
纳的基本养老保险费、基本医疗保险费、失业保险费和工伤保险费给予补
贴,不包括就业困难人员个人应缴纳的基本养老保险费、基本医疗保险费
和失业保险费,以及单位和个人应缴纳的其他社会保险费。对就业困难人
员灵活就业后缴纳的社会保险费的,按不超过以全省上年度全口径城镇单
位就业人员平均工资100%为缴费基数缴费的2/3给予灵活就业人员社会保
险补贴。就业困难人员社会保补贴期限,除距法定退休年龄不足5
就业困难人员可延长至退休外,其余人员最长不超过3(以初次核定其享
受社会保险补贴时年龄为准)
高校毕业生社会保险补贴。
鼓励企业吸纳高校毕业生就业,小微企业、民营经济组织和社会组织
吸纳离校2年内未就业的高校毕业生就业并与其签订1年以上劳动合同和缴
纳社会保险费的,给予最1年的社会保险补贴。贴范围为基本养老保
险费、基本医疗保险费、失业保险费、生育保险费和工伤保险费单位缴纳
部分(不包括高校毕业生个人应缴纳部分),补贴期限为企业吸纳高校毕业
生就业当月起的12月,由人社部门会同财部门组织实施。对离2
内未就业的高校毕业生灵活就业后缴纳的社会保险费的,按不超过以全省
上年度全口径城镇单位就业人员平均工资100%为缴费基数缴费的2/3给予
灵活就业人员社会保险补贴,补贴期限最长不超过2年。
创业补贴。
重点用于扶持小微企业、民营经济组织和社会组织发展,补贴优秀创
业项目、劳动者自主创业、创业场所租赁费用等支出。
()小微企业、民营经济组织和社会组织每吸1名登记失业高校
毕业生就业并签订1以上劳动合同且缴纳社会保险费的,给予800元的一
次性补贴。
()鼓励举办各类创业创新大赛,对获奖的新技术、新成果、新工艺
+
黔东南州产业大招商政策
摘编
·45·
等优秀创业项目,采取以奖代、贷款贴息等方式,给予最高不超3
元的支持。
()自主创业补贴。对首次创办小微企业或从事个体经营,且所办企
业或个体工商户自工商登记注册之日起正常经营1年以上的离校2年内高校
毕业生、就业困难人员、农民工、复员退伍军人,按规定给予一次性5000
元创业补贴。
()创业场所租赁补贴。对租用符合规划、安全和环保要求的经营场
地创业,并且未享受场地租赁费用减免的高校毕业生、就业困难人员、农
民工、复员退伍军人给予每500元场租补贴,对实际月租金低于500元的,
据实补贴,补贴期限最长不超过3年。
就业见习补贴。
吸纳离校2内未业高校毕生和1624岁失业青年,艰苦远地
区、国家乡村振兴重点帮扶县扩大至离2内未就业的中职毕业生参
加就业见的单位给予就见习补贴。见习时间为312个月,最长不
过一年。见习期间,见习人员生活补助费不低于当地最低工资标准,其中
最低工资标准60%就业补助金中列支。见习期间,办理身意外伤
害与住院医疗业保险,保险费用从就业补助资金中按每300元的
进行补贴。
对见习期留用率达50%的见习单位,适当提高习补贴标准,
按最低工资标准80%进行补贴。对见习单位(基地)留用见习期满人员的,
1000/标准给予单位一次补助。将对见习期未满与见习人员签
劳动合同的,给予见习单位剩余期限见习补贴政策延续至2023年底。对见
习期满留用率50%以上的见习单位适当提高见习补贴标准,按
工资标准的80%进行补贴,对见习单位(基地)留用见习期满人员的按500
/人标准给予单位一次性补助。
+
黔东南州产业大招商政策
摘编
·46·
求职创业补贴。
对省内普通高等院校、中等职业学校、技工院校在毕业年度有就业创
业意愿并积极求职创业的就业困难应届毕业生,一次性给予每人1000元的
求职创业补贴。2023届就业困难高校毕业生求职创业补贴发放标准提高到
1500/人。补贴对象包括贵州城镇零就业家庭、享受最低生活保障
庭、脱贫家庭、享受特困人员救助供养待遇、在校期间申请并获得国家助
学贷款、父母双方(单方)持《残疾人证》且全部或部分丧失劳动能力或本
人持《残疾人证》、孤儿7类困难毕业生,以及省籍在黔就读享受城
乡居民最低生活保障家庭、在期间申请并获得国家助学贷2类困
毕业生。
高技能人才培养补助。
重点用于高技能人才培训基地建设和技能大师工作室建设。对国家级
高技能人才基地和技能大师工作室,从中央就业补助资金中按规定分别补
500万元和10万元,从省级就业补助资金中分别补助200万元和10万元;
对省级高技能才培训基地和技能大师工作室,省级分别补助100万元和
10万元。地方政府要对高技能人才培训基地和技能大师工作室建设给予专
项经费支持,所需资金从地方财政部门安排的就业补助资金中列支。鼓励
行业、企业对高技能人才培训基地和技能大师工作室建设给予经费支持。
技能人才奖励补助。
对通过技能大赛或全国评比获得全国技术能手、中华技能大奖获得者
分别给5元和10元奖励。参加世界技能大赛获得金、银、铜牌和
胜奖的选手,可分别给予每人不超过20万元、10万元、5万元2万元的奖
励。获得国家级一类竞赛各职(工种)一、二、三等奖的选手分别给予每
2万元1万元0.5元奖;获得国家级二类竞赛一等奖的选手给
每人1元奖励。对世界技大赛国家级、省级选拔集训基以外单位培
+
黔东南州产业大招商政策
摘编
·47·
训选手在国家队中依次晋级的,按照最终阶段给予所在单位2万元、3万元、
5元奖励。对每届世界技能大赛省级选拔集训基地项照主基地不
过每个50万元、辅基地不超过每个20万元的标准进行补助。
就业创业平台创建补助。
各地开展创业型城市、创业孵化示范基地、农民工创业示范园()
就业见习基地等创建工作,认定为国家级、省级创业型城市的,分别给予
500万元、200万元一次性补助;认定为国家级、省级创业孵化示范基地的,
分别给100万元、50元一次性补助;认定为省级农民工创业示范园的,
给予一次性补助50万元,认定为省级农民工创业示范点的,给予一次性补
5万元;认定为国家级、省级就业见习基地的,分别给予10万元、5万元
一次性补助;认定为国家级、省级充分就业(星级)社区的,分别给予10
元、5元一次性补助;各可参照省级创业示范基地、省级农民
示范园()、就业见习基地、充分就业(星级)社区等认定管理办法和补助
标准,自行制定当地认定管理办法及补助标准和范围,但补助不高于省的
标准,资金从同级就业补助资金中列支。
政策依据:贵州省财政厅贵州省人力资源和社会保障厅关于印发《贵
州省就业补助资金管理办法》的通知(黔财社〔2019119号)
政策
职业技能培训。支持企业规范开展企业职工岗前培训、转岗培训、在
岗技能提升培训,支持高危行业企业开展安全技能培训。按职业(工种)
不同,每名员工补贴1500元至4500元。
高技能人才培训成果。支持企业通过购买高技能人才培训成果方式大
力培养技师、高级技师,按照“谁支出培训成本,补贴谁”原则补贴企业
或企业职工,每名技师或高级技师补贴4000元至8000元。
企业新型学徒制培训。支持企业大力开展新型学徒制。支持企业和技
+
黔东南州产业大招商政策
摘编
·48·
工学校校企合作开展学徒制培训,按培养标准不同,每培养一名学徒补贴
企业4000元至6000元。
短平快培训。支持龙头企业、合作社、扶贫车间等开展短平快培训。
按照培训人数和培训天数的不同,每培养一名职工或社员补贴企业60元至
180元。
企业职工证书直补。企业职工证书直补,符合申领失业保险参保职工
技能提升补贴条件的企业职工,按照黔人社厅发201711号文件规定到
参保地失业保险经办机构申领技能提升补贴:职工取得初级(五级)职业资
格证书或职业技能等级证书的,补贴标准为1000元;职工取得中级(四级)
职业资格证书或职业技能等级证书的,补贴标准1500元;职工取得高级
(三级)职业资格证书或职业技能等级证书的,补贴标准为2000元。
政策依据:省人力资源社会保障厅省财政厅关于提高职业技能培训资
金效能高质量开展职业技能培训的通知(黔人社通〔202139号)
政策
推进劳务输出。
对新跨省务工且稳定就业3月及以上的贫人(含监帮扶对)
适当安排一次交通补助,最高不超过500元,具体补助标准由各地结
实际制定,补助资金按规定从衔接推进乡村振兴补助资金列支。人力资源
服务机构、劳务公司、劳务合作社、劳务经纪人等组织三类人员就业,协
助签订1年以上劳动合同并依法缴纳社会保险费满3个月及以上的,按照每
500元的标准给予一次性跟踪服务补贴。
促进稳定就业。
按规定落实失业保险稳岗返还、培训补贴等政策,引导支持优先留用
三类人员。对吸纳三类人员就业的农民合作社、种养大户、家庭农场、就
业帮扶车间、微企业等生产经营主体,按规定给予每人500元的吸纳
+
黔东南州产业大招商政策
摘编
·49·
业一次性补贴,落实社会保险补贴、创业担保贷款及贴息等政策。
发展就业帮扶车间等就业载体。
延续支持就业帮扶车间等各类就业载体的费用减免以及地方实施的各
项优惠政策。对吸纳三类人员就业数量多、成效好的就业帮扶基地和就业
帮扶车间,按规定分别给予3万元和1万元一次性奖补,认定为省级就业帮
扶示范基地的,给予10元一性补助,所需资金由所在县(市、区、特
)从就业补助资金列支。
加强返乡创业载体建设。
有条件的地方可根据入驻实体数量、孵化效果和带动就业成效给予农
民工创业园()创业孵化基地奖补。认定为省级、国家级创业孵化示范
基地的,分别50元、100万元一次性补助,认定省级农民工创
示范园、示范点的,分别给予50万元、5元一性补助。支持各地设立
一批特色鲜明、带动就业作用明显的非遗就业工坊。
精准实施技能提升。
实施劳动力职业技能提升工程,重点围绕三类人员和农村转移劳动力
等精准开展职业技能培训,所需资金按规定从职业技能提升行动专账资金、
衔接推进乡村振兴补助资金和就业补助资金中列支。落实每人每天40元的
培训生活费补贴,所需资金按规定从衔接推进乡村振兴补助资金和就业补
助资金中列支。继续实施“雨露计划”,按规定给予相应补助。扩大技工
院校招生和职业培训规模,支持脱贫户、农村低收入家庭“两后生”就读
技工院校,按规定享受国家免学费和奖助学金政策。
本政策执行期限截止20251231日,未明确的原有就业创业扶持政
策继续执行。
政策依据:省人力资源社会保障厅等六部门关于切实加强就业帮扶巩
固拓展脱贫攻坚成果助力乡村振兴的实施意见(黔人社发〔202111号)
+
黔东南州产业大招商政策
摘编
·50·
政策
支持新业态新职业企业培训技能人才。围绕“大数据”战略实施数字
技能培训,加强互联网、共享经济、人工智能等新业态新职业培训,按国
家职业标准和企业职工就业情况不同,每名培训职工补贴企业500元至
3000元。
政策依据:省人力资源社会保障厅省财政厅关于高质量做好2022年职
业技能培训和技工教育工作大力培养技能人才的通知(黔人社通〔2022
33号)
政策十一
针对退役军人实际控制的小微企业或个体工商户,线上模式可获得
0.5万元—300万元纯信用方式经营类贷款;符合建行抵质押、担保要求贷
款金额最高可达到1000万元。针对符合建行系统授信条件的退役军人,线
上模式可获得0.1万元—20万元纯信用方式个人消费类贷款。
政策依据:省退役军人事务厅建行贵州省分行关于印发《贵州省“退
役军人拥军贷”实施方案》的通知(黔退役军人通〔202123号)
政策十二
有创业意并符合政策规的退役军(主择业军干部、
部、自主就业退役士兵等)由退役军人事务部门审核荐。同时满足,
年龄在18周岁()以上,申请贷款时年龄与贷款期限之和最长不超过65
();品行良好,申请贷款时无逾期未还贷款、无不良信用记录,具有创
业经营能力,有一定还款来源等贷款条件。
单户贷款额度3000()起,最高不超过50万元()。超过50万元,
引入抵押、保证等担保方式,以其他信贷产品按需支持。
政策依据:省退役军人事务厅中国农业银行贵州省分行关于印发《贵
州省“退役军人创业e”实施意见》的通知(黔退役军人发〔20212号)
+
黔东南州产业大招商政策
摘编
·51·
(八)用电、物流政策
政策一
一、第三监管周期贵州电网各用户类别各电压等级输配电价( 含增值
税、对居民和农业用户的基期交叉补贴)生活农业生用电
执行现行目录销售电价政策。
贵州省电网销售价格
用电分类
不满 1 千伏
10 千伏
20 千伏
35 千伏
“一户一表”
用电户
第一档用电
0.4556
0.4456
0.4456
0.4456
第二档用电
0.5056
0.4956
0.4956
0.4956
第三档用电
0.7556
0.7456
0.7456
0.7456
合表用户、执行居民电价的
非居民用户
0.482
0.472
0.472
0.472
农业生产用电
0.4754
0.4654
0.4604
0.4554
其中:农业排灌用电
0.3254
0.3204
0.3179
0.3154
注:1.表所列价格,除农业生产用电中的农业排灌用电外,均含国家重大水利工程建设
基金0.1125分钱。
2.上表所列价格,除农业生产用电外,含大中型水库移民后期扶持资金0.42分钱
贵州省电网销售电价表
用电分类
电度电价(元/千瓦时)
容(需)量电价
最大需量(元/千瓦·月)
变压器容量
(元/千伏安·月)
不满
1 千伏
110
20
千伏
35
千伏
110
千伏
220
110
20
千伏
35
千伏
110
千伏
220
千伏
110
20
千伏
35
千伏
110
千伏
220
千伏
工商业
用电
单一制
0.2186
0.2062
0.1805
两部制
0.128
0.1143
0.077
0.0529
35
33
31
30
22
21
20
19
注:1.中各电价含增值税、对居民和农业用户的基期交叉补贴,不含政府性基金及附加、
上网环节线损费用
2.原包含在输配电价内的上网环节线损费用在输配电价外单列,上网环节综合线损率
+
黔东南州产业大招商政策
摘编
·52·
4.73%
3.工商业用户执行上述输配电价表,居民生活、农业生产用电继续执行现行目录销售
电价政策。
4.政府性基金及附加包括:国家市大水利工程建设基金每千瓦时01125分钱,大中利水
库移民后期扶持资金每瓦时0.47分钱,可再生能源电价附加千瓦1.9钱,地方水库
民后期扶持资金每千瓦0.05分钱。
5.网对网送电省外购电用户承担的输电价格为:500 千伏( 含黔电送粤、兴义2
号机送广西)每千0.03(税、含线损,下同)220伏每千瓦0.0718元,110伏每
千瓦时0.0966元,35千伏每千瓦时0.1332元。10千伏每千瓦时0.1469元。
二、执行商业用电价格用户(指除执行居民生活农业生
价格以外的用户,以下简称工商业用户),用电容量在100千伏安及以下的,
执行单一制电价;100千伏安至315千伏安之间的,可选择执行单一制或两
部制电价,单制和两部制变更周期不得少于三个月315千伏安及
的,执行两部制电价,现执行单一制电价的用户可选择执行单一制或两部
制电价。上述可选择执行单一制或两部制电价的工商业用户,在每月20
前自行向电网企业申请办理,并自申请后的下一计费周期执行。
两部制工商业用户可选择执行容量电价或需量电价计费方式,按季度
进行变更,用户须提前15个工作日向电网企业申请变更下一季度的基本电
费计费方式。选择执行需量电价计费方式的两部制用户,每月每千伏安用
电量达到260千瓦时及以上的,当月需量电价按本通知核定标90%执行。
每月每千伏安用电量为用户所属全部计量点当月总用电量除以合同变压器
容量。
三、除居民生活、农业生产用电外,工商业用户用电价格通过市场化
形成,用电价格由上网电价、上网环节线损费用、输配电价、系统运行费
用、政府性基金及附加组成。
上网环节线损费用按实际购电上网电价和综合线损率计算,所有电压
等级用户量均按综合线4.73%行。在电力市场不具备户直接采
+
黔东南州产业大招商政策
摘编
·53·
购线损电量条件时,继续暂由电网企业代理采购线损电量,代理采购损益
按月向全体工商业用户分摊或分享。
系统运行费用包括辅助服务费用、保障居民农业用电价格稳定新增损
益等相关损益、抽水蓄能容量电费等。
对大气污染物排放浓度基本符合燃气机组排放限制要求,并取得我委
超低排放电价政策文件的燃煤发电机组,其上网电量继续由电网企业按规
定标准单独结算超低排放电费给煤电企业,按月由全体工商业用户分摊。
四、因居民、农业用电量增长及优先发电计划放开等因素,电网企业
每月保障居民、农业用电发生的实际损益,与当月基准电价交叉补贴总额
的差额,作为电价交叉补贴新增损益,按月由全体工商业用户分摊或分享。
五、电网企业要严格执行本通知核定的输配电价,统筹推进电网均衡
发展。全面做好营销、计量等信息系统的适应性改造,加强政策宣传和客
户沟通服务,引导用户合理配置容量,提升用电负荷率;对各电压等级的
资产、费用、收入、输配售电量、负荷、用户报装容量、线损率、投资计
划完成进度等与输配电价相关基础数据进行统计归集,每5底前
我委及国家发展改革委。
六、贵州电力交易中心要严格按本通知要求,研究完善市场交易规则,
做好电力交易系统的适应性改造,加强对市场主体的政策宣传和服务。
七、各级价格主管部门要按照本通知要求,与有关部门加强配合,精
心组织,周密安排,加强监管,确保输配电价平稳执行,确保本通知要求
的各项政策措施得到全面落实执行中发现的问题,请及时报告我(
格管理处)
电网企业代理购电机制、电力市场交易规则等要与本通知做好有效衔
接。本通知自202361日起执行,原有政策规定与本通知不符的,以本
通知规定为准。
+
黔东南州产业大招商政策
摘编
·54·
政策依据:省发展改革委关于第三监管周期贵州电网输配电价和销售
电价有关事项的通知(黔发改价格〔2023359号)
政策二
一、降低非居民用气价格
由省级定价的贵阳市城区及与其共用同一配气管网区域非居民用气价
(最高指导价,下同)3.96/立方米下调为3.72/立方米。
属于市县级定价的,各地应在确保将低价气源优先保障居民生活用气
基础上,抓紧测算非居民用气气源采购成本(测算时应考虑4月份应降未降
金额)并根据当地天然气下游价格联动机制,尽快组织施非居民用
气降价工作。
二、执行时间
本个联动周期执行时间为202351日至1031日。
三、有关工作要求
()精心做好组织实施。各地要认真组织、周密安排,确保非居民用
气降价政策精准落地,降价红充分释放。降价文件于531日前抄送我
委,并附气源采购成本测算报告。
()压实履约保供责任。各供气企业和燃气企业要切实加强供需衔接,
全面履行天然气购销合同,按双方签订的月度合同气量足额履约,持续做
好天然气供应保障工作。
()严格落实价格政策。各燃气企业要通过营业大厅、门户网站、微
信公众号等及时公示调整后的非居民用气价格,让广大用户知晓降价信息;
要切实强化气源采购成本约束,严禁通过不当关联交易推高采购成本;要
认真做好气源来源和采购成本的台账记录、收集和汇总,并按照价格主管
部门要求按时、准确报送,确保内容完整、数据真实。各供气企业需自觉
配合做好有关信息、数据的复核工作。我委将适时了解各地气源采购成本
监测情况。
+
黔东南州产业大招商政策
摘编
·55·
政策依据:省发展改革委关于降低非居民用气价格及有关事项的通知
(黔发改价格〔2023364号)
政策
对新晋国家1A级至3A级物流企业分别给予一次性奖励10万元、新晋国
4A级物流企业给予一次性奖50万元、新晋国家5A级物流企业给予一次
性奖励100万元。
政策依据省发展改革委8关于印发《贵州省进一步降物流
成本若干政策措施》的通知(黔发改经贸〔2021249号)
政策
对新晋国家1A级至3A级物流企业分别给予一次性奖励10万元、新晋国
4A级物流企业给予一次性奖50万元、新晋国家5A级物流企业给予一次
性奖励100万元。奖补资金通过省级现代服务业专项资金安排。
已获得较低等级奖励的,在获得较高等级奖励时,给予补足相应的奖
励差额。
革委《贵A级物
流企业奖补方案(试行)》的通知(黔发改经贸〔2022428号)
(一)大数据信息产业
政策一
1.支持龙头企业打造智能工厂、灯塔工厂。支持工业企业按照智能制
造国家标准打造数字产线、无人车间、智能工厂、灯塔工厂,对符合条件
30%、最高不超过1000
三、产业类政策
+
黔东南州产业大招商政策
摘编
·56·
《智能制造能力成熟度模型》(GB/T39116-2020)3级、4级、5级的工业企
业,分别200元、500万元800万元的奖励;对获评世经济
“灯塔工厂”的工业企业,给予1000万元的奖励。
2.支持中小企业普及应用数字技术。重点支持“专精特新”中小企业
开展生产管理、营销服务等环节数字化改造,对符合条件的项目,给予不
超过总投资30%、最高不超过500万元的补助。
3.支持工业企业上云用云。通过“云使用券”补助方式支持工业企业
上云用云,对购买计算资源、储存资源、安全防护等基础设施类“云服务
的,补助比例超过购买费用40%对购买数据库、物联网软件开发
等平台系统类,以及研发设计、生产管理、财务管理等业务应用类“云服
务”,补助比例不超过购买费用60%单个工业企业当年计补
额不超过5万元。
4.支持智慧开发区建设。支持开发区建设5G基础设施,打造工业互联
网公共服平台,推动工企业打造“5G+工业互联”典型应用场
对符合条件的慧开发区建设项目,给予不超过总投10%、最高不
1000的补。对获批国家工业联网示范区、“5G+工业互网”
合应用先导区开发区,给予500万元的奖励。支持智慧开发建设项目
申报新型工业化基金,积极争取地方政府专项债券。
5.支持标准起草编制和推广应用。对牵头起草编制数字化转型领域国
际、国家、团体标准的企业,别给100万元、50元、30万元的奖励
对参与起草编制数字化转型领域国际、国家、团体标准的企业,分别给予
50万元、30万元、10万元的奖励。对首次通过《信息化和工业化融合管理
体系要求》(GB/T23001-2017)升级版贯标评定的工业企业,给予20万元的
奖励。对首次通过《信息安全管理体系标准》(ISO27001)认证的企业,给
10
+
黔东南州产业大招商政策
摘编
·57·
(GB/T36073-2018)证并达到2级、3级、4级及的企业,分别20
万元、30万元、50万元的奖励。
6.支持数字化创新平台建设。支持矿产、轻工、新材料、航天航空等
产业领域建设国家级、行业级工业互联网平台,支持建设数字化转型促进
中心、工业互联网应用推广中心等创新平台,对符合条件的项目,给予不
超过总投资30%、最高不超过500万元的补助;对获批国家级创新平台项目
资金支持的单,给500万元的奖励。支持企业开展数字经济融合
应用,对符合条件的项目,给予不超过总投资30%、最高不超过500万元的
补助。
7.支持数字基础设施建设。支持5G网络规模化部署,对完成年度5G
站建设任务的运营商,按照实际建设并验收合格的基站数量,以每个基站
0.2万元的标准给予一次性事后补助;鼓励各州对本地区内的新5G
站配套给予补助。支持建设数字丝绸之路国际数据港,对使用国际数据专
用通道的企业,每年给予使用成本100%的补助,单个企业累计补助金额不
超过20万元。支持5G等数字技术创新应用,对符合条件的项目,给予最高
不超过50万元的补助。对5G站、数据中心等新型基础设施建设项目,在
用能方面按照有关规定予以支持。
8.支持打造国家级试点示范。对获批数字化转型领域国家专项资金支
持的项目,给予牵头企业不超过国家奖补资金30%、最高不超过500万元的
奖励。对获批数字化转型领域国家级试点示范的企业,给予20万元的奖励。
9.通过基金支持重大项目建设。省新型工业化基金、新动能产业发展
基金与财政专项资金联动,对亿元以上数字化改造、技术改造同步推进的
项目进行重点支持。
政策依据:省工业和信息化厅省财政厅省发展改革委省能源局省大数
据局关于印发支持工业领域数字化转型的若干政策措施的通知(黔工信信
+
黔东南州产业大招商政策
摘编
·58·
发〔202225号)
政策二
子基金主要投资贵州省内高成长性、具有良好发展潜力的大数据企业,
重点支持数字产业化、产业数字化、数字经济与实体经济产业融合、云计
算、人工智能、区块链等领域。
主要方向为:
(1)引领性、应用性、支撑性大数据项目。
(2)具有良好发展前景的种子期、初创期、成长期大数据企业。
(3)贵州省数字经济发展要求的重点大数据企业。
(4)省大数据局确定的其他投资。
原则上省级财政出资部分投资省内企业,基金在贵州省境内的投资额
不得低于实际资额51%,对大数据相关行业的投资比例不低于基
模的60%。被投资的大数据企业应符合以下条件:
(1)符合国家相关法律规及产策规定,符合本办法规定的
投资方向。
(2)企业股权清晰,财务管理规范。
(3)企业银行资信和财状况良无行政主管机关或司法机关
处罚的不良记录。
(4)省大数据局确定的其他条件。
政策依据:省大数据局关于印发《贵州省大数据产业基金管理办法》
(2021修订)《贵州省大数据产基金效考评管理办法》(2021修订
)的通知(黔数〔20217号)
政策
符合条件的上云企业可随时在线申领云使用券。上云企业领用云使用
券不能超过两次,初领云使用券的最高补贴额度为5元,再次申
+
黔东南州产业大招商政策
摘编
·59·
时,最高补贴额度为3万元上云企业提交云使用券申领申请,经系统运
营方审通过,获得当年云使用券使用额度。
上云企业可在线选择云服务商提供的产品进行购买,确定是否使用云
使用券,其中础设施层云服务的最高支持比例40%,平台系统层
务、业务应用云服务的最高支持比例60%优先“万企融大行
动带动的实体经济企业倾斜。购买时需阅读并确认《贵州省上云企业上云
服务交易协议》。
政策依据:省大数据局关于印发《贵州省“企业上云”云使用券管理
实施细则(2020年修订版)》的通知(黔数〔202020号)
政策
1.经评估确定的贵州省软件名园,授予“贵州省软件名园”称号,符
合培育条件的列为贵州省软件名园培育园区。
2.省大数据局视年度资金预算情况给予省软件名园运营主体一定资金
奖励。优先支持软件名园和培育园区运营主体发行地方政府债,省级大数
体、业项
()对落户在当地的省软件名园和培育园区给予政策、资金支持。
3.用好“百企引领”“万企融合”等抓手,在省级和国家级试点示范
申报中,向省软件名园和培育园区内企业项目给予倾斜。
4.支持省软件名园和培育园区企业入选贵州上市挂牌后备企业资源库,
优先助推相关企业上市。
5.支持省软件名园和培育园区纳入全国一体化大数据中心体系,推动
公共数据向园区软件企业互联互通、共享开放。加快5G网络在园区内覆盖。
支持园区公共服务平台建设。
6.省大数据局“点对点”帮助省软件名园和培育园区开展招商引资、
政策培训、供需对接、人才培养等,支持园区企业技术转移、成果转化、
+
黔东南州产业大招商政策
摘编
·60·
场景应用及宣传推广。
政策依据:省大数据发展管理局关于印发《贵州省软件名园评估规范
(试行)》的通知(黔数〔202120号)
(二)大健康医药产业
政策一
对认定为新技术企业的育企业,减按15%税率征收企业得税。
对符合西部大发税收优惠条件的体育企业减按15%的优惠税率征收企
所得税。
政策依据:省政府办公厅关于加快发展健身休闲产业的实施意见(黔
府办发〔20177号)
政策二
1.省内企业成功并购省外企业并将工厂搬迁到我省的,省级一次性奖
200万元,项目所在地市、县政府奖励300万元;省内优强企业并购省内
企业的,省级一次性奖励100万元,项目所在地市、县政府奖励200万元;
通过国家中药再评价的大品种省级一次性奖100万元,企业所在地市、
县政府奖200万元;进入中国药典(2015年版或增补本)的种,
一次性奖励50元。取得国家新药证书的品种,省级一次奖励100万元,
企业所在地市县政府奖200万元;对首仿专利到期的原研转移
省生产且获得新版GMP认证的,每个品种省级一次性奖励50-80万元;并购、
激活省内“休眠”、“半休眠”品种且销售收入达到2000万元的,省级一
次性奖励50万元。
2.企业外包研发成果在我省投产后年销售收入达3000万元的,企业
所在地县级政府给予一次性50万元奖励;对投资超过5000万元的专业化公
共研发技术服务平台,项目所在地市级政府认定后给予投资额5%的一次性
奖励,最高不超过1000万元。
+
黔东南州产业大招商政策
摘编
·61·
3.资额3000万美元或5亿以上项目由省级优先保障建设用
计划指标,实行“点供”。在我省新投资注册的医药企业,投资额在1000
万元(含1000万元)以上的,从企业投产之日3年内,企业交纳的增
值税地方分成部分,由企业所在地市、县政府全额补助给企业,用于支持
企业发展。
4.项目投产3年以上、5年以内的,以减半方式给予扶持。经认定为高
新技术企业的减按15%率征企业所得税。对企业引进先技术和设
备的,按有关规定享受税收优政策;年销售收入5亿元上且增幅超
30%的成长型企业,由所在地县级政府对企业领导班子给予50万元奖励。
5.国内外行业领军人才在我省新办医药企业投产后年销售收入达到
2000万元的,企业所在地县级政府给予个人一次性20万元奖励。
政策依据:贵州省关于加快推进新医药产业发展的指导意见(黔府发
201424号)
政策
养老机构按照国家和省有关规定享受税收优惠和行政事业性收费减免
政策。养老机构用电、用水执行居民生活用电、用水价格,用气价格按照
居民生活用气、非居民用气价的较低者执行。安装固定电话、有线(
)电视、宽带互联网,按照国家和省有关规定减免收费。
政策依据:贵州省养老服务条例 贵州省人民代表大会常务委员会大
(202115)
政策
一、压缩审评审批工作时限。
注册人申请第二类医疗器械首次注册、变更注册、延续注册,提交的
申请资料完整,无需补证的,办理时限压缩至42个工作日。
+
黔东南州产业大招商政策
摘编
·62·
二、优化审评工作程序。
全面加快注册申报进程、提高注册审评效率。将设计成熟、产品技术
要求明晰的产品采取内部审评模式;对省内未申请过、无审评指导原则、
产品结构原理及适用范围复杂、需进行临床试验及其他具有一定安全风险
的产品(如有源类医疗器械、体外诊断试剂等产品),需聘请外部专家参与
审评的,建立与外聘专家先期沟通协调机制,技术审评压缩至30个工作日
内完成。
三、优化现场检查工作程序。
()首次注册时通过质量管理体系核查并取得注册证的,两年内在原
生产地址再次申请相同生产范(《医疗器械分类目录)级产品类)
产品注册,或者申请首次注册产品与企业已取得注册证的产品具有相同生
产条件、生产工艺的,可免于现场核查或简化现场核查项目,重点关注产
品追溯信息及生产检验能力。
()除“属于新开办企业首次注册的产品、新增生产范围的产品、提
供注册自检报告的产品、委托生产的产品”之外,医疗器械注册质量管理
体系核查通过资料审查方式开展,必要时开展现场体系考核。
()注册人同时申报多个产品首次注册时,需开展医疗器械注册质量
管理体系现场核查并在同一生产地址的,并联为一次现场核查。
四、开展套餐服务。
注册人申请第二类医疗器械产品首次注册时,在原生产地址申请医疗
器械生产许可或者增加生产范围事项的,及注册人申请第二类医疗器械产
品延续注册时,申请此产品变更注册的,试行同步申请,并联审批。
五、建立研审联动沟通服务机制。
注册人在产品研发过程中,建立与注册人沟通协调和联络员工作机制,
通过提前介入、专人负责、现场指导、全程跟踪等方式给予注册人技术帮
+
黔东南州产业大招商政策
摘编
·63·
扶,在产品研发、注册申报、现场检查等方面点对点帮助企业,减少补正
工作,提高注册审评效率。
六、支持外省市优质医疗器械产品落地贵州。
已在外省市取得产品注册证医疗器械生产企业,携已注册产品迁入本
省生产的,在我省申请此类产品首次注册时,除产品检验报告、生物相容
性等研究性试验资料外,可使用原产品注册时的有关申报材料。
七、支持第三方检验检测机构发展。
支持第三方检验检测机构能力建设和发展,强化与第三方检验检测机
构的合作,与省医疗器械检测中心检验能力形成互补,扩大我省医疗器械
检验检测范围覆盖面,提高检验效率。
政策依据:省药品监管局关于印发《关于优化贵州省第二类医疗器械
审评审批的若干措施》的通知(黔药监发〔202212号)
政策
养老托育服务机构可按规定享受《关于养老、托育、家政等社区家庭
服务业税费优惠政策的公告》(财政部税务总局发改革委民政部商务部
卫生健康委公告2019年第76)规定的税费优惠政策。
养老托育行业纳税人可按规定享受按月全额退还增量留抵税额、一次
性全额退还存量留抵税额的留抵退税政策。
政策依据:国家发展改革委等部门印发《养老托育服务业纾困扶持若
干政策措施》的通知(发改财金〔20221356号)
(三)新型建材产业
政策一
对投资额5亿元以上的项目,由省级直接安排下达年度划指,各
委会保障
“点供”。支持企业以矿山资源、荒料、产品、订单等进行动产或不动产
+
黔东南州产业大招商政策
摘编
·64·
抵押、股权质押、仓单质押、商标质押,申请银行贷款。
政策依据:省政府办公厅关于加快推进新型建筑建材业发展的意见
(黔府办发〔201635号)
政策二
1.建立矿业权登记制度。将矿业权审批登记制改革为矿业权出让合同
约定登记制,矿业权人与权限内自然资源主管部门签订矿业权出让合同,
按规定缴纳(处置)矿业权出让收益(价款)后,即可登记颁发勘查许可
证或采矿许可证。
2.取消划定矿区范围审批事项。矿业权招拍挂出让、协议出让、探矿
权转采矿权、扩大矿区范围等,不再受理、审批划定矿区范围事项。矿区
范围在签订的矿业权出让合同中约定。
3.取消单独申请采矿权变更生产规模登记事项。矿山企业按矿山资源
储量规模与规划生产规模相匹配、不低于矿种最低准入开采规模的原则确
定生产规模,最终以相关行业主管部门批复的设计(核准)规模为准。
4.绿
DB52T1433-2019固体矿产绿色勘查技术规范》要求编制的矿产资源绿色
勘查实施方案,纳入矿业权人勘查开采信息公示实地核查内容。
政策依据:黔东南州自然资源局关于印发贯彻落实《贵州省自然资源
厅关于深入推进矿产资源管理改革若干事项的意见(试行)》的实施意见
的通知(黔东南自然资通〔202029号)
政策三
重点支持石材产业重大项目、生产基地、交易市场、会展平台和检验
检测中心建设。
安顺市、铜仁市、黔西南自治州等重点石材产区每年要分别配套不低
2000万元的财政资金,支持石材产业发展;贵州正大力发展石材产业,
+
黔东南州产业大招商政策
摘编
·65·
在支持项目建设方面,优先保重点项目建设用地需求,对投资额3亿元
以上项目实行“点供”;支持企业以拥有的矿山资源、荒料、产品等进行
动产抵押、股权质押、仓单质押、订单质押、商标权质押,申请银行贷款。
依托商会信用,建立担保机制。
政策依据:省政府办公厅关于加快石材产业发展的意见(黔府办发
201523
(四)生态特色食品加工产业
政策一
1.投资额3千万美元或5亿元人民币以上的项目,在建设用地计划指标
上予以优先保障。开发国有荒山、荒地、荒滩从事天然饮用水生产的,土
地使用权按规定程序确定给开发单位或个人长期使用,使用期限不超过50
年。以招拍挂方式取得的矿业权,首次缴纳矿业权出让收益不低于一定比
例,其余部分在采矿权有效期内分年度缴纳。
2.对涉及天然饮用水企业的行政事业性收费,收费标准有上下限幅度
的,一律按下限标准执行。对销售收入达到5亿元、10亿元以上的企业
由省工业和信息化发展专项资金对企业分别给予一次性30万元、50万元奖
励。国内外行业领军人才在我省新办饮用水企业,投产后增加值达到2000
万元以上的,由省工业和信息化发展专项资金对个人给予一次性20万元奖
励。
政策依据:省政府办公厅关于印发《贵州省促进天然饮用水产业加快
发展的意见》的通知(黔府办函〔201772号)
政策二
1.支持对象为从江县百香果产业、麻江县蓝莓产业上从事水果相关生
产、加工、销售等经营主体,州省水果行业协会会员单位。包括企业、合
作社、家庭农场、种植大户等。
+
黔东南州产业大招商政策
摘编
·66·
2.贷款额度原则上在10-300万元()之间,龙头企业贷款额度最高不
超过1000万元。
3.单笔贷款利率原则在5%以内;贷款金额在10-300万元()以下的
项目,担费率不超0.8%贷款金额300元以上的项目担保
不超过1%
政策依据:省水果产业发展领导小组办公室关于进一步优化水果产业
金融支农服务方案的通知
(五)农业特色产业
政策一
税务部门对金融机构提供给“三变”农户单笔且该农户贷款余额总额
10万元(含本数)以下的贷款利息收入,免征增值税。同时,上述利息
收入在计算应税所得额时,90%入收入总额;对符合条的担保机
构为“三变”改革经营主体提供信用担保或再担保业务取得的收入(不含
信用评级、咨询、培训等收入3年内免征增值税。采取贷款贴息、不良
贷款补偿、担保损失补偿、保险损失补偿等方式,对“三变”改革经营主
体给予贷款风险补偿。
政策依据:省政府办公厅关于印发《金融支持我省“三变”改革十条
政策措施》的通知(黔府办函〔2016176号)
政策二
1.台湾同胞和台资企业通过流转取得的农村土地经营权受国家法律保
护,在土地经营权流转合同到期后同等条件下可优先继续租赁。
2.台湾同胞和台资企业通过流转取得的林地经营权受法律保护,可依
法进行登记、办理权属证书和流转,并按照国家和地方政策进行经营管理。
3.台湾同胞和台资企业从事农业种植养殖配建的与生产农产品直接关
联的烘干晾晒、分拣包装、保鲜存储、粪污处置、检验检疫,以及为生产
+
黔东南州产业大招商政策
摘编
·67·
服务的看护房、农资农机具存放场所等设施用地纳入设施农业用地管理,
可依法依规使用一般耕地。
4.台湾同胞和台资企业从事农业生产经营可申请农业保险保费补贴,
同等享受农业信贷担保和创业担保贷款贴息支持。鼓励有条件的地区提供
贷款贴息补助,重点支持农业生产基地建设、农产品加工设施、农业投入
品采购及农产品收购等生产经营贷款。
5.台资农业企业可发行公司信用类债券,进行直接融资。鼓励商业银
行创新信用评价模式,提高台湾同胞和台资农业企业信用贷款比重,根据
台湾同胞和台资农业企业融资需求特点设计个性化融资产品。
6.符合条件的台湾同胞和台资企业可依法依规申请相关涉农补助资金
支持。
7.台湾同胞和台资企业在实施农机深松整地和免()耕播种的项目地
区开展作业,可按规定同等申请作业补助;依照有关规定报废危及人身财
产安全的农业机械,可同等申请补贴。
8.台湾同胞和台资企业可参与城乡冷链物流基础设施建设和批发市场
等项目建设运营,参与产地分拣包装、冷藏保鲜、仓储运输、初加工等设
施建设,对其在农村建设的保鲜仓储设施用电实行农业生产用电价格。
9.支持台湾同胞和台资企业参与重型农机、渔业装备、智慧农业、绿
色投入品等领域的研发创新、成果转化与技术服务。
10.鼓励台资企业申请物新品。台湾同胞和台资企业依法
畜牧水产养殖业、苗种场等,同等享受农业支持政策和优惠措施;在自由
贸易试验区范围内可投资水产品捕捞行业。
11.台湾同胞和台资企可依法从事林草重点生态工程建设
木良种培育、造林种草、防沙治沙、经济林生产经营、林草种苗生产经营,
可同等参与林草业重点龙头企业推荐、国家林业产业示范园区申报。
+
黔东南州产业大招商政策
摘编
·68·
12.台资企业可按规定农垦企展合作,促进资源资产整合
业优化升级。
13.台湾同胞在大陆从农渔业,可申请接受创业培训,扎
村、服务农业、带动农民的纳入农村创新创业带头人培育行动范围。
14.从事水利领域设备产的台业可将符合条件的产品和技
报纳入水利先进实用技术重点推广指导目录。
15.台湾同胞和台资企可同等茶叶、水果、花卉等农林产
国家标准起草工作,共同促进两岸标准互联互通。
政策依据:国务院台办、农业农村部、国家林草局等部门《关于支持
台湾同胞台资企业在大陆农业林业领域发展的若干措施》
(六)特色林业
政策一
()完善资源管理政策。
允许利用二级国家公益林和地方公益林适当发展林下经济。鼓励利用
退耕还林政策实施林相改造等方式,建设林下经济基地。适度利用自然保
护地核心区以外的天然林发展生态旅游。科学调整抚育间伐强度,优先安
排采伐指标,依法简化采伐审批手续。
()放活林地等土地流转政策。
推进集体林地所有权、承包权、经营权“三权”分置。进一步放活集
体林地经营权,鼓励社会资本流转林地经营权发展林下经济。鼓励通过土
地流转以及招标、拍卖、公开协商等方式,合法流转集体所有荒山、荒丘、
荒地等未利用地经营权。允许通过租赁等方式有偿使用国有森林资源资产,
用于建设林下经济产业基地。符合政策的可向不动产登记机构依法登记造
册,颁发不动产权证书,切实保障土地流转各方合法权益。
+
黔东南州产业大招商政策
摘编
·69·
()落实配套用地政策。
允许放置移动类设施或利用林间空地建设必要的生产管护设施、生产
资料库房和采集产品临时储藏室等临时设施,相关用地可按设施农用地管
理,并办理相关手续。在不破坏土地、生态和不影响地质安全的前提下,
利用林中空地,为开展林下经济生产经营活动(森林生态旅游和康养)修筑
的非永久性构筑物、建筑物、木屋、移动房屋设施、森林(康养)步道,可
不征收(收回)、不转用,按现用途管理;修筑符合相关规划的永久性构筑
物、建筑物,优先安排建设用地计划指标,依法办理建设用地手续。
()加大财税金融支持力度。
各级财政每年安排专项资金,采取先建后补、贴息补助、资本金补助、
融资风险保证金等形式支持林下经济发展。财政专项资金、政府投资基金
等要优先支持林下经济全产业链发展和配套基础设施建设。符合条件的林
下经济加工企业、创业人员,按规定给予税费减免、创业补贴、创业担保
贷款及贴息等扶持。加大对低产低效改造、良种良艺良机补贴的支持力度,
将种植、养殖、采集和初加工常用机械列入农机购置补贴范围。支持国家
储备林项目建设单位利用国家备林40%以内贷款资金实施林下济项目。
将林下经济产业贷款担保纳入全国农业信贷担保体系中省级农担公司服务
范围,引导市场主体对林权抵押贷款进行担保,建立健全抵押林权收储制
度体系。创新林合作模式,推进“林业保+”度,完善策性保险
保费补贴政策,将森林保险范围扩大至林下经济产业。
政策依据:中共贵州省委贵州省人民政府关于加快推进林下经济高质
量发展的意见(黔党发〔202120号)
政策
1.保障生产用地。
利用2100万亩低效茶园、低效人工商品林地、疏林地、灌木林地等各
+
黔东南州产业大招商政策
摘编
·70·
类适宜的非耕地国土资源,保障扩大油茶种植、改造提升低产林任务落地。
2.创新金融服务。
在已将油茶纳入《国家储备林树种目录》范围的基础上,支持各类金
融机构结合油茶发展特点和需求,按照市场化原则提供各类金融服务,加
大金融支持力度。地方可按规定采用以奖代补、贷款贴息等方式支持油茶
林种植和改造项目。引导金融机构按市场化原则,加大对油茶营造、加工
经营和基础设施配套建设等全产业链的信贷投放,为油茶产品提供各类贷
款。用好再贷款政策,引导地方法人金融机构支持发展油茶等特色产业。
鼓励各地通过发行地方政府债券等方式支持符合条件的油茶项目。鼓励和
引导金融机构加大对适度规模经营主体发展油茶产业的信贷担保支持力度。
鼓励油茶产区将油茶纳入地方特色农产品保险以奖代补政策范围,有条件
的地方可探索完全成本保险,提升保险风险保障水平。
政策依据:关于印发《加快油茶产业发展三年行动方案(20232025
)》的通知(林改发〔2022130号)
政策
1.改善生产经营基础设施。在林地上修筑直接为竹林及竹产品生产经
营服务的工程设施,符合《森林法》有关规定的,不需要办理建设用地审
批手续。
2.完善投入机制。鼓励符合条件的社会资本规范有序设立竹产业发展
基金。将符合条件的竹产业关键技术研发纳入国家科技计划。落实好企业
研发费用加计扣除、高新技术企业所得税优惠、小微企业普惠性税收减免
等政策。地方可将符合条件的竹林培育,按规定纳入造林补助、森林抚育
补助等范围。
3.加大金融支持。完善金融服务机制,引导金融机构开发符合竹产业
特色的金融产品。将符合条件的竹产业贷款纳入政府性融资担保服务范围。
+
黔东南州产业大招商政策
摘编
·71·
鼓励地方建立竹产业投融资项目储备库,助推竹产品企业与金融机构对接。
拓展直接融资渠道,支持符合条件的竹产品企业在境内外上市和发行债券。
鼓励各类创业投资、私募基金投资竹产业。
政策依据:关于加快推进竹产业创新发展的意见(林改发〔2021
104号)
政策
对发展山桐子等木本粮油品优先办理林木采伐审批手续;对“国储林
+山桐子”的国项目,优先给予项目审查批复。支持金融机构开发木本粮
油金融产品,撬动金融和社会资本,支持全产业链发展。山桐子产业发展
纳入政策性地方特色农业保险,支持保发山桐子产业从育苗、种植、加工
到市场的全产业链山桐子油纳入粮油储备,全力保障山桐子产业发展。
政策依据:贵州省特色林业产业发展领导小组关于印发《贵州省山桐
子产业发展行动方案》的通知(黔特林产领发〔20222号)
政策
()促进投资主体多元化,鼓励社会资本以合资、合作、租赁、承包
等形式依法合规进入森林康养产业,引导其与林场、合作社、农户等经营
主体建立利益联结机制,实现资源优化配置和集约化、规范化经营。支持
社会力量结合森林康养资源建设特色养老机构。
()市场主体利用旧的闲置管护房和办公房等进行改造利用,经有关
部门批准临时改变建筑使用功能从事非营利性森林康养产业服务且连续经
营一年以上的,五年内土地使用性质可暂不作变更。
政策依据:省林业局省民政厅省卫生健康委员会省中医药管理局关于
印发《关推进森林康养业发展的意见》的通知(黔林发2019208
号)
(七)文化和旅游产业
+
黔东南州产业大招商政策
摘编
·72·
政策一
1.开展游包机、专列年接待入境旅游者1万人次以上的
企业给予流动资金贷款贴息支持。对新增世界遗产地、5A级旅游景区、国
家生态旅游示范区、国家旅游度假区和全国“百强旅行社”,从省旅游发
展专项资金中给予一次性建设奖励。加大对新开航线航班的资金支持力度。
2.将重点旅游项目建设用地计划纳入全省年度用地计划中统筹安排。
在安排国家下的年度新增建设用地指标时,优先保100个旅游景
省委、省政府确定的其他重大旅游项目建设用地。为旅游配套的公益性基
础设施建设按划拨方式供地。
3.利用林地、水面、湿地、山头兴办的旅游项目,可以通过承包、租
赁等形式取得使用权或经营权。对旅游企业自用土地、房产,缴纳房产税、
城镇土地使用税确有困难的,按规定申请减免。对旅游景区内的宗教寺庙、
公园、名胜古迹自用的房产和土地,免征房产税和城镇土地使用税。对经
批准开山整治和改造废弃土地用于开发旅游项目的,从土地使用的月份起
免缴城镇土地使用税5年。经营采摘、观光农业的单位和个人,其直接
用于采摘、观光的种植、养殖、饲养的土地,免征城镇土地使用税。
4.演艺项目可参照文化产业税优惠政策享受优惠100个旅
景区新建旅游项目减免有关行政事业性收费,除税法明确规定实行审批的
减免税外,对其他减免税实行备案管理。旅游企业宣传促销费、旅游商品
生产企业研发费和技术改造费纳入企业成本(费用),按照有关规定在税前
扣除。乡村旅游经营户税费征收有上下限的,按下限收取。
5.支持旅游企业采取项目特许权、运营权、景区门票质押担保等方式
扩大融资规模。
6.建立旅游企业融资协调机制,支持符合条件的旅游企业通过多层次
资本市场,以债权、股权等多种形式融资。
+
黔东南州产业大招商政策
摘编
·73·
政策依据:《省政府关于深化改革开放加快旅游业转型发展的若干意
见》(黔府发〔20143号)
政策
强化政策保障。
对文旅企业的宣传促销、商品研发和技术改造等费用,按照有关规定
在税前扣除。文旅企业缴纳房产税、城镇土地使用税确有困难的,可以按
规定对符合条件的纳税人给予减免。对在城镇土地使用税征收范围内,直
接用于采摘和农业观光的种植、养殖、饲养的土地,免征城镇土地使用税。
对利用经批准的开山整治土地及改造废弃土地发展的休闲农业、共享农庄
和乡村旅游项目,报经县级税机关审查后,可从使用的月份起免5
城镇土地使用税。
强化用地保障。
文化和旅游发展规划符合国土空间规划。对列入省级以上重大工程和
重点项目的文化旅游和乡村振兴项目,属于单独选址的在用地批准时直接
安排计划指标。属于自然景观用地及农牧渔业种植、养殖用地的文旅项目,
在不破坏生态、景观环境和不影响地质安全的前提下,不征收、不转用,
按现用途管理。鼓励以长期租赁、先租后让、租让结合方式供应文旅项目
建设用地。在符合规划、不改变土地用途的前提下,利用闲置土地兴办住
宿、餐饮等文旅接待服务设施的,经市()、县级人民政府批准,可执行
5年内继续按原用途和土地权利类型使用土地的过渡期政策。支持利用
集团经营性建设用地入市的方式保障文旅项目建设用地。农村集体经济组
织可依法使用建设用地自办或以土地使用权入股、联营等方式开办文旅企
业。城乡居民可以利用
自有住宅依法从事民宿等文化旅游经营。市()做好地热(温泉)矿业
权设置、出让、审批、登记等工作。建设项目涉及使用林地的,在符合用
+
黔东南州产业大招商政策
摘编
·74·
地条件下,依法优先办理使用林地审批审核手续。
政策依据:中共贵州省委贵州省人民政府关于推动旅游业高质量发展
加快旅游产业化建设多彩贵州旅游强省的意见(黔党发〔202027号)
政策
对省级以上重点重大旅游产业项目用地,土地利用年度计划指标由省
级统筹落实。未纳入省级以上重点重大项目清单的旅游产业项目和乡村旅
游项目,由各地统筹安排使用好年度新增建设用地计划指标、增减挂钩指
标,优先保障用地需求。
鼓励以长期租赁、先租后让、租让结合方式供应文旅项目建设用地。
在符合国土空间规划的前提下,支持利用集体经营性建设用地入市保障文
旅项目建设用地。
政策依据:中共中央省委贵州省人民政府关于加快推进旅游产业化奋
力实现旅游大提质的实施意见(黔党发〔202122号)
政策
加大用地支持。
盘活存量和低效建设用地,利用城乡建设用地增减挂钩政策,促进特
色小镇和小城镇加快建设发展。按“人地挂钩”政策,保障特色小镇和小
城镇新增城镇建设用地规模,对于鼓励类、支持类产业用地需求,给予年
度计划指标倾斜。对符合国家供地政策的项目,在建设用地审批中应保尽
保。
加大产业支持。
对符合产业发展方向,落户特色小镇和小城镇的企业、人才,享有省
级层面关于农村产业革命、旅游业、服务业、养老业等优惠政策的支持。
支持特色小镇和小城镇中小企业创业基地建设,省工业和信息化发展专项
资金向特色食品、旅游商品等特色产业倾斜,对符合国家产业结构调整的
+
黔东南州产业大招商政策
摘编
·75·
指导目录鼓励类产业企业,按规定享受西部大开发所得税优惠政策。
政策依据:省人民政府办公厅关于加快推动特色小镇和小城镇高质量
发展的实施意见(黔府办发〔201920号)
政策
对符合小型微利企业条件的文化创意和设计服务企业实行小型微利企
业所得税优惠政策。对国家重点鼓励的文化产品出口实行增值税零税率。
文化创意和设计服务企业在申报专利权时可申请省科技厅专利申请资助资
金、省科技专利专项资金给予补助。
政策依据:省政府办公厅关于推进文化创意和设计服务与相关产业融
合发展的实施意见(黔府办发〔201552号)
(八)现代服务业
政策一
省现代服务业专项资金每年安排5000万元以上支持现代服务业集聚区
建设发展;对经认定的省级服务业集聚区给予15万元规划编制补助;对入
选的示范集聚通过绩效奖补方式给予300万元一次性奖励资金,用于
持产业公共服务平台或重点企业项目建设。
政策依据:省服务业创新发展十大工程领导小组《关于印发贵州省现
2020-2022
20202号)
政策二
领导小组办公室每年遴选50户左右省级服务业龙头企业,由十大工程
牵头部门联合授牌,从省级服务业发展引导资金中给予每户50万元奖励。
省级服务业发展专项资金将优先支持龙头企业项目建设。
政策依据:省发展改革委关于印发《贵州省服务业创新发展十大工程
省级龙头企业认定管理办法》(黔发改服务〔2023146号)
+
黔东南州产业大招商政策
摘编
·76·
(九)新能源汽车及电池材料
政策一
()鼓励物业部门与有资质的充电桩建设运营企业合作在小区公共停
车位建设充电设施。
()持续推进综合充能项目建设。支持集加油、加气、加氢、加甲醇、
充换电等综合能源服务于一体的综合充能项目建设,重点推进贵州海上丝
路公司贵阳经开区“二合一”综合充能站、贵州渝富公司毕节综合充能站、
华油天然气公司大方“五站合一”综合充能站等项目建设。
()降低充电设施建设用地成本。独立占地的集中式充换电站用地鼓
励采取长期租赁、先租后让、租让结合、弹性年期出让等方式供应。与其
他建设项目共用土地的充换电项目可以采取配建方式供地。鼓励在村集体
用地建设充换电基础设施。除可按出让方式供应土地外,鼓励市、县政府
以国有建设用地使用权作价出资或者入股方式提供土地,与社会资本合作,
降低建设充电基础设施用地综合成本。
()保障电力供应。对向供电企业直接报装接电的经营性集中式充换
电设施用电,执行工商业及其他两部制电价,到2023年,免收基本电费。
其他充电设施按其所在场所执行分类目录电价。
()加大资金支持。鼓励金融机构在商业可持续原则下创新金融产品,
支持充电设施建设运营。支持符合条件的充电设施企业按照市场化原则通
过发行企业债券、公司债券、非金融企业债券融资工具等方式扩大融资,
防止形成隐性债务。
政策依据:省人民政府办公厅关于印发贵州省电动汽车充电基础设施
建设三年行动方案(20212023)的通知(黔府办函〔202156号)
政策二
完善资金清算制度,提高补贴精度。从2020年起,新能源乘用车、商
+
黔东南州产业大招商政策
摘编
·77·
用车业单申报清算车辆数量应分别达10000辆、1000辆;贴政
结束后,对未达到清算车辆数量要求的企业,将安排最终清算。
新能源乘用车补贴前售价须30万元以下(30万元),为鼓励“换电”
新型商业模式发展,加快新能源汽车推广,“换电模式”车辆不受此规定。
政策依据:省财政厅、省工业和信息化厅、省科学技术厅、省发展和
改革委省财政厅等四部门关于转发《财政部工业和信息化部科技部发展改
革委关于完善新能源汽车推广应用财政补贴政策的通知》的通知(黔财工
202038
(十)酱香白酒
强化融资保障。
鼓励银行业金融机构实行名单制管理,适当提高不良贷款容忍度。对
面临暂时流动资金困难的企业不降低现有授信额度;对资产负债率较高,
但在警戒线以下的白酒企业不降低信用等级;对出现清偿性风险,但长期
盈利能力强、工艺先进的企业,不搞“一刀切”式抽贷和断贷;大力开展
资信评估体系建设,对市场前景好、风险小的白酒企业,通过资信调查认
定,适当放宽贷款限额控制,扩大白酒企业抵()押品范围。支持地方金
融机构开展基酒抵、质押融资业务。
强化财税支持。
1.省工业和信息化发展专项资金每年安排2000万元以上,重点支持白
酒工业园区、酒糟循环利用、企业结构调整及改扩建项目建设。
2.推动符合条件的白酒企业启动和加快上市进程,对上市或挂牌融资
的企业给予奖励,其中,对在境内主板、中小板、创业板和境外市场上市
融资的企业,给予100万元至150万元的一次性奖励;对在“新三板”上市
融资的企业,给予50万元的一次性奖励。
3.鼓励和支持白酒企业与高校、科研院所构建产学研技术创新平台,
+
黔东南州产业大招商政策
摘编
·78·
对白酒企业设立的技术部门,被新认定为国家工程技术研究中心、重点实
验室的,分别予一次性500补助;新认定为国家级企业术中心、
技术创新示范业的,分别给予一次性100万元补助;新认定为高新技
企业的白酒企业,给予一次性30万元奖励。
4.鼓励和支持白酒企业运用知识产权参与市场竞争,对获得中国专利
金奖、中国外观设计金奖的各一次性奖励50万元;对获得中国专利优秀奖、
中国外观设计优秀奖的一次性奖励10万元。对获得贵州省专利金奖、贵州
省外观设计金奖的各一次性奖励10万元;对获得贵州省专利优秀奖、贵州
省外观设计优秀奖的各一次性3元。对获得中国驰名商标、贵州省
著名商标、贵州省名牌产品、贵州省服务业名牌等国家级和省级品牌的白
酒企业,由企业所在市县政府给予一定奖励。
政策依据:省政府办公厅关于印发《贵州省推动白酒行业供给侧结构
性改革促进产业转型升级的实施意见》的通知(黔府办发〔201633号)
(十一)生猪
政策一
能繁猪、肥猪政策性保险保费财政补占总保费85%,提高省
级财政保费承担比例,保费补贴按照中央50%,省级25%,市级5%,县级5%
的比例承担。
政策依据:省财政厅关于印发《贵州省政策性农业保险保费补贴资金
管理办法》的通知(黔财金〔202231号)
政策二
一、生猪养殖用地按农用地管理,不需办理建设用地审批手续,在不
占用永久基本农田前提下,合理安排生猪养殖用地空间,允许多层建筑发
展生猪养殖,允许生猪养殖用地使用一般耕地,作为养殖用途不需耕地占
补平衡。
+
黔东南州产业大招商政策
摘编
·79·
二、畜禽养殖设施农用地范围:
1、生产设施用地。畜禽养殖圈、养殖池(车间)、饲料存放和
化投料、进排水渠道等设施用地,以及场区内通道、绿化隔离带用地。
2、辅助设施用地。与养殖生产接关联的粪污处置、检验检检测
疫病防控、冷冻保鲜、病死畜隔离、洗消转运等设施用地及必要的管理用
房用地。
三、直接用于养殖的生产设施用地规模根据养殖规模,按照国家及农
业行业标准合确定。辅助设施用地规模控制在养殖设施用地积的15%
以内,取消15亩上限规定,保障生猪养殖生产的废弃物处理等设施用地需
求。养殖设施符合相关规划、建设安全和生物防疫等要求的,可以建设多
层建筑。
四、养殖设施原则上不得使用永久基本农田,涉及少量永久基本农田
确实难以避让的,允许使用但必须补划,使用面积原则上不得超过养殖设
施用地面积的15%,其中对生猪养殖的可适当扩大,原则上不得超过20%
对于永久基本农田地块特别零星破碎的,经县自然资源主管部门会同农业
农村主管部门组织论证同意后可略增加使用比例。
五、生猪养殖设施用地可通过与农村集体经济组织签定协议等方式获
取,鼓励利用农村集体建设用地和荒山、荒沟、荒丘、荒滩发展生猪生产。
政策依据:贵州省自然资源厅贵州省农业农村厅关于设施农业用地管
理有关问题的通知(黔自然资规〔20201号)
(十二)生态渔业
()加大财政扶持。
对国家级科研院所或院士带团队、带技术、带项目在贵州创办企业或
科研基地并实现绩效目标的,省级给予一定奖补。
对获国家原良种场认定的企业,省级次性给予500万元补,
+
黔东南州产业大招商政策
摘编
·80·
资金从部门预算中统筹安排。对获得中国驰名商标行政认定的,省级财政
一次性奖励50万元。
对生态渔业精深加工企业开展市场融资,符合财政专项资金支持要求
的,给予支持。对牵头制定标准的单位或个人,按国家标准20万元、地方
标准5万元的标准,省级给予资金补助。
()完善金融服务。
积极拓宽涉农贷款抵质押物范围,鼓励银行等金融机构在信贷审批流
程、授信权限、产品研发方面对生态渔业予以政策倾斜。
对符关条件的企业,省农业贷融资担公司10万元300
万元贷款担保增信,按照不高于0.8(脱贫类项目不高于0.5)的低费率
收取担保费。
探索开展渔业保险试点,将渔业保险纳入地方特色险种补贴支持范围,
完善水产养殖气象指数保险、价格保险、养殖设施保险等政策,鼓励发展
商业性渔业保险。
()加强法治保障。
完善养殖证、水产苗种生产许可证制度,全面实施水产苗种产地检疫
制度。发展大水面增殖渔业,必须依法办理养殖证,放养和起捕必须符合
有关管理规定。
水产养殖设施用地符合设施农业用地政策的,按照国家和省有关规定
执行。水产养殖用水在限额以内不征收水资源费。
对渔业养殖、捕捞用电,执行农业生产用电价格。
政策依据:省人民政府办公厅关于加快推进生态渔业高质量发展的意
见(黔府办发〔202129号)
+
黔东南州产业大招商政策
摘编
·81·
一、新型工业化基金
贵州省新型工业化发展基金。省级财政2021年预算安排70亿元(工业
发展专项资金60亿元、大数据发展专项资金10亿元),带动金融和社会资
本投资不低于140亿元,在项目端实现总投入不低于210亿元。
(一)工业化项目
1.重点支持领域,包括先进装备制造、现代制造服务业、前沿技术产
业、现代能源、新能源汽车、基础材料、现代化工、特色食品、优质烟酒、
健康医药、新型建材、民族特色轻工、电子信息制造业和节能与资源综合
利用业等产业项目或科技成果转化项目。
2.申报主体要求,应为经工商行政管理机关或主管机关核准登记的公
司或企业,如申报主体为已存续企业,具体要求如下:
1应为贵州省内注册的企业、金拟投资的省外企注册地迁
贵州的、被贵州省内企业控股收购的省外企业等;
2)原则上项目申报主体与实施主体应保持一致;
3公司实收资本则上不低1000万元,法人治理结构完
产经营或业务开展情况良好。连续经营须在两年以上,净资产原则上不低
3000万元;
4)申请基金投资金额原则上不得低于3000万元;
5财务管理制度健全,财务况经会计师事务所审计,会信用
纳税信用、银行信用良好;
6企业具备为投资人的投资实保值增值,并提供好退出通
四、基金类政策
+
黔东南州产业大招商政策
摘编
·82·
保障的基本条件;
7)企业未列入有关部门发布的负面清单或限批名单,且原则上近3
年未因财政、环保、财务及其他违法、违规行为受到县级以上财政部门及
相关行政执法、监管部门的处理处罚;
8不存在重大偿债风险、影响续经营的担保、诉及仲裁等
大或有事项。
3.新设立SPV要求
如申报主体为新设立的SPV公司,具体要求如下:
1应为经工商行政管理机关或管机关核准登记的立在贵州
公司;
2公司注册资本则上不低1000万元,基金完成投资后
股东方应在规定时间内实缴到位;
3具备为投资人的投资实现保增值,并提供良好退出通道保
的基本条件。
4.申报项目要求
1项目应符合本指南规定的投领域,市场潜力较,辐射带
能力强,具有较强的产业化属性和市场化特征,产品或服务有明确的目标
市场,具有较强的市场竞争力、稳定现金流和可持续经营能力;
2项目应符合我省国民经济和会发展规划、产业划、土地
用总体规划、环境保护规划等;
3)项目应具备开工建设的必要条件;
4)项目自筹资金不得低于项目总投资的10%;原则上所实施项目应
与申报主体主营业务一致;
5项目所处行业市场空间较大具备一定的核心竞优势;高
管理人员和核心技术人员具有一定的稳定性。
+
黔东南州产业大招商政策
摘编
·83·
6项目实施有助于当地社会稳与经济的健康可持发展,对
方产业结构转型升级具有明显的促进作用,投入运营后预计可新增带动一
批就业岗位和创造新增税收。
7牢牢守住生态和发展两条底线,项目建设具有良的生态性
不涉及高耗能高污染,不会对生态环境产生不可逆的影响;项目建设不涉
及生态红线,符合国土空间开发规划。
(二)大数据相关企业
1.重点支持领域
1数字基础设施:包括宽带网建设及运营;5G建设、运
及技术开发应用;北斗等卫星通信系统、地球站系统的建设、运营及技术
应用服务;移动互联网;智慧广电等。
2新一代信息技术:包括人工能、物联网、工业联网、产
互联网、区块链、信息安全技术等开发、应用及服务。
3软件开发服务:包括基应用软件、嵌入式软件数据库、
DCS、可编程逻辑制器(PLC、数据采集与控(SCADA)、先进
控制系统(APC)等工业控制系统;制造执行系统(MES),计算机辅助设
计(CAD)、辅助工程(CAE)、工艺规划(CAPP)、产品全生命周期管理
PLM、工业云平台、工APP工业件;能源管理统(EMS)、建
筑信息模型系统(BIM)、城市信息模型系统(CIM)等专用系统。
4数据技术开发及服务:括数据采、存、算、管用全生命
期相关技术研发及应用;在线数据处理;数据交易流通的交易平台、加工
分析、资本运营、中介咨询、上市服务等产业;云服务、软件外包服务等
数据增值服务;信息化解决方案开发、软件开发和测试服务;信息系统集
成、咨询、运营维护;数据挖掘;数据恢复和灾备服务等。
+
黔东南州产业大招商政策
摘编
·84·
5数据中心产业:数据中建设及运营,其中绿色据中心、
算、超大型数据中心在同等条件下优先支持;围绕数据中心相关的服务器、
机架、数据采集、数据标注、数据传输、数据开发等上下游产业。
6数字经济新业态:信创产业研发、适配及应用数据技术
产化;网络货运产业;数字化平台经济、共享共济。
7)大数据与工业融合:工业互联网、工APP;智慧车间、智慧工
厂;建材、航空航天、生物、汽车、电力等行业数字化改造。
8大数据与农业融合:农产品量追溯、农业生产能化、农
电商、农业大数据、农业产销智慧对接技术及应用。
9大数据与服务业融合:移动付、电子票据等金现代化技
开发及应用;电子商务和跨境电商;数字内容创作生产、网络游戏、数字
媒体、短视频、数字出版、直播、在线文化娱乐等信息服务;智慧旅游、
智慧物流、智慧医疗健康、智慧教育、智慧交通、智慧家居等。
10)贵州省大数据和数字经济“十四五”发展相关规划明确的其他
发展方向。
2.申报主体要求
1)省内注册登记的独立法人企业,成立时间超1年,实缴注册资
本不低于500万元;
2)基金投资后注册地拟迁往贵州省的省外企业;
3基金投资后拟在我省落地区总部、功能性总部省外优强
业;
4)被我省企业控股收购的省外企业;
5)申请基金投资金额原则上不得低于500万元。
3.内部管理要求
1)企业法人治理结构完善且与企业规模相匹配,治理机制健全;
+
黔东南州产业大招商政策
摘编
·85·
2)股权结构清晰,不存在重大股权纠纷;
3不存在企业股东、实际控制滥用支配地位,随抽逃出资
大额占用企业资金且未归还等情形;
4企业无重大不良信用记录,股东及核心团队人最近三年
不存在犯罪、重大违法违规行为;
5)未被列入有关部门发布的负面清单或限制名单。
4.产品及业务要求
1企业经营及发展良好,主业务明晰,有较为成熟的商模式
2企业提供的产品或服务与市上已存在的同类产和服务有
别优势,有望成长为细分行业核心。
5.财务状况要求
1企业财务管理制度健全,主资产权属清晰,原上资产负
率不高于75%
2近一年内没有因财政、环保财务、税务及其他法、违规
为受到县级以上有关部门的处理、处罚;
3不存在重大偿债风险(如影持续经营的担保、裁及诉讼
重大或有事项)和尚未了结的对企业财务、经营及资产状况造成实质影响
的诉讼、仲裁等情况。
6.技术研发能力
1)企业有从事研究开发的核心技术团队及研发能力;
2拥有与企业主营业务相关的利技术及知识产权具有一定
术创新能力。
7.申请较大额投资(3000万元以上)须同时具备以下条件:
1)申报主体属于统计局或大数据局上规入统企业,成立时间超过3
年;
+
黔东南州产业大招商政策
摘编
·86·
2)实缴注册资本不低于1000万元或净资产不低于5000万元。
3)企业最近3年连续盈利且年均净利润不低于1000万元,或企业最
2年平均营业收入不低于5000万元,营业收入增长率不低于10%且年均净
利润不低于500元;或者企业上一年度营业收入1亿以上,未来3
内有上市计划且已制定明确的上市方案,已开展上市前准备工作。
4技术型企业拥有专职从事研开发的核心技术团,企业从
研究开发的技术人员占职工总人数的20%以上,管理团队中50%以上核心管
理人员或技术队中50%上核技术人员从事相关行业的工时间不少
3年。
(三)优先支持的企业(项目)
(一)涉及贵州省委省政府确定的新型工业化发展部署的产业的企业
(项目)。
(二)能够对贵州辖区显著增加税收、就业及经济社会价值的省级以
上龙头企业。
(三)拥有一流的核心技术或具有创新型商业模式的企业(项目)。
(四)细分行业排名前十在贵州落地的企业(项目)。
(五)贵州省软件名园、培育园区内重点企业及园区运营企业。
(六)获国家或省级大数据、数字经济相关试点示范企业。
(七)贵州省委省政府重要工作涉及的重点项目。
政策依据:关于印发《贵州省新型工业化发展基金项目遴选标准及申
报指南(试行)》的通知(贵鑫瑞和发〔202220号)
二、新型城镇化基金
贵州省新型城镇化投资基金。省级财政2021年预算安排30亿元(新型
城镇化专项资金),带动金融和社会资本投资不低60亿元,在项目端实
现总投入不低于90亿元。
+
黔东南州产业大招商政策
摘编
·87·
项目投资领域
(一)城市更新领域。重点支持城镇棚户区、老旧小区、背街小巷、
地下管网改造和城市智慧化改造以及保障性租赁住房、城市轨道交通、公
水供暖等
(不含民办义务教育)、医疗、社会福利、殡葬服务、文化、旅游、体育、
托育等公共服务设施建设,垃圾无害化资源化处理设施、污水集中处理设
施等环境卫生设施建设。
(二)产城融合领域。重点支持标准化厂房、智能标准生产设施、技
术研发转化设施、检验检测认证设施、职业技能培训设施、仓储集散回收
设施、文化旅游体育产业服务设施、供水排水供气供电供暖设施、污水垃
圾处理设施等产业平台公共配套设施建设,物流设施建设和农贸市场建设
改造等。
(三)养老服务领域。重点支持养老医疗、餐饮、教育、旅游、康复
等养老服务产业和养老服务设施建设。
(四)特色小镇领域。重点支持有一定收益的特色小镇基础设施、公
共服务设施、环境卫生设施、产业培育设施等建设。
项目申报企业
(一)在贵州省内注册的企业;注册地拟迁往贵州的企业,或被贵州
省内企业控股收购的省外企业;通过设立子公司的形式将重要业务板块落
户贵州的企业。
(二)股权结构清晰,实际控制人和最终受益人可识别,股权不存在
权属纠纷。
(三)法人治理结构完善,生产经营或业务开展情况良好,有清晰的
商业模式。
(四)未入有关部门发的负面清单或限批名单,且3年没有因
+
黔东南州产业大招商政策
摘编
·88·
财政、环保、财务及其他违法、违规行为受到县级以上财政部门及相关行
政执法、监管部门的处理处罚。
(五)申报企业、股东及核心团队经营合法合规,征信情况良好,近
5内不存在犯罪、重大违法违规行为;不存在将会实质性影响公司财务、
经营及资产状况的未结诉讼、仲裁等。
(六)不存在重大偿债风险、影响持续经营的担保、诉讼及仲裁等重
大或有事项。
(七项目报企业若为新设立SPV司(即发起方和投资方
的项目公司)具体要求如下:
1.应为经工商行政管理机关或主管机关核准登记的设立在贵州的公司;
2.公司注册资本原则上不低于1000万元,基金完成投资后,其他股东
方应在规定时间内实缴到位;
3.具备为投资人的投资实现保值增值,并提供良好退出通道保障的基
本条件。
项目申报要求
(一)项目应符合国家相关规定及行业政策标准。
(二)项目应符合本指南规定的投资领域,市场潜力较大,辐射带动
能力强,具备较强的市场化特征和市场竞争力。
(三)项目建设应守住生态和发展两条底线,不得对生态环境产生不
可逆的影响、不得涉及生态红线,应符合国土空间开发规划。
(四)不得新增地方政府债会稳定与经济的健康可持续发展,对地方
新型城镇化转型升级具有促进作用,可带动就业和创造税收。
(五)项目盈利模式应包含资产自持经营,通过资产管理和运营来提
供稳定现金流。
(六)项目应有完整的商业计划书或可行性研究报告,项目建设应有
+
黔东南州产业大招商政策
摘编
·89·
切实可行的资金筹集计划和使用计划,项目运营应有合理的现金流支撑,
项目投资应有合理的资金收益及退出机制,保障城镇化投资基金投资收益
和按期退出。
(七)公司核心团队成员需具有与项目实施相匹配的行业背景与技术
能力,至少3成员须具从事相关行业的经验或背景,高级管理人员
和核心技术人员具有一定的稳定性。
(八)城市更新类项目,须符合《住房和城乡建设部关于在实施城市
更新行动中防止大拆大建问题的通知》(建科〔202163号)有关规定。
(九)涉及棚户区、老旧小区、背街小巷、城市管网改造和保障性租
赁住房项目的,原则上应纳入主管部门确定的计划任务。
(十)PPP目须进入全国PPP合信平台项目管理库和州省PPP
监测服务平台。
(十一)满足行业主管部门、基金管理人的其他要求。
政策依据:印发州省镇化基金标准
申报指南(试行)》的通知(贵鑫瑞和发〔202219号)
三、农业现代化基金
贵州省农业农村现代化发展基金。省级财政2021年预算安排45亿元
(农业现代化专项资金),带动金融和社会资本投资不低于90亿元,在项
目端实现总投入不低于135亿元。
(一)重点支持领域
重点投向粮食生产和重要农产品供给、现代特色农业、农业生产及流
通服务、绿色循环产业、农业科技装备业、现代化智慧农业、特色林业及
林下经济、农村人居环境整治、高标准农田建设、农村饮水安全工程等项
目。
+
黔东南州产业大招商政策
摘编
·90·
(二)项目申报要求
1.项目申报范围:
符合《省人民政府办公厅关于印发省级政府投资基金优化整合实施方
案的通知》(府办发〔20219号)和《省级政府投资基金管委会办
室关于深化“放管服”改革优化完善“四化”及生态环保基金运行体制机
制的实施意见(黔基金办〔20222号)规定的投资范围,未被列入
基金负面清单的项目。
2.企业申报条件:
1组织形式:应为依法设立具独立法人资格的有责任公司
股份有限公司或有限合伙企业;原则上不投资上市企业(上市公司定增除
外)。
2主营业务:公司应具有明确主营业务,相关经业务不得
《贵州省农业农村现代化发展基金管理暂行办法》中基金投向相违背。
3注册地:贵州省内外的企业农业基金投资省外业资金规
原则上不超过金实缴规模的30%。基金投资省外企业认定标:被贵州
省内企业控股收购的省外企业;企业通过设立子公司的形式将重要业务板
块地落户贵州,子公司资产须不低于农业基金对该企业的对应投资金额中
贵州政府出资部分;经农业基金工作协调组办公室审议通过的贵州省农业
现代化产业中具有重要带动作用或发展前景好、盈利能力强的省外项目。
4核心团队:核心团队成员需有与项目实施相匹的行业背
与技术能力;至少有3名成员须具备从事相关行业的经验或背景。
5规范性:法人治理结构健全股权关系清晰,不在重大股
纠纷的情况;公司资产权属清晰,权证合规;建立了现代化企业管理制度,
包括生产、管理、财务等;特许行业经营项目应具备项目必须的运营资质。
6)财务指标:总资产不低于3000万元;净资产不低于1000万元。
+
黔东南州产业大招商政策
摘编
·91·
7技术与研发:应拥有权属清、完整的专利技术相关知识
权,具有较强的技术研发或创新能力。
8诉讼、仲裁与行政处罚:公及股东最近五年内存在犯罪
重大违法违规行为,无尚未了结的将会实质性影响公司经营等情况;企业
未列入有关部门发布的负面清或限批名单,且近3年没有因财政、环保、
税务及其他重大违法、违规行为受到县级以上财政部门及相关行政执法、
监管部门的处理处罚(是否属于重大违法、违规行为由当地相关执法部门
出具认定函)。
9信用情况:公司及股东征信况良好,不存在被入失信人
等情况。
10)市场与商业模式:产品或服务有明确的目标市场,具有较强的
市场竞争力与可持续的经营能力,产品或服务应具有创新且盈利的商业模
式。
11)关联交易:关联交易清晰,价格公允。
12)劳动用工与社会保险:项目实施主体应按法律规定与员工签订
劳动合同,并缴纳社会保险。
13)新设SPV司:应为经工商行管理机关或主管机核准
登记的设立在贵州的公司;公司注册资本原则上不低于1000万元,需实缴
到位;具备为农业基金的投资本金实现保值增值,并提供良好退出通道保
障的基本条件。
3.项目申报条件:
1产业政策:产业项目应具有确的主营业务或主产品、清
的商业模式,符合国家及我省产业政策导向。
2项目规划:项目需具有清晰发展规划与实施计,有完整
商业计划书或可行性研究报告。
+
黔东南州产业大招商政策
摘编
·92·
3)项目条件:项目应具备开工建设的必要条件。
4投资计划:项目资金需求使用计划合理可行,前期工到位
资金来源明确,筹措方式可行项目自筹资金原则不低于项目总投15%
5项目收益:具备产业化条件市场化属性,具有持续的现
流及稳定的项目收益,主要经营指标原则上应保持在行业合理范围内:项
目净现值NPV>0;项目内部收益率原则上需大于4.6%/年;项目的静态投资
回收期不得高于农业基金的投资期。
6社会效益:项目实施有助于方经济社会持续健发展,有
巩固拓展脱贫攻坚成果与乡村振兴有效衔接,投入运营后可新增带动就业、
促进农户增收。
7生态性:项目建设具有良好生态性,不会对生环境产生
可逆影响;项目建设不涉及生态红线,符合国土空间开发规划。
4.投资要素:
1)投资主体:原则上与申报主体保持一致。
2)投资模式:主要以股权投资方式进行投资。
3)投资方式:增资扩股/股权转让。
4投资限额:基金原则上对受企业股权投资不控、不作第
大股东;基金单个项目的投资比例,不超过基金设立规模的30%
(三)优先支持的企业(项目)
1.涉及国家粮油安全、种源安全、农产品供给保障的企业(项目);
2.巩固拓展脱贫攻坚成果与乡村振兴有效衔接的企业(项目);
3.对区域产值、税收、就业等经济社会效益有重大带动的企业(项
目);
4.12个特色产业(茶叶、食用菌、蔬菜、牛羊、特色林业、水果、生
猪、中药材、刺梨、生态渔业、辣椒、生态家禽)中做优做精特色优势农
+
黔东南州产业大招商政策
摘编
·93·
产品的头部企业(项目);
5.拥有一流的核心技术或具有创新型商业模式的农业企业(项目);
6.农业产业化龙头企业、农产品流通企业、农机装备企业和大型商超
等在贵州落地的招商引资项目。
政策依据:关于印发《贵州省农业农村现代化发展基金项目遴选标准
及申报指南(试行)》的通知(贵鑫瑞和发〔202216号)
四、旅游产业化基金
贵州省文化旅游产业投资基金。省级财政2021年预算安排45亿元(旅
游专项资金),带动金融和社会资本投资不低于90亿元,在项目端实现总
投入不低于135亿元。
点支持文化旅游装备制造、红色旅游、山地旅游、体
育旅游融合发展、‘旅游+’‘+旅游’融合发展、避暑度假旅游、康养旅
游、森林生态旅游、乡村旅游、智慧旅游、文化旅游新业态、文化旅游景
区、文化旅游园区和街区建设运营、文化大数据、媒体融合、出版影视、
创意设计、会展、演艺等产业项目。申报条件
(一)项目实施主体要求
1.组织形式。应为依法设立具有独立法人资格的有限责任公司或股份
有限公司。
2.注册地。基金原则上应投资在贵州省内注册的企业,包括基金拟投
资的省外企业注册地迁往贵州的以及被贵州省内企业控股收购的省外企业
等。
为强化基金招商引资作用,撬动大型、优质项目落地贵州,基金可投
资通过设立子公司的形式将重要业务板块地落户贵州(子公司资产须不低
于基金对该企业的对应投资金额中贵州政府出资部分)的省外企业,投资
省外企业资金规模原则上不超过基金实缴规模的30%
+
黔东南州产业大招商政策
摘编
·94·
3.核心团队。核心团队成员需具有与项目实施相匹配的行业背景与技
术能力;至少有3名成员须具备从事相关行业的经验或背景。
4.范性1建立法人治理结构,不存在股东、实控制违法
情形;2明确资产权属系,具有清晰的项目公司股权结构设计,不
存在重大股权纠纷的情况;(3)具有规范的财务理制度,具备项目融
资和吸引社会资本的条件。
5.诉讼、仲裁与行政处罚。公司、股东及核心团队最近五年内不存在
犯罪、重大违法违规行为,无尚未了结的将会实质性影响公司财务、经营
及资产状况的诉讼、仲裁等情况。
6.信用情况及劳动用工与社会保险。公司、股东及核心团队征信情况
良好;项目实施主体应按法律规定与员工签订劳动合同,并缴纳社会保险
等。
7.财务情况:企业总资产不低于5000万元,净资产不低于3000万元。
8.新设立的项目SPV公司:
1公司注册资本则上不低3000万元,其他出资人须与
金同步实缴到位;
2具备为文旅基金的投资本金现保值增值,并提良好退出
道保障的基本条件。
(二)申报项目具体要求
1.产业政策。项目应具有明确的主营业务或产品,符合国家及我省文
化旅游体育产业政策导向,具备产业化条件和市场化属性,实现社会效益
与经济效益相统一。
2.期工。(1)原则上项目需获得项目实施必须的文或续:
基本建设类项目需获得项目审批或核准、备案手续等;非基本建设类项目
需获得有关主管部门立项批复文件;PPP类项目必须进入全国PPP综合信息
+
黔东南州产业大招商政策
摘编
·95·
平台项目管理库,并已设立相应的SPV公司。
2项目需具有清晰的发展规划实施计划,有完整商业计划
或可行性研究报告。
3.项目模式。项目具有较强的产业化属性和市场化特征,产品或服务
有明确的目标市场,具有较强的市场竞争力、稳定现金流和可持续经营能
力。项目实施主体应具备权属清晰的资产,完善明确的产权手续,具备开
放合作的股权结构,具有股权投资基金进入的良好条件。
4.预期经济效益。项目主要经营指标原则上应保持在行业合理范围内。
1项目净现NPV>0;(2的预期投资收益率原则上需
文旅基金门槛收益要求4.65%/);3项目的静态投回收
得长于文旅基金的投资期。
5.社会效益:项目实施有助于当地社会稳定与经济的健康可持续发展,
对地方产业结构转型升级具有明显的促进作用,投入运营后预计可新增带
动一批就业岗位和创造新增税收。
6.生态性:牢牢守住生态和发展两条底线,项目建设具有良好的生态
性,不会对生态环境产生不可逆的影响;项目建设不涉及生态红线,符合
国土空间开发规划。
7.退出机制。项目应具有清晰的股权投资基金退出机制,在投资协议
等相关协议里进行明确约定。
8.要求项目资本金原则上不得低于目总投资20%。项目资
金需求与使用计划合理可行,融资来源明确,筹措方式可行。原则上对项
目实施主体股权投资占比不超过该主体总股权的50%
优先支持的项目
(一)具有良好的社会效益和经济效益,承接国家层面安排部署的重
大产业项目。
+
黔东南州产业大招商政策
摘编
·96·
(二)有利于引进补齐贵州文化旅游体育产业短板和弱项,具有产业
引领性和带动性的项目。
(三)具有投资实力和管理能力的社会资本以投资、建设、经营等一
体化方式入股的项目。
(四)拥有国际国内一流的核心技术或具有创新型商业模式的项目。
(五)在国内文旅体行业有较强的影响力和带动力的企业在贵州落地
的项目。
(六)市场前景好的重大闲置低效旅游(资产)的盘活提升项目。
(七)有利于盘活存量、做优增量、提升质量的重大文旅体产业项目。
政策依据:关于印发《贵州省文化旅游产业投资基金项目遴选标准及
申报指南(试行)》的通知(贵鑫瑞和发〔202218号)
五、新动能产业发展基金
一、组建新动能产业发展基金
省级财政资设立贵州省动能产业发展基金(工商登记为准
下简称新动能基)重点持新能源电池及材料、酱酒、战略性新兴产
业等工业产业发展。
二、新动能基金的基本要素
()基金出资人代表。省人民政府授权省工业和信息化厅
作为出资,委托贵州省晟国有资产经营有限责任公(以下简称
省黔晟国资公司)作为出资人代表。
()资金来源。由省级财政统筹年度预算予以列支,按照出资人申请
拨付。
()基金管理人。贵州黔晟股权投资基金管理有限公司(以下称黔
晟基金公司)
()基金存续期限。基金存续期原则上不超过15年,具体年限由出资
+
黔东南州产业大招商政策
摘编
·97·
人协商确定,基金到期后可视情况按程序延长。
()基金管理费。直接资项目理费按照当年新增投资1%/
计提,今后视情况可作适当调整,原则上不超过基金本金产生的利息与收
益之和。管理费的兑现与年度绩效考核挂钩,当年先兑现50%,剩余50%
据年度绩效考核结果次年兑现。
()基金组织形式。采用有限合伙型,通过财政出资,撬动银行等金
融机构贷款和社会资本投资,支持工业产业发展。
三、基金管理及运营
()项目管理及决策机构。
1.设立新动能基金投资决策委员会(以下简称基金投委会)。对新动能
基金投资活动的管理、控制、运营、退出等作出审议及决策。基金投委会
由省工业和信息化厅、省国资委、省黔晟国资公司、黔晟基金公司各委派
一名,及一名投资专家共5名委员组成,实行票决制,票决2/3及以上同意
的视为通过。
2.设立新动能基金风险控制委员会(以下简称基金风控委)。审核项目
投资风险,完善风控措施,为基金投委会提供关于项目投资风险控制的客
观意见。基金风控委以行业专家为主。
()项目申报管理。各省级行业主管部门、金融机构、企业等可向省
工业和信息化厅申报项目,基金管理人也可按照市场化方式主动寻找项目,
统一由省工业和信息化厅梳理、汇总后向基金管理人推荐。由基金管理人
组织尽调及评审,出具尽调报告,报基金风控委及投委会审议决策。
()投资模式。通过直接投资及参股专项基金等方式。
()基金托管。新动能基金由省工业和信息化厅选取依法设立并取得
托管或监管资质的商业银行担任基金托管人或监管人。
()基金收益分配。基金存续期内收回的投资本金和净收益原则上滚
+
黔东南州产业大招商政策
摘编
·98·
动投资;存续期满后,按有关规定进行分配。
政策依据:贵州省工业和信息化厅贵州省财政厅关于印发《贵州省新
动能产业发展基金设立方案(修订版)》《贵州省新动能产业发展基金管理
暂行办法(修订版)》的通知(黔工信办〔20233号)
六、生态环保发展基金
贵州省生态环保发展基金,省级财政2021年预算安排10亿元(大生态
战略专项资金),带动金融和社会资本投资不低于20亿元,在项目端实现
总投入不低于30亿元。
项目申报要求
(一)重点支持领域。围绕我省生态环保产业,重点投向流域治理、
供排建设
(危)废无害化、资源化、减量化处理,土壤修复,林下经济、林业开发,
清洁生产、循环经济、节能环保、产业绿色升级等领域。
(二)申报主体要求。应为经工商行政管理机关或主管机关核准登记
的公司或企业,如申报主体为已存续企业,具体要求如下:
1.则上目申报主体与施主体应保持一致;人治理结构完
生产经营或业务开展情况良好;财务管理制度健全,财务状况经会计师事
务所审计,会计信用、纳税信用、银行信用良好。
2.公司实收资本原则上不低于1000万元,法人治理结构完善,生产经
营或业务开展情况良好。
3.企业具备为投资人的投资实现保值增值,并提供良好退出通道保障
的基本条件。
4.业未入有关部门发的负面清单或限批名单;原上近3年未
因财政、环保、财务及其他违法、违规行为受到县级以上财政部门及相关
行政执法、监管部门的处理处罚。
+
黔东南州产业大招商政策
摘编
·99·
5.不存在重大偿债风险影响持续经营的担保、诉讼及仲裁等重大或有
事项。
(三)新设立SPV要求。如申报主体为新设立的SPV公司,具体要求如
下:
1.应为经工商行政管理机关或主管机关核准登记的设立在贵州的公司。
2.公司注册资本原则上不低于1000万元,基金完成投资后,其他股东
方应在规定时间内实缴到位。
3.具备为投资人的投资实现保值增值,并提供良好退出通道保障的基
本条件。
(四)基金投资区域。基金原则上应投资在贵州省内注册的企业,包
括基金拟投资的省外企业注册地迁往贵州的以及被贵州省内企业控股收购
的省外企业等。为强化基金招商引资作用,撬动大型、优质项目落地贵州,
基金可投资通过设立子公司的形式将重要业务板块地落户贵州(子公司资
产须不低于基金对该企业的对应投资金额中贵州政府出资部分)的省外企
业,投资省外企业资金规模原则上不超过基金实缴规模的30%
行业准入要求
(一)绿色低碳循环发展的生产体系类。
1.工业企业绿色化、清洁化改造,工业固体废物无害化、减量化综合
利用等工业绿色升级相关企业;
2.生态种植、生态养殖、生态循环大生态、林业循环经济、林业开发
等大生态绿色发展相关企业;
3.能源管理、节水管理、环境污染第三方治理、环境托管服务、能源
托管服务等绿色环保产业相关企业;
4.公共设施共建共享、能源梯级利用、资源循环利用和污染物集中安
全处置、危险废物集中处置设施等产业园区和产业集群循环化服务企业;
+
黔东南州产业大招商政策
摘编
·100·
5.绿色设计、绿色材料、绿色采购、绿色制造工艺、绿色包装、绿色
运输、废弃产品回收处理等绿色供应链企业;
(二)绿色低碳循环发展的流通体系类。
1.新能源或清洁能源汽车、智慧仓储、智慧运输、标准化托盘循环共
用等绿色物流企业;
2.再生资源区域交易中心,废纸、废塑料、废旧轮胎、废金属、废玻
璃、废旧家电等再生资源回收利用企业;
(三)基础设施绿色升级类。
1.石漠化、荒漠化生态修复,区域流域环境要素整治,山水林田湖草
系统修复、污染场地及矿山修复等生态环境修复企业;
2.风电、光伏、水能、地热能、海洋能、氢能、生物质能、光热等新
能源,低污染煤电机、生物质耦合供热、天然气基础设施建设等绿色能源
企业;
3.城乡污水管网、污水收集处理设施、污泥无害化资源化处置设施、
生活垃圾焚烧发电、危险废物集中处置、医疗废物、餐厨垃圾资源化利用
等城镇环境基础设施相关企业;
4.新能源汽车充换电、加氢等配套基础设施,温拌沥青、智能通风、
辅助动力替代和节能灯具、隔声屏障等基础生态环保交通基础设施相关企
业。
(四)生态环境导向的开发模式(EOD)类
生态文明思想为引领,以可持续发展为目标,以生态保护和环境治理
为基础,以特色产业运营为支撑,以区域综合开发为载体,
采取产业链延伸、联合经营、组合开发等方式,将公益性较强、收益
性差的生态环境治理项目与收益较好的关联产业有效融合,统筹推进,一
体化实施的相关企业。
+
黔东南州产业大招商政策
摘编
·101·
项目准入要求
1.项目应符合本指南规定的投资领域,市场潜力较大,辐射带动能力
强,预期效益好;
2.项目应符合我省国民经济和社会发展规划、产业规划、土地利用总
体规划、环境保护规划等;
3.项目应完成立项、环评审批等相关手续。对因特殊原因未及时办理
相关手续的,可先行申报,但需补充情况说明(正式投资协议签署前必须
完成相关手续);
4.有完整的商业计划书或可行性研究报告,项目建设应有切实可行的
资金筹集计划和使用计划,项目运营应有合理的现金流支撑,项目投资应
有合理的资金收益及退出,保障基金投资收益和按期退出;5.项目自筹资
金不得低于项目总投资的10%;所实施项目应与申报主体主营业务一致;
6.上基金投资按照项目总投的20%匹配,金投金额最不超
过项目总投的50%,且不超过项目申报主体净资产的50%
7.核心团队成员需具有与项目实施相匹配的行业背景与技术能力;至
少有3成员须具备从事相行业的经验或背景。高级管理员和核心技
术人员具有一定的稳定性;
8.主营业务明晰、有清晰的商业模式(含生产、采购、销售、盈利模
式等)拥有权属清晰、完的专利技术及相关知识产权、有一定的技
术研发或创新能力;
9.项目财务指标可预期、可持续,能够实现生态基金预期投资收益,
项目预期经济效益主要指标原则上应保持在行业合理范围内。
10.态保护和环境理类项目优先投资EOD模式的项目;PPP
项目,必须进入全国PPP综合信息平台项目管理库。
政策依据:关于印发《贵州省生态环保发展基金项目遴选标准及申报
+
黔东南州产业大招商政策
摘编
·102·
指南(试行)》的通知(贵鑫瑞和发〔202217号)
七、“桥头堡”专项资金使用办法
1.投资区域。以凯里市、黎平县、从江县、榕江县为重点,辐射全
各县。
2.基金投向。重点围绕“十大工程”建设(产业承接聚集工程、旅
康养提升工程、特色农产品基地建设工程、综合物流体系建设工程、基础
疗组程、
“桥头堡”核心区提升工程、营商环境提升工程、人才引进提升工程等)
中市场化的重点项目、引领项目、潜力项目、招商引资项目。
3.项目申报。一是行业推送方式,主要投资区域内的县级行业主管
门重点围绕“十大工程”筛选项目,初选后向州级行业主管部门推送,州
级行业主管部门审核后向基金管理人进行推荐,同时报州发展改革委备案。
二是其他方式,由基金管理人多渠道、多途径主动寻找、发掘市场化的优
质项目,同时帮助开展产业谋划、培育在全省、在区域、在全国甚至全球
具有影响力的龙头企业和龙头项目。
政策依据:州人民政府办公室关于印发《省级财政支持黔东南州打造
对接融入粤港澳大湾区桥头堡”专项资金使用办法方案》的通知(黔东
南州办函〔202234号)
(一)国家政策
在建设用地增减挂钩节余指标跨省域调剂使用时予以倾斜支持。新增
五、东西部协作政
+
黔东南州产业大招商政策
摘编
·103·
建设用地计划指标予以倾斜支持,过渡期内,为国家乡村振兴重点帮扶县
每年每县安排划指600亩,专项用于巩固拓展脱攻坚成果和乡村
用地需求,不得挪用。在规划审批、土地利用、耕地保护等方面予以倾斜
支持。(注:国家乡村振兴重点帮扶县160个,贵州省20个,黔东南州4
个,分别是:从江县、榕江县、剑河县、锦屏县)
政策依据:关于支持国家乡村振兴重点帮扶县的实施意见
(二)省级政策
政策一
1.在“十四五”期间,对营业收入首次突破1000亿级、500亿级、100
亿级、10亿级的企业,分档分别给予一次性奖励,单户企业(一级企业)
奖励不低于200万元,最高不超过1000万元;
对新认定的国家级企业技术中心国家级技术创新示范企业、国家工业
设计中心给予次性补助100;对新认定的省级企业技术心、技术
创新示范企业、工业设计中心给予一次性补助50万元;
对新增上规入统工业企业按每户20万元的标准实施奖励;对新认定为
国家级专精特“小巨人的企业,按照每户100万元的标准给予一
奖励;
对新认定国家级中小企业公共服务示范平台,按照每户40万元的标准
给予一次性奖励;
对新认定省级中小企业公共服务示范平台,按照每户20万元的标准给
予一次性奖励;对新认定的国家级或省级民营科技企业孵化器,由科技部
门分别给予300万元或100万元的补助。
2.册地贵州省,且在境内主板成功市的企业奖励400元;
在创业板、科板上市的企业奖励350万元;对纳入省上市后备资源
并在新三板挂牌的企业,一次性奖励50万元;省内企业境外上市和并购重
+
黔东南州产业大招商政策
摘编
·104·
组上市可参照执行。
3.业投企业采取股权资方式投资于未上市中小高技术2
年(24个月)以上,凡符合《国家税务总局关于实施创业投资企业所得税
优惠问题的通知》规定的,可按照其对中小高新技术企业投资额70%
在股权持有2的当年抵该创业投资企业的应纳税所得额;当年不足
抵扣的,可在以后纳税年度结转抵扣。
4.制造业企业在开展研发活动中实际发生的研发费用,未形成无形资
产计入当期损益的,在按规定据实扣除的基础上,202111日起,再
按照实际发生额的100%在税前加计扣除;形成无形资产的,在上述期间按
照无形资产成本的200%在税前摊销。
5.按规定落实物流企业大宗商品仓储用地城镇土地使用税减半征收政
策。在政策期内,符合条件的物流辅助服务业纳税人依据有关规定,按照
当期可抵扣进税额加计10%增值税应纳税额。符合条件物流企业
可按规定享受西部大开发税收政策,按15%征收企业所得税。
6.在我省新投资注册的医药企业,投资额在1000万元(含1000万元)
以上的,从企业投产之日3年内,企业所交纳的值税地方分成部分,
由企业所在地市、县政府全额补助给企业,用于支持企业发展。项目投产
3年以上、5年以内的,以减半方式给予扶持。经认定为高新技术企业的,
减按15%税率征收企业所得税。
7.广东旅企业一次性组120()上的旅行,从江苏省、
江省、广东省、湖北省、福建省、陕西省、江西省、河南省、山东省、北
京市、上海市、天津市、重庆市境内乘包机来黔旅游(游客从同一出发地
乘坐同一包机入黔),包机在贵州省境内机场进港,旅行团在贵州住宿时
间不低于3晚且游览贵州省境内至少24A级(含)以上景区的,给予旅游
企业每架次3万元奖励。
+
黔东南州产业大招商政策
摘编
·105·
8.广旅游企业一次性组400人(含)以上的旅团,从江苏省
浙江省、广东省、湖北省、湖南省、江西省、山东省、福建省、广西壮族
自治区、四川省、云南省、河南省、上海市、重庆市境内乘旅游专列或包
车厢来黔旅游(从同一出发地乘坐同一车次火车入黔),旅游专列在贵州
省境内进站,旅行团在贵州住宿时间不低于3晚且游览贵州省境内至少2
4A级(含)以上景区的,给予旅游企每车6元奖励;旅行团在贵州
住宿时间不低于4晚且游览贵州省境内至少34A级(含)以上景区的,给
予旅游企业每车次7万元奖励;旅行团在贵州住宿时间不低于5晚且游览贵
州省境内至少44A级(含)以上景区的,给予旅游企业每车8万元奖励。
9.对社会力量兴办的非营利性养老机构,床位数达到30张及以上、符
合相关资质条件的,由省级按每张床位3000元的标准给予一次性建设补助;
市、县两级要同时给予一次性建设补助,合计补助金额不低于3000元,并
逐步提高运营补贴标准。
10.社会力量投资5000万以上兴养老机构,由市、县两政府
结合实际给予一次性奖励。
11.202111日至20301231日,对设贵州省的鼓励产业
企业减按15%
《西部地区鼓励类产业目录》中规定的产业项目为主营业务,且其主营业
务收入占企业收入总额60%以上的企业。
12.“百人领军人才”和“千人创新创业人才”入选当年分别给予100
万元、50万元奖励;考核期满后一次性对第二年、第三年的履行合同情况、
目标任务完成情况、取得业绩成果情况等进行考核,考核为“优秀”的分
别给予200万元、100万元奖励。经考核,若“百人领军人才”年度纳税达
100元至300元、千人创新创业才”年度纳税50万元150
万元的,且其他考核指标都达优秀要求的,一次性给70%的奖励。
+
黔东南州产业大招商政策
摘编
·106·
入选人员经考核为“达标”、“不合格”的,不再给予奖励。
13.招商资项目广东籍引资人奖。第产业、第三产业类项目
实际完成固定产投资额2‰给予奖励;第二产业类项目按实际完
定资产投资额的3‰给予奖励;单个项目最高引资奖励500万元。对引进世
500企业、国500强企业、国内民企500强企业到省投资兴办的
符合奖励条件要求的项目,分再一次性给予30元、15元、5元奖
励(如引进企业同时符合以上两项或三项条件的,以高限进行奖励)。
政策依据:省产业大招商工作领导小组办公室关于印发《粤黔协作产
业招商优惠政策汇编(2021年版)》的通知
政策二
广东旅游业一次性组织120()上的旅行团,江苏省
省、广东省、湖北省、福建省、陕西省、江西省、河南省、山东省、北京
市、上海市、天津市、重庆市内乘包机来黔旅游(游客同一出发地
坐同一包机入黔),包机在州省境内机场进港,旅行团在贵州住宿时间
不低于3晚且游览贵州省境内至少24A()以上景区的,给予旅游企业
每架次3万元奖励。广东旅游企业一次性组织400()以上的旅行团,从
江苏省、浙江省、广东省、湖北省、湖南省、江西省、山东省、福建省、
广西壮族自治区、四川省、云南省、河南省、上海市、重庆市境内乘旅游
专列或包车厢来黔旅游(从同一出发地乘坐同一车次火车入黔),旅游专列
在贵州省境内进站,旅行团在州住宿时间不低于3晚且览贵州省境
至少24A()以上景区的,给予旅游企业每车次6元奖励;旅行团在
贵州住宿时间不低于4且游览贵州省境内至少34A()以上景区的,
给予旅游企业每车次7元奖励;旅行团在贵州住宿时间不低于5晚且游览
贵州省境内至少44A()以上景区的,给予旅游企业每车8万元奖励。
对全职在贵州工作的广东企业高层次人才,符合条件的办理省级“优
+
黔东南州产业大招商政策
摘编
·107·
才卡”或“高层次人才服务绿卡”,和省内持卡高层次人才同等享受在子
女入学、医疗保障、旅游出行、金融服务、落户等方面的服务;鼓励申报
贵州省高层次人才引进计划,经评审入选后,按规定享受相关政策支持和
优惠待遇。
政策依据:《粤黔协作产业招商优惠政策汇编(2022年版)
(三)州级政策
广东企业到黔东南州注册的子公司或广东企业参股的黔东南公司,按
所产生的产业固定资产投资的15%予以奖补,总限额不超过500万元。
政策依据:州人民政府关于印发《黔东南州东西部协作以奖代补鼓励
广东企业投资管理办法(暂行)的通知》(黔东南府函2021117号)
(一)凯里市(黔东南高新区、贵州炉碧经济开发区
政策一
第一条
土地支持。工业企业入驻黔东南高新区或炉碧经济开发区,土
地优惠措施具体以黔东南高新区和炉碧经济开发区制定的标准执行。其他
用地:除商业、住宅项目外,新引进固定资产投资(不含购地款)在3000
万元以上的项目用地,按土地收储成本加上级提留部分作为土地挂牌出让
价格的起始价,但不得低于基准地价的70%
第二条农业支持。对新引进在凯里市注册的首次申报获得国家级、省
级、州级农业龙头企业的招商引资农业企业,分别一次性奖励20万元、10
万元、5万元;首次获国家有机食品认证、国家绿色食品认证的,别一
六、县市政
+
黔东南州产业大招商政策
摘编
·108·
次性奖10万元5元;首次获得国家农产品原产地保护标志、农产
地理标志的一次性奖励10万元;首次获得省级以上良种场、原种场或优质
种苗规模化繁育场称号的单位,一次性奖励10万元。
第三条旅游业支持。对新办固定资产投资(不含购地款)达3000万元
以上的招商引资旅游企业,从税年度起3年内,按本地县级财政收入贡
献的30%奖励给企业。通过招商资引进并新建的酒店,新评定为五星
旅游星级饭店给予500元的次性资金奖励;新评定为四级旅游星
级饭店,给100万元的一次性资金奖励;新评定为三星级旅游星级饭
给予20万元的一次性资金奖励。通过招商引资引进并新建的民宿,首次通
过国家旅游民宿标准评审并达到金宿级标准的,给50万元的一次性资金
奖励;首次通过国家旅游民宿标准评审并达到银宿级标准的,给予30万元
的一次性资金奖励。引进国际国内知名民宿品牌(安缦、悦榕庄、文华等
(或)具有相应知名度和影响的品牌),连续正常经营满3年后一次
扶持人民币100万元品牌资金。对投资额5亿元以上的国际品牌酒店项目可
采取一事一议的方式给予扶持。企业只有一次扶持机会,不能重复申报。
流业支持。新引进的在凯里市进行税务登记,据实申报营
业收入,并开具货物运输发票的招商引资物流企业,在凯里市运营三年内,
按第一年本地级财政收入贡献部分的50%;第二年本地县级财政收入
献部分的40%;第三年本地县级财政收入贡献部分的30%作为参考标准,给
予资金奖励,每户企业每年最高奖励金额不超过100万元。
他产业扶持。对新引进的商贸流通业(批零住餐业)、健
康养老、教育文化娱乐、体育休闲等招商引资服务企业,在凯里市注册成
立法人企业纳入限额以上或规模以上进行统计,年销售额(营业收入)达
5000万元(其中,教育、住宿业和餐饮业1000万元以上,康养产业营业收
2000以上)、10000万元以上其中住宿业和餐饮2000万元以
+
黔东南州产业大招商政策
摘编
·109·
上,康养产业业收5000万元上),分别给予一次性奖励5万元10
万元,以每跨10000元台阶的,给予一次性奖励10万元,每户企
累计奖励最高不超过100万元。
500强、中国500强、民营
500强和独角兽企业,投资额达20亿元以上,投产三年内实现累计
税收超过1亿元以上(增值税和所得税),给予一次性财政奖励500万元。
第七条100
后前3年可在现有省、州补贴的基础上,按照1美元奖励0.01元人民币的标
准给予奖励,单户当年最高奖励不超过50万元。
第八条上市支持。鼓励和支持注册地在凯里市的企业挂牌上市,企业
成功上市后,除省、州奖励外,对在国内主板或海外其他证券交易市场上
市的企业,给总额200万元的一次性资金奖励;在国内中小板和
板上市的企业给予总额150万元的一次性资金奖励;在新三板”
市的企业,给予总额为80万元的一次性资金奖励。对在凯里市注册成功上
市的高新技术企业,另外再给予一次性100万元补助。
第九条一事一议。凡是凯里市新引进的重大招商引资项目,可根据
“一企一策”实行“一事一议”原则决定优惠政策。
第十条其他。凡是凯新引进签订商引资协的企业(
黔东南高新区和炉碧经济开发区优惠措施不能覆盖的其他产业),可遵照
本措施执行。
政策依据:凯里市招商引资十条优惠措施(试行)
政策二
第一条对总投资3000元以上、投资200元以上、亩均
10万元以上、面积不少于15的工业类项目优先保障供地,按评估价挂牌
出让;可以按项目实际,用长期租赁、先租后让、租让合、弹性出
+
黔东南州产业大招商政策
摘编
·110·
让等方式供地。
第二条进入黔东南高新区标准厂房进行生产经营的工业生产加工企业,
自投产后12月内,年产值达到5000/(民族文化创意企业4000/
)的,给予当年所交租金的等额奖励,执行三年。第四、五年达到投资
协议约定条件,可给予当年所交租金50%额度的奖励。同时根据企业
展需要,支持企业按照折旧后评估价回购所租赁的标准厂房及土地。
第三条对在黔东南高新区缴纳个人所得税的企业高级管理人才、高层
次人才、行业尖人才,参照不高于县级地方财政贡20%的标准予
励,每人每年最高不超过50万元,每个企业不高于10人,奖励时间为投产
后连续3年。同时,上述人员在教育医疗等方面享受优先待遇。
第四条在协议约定时间内到规模以上工业企业标(或规上企
改扩能项目),且年产值在上年度基础上增长30%以上、县级地方财政贡献
增长10%以上的规模以上工业企,可以给予不高于县级地方财政贡献
量部分50%的奖励,最高不超100万元。连续三年达到经济贡献奖励条件的,
第三年可以给不高于县级地方财政贡献增量部90%的奖励,最高
300万元。
第五条对主营业务收入达2000万元以上的招商引资企业,对生产厂
房及除办公楼、宿舍以外配套辅助设施的城市基础设施配套费鼓励企业先
出资办理,所产生全部费用按其县级地方财政贡献由财政资金进行补贴扶
持,直至补贴完毕。
第六条区内通过认定的高技术企业一次性给5万元奖励;高
术企业迁移到黔东南高新区落户的,一次性给予5万元奖励。上年度R&D
200500万元、5001000万元、1000万元以上的企业,按照相关文件
规定的允许加计扣除的研发费用分别给予3%5%8%的资助,最高不超过
100万元。
+
黔东南州产业大招商政策
摘编
·111·
第七条拥有3项以上()自主知识产权,且其中至少2项为有效发明专
利,企业产值达到2000万元及以上且纳税额达100元的企业
次性给予5万元奖励;拥有4项以上()自主知识产权,且其中至少有3项为
有效发明利,企业年产达到5000万元以上且年纳税额达200万元
的企业,一次性给予10万元奖励。
在黔东南高新区投资大健康医药产业、大数据电子信息产
业、民族文化创意产业的企业,可通过帮助其申请贵州省中小企业信贷通、
协调凯里市级担保公司给予融资支持。
第九条对落户区内的大健康医药企业可给予以下扶持:
1.对从省外新引进医药企业及其上下游配套产业,签订投资协议5000
万元(含以上),建成投产后。按照固定投资额的3%给予企业补助,最高不
超过200万元。对固定投资3000万元(以上)技改扩能项目,按
济贡献地方增量部分的30%予以一次性奖励,最高不超过200万元。
2.对将药品生产批件的生产地址变更到区内的大健康医药企业,该药
品上年度营业1000万元()2000元的,给予最20万元奖励;
药品上年度营业收入2000万元(含以上)的,给予最高30万元奖励。单个企
业年度最高奖励200万元。
3.对新获得保健食品批准字号(卫食健字号或备案号)、特殊用途化
妆品和特殊医学用途配方食品批准文号的特色健康产品,在本地投产并上
市销售1年,未出现质量、安全等事故,单品销售收入超过500万元,按单
品销售收入给予1%的扶持奖励。
4.对新获批国家标准的中药配方颗粒品种,单品补助30万元;对在国
家药典委员会新完成备案的省中药配方颗粒标准,单品种补助3万元,
每个企业每年高不超过200补助。对医药企业引进独家药品种、
独家医保品种、新药、全国独家产品,在本地投产并上市销售的,按照企
+
黔东南州产业大招商政策
摘编
·112·
业当年县级地方财政贡献的50%给予奖励,最高不超过200万元。
5.对在区内投资建设苗侗民族医药的国家级、省级研究机构分别按照
固定资产总投资的20%10%给予科研经费支持,对成功转化且市场销售额
达到2000万元以上的,一次性给予50万元奖励。重点支持医疗器械、医疗
辅料、苗侗医药制剂等成果转化,经认定,按该品种实际销售金额的5%
予奖励,最高200万元,单个企业每年最高500万元。
6.支持顶尖科技人才和创新团队入驻黔东南高新区,对重点实验室等
重大创新平台、重点生物医药企业或机构引进的优秀青年人才,经认定,
对其在区内购买的凯里市首套住房给予10万元一次性补贴。
对成功申报为规模以上工业企业的大数据电子信息类企业,
可享受物流补贴或免费物流专线运输支持。物流补贴标准为企业县级地方
本级贡献10%30%补贴年限1-3年,年最补贴不超50万元。
享受免费物流专线运输支持的数据电子信息类企业,年限最长不超过3
年。
第十一条凡是黔东南高新区新引进的重大招商引资项目,可根据“一
企一策”实行“一事一议”原则决定优惠政策。
第十二条本措施自发布之日起施行,由黔东南高新区管委会负责组织
实施,并由其负责进行解释。遇国家、省、州相关政策调整另有规定的,
从其规定。
政策依据:黔东南高新区招商引资十二条优惠措施(试行)
政策三
第一条 土地支持
1.凡新引进的符合凯里市城镇建设和土地利用规划,且固定资产投资
3000万元以上、投资强度在200万元/亩以上,亩均税收高于10万元//
年,供地面积不少于15亩以上的工业类项目优先保障供地需求,出让地价
+
黔东南州产业大招商政策
摘编
·113·
按《全国工业用地出让最低价标准》执行。对于以玻璃加工为重点的新型
建材产业,铝及铝加工为主的基础材料产业和以酸汤、蓝莓加工为重点的
特色生态食品加工业等重点扶持产业,对应的项目用地出让价按照《全国
工业用地出让最低价标准》的10%70%执行。
2.供地方式。鼓励采取长期租赁、先租后让、租让结合、弹性年期出
让等方式供应工业用地,出让土地依法需以招标拍卖挂牌方式供应。以租
赁方式供应土地的,承租方可凭土地租赁合同和缴款凭证办理有关规划、
报建等手续。使用租赁土地达到合同约定转为出让土地的条件后,经出租
人同意,可将承租的全部或部分土地按协议方式办理出让手续。工业用地
弹性年期出让,出让年限原则上按1030年确定,工业用地在取得弹性年
期土地使用权期满时,企业可申请延长土地使用年期并签订出让合同的补
充协议,经批准并按相关规定补缴土地出让金后,办理不动产变更登记。
第二条 标准厂房支持
鼓励企业进驻标准厂房,在园区设立中小企业孵化园,凡入驻标准厂
房的企业,自目投产后12个月,一楼产值强度达5000/(年·
方米),二、、四楼产值强度达3000/(年·平方米)企业达到
协议约定条件后,实行政策奖励“三免两减半”(前三年免缴全额租金,
后两年租金减半缴纳)。具体执行方式:先交后奖(投资协议书签订之日
起三个月后开始计算,前三年以当年当月进行收缴,次年当月进行奖励,
4年、第5年租金减免50%奖励;免租期内,项目方仍需缴纳物业费)。
第三条 城市基础设施配套费支持
主营业务收入达到2000万元以上的招商引资企业,对生产厂房及除办
公楼、宿舍以外配套辅助设施的城市基础设施配套费由企业自行缴纳,所
产生全部费用按其所缴纳地方财政贡献值由财政资金进行奖励,直至奖励
完毕。
+
黔东南州产业大招商政策
摘编
·114·
第四条 人才支持
1.对在炉碧经济开发区缴纳个人所得税的企业高级管理人员(包括董
事长、副董事长、总经理、副总经理、监事会主席、总经济师、总会计师
或相当层职务的人员,个企510人),按照实纳个人所得税
县级财政收入献的50%标准以奖励,每人每年最高不超50万元,
奖励时间为投产后连续3年。
2.外来投资者、高层次人才及行业顶尖专业技术人才在子女入托就学
等方面享受优先待遇。
第五条 升规入统支持
对新申报规模以上工业业且连续2年达到规模以工业企
的,在省、州奖励基础上一次性给予20万元的入规奖励。奖励资金经统计、
工信等有关部门认定后兑现。
第六条 科技创新支持
拥有2项以上(含)自主知识产权,且其中至少1项为有效发明专利,
企业年产达到2000元及上且年纳额达100元的企业,一
给予5元奖励;拥有4以上含)自主知识产权,且其至少有2项为
有效发明利,企业年产达到5000万元以上且年纳税额达200万元
的企业,一次性给予10万元奖励。
第七条 企业壮大支持
在协议约定时间内达到规模以上工业企业标准(或规上企业技改扩能
项目),且年值在上年度基础上增长25%以上、县级地方财政贡献增
10%以上的规模以上主导产业、优势产业和特产业企业,可以给予不
于县级地方财政贡献增量部50%的奖励,最高不超100万元。连续三年达
到经济贡献奖励条件的,第三年可以给予不高于县级地方财政贡献增量部
90%的奖励,最高不超300万元。
+
黔东南州产业大招商政策
摘编
·115·
第八条 融资支持
凡在炉碧经济开发区投资玻璃产业、陶瓷产业、铝及铝加工产业、特
色食品的企业,可通过帮助其申请贵州省中小企业信贷通、绿色发展基金、
协调凯里市级担保公司给予融资支持。
第九条 一事一议
凡是炉碧经济开发区新引进的重大招商引资项目,可根据“一企一策”
实行“一事一议”原则决定优惠政策。
第十条 其他
本措施自发布之日起施行,由炉碧经济开发区管委会负责组织实施,
并由其负责进行解释。遇国家、省、州相关政策调整另有规定的,从其规
定。
政策依据:贵州炉碧经济开发区招商引资十条优惠措施(试行)
(二)丹寨县
政策一
1.对装备制造产业和电子信息产业企业的物流费用进行补贴。县域内
的装备制造企业和电子信息企业产生的物流费用县人民政府给予补贴,按
企业当年所交值税总额30%额度进行补贴,当年增值税额10万元
及以上的即可享受补贴,一年结算一次,每年最高补助200万元。
2.鼓励装备制造企业和电子信息企业采购丹寨县境内的原材料和产品,
凡是采购丹寨境内企业生产的原材料(包括企业生产的产品),县政府按
成交总价款10%补助(以在县国税局开票的数据为准),一年结算一
每年最高补助100万元。
政策依据:丹寨县人民政府关于支持装备制造和电子信息产业加快发
展的通知(丹府发〔20155号)
+
黔东南州产业大招商政策
摘编
·116·
政策二
1.对被授予国家级、省级电子商务示范园(基地)或项目,国家级给
50万元、省级给予20万元的一次性奖励。
2.平台建设补助。为我县企业、网上商城、网店提供服务的第三方电
子商务公共服务平台,与本县实际合作单位(含网店)达50户以上,且软
硬件总投资达30万元(以发票及实际工程量、实物等为依据)以上的,按
投资总额的50%给予一次性补助,最高不超过30万元。
3.O2O体验馆装修补助。主要示和销售丹寨特产文化旅产品
营业面积200方米以上、装方案及预算经县电商办审核通过的企
或个人,按装修投入金额的50%给予补助,最高不超过30万元。
4.对利用各类平台代运营、代推广、代销售等方式,与本县企业(网
店)合作达50家以上,产品上线数达500个以上,年网上销售额达500万元
以上的第三方运营服务商,当年按网上销售额的2%进行奖励,最高不超过
100万元;对年网上销售额实现200万元以上的各类网店,当年按网上销售
额的2%进行奖励,最高不超过50万元;对年网上销售额实现100200万元
的网店或服务中心,当年按网上销售额的1%进行奖励。
5.对每年帮助在册贫困户10户以上,利用网络实现销售总额达10万元
以上的企业,按销售总额的10%进行奖励,最高不超过20万元。
6.凡落户本县的知名电子商务平台,或对本县电子商务发展有重大影
响的项目,实行“一事一议”政策。
政策依据:县人民政府办公室关于印发丹寨县促进电子商务发展奖励
补助实施办法(试行)的通知(丹府办发〔201640号)
政策三
1.业入第一年,从签协议之日起的7个工作日,根据本
中第三条第一款要求按实际使用厂房情况,向政府指定账户汇入拟投项目
+
黔东南州产业大招商政策
摘编
·117·
的厂房预付租金。入驻协议签订之日起一年为期,企业所产生的企业所得
税高于所预付的厂房租金数额时,将预付的租金全额返还;企业所产生的
企业所得税不等或小于所预付的厂房租金数额,预付的厂房租金则冲抵厂
房使用租金,不予退还。
2.企业生产第二年起,根据本办法中第三条第一、二、三款按实际使
用面积缴纳厂房租金。入驻协议签订之日起每满一年为一期,企业所产生
的企业所得税高于所预付的厂房租金数额时,将预付的租金全额返还;企
业所产生的企业所得税不等或小于所预付的厂房租金数额,预付的厂房租
金则冲抵厂房使用租金,不予退还。
3.为支持企业发展,入驻的企业前三年在本县所交纳企业所得税金额
高于所使用厂房租金数额时,将享受零租金政策。三年期满后,按市场价
交纳厂房租金,不再享受零租金的优惠政策。
4.企业订协议起7工作日内,根本办法中第三条第款要
求按实际使用厂房情况,向政府指定账户汇入厂房的预付租金作为拟实施
项目的保证金协议签订之日起一年为期,企业在本县发展基建设800
亩以上,带动合作社8个或动贫困30户以上,将预付的厂房租金全额
退还;若发展基地建设500亩以上,带动合作社5个或带动贫困20户以上,
则退还所预付厂房租金的一半数额;若发展基地建300亩以,带动合
作社3或带动贫困户10上,则退还所预付的厂房租金的三分之一数
额;若企业没有在本县发展基地,没有带动合作社或贫困户,根据本办法
第四条第一款之规定减免。
5.企业生产一年后,根据本办法中第三条第一、二、三款按实际使用
面积缴纳厂房租金。入驻协议签订之日起满一年为一期,企业在原基础上
在本县继续发展基地建设500亩以上,带动合作社5或带动贫困户30户以
上,则全额退还;若发展基地建设300亩以上,带动合作社3个或带动贫困
+
黔东南州产业大招商政策
摘编
·118·
20户以上,则退还交租金的一半数额;若发展基地建设100以上
带动合作社2个或带动贫困户10户以上,则退还所交租金的三分之一数额
若企业没有在本县发展基地,没有带动合作社或贫困户,根据本办法第四
条第一款之规定减免。
6.为支持企业发展,入驻的企业前三年在本县所发展的基地、带动合
作社或贫困户达到本规定第四条第二款时,将享受零租金优惠政策。三年
期满后,按市场价交纳厂房租金,不再享受零租金优惠政策。
7.结合企业实际需要,由企业向金钟经济开发区招商引资和投资促进
局或丹寨县金建投资发展有限责任公司申请,根据企业生产经营的状况,
厂房租金可享受“三免两减半”政策。
政策依据:县人民政府办公室关于印发《贵州金钟经济开发区标准厂
房入驻管理规定(试行)的通知》(丹府办发〔201750号)
(三)黄平县
1.电子、软件及其上下游配套产业,文化创意、旅游产品制造及其上
下游配套产业;食品药品及其上下游配套产业,符合环保要求、环境保护
规划和相关法律法规。投资强度不低于500/㎡,或提供就业岗位不低于
1/30㎡,或产出强度不低于1000//年(按实际使用建筑面积计算)。
与贵州省黄平县舞源投资开发有限责任公司签订标准厂房租赁合同,并每
年预缴一年的租金(满一年后按照本办法第四条第一款给予结算)和物业
管理费。
2.1-3年,按第一层5//月,第二层4//月,第三层以上3
//收取;4-5,按第一层6//,第二层5//,第三层
以上4//月收取;第6年开始,每两年按上年租金递增10%收取。
3.3年内,每年达到本办法二条第三款条件其中一条件的,
免当年租金,达不到条件的,按完成比例退还租金。
+
黔东南州产业大招商政策
摘编
·119·
政策依据:黄平县槐花工业区标准厂房管理办法(试行)(黄工管通
20144号)
(四)镇远县
政策一
1.企业投资新建厂房,需征收工业用地的企业,按固定资产投资额度
给予土地挂牌价格地方留存部分不同比例的资金支持:固定资产投资1000
万元至2000元的企业投产后参土地挂牌价格地方留存部分30%以内额
度给予项目建设资金补贴2000万元至5000万元的参照土地挂牌价格地方
留存部分40%内额度给项目建设资金补贴5000万元以上照土地挂
牌价格地方留部分60%内额给予项目建设资金补贴;属新技术项
目参照土地挂牌价格地方留存部分80%以内额度给予项目建设资金补贴。
2.业按约定时间投产产的,自投产之日3年内,每年给
业实际缴纳增值税地方留存部分不同比例的资金扶持:增值税1000万元以
下的视企业贡献参照所缴税款地方留存部分的30%以内额度给予项目建设
资金贴,2000万元5000万元参照所缴税款地方存部分40%以内
额度给予项目建设资金补贴5000万元以上的参照所缴税款地方留存部分
50%内额度给予项目建设资金补,属高新技术项目参照所缴税款
方留存部分的60%以内额度给予项目建设资金补贴。
政策依据:县人民政府办公室关于印发《镇远县工业发展资金设立管
理暂行办法的通知》(镇府办函〔2019121号)
政策二
1.条开发区标准厂房实行"租售并举"政策,鼓励入驻企业购买,售价
原则上按照厂房评估价进行出售,也可结合入驻企业的固定资产投资、产
业带动和税收贡献等情况"一企一策"进行商议。
2.厂房租金优惠。入驻企业达到投资合同约定的投资效益,厂房租金
+
黔东南州产业大招商政策
摘编
·120·
原则上实行"三免两减半"政策(前3年免费租用,后2年减半收取)。入驻
企业达不到投资合同约定的投资效益,厂房租金无优惠。厂房年租金实行
预交,入驻企业投产一年后,发区组织相关部门对入驻企业进行"年产
对月"考核,考核达标,工经公司在5个工作日内将厂房预交租金无息退还
入驻企业,下一年度租赁周期参照上一年度租赁周期执行。
3.符合开发区首位产业及上下游配套产业的项目入驻标准厂房可采取
“一事一议”方式给予优惠奖励。
4.鼓励入驻企业积极申报高新技术企业、入库等,达到条件给予省、
州、县优惠政策奖励。
政策依据:县人民政府办公室关于印发《贵州黔东经济开发区标准厂
房管理办法(试行)的通知》(镇府办发〔202113号)
(五)三穗县
政策一
1.对于农业产业结构调整和林下经济主导产业自主投入5000万元以上,
覆盖带动全县发展的优强企业,县级采用联营、入股等方式,按照不低于
总投入资金30%的原则整合资金共同发展。
2.对创建“百千万”产业示范基地,主导产业集中连片,流转土地面
积在200499亩之间,按100/亩的标准给予土地流转补助费;流转土地
面积在500999亩之间,按150/亩的标准给予土地流转补助费;流转土
地面积在1000亩以上,按200/亩的标准给予土地流转补助费;对创建坝
区“百千万”产业示范基地,主导产业集中连片,土地流转率达到100%
单品连片种植覆盖率达80%以上、基地亩产值达13000元以上的“百千万”
产业基地,分别按照百亩产业5元、千亩产业基地20元、万亩产
业基地50万元的标准给予产业示范基地一次性奖励。
3.积极发展林下经济,鼓励做大猴头菇产业。对集中连片种植基地,
+
黔东南州产业大招商政策
摘编
·121·
菌棒达30万棒以上100万棒以内、100万棒以上500万棒以内、500万棒以上
的,分别按5元、10万元、50万元的标准给予产业示范基地一次性奖
励。
4.对符合县级产业规划的经营主体通过扶贫再贷款对其提供低成本资
金支持,县级政按企业实际获得贷款给予贴息50%,贴息期限不超过
年;鼓励保险机构稳步拓展农业保险品种,扩大农业保险覆盖面。
5.对符合扶贫项目扶持的坝区和林下经济“百千万”产业示范基地,
经专家评审后,积极帮助按程序分别申请200元以500万元以内、
500万元以上的扶贫项目扶持。
6.鼓励和支持“党社联建”打造林下经济产业示范基地,对基地建设
自筹资金大于目总投入资金30%的,剩余缺口资金可按照财扶贫项目
资金申报程序申请扶贫项目资金支持。
7.对无财政扶贫项目资金支持,林业产业实施主体自行发展林下经济
主导产业(猴头菇)的示范基地,种植规模30万棒以上,带动农户就业20
户以上,持续种1以上,林业产业发展基地实施主体可按大棚建设
投入资金30%请产业一次性展资金补助,每个基地最高补助累计
超过20万元。
8.鼓励各经营主体规模化发展猴头菇、羊肚菌“两菌”产业,对无财
政扶贫项目资金、无大棚建设补助资金的“两菌”产业基地,集中连片种
植猴头30万棒以上,带动农户就20户以上,持续种植1年以上,每棒
可申请0.1产业一次性补助资金,每个基地最高补助不超10元;
中连片种植羊100亩以上的产业发基地,带动农户就50户以
每亩产鲜菇300斤以上,持续种植1年以上的,每亩可申请1000元的产业一
次性补助资金,每个基地最高补助不超过10万元。
9.加大5008000
+
黔东南州产业大招商政策
摘编
·122·
(含8000)以上不12000元的,每亩补助1000元;12000元(含12000
元)以上不足20000,每亩补1200元;20000元(含20000)以
的每亩补助1400元,由经营主体所在乡镇(街道)积极帮助按程序进行奖
补申报。
10.对农企业自行投资建设的环设备施,竣工验收合格后,
环保部门认可,正常运行的,按实际投资额的5%给予一次性补助。
11.鼓励业产业化经营企业进行产品深加工,对年内新增主
涉农产业加工产值收入达2000万元以上的农业产业化经营加工企业,按主
营涉农加工产值产业收入的1%给予一次性奖励。
12.对当被评为国家级龙头涉农业、级龙头涉农企业、州级
头涉农企业,分别予以一次性奖励企业100万元、20万元、5万元。同一企
业同年多级获评的,按最高标准一次奖励。
13.对当获得国家驰名商标、贵省省质量奖、贵州省省长质
提名奖的规模以上的涉农企业,分别一次性奖励企50万元、30万元、10
万元;对当年获得有机认证、绿色认证、地理标志保护产品的企业(有机
认证种植300以上,有机畜禽类产品养殖企业需连续认证三以上
一次性奖励企业30万元。同一企业的产品同年多级获评的,按最高标准一
次性奖励。
14.对于持制定国际标准、国家准、业标准(含贵州省地方
准)、黔东南地方标准并发布实施的单位,一次性每项分别给予主持单位
30万元、20万元、10万元、6万元奖励。
15.对吸建档立卡贫困劳动力、地扶搬迁劳动力就业、就业
难人员、零就业家庭人员稳定业,并签1以上劳动合同的,按每人
500元的标准,给予生产经营主体一次性补贴。
16.对吸建档立卡贫困劳动力、地扶搬迁劳动力就业的和参
+
黔东南州产业大招商政策
摘编
·123·
企业吸纳就业困难人员、零就业家庭成员等四类人员,给予经营主体一定
期限职业培训贴,按照原则上每人每月不超过500元,按实际吸纳就
月数进行核算,最长不超过6个月。
17.
(含两年)以上的国家认可的高级职称人员(除在职国家工作人员外),
5000/年·人的标准给予生活补助。
政策依据:中共三穗县委三穗县人民政府关于支持农业产业化和林下
经济产业发展的若干意见(穗党发〔20204号)
政策二
1.对使用土地自建生产用房,年均产值达到150万元/亩,且年均纳税
达到3万元/亩及以上的工业企业,按1万元/亩的标准连续奖励三年。
2.对企业新建固定资产投资达1000万元以上的工业项目,按固定资产
投资总额的2%一次性给予补助,补助资金额度上限500万元。
3.利用工业发展基金、扶贫资金、上级专项资金等,以股权等方式重
点支持有发展潜力的规上、拟入规、其他中小微企业,作为项目资本金投
入在穗工业投资项目。积极为企业办理不动产权证,利于企业融资担保抵
押。
4.依托省设立的贷款代偿和补偿资金池,对中小微企业的银行融资,
由政策性担保机构实行无资产抵押担保服务。
5.将企业的纳税额与银行授信有机结合,采取差别化的贷款额度设计。
根据不同的区域、税种、客户纳税信用等级、在相关银行开立基本结算户
及纳税账户情况,为企业设置数倍于缴税金额的贷款额度上限,扩大企业
的融资渠道,缓解融资。
6.对新引进的外商投资企业,开工建设生产经营场地建设费(含环保
设备等费用)给予30%的支持。
+
黔东南州产业大招商政策
摘编
·124·
7.对规上企业和拟入规企业,可凭订单合同或企业应收账款等,借用
工业发展专项金不超过300用于企业流动资金周转(免息),借
款期限不超过6个月。
8.对新入规上工业统计库的企业,后续年度保规的分两个年度共奖励
100万元,入规当年奖励50万元,第二年产值实现正增长再奖50万元。
9.产值2000万元1亿元上工业企业,年产值较上年
增长20%以上的,奖励30万元,年产值较上年同比增长30%以上的,奖励50
万元。对年产值达到亿元及以上的规上工业企业,且年产值较上年同比增
10%以上的,奖励40万元,年产值较上年同比增20%以上的,奖励60
元。
10.对工企业扩大产能实际发生设备迁安装、生产线改造、
房租赁装修等费用实行“一事一议”给予支持,上限支持500万元。
11.对规企业和拟入规企业,对业企实行产品运输物流补助
按照企业实际物流运输费用的10%进行补助。
12.对三籍工人新进工业企业持就业过一个自然年的,一般
人和建档立卡困户(含易搬安置户)分别按照0.12万元/人和0.2万元/
人标准一次性补助给企业。
政策依据:县人民政府印发《关于进一步支持工业经济高质量发展的
政策措施》的通知(穗府发〔202013号)
政策三
1.入驻企业享受国家新一轮西部大开发和我县招商引资相关优惠政策。
2.入驻企业,积极申报入库,纳入规上企业进行管理的,可根据合同
约定,按其投资行业分类、年产值及税收等条件指标给予具体优惠。
3.驻企年产值达到租合同约定产值的,1-3年租金全返还,
4-5年返还一半,具体以租赁合同约定为准。
+
黔东南州产业大招商政策
摘编
·125·
4.的生型企业经营三年后,同时满以下条件的,4-6年租
金实行全额返还。一是固定资产投资强度达到每平方米3000元。二是年度
缴纳税收实现平方100元以上。三是就业人数100平方不低5
或总人数200以上(高新企除外)。四是年主营业务收入达到每
方米3000元。
5.具备本条34款条件的企业其租金交由园投公司代管,年终由开发
区管委会组织相关部门考核兑现。
政策依据:县人民政府关于印发贵州三穗经济开发区标准厂房管理办
法的通知(穗府发〔20186号)
政策四
1.进驻园区工业企业的“五通一平”由经济开发区负责,原招商落户
园区内的工业企业按原签订相关合同、协议执行。
2.工业企业自行投资建设的环保设备设施,经环保部门竣工验收合格
额的5%性给
外)。
3.对投资强度150万元/亩-250万元/亩的工业项目,在符合城镇建设
和土地利用规的前提下,优先保障工业项目用地,且对投资度达250
万元/及以上的工业项目实行点供”方式供地。对优先发展产业且
用地集约的工项目,可按不低于所在地土地等别最低标准的70%执行,
并按程序办理工业用地登记手续。
4.项目地挂牌出让保证金,按应缴总保证金额度50%进行
缴纳,工业项目用地一次性缴纳土地出让价款有困难的,允许分期缴纳,
但原则上不得超过1年,特殊项目可以约定在2年内全部缴清。重点工业企
业和重点工业项目用地申报可参照批次用地方式依法报批。支持工业企业
采用长期租用、先租后让、租让结合的工业用地供给方式。
+
黔东南州产业大招商政策
摘编
·126·
5.对租赁园区国有厂房的工业企业,按《贵州三穗经济开发区标准厂
房管理办法》文件执行。
6.税务机关每年定期向社会公布全县工业企业税费清单和税费优惠清
单,严禁在清单之外向企业收取任何税费,认真落实税法规定范围的增值
税抵扣或减免、所得税减免、出口退税、其他行政事业性收费等税费优惠
政策,工业企业行政事业性收费项目一律按最低标准执行。
7.入园工业企业新建工业生产性建筑,所收取城市建设配套费由县财
政全额安排用于企业基础设施建设。
8.对年纳税所得额低于50万元(含50万元)的小型微利企业,其所得
按减50%计入应纳税所得额,按20%的税率缴纳企业所得税。安置残疾人小
微企业,单位支付给残疾人的工资可在企业所得税前据实扣除,并可按支
付给残疾人实际工资的100%加计扣除。
9.企业办的各类学校、托儿所、幼儿园、非营利性医疗机构、敬老院
自用的房产,免征房产税。对营利性医疗机构,自其取得执业登记之日起,
3年内对自用的房产免征房产税,3年免税期满后恢复征税。
10.经批开山填海整治的土地和造的弃土地,从使用的月份
免征土地使用税5年,第6年至第10年减半征收。
11.安置疾人就业的单位(包括利企、盲人按摩机构、医疗
构和其他单位,不包括个人),在一个纳税年度内凡同时满足规定的条件,
可免征其自用土地该年度城镇土地使用税。
12.工业业应缴纳的土地使用税额缴后,按照地方所得部分
80%的标准用县工业企业发展基金予以奖励。
13.对纳人销售自产的利用风力产的力产品,实现增值税即
即退50%的政策。出口货物劳务企业实行免征和退还增值税。
14.对年税金增长15%以上且年纳税额在50万元以上的工业企业,其主
+
黔东南州产业大招商政策
摘编
·127·
营业务收2000元以上,按新税收级所得部分的50%的标准用
业企业发展基金给予奖励,最高奖励金额不超过50万元。
15.工业业从县级以上(含县级各级府财政部门及其他部门
得的专项财政资金,凡符合相关条件的,可作为不征税收入进行企业所得
税处理。确因短期资金周转困难的工业企业,经省级以上税务机关依法批
准后,可延期缴纳税款,延缴限最长不得超3月。禁提前向工
企业重复征税、征过头税、提前征税。
16.被认定为经营1困难、不能按照当地最低职工工资标准发放工资的
企业,可申请缓缴社会保险费工伤保险除外),缓缴期不超过3个月,
缓缴期间不影响参保人员享受社会保险待遇。
17.自工商登记注册之日起3年内,对安排残疾人就业未达到规定比例、
在职职工总数30人以下(含30人)的小微企业,免征残疾人就业保证金。
18.县财设立工业企业发展专项金,行县级财政扶持机制,
依法生产经营且税收缴纳和产值贡献较大的工业企业给予扶持。我县工业
企业发展专项基金从2018年起安排2000万元,并纳入财政预算。之后的年
份按不低于上一年的实际应扶持基数纳入预算,若实际需要超出当年预算,
县财政按程序予以据实追加拨付。
19.对有场、有销路、有订单,暂时乏流动资金的工业企业
企业可用不动产、动产、订单等方式抵押,可从工业企业发展专项基金中
借支不超过200万元的资金用于生产周转。
20.县内金融构采取第三方担保款等方式支持工业业融资贷款,
实行“最高额抵押登记、一次授信循环使用”贷款服务。
21.县内融机构对面临暂时流动金困的重点工业企业不降低
有授信额度,对资产负债率较高,但在警戒线以下的重点工业企业不降低
信用等级。对长期盈利能力强、技术先进的企业,不搞“一刀切”抽贷。
+
黔东南州产业大招商政策
摘编
·128·
22.对新园的国家工信部、科技、省信委、科技厅等部门认
的新兴产业、高新技术产业的工业企业贷款实行财政贴息三年政策优惠,
第一年按照同期贷款基准利率计算利息金额的50%给予贴息,第二年按照
同期贷款基准利率计算利息金额的40%给予贴息,第三年按照同期贷款基
30给予年度
l00万元。
23.销售收入1000元并比上增幅20%以、税收基50
元以上且增幅15%以上的工业企业,当年内新增流动资金银行贷款,按照
同期贷款基准利率计算利息金额的30%给予贴息,单户企业贴息总额不超
l00万元。
24.工业业注册商标时,除享受家、、州政策外,县财政再
予注册费50%补贴。鼓励工企业积极申报各类质量管理体系认证
对当年获得省级以上质量认证的,一次性奖励企业50万元;对当年获得国
家级著名商标、名牌产品的工业企业,一次性奖励企业50万元;对当年获
得省级著名商标、名牌产品的工业企业,一次性奖励企业30万元;对当年
获得省级以上绿色食品、有机产品认证的企业,一次性奖励企业20万元。
同一企业的产品同年多级获评的,按最高标准一次奖励。
25.对被新认为国家或省级技术新中心、重点实验的工业企业,
除享受国家、省、州政策外,财政再一次性分别奖励100万元、50元,
新认定为国家或省级企业技术中心、技术创新示范企业的,除享受国家、
省、州政策外县财政再一次性分别奖100元、50元,新认定为
新技术企业的工业企业,除享受国家、省、州政策外,县财政再一次性奖
20万元。
26.对入创新型领军企业、科技小巨企业、科技型小巨人成
企业、科技型种子企业、经认定的大学生创业企业,除享受国家、省、州
+
黔东南州产业大招商政策
摘编
·129·
政策外,一次性分别奖励300万元、30万元、15万元、10万元、5万元。
27.支持创空间建设,除享受国、省州政策外,县财政再一
性奖励3万元;对经认定为国家级或省级的众创空间(新型孵化器,除
享受国家、省、州政策外,县财政再一次性分别给50万元、25万元的能
力建设资金支持。
28.鼓励业企业建立技术中心、品研中心等研发机构,提升
业研发能力,经县工信、科技、发改等部门认定,除享受国家、省、州政
策外,县财政再给予建中心(站)5万元补助。
29.对符电力直接交易条件的工企业积极协助客户办理电力
供交易手续,降低工业企业生产成本。
30.县级培训构有计划有组织地工业企业用工开展费技能培训;
对企业新录用人员,与企业签6个月以上期限劳动合同,在劳动合同签
订之日起6个月内,企业自主开展培训的,经县级培训机构核准,按500
/人的标准补助给企业。
31.对与业企业签订劳动合同,在同工业企业务工两年(含
年)以上的高级技师、高级工程师、高级经济师等国家认可的高级职称人
员,经县人社门核准认可,5000/、人的标准给予生补助
在企业工作一年以上,新评定高级工程师、工程师、高级技师、高级技工
职称的评定费用实行全额补贴。
32.鼓励业企业技能人才参加国、省州行政机构(委托)举
各类技能大赛,对获得国家级技能大赛一、二、三等奖的分别给予个人10
万元、8万元、6元一次性奖励,对获得省级技能大赛一、二、三等奖的
分别给予个7万元、5万元3元一次性奖励。获得州级技能大赛一
二、三等奖的分别给予个3万元、2元、1元一次性奖励。对工业企
业董事长、总经理参加省级以上工业企业行业生产或经营类提升管理培训
+
黔东南州产业大招商政策
摘编
·130·
(不含学历教育和商学院),经工信部门核实认定,凭证书和发票给予培训
学费全额补助。
33.工业企业法人代表、职工及其家属的户口可以自愿迁入或者迁出,
其家属就业及子女在入学等方面与本县居民享有同等的权利。
34.对在县企业工作的全日制硕研究以上学历人员,为其提
不少于100的住房租赁补贴。同时,一次性给予所在企业加社会保
一年以上的硕士2万元、博士3万元的生活补助。
35.工业业参加由国家、省、州县各政府部门组织的省内外
境外各类工业产品展览展销会议或活动,对企业人员交通费、食宿费、产
品运输费、企业展位费等费用给予80%补贴。
36.积极织推荐县域工业企业产进入黔东南州中小企业推荐
录》,县直各部门、事业单位、人民团体和国有企业在实施项目时,需优
先采购本县中小企业产品。
37.支持业企创安”。新创安全准化三级、二级、一级
业企业(矿山、烟花和危化品企业除外),规模以上的工业企业由县财政分
别补贴3万元5万元7万元工作经费,规模以下的工业企业,由县财政
分别补贴1万元、3万元、5万元工作经费。
38.支持工业企业“入规”。对当年新“入规”的企业(注销后新注册
的除外),除州级奖励10万元外,县财政再奖励40万元。
39.支持工业企业技改。工业企业当年引进单台价款达10万元以上(
10万元,不含税)的先进装备,给予10的财政补贴,单个企业(集团)
补贴金额不超过100万元。
40.支持业企业上市。对注册在县,在境内主板成功上市的
业奖励200万元;在中小板、创业板成功上市的企业奖励150万元;对纳入
州级上市后备资源库并在新三板挂牌的企业奖励30万元。
+
黔东南州产业大招商政策
摘编
·131·
41.实行县级领导干部系服务企业制度,重点解决企业(
目)准入落地问题、订单服务问题、市场开拓问题、物流成本问题、招工
用工问题、资金短缺问题、乱摊派乱收费等服务事项。鼓励工业企业生产、
复产、满产、达产,提高工业产值和增加值。
42.建立行业主管部门务工业制度,各行业主管部门主动
工业企业并制定具体服务工业企业措施报县委县政府督查室备案。
政策依据:中共三穗县委办公室三穗县人民政府办公室关于印发《三
穗县支持工业企业发展42条政策措施》的通知(穗党办发〔201824号)
(六)天柱县
1.对当年申报成功的四上”企业给予一次性奖励。一是对工业企业
给予一次性奖励。规模以上特色食品加工企业,每户奖励资金30万元;规
模以上民族工艺品加工企业,每户奖励资金50万元;其他规模以上工业企
业,每户奖励资金20万元。
2.对商贸企业给予一次性奖励。限上批发企业奖励资金65万元;限上
零售企业奖励资金15万元;限上住宿和餐饮及大的个体企业奖励资金10
元。
3.资质等级以上建筑和房地产开发经营企业、规模以上服务业企业分
别奖励资金5万元。
4.规模以上工业企业产能提升奖补标准产值在2000万元至5000万元
(不含5000万元)之间的规模以上工业企业,工业增加值较上年全年同比
增长20%以上的,每户企业给予补资20万元;工业增加较上年全
同比增长30%上的,每企业再增加奖补资10元;产值5000万元
(含5000万元)至1亿元(不含1亿元)之间的规模以上工业企业,工业增
加值较上年全同比增长20%的,每户企业给予奖补资金30万元;
业增加值较上度累计同比增30%上的,每户企业再增加补资20
+
黔东南州产业大招商政策
摘编
·132·
万元。产值在1亿元(含1亿元)至5亿元(不5亿元)之间的规模以上工
业企业,工业加值较上年全年同比增20%上的,每户企给予
资金50元;业增加值较上年度累计同比增长30%以上的,每户企业
增加奖补资金30万元。产值在5亿元(含5亿元)以上的规模以上工业企业,
工业增加值较年度累计同比增长20%以上的,每户企给予奖补资金80
万元;工业增值较上年度累计同比增30%上的,每户企再增
补资金50万元。
5.上年产值3亿元以上,且符合我县主导产的工业企,一
次性给予100万元的奖励。
政策依据:县人民政府办公室关于印发《天柱县“四上”企业扶持奖
励办法(暂行)》的通知(天府办发〔202113号)
(七)台江
政策一
一、项目用地支持
1.对固定资产投资在2000万元以上(不含开发前期已垫付的土地征收
补偿费)且投资强度不低于《贵州省产业园区工业项目建设用地控制指标》
相关标准的意向企业,鼓励其通过招标拍卖挂牌出让方式取得国有建设用
地使用权,土地价款优惠政策照《贵州省国土资源厅关于印发<贵州
产业园区工业建设项目用地控制指标(试行)><贵州省产业园区工业地
价优惠办法(行)>通知》(黔国土资发〔201148)相关标
行。
2.鼓励工业企业通过长期租赁、租让结合、先租后让和弹性出让等多
地使县内
2000万元以上的意向用地企业,缴款方式可以调整为:保证金不低于出让
起始价款的20%,自签订出让合同之日起,一个月内缴纳成交价款50%,一
+
黔东南州产业大招商政策
摘编
·133·
年内缴清所有成交价款。
3.对投资强度达250万元/亩及以上的工业项目,纳入重点项目优先保
障项目用地。
二、厂房租赁及代建政策
4.入驻园区标准厂房进行生产经营的企业,自投产后12个月内,年产
值达到5000/的,给予当年交租金的等额奖励,执行三年。第四
五年达到投资议约定条件的,可给予当年所交租金50%额度奖励。同
时根据企业发展需要,支持企业按照评估价回购所租赁的标准厂房及土地
(国有土地尚未出让的除外)。
5.鼓励社会资本建设标准厂房,统一由园区承租,再由园区按相关标
准转租给第三方企业使用,第三方企业同样享受标准厂房优惠政策。
6.符合发区主导或特色产业,固定产投3亿以上,科技
含量高、产业带动力强的工业项目,确需代建厂的,由开发区根据项目需
要出资代建厂,投资方须交纳不低于10%的代建保证金并与开发区通
合同约定回购期,投资方每年还需缴纳资金占用费,资金占用费按总投资
额的中国人民银行授权全国银行间同业拆借中心公布的同期市场报价利率
计算,回购时限最长不超过5年。
三、财政扶持政策
7.县财政设立产业发展专项基金,实行县级财政扶持机制,对依法生
产经营且对县级财政和产值贡献较大的企业给予扶持。
8.对新引进的产业类企业,按实际固定资产投资达到5000万元以上、
1亿元以上、3亿元以上、5亿元以上的,投产达产后经认定分别给予100
元、300万元、500万元、800万元奖励。
9.对新引进的产业类企业,投产后前五年根据产值情况予以相应奖励。
对年产值2000万元及以上的前三按照企业对县级财政贡献的50%
+
黔东南州产业大招商政策
摘编
·134·
予以奖励,后年按照企业对县级财政贡献25%予以奖励;对年产
5000元及以上的,前三年按企业对县级财政贡献的60%予以奖励
后两年按照企业对县级财政贡献的30%予以奖励;对年产值达到1亿元及以
上的,前三年照企业对县级财政贡献70%以奖励,后两按照
对县级财政贡献的35%予以奖励;对年产值达到5亿元及以上的,前三年按
照企业对县级政贡献的80%奖励,后两年按照企业对县财政贡献
40%以奖励;对年产值达到10亿元及以上的,前三年按照企业对
财政贡献的90%予以奖励,后两年按照企业对县级财政贡献的45%予以奖励。
10.对新引进的企业达规模以业标准,且年产值在上年度基础
上增长30%以上、县级地方财政贡献增长10%以上的规模以上企业,给予县
级地方财政贡献增量部分50%的奖励。连续三年达到经济贡献奖励条件的
第三年给予县级地方财政贡献增量部分90%的奖励。
11.对新引进的世界500强、中国500强、独角兽企业、民营500强、其
他优强企业,际投资额达到10亿元以上的,分别给予一次性500
元、400万元、300万元、200万元、100万元。鼓励和支持注册地在台江县
的企业挂牌上,对在境内主板上市成功的奖励200万元,在创业板、
创板、北京证券交易所上市的100万元,在新三板挂牌的奖50元。
13.对企业到我县投资发展年上缴税收200万元以上的国家高新技术企
业在省内融资机构贷款的,由县财政按人民银行公布的LPR利率的50%给予
贴息1年,每个项目贴息总额不超过100万元。
四、创新支持
14.对新认定的高新技术企业,给予一次性10万元补助。
15.对于落户我县的省高新技业,投资高新技术产业和战略性
新兴产业链缺失环节或薄弱环节的,给予实际到位投资额2%的一次性补助,
最高不超过100万元。
+
黔东南州产业大招商政策
摘编
·135·
五、引资人奖励
16.鼓励全社会参与招商引资工作,对社会引资人(括商会、协会、
专业机构、办事机构等法人组或其它组织机构及自然)成功引进固
资产投资(不含土地出让金,下同)3000万以上项目到我县落地投产的,
按固定资产投资的3‰给予奖励,单个项目奖励最高不超过50万元。
17.引进项目固定资产资在3000万元上、1亿元以5亿元以上
的县内党政机关、企事业单位分别给予5万元10万元15元奖励,
用于奖补受奖单位的招商引资作经费。引进项目固定资产投资在1亿元
以上的县内党政机关、企事业单位,不存在其他影响评优问题的,年度目
标考核推荐列为“一等奖”。
18.引进项目固定产投资在3000元以上的县内职人员,存在
其他影响评优问题的,向引资人所在单位推荐评为年度考核“优秀”等次,
同时视情况推荐给予嘉奖或记功。
19.对在引进项目上作突出贡符合条件的县内公职人员,在职
务和职级晋升方面给予优先考虑。
六、投资服务
20.凡在我县投资落地招商引目,将实“一项目,一个专
班,一条龙服务”的工作推进方式,均享受全程代办服务,符合政策规定
且资料完备的,一次性办结相关手续。
21.在我县投资落地列省重大和重点项目的投资企业高管,在
台江缴纳的个所得税,2年按县级财政所得部分100%额奖励给
个人,后3年按照县级财政所得部分的50%奖励给个人,其奖励的人数不超
过企业总人数的15%(含15%)。
22.在我县投资落地列省重大和重点项目的投资企业高管,在
我县购买自用住房的,给予购房安家补助10万元。
+
黔东南州产业大招商政策
摘编
·136·
23.凡在我县有投资落项目的企业高管,在户籍、子女入
学就医、职称评定等方面享有与我县居民同等待遇。
七、其他
24.对投资数额较大,对财源和经济社会发展有较强拉动
的重大招商引资项目,涉及的相关优惠政策,实行“一企一策”“一事一
议”。享受“一企一策”“一事一议”政策的,不再重复享受其他同类政
策。
25.县人民政府因推动业发展的其他扶持奖励政策与本政策如
有重复、重叠的,投资人可自行择优选择,不得重复享受。
26.以上措施如因国家和上级相政策整,按国家和上级执行,
并对相关条款作相应修订;如与国家、省、州其他政策条款内容重复,按
“从高不重复”原则执行。
政策依据:中共台江县委办公室台江县人民政府办公室关于印发《台
江县招商引资优惠措施(试行)》的通知(2022-46
政策二
第一章总则
第一条为全面推动我县特色农产品产业发展,招引农产品生产及加工
企业到我县投资兴业,实现招商成效大突破,助推全县特色农产品产业高
质量发展,特制定本优惠扶持政策。
第二条县人民政府及相关部门统筹农产品生产及加工产业招商引资工
作,做好招商引资及产业发展政策兑现工作。
第三条县人民政府及相关部门负责指导和协助入驻产业园企业(机构)
享受省、州已出台的各项优惠政策,推动政策有效落实。
第四条县人民政府及相关部门对农产品生产及加工产业招商项目实行
专人跟踪服务,积极协调行政审批部门,促进政府与企业、服务与需求无
+
黔东南州产业大招商政策
摘编
·137·
缝衔接。
第二章扶持对象
第五条国家和省政府确认的农业龙头企业(含列入培育对象)在同等
条件下优先给予支持。重点针对新迁入、新设立,已落户产业园的加工企
业和种养殖企业。
(一)在台江本地注册的企业;
(二)经营状况和信誉良好,诚实守信,守法经营的企业;
(三)联农带农作用发挥好的企业;
(四)符合国家相关规定和农业产业规划布局的企业。
第三章优惠政策
第六条固定资产投资扶持政策
(一)厂房租赁补贴。对来台江县租用现有厂房的农产品加工企业,
投资额达2000万元且稳定生产一年以上的,实行“三免三减半”“先缴后
返”,即投产后前三年对企业进行奖励,奖励标准为实际缴纳给园区管理
公司租金价款的100%,第4年、第5年、第6年按市场价租金减50%的优惠
政策。支持企业按评估价回购厂房。
(二)投资补贴。在台江投资建厂房或修建设施大棚并稳定生产一年
以上的,可以享受以下政策1.投资建厂房。支持有实力的农产品加工企
业自行投资新建厂房,总投资额达到2000万元以上的,项目竣工后,按实
际投资额50%给予补助,补助金额最不超5000元;2.建设施大
棚。经县农业部门和建设方共同认定确定的标准修建钢架大棚工建设完成
50-100、修建智能化连体玻璃10亩以上的,实际投资45%
予以补助;超过100200亩的,按实际投资额的50%予以补助;200亩以上
的,按实际投资额的55%予以补助。补助金额最高不超5000万元。
第七条生产扶持政策
+
黔东南州产业大招商政策
摘编
·138·
(一)产业支持。投资规模达5000万元以上的,积极申报贵州省农业
产业发展专项资金给予支持。帮助申报国家农产品加工产业示范基地或者
示范园,申报所得项目补助资金按照产业园内所有参与申报企业投资比例
全部补贴给企业。
(二)用地支持。1.工业用地。以农、林、牧、渔业产品深加工为主
的工业项目所在地,土地等别相对应《全国工业用地出让最低价标准》的
70%执行2.农业用地。企或投资主体带动村集体经济发展50万元以
上,带动农户增收15%上,以享受以下支持。种植类:台江县农
业产业规划要求,凡是集中利土地用于发展农业种植稳定3年以上,
地流转费按先流转实施后验收补助的原则给予补助。荒山荒坡林地种植规
模达500亩以上的,每年每亩补助80元;旱地种植规模达500亩以上的,每
年每补助1000元;水田植规100亩以的每年每亩补1100元。
第四年开始补助,连续补助三年,超出部分自行支付。养殖类:按台江县
农业产业规划要求,凡是集中利用土地、林地及租用山塘水库用于养殖产
3年以上,以实际流转费用标准参照种植类的予以补助,第四年开始补
助,连续补助三年,超出部分自行支付。3.用厂房和圈舍。租用厂房和圈
舍等从事种养殖,达到合同规定养殖规模以上且产值达2000万元以上的,
租金实行“三免三减半”即投产后前三年对企业进行奖励,奖励标准为实
际缴纳给园区管理公司租金价100%,第4年、5年、6年按市场
租金减免50%的优惠政策。支持企业按评估价回购厂房。
(三)金支持。在台江册企业并生产经营1以上企业,并
农带农富农能力强,可申报衔接资金、贵州民贸民品优惠政策等给予贷款
贴息。其中衔资金贴息标准1.带动就业贴息。贴息对象每100
元贷款贴息,最低承诺年发放农民工工资20万元以上或吸纳我县10名以上
农村劳动力稳定就业(签订1年以上劳动合同)。最高贴息资金50万元/年,
+
黔东南州产业大招商政策
摘编
·139·
最多贴息3年。2.带动订单贴息。被贴息企业每申请100万元贷款贴息,带
动台江中小企业、合作社、家庭农场、种养殖大户、农户发展农业,并订
单收购被带动象产不低100万元(以实际完成订单为准,最高贴
息资金50万元/年,最多贴息3年。3.盘活资产贴息。按台江县农业产业规
划要求,凡到我县自筹资金承包农业资产(包括农业大棚、厂房、圈舍、
冷库等),以及农业园区等其他农业资产的,按实际投资金额给予申请贷
款贴息,最高贴息资金50万元/年,最多贴息3年。
(四)财政贡献奖补。对入驻台江的企业,除享受国家现行税收优惠
政策外,可享受地方财政奖补政策。对新引进的产业类企业,投产后前五
年根据产值情况予以相应奖励。对年产值达到2000万元及以上的,前三年
按照企业对县财政贡献50%予以奖励,后两年按照企业对级财
献的25%予以励;对年产值达到5000万元及以上的,前年按照企
县级财政贡献的60%予以奖励,后两年按照企业对县级财政贡献的30%予以
奖励;对年产值达到1亿元及以上的,前三年按照企业对县级财政贡献的70%
予以奖励,后两年按照企业对县级财政贡献的35%予以奖励;对年产值达到
5亿元及以上的,前三年按照企业对县级财政贡献的80%予以奖励,后两年
按照企业对县级财政贡献的40%予以奖励;对年产值达到10亿元及以上的,
前三年按照企对县级财政贡献的90%予以奖励,后两按照企业对县
财政贡献的45%予以奖励。
第八条其他扶持政策
(一)优强企业支持。对新引进世界500强企业、国500强企业、央
企或国内民企500强企业到我县投资达到1亿元以上的并符合奖励条件要求
的项目,别一次性给予500万元、300万元、200元奖励(引进企业
同时符合以上两项或三项条件的,以高限进行奖励)。
(二)品牌申报奖励。1.申报名品牌奖励支持。对入驻台江县的企业,
+
黔东南州产业大招商政策
摘编
·140·
优先申报国家名牌产品和贵州省名牌产品;对新获得中国名牌、中国驰名
商标认定的企业给予奖励60万元,对新获得贵州省名牌产品给予奖励30
元。2.申报龙头企业奖励支持。成功申报为国家级、省级龙头企业,对符
合条件的企业分别给予一次性奖励60万元、30万元。3.“二品一标”申报
奖励支持。首次获国家有机食品认证、国家绿色食品认证的,分别一次性
给予奖励20万元、10万元。4.管理体系认证:新获得ISO9000HACCP等管
理体系认证的企业,每个认证给予企业一次性20万元奖励。
5.创新科技技术支持。在农业种植技术、栽培管理技术、农业设备等
农业领域创新科技技术获得国家发明专利认定的,按照创新技术专利认定
价值予以发明人奖励5-20万元。同时,鼓励涉农企业、农业部门积极参与
申请国家、省等相关科技奖等,获得国家、省级科技奖的按影响度予以参
与人(参与单位)3-10万元奖励。
(三)招商推介扶持。鼓励全社会参与招商引资工作,对社会引资人
(包括商会、协会、专业机构、办事机构等法人组织或其它组织机构及自
然人)成功引进固定资产投资(不含土地出让金,下同)3000万以上项目
到我县落地投的,按固定资产投资的3‰予奖励,单个项目奖励
不超过50万元。
(四)优质品种引育奖励。针对县内注册企业在县域内开展优质高效
新品种选育及示范种植,获得农业部认定的国家新品种的,选育周期小于
5年,每一个品种一次性奖励企业20万元;选育周期达5年以上,每一个品
种一次性奖励企业100万元。
(五)一一议范围。对资数额达1亿元以上,对财源
经济社会发展有较强拉动作用的重大招商引资项目,涉及的相关优惠政策,
实行“一企一策”、“一事一议”。
政策依据:县人民政府办公室关于印发台江县特色农产品产业招商优
+
黔东南州产业大招商政策
摘编
·141·
惠政策的通知(台府办发〔20226号)
(八)从江
第一条 补助对象
入驻佛山—黔东南东西部协作产业园(以下简称“产业园”)的企业。
第二条 补助内容
1.厂房和办公用房(含生活配套用房)租金补助;
2.厂房和办公用房(含生活配套用房)购置补助;
3.企业产品物流运输费用补助。
第三条 资金来源
补助资金由县人民政府纳入年度财政预算。
第四条 补助标准
(一)厂房和办公用房(含生活配套用房)租金补助
1.按固定资产投资大小分级补助
1固定产投资在500-1000(含1000万元)的业,3/
月·㎡进行补助;
2)固定资产投资1000-3000万元(含3000万元)的企业,按4/
月·㎡进行补助;
3)固定资产投资3000-5000万元(含5000万元)的企业,按5/
月·㎡进行补助;
4固定资产投资5000万元上的企业,按6/月·㎡进行补助。
单个业补金额100万元/年为限,超过100万元/年的按100
/年补助。厂房和办公用房(含生活配套用房)租金补助按实际租用厂
房和办公用房(含生活配套用房)面积及实际投资固定资产的金额为依据
进行核算。
2.按产业类别分级奖补。产业园主导产业(生物医药生产研发类、中
+
黔东南州产业大招商政策
摘编
·142·
药材精深加工、药食同源产品精深加工、生态特色食品精深加工)、高新
企业按照6/月·㎡进行补助;以上补助条件必须是固定资产投资达1000
万元以上和租用厂房面
3000㎡(含)以上。
3.上述第1、第2项补助为同一企业时只执行其中一项。
4.纳入固定资产投资计算的范围。
1)生产设备和相关的设备设施;
2)购置办公设备、交通工具;
3)厂房和办公用房(含生活配套用房)的装修;
4)生产设备的运输安装。
5.租金补助日期从企业正式投产之日开始计算,每半年兑现补助一次。
(二)厂房和办公用房(含生活配套用房)购置补助
按照购置资金的总额的10%一次性补助,单个企业以300
万元为上限,超过300万元的按300万元补助。该项补助资金每年总额
1000万元,按企业申报顺序兑现,本年度资金无法覆盖的,推迟到下一
年度兑现,以此类推。使用各类财政资金购买的不享受此项补助。
(三)物流运输费补助
入驻产业园的企业,所生产的产品运往粤港澳大湾区指定城市,按实
际发生费用的30%行补,单个企业每年补助封顶为30元。结算
为年度申报结算。与物流企业合作进行运输的,提供相关支付证明材料;
企业自购车辆进行运输的,企业提供相关费用证明材料再由县工信商务局
进行核定。
(四)设立一次性奖补政策。
入驻园区12个月内实现主营业务收入达到2000万元并上规入统的工业
企业,除了享受上述补助外,另给予一次性奖励30万元。
+
黔东南州产业大招商政策
摘编
·143·
第五条 补助期限
租金和物流运输补助期限为3年,如在3企业务收
2000万元并且上规入统的工业企业,则再补助2年租金和物流运输费。5
期满后,再视实际情况另行研究是否继续实施。
第六条 入驻县人民政府或贵州侗乡大健康产业示范区(贵州洛贯经
济开发区)指定其他产业园的广东籍企业(含其设立的子公司、分公司),
租用(购置)厂房面积3000㎡(含)以上的,参照上述补助规定执行。
第七条 申领补助须具备以下条件
1.符合国家产业政策及从江县产业导向的生产型、环保、节能、技术
创新等企业;
2.符合安全生产、环境保护规划和相关法律法规,项目在运营期间相
关指标达到国家标准;
3.入驻企业必须在从江县登记注册并在本地依法纳税。
第八条 申报补助资金材料
1.补助申报表(见附件);
2.企业营业执照的复印件;
3.企业固定资产投资的证明材料,凭合同、发票、转账记录等资料核
;
4.与当地的企业、合作社、自然人等成立的合资企业,申报企业需提
供公司章程、入股证明及记录;
5.租用或购置厂房及办公用房(含生活配套用房)的合同复印件;
6.材料真实性声明。
第九条 申报流程
1.县工业信息化和商务局负责受理申报,会同黔东南州金锐产业开发
有限公司进行初审,初审通过后将企业申报资料报县人民政府;县人民政
+
黔东南州产业大招商政策
摘编
·144·
府成立或委托第三方评审机构对其进行评审,评审结果在县人民政府网站
予以公示。
2.审结公示7(自然日)且无异后,由县财政公示结束
之日起一个月内拨付补助资金至申报企业。
第十条 企业须保证申报事项及材料的真实性,凡弄虚作假者,一经
查证核实,取消申报资格,追缴已拨资金并追究相关责任。
第十一条 本办法自202311日起执行。
第十二条 本办法由县工业信息化和商务局负责解释。
政策依据从江县人民政办公关于印发入驻佛山-黔东南东西
协作产业园企业补助办法(试行)的通知(从府办发〔202258号)
(九)岑巩
政策一
第一条 财政金融政策
(一)规模以上投产企业技术改造购置新设备或扩大产能新增投资,
根据其用于新增投资获得银行贷款的额度,按照人民银行同期贷款基准利
率的50%给予贴息,贴息期限不超过三年。新增投资额500万元(含)-
1000万元以内,年产值1亿元以下,累计贴息不超100万元;新增投资额
1000万元(含)-20001亿元-3亿
150万元;新增投资额2000万元(含)以上,年产值3亿元以上,累计贴息
不超过200万元。
(二)强化对企业的融资担保支持。鼓励县属融资担保公司按市场化
原则优先为招商引资投产中小微企业提供融资担保;对中小微工业企业保
持较低担保费率,担保费率不超过1%;对认定为省级以上专精特新的中小
企业给予信用担保贷款支持,无需提供反担保措施。
第二条 税收支持政策
+
黔东南州产业大招商政策
摘编
·145·
(一)投我县企业所使的应税土地,2-8/平方/年征收城
镇土地使用税。
(二鼓励产业企业减按15%的税征收企业所得税。本条称鼓
励类产业企业是指以《西部地区鼓励类产业目录》中规定的产业项目为主
营业务,且其主营业务收入占企业收入总额60%以上的企业。
(三)截止20221231日,对小型微利企业年应纳税所得额不超过
100万元的部分,减按12.5%计入纳税所得额,20%的税率纳企业所
得税;截20241231,对型微利企业年应纳税所得额100
元但不超300万元的部分,减按25%入应纳税所得,按20%的税率缴
纳企业所得税。
第三条 吸纳就业和人才扶持政策
(一)对新引进的企业投产后,吸纳50人及以上劳动力实现就业,并
按要求签订6个月及以上期限劳动合同,且连续稳岗3个月及以上,由企业
自主开展技能提升培训,经县级有关行业部门核准,给予企业500/人的
一次性培训补助。
(二)招商引资企业中具有技师、高级技师及副高级以上专业技术职
称的人员,在我县工作期间可以给予用人单位租房租金补贴,租金补贴按
实际租金费用的80%拨付,租金标准最高参照100㎡社会住房市场租金价格。
第四条 “四上”企业扶持政策
对新引进的企业自投产之日,年主营业务达到规模以上企业标准,
被纳入四上企业统计后正常生产经营一年以上的,工业业在省、州
奖励基础上县级给予一次性扶持10万元,其他类企业在省、州奖励基础上
县级给予一次性扶持5万元。
第五条 工业类政策
(一)工业项目选址集中到岑巩经济开发区,优先保障工业项目新增
+
黔东南州产业大招商政策
摘编
·146·
建设用地指标,工业用地出让价不得低于国家制定的最低标准。同时,不
得低于土地取得成本、土地前期开发成本和按规定收取的相关费用之和。
工业用地出让期限内,在符合规划、不改变土地用途的前提下增加容积率
的,不再征收土地价款。
(二)新落户工业项目需使用土地的,固定资产投资须达到2000万元
以上,固定资投资强度须达100万元/以上,年出强度须达到120
万元/以上,可采用先租后让、租让结合、弹性年限方式供地,降
低企业投资成本。
(三)“九通”配套支持政策。对新落户工业项目自建厂房的,提供
“九通”配套支持。通过相关部门的项目实施,解决落地企业的通路、通
电、给水、排水、排污、通天然气、通有线电视、通宽带网络、通讯到项
目红线边缘。
(四)场平补助政策(只含挖填土方)。企业自正常投产后产值在2000
万元(含)以的,用县级工业发展基金补助场平工程费30%;值在1
亿元(含)以上的,补助场平工程费的40%。支付方式:企业投产后,产值
200050001005000万元
(含)1亿元以内,补助超过150万元;产1亿元(含)以上,补助
不超过200万元。
(五)自建厂房融资贴息政策。新落户工业项目自建厂房的,单层层
高不低于3.9,给予厂房建设融资贴息。根据企业获得银行目建
款额度,按照民银行同期贷款基准利率的50%用县级工业发展基金给
贴息产值2000万元(含)至5000万元以内贴息不超100万元产值
5000元()至1亿元以内,息不超过150万元;产1亿(含)以
上,贴息不超200元。企业房验收合格,并纳入规模企统计后予
以兑现。
+
黔东南州产业大招商政策
摘编
·147·
(六)支持工业企业固定资产投资建设。对新落户工业项目一次性投
1亿元(含)以上,固定资产投资强度不低100万元/亩,年均产值达
150万元/亩,且年均纳税达到3万元/亩及以上的工业企业,根据已取得
土地不动产登记证上的面积,用县级工业发展基金,按2万元/亩的标准连
续奖励三年。
(七)加大争取工业企业信贷支持力度。争取专项资金对新入园的经
国家工信部、科技部、省经信委、科技厅等部门认定的新兴产业、高新技
术产业的工业企业贷款实行财政贴息三年政策优惠,第一年按照同期贷款
基础利率计算息金额的50%贴息,第二年按照同期贷款础利率计
算利息金额的40%予贴,第三年按照同期贷款基础利率计算利息
30%给予贴息,每年度单户企业贴息总额不超过200万元。
(八)支持工业企业降低物流成本。对新落户工业项目投产后一年内
申报成为规模企业的,企业投产后三年(从投产之日起,以12个月为一年)
物流给予扶持,分别按照企业当年度向税务部门申报销售收入的0.3%用县
级工业发展基金给予扶持,第一、二、三年补助标准分别不超过60万元、
50万元、40万元。
(九)支持工业企业快速发展。对投产工业企业年主营业务收入分别
2000万元-5000万元(含下限不含上限,下同)、5000万元-1亿元、1亿
-2亿元、2亿元-3亿元、3亿元以上的,分别以上一次获奖励主营业务收
入为基数(首次衡量标准以上年度主营业务收入为基数),同比增速分别
35%30%25%20%15%上,按照业当年增量的0.3%用县级工
业发展基金给予扶持,每户企业最高产业扶持资金不超过50万元且不超过
企业当年缴纳县级留存部分税款。
(十)支持工业企业科技创新。企业产品获得贵州省名牌产品、著名
商标或国家级名牌产品、驰名商标、国家地理标志品牌,或被认定为省级、
+
黔东南州产业大招商政策
摘编
·148·
国家级技术中心的工业企业,得省级、国家级的分别给予一次性扶持5
万元、10万元。
(十一)支持工业企业上市。对注册在我县,且在境内主板成功上市
的企业用县级业发展基金扶200元;在中小板、创业板功上市的
企业用县级工发展基金扶持150万元;对纳入省、州级上市备资源库
并在新三板挂牌的企业用县级工业发展基金扶持50万元。组建岑巩县助力
企业上市专家服务团队,为上市后备企业提供税务+银行+资本+法律+政策
的全方位指导服务。
(十二)标准厂房政策。(对新引进入驻岑巩经济开发区标准厂房的
企业)
1.租金标准:按照岑巩经济开发区标厂房出租5/平方/月标准,
从起租当月一次性缴纳全年租金。企业租赁标准厂房以层为单位,投资强
度达2500/方米以上,产出强度达5000/平方/以上并且企业
投产后12个月内销售收入达2000万元(含)以上的,第一年按缴纳租金比
100%予企业产业扶持;第二三年按缴纳租金比80%给予企业
扶持;第四、年按缴纳租金比例60%给予企业产业扶;第六年及以
年度按缴纳租比例40%予企产业扶持。达不到前述条件但为经开
区主导产业提供配套服务的企业,或科技含量高、发展潜力好的企业,可
实行“一事一议”。
2.厂房装修费和设备搬运费补助:对新落户项目租用岑巩经济开发区
标准厂房,落户后半年内建成投产,且投产后一年内申报成为2000万元以
上规模企业的,用县级工业发展基金给予厂房装修费和设备搬运费补助。
厂房装修费补助金额为企业申报成为2000万元以上规模企业当年所实现销
售收入的1%,最高补助不超过40万元。设备搬运费补助金额为企业所购置
新设备金额的4%(以设备购置发票为准),最高补助不超过20万元。
+
黔东南州产业大招商政策
摘编
·149·
(十三)对新引入国家和省战略性新兴产业、重点龙头企业实行“一
事一议”研究确定。
第六条 农业类政策
对新引进在岑巩县注册的首次申报获得国家级、省级农业龙头企业的
招商引资农业企业,分别一次性扶持20万元、10万元;首次获国家有机食品
认证、国家绿色食品认证的,分别一次性扶持l0万元、5万元;首次获得国
家农产品地理标志的一次性扶持10万元;首次获得省级以上良种场、原种
场或优质种苗规模化繁育场称号的单位,一次性扶10万元(获得其中一
项奖补10万,不叠加)。
第七条 文化和旅游产业政策
对新引进的旅游企业,建设旅游景区(点)获评为国家3A级、4A级、
5A级旅游景区的企业,县财政分别一次性扶持10万元、20元、30万元。
建设旅游饭店(酒店、宾馆)新获评为三星级旅游饭店、四星级、五星级
(酒店、宾馆)且能按照旅游主管部门要求加强管理的,县财政分别给予
一次性扶持5万元10万元15元;建设农家乐、乡村栈新获评为
星级、五星级的农家乐、乡村客栈且通过验收合格的,县财政分别给予一
次性扶持3万元/户,4万元/户。
第八条 投资服务政策
(一)凡在我县投资企业均享受“一站受理、全程代办、服务到底”
代办服务。
(二)进步优化营商环,审批程序。投资者办理与其资有
关的各项行政审批手,机关一律实“首问负责制。投资项目
料齐全,属县内办理的手,实行“一站受理、并联审批、限时办结、进度
可查询”,确保在公开承诺办结时限内办理完毕。
(三)外企业投资项目入省、州重点项目调度管理,按照
+
黔东南州产业大招商政策
摘编
·150·
个项目、一名领导、一套班子、一个方案、一抓到底”的“五个一”工作
机制推进服务。
政策依据:县人民政府办公室关于印发《岑巩县招商引资优惠政策暂
行办法》的通知(岑府办发〔202257号)
政策二
第一条 新落户主导产业及其配套项目,一次性投资1亿元以上(其中
固定资产投资3000万元以上),固定资产投资强度不低于100万元/亩,并
且申报成为2000万元以上规模企业的,根据已取得土地不动产登记证上的
面积,按照每亩固定资产实际投资强度的6%给予基础设施建设奖励扶持,
每亩扶持不超过7万元。
第二条 对投资强度达300万元/亩及以上的工业项目,纳入重点项目
优先保障项目用地。
第三条 新落户主导产业及其配套项目,补助场平费总额(只含挖填土
)90%,补助金额不超过200元。场平费总额以场平实施前企业所
定场平方案经双方审定的场平工程量、单价和场平完成后企业送双方认可
的第三方审计机构依法审计的额为依据。企业投产并持续生产达3个月
的次月补助60%,纳入规模企业统计后的当年补助40%
第四条 新落户主导产业及其配套项目自建厂房的,单层层高达3.9
米以上,给予厂房建设融资贴息。根据企业获得岑巩县行政区域金融机构
项目建设贷款度,按照人民银行同期贷款基准利率50%用县级工
展基金给予贴息,贴息期限不5,贴息额不超过200元。企业厂
房竣工验收合格,并且被纳入规模企业统计后予以兑现。
第五条 新落户主导产业及其配套项目,按照投资合同约定时限建成
投产,投产前完成建设阶段规划许可、环保、安全等行政审批手续并经竣
工验收的,项目投产后(固定资产投资额达3000万元以上)按照实际建筑
+
黔东南州产业大招商政策
摘编
·151·
面积30/平方米给予项目建设奖励扶持。
第六条 对落户的主导产业及配套项目,年用气量1万立方米及以上
的,生产用气补助0.2/立方米。对符合县级主导产业使用的天然气用气
量自项目投产后一年内给予一次性补助,补助标准0.2/立方米。其中
产值5000万元(含)-1亿元,补助标准不超过30万元;产值1亿元(含)-
1.5亿元,补助标准不超过50万元;产值1.5亿元(含)-2亿元,补助标准
不超过80万元;产值达到2亿元(含)以上,补助标准不超过100万元。
第七条 对租用岑巩经济开发区标准厂房生产且固定资产投资达5000
万元以上的新引进企业确需供电增容的,供电增容所产生的费用由所在岑
巩经济开发区承担;对固定资产投资强度达300万元/亩以上的,且年产值
达到5亿元以上的企业,实用电量补助,各级电价补贴自目投产后一
计补0.01/,
300万元。
第八条 对新落户主导产业及配套项目年用水量达5万吨以上,企业
严格履“环保三同时且废水达标排放的,按照超出5吨部分给予
1.2/吨奖励扶持,每户企业每年最高奖励不超过10万元。
第九条 对新落户主导产业及配套项目达到规模以上企业标准,且年
产值在上年度基础上增长30%以上、县级地方财政贡献增长10%以上的规模
以上企业,给县级地方财政贡献增量部分50%的奖励。连续三年达到
济贡献奖励条件的,第三年给予县级地方财政贡献增量部分90%的奖励。
第十条 投产企业在岑巩县注册成立外贸企业并开展自营出口业务,
每完成1元出口额奖励人民币0.01元,每户企业个年度奖励不超过30
万元。
第十一条 鼓励以商招商、中介招商。对帮助岑巩县引进固定资产投
资达5000万元以上主导产业项目的中介人(含团队或个人),在项目引荐、
+
黔东南州产业大招商政策
摘编
·152·
考察、洽谈、签约中做了实实在在工作,并且促成项目按投资合同约定时
限落地建设并竣工验收投产的,经招商部门认定,按项目实际固定资产投
资额的万分之十奖励,单个项目奖励累计不超过30万元。
政策依据:县人民政府办公室关于印发《关于进一步支持工业主导产
业发展的政策措施》的通知(岑府办发〔20237号)
(十)榕江
政策一
第一条 鼓励社会资本参与乡村振兴,对在本县社会经济发展中作出
突出贡献、投资强度大、经济效益高、市场前景好的社会资本投资企业,
除享受本办法相关支持外,可按照“一事一议”“一企一策”确定优惠政
策。
第二条 为支持外来企业投资本县规划发展的重点产业链和培育产业
链相关项目,鼓励产业链内龙头、骨干企业牵头引进集群配套、强链补链
项目,符合奖励条件的按《贵州省招商引资奖励办法(试行)》向省、州
申报给予牵头引进企业或自然人奖励。
第三条 发挥产业链龙头企业示范带动作用,鼓励企业与本县中小企
业开展分工协作,推动产业链协同制造和协同创新。龙头、骨干企业每增
1家本地配套企业(指与龙头企业在我县发生开票销售收入500万元及以
上的企业),奖励龙头、骨干企业7万元。
第四条 社会资本投资5000万元以上旅游资源开发(景区景点建设、
乡村旅游开发、旅游商品开发等)、农旅融合、文旅融合、文体融合等产
业项目,建成投产运营后按固定资产投资的5%给予一次性奖励,固定资产
以我县评估认定数据为准。
第五条 支持商(协)会组织、企业与本县合作开展委托招商,对在
招商引资工作中做出突出贡献的商(协)会组织、企业的主要负责人,县
+
黔东南州产业大招商政策
摘编
·153·
人民政府可聘为招商专员,并颁发证书。
第六条 鼓励和支持围绕本县主导产业面向国内外商(协)会、跨国
集团、行业龙头企业进行集团式招商、产业集群招商。跨国集团、行业龙
头企业按本办法第十三条中500强企业和民营企业500强支持政策给予优
惠。对投资强度、经济效益达到约定标准的企业,前三年按该企业年度参
考税收县级留存部分金额的100%予以奖励,后两年按该企业年度参考税收
县级留存部分额的50%以奖,由财政预算中的招商引资策兑现经
费拨付。
第七条 在本县注册并经认定为总部企业的,自2022年起,首次被评
为世界500,给1亿元励;首次被评中国500强,给予5000万元
励;首次评为民营企业500强,2000万元奖励。上述奖自达
励标准后一次性兑现。
第八条 在本县投资并经省认定为首次入500强企业,投资除基础
设施建设、地产开发、能源开外项目且固定资产投资1亿元以上的,
目建成投产后,在享受其他优惠政策支持的基础上,世界500强、中国500
强、营企500再分别给1000元、500元、200万元励,
企业发展。上述奖励自项目建成投产后一次性兑现。
第九条 社会资本投资学校、幼儿园、养老院、医院占用耕地,免征
耕地占用税;建设直接为农业生产服务的生产设施占用林地、牧草地、农
田水利用地、养殖水面以及渔业水域滩涂等其他农用地,不征收耕地占用
税;从事农林牧渔业项目的所得,依法免征、减征企业所得税。农业生产
者销售的自产农产品,免征增值税。产品在《农业产品征收范围注释》内
的其他农特产品在流通环节适用11%增值税税率。
第十条 鼓励和支持农业产业项目扶持,社会资本投资3000万元以上
农业产业项目,享受以下扶持政策。
+
黔东南州产业大招商政策
摘编
·154·
一、土地(指耕地)流转财政奖补
(一)享受财政奖补政策的农业项目必须符合以下条件
1.农业产业化龙头企业,流转土地规模须在600亩以上。
2.流转合同期限在5年以上。
3.土地流转合同已在所辖乡镇人民政府或农村土地承包经营权管理部
门备案登记。
4.流转收益按合同已经向出让方兑现过一次以上。
(二)财政奖补标准
600亩(含600亩)至1000亩(含1000亩)的,按
400//年的标准给予奖补;转面积在1000亩(不含1000亩)以上的,
500//年的标准给予奖补,连续奖补五年。
二、农业基础设施奖补
1.县农业产业规划修建钢架标大棚4000以上,按15/
㎡一次性补贴;修建智能化连栋玻璃景观温室、生态餐饮温室1000㎡以上
的,按300/㎡一次性补贴。
2.县农业产业规划及设计标准设喷灌设施达500亩以上的,按
500/亩一次性补贴。
三、投资标准化畜禽养殖的企业,修建标准化圈1000平方米以上、
20010001000
10000羽以上),对其所修建标准化圈验收达标后按实际投资圈舍
额的20%一次性给予补助。
第十一条 自本办法发布之日起,投资项目上年度主营业务收入首次
突破1亿元的,按主营业务收入的0.5%给予一次性奖励。
第十二条 对引进省级、国家级研发平台在本县落户的企业,引导支
持民营企业建立工程技术研究中心、重点实验室、企业技术中心、技术创
+
黔东南州产业大招商政策
摘编
·155·
新战略联盟,提高企业科学技术创新能力,增强企业核心竞争力。一是对
新认定的国家级工程技术研究中心、重点实验室,在州给予补助的基础上
由县级财政分别给予一次性20万元的补助;获得省级工程技术研究中心、
重点实验室,在州给予补助的基础上由县级财政分别给予一次性10万元的
补助。二是对新认定的国家级、省级技术中心、检测中心、技术创新示范
企业,在州给予补助的基础上由县财政再分别一次性给予25万元、10万元
补助;对新认定的国家级、省级科技企业孵化器、产业技术创新战略联盟,
在州给予补助的基础上由县财再分别一次性给予15元、5万元补助。
三是对新认定的科技型小巨人企业、小巨人成长企业、科技型种子企业
大学生创业企业,在省级补助基础上,由县财政局分别按13万元、5
元、4万元、3万元给予一次性补助。四是对新认定的省级创新型领军企业,
由县财政给予次性100元补。五是对来我县落户的省外新技术企
业,投资高新技术产业和战略性新兴产业链缺失环节或薄弱环节的,县财
政给予实际到投资2%最高超过100万元的一次性补助新认定的
高新技术企业在省补助的基础上,再一次性补助5万元。
第十三条 在本县行政县域内工商注册和税务登记,具备独立法人资
格并纳入榕江县统计的企业在主板和在境外资本市场成功上市的,除享受
省、州优惠政策外,另给300元补助;在中小板、创业板成功上市的,
给予200万元补助;企业在新三板成功上市的,给予75万元补助。
第十四条 对新引进的国家、省、州鼓励类项目企业实行工业纳税奖
励。上年度实税收金额(按实际入库计算)达100万元以上、解
100以上的企业,县人民政府将奖代补的形式,按税收县级留存
分的10%给予奖励,连续奖励不超过5年。
第十五条 拓宽融资渠道,鼓励企业做强做大,鼓励政府支持的融资
性担保机构降低担保费用,为企业融资性贷款提供担保服务收取担保费率
+
黔东南州产业大招商政策
摘编
·156·
2%下的新增担保发生额,由县财政按担保服务费50%补偿担保机构
支持中小微企业应收账款、存货、设备、知识产权质押、金融资产等动产
融资。宣传、推广贵州省中小企业“信贷通”,提供2000万元以内无抵押
贷款政策,解决企业融资贵、融资难问题。
第十六条 入驻园区标准厂房的工业项目享受政策须满足的条件和内
容:
一、入驻工业园区项目享受政策,必须符合下列条件
(一)项目符合国家产业政策,符合园区发展规划。产业导向、产业
布局,符合节能环保要求。
(二)入驻标准厂房的项目,实际投资必须达到0.4万元/㎡;独立建
厂的项目,实际投资不低于300万元/亩。
(三)工业项目所需行政办公及生活服务设施用地面积不得超过工业
项目总用地面积的7%。严禁在工业项目用地范围内建造成套住宅、专家楼、
宾馆、招待所和培训中心等非生产性配套设施;容积率、建筑系数、绿地
率,按中央和有关规定执行。单GDP业增加值综合能耗有关
执行。
(四)依法经营、依法纳税,不拖欠农民工工资,有良好的社会信誉
度和责任感。
(五)服从园区等职能部门管理。
(六)项目建成投产后,产品外贸出口必须以工商、税务关系在本县
注册企业名义报关。
二、入驻工业园区项目,满足以上条件可享受的政策
(一)供水、供电、道路、通信设施建设安装到道路规划红线处。
(二)达产后(从投产后第二年起)工业产值(营业收入)不低于
1.5万元//年,税收不低于0.05万元//年,享有以下优惠政策。
+
黔东南州产业大招商政策
摘编
·157·
1.一次性装修补贴:普通厂房200/㎡(仓库除外)。
2.物流补贴:根据项目生产实际产生的物流费用(以正式的货物运输
发票为凭)总额的,每年一次按3%给予补贴。
(三)达产后(从投产后第二年起)发展前景好、带动性强的企业,
需技改和增加新设备的,优先支持申报贵州省工业和信息化发展专项扶持
资金。
(四)企业享受的装修补贴、物流补贴等总额不超过企业同期缴纳税
金县级留存部分的总额。
第十七条 独立建厂工业项目,享受优惠政策的条件和内容。
一、独立建厂工业项目享受政策,必须符合下列条件
(一)对投资5000万元以上,年产值不低于2000万元的独立建厂项目,
由自然资源部门依法按招拍挂或先租后供方式优先提供工业用地。
(二)对符合国家产业政策的项目,需符合我县产业发展规划。
(三)达产后工业产值(营业收入)不低于450万元//年。
二、独立建厂工业项目,满足以上条件可享受的政策
1.生产厂房建设补贴100/㎡。
2.物流补贴:根据项目生产实际产生的物流费用(以正式的货物运输
发票为凭)总额的,每年一次按3%给予补贴。
(四)达产后发展前景好、带动性强的企业,需技改和增加新设备的,
将优先申报项目给予支持。
第十八条 投资主体与县人民政府正式签订《项目投资建设协议书》
和《项目建设投产承诺书》并依法取得土地使用权后,明确项目各项准入
指标、双方权利和义务,列明投资内容、投资额度、投资方式、建设进度、
建成时间、投产时间,以及其他约定事项。项目建成投产后,各项约定指
标未达到要求,不得享受优惠政策,已获得扶持资金全额退回。
+
黔东南州产业大招商政策
摘编
·158·
第十九条 项目必须按约定期限开工建设、建成投产。每宗用地动工
开发建设时间原则上不得超过两年,超过两年未开工建设的,无偿收回土
地使用权。
第二十条 投资强度、产出强度、缴纳税收、用工人数达不到要求的,
不得享受上述优惠政策。已兑现的优惠政策应退回。
第二十一条 入驻本县项目因不可抗力因素造成项目开工建设延迟的,
企业应在开工建设期限届满前1个月内向园区管委或县民政府提出
期开工书面申请,经同意延期开工的可顺延计算开工日期,但顺延时间不
得超过1年。
第二十二条 实行按时开工建设、按时竣工投产、(农民工工资)保
证金制度。投资主体在签订《项目投资建设协议书》和《项目建设投产承
诺书》时,必须向县人民政府缴纳履约保证金,保证金在项目依约建成投
产后退还(不计利息)。
第二十三条 有下列情况之一的,严格依据《中华人民共和国土地管
理法》《中华人民共和国城市房地产管理法》、闲置土地处置办法等法律
法规,以及其他相关政策法规处理。
一、合同2后仍未动工建设,或因投资方自身原项目建设
停工1年以上,未再进行投资建设的。
二、不按项目建设规划、建设程序和《榕江县项目投资建设协议书》
的要求建设,擅自改变土地用途性质和改变容积率的。三、不按环保要求
进行建设,达不到环评标准,拒不改正的。
四、不按有关安全规定进行建设,存在重大安全隐患,拒不改正的。
五、国有土地使用权转让、出租以及抵押合同违反国家法律、法规规
定或出让合同约定,拒不改正的。
六、恶意拖欠农民工工资的。
+
黔东南州产业大招商政策
摘编
·159·
第二十四条 实行差别化土地政策。农业项目生产设施、附属设施和
配套设施用地直接用于或服务于农业生产,其性质属于农用地的,按设施
农用地有关要求办理相关手续;工业项目用地按照《中共中央国务院关于
深入实施西部大开发战略的若干意见》规定,全县范围内工业用地出让金
按《全国工业用地出让最低价标准》执行。工业项目用地在符合规划、土
地用途不改变的前提下增加容积率的,经核准不增收地价款。教育、医疗、
社会福利设施等非营利性公益事业用地,凡是符合国土资源部公布的《划
拨用地目录》范围的,可以按划拨方式供地;不符合《划拨用地目录》,
但符合《协议出让国有土地使用权规定》范围的,可以按协议出让方式供
地。
第二十五条 对在本县社会经济发展中有突出贡献、投资强度大、经
济效益高、市场前景好的工业项目,保障用地要素,探索标准地出让,推
行先租后供方式,优先为项目供地,有效推进项目建设进度。
第二十六条 在县内重点行业规模以上企业,建立高校毕业生见习基
地,对到见习基地见习的高校毕业生,由就业补助资金给予见习补贴。见
习对象为毕2内仍未就的全日制普通高等学校专科以上应往届毕业
生,见习间为3―12个月,最长不超过一年,见习期学生活补助费
不低于当地最工资标准,其60%就业补助资金给予补贴见习期间
办理人身意外害与住院医疗商业保险,保险费用从就业补助金按300
/人的标准进行补贴,对见习单位(基地)留用见习期满高校毕业生的
给予每人500元的一次性奖励。
第二十七条 小微企业和民营经济组织吸纳高校毕业生就业奖励。小
微企业和民营经济组织每吸纳1名登记失业高校毕生就业并签订一年以
上劳动合同且缴纳社会保险费的,给予800元的一次性奖励。
第二十八条 依托高等院校、中等职业技术学校及社会培训
+
黔东南州产业大招商政策
摘编
·160·
机构开展的各类技能培训,培训合格后取得相应等级证书的,按有关
规定给予培训补贴。
第二十九 招用残疾人达职工总人数1.5%以上的企业,可免缴残
疾人保障金,并可享受国家规定的有关税费优惠政策。
第三十条 凡在本县投资企业均享受“一站受理、全程代办、服务到
底”代办服务,但投资方须及时、真实提供代办行政审批和公共服务事项
需要的材料,若相应事项必须由投资方自身亲自办理的应由投资方自行办
理。
第三十一条 投资者在户籍、子女入托入学、职称评聘等方面享有与
本县居民同等待遇。
第三十二条 投资项目纳入省、州重点项目调度管理的,按照“一个
项目、一名领导、一套班子”工作方式跟踪推进服务。
政策依据:榕江县人民政府办公室关于印发《榕江县招商引资优惠政
策暂行办法(修订)》的通知(榕府办发〔202241号)
政策二
一、奖励对象
社会引资团体、引资组织或引资人:县内外的商会、协会、专业机构、
办事机构等法人组织、其他组织机构及自然人。
公职人员:本县在编公务员、国企工作人员及事业单位工作人员。
二、奖励原则
对成功招引项目的引资组织、引资团体或引资人实行分类奖励原则,
符合条件的社会引资组织、引资团体或引资人给予物质奖励,符合条件的
我县公职人员给予行政奖励。
三、奖励条件
(一)项目符合国家环保要求及我县产业政策,不属于禁止类或限制
+
黔东南州产业大招商政策
摘编
·161·
类产业项目;
(二)以独资、合资、合作等方式引进项目落地,投资方项目投资金
额单独核算;
(三)项目引进资金系引入省外、境外资金;
(四)在本县市场监督管理局注册公司并建设、经营、正常纳税的招
商引资产业项目,注册公司股东须含有省外企业或个人占股;
(五)项目正常投产经营且效益达到合同约定内容的招商引资项目;
(六)项目引进资金以招商引资合同投资总额或项目发改备案金额为
依据,第一产项目引进资金须在2000元以,第二产业项目引进
须在5000万元以上,第三产业项目引进资金须在8000万元以上(引进境外
资金,外币按投资项目符合政策条件正式提交申请后核查资金到位当日的
国家外汇汇率折合人民币计算);
(七)捐资项目、基础设施(社会资本投资的项目除外)、公共设施、
房地产、煤矿项目等不属于奖励范围;
(八)项目引资组织、引资团体或引资人未收取项目投资方或资金接
受方佣金;
(九)申领奖励的项目,应是正式投产、正常运营一年内的项目,凡
超出项目备案或项目核准文件规定的建设期限,对引资人不再予以奖励。
四、奖励标准
(一)社会引资奖励
1.社会引资组织、引资团体或引资人成功引进产业项目落地投产,可
参照统计部门联网直报平台中的固定资产投资额给予一定奖励。投资项目
为第一产业项,按该项目固定资产投资额4‰予奖励;资项目为
第二产业项目按该项目固定资产投资额的5‰予奖励;投资项目
三产业项目,该项目固定资产投资额4‰予奖励,单个目最高引
+
黔东南州产业大招商政策
摘编
·162·
资奖励不超过500万元。
2.引资组织、引资团体或引资成功引进世界500强企业、国内
500强企业、民企500强企业到我县投资兴办并符合奖励条件要求的产业项
目,分别再一次性给予30万元、15万元、5万元奖励。
3.若社会引资组织、引资团体或引资人引进项目主体同时符合以上两
种情况,则可叠加享受以上政策。
(二)公职人员激励
对本县成功招引产业项目落地的公职人员,可按照其招引项目的规模、
效益等情况,授予相关的荣誉;评优评先、职称评聘和职级晋升等
方面,符合条件的给予优先考虑。
五、招商引资身份认定
原则上同一个项目只认定一个社会引资主体或一个公职人员给予奖励,
引资身份以投资方初次考察时的引资主体为准,同一个项目招商引资奖励
资金总额不变,与引资主体人数多少无关。
六、认定程序
(一)社会引资主体认定程序
1.备案。项目引资主体填写《榕江县招商引资登记表》,由县投促部
门认定项目引资主体申请资格。
2.申报。在项目签约落地并正常投产后,符合申请招商引资奖励的引
资主体填写《榕江县招商引资奖励申请表》,由县投促部门进行初审后提
交县人民政府审定。
3.公示。经审定通过后,将拟奖励的项目引资主体信息、项目名称、
拟奖励金额等情况在榕江县人政府网站进行公示,公示5工作日。
4.拨付。对公示期无异议的,由县投促部门按程序向县级财政申请拨
付奖金。
+
黔东南州产业大招商政策
摘编
·163·
(二)公职人员认定程序
1.备案。项目引资主体填写《榕江县招商引资登记表》,由县投促部
门认定项目引资主体申请资格。
2.申请。在项目签约落地并正常投产后,符合申请招商引资奖励的引
资主体填写《榕江县招商引资奖励申请表》。
3.审定。由县投促部门进行初审后提交县人民政府审定,由县人民政
府将会议确定奖励结果以公文形式发文至公职人员所在单位、县委组织部
及县人社局,按程序予以奖励。
七、撤销奖励情形
对弄虚作假或相互串通恶意骗取招商引资奖励资金的,一经查实,立
即撤销奖励,追回奖励资金,并视情节追究相关人员纪律及法律责任。
八、实施期限
本办法自发布之日起实施,由榕江县招商引资扩大开放领导小组办公
室负责解释,试行2年。
政策依据:榕江县招商引资扩大开放领导小组办公室关于印发《榕江
县招商引资奖励暂行办法》的通知榕招商办通〔20231
(十一)黎平县
一、奖励对象及条件
(一)奖励对象。本办法的奖励对象为在黎平县行政区域内登记注册
并进行税务登记,从事外贸、服务贸易相关领域工作或生产经营活动,并
202211日至20231231日期间(每个自然年即为一个申报年度)
发生本办法所涉及奖励事项的独立法人企业。
(二)奖励条件
企业申报奖励需满足以下基本条件:
1.未被“信用中国(贵州)”网列入失信惩戒名单;
+
黔东南州产业大招商政策
摘编
·164·
2.企业货物进出口额、服务贸易收入额、跨境电子商务进出口额须达
到第三条规定的规模,且数据统计在黎平县;
3.申请服务外包奖励的企业须在商务部服务外包业务管理和统计系统
注册,并按时填报服务外包统计数据信息。
二、奖励标准及依据
(一)奖励标准
1.货物贸易进出口奖励。申报年度企业货物贸易进出口总额达到(含)
50美元以上,每50万美元奖励0.5元(人民币,同)。单户企
奖励金额最高不超过3万元。
2.服务贸易进出口奖励。申报年度企业服务贸易进出口总额达到(含)
10美元以上,每10万美元奖励0.5元。单户企业励金额最高不
3万元。
3.跨境电子商务奖励。经省商务厅认定的跨境电商重点企业,申报年
到(5050万美元奖励
0.5万元。单户企业奖励金额最高不超过3万元。
(二)奖励依据
货物进出口和跨境电商企业数据以海关统计数据为准;服务贸易企业
进出口数据以外汇管理局统计数据和结汇单为准。
三、奖励申请及资金拨付
(一)每2月底前由相关企业向县商务部门提交上一奖励申请
及相关必需材料(申报指南另行印发),县工信和商务局联合相关部门组
织审核,并按照程序拨付奖励资金。
(二)申报年度专项资金安排不超过30万元,若企业申报奖励资金规
模总和大于申报年度安排的专项资金规模,在专项资金规模内统一确定申
报项目资金核批比例。
+
黔东南州产业大招商政策
摘编
·165·
(三)申报年度企业不重复享受县级财政扶持奖励,享受标准就高不
就低。
政策依据:县人民政府办公室关于印发《黎平县加快促进外贸高质量
发展奖励办法(试行)》的通知(黎府办发〔202251号)
(一)贵州省优化营商环境条
1.优化营商环境应当坚持市场化、法治化、国际化原则,以市场主体
需求为导向,持续深化简政放权、放管结合、优化服务改革,践行有求必
应、无事不扰的服务理念,打造以企业为贵、以契约为贵、以效率为贵、
以法治为贵的贵人服务品牌,营造稳定、公平、透明、可预期的营商环境。
2.本省加大对中小投资者权益的保护力度,完善中小投资者权益保护
机制,依法保障中小投资者的知情权、参与权,提升中小投资者维护合法
权益的便利度。
3.各级人民政府及其有关部门应当实行全国统一的市场准入负面清单
制度,不得另行制定市场准入性质的负面清单。市场准入负面清单以外的
领域,各类市场主体均可以依法平等进入。
4.外商投资实行准入前国民待遇加负面清单管理制度。外商投资准入
负面清单以外的领域,按照内外资一致的原则实施管理。县级以上人民政
府可以根据法律、法规的规定,在法定权限内制定外商投资促进和便利化
政策措施。
5.按照国家有关规定推进证照分离和多证合一,将涉企经营许可事项
纳入证照分离改革范围,依法通过直接取消审批、审批改为备案、实行告
七、营商服务类政
+
黔东南州产业大招商政策
摘编
·166·
知承诺、优化审批服务等方式分类推进改革。除法律、行政法规规定的特
定领域外,涉企经营许可事项不得作为企业登记的前臵条件。
6.人力资源社会保障部门应当加大主导产业紧缺人才培养力度,支持
困难企业开展职工在岗培训,健全就业需求调查、动态监测和失业监测预
警机制,及时公布人力资源供给与市场需求信息。组织实施急需职业和工
种的人才培养开发计划,构建技能人才终身培训体系,培育技艺精湛、门
类齐全、结构合理、素质优良的工匠人才。
7.发展改革、财政、税务等有关部门应当及时公布惠企政策清单,做
好政策宣传和辅导,主动精准向市场主体推送惠企政策,及时研究解决政
策落实中的具体问题,确保政策全面、及时惠及各类市场主体。
8.实行惠企政策免申即享,通过政府部门信息共享等方式,实现符合
条件的企业免予申报、直接享受政策。确需市场主体提出申请的惠企政策,
应当合理设臵并公开申请条件,简化申报手续,实现一次申报、全程网办、
快速兑现。
9.城镇内的市场主体报装水、电、气需要在红线外新增配套设施建设
的,由供水、供电、供气等企承担的部分,纳入企业经营成本;按规
由政府承担的部分,应当及时拨款委托供水、供电、供气等企业建设,或
者由政府直接投资建设。
10.本省格控制新设行政许可,止以案、登记、注册、目录
规划、年检、年报、监制、认定、认证、审定以及其他任何形式变相设定
或者实施行政许可。对通过事中事后监管或者市场机制能够解决以及行政
许可法和国务院规定不得设立行政许可的事项,一律不得设立行政许可。
11.在确保质安全前提下,对社投资的小型低风险程建设项目,
由有关部门发布统一的企业项目范围、开工条件。项目单位取得用地、满
足开工条件后作出相关承诺,有关部门直接发放相关证书,项目即可开工。
+
黔东南州产业大招商政策
摘编
·167·
社会投资的小型低风险工程建设项目工程规划许可和施工许可依法可以合
并办理的,应当合并办理。从立项到不动产登记全流程审批时间累计不超
15日。房屋建筑工程类社会投资项目审批时间不超过40日。
(二)“贵人服务”政策
1.大力提升政务服务水平。实施政务服务事项标准化攻坚工程,实现
省内所有事项“全省通办”。除涉密和特别复杂事项外,“一窗办”全省
全覆盖,企业开办、不动产登记、水电气视讯等涉企事项“一窗进”“一
窗出”。规范编制“一次办”办事指南,实现全省政务服务事项“一件事
一次办”。在贵州政务服务网开设人才服务、重点产业、乡村振兴、财政
支持、项目投资、金融服务、知识产权、科技创新等专区20个以上,精准
服务重点领域和产业。
2.优化企业开办服务和简易注销。优化升级企业开办“一网通办”系
统和企业注销网上服务专区,力争打造企业开办和企业注销最佳服务链。
登录一个网站即可一次性办理营业执照、刻制印章、申领发票和税控设备、
员工参保登记、住房公积金企业缴存登记,1天内办结;银行开户1天。进
一步简化企业注销登记程序和材料,加强跨部门业务协同,提供“套餐式
企业注销服务。
3.提高工程建设项目审批服务效率。从立项到竣工验收全流程审批时
间:政府投资类工程项目不超过70个工作日;带方案出让的社会投资项目
不超过35个工作日;小型社会投资项目不超过45个工作日,一般社会投资
工程建设项目不超过50个工作日;既有建筑改造项目中基础类不超过15
工作日、完善类不超过18个工作日、提升类不超过23个工作日。探索研究
审批服务机构合并,提升工程建设项目审批服务能力和水平。
4.提升不动产登记便利度。各市州专设企业登记窗口,实现“一窗受
理、内部流转、即时办结、同窗出证”。逐步推进与公安、市场监管、法
+
黔东南州产业大招商政策
摘编
·168·
院、税务等部门业务协同信息共享,最大限度减少纸质资料收取。推动省
不动产登记云平台与省税务核税缴税系统、省财政非税收费系统业务协同,
企业间办理转移登记当场缴税费、缴登记费后,当场发证,企业最多跑一
次。
5.严格兑现政策承诺。把各级政府部门兑现政策、履行承诺、执行联
合信用奖惩情况纳入政务诚信监督考核内容,强化政务诚信建设,依法依
规处理“新官不理旧账”问题。
6.强化要素保障。围绕国家级开放平台“两主一特”(即两个主导产
经开区、一主一特
(即一个主导产业、一个特色产业)产业发展,强化用地、用电、用水、
用气等资源要素向园区倾斜,引导企业向园区集聚,切实降低企业要素成
本。
7.提升获得电力服务水平。进一步优化公用事业接入服务办理方式,
实现接入办理全过程网通办”集成服务。低压无外线工3工作
接电,小微企业低压无外线工极速报装2个工作日接电、有外线工程10
个工作日接电,高压单电源平均接电时间压缩20%
8.提高用水用气保障。加快推进用水用气报装信息化建设,提升用户
体验满意度。出台用水用气报装标准,统一流程、要件、时限等要素,缩
短通水通气受理答复和验收供应时间。建立完善报装投诉监管、纠纷解决
及回访机制2023年,线工程不超过30,水表口径在DN100以下
涉及行政审批时间不超过2.5工作日的,在8个工作日接表通水。
9.持续改善获得信贷水平。推动普惠小微企业贷款同比增速高于各项
贷款增速,有贷款余额的户数逐年增加。简化贷款办理流程,贷款办理时
间进一步压缩。推动区域性股权市场规范健康发展,做大做强登记、托管、
挂牌等股权业务,扩大中小微企业股权直接融资规模。建成贵州综合金融
+
黔东南州产业大招商政策
摘编
·169·
服务平台,持续优化升级,不断提升服务能力和水平。
10.优化动力市场监管。进一步强就监测平台建设,依据大
据监测促进实现更加充分的就业。健全劳动力市场调解与仲裁衔接机制,
通过调解组织协助申请和送达、一次性告知、仲裁机构就近就地开庭等措
施简化流程和缩短处理期限。把灵活就业、共享用工岗位信息纳入公共就
业服务范围,对设立劳务市场、零工市场或在各类招聘会开设灵活就业专
区给予支持、提供便利。
11.不断化纳税服务水平。在五种综申报基础上,进一步研
扩大税费缴纳综合申报范围,简并申报表,减轻税费缴纳负担。拓展“非
接触式”办税缴费服务,2023年实现企业所有办税缴费事项网上办,平均
时间缩短至80小时。
12.深化招标标改革。建立健全投标领域优化营商境长效机制,
全面清理招标投标制度规则、对同一事项有多个规定的,视情作出合并、
衔接、替代、废止等处理。对省、市(州)两级保留的招标投标地方性法
规、规章、规范性文件实行目录管理,并动态更新,未列入目录的,一律
不得作为行政监管依据。优化公共资源交易服务流程,推进公共资源交易
全流程电子化,建立“公开透明、公平公正、规范高效”的公共资源交易
市场。
13.提升包容普惠创新境。优层次人才引进计划,利用贵
才博览会等平台,工程化、项目化引进一批高层次创新创业人才(团队)
和急需紧缺专业技术技能人才,加快建成省级“人才之家”服务平台,升
级完善省人才服务绿卡制度,推行贵州“优才卡”。整合科技资源,支持
产、学、研组成市场化联合体,打通从基础研发到应用技术、再到产业化
的全过程通道。实施创新示范工程,为企业开展技术、产品创新搭建载体
平台。完善公共服务保障体系,切实解决好企业居住、交通、医疗、教育、
+
黔东南州产业大招商政策
摘编
·170·
社会保障等实际问题,提高企业满意度。
政策依据:打造“贵人服务”品牌建设国内一流营商环境三年行动计
划(20212023)黔委厅字〔20219
(三)贵州2023年度优化营商环境重点任务清单
()进一步打造开放透明的市场准入环境
1.提升企业开办“一网通办”服务效能。企业设立登记时,同步推送
税务、公安部门进行身份认证,并申领发票、免费发放电子发票公共服务
平台身份认证及信息加密设(税务Ukey)、刻制印章,企业登记完成后,
可通过“一网通办”平台办理医保登记、社保登记、住房公积金缴纳等服
务事项,推进同步发放及应用电子营业执照、电子发票,生成企业电子登
记档案,提高全程网办水平,续确保企业开办全流程办理时间不超过1
个工作日。
2.深入推进“一照多址”改革。经营范围不需前置许可的市场主体在
其住所所在县级辖区内增设经营场所,可不办理设立登记。在同一企业登
记机关管辖区域内,允许大型企业分支机构、连锁门店集中统一办理不涉
及新办许可证的信息变更。
4.持续提升工程项目审批效率。按照全领域、全覆盖、全流程要求,
强化“一个系统”功能,依托贵州政务服务网,全面归并单部门事项办理
入口,实现工程建设项目“全程网办”,推进全省工改系统从“能用”到
好用”“愿用”。实施“1+N”并联审批、联图、联合验收式,
按照“一家牵头、并联审批、限时办结”开展审批,并联审批率和联合验
收率分别达到30%35%。政府投资项目审批时限不超过70个工作日,社会
投资项目不超过40个工作日。
5.推进工程建设项目审批流程电子化试点工作。在有条件的市()
行工程建设项目审批流程电子证照“一次生成、统一流转、互认共用”。
+
黔东南州产业大招商政策
摘编
·171·
工程建设项目审批涉及的建设工程规划许可证、建设项目用地预审与选址
意见书、建筑工程施工许可证、人防工程质量监督手续、人防工程竣工验
收备案、房屋建筑和市政基础设施工程竣工验收备案等环节在试点地区实
现电子证照全面应用。
6.推进项目代码应用全覆盖。规范工程建设领域项目代码管理和应用,
投资项目在线审批监管平台生成的项目代码作为项目整个建设周期的唯一
身份标识,依法实现“一项一码”。
7.推进工业用地“标准地”改革。指导有条件的开发区、产业园区开
展“标准地改革,实“拿地即开工”。贵市、遵义市分别完5
以上“标准地”出让,其他市()分别完成2-3宗“标准地”出让。
8.提升电力服务水平。供电报装全面实现居民用户和低压小微企业办
电“三零”(零上门、零审批、投资)服务,高压用户办电三省”(
力、省时、省钱)服务。对合条件的低压短距离电力接入工程,探索实
行告知承诺和审批改备案。20千伏及以下短距离电力接入工程实现并联审
批,办理总时限不超过5个工作日。用电报装业务扩充时限达标率达97%
上,供电可靠率达99.87%以上综合电压合格99.7%上,
提升供电可靠性和稳定性。
9.提升用水用气便利度。用水、用气报装全过程审批时限分别压缩至
2.55个工作日以内。严格执行建筑区划红线外用户水气接入“零负担”
政策。强化企业一对一专人负责制,提供全天候24小时供水供气维修、抢
修等服务。
10.推动公用设施服务一件事一次办。完善水电气(宽带)联合
报装机制,实现一表申请、一窗受理、一站服务。推行水电气报装占掘路
并联审批、10个工作日内办结。
()进一步打造公平公正的企业经营环境
+
黔东南州产业大招商政策
摘编
·172·
11.降低企业税费负担全面推广字化电子发票,优化电子税
配套功能。推行全国车船税缴纳信息联网查询与核验。推进增值税留抵退
税、出口退税、企业所得税汇算清缴退税、误收多缴退税办理流程改造提
速,制造业纳税人增值税留抵退税时间压缩至2个工作日,办理正常出
口退税平均时间压缩6作日内,其中一类、二类出口业办理正常
出口退税平均时间压缩至3工作日内。严格落实各项税降费政策,切
实降低企业负担。
12.提升纳税缴费便利。完善互动平台,主动甄别符合享
惠政策条件的纳税人缴费人,推行“实时提醒、精准推送、智能应答、办
税引导、互动交流、决策支持、服务评价、全程管控”的征纳互动服务模
式,“非接触式”办税缴费事项比例达95%以上、金额比例达80%以上,领
用发票的新办税人电子发票领用比例80%依托自助办税端、
机构等,打造“15分钟办税服务圈”,为纳税人缴费人提供一体化、智慧
化、差异化涉税()服务。
13.拓展企业涉税数据放维度成辖区内欠税公告信息、非
户信息、骗取退税、虚开发票等高风险纳税人名单等信息归集。向国家税
务总局申请开放查询接口,实现与其他省级税务机关涉税信息共享共用。
14.推进跨部门综合监。对食药品、医疗器械、危险化学
燃气、特种设备、建筑工程质量等直接关系人民群众生命财产安全、公共
安全和潜在风险大、社会风险高的重点领域及新兴领域中涉及多部门监管
的事项,由行业主管部门或法律法规规定的主管部门会同相关监管部门梳
理实施跨部门综合监管事项,形成监管合力,在强化监管的同时,最大限
度减少对市场主体正常生产经营活动的干扰。
15.提升事中事后监管能。在建设、市场监管、生态环境
域建立企业信用风险分级分类管理指标体系和系统,完善“双随机、一公
+
黔东南州产业大招商政策
摘编
·173·
开”监管平台,推动“双随机、一公开”监管和企业信用风险分类管理深
度融合,“双随机、一公开”监管数据及时反馈回信用风险分类管理系统,
实现抽查监管全流程整合。“双随机、一公开”监管常态化,实现抽查事
项覆盖率达100%,非涉密检查结果公示率达100%
16.完善柔性执法和包审慎监度。推动非现”监管
接触”执法改革,健全“首违免罚”“柔性执法”“分级监管”等制度,
探索出“一目录五清单”(分类检查目录“不予、免予、减轻、从轻、
从重”处罚五清单)规范行政裁量权,精准高效监管执法。常态化开
展人民群众最不满意的行政执法问题整改活动。
17.加快推进政府采购电子化建。优升级政府采购监督管理系统
完善采购数据分析统计功能,将政府采购政策要求嵌入监管系统,进一步
压实采购主体责任,推动政府采购监督管理系统实现省市县全覆盖。推动
贵州省公共资源交易网与贵州省政府采购网互联互通。
18.加强招标投标信息开。严实《公共资源交易领域基层
公开标准指引》要求,依法必须招标项目的招标人及时主动公开合同订立
信息。完善各级公共资源交易平台、省招标投标公共服务平台合同签订和
监督功能,推动合同订立信息公开。
19.强化招标投标监管按照双随机、公开”监模式,地各
部门随机抽查例不低于本年度依法必须招标项目总量的10%,重点检
招标文件(资格预审文件)是否设立隐形壁垒、招标代理机构代理行为是否
扰乱市场秩序以及异议投诉办理等情况。
20.提升金融服务水平加快推广用贵州省大数据综合金融服
台,进一步完善政金企常态化对接机制,对重点企业、重点项目融资需求
给予精准化支持。完善风险分担补偿机制,促进银行、担保、保险机构合
作联动。推动金融机构成立首贷、续贷中心,并提高首贷、续贷审批效率
+
黔东南州产业大招商政策
摘编
·174·
和申贷获得率。用好科技创新再贷款、碳减排支持工具和支持煤炭清洁高
效利用专项再贷款政策,持续推动科技金融、绿色金融发展。力争全省制
造业贷款增速低于10%制造中长期贷款增量不低于80亿元,绿色
款增量不低于500亿元。
21.加大对中小微企业贷支持导金融机构依托金融科技加
字化转型,运用纳税、水电气、社保等信用信息,开发针对中小微企业的
金融产品。积极发展供应链金融,支持中小微企业开展应收账款融资。进
一步落实中小企业信贷通政策,扩大贷款规模。完善尽职免责、审批权限
下放、绩效考核等金融机构内部政策,推动金融机构“敢贷愿贷能贷会贷
长效机制建设。
22.大力推进创新创业扎实开千企对面”科服务,施规
上企业研发机扶持计划,新认定高新技术企业500家。深化科技管理
制改革,培育建设一批创业孵化载体,孵化一批初创企业。持续推进国家
级、省级“双创示范基地”建设。工程化、项目化引进一批高层次创新创
业人才(团队)和急需紧缺专业技术技能人才。
23.持续提升基本公共服务。推优质育资源均衡覆盖,缩小区域
城乡、校际教育资源差距。推动贵阳市、遵义市、安顺市、铜仁市区域内
医学检查检验结果互通共享。加大养老服务体系建设资金投入。持续打好
污染防治攻坚“五场战役”。实施森林质量精准提升工程。
24.
“公转铁”“公转水”等多式联运改革,推进铁路专用线建设,降低综合
货运成本。建成兰海高速重庆至遵义段(贵州境)扩容工程,加快沪昆高速
贵阳至盘州段扩容工程、贵阳至北海高速贵阳至平塘段建设,持续推进乌
江航道改造提升工程。
()进一步打造高效便捷的政务服务环境
+
黔东南州产业大招商政策
摘编
·175·
25.深化政务数据共享系统融深入实施政务服务数据融通
工程,除公安等部门自建业务系统外,完成省内自建业务系统与贵州政务
服务网整合,打通各部门之间、部门与企业之间的数据壁垒,推动政务数
据汇集上传系统和反流下沉基层,实现一般政务服务事项100%全程网办
(法律法规明确必须到现场办理或者申请资料涉密的事项除外)。打造贵州
自然人、法人数据云,依法收集与法人、个人有关的高频使用信息,对于
数据云中已有的信息,政务服务窗口原则上不再查看和收取纸质材料。
26.提升政务服务效能依托政务“张网”,鉴一窗合受
理模式,推动“一网一窗通办”改革,深入推进企业办事“一次告知、一
次办理、一次补证”。依托大数据、人工智能等前沿技术开展智能审批服
务,加强“移动办”“自助办”能力,做强多端服务,开展“一网一窗”
前端多渠道办理,赋能社会化平台多渠道应用,实现个人“移动办”事项
占比达70%在现有跨省线下通基础上,续推动跨线上办”“
动办”“自助办”。
27.全面推进政务服务电子化改革。推出100个高频事项“一证通办”,
实现户籍、婚姻、社保、医保、低保等20个行业证明通过数据核验在线开
具,在全省范围互认通用。加强电子证照归集与应用,省直各部门要梳理
本行业证照清,制定电子证照标准,实现70%以上的证照在贵州政务
务网数字证照系统同步制发应用。各地各部门按照全省统一要求,全面落
实事项办结后电子证照和纸质证照同步制发应用,充分利用电子证照利企
便民。全省电子印章使用率提升到70%以上。
28.推进不动产登记、易和缴线上线下一窗受理、并行办理
善不动产登记平台和税务信息系统业务联办、政务服务身份认证等功能,
在贵阳、遵义等城市开展房屋交易信息共享,推进与法院、公安、市场监
管、税务等部门业务协同、信息共享,初步实现贵阳、遵义主要城区不动
+
黔东南州产业大招商政策
摘编
·176·
产登记、交易和缴税线上线下一窗受理、并行办理。
29.提升公共资源交易台便利务水平。全面建成公共资源
“全省一张网”,优化平台系统基础功能、增值功能、智慧功能,升级网
上交易大厅。积极探索省际区域性协作,破除交易隐性壁垒。推广电子保
函代替投标保证金,鼓励招标人接受保函(含电子保函)等非现金交易担保
方式。
30.提升口岸通关率。鼓励业采“提申报”“两步申
方式理通手续,实“7×24小时预约通关,利国际贸易单一
窗口”为企业提供进出口货物全流程单证查询服务。对符合备案要求的,
报关单位备案时限控制在3个工作日内。
31.提升12345热线工单诉求办结率。进一步畅通各地各部门诉求“一
号通办”“电话办”渠道,年底前实现各市()数据全量汇聚。加强对各
地各部门诉求办理处置全过程监管和考核评价,提升诉求一次办结率。
()进一步打造健全规范的法治保障环境
32.提升涉企案件审判效。推民法院在线服务平台运用,
法院网上立案率同比提升5百分点。建立涉企超18个月未结一审案件台
账,制定清结案,实现全省法院长期未结一审案件清结率达85%。持
续深化诉源治理,依托88个人民法庭观测点,大力开展诉前调解和巡回审
判。
33.提升就业服务保障平。深业员工录一件事和就业参
保登记一体化改革,推广运用电子劳动合同。完善劳动投诉申诉处理、争
议解决等工作机制。推进企业吸纳就业社会保险补贴“直补快办”。
34.加强劳动者合法权保护。建立劳动仲裁与法律援助工
接机制,在劳动人事争议仲裁机构设立法律援助工作站。完善政府部门、
工会、企业共同参与的协商协调机制。推进劳动关系“云调解”“云庭审”
+
黔东南州产业大招商政策
摘编
·177·
建设,实现申请劳动人事争议调解仲裁“零跑动”。加大劳动监察执法力
度,加强灵活就业人员权益保护,逐步提高灵活就业人员获得医疗、养老
等社会保障的覆盖面。
35.健全知识产权全链保护体严厉打击侵犯知识产权和制
冒伪劣商品行为,年底前实现全省知识产权纠纷行政机关办理案件法定期
限内综合案率100%知识产权纠纷法案件法定审限内结案率达90%
以上。
36.加强知识产权质押资。推行等金融机构与市场主体开
接,提升知识产权质押登记便利化水平,将知识产权质押登记完成时限缩
短至5个工作日内。
37.优化知识产权服务指导知权代理机构为中小微企业提
识产权咨询、基础代理、维权等专业化服务,引导企业建立完善知识产权
管理制度。对首次通过知识产权管理规范国家标准认证的企业给予资助。
年底全省高价值发明专利同比增长5%
38.保护中小投资者合权益。全省各类市场主体监管,依
处证券期货违法违规行为和非法证券期货活动。推动投资者教育基地建设,
对辖区内市场主体开展保护投者宣传及证券机构合规经营培训不少于2
次。健全全省证券期货纠纷多元化解机制,提升中小投资者纠纷调解能力
和效率。
39.推动企业上市挂牌加强上牌后备企业资源库建设,主
企业开展资本市场业务培训,指导企业按照上市挂牌公司标准规范运作,
推动符合条件的企业在沪深北证券交易所和境外上市挂牌。
40.推进破产案件分流制定破件简化审理工作机制,按简
度分为无产可破、简单、普通三类,除特殊情况外,无产可破、简单案件
于裁定受理之日起6个月内审结,普通案件于24个月内审结。
+
黔东南州产业大招商政策
摘编
·178·
41.加快清理长期未结产案件定三年以上未结案件清理方
结案计划,年前完80%的清理工作。省法院、省公安厅和省检察
合建立打击逃废债工作机制,加强对破产企业财产的追查和管理,有效保
护债权人合法权益。推动“贵州智破云平台”运用,实现全省破产案件平
台化管理。
()进一步打造以企业为贵的“贵人服务”营商环境品牌
42.打造企业家”。围绕企业全生命期、全经链条、生产
要素保障,依托各级政务服务中心,打造集政务服务、商务服务、投诉接
处、惠企政策兑现等功能于一体的“企业之家”。
43.着力消除营商环境点堵点展“局长走流”活动通过
各级审批、执法和公共服务部门主要负责人体验企业办事流程、跟踪执法、
处理投诉等全过程,查找政策、流程、服务差距和不足,优化顶层设计。
持续聘用企业家担任“义务监督员”“政务服务体验官”,对营商环境进
行常态化社会监督。
44.开展企业包保代办务。深进网格化企业服务机制,建
全属地党政、行业部门主要负责人倾听企业发展需求常态化机制。围绕企
业“全生命周期”事项,梳理形成创业“一件事”、工程项目审批“一件
事”、复工复产政策兑现“一件事”等事项,实现一站式代办服务。持续
开展项目全程代办服务,制定标准化服务清单和个性化服务清单,提供全
程免费代办服务。
45.提高惠企政策获取。定期公布惠企政策清单,利用贵
务服务网、“贵商易”企业综合服务平台等精准推送。简化惠企政策申报
材料、流程,推进惠企政策在贵州政务服务网和政务大厅“一网办”“一
窗办”。推进部分惠企政策“免申即享”,让政策红利精准直达企业。
46.开展法律暖企服务动。汇师、公证、人民调解、仲裁
+
黔东南州产业大招商政策
摘编
·179·
律服务资源,加强对中小微企业普惠性法律服务。深化涉企矛盾纠纷源头
治理,发挥司法在商事调解工作中的推动和保障作用。
47.强化诚信政府建设开展政资项目拖欠账款或以不签合
不开发票、不验收、不结算等方式变相拖欠账款的专项清理行动。公开曝
光整治新官不理旧账”“ 招商引资承诺不兑现”“政策落实不到
位”“不作为、乱作为”等突出问题。开展以党政机关为被执行人的特殊
主体案件专项执行行动,督促党政机关及时履行法律文书确定义务。
三、组织保障
48.加强组织领导。落各级各主要负责人营商环境建设第
任人制度,坚持各级各部门主要负责人牵头研究部署、分管负责人协调推
动、相关部门协同推进机制。各级各部门要配齐配强营商环境工作队伍,
强化业务培训,抓好梯队建设,保持队伍的稳定性和延续性。
49.强化调度考核。各营商环设主管部门要落实“月调、季
通报、年考核”工作推进机制,加强上下联动,形成省市县三级协同优化
营商环境的良好局面。建立以企业家获得感为导向的营商环境考核制度,
优化营商环境评价指标体系,将企业家评价权重提升至80%
50.营造良好社会氛围鼓励各展优秀企业家评选表彰活动
用各级各部门网站、新媒体平台,开设“营商环境”专栏,广泛宣传优化
营商环境政策措施、经验做法,曝光损害营商环境的负面行为和典型案件,
营造良好社会氛围。
政策依据:省人民政府办公厅关于印发贵州省2023年度优化营商环境
重点任务清单的通知(黔府办函〔202316号)
(四)项目投资服务政策
()大力推进企业开办“一网通办、一窗通办”
1.企业开办线上“一网通办”。完善全省企业开办“一网通办”平台
+
黔东南州产业大招商政策
摘编
·180·
(以下简称“一网通办”平台),将企业设立登记后首次办理公章刻制、申
领发票和税控设备、员工参保登记、医保登记、住房公积金企业缴存登记、
银行开户等事项纳入“一网通办”平台覆盖范围。深化贵州政务服务网与
“一网通办”平台融通,各地应鼓励和引导申请人通过贵州政务服务网在
线申请办理,对申请人需要线下现场办理的,各级市场监管部门要积极引
导、指导申请人在线办理。公安、税务、社保、医保、住房公积金管理、
开户银行等部门要在“一网通办”平台实现企业开办有关业务办理,不得
要求申请人重复提交纸质申请材料。
2.企业开办线下“一窗通办”。根据《贵州省政务服务“一窗通办
工作规(试行)(放管组办发20201)、《省场监管局等
部门关于进一步完善企业开办"一网通办、一窗通"作的通知》(黔市
监办发〔202137)求,县级以上政务服务大厅要调设置企业
专窗,由政务服务中心通过增加编制、调剂原部门进驻人员、购买服务等
方式配备人员。企业开办专窗承担现场咨询、前台收件、一窗发放等工作,
各业务部门派驻实体政务大厅后台负责相关事项审批决定,通过前后台全
程无缝对接,实现企业开办线下“一窗受理,一窗发放”。新开办企业通
过线上或线下方式申请办理相关业务,并选择领取纸质营业执照、免费公
章、纸质发票和税控设备等全套实体办件的,可由新开办企业法定代表人
持本人身份证原件到企业开办专窗领取,也可由新办企业填报的委托代理
人持本人身份证原件到企业开办专窗领取。
()大力推动企业开办要素电子化
1.推广电子营业执照应用。依托贵州政务服务网电子证照库,推广电
子营业执照在政务领域应用,实现企业申请办理政务服务事项时使用电子
营业执照“可登录、可核验、免提交”。将电子营业执照作为企业开办相
关业务的合法有效身份证明和电子签名手段。拓展电子营业执照在商务领
+
黔东南州产业大招商政策
摘编
·181·
域应用,加大电子营业执照数据共享力度,为涉企银行业务提供电子营业
执照查询、存档、校验等服务能力,推动商业银行使用电子营业执照作为
企业身份凭证办理开户业务,企业免于提交纸质营业执照原件或复印件。
2.继续推动电子发票应用。继续推行增值税电子普通发票,在新办纳
税人中实行增值税专用发票电子化。
3.明确企业亮照经营方式。企业在经营场所中公开展示电子营业执照,
等同于悬挂纸质营业执照,视为已履行亮照经营义务。
4.完善身份验证方式。优化“一网通办”平台身份验证功能,企业开
办相关自然人通过“一网通办”平台一次身份验证后,其他业务部门共享
使用“一网通办”平台身份验证信息,在相关业务审批办理、证照发放等
工作中不再重复进行身份验证。
5.强化部门信息共享。省级层面实现“一网通办”平台与市场监管、
公安、税务、社保、医保、公积金、开户银行等部门相关业务办理系统的
共享对接,实现申请事项信息的“实时流转、及时反馈”。
①市场监部门应当0.5作日内办结新开办企业立登记申请,
“一网通”平台将相关信息实时(“网通办”台与部门业务办理
统之间的数据推送和接收间隔应小于10分钟)共享给相关部门。
②各相关部门获取信息后,公安部门通过系统将有关信息即时推送至
印章刻制单位印章刻制单位应当0.5工作日内办结;税部门
0.5工作日内办结发票和税控设申请;社保、医保、公积金管理
门收到相关信0.5个工作日内办结关业务;开户银行收到相关
0.5工作日内生成企业账预约账号,并通过平台推送给税务、社保、
医保、住房公积金管理等部门。③各业务办理部门应当及时将相关业务受
理、核准等办理状态信息反馈至“一网通办”平台,申请人可通过“一网
通办”平台即时查阅办理进度。
+
黔东南州产业大招商政策
摘编
·182·
()大力简化企业开办业务流程
1.企业设立登记再简化。
有序推进企业住所(营场所)告知承诺制,新开办企业选择通过告知
承诺方式办理住所(经营场所)登记并按要求做出承诺的,市场监管部门不
再收取住所(经营场所)合法使用证明。全面实行经营范围规范化登记,将
经营范围由登记叙述文字优化调整为登记规范条目,由申请人从规范目录
中自由选择规范条目申请登记,进一步优化经营范围登记方式和内容,降
低企业经营范登记的制度性成本。市场监管部门应当在0.5个工作日
办结企业设立登记申请,并及时将纸质营业执照送达企业所在地政务服务
中心企业开办专窗,由企业开办专窗统一发放。
2.公章刻制程序再优化。
新开办企业可以通过“一网通办”平台选择免费实物印章,由企业所
在地政府提供一次免费刻章服务。提供免费刻章服务的印章刻制企业应当
0.5工作日内完成印章制作、备,并及时将实物印章送达企业所
地政务服务中心企业开办专窗,由企业开办专窗统一发放。对于印章刻制
企业未按本《通知》要求按时刻制印章或引起较多投诉的,“一网通办”
平台管理部门有权将其移除平台。
3.涉税事项办理再提升。
新开办企业通过“一网通办”平台申请办理申领发票和税控设备的,
税务部门应当0.5工作日内成,并及时将发票和税控设送达企业
所在地政务服务中心企业开办专窗,由企业开办专窗统一发放。
4.员工参保登记(含医保)、住房公积金企业缴存登记再整合。
在已实现新开办企业就业参保登记、住房公积金企业缴存登记“一网
通办”基础上,进一步将医保登记整合纳入“一网通办”平台覆盖范围。
新开办企业通过“一网通办”平台填报的申请信息在企业设立登记后实时
+
黔东南州产业大招商政策
摘编
·183·
共享至社保、保、公积金管理部门,相关部门应当0.5个工作日
结业务。
5.银行开户再提速。
新开办企通过“一网通"申请办理银行开户的,开户行应
当在0.5个工作日内生成企业账预约账号,并同步通过网通办”
台反馈申请人。后续开户银行根据预约需求及时联系申请人,按照规定为
企业开立账户。推动开户银行使用电子营业执照作为企业身份凭证开设银
行账户,企业免于提交纸质营业执照原件或复印件。
政策依据:省市场监管局等九部门关于进一步加大改革力度不断提升
企业开办服务水平的通知(黔市监办发〔202153号)
(五)贵州省招商引资项目代办服务暂行办法
在省、市、县三级投资促进机构和省级以上经济开发区管委会,设立
利用外资和招商引资项目代办服务中心受理招商引资项目代办事项。
对符合产导向的利用外和境内省外的招商引资项目(含国
观调控项目“两高一资”房地产开发项目)项目立项到项目开工、
投产全过程中所涉及的行政审批事项,以及供电、供水、供气、消防、排
水、通讯、网络等公共服务事项,投资者均可委托代办服务中心代为办理
相关手续,并可根据自身需要选择全程代办或部分代办,特殊情况也可申
请延伸代办服务。
质量发展的指导意见
引导产业项目符合生态红线管控要求。
在项目规划、招商、设计阶段,通过强化“三线一单”提前介入,指
导项目业主避让生态保护红线,避让不利地质条件,优化选择建设用地。
+
黔东南州产业大招商政策
摘编
·184·
实施清单管理。
建立重点支持重大项目清单,实施台账制管理,按月调度项目环评审
批工作进展,对完成项目环评审批的逐一销号;强化技术评估同步介入和
专班专人服务,通过加强企业、环评单位、技术评估单位和审批部门的联
动,切实保障编制质量,确保一次受理,一次评估、一次审批,全过程做
实跟踪指导服务。
简化资料和程序。
全面梳理生态环境准入正面清单,及时调整豁免清单。深入实施环评、
排污许可和入河排污口设置“三合一”行政审批制度,实行一次审批。实
施“一站式服务”,做到“一窗通办”“全省通办”、“一网通办”和排
污许可“全国通办”。严格落实评估时间纳入审批时间的要求,先受理后
评估,评估费用纳入财政预算,严格报告书审批时15个工作日,报告表
7个工作日的要求(不含规定的公示时间)
政策依据:贵州省生态环境厅关于印发《贵州省生态环境厅关于生态
环境保护优化推动产业高质量发展的指导意见》的通知(黔环发〔2021
6号)
+
黔东南州产业大招商政策
摘编
·185·
黔东南州各县市(区)招商电话
黔东南州招商热线:4008-799399
凯里市投资促进局:0855-8068237
丹寨县投资促进局:0855-3695381
麻江县投资促进局:0855-2678228
黄平县投资促进局:0855-2438559
施秉县投资促进局:0855-4222036
镇远县投资促进局:0855-5722848
岑巩县投资促进局:0855-3576046
三穗县投资促进局:0855-4525831
天柱县投资促进局:0855-3850088
锦屏县投资促进局:0855-7225677
黎平县投资促进局:0855-6227627
从江县投资促进局:0855-6419038
榕江县投资促进局:0855-6620368
雷山县投资促进局:0855-3333103
台江县投资促进局:0855-5324777
剑河县投资促进局:0855-5220166
黔东南高新区投资促进局:0855-8559108
+
《黔东南州招商》微信公众号
黔东南招商项目信息
招商热线:4008-799399
址:http://tzcj.qdn.gov.cn/
+
+
+ +
+ + diff --git a/qdntz/加载PDF/123.pdf b/qdntz/加载PDF/123.pdf new file mode 100644 index 0000000..8852b98 Binary files /dev/null and b/qdntz/加载PDF/123.pdf differ diff --git a/qdntz/加载PDF/PDFViewer b/qdntz/加载PDF/PDFViewer new file mode 160000 index 0000000..20b4f88 --- /dev/null +++ b/qdntz/加载PDF/PDFViewer @@ -0,0 +1 @@ +Subproject commit 20b4f8879ffcaddb7da2c3fe3fbf23fcc22e121b diff --git a/qdntz/加载PDF/pdfh5 b/qdntz/加载PDF/pdfh5 new file mode 160000 index 0000000..fe67ef3 --- /dev/null +++ b/qdntz/加载PDF/pdfh5 @@ -0,0 +1 @@ +Subproject commit fe67ef36df9a64f39624ff34c63599cc911560ef diff --git a/qdntz/加载PDF/pdfjs-4.0.189-dist.zip b/qdntz/加载PDF/pdfjs-4.0.189-dist.zip new file mode 100644 index 0000000..1d9a951 Binary files /dev/null and b/qdntz/加载PDF/pdfjs-4.0.189-dist.zip differ diff --git a/qdntz/加载PDF/pdfjs-4.0.189-dist/LICENSE b/qdntz/加载PDF/pdfjs-4.0.189-dist/LICENSE new file mode 100644 index 0000000..f433b1a --- /dev/null +++ b/qdntz/加载PDF/pdfjs-4.0.189-dist/LICENSE @@ -0,0 +1,177 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS diff --git a/qdntz/加载PDF/pdfjs-4.0.189-dist/build/pdf.mjs b/qdntz/加载PDF/pdfjs-4.0.189-dist/build/pdf.mjs new file mode 100644 index 0000000..aa2be7d --- /dev/null +++ b/qdntz/加载PDF/pdfjs-4.0.189-dist/build/pdf.mjs @@ -0,0 +1,16883 @@ +/** + * @licstart The following is the entire license notice for the + * JavaScript code in this page + * + * Copyright 2023 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @licend The above is the entire license notice for the + * JavaScript code in this page + */ + +/******/ var __webpack_modules__ = ({ + +/***/ 640: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + AnnotationLayer: () => (/* binding */ AnnotationLayer), + FreeTextAnnotationElement: () => (/* binding */ FreeTextAnnotationElement), + InkAnnotationElement: () => (/* binding */ InkAnnotationElement), + StampAnnotationElement: () => (/* binding */ StampAnnotationElement) +}); + +// EXTERNAL MODULE: ./src/shared/util.js +var util = __webpack_require__(266); +// EXTERNAL MODULE: ./src/display/display_utils.js +var display_utils = __webpack_require__(473); +// EXTERNAL MODULE: ./src/display/annotation_storage.js +var annotation_storage = __webpack_require__(780); +;// CONCATENATED MODULE: ./src/shared/scripting_utils.js +function makeColorComp(n) { + return Math.floor(Math.max(0, Math.min(1, n)) * 255).toString(16).padStart(2, "0"); +} +function scaleAndClamp(x) { + return Math.max(0, Math.min(255, 255 * x)); +} +class ColorConverters { + static CMYK_G([c, y, m, k]) { + return ["G", 1 - Math.min(1, 0.3 * c + 0.59 * m + 0.11 * y + k)]; + } + static G_CMYK([g]) { + return ["CMYK", 0, 0, 0, 1 - g]; + } + static G_RGB([g]) { + return ["RGB", g, g, g]; + } + static G_rgb([g]) { + g = scaleAndClamp(g); + return [g, g, g]; + } + static G_HTML([g]) { + const G = makeColorComp(g); + return `#${G}${G}${G}`; + } + static RGB_G([r, g, b]) { + return ["G", 0.3 * r + 0.59 * g + 0.11 * b]; + } + static RGB_rgb(color) { + return color.map(scaleAndClamp); + } + static RGB_HTML(color) { + return `#${color.map(makeColorComp).join("")}`; + } + static T_HTML() { + return "#00000000"; + } + static T_rgb() { + return [null]; + } + static CMYK_RGB([c, y, m, k]) { + return ["RGB", 1 - Math.min(1, c + k), 1 - Math.min(1, m + k), 1 - Math.min(1, y + k)]; + } + static CMYK_rgb([c, y, m, k]) { + return [scaleAndClamp(1 - Math.min(1, c + k)), scaleAndClamp(1 - Math.min(1, m + k)), scaleAndClamp(1 - Math.min(1, y + k))]; + } + static CMYK_HTML(components) { + const rgb = this.CMYK_RGB(components).slice(1); + return this.RGB_HTML(rgb); + } + static RGB_CMYK([r, g, b]) { + const c = 1 - r; + const m = 1 - g; + const y = 1 - b; + const k = Math.min(c, m, y); + return ["CMYK", c, m, y, k]; + } +} + +// EXTERNAL MODULE: ./src/display/xfa_layer.js +var xfa_layer = __webpack_require__(160); +;// CONCATENATED MODULE: ./src/display/annotation_layer.js + + + + + +const DEFAULT_TAB_INDEX = 1000; +const DEFAULT_FONT_SIZE = 9; +const GetElementsByNameSet = new WeakSet(); +function getRectDims(rect) { + return { + width: rect[2] - rect[0], + height: rect[3] - rect[1] + }; +} +class AnnotationElementFactory { + static create(parameters) { + const subtype = parameters.data.annotationType; + switch (subtype) { + case util.AnnotationType.LINK: + return new LinkAnnotationElement(parameters); + case util.AnnotationType.TEXT: + return new TextAnnotationElement(parameters); + case util.AnnotationType.WIDGET: + const fieldType = parameters.data.fieldType; + switch (fieldType) { + case "Tx": + return new TextWidgetAnnotationElement(parameters); + case "Btn": + if (parameters.data.radioButton) { + return new RadioButtonWidgetAnnotationElement(parameters); + } else if (parameters.data.checkBox) { + return new CheckboxWidgetAnnotationElement(parameters); + } + return new PushButtonWidgetAnnotationElement(parameters); + case "Ch": + return new ChoiceWidgetAnnotationElement(parameters); + case "Sig": + return new SignatureWidgetAnnotationElement(parameters); + } + return new WidgetAnnotationElement(parameters); + case util.AnnotationType.POPUP: + return new PopupAnnotationElement(parameters); + case util.AnnotationType.FREETEXT: + return new FreeTextAnnotationElement(parameters); + case util.AnnotationType.LINE: + return new LineAnnotationElement(parameters); + case util.AnnotationType.SQUARE: + return new SquareAnnotationElement(parameters); + case util.AnnotationType.CIRCLE: + return new CircleAnnotationElement(parameters); + case util.AnnotationType.POLYLINE: + return new PolylineAnnotationElement(parameters); + case util.AnnotationType.CARET: + return new CaretAnnotationElement(parameters); + case util.AnnotationType.INK: + return new InkAnnotationElement(parameters); + case util.AnnotationType.POLYGON: + return new PolygonAnnotationElement(parameters); + case util.AnnotationType.HIGHLIGHT: + return new HighlightAnnotationElement(parameters); + case util.AnnotationType.UNDERLINE: + return new UnderlineAnnotationElement(parameters); + case util.AnnotationType.SQUIGGLY: + return new SquigglyAnnotationElement(parameters); + case util.AnnotationType.STRIKEOUT: + return new StrikeOutAnnotationElement(parameters); + case util.AnnotationType.STAMP: + return new StampAnnotationElement(parameters); + case util.AnnotationType.FILEATTACHMENT: + return new FileAttachmentAnnotationElement(parameters); + default: + return new AnnotationElement(parameters); + } + } +} +class AnnotationElement { + #hasBorder = false; + constructor(parameters, { + isRenderable = false, + ignoreBorder = false, + createQuadrilaterals = false + } = {}) { + this.isRenderable = isRenderable; + this.data = parameters.data; + this.layer = parameters.layer; + this.linkService = parameters.linkService; + this.downloadManager = parameters.downloadManager; + this.imageResourcesPath = parameters.imageResourcesPath; + this.renderForms = parameters.renderForms; + this.svgFactory = parameters.svgFactory; + this.annotationStorage = parameters.annotationStorage; + this.enableScripting = parameters.enableScripting; + this.hasJSActions = parameters.hasJSActions; + this._fieldObjects = parameters.fieldObjects; + this.parent = parameters.parent; + if (isRenderable) { + this.container = this._createContainer(ignoreBorder); + } + if (createQuadrilaterals) { + this._createQuadrilaterals(); + } + } + static _hasPopupData({ + titleObj, + contentsObj, + richText + }) { + return !!(titleObj?.str || contentsObj?.str || richText?.str); + } + get hasPopupData() { + return AnnotationElement._hasPopupData(this.data); + } + _createContainer(ignoreBorder) { + const { + data, + parent: { + page, + viewport + } + } = this; + const container = document.createElement("section"); + container.setAttribute("data-annotation-id", data.id); + if (!(this instanceof WidgetAnnotationElement)) { + container.tabIndex = DEFAULT_TAB_INDEX; + } + container.style.zIndex = this.parent.zIndex++; + if (this.data.popupRef) { + container.setAttribute("aria-haspopup", "dialog"); + } + if (data.noRotate) { + container.classList.add("norotate"); + } + const { + pageWidth, + pageHeight, + pageX, + pageY + } = viewport.rawDims; + if (!data.rect || this instanceof PopupAnnotationElement) { + const { + rotation + } = data; + if (!data.hasOwnCanvas && rotation !== 0) { + this.setRotation(rotation, container); + } + return container; + } + const { + width, + height + } = getRectDims(data.rect); + const rect = util.Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]); + if (!ignoreBorder && data.borderStyle.width > 0) { + container.style.borderWidth = `${data.borderStyle.width}px`; + const horizontalRadius = data.borderStyle.horizontalCornerRadius; + const verticalRadius = data.borderStyle.verticalCornerRadius; + if (horizontalRadius > 0 || verticalRadius > 0) { + const radius = `calc(${horizontalRadius}px * var(--scale-factor)) / calc(${verticalRadius}px * var(--scale-factor))`; + container.style.borderRadius = radius; + } else if (this instanceof RadioButtonWidgetAnnotationElement) { + const radius = `calc(${width}px * var(--scale-factor)) / calc(${height}px * var(--scale-factor))`; + container.style.borderRadius = radius; + } + switch (data.borderStyle.style) { + case util.AnnotationBorderStyleType.SOLID: + container.style.borderStyle = "solid"; + break; + case util.AnnotationBorderStyleType.DASHED: + container.style.borderStyle = "dashed"; + break; + case util.AnnotationBorderStyleType.BEVELED: + (0,util.warn)("Unimplemented border style: beveled"); + break; + case util.AnnotationBorderStyleType.INSET: + (0,util.warn)("Unimplemented border style: inset"); + break; + case util.AnnotationBorderStyleType.UNDERLINE: + container.style.borderBottomStyle = "solid"; + break; + default: + break; + } + const borderColor = data.borderColor || null; + if (borderColor) { + this.#hasBorder = true; + container.style.borderColor = util.Util.makeHexColor(borderColor[0] | 0, borderColor[1] | 0, borderColor[2] | 0); + } else { + container.style.borderWidth = 0; + } + } + container.style.left = `${100 * (rect[0] - pageX) / pageWidth}%`; + container.style.top = `${100 * (rect[1] - pageY) / pageHeight}%`; + const { + rotation + } = data; + if (data.hasOwnCanvas || rotation === 0) { + container.style.width = `${100 * width / pageWidth}%`; + container.style.height = `${100 * height / pageHeight}%`; + } else { + this.setRotation(rotation, container); + } + return container; + } + setRotation(angle, container = this.container) { + if (!this.data.rect) { + return; + } + const { + pageWidth, + pageHeight + } = this.parent.viewport.rawDims; + const { + width, + height + } = getRectDims(this.data.rect); + let elementWidth, elementHeight; + if (angle % 180 === 0) { + elementWidth = 100 * width / pageWidth; + elementHeight = 100 * height / pageHeight; + } else { + elementWidth = 100 * height / pageWidth; + elementHeight = 100 * width / pageHeight; + } + container.style.width = `${elementWidth}%`; + container.style.height = `${elementHeight}%`; + container.setAttribute("data-main-rotation", (360 - angle) % 360); + } + get _commonActions() { + const setColor = (jsName, styleName, event) => { + const color = event.detail[jsName]; + const colorType = color[0]; + const colorArray = color.slice(1); + event.target.style[styleName] = ColorConverters[`${colorType}_HTML`](colorArray); + this.annotationStorage.setValue(this.data.id, { + [styleName]: ColorConverters[`${colorType}_rgb`](colorArray) + }); + }; + return (0,util.shadow)(this, "_commonActions", { + display: event => { + const { + display + } = event.detail; + const hidden = display % 2 === 1; + this.container.style.visibility = hidden ? "hidden" : "visible"; + this.annotationStorage.setValue(this.data.id, { + noView: hidden, + noPrint: display === 1 || display === 2 + }); + }, + print: event => { + this.annotationStorage.setValue(this.data.id, { + noPrint: !event.detail.print + }); + }, + hidden: event => { + const { + hidden + } = event.detail; + this.container.style.visibility = hidden ? "hidden" : "visible"; + this.annotationStorage.setValue(this.data.id, { + noPrint: hidden, + noView: hidden + }); + }, + focus: event => { + setTimeout(() => event.target.focus({ + preventScroll: false + }), 0); + }, + userName: event => { + event.target.title = event.detail.userName; + }, + readonly: event => { + event.target.disabled = event.detail.readonly; + }, + required: event => { + this._setRequired(event.target, event.detail.required); + }, + bgColor: event => { + setColor("bgColor", "backgroundColor", event); + }, + fillColor: event => { + setColor("fillColor", "backgroundColor", event); + }, + fgColor: event => { + setColor("fgColor", "color", event); + }, + textColor: event => { + setColor("textColor", "color", event); + }, + borderColor: event => { + setColor("borderColor", "borderColor", event); + }, + strokeColor: event => { + setColor("strokeColor", "borderColor", event); + }, + rotation: event => { + const angle = event.detail.rotation; + this.setRotation(angle); + this.annotationStorage.setValue(this.data.id, { + rotation: angle + }); + } + }); + } + _dispatchEventFromSandbox(actions, jsEvent) { + const commonActions = this._commonActions; + for (const name of Object.keys(jsEvent.detail)) { + const action = actions[name] || commonActions[name]; + action?.(jsEvent); + } + } + _setDefaultPropertiesFromJS(element) { + if (!this.enableScripting) { + return; + } + const storedData = this.annotationStorage.getRawValue(this.data.id); + if (!storedData) { + return; + } + const commonActions = this._commonActions; + for (const [actionName, detail] of Object.entries(storedData)) { + const action = commonActions[actionName]; + if (action) { + const eventProxy = { + detail: { + [actionName]: detail + }, + target: element + }; + action(eventProxy); + delete storedData[actionName]; + } + } + } + _createQuadrilaterals() { + if (!this.container) { + return; + } + const { + quadPoints + } = this.data; + if (!quadPoints) { + return; + } + const [rectBlX, rectBlY, rectTrX, rectTrY] = this.data.rect; + if (quadPoints.length === 1) { + const [, { + x: trX, + y: trY + }, { + x: blX, + y: blY + }] = quadPoints[0]; + if (rectTrX === trX && rectTrY === trY && rectBlX === blX && rectBlY === blY) { + return; + } + } + const { + style + } = this.container; + let svgBuffer; + if (this.#hasBorder) { + const { + borderColor, + borderWidth + } = style; + style.borderWidth = 0; + svgBuffer = ["url('data:image/svg+xml;utf8,", ``, ``]; + this.container.classList.add("hasBorder"); + } + const width = rectTrX - rectBlX; + const height = rectTrY - rectBlY; + const { + svgFactory + } = this; + const svg = svgFactory.createElement("svg"); + svg.classList.add("quadrilateralsContainer"); + svg.setAttribute("width", 0); + svg.setAttribute("height", 0); + const defs = svgFactory.createElement("defs"); + svg.append(defs); + const clipPath = svgFactory.createElement("clipPath"); + const id = `clippath_${this.data.id}`; + clipPath.setAttribute("id", id); + clipPath.setAttribute("clipPathUnits", "objectBoundingBox"); + defs.append(clipPath); + for (const [, { + x: trX, + y: trY + }, { + x: blX, + y: blY + }] of quadPoints) { + const rect = svgFactory.createElement("rect"); + const x = (blX - rectBlX) / width; + const y = (rectTrY - trY) / height; + const rectWidth = (trX - blX) / width; + const rectHeight = (trY - blY) / height; + rect.setAttribute("x", x); + rect.setAttribute("y", y); + rect.setAttribute("width", rectWidth); + rect.setAttribute("height", rectHeight); + clipPath.append(rect); + svgBuffer?.push(``); + } + if (this.#hasBorder) { + svgBuffer.push(`')`); + style.backgroundImage = svgBuffer.join(""); + } + this.container.append(svg); + this.container.style.clipPath = `url(#${id})`; + } + _createPopup() { + const { + container, + data + } = this; + container.setAttribute("aria-haspopup", "dialog"); + const popup = new PopupAnnotationElement({ + data: { + color: data.color, + titleObj: data.titleObj, + modificationDate: data.modificationDate, + contentsObj: data.contentsObj, + richText: data.richText, + parentRect: data.rect, + borderStyle: 0, + id: `popup_${data.id}`, + rotation: data.rotation + }, + parent: this.parent, + elements: [this] + }); + this.parent.div.append(popup.render()); + } + render() { + (0,util.unreachable)("Abstract method `AnnotationElement.render` called"); + } + _getElementsByName(name, skipId = null) { + const fields = []; + if (this._fieldObjects) { + const fieldObj = this._fieldObjects[name]; + if (fieldObj) { + for (const { + page, + id, + exportValues + } of fieldObj) { + if (page === -1) { + continue; + } + if (id === skipId) { + continue; + } + const exportValue = typeof exportValues === "string" ? exportValues : null; + const domElement = document.querySelector(`[data-element-id="${id}"]`); + if (domElement && !GetElementsByNameSet.has(domElement)) { + (0,util.warn)(`_getElementsByName - element not allowed: ${id}`); + continue; + } + fields.push({ + id, + exportValue, + domElement + }); + } + } + return fields; + } + for (const domElement of document.getElementsByName(name)) { + const { + exportValue + } = domElement; + const id = domElement.getAttribute("data-element-id"); + if (id === skipId) { + continue; + } + if (!GetElementsByNameSet.has(domElement)) { + continue; + } + fields.push({ + id, + exportValue, + domElement + }); + } + return fields; + } + show() { + if (this.container) { + this.container.hidden = false; + } + this.popup?.maybeShow(); + } + hide() { + if (this.container) { + this.container.hidden = true; + } + this.popup?.forceHide(); + } + getElementsToTriggerPopup() { + return this.container; + } + addHighlightArea() { + const triggers = this.getElementsToTriggerPopup(); + if (Array.isArray(triggers)) { + for (const element of triggers) { + element.classList.add("highlightArea"); + } + } else { + triggers.classList.add("highlightArea"); + } + } + get _isEditable() { + return false; + } + _editOnDoubleClick() { + if (!this._isEditable) { + return; + } + const { + annotationEditorType: mode, + data: { + id: editId + } + } = this; + this.container.addEventListener("dblclick", () => { + this.linkService.eventBus?.dispatch("switchannotationeditormode", { + source: this, + mode, + editId + }); + }); + } +} +class LinkAnnotationElement extends AnnotationElement { + constructor(parameters, options = null) { + super(parameters, { + isRenderable: true, + ignoreBorder: !!options?.ignoreBorder, + createQuadrilaterals: true + }); + this.isTooltipOnly = parameters.data.isTooltipOnly; + } + render() { + const { + data, + linkService + } = this; + const link = document.createElement("a"); + link.setAttribute("data-element-id", data.id); + let isBound = false; + if (data.url) { + linkService.addLinkAttributes(link, data.url, data.newWindow); + isBound = true; + } else if (data.action) { + this._bindNamedAction(link, data.action); + isBound = true; + } else if (data.attachment) { + this.#bindAttachment(link, data.attachment, data.attachmentDest); + isBound = true; + } else if (data.setOCGState) { + this.#bindSetOCGState(link, data.setOCGState); + isBound = true; + } else if (data.dest) { + this._bindLink(link, data.dest); + isBound = true; + } else { + if (data.actions && (data.actions.Action || data.actions["Mouse Up"] || data.actions["Mouse Down"]) && this.enableScripting && this.hasJSActions) { + this._bindJSAction(link, data); + isBound = true; + } + if (data.resetForm) { + this._bindResetFormAction(link, data.resetForm); + isBound = true; + } else if (this.isTooltipOnly && !isBound) { + this._bindLink(link, ""); + isBound = true; + } + } + this.container.classList.add("linkAnnotation"); + if (isBound) { + this.container.append(link); + } + return this.container; + } + #setInternalLink() { + this.container.setAttribute("data-internal-link", ""); + } + _bindLink(link, destination) { + link.href = this.linkService.getDestinationHash(destination); + link.onclick = () => { + if (destination) { + this.linkService.goToDestination(destination); + } + return false; + }; + if (destination || destination === "") { + this.#setInternalLink(); + } + } + _bindNamedAction(link, action) { + link.href = this.linkService.getAnchorUrl(""); + link.onclick = () => { + this.linkService.executeNamedAction(action); + return false; + }; + this.#setInternalLink(); + } + #bindAttachment(link, attachment, dest = null) { + link.href = this.linkService.getAnchorUrl(""); + link.onclick = () => { + this.downloadManager?.openOrDownloadData(attachment.content, attachment.filename, dest); + return false; + }; + this.#setInternalLink(); + } + #bindSetOCGState(link, action) { + link.href = this.linkService.getAnchorUrl(""); + link.onclick = () => { + this.linkService.executeSetOCGState(action); + return false; + }; + this.#setInternalLink(); + } + _bindJSAction(link, data) { + link.href = this.linkService.getAnchorUrl(""); + const map = new Map([["Action", "onclick"], ["Mouse Up", "onmouseup"], ["Mouse Down", "onmousedown"]]); + for (const name of Object.keys(data.actions)) { + const jsName = map.get(name); + if (!jsName) { + continue; + } + link[jsName] = () => { + this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id: data.id, + name + } + }); + return false; + }; + } + if (!link.onclick) { + link.onclick = () => false; + } + this.#setInternalLink(); + } + _bindResetFormAction(link, resetForm) { + const otherClickAction = link.onclick; + if (!otherClickAction) { + link.href = this.linkService.getAnchorUrl(""); + } + this.#setInternalLink(); + if (!this._fieldObjects) { + (0,util.warn)(`_bindResetFormAction - "resetForm" action not supported, ` + "ensure that the `fieldObjects` parameter is provided."); + if (!otherClickAction) { + link.onclick = () => false; + } + return; + } + link.onclick = () => { + otherClickAction?.(); + const { + fields: resetFormFields, + refs: resetFormRefs, + include + } = resetForm; + const allFields = []; + if (resetFormFields.length !== 0 || resetFormRefs.length !== 0) { + const fieldIds = new Set(resetFormRefs); + for (const fieldName of resetFormFields) { + const fields = this._fieldObjects[fieldName] || []; + for (const { + id + } of fields) { + fieldIds.add(id); + } + } + for (const fields of Object.values(this._fieldObjects)) { + for (const field of fields) { + if (fieldIds.has(field.id) === include) { + allFields.push(field); + } + } + } + } else { + for (const fields of Object.values(this._fieldObjects)) { + allFields.push(...fields); + } + } + const storage = this.annotationStorage; + const allIds = []; + for (const field of allFields) { + const { + id + } = field; + allIds.push(id); + switch (field.type) { + case "text": + { + const value = field.defaultValue || ""; + storage.setValue(id, { + value + }); + break; + } + case "checkbox": + case "radiobutton": + { + const value = field.defaultValue === field.exportValues; + storage.setValue(id, { + value + }); + break; + } + case "combobox": + case "listbox": + { + const value = field.defaultValue || ""; + storage.setValue(id, { + value + }); + break; + } + default: + continue; + } + const domElement = document.querySelector(`[data-element-id="${id}"]`); + if (!domElement) { + continue; + } else if (!GetElementsByNameSet.has(domElement)) { + (0,util.warn)(`_bindResetFormAction - element not allowed: ${id}`); + continue; + } + domElement.dispatchEvent(new Event("resetform")); + } + if (this.enableScripting) { + this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id: "app", + ids: allIds, + name: "ResetForm" + } + }); + } + return false; + }; + } +} +class TextAnnotationElement extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true + }); + } + render() { + this.container.classList.add("textAnnotation"); + const image = document.createElement("img"); + image.src = this.imageResourcesPath + "annotation-" + this.data.name.toLowerCase() + ".svg"; + image.setAttribute("data-l10n-id", "pdfjs-text-annotation-type"); + image.setAttribute("data-l10n-args", JSON.stringify({ + type: this.data.name + })); + if (!this.data.popupRef && this.hasPopupData) { + this._createPopup(); + } + this.container.append(image); + return this.container; + } +} +class WidgetAnnotationElement extends AnnotationElement { + render() { + if (this.data.alternativeText) { + this.container.title = this.data.alternativeText; + } + return this.container; + } + showElementAndHideCanvas(element) { + if (this.data.hasOwnCanvas) { + if (element.previousSibling?.nodeName === "CANVAS") { + element.previousSibling.hidden = true; + } + element.hidden = false; + } + } + _getKeyModifier(event) { + return util.FeatureTest.platform.isMac ? event.metaKey : event.ctrlKey; + } + _setEventListener(element, elementData, baseName, eventName, valueGetter) { + if (baseName.includes("mouse")) { + element.addEventListener(baseName, event => { + this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id: this.data.id, + name: eventName, + value: valueGetter(event), + shift: event.shiftKey, + modifier: this._getKeyModifier(event) + } + }); + }); + } else { + element.addEventListener(baseName, event => { + if (baseName === "blur") { + if (!elementData.focused || !event.relatedTarget) { + return; + } + elementData.focused = false; + } else if (baseName === "focus") { + if (elementData.focused) { + return; + } + elementData.focused = true; + } + if (!valueGetter) { + return; + } + this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id: this.data.id, + name: eventName, + value: valueGetter(event) + } + }); + }); + } + } + _setEventListeners(element, elementData, names, getter) { + for (const [baseName, eventName] of names) { + if (eventName === "Action" || this.data.actions?.[eventName]) { + if (eventName === "Focus" || eventName === "Blur") { + elementData ||= { + focused: false + }; + } + this._setEventListener(element, elementData, baseName, eventName, getter); + if (eventName === "Focus" && !this.data.actions?.Blur) { + this._setEventListener(element, elementData, "blur", "Blur", null); + } else if (eventName === "Blur" && !this.data.actions?.Focus) { + this._setEventListener(element, elementData, "focus", "Focus", null); + } + } + } + } + _setBackgroundColor(element) { + const color = this.data.backgroundColor || null; + element.style.backgroundColor = color === null ? "transparent" : util.Util.makeHexColor(color[0], color[1], color[2]); + } + _setTextStyle(element) { + const TEXT_ALIGNMENT = ["left", "center", "right"]; + const { + fontColor + } = this.data.defaultAppearanceData; + const fontSize = this.data.defaultAppearanceData.fontSize || DEFAULT_FONT_SIZE; + const style = element.style; + let computedFontSize; + const BORDER_SIZE = 2; + const roundToOneDecimal = x => Math.round(10 * x) / 10; + if (this.data.multiLine) { + const height = Math.abs(this.data.rect[3] - this.data.rect[1] - BORDER_SIZE); + const numberOfLines = Math.round(height / (util.LINE_FACTOR * fontSize)) || 1; + const lineHeight = height / numberOfLines; + computedFontSize = Math.min(fontSize, roundToOneDecimal(lineHeight / util.LINE_FACTOR)); + } else { + const height = Math.abs(this.data.rect[3] - this.data.rect[1] - BORDER_SIZE); + computedFontSize = Math.min(fontSize, roundToOneDecimal(height / util.LINE_FACTOR)); + } + style.fontSize = `calc(${computedFontSize}px * var(--scale-factor))`; + style.color = util.Util.makeHexColor(fontColor[0], fontColor[1], fontColor[2]); + if (this.data.textAlignment !== null) { + style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment]; + } + } + _setRequired(element, isRequired) { + if (isRequired) { + element.setAttribute("required", true); + } else { + element.removeAttribute("required"); + } + element.setAttribute("aria-required", isRequired); + } +} +class TextWidgetAnnotationElement extends WidgetAnnotationElement { + constructor(parameters) { + const isRenderable = parameters.renderForms || parameters.data.hasOwnCanvas || !parameters.data.hasAppearance && !!parameters.data.fieldValue; + super(parameters, { + isRenderable + }); + } + setPropertyOnSiblings(base, key, value, keyInStorage) { + const storage = this.annotationStorage; + for (const element of this._getElementsByName(base.name, base.id)) { + if (element.domElement) { + element.domElement[key] = value; + } + storage.setValue(element.id, { + [keyInStorage]: value + }); + } + } + render() { + const storage = this.annotationStorage; + const id = this.data.id; + this.container.classList.add("textWidgetAnnotation"); + let element = null; + if (this.renderForms) { + const storedData = storage.getValue(id, { + value: this.data.fieldValue + }); + let textContent = storedData.value || ""; + const maxLen = storage.getValue(id, { + charLimit: this.data.maxLen + }).charLimit; + if (maxLen && textContent.length > maxLen) { + textContent = textContent.slice(0, maxLen); + } + let fieldFormattedValues = storedData.formattedValue || this.data.textContent?.join("\n") || null; + if (fieldFormattedValues && this.data.comb) { + fieldFormattedValues = fieldFormattedValues.replaceAll(/\s+/g, ""); + } + const elementData = { + userValue: textContent, + formattedValue: fieldFormattedValues, + lastCommittedValue: null, + commitKey: 1, + focused: false + }; + if (this.data.multiLine) { + element = document.createElement("textarea"); + element.textContent = fieldFormattedValues ?? textContent; + if (this.data.doNotScroll) { + element.style.overflowY = "hidden"; + } + } else { + element = document.createElement("input"); + element.type = "text"; + element.setAttribute("value", fieldFormattedValues ?? textContent); + if (this.data.doNotScroll) { + element.style.overflowX = "hidden"; + } + } + if (this.data.hasOwnCanvas) { + element.hidden = true; + } + GetElementsByNameSet.add(element); + element.setAttribute("data-element-id", id); + element.disabled = this.data.readOnly; + element.name = this.data.fieldName; + element.tabIndex = DEFAULT_TAB_INDEX; + this._setRequired(element, this.data.required); + if (maxLen) { + element.maxLength = maxLen; + } + element.addEventListener("input", event => { + storage.setValue(id, { + value: event.target.value + }); + this.setPropertyOnSiblings(element, "value", event.target.value, "value"); + elementData.formattedValue = null; + }); + element.addEventListener("resetform", event => { + const defaultValue = this.data.defaultFieldValue ?? ""; + element.value = elementData.userValue = defaultValue; + elementData.formattedValue = null; + }); + let blurListener = event => { + const { + formattedValue + } = elementData; + if (formattedValue !== null && formattedValue !== undefined) { + event.target.value = formattedValue; + } + event.target.scrollLeft = 0; + }; + if (this.enableScripting && this.hasJSActions) { + element.addEventListener("focus", event => { + if (elementData.focused) { + return; + } + const { + target + } = event; + if (elementData.userValue) { + target.value = elementData.userValue; + } + elementData.lastCommittedValue = target.value; + elementData.commitKey = 1; + elementData.focused = true; + }); + element.addEventListener("updatefromsandbox", jsEvent => { + this.showElementAndHideCanvas(jsEvent.target); + const actions = { + value(event) { + elementData.userValue = event.detail.value ?? ""; + storage.setValue(id, { + value: elementData.userValue.toString() + }); + event.target.value = elementData.userValue; + }, + formattedValue(event) { + const { + formattedValue + } = event.detail; + elementData.formattedValue = formattedValue; + if (formattedValue !== null && formattedValue !== undefined && event.target !== document.activeElement) { + event.target.value = formattedValue; + } + storage.setValue(id, { + formattedValue + }); + }, + selRange(event) { + event.target.setSelectionRange(...event.detail.selRange); + }, + charLimit: event => { + const { + charLimit + } = event.detail; + const { + target + } = event; + if (charLimit === 0) { + target.removeAttribute("maxLength"); + return; + } + target.setAttribute("maxLength", charLimit); + let value = elementData.userValue; + if (!value || value.length <= charLimit) { + return; + } + value = value.slice(0, charLimit); + target.value = elementData.userValue = value; + storage.setValue(id, { + value + }); + this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id, + name: "Keystroke", + value, + willCommit: true, + commitKey: 1, + selStart: target.selectionStart, + selEnd: target.selectionEnd + } + }); + } + }; + this._dispatchEventFromSandbox(actions, jsEvent); + }); + element.addEventListener("keydown", event => { + elementData.commitKey = 1; + let commitKey = -1; + if (event.key === "Escape") { + commitKey = 0; + } else if (event.key === "Enter" && !this.data.multiLine) { + commitKey = 2; + } else if (event.key === "Tab") { + elementData.commitKey = 3; + } + if (commitKey === -1) { + return; + } + const { + value + } = event.target; + if (elementData.lastCommittedValue === value) { + return; + } + elementData.lastCommittedValue = value; + elementData.userValue = value; + this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id, + name: "Keystroke", + value, + willCommit: true, + commitKey, + selStart: event.target.selectionStart, + selEnd: event.target.selectionEnd + } + }); + }); + const _blurListener = blurListener; + blurListener = null; + element.addEventListener("blur", event => { + if (!elementData.focused || !event.relatedTarget) { + return; + } + elementData.focused = false; + const { + value + } = event.target; + elementData.userValue = value; + if (elementData.lastCommittedValue !== value) { + this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id, + name: "Keystroke", + value, + willCommit: true, + commitKey: elementData.commitKey, + selStart: event.target.selectionStart, + selEnd: event.target.selectionEnd + } + }); + } + _blurListener(event); + }); + if (this.data.actions?.Keystroke) { + element.addEventListener("beforeinput", event => { + elementData.lastCommittedValue = null; + const { + data, + target + } = event; + const { + value, + selectionStart, + selectionEnd + } = target; + let selStart = selectionStart, + selEnd = selectionEnd; + switch (event.inputType) { + case "deleteWordBackward": + { + const match = value.substring(0, selectionStart).match(/\w*[^\w]*$/); + if (match) { + selStart -= match[0].length; + } + break; + } + case "deleteWordForward": + { + const match = value.substring(selectionStart).match(/^[^\w]*\w*/); + if (match) { + selEnd += match[0].length; + } + break; + } + case "deleteContentBackward": + if (selectionStart === selectionEnd) { + selStart -= 1; + } + break; + case "deleteContentForward": + if (selectionStart === selectionEnd) { + selEnd += 1; + } + break; + } + event.preventDefault(); + this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id, + name: "Keystroke", + value, + change: data || "", + willCommit: false, + selStart, + selEnd + } + }); + }); + } + this._setEventListeners(element, elementData, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.value); + } + if (blurListener) { + element.addEventListener("blur", blurListener); + } + if (this.data.comb) { + const fieldWidth = this.data.rect[2] - this.data.rect[0]; + const combWidth = fieldWidth / maxLen; + element.classList.add("comb"); + element.style.letterSpacing = `calc(${combWidth}px * var(--scale-factor) - 1ch)`; + } + } else { + element = document.createElement("div"); + element.textContent = this.data.fieldValue; + element.style.verticalAlign = "middle"; + element.style.display = "table-cell"; + if (this.data.hasOwnCanvas) { + element.hidden = true; + } + } + this._setTextStyle(element); + this._setBackgroundColor(element); + this._setDefaultPropertiesFromJS(element); + this.container.append(element); + return this.container; + } +} +class SignatureWidgetAnnotationElement extends WidgetAnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: !!parameters.data.hasOwnCanvas + }); + } +} +class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: parameters.renderForms + }); + } + render() { + const storage = this.annotationStorage; + const data = this.data; + const id = data.id; + let value = storage.getValue(id, { + value: data.exportValue === data.fieldValue + }).value; + if (typeof value === "string") { + value = value !== "Off"; + storage.setValue(id, { + value + }); + } + this.container.classList.add("buttonWidgetAnnotation", "checkBox"); + const element = document.createElement("input"); + GetElementsByNameSet.add(element); + element.setAttribute("data-element-id", id); + element.disabled = data.readOnly; + this._setRequired(element, this.data.required); + element.type = "checkbox"; + element.name = data.fieldName; + if (value) { + element.setAttribute("checked", true); + } + element.setAttribute("exportValue", data.exportValue); + element.tabIndex = DEFAULT_TAB_INDEX; + element.addEventListener("change", event => { + const { + name, + checked + } = event.target; + for (const checkbox of this._getElementsByName(name, id)) { + const curChecked = checked && checkbox.exportValue === data.exportValue; + if (checkbox.domElement) { + checkbox.domElement.checked = curChecked; + } + storage.setValue(checkbox.id, { + value: curChecked + }); + } + storage.setValue(id, { + value: checked + }); + }); + element.addEventListener("resetform", event => { + const defaultValue = data.defaultFieldValue || "Off"; + event.target.checked = defaultValue === data.exportValue; + }); + if (this.enableScripting && this.hasJSActions) { + element.addEventListener("updatefromsandbox", jsEvent => { + const actions = { + value(event) { + event.target.checked = event.detail.value !== "Off"; + storage.setValue(id, { + value: event.target.checked + }); + } + }; + this._dispatchEventFromSandbox(actions, jsEvent); + }); + this._setEventListeners(element, null, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.checked); + } + this._setBackgroundColor(element); + this._setDefaultPropertiesFromJS(element); + this.container.append(element); + return this.container; + } +} +class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: parameters.renderForms + }); + } + render() { + this.container.classList.add("buttonWidgetAnnotation", "radioButton"); + const storage = this.annotationStorage; + const data = this.data; + const id = data.id; + let value = storage.getValue(id, { + value: data.fieldValue === data.buttonValue + }).value; + if (typeof value === "string") { + value = value !== data.buttonValue; + storage.setValue(id, { + value + }); + } + const element = document.createElement("input"); + GetElementsByNameSet.add(element); + element.setAttribute("data-element-id", id); + element.disabled = data.readOnly; + this._setRequired(element, this.data.required); + element.type = "radio"; + element.name = data.fieldName; + if (value) { + element.setAttribute("checked", true); + } + element.tabIndex = DEFAULT_TAB_INDEX; + element.addEventListener("change", event => { + const { + name, + checked + } = event.target; + for (const radio of this._getElementsByName(name, id)) { + storage.setValue(radio.id, { + value: false + }); + } + storage.setValue(id, { + value: checked + }); + }); + element.addEventListener("resetform", event => { + const defaultValue = data.defaultFieldValue; + event.target.checked = defaultValue !== null && defaultValue !== undefined && defaultValue === data.buttonValue; + }); + if (this.enableScripting && this.hasJSActions) { + const pdfButtonValue = data.buttonValue; + element.addEventListener("updatefromsandbox", jsEvent => { + const actions = { + value: event => { + const checked = pdfButtonValue === event.detail.value; + for (const radio of this._getElementsByName(event.target.name)) { + const curChecked = checked && radio.id === id; + if (radio.domElement) { + radio.domElement.checked = curChecked; + } + storage.setValue(radio.id, { + value: curChecked + }); + } + } + }; + this._dispatchEventFromSandbox(actions, jsEvent); + }); + this._setEventListeners(element, null, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.checked); + } + this._setBackgroundColor(element); + this._setDefaultPropertiesFromJS(element); + this.container.append(element); + return this.container; + } +} +class PushButtonWidgetAnnotationElement extends LinkAnnotationElement { + constructor(parameters) { + super(parameters, { + ignoreBorder: parameters.data.hasAppearance + }); + } + render() { + const container = super.render(); + container.classList.add("buttonWidgetAnnotation", "pushButton"); + if (this.data.alternativeText) { + container.title = this.data.alternativeText; + } + const linkElement = container.lastChild; + if (this.enableScripting && this.hasJSActions && linkElement) { + this._setDefaultPropertiesFromJS(linkElement); + linkElement.addEventListener("updatefromsandbox", jsEvent => { + this._dispatchEventFromSandbox({}, jsEvent); + }); + } + return container; + } +} +class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: parameters.renderForms + }); + } + render() { + this.container.classList.add("choiceWidgetAnnotation"); + const storage = this.annotationStorage; + const id = this.data.id; + const storedData = storage.getValue(id, { + value: this.data.fieldValue + }); + const selectElement = document.createElement("select"); + GetElementsByNameSet.add(selectElement); + selectElement.setAttribute("data-element-id", id); + selectElement.disabled = this.data.readOnly; + this._setRequired(selectElement, this.data.required); + selectElement.name = this.data.fieldName; + selectElement.tabIndex = DEFAULT_TAB_INDEX; + let addAnEmptyEntry = this.data.combo && this.data.options.length > 0; + if (!this.data.combo) { + selectElement.size = this.data.options.length; + if (this.data.multiSelect) { + selectElement.multiple = true; + } + } + selectElement.addEventListener("resetform", event => { + const defaultValue = this.data.defaultFieldValue; + for (const option of selectElement.options) { + option.selected = option.value === defaultValue; + } + }); + for (const option of this.data.options) { + const optionElement = document.createElement("option"); + optionElement.textContent = option.displayValue; + optionElement.value = option.exportValue; + if (storedData.value.includes(option.exportValue)) { + optionElement.setAttribute("selected", true); + addAnEmptyEntry = false; + } + selectElement.append(optionElement); + } + let removeEmptyEntry = null; + if (addAnEmptyEntry) { + const noneOptionElement = document.createElement("option"); + noneOptionElement.value = " "; + noneOptionElement.setAttribute("hidden", true); + noneOptionElement.setAttribute("selected", true); + selectElement.prepend(noneOptionElement); + removeEmptyEntry = () => { + noneOptionElement.remove(); + selectElement.removeEventListener("input", removeEmptyEntry); + removeEmptyEntry = null; + }; + selectElement.addEventListener("input", removeEmptyEntry); + } + const getValue = isExport => { + const name = isExport ? "value" : "textContent"; + const { + options, + multiple + } = selectElement; + if (!multiple) { + return options.selectedIndex === -1 ? null : options[options.selectedIndex][name]; + } + return Array.prototype.filter.call(options, option => option.selected).map(option => option[name]); + }; + let selectedValues = getValue(false); + const getItems = event => { + const options = event.target.options; + return Array.prototype.map.call(options, option => { + return { + displayValue: option.textContent, + exportValue: option.value + }; + }); + }; + if (this.enableScripting && this.hasJSActions) { + selectElement.addEventListener("updatefromsandbox", jsEvent => { + const actions = { + value(event) { + removeEmptyEntry?.(); + const value = event.detail.value; + const values = new Set(Array.isArray(value) ? value : [value]); + for (const option of selectElement.options) { + option.selected = values.has(option.value); + } + storage.setValue(id, { + value: getValue(true) + }); + selectedValues = getValue(false); + }, + multipleSelection(event) { + selectElement.multiple = true; + }, + remove(event) { + const options = selectElement.options; + const index = event.detail.remove; + options[index].selected = false; + selectElement.remove(index); + if (options.length > 0) { + const i = Array.prototype.findIndex.call(options, option => option.selected); + if (i === -1) { + options[0].selected = true; + } + } + storage.setValue(id, { + value: getValue(true), + items: getItems(event) + }); + selectedValues = getValue(false); + }, + clear(event) { + while (selectElement.length !== 0) { + selectElement.remove(0); + } + storage.setValue(id, { + value: null, + items: [] + }); + selectedValues = getValue(false); + }, + insert(event) { + const { + index, + displayValue, + exportValue + } = event.detail.insert; + const selectChild = selectElement.children[index]; + const optionElement = document.createElement("option"); + optionElement.textContent = displayValue; + optionElement.value = exportValue; + if (selectChild) { + selectChild.before(optionElement); + } else { + selectElement.append(optionElement); + } + storage.setValue(id, { + value: getValue(true), + items: getItems(event) + }); + selectedValues = getValue(false); + }, + items(event) { + const { + items + } = event.detail; + while (selectElement.length !== 0) { + selectElement.remove(0); + } + for (const item of items) { + const { + displayValue, + exportValue + } = item; + const optionElement = document.createElement("option"); + optionElement.textContent = displayValue; + optionElement.value = exportValue; + selectElement.append(optionElement); + } + if (selectElement.options.length > 0) { + selectElement.options[0].selected = true; + } + storage.setValue(id, { + value: getValue(true), + items: getItems(event) + }); + selectedValues = getValue(false); + }, + indices(event) { + const indices = new Set(event.detail.indices); + for (const option of event.target.options) { + option.selected = indices.has(option.index); + } + storage.setValue(id, { + value: getValue(true) + }); + selectedValues = getValue(false); + }, + editable(event) { + event.target.disabled = !event.detail.editable; + } + }; + this._dispatchEventFromSandbox(actions, jsEvent); + }); + selectElement.addEventListener("input", event => { + const exportValue = getValue(true); + storage.setValue(id, { + value: exportValue + }); + event.preventDefault(); + this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id, + name: "Keystroke", + value: selectedValues, + changeEx: exportValue, + willCommit: false, + commitKey: 1, + keyDown: false + } + }); + }); + this._setEventListeners(selectElement, null, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"], ["input", "Action"], ["input", "Validate"]], event => event.target.value); + } else { + selectElement.addEventListener("input", function (event) { + storage.setValue(id, { + value: getValue(true) + }); + }); + } + if (this.data.combo) { + this._setTextStyle(selectElement); + } else {} + this._setBackgroundColor(selectElement); + this._setDefaultPropertiesFromJS(selectElement); + this.container.append(selectElement); + return this.container; + } +} +class PopupAnnotationElement extends AnnotationElement { + constructor(parameters) { + const { + data, + elements + } = parameters; + super(parameters, { + isRenderable: AnnotationElement._hasPopupData(data) + }); + this.elements = elements; + } + render() { + this.container.classList.add("popupAnnotation"); + const popup = new PopupElement({ + container: this.container, + color: this.data.color, + titleObj: this.data.titleObj, + modificationDate: this.data.modificationDate, + contentsObj: this.data.contentsObj, + richText: this.data.richText, + rect: this.data.rect, + parentRect: this.data.parentRect || null, + parent: this.parent, + elements: this.elements, + open: this.data.open + }); + const elementIds = []; + for (const element of this.elements) { + element.popup = popup; + elementIds.push(element.data.id); + element.addHighlightArea(); + } + this.container.setAttribute("aria-controls", elementIds.map(id => `${util.AnnotationPrefix}${id}`).join(",")); + return this.container; + } +} +class PopupElement { + #boundKeyDown = this.#keyDown.bind(this); + #boundHide = this.#hide.bind(this); + #boundShow = this.#show.bind(this); + #boundToggle = this.#toggle.bind(this); + #color = null; + #container = null; + #contentsObj = null; + #dateObj = null; + #elements = null; + #parent = null; + #parentRect = null; + #pinned = false; + #popup = null; + #rect = null; + #richText = null; + #titleObj = null; + #wasVisible = false; + constructor({ + container, + color, + elements, + titleObj, + modificationDate, + contentsObj, + richText, + parent, + rect, + parentRect, + open + }) { + this.#container = container; + this.#titleObj = titleObj; + this.#contentsObj = contentsObj; + this.#richText = richText; + this.#parent = parent; + this.#color = color; + this.#rect = rect; + this.#parentRect = parentRect; + this.#elements = elements; + this.#dateObj = display_utils.PDFDateString.toDateObject(modificationDate); + this.trigger = elements.flatMap(e => e.getElementsToTriggerPopup()); + for (const element of this.trigger) { + element.addEventListener("click", this.#boundToggle); + element.addEventListener("mouseenter", this.#boundShow); + element.addEventListener("mouseleave", this.#boundHide); + element.classList.add("popupTriggerArea"); + } + for (const element of elements) { + element.container?.addEventListener("keydown", this.#boundKeyDown); + } + this.#container.hidden = true; + if (open) { + this.#toggle(); + } + } + render() { + if (this.#popup) { + return; + } + const { + page: { + view + }, + viewport: { + rawDims: { + pageWidth, + pageHeight, + pageX, + pageY + } + } + } = this.#parent; + const popup = this.#popup = document.createElement("div"); + popup.className = "popup"; + if (this.#color) { + const baseColor = popup.style.outlineColor = util.Util.makeHexColor(...this.#color); + if (CSS.supports("background-color", "color-mix(in srgb, red 30%, white)")) { + popup.style.backgroundColor = `color-mix(in srgb, ${baseColor} 30%, white)`; + } else { + const BACKGROUND_ENLIGHT = 0.7; + popup.style.backgroundColor = util.Util.makeHexColor(...this.#color.map(c => Math.floor(BACKGROUND_ENLIGHT * (255 - c) + c))); + } + } + const header = document.createElement("span"); + header.className = "header"; + const title = document.createElement("h1"); + header.append(title); + ({ + dir: title.dir, + str: title.textContent + } = this.#titleObj); + popup.append(header); + if (this.#dateObj) { + const modificationDate = document.createElement("span"); + modificationDate.classList.add("popupDate"); + modificationDate.setAttribute("data-l10n-id", "pdfjs-annotation-date-string"); + modificationDate.setAttribute("data-l10n-args", JSON.stringify({ + date: this.#dateObj.toLocaleDateString(), + time: this.#dateObj.toLocaleTimeString() + })); + header.append(modificationDate); + } + const contentsObj = this.#contentsObj; + const richText = this.#richText; + if (richText?.str && (!contentsObj?.str || contentsObj.str === richText.str)) { + xfa_layer.XfaLayer.render({ + xfaHtml: richText.html, + intent: "richText", + div: popup + }); + popup.lastChild.classList.add("richText", "popupContent"); + } else { + const contents = this._formatContents(contentsObj); + popup.append(contents); + } + let useParentRect = !!this.#parentRect; + let rect = useParentRect ? this.#parentRect : this.#rect; + for (const element of this.#elements) { + if (!rect || util.Util.intersect(element.data.rect, rect) !== null) { + rect = element.data.rect; + useParentRect = true; + break; + } + } + const normalizedRect = util.Util.normalizeRect([rect[0], view[3] - rect[1] + view[1], rect[2], view[3] - rect[3] + view[1]]); + const HORIZONTAL_SPACE_AFTER_ANNOTATION = 5; + const parentWidth = useParentRect ? rect[2] - rect[0] + HORIZONTAL_SPACE_AFTER_ANNOTATION : 0; + const popupLeft = normalizedRect[0] + parentWidth; + const popupTop = normalizedRect[1]; + const { + style + } = this.#container; + style.left = `${100 * (popupLeft - pageX) / pageWidth}%`; + style.top = `${100 * (popupTop - pageY) / pageHeight}%`; + this.#container.append(popup); + } + _formatContents({ + str, + dir + }) { + const p = document.createElement("p"); + p.classList.add("popupContent"); + p.dir = dir; + const lines = str.split(/(?:\r\n?|\n)/); + for (let i = 0, ii = lines.length; i < ii; ++i) { + const line = lines[i]; + p.append(document.createTextNode(line)); + if (i < ii - 1) { + p.append(document.createElement("br")); + } + } + return p; + } + #keyDown(event) { + if (event.altKey || event.shiftKey || event.ctrlKey || event.metaKey) { + return; + } + if (event.key === "Enter" || event.key === "Escape" && this.#pinned) { + this.#toggle(); + } + } + #toggle() { + this.#pinned = !this.#pinned; + if (this.#pinned) { + this.#show(); + this.#container.addEventListener("click", this.#boundToggle); + this.#container.addEventListener("keydown", this.#boundKeyDown); + } else { + this.#hide(); + this.#container.removeEventListener("click", this.#boundToggle); + this.#container.removeEventListener("keydown", this.#boundKeyDown); + } + } + #show() { + if (!this.#popup) { + this.render(); + } + if (!this.isVisible) { + this.#container.hidden = false; + this.#container.style.zIndex = parseInt(this.#container.style.zIndex) + 1000; + } else if (this.#pinned) { + this.#container.classList.add("focused"); + } + } + #hide() { + this.#container.classList.remove("focused"); + if (this.#pinned || !this.isVisible) { + return; + } + this.#container.hidden = true; + this.#container.style.zIndex = parseInt(this.#container.style.zIndex) - 1000; + } + forceHide() { + this.#wasVisible = this.isVisible; + if (!this.#wasVisible) { + return; + } + this.#container.hidden = true; + } + maybeShow() { + if (!this.#wasVisible) { + return; + } + this.#wasVisible = false; + this.#container.hidden = false; + } + get isVisible() { + return this.#container.hidden === false; + } +} +class FreeTextAnnotationElement extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + this.textContent = parameters.data.textContent; + this.textPosition = parameters.data.textPosition; + this.annotationEditorType = util.AnnotationEditorType.FREETEXT; + } + render() { + this.container.classList.add("freeTextAnnotation"); + if (this.textContent) { + const content = document.createElement("div"); + content.classList.add("annotationTextContent"); + content.setAttribute("role", "comment"); + for (const line of this.textContent) { + const lineSpan = document.createElement("span"); + lineSpan.textContent = line; + content.append(lineSpan); + } + this.container.append(content); + } + if (!this.data.popupRef && this.hasPopupData) { + this._createPopup(); + } + this._editOnDoubleClick(); + return this.container; + } + get _isEditable() { + return this.data.hasOwnCanvas; + } +} +class LineAnnotationElement extends AnnotationElement { + #line = null; + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + } + render() { + this.container.classList.add("lineAnnotation"); + const data = this.data; + const { + width, + height + } = getRectDims(data.rect); + const svg = this.svgFactory.create(width, height, true); + const line = this.#line = this.svgFactory.createElement("svg:line"); + line.setAttribute("x1", data.rect[2] - data.lineCoordinates[0]); + line.setAttribute("y1", data.rect[3] - data.lineCoordinates[1]); + line.setAttribute("x2", data.rect[2] - data.lineCoordinates[2]); + line.setAttribute("y2", data.rect[3] - data.lineCoordinates[3]); + line.setAttribute("stroke-width", data.borderStyle.width || 1); + line.setAttribute("stroke", "transparent"); + line.setAttribute("fill", "transparent"); + svg.append(line); + this.container.append(svg); + if (!data.popupRef && this.hasPopupData) { + this._createPopup(); + } + return this.container; + } + getElementsToTriggerPopup() { + return this.#line; + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } +} +class SquareAnnotationElement extends AnnotationElement { + #square = null; + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + } + render() { + this.container.classList.add("squareAnnotation"); + const data = this.data; + const { + width, + height + } = getRectDims(data.rect); + const svg = this.svgFactory.create(width, height, true); + const borderWidth = data.borderStyle.width; + const square = this.#square = this.svgFactory.createElement("svg:rect"); + square.setAttribute("x", borderWidth / 2); + square.setAttribute("y", borderWidth / 2); + square.setAttribute("width", width - borderWidth); + square.setAttribute("height", height - borderWidth); + square.setAttribute("stroke-width", borderWidth || 1); + square.setAttribute("stroke", "transparent"); + square.setAttribute("fill", "transparent"); + svg.append(square); + this.container.append(svg); + if (!data.popupRef && this.hasPopupData) { + this._createPopup(); + } + return this.container; + } + getElementsToTriggerPopup() { + return this.#square; + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } +} +class CircleAnnotationElement extends AnnotationElement { + #circle = null; + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + } + render() { + this.container.classList.add("circleAnnotation"); + const data = this.data; + const { + width, + height + } = getRectDims(data.rect); + const svg = this.svgFactory.create(width, height, true); + const borderWidth = data.borderStyle.width; + const circle = this.#circle = this.svgFactory.createElement("svg:ellipse"); + circle.setAttribute("cx", width / 2); + circle.setAttribute("cy", height / 2); + circle.setAttribute("rx", width / 2 - borderWidth / 2); + circle.setAttribute("ry", height / 2 - borderWidth / 2); + circle.setAttribute("stroke-width", borderWidth || 1); + circle.setAttribute("stroke", "transparent"); + circle.setAttribute("fill", "transparent"); + svg.append(circle); + this.container.append(svg); + if (!data.popupRef && this.hasPopupData) { + this._createPopup(); + } + return this.container; + } + getElementsToTriggerPopup() { + return this.#circle; + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } +} +class PolylineAnnotationElement extends AnnotationElement { + #polyline = null; + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + this.containerClassName = "polylineAnnotation"; + this.svgElementName = "svg:polyline"; + } + render() { + this.container.classList.add(this.containerClassName); + const data = this.data; + const { + width, + height + } = getRectDims(data.rect); + const svg = this.svgFactory.create(width, height, true); + let points = []; + for (const coordinate of data.vertices) { + const x = coordinate.x - data.rect[0]; + const y = data.rect[3] - coordinate.y; + points.push(x + "," + y); + } + points = points.join(" "); + const polyline = this.#polyline = this.svgFactory.createElement(this.svgElementName); + polyline.setAttribute("points", points); + polyline.setAttribute("stroke-width", data.borderStyle.width || 1); + polyline.setAttribute("stroke", "transparent"); + polyline.setAttribute("fill", "transparent"); + svg.append(polyline); + this.container.append(svg); + if (!data.popupRef && this.hasPopupData) { + this._createPopup(); + } + return this.container; + } + getElementsToTriggerPopup() { + return this.#polyline; + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } +} +class PolygonAnnotationElement extends PolylineAnnotationElement { + constructor(parameters) { + super(parameters); + this.containerClassName = "polygonAnnotation"; + this.svgElementName = "svg:polygon"; + } +} +class CaretAnnotationElement extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + } + render() { + this.container.classList.add("caretAnnotation"); + if (!this.data.popupRef && this.hasPopupData) { + this._createPopup(); + } + return this.container; + } +} +class InkAnnotationElement extends AnnotationElement { + #polylines = []; + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + this.containerClassName = "inkAnnotation"; + this.svgElementName = "svg:polyline"; + this.annotationEditorType = util.AnnotationEditorType.INK; + } + render() { + this.container.classList.add(this.containerClassName); + const data = this.data; + const { + width, + height + } = getRectDims(data.rect); + const svg = this.svgFactory.create(width, height, true); + for (const inkList of data.inkLists) { + let points = []; + for (const coordinate of inkList) { + const x = coordinate.x - data.rect[0]; + const y = data.rect[3] - coordinate.y; + points.push(`${x},${y}`); + } + points = points.join(" "); + const polyline = this.svgFactory.createElement(this.svgElementName); + this.#polylines.push(polyline); + polyline.setAttribute("points", points); + polyline.setAttribute("stroke-width", data.borderStyle.width || 1); + polyline.setAttribute("stroke", "transparent"); + polyline.setAttribute("fill", "transparent"); + if (!data.popupRef && this.hasPopupData) { + this._createPopup(); + } + svg.append(polyline); + } + this.container.append(svg); + return this.container; + } + getElementsToTriggerPopup() { + return this.#polylines; + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } +} +class HighlightAnnotationElement extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true, + createQuadrilaterals: true + }); + } + render() { + if (!this.data.popupRef && this.hasPopupData) { + this._createPopup(); + } + this.container.classList.add("highlightAnnotation"); + return this.container; + } +} +class UnderlineAnnotationElement extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true, + createQuadrilaterals: true + }); + } + render() { + if (!this.data.popupRef && this.hasPopupData) { + this._createPopup(); + } + this.container.classList.add("underlineAnnotation"); + return this.container; + } +} +class SquigglyAnnotationElement extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true, + createQuadrilaterals: true + }); + } + render() { + if (!this.data.popupRef && this.hasPopupData) { + this._createPopup(); + } + this.container.classList.add("squigglyAnnotation"); + return this.container; + } +} +class StrikeOutAnnotationElement extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true, + createQuadrilaterals: true + }); + } + render() { + if (!this.data.popupRef && this.hasPopupData) { + this._createPopup(); + } + this.container.classList.add("strikeoutAnnotation"); + return this.container; + } +} +class StampAnnotationElement extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + } + render() { + this.container.classList.add("stampAnnotation"); + if (!this.data.popupRef && this.hasPopupData) { + this._createPopup(); + } + return this.container; + } +} +class FileAttachmentAnnotationElement extends AnnotationElement { + #trigger = null; + constructor(parameters) { + super(parameters, { + isRenderable: true + }); + const { + filename, + content + } = this.data.file; + this.filename = (0,display_utils.getFilenameFromUrl)(filename, true); + this.content = content; + this.linkService.eventBus?.dispatch("fileattachmentannotation", { + source: this, + filename, + content + }); + } + render() { + this.container.classList.add("fileAttachmentAnnotation"); + const { + container, + data + } = this; + let trigger; + if (data.hasAppearance || data.fillAlpha === 0) { + trigger = document.createElement("div"); + } else { + trigger = document.createElement("img"); + trigger.src = `${this.imageResourcesPath}annotation-${/paperclip/i.test(data.name) ? "paperclip" : "pushpin"}.svg`; + if (data.fillAlpha && data.fillAlpha < 1) { + trigger.style = `filter: opacity(${Math.round(data.fillAlpha * 100)}%);`; + } + } + trigger.addEventListener("dblclick", this.#download.bind(this)); + this.#trigger = trigger; + const { + isMac + } = util.FeatureTest.platform; + container.addEventListener("keydown", evt => { + if (evt.key === "Enter" && (isMac ? evt.metaKey : evt.ctrlKey)) { + this.#download(); + } + }); + if (!data.popupRef && this.hasPopupData) { + this._createPopup(); + } else { + trigger.classList.add("popupTriggerArea"); + } + container.append(trigger); + return container; + } + getElementsToTriggerPopup() { + return this.#trigger; + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } + #download() { + this.downloadManager?.openOrDownloadData(this.content, this.filename); + } +} +class AnnotationLayer { + #accessibilityManager = null; + #annotationCanvasMap = null; + #editableAnnotations = new Map(); + constructor({ + div, + accessibilityManager, + annotationCanvasMap, + page, + viewport + }) { + this.div = div; + this.#accessibilityManager = accessibilityManager; + this.#annotationCanvasMap = annotationCanvasMap; + this.page = page; + this.viewport = viewport; + this.zIndex = 0; + } + #appendElement(element, id) { + const contentElement = element.firstChild || element; + contentElement.id = `${util.AnnotationPrefix}${id}`; + this.div.append(element); + this.#accessibilityManager?.moveElementInDOM(this.div, element, contentElement, false); + } + async render(params) { + const { + annotations + } = params; + const layer = this.div; + (0,display_utils.setLayerDimensions)(layer, this.viewport); + const popupToElements = new Map(); + const elementParams = { + data: null, + layer, + linkService: params.linkService, + downloadManager: params.downloadManager, + imageResourcesPath: params.imageResourcesPath || "", + renderForms: params.renderForms !== false, + svgFactory: new display_utils.DOMSVGFactory(), + annotationStorage: params.annotationStorage || new annotation_storage.AnnotationStorage(), + enableScripting: params.enableScripting === true, + hasJSActions: params.hasJSActions, + fieldObjects: params.fieldObjects, + parent: this, + elements: null + }; + for (const data of annotations) { + if (data.noHTML) { + continue; + } + const isPopupAnnotation = data.annotationType === util.AnnotationType.POPUP; + if (!isPopupAnnotation) { + const { + width, + height + } = getRectDims(data.rect); + if (width <= 0 || height <= 0) { + continue; + } + } else { + const elements = popupToElements.get(data.id); + if (!elements) { + continue; + } + elementParams.elements = elements; + } + elementParams.data = data; + const element = AnnotationElementFactory.create(elementParams); + if (!element.isRenderable) { + continue; + } + if (!isPopupAnnotation && data.popupRef) { + const elements = popupToElements.get(data.popupRef); + if (!elements) { + popupToElements.set(data.popupRef, [element]); + } else { + elements.push(element); + } + } + if (element.annotationEditorType > 0) { + this.#editableAnnotations.set(element.data.id, element); + } + const rendered = element.render(); + if (data.hidden) { + rendered.style.visibility = "hidden"; + } + this.#appendElement(rendered, data.id); + } + this.#setAnnotationCanvasMap(); + } + update({ + viewport + }) { + const layer = this.div; + this.viewport = viewport; + (0,display_utils.setLayerDimensions)(layer, { + rotation: viewport.rotation + }); + this.#setAnnotationCanvasMap(); + layer.hidden = false; + } + #setAnnotationCanvasMap() { + if (!this.#annotationCanvasMap) { + return; + } + const layer = this.div; + for (const [id, canvas] of this.#annotationCanvasMap) { + const element = layer.querySelector(`[data-annotation-id="${id}"]`); + if (!element) { + continue; + } + const { + firstChild + } = element; + if (!firstChild) { + element.append(canvas); + } else if (firstChild.nodeName === "CANVAS") { + firstChild.replaceWith(canvas); + } else { + firstChild.before(canvas); + } + } + this.#annotationCanvasMap.clear(); + } + getEditableAnnotations() { + return Array.from(this.#editableAnnotations.values()); + } + getEditableAnnotation(id) { + return this.#editableAnnotations.get(id); + } +} + + +/***/ }), + +/***/ 780: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ AnnotationStorage: () => (/* binding */ AnnotationStorage), +/* harmony export */ PrintAnnotationStorage: () => (/* binding */ PrintAnnotationStorage), +/* harmony export */ SerializableEmpty: () => (/* binding */ SerializableEmpty) +/* harmony export */ }); +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); +/* harmony import */ var _editor_editor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(682); +/* harmony import */ var _shared_murmurhash3_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(825); + + + +const SerializableEmpty = Object.freeze({ + map: null, + hash: "", + transfer: undefined +}); +class AnnotationStorage { + #modified = false; + #storage = new Map(); + constructor() { + this.onSetModified = null; + this.onResetModified = null; + this.onAnnotationEditor = null; + } + getValue(key, defaultValue) { + const value = this.#storage.get(key); + if (value === undefined) { + return defaultValue; + } + return Object.assign(defaultValue, value); + } + getRawValue(key) { + return this.#storage.get(key); + } + remove(key) { + this.#storage.delete(key); + if (this.#storage.size === 0) { + this.resetModified(); + } + if (typeof this.onAnnotationEditor === "function") { + for (const value of this.#storage.values()) { + if (value instanceof _editor_editor_js__WEBPACK_IMPORTED_MODULE_1__.AnnotationEditor) { + return; + } + } + this.onAnnotationEditor(null); + } + } + setValue(key, value) { + const obj = this.#storage.get(key); + let modified = false; + if (obj !== undefined) { + for (const [entry, val] of Object.entries(value)) { + if (obj[entry] !== val) { + modified = true; + obj[entry] = val; + } + } + } else { + modified = true; + this.#storage.set(key, value); + } + if (modified) { + this.#setModified(); + } + if (value instanceof _editor_editor_js__WEBPACK_IMPORTED_MODULE_1__.AnnotationEditor && typeof this.onAnnotationEditor === "function") { + this.onAnnotationEditor(value.constructor._type); + } + } + has(key) { + return this.#storage.has(key); + } + getAll() { + return this.#storage.size > 0 ? (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.objectFromMap)(this.#storage) : null; + } + setAll(obj) { + for (const [key, val] of Object.entries(obj)) { + this.setValue(key, val); + } + } + get size() { + return this.#storage.size; + } + #setModified() { + if (!this.#modified) { + this.#modified = true; + if (typeof this.onSetModified === "function") { + this.onSetModified(); + } + } + } + resetModified() { + if (this.#modified) { + this.#modified = false; + if (typeof this.onResetModified === "function") { + this.onResetModified(); + } + } + } + get print() { + return new PrintAnnotationStorage(this); + } + get serializable() { + if (this.#storage.size === 0) { + return SerializableEmpty; + } + const map = new Map(), + hash = new _shared_murmurhash3_js__WEBPACK_IMPORTED_MODULE_2__.MurmurHash3_64(), + transfer = []; + const context = Object.create(null); + let hasBitmap = false; + for (const [key, val] of this.#storage) { + const serialized = val instanceof _editor_editor_js__WEBPACK_IMPORTED_MODULE_1__.AnnotationEditor ? val.serialize(false, context) : val; + if (serialized) { + map.set(key, serialized); + hash.update(`${key}:${JSON.stringify(serialized)}`); + hasBitmap ||= !!serialized.bitmap; + } + } + if (hasBitmap) { + for (const value of map.values()) { + if (value.bitmap) { + transfer.push(value.bitmap); + } + } + } + return map.size > 0 ? { + map, + hash: hash.hexdigest(), + transfer + } : SerializableEmpty; + } +} +class PrintAnnotationStorage extends AnnotationStorage { + #serializable; + constructor(parent) { + super(); + const { + map, + hash, + transfer + } = parent.serializable; + const clone = structuredClone(map, transfer ? { + transfer + } : null); + this.#serializable = { + map: clone, + hash, + transfer + }; + } + get print() { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Should not call PrintAnnotationStorage.print"); + } + get serializable() { + return this.#serializable; + } +} + + +/***/ }), + +/***/ 406: +/***/ ((__webpack_module__, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.a(__webpack_module__, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try { +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ PDFDataRangeTransport: () => (/* binding */ PDFDataRangeTransport), +/* harmony export */ PDFWorker: () => (/* binding */ PDFWorker), +/* harmony export */ build: () => (/* binding */ build), +/* harmony export */ getDocument: () => (/* binding */ getDocument), +/* harmony export */ version: () => (/* binding */ version) +/* harmony export */ }); +/* unused harmony exports DefaultCanvasFactory, DefaultCMapReaderFactory, DefaultFilterFactory, DefaultStandardFontDataFactory, LoopbackPort, PDFDocumentLoadingTask, PDFDocumentProxy, PDFPageProxy, PDFWorkerUtil, RenderTask */ +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); +/* harmony import */ var _annotation_storage_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(780); +/* harmony import */ var _display_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(473); +/* harmony import */ var _font_loader_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(742); +/* harmony import */ var display_node_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(738); +/* harmony import */ var _canvas_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(250); +/* harmony import */ var _worker_options_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(368); +/* harmony import */ var _shared_message_handler_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(694); +/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(472); +/* harmony import */ var _optional_content_config_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(890); +/* harmony import */ var _transport_stream_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(92); +/* harmony import */ var display_fetch_stream__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(171); +/* harmony import */ var display_network__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(474); +/* harmony import */ var display_node_stream__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(498); +/* harmony import */ var _xfa_text_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(521); +var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([display_node_utils__WEBPACK_IMPORTED_MODULE_4__, display_node_stream__WEBPACK_IMPORTED_MODULE_13__]); +([display_node_utils__WEBPACK_IMPORTED_MODULE_4__, display_node_stream__WEBPACK_IMPORTED_MODULE_13__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__); + + + + + + + + + + + + + + + +const DEFAULT_RANGE_CHUNK_SIZE = 65536; +const RENDERING_CANCELLED_TIMEOUT = 100; +const DELAYED_CLEANUP_TIMEOUT = 5000; +const DefaultCanvasFactory = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS ? display_node_utils__WEBPACK_IMPORTED_MODULE_4__.NodeCanvasFactory : _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.DOMCanvasFactory; +const DefaultCMapReaderFactory = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS ? display_node_utils__WEBPACK_IMPORTED_MODULE_4__.NodeCMapReaderFactory : _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.DOMCMapReaderFactory; +const DefaultFilterFactory = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS ? display_node_utils__WEBPACK_IMPORTED_MODULE_4__.NodeFilterFactory : _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.DOMFilterFactory; +const DefaultStandardFontDataFactory = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS ? display_node_utils__WEBPACK_IMPORTED_MODULE_4__.NodeStandardFontDataFactory : _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.DOMStandardFontDataFactory; +function getDocument(src) { + if (typeof src === "string" || src instanceof URL) { + src = { + url: src + }; + } else if ((0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isArrayBuffer)(src)) { + src = { + data: src + }; + } + if (typeof src !== "object") { + throw new Error("Invalid parameter in getDocument, need parameter object."); + } + if (!src.url && !src.data && !src.range) { + throw new Error("Invalid parameter object: need either .data, .range or .url"); + } + const task = new PDFDocumentLoadingTask(); + const { + docId + } = task; + const url = src.url ? getUrlProp(src.url) : null; + const data = src.data ? getDataProp(src.data) : null; + const httpHeaders = src.httpHeaders || null; + const withCredentials = src.withCredentials === true; + const password = src.password ?? null; + const rangeTransport = src.range instanceof PDFDataRangeTransport ? src.range : null; + const rangeChunkSize = Number.isInteger(src.rangeChunkSize) && src.rangeChunkSize > 0 ? src.rangeChunkSize : DEFAULT_RANGE_CHUNK_SIZE; + let worker = src.worker instanceof PDFWorker ? src.worker : null; + const verbosity = src.verbosity; + const docBaseUrl = typeof src.docBaseUrl === "string" && !(0,_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.isDataScheme)(src.docBaseUrl) ? src.docBaseUrl : null; + const cMapUrl = typeof src.cMapUrl === "string" ? src.cMapUrl : null; + const cMapPacked = src.cMapPacked !== false; + const CMapReaderFactory = src.CMapReaderFactory || DefaultCMapReaderFactory; + const standardFontDataUrl = typeof src.standardFontDataUrl === "string" ? src.standardFontDataUrl : null; + const StandardFontDataFactory = src.StandardFontDataFactory || DefaultStandardFontDataFactory; + const ignoreErrors = src.stopAtErrors !== true; + const maxImageSize = Number.isInteger(src.maxImageSize) && src.maxImageSize > -1 ? src.maxImageSize : -1; + const isEvalSupported = src.isEvalSupported !== false; + const isOffscreenCanvasSupported = typeof src.isOffscreenCanvasSupported === "boolean" ? src.isOffscreenCanvasSupported : !_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS; + const canvasMaxAreaInBytes = Number.isInteger(src.canvasMaxAreaInBytes) ? src.canvasMaxAreaInBytes : -1; + const disableFontFace = typeof src.disableFontFace === "boolean" ? src.disableFontFace : _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS; + const fontExtraProperties = src.fontExtraProperties === true; + const enableXfa = src.enableXfa === true; + const ownerDocument = src.ownerDocument || globalThis.document; + const disableRange = src.disableRange === true; + const disableStream = src.disableStream === true; + const disableAutoFetch = src.disableAutoFetch === true; + const pdfBug = src.pdfBug === true; + const length = rangeTransport ? rangeTransport.length : src.length ?? NaN; + const useSystemFonts = typeof src.useSystemFonts === "boolean" ? src.useSystemFonts : !_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS && !disableFontFace; + const useWorkerFetch = typeof src.useWorkerFetch === "boolean" ? src.useWorkerFetch : CMapReaderFactory === _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.DOMCMapReaderFactory && StandardFontDataFactory === _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.DOMStandardFontDataFactory && cMapUrl && standardFontDataUrl && (0,_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.isValidFetchUrl)(cMapUrl, document.baseURI) && (0,_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.isValidFetchUrl)(standardFontDataUrl, document.baseURI); + const canvasFactory = src.canvasFactory || new DefaultCanvasFactory({ + ownerDocument + }); + const filterFactory = src.filterFactory || new DefaultFilterFactory({ + docId, + ownerDocument + }); + const styleElement = null; + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.setVerbosityLevel)(verbosity); + const transportFactory = { + canvasFactory, + filterFactory + }; + if (!useWorkerFetch) { + transportFactory.cMapReaderFactory = new CMapReaderFactory({ + baseUrl: cMapUrl, + isCompressed: cMapPacked + }); + transportFactory.standardFontDataFactory = new StandardFontDataFactory({ + baseUrl: standardFontDataUrl + }); + } + if (!worker) { + const workerParams = { + verbosity, + port: _worker_options_js__WEBPACK_IMPORTED_MODULE_6__.GlobalWorkerOptions.workerPort + }; + worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams); + task._worker = worker; + } + const fetchDocParams = { + docId, + apiVersion: '4.0.189', + data, + password, + disableAutoFetch, + rangeChunkSize, + length, + docBaseUrl, + enableXfa, + evaluatorOptions: { + maxImageSize, + disableFontFace, + ignoreErrors, + isEvalSupported, + isOffscreenCanvasSupported, + canvasMaxAreaInBytes, + fontExtraProperties, + useSystemFonts, + cMapUrl: useWorkerFetch ? cMapUrl : null, + standardFontDataUrl: useWorkerFetch ? standardFontDataUrl : null + } + }; + const transportParams = { + ignoreErrors, + isEvalSupported, + disableFontFace, + fontExtraProperties, + enableXfa, + ownerDocument, + disableAutoFetch, + pdfBug, + styleElement + }; + worker.promise.then(function () { + if (task.destroyed) { + throw new Error("Loading aborted"); + } + const workerIdPromise = _fetchDocument(worker, fetchDocParams); + const networkStreamPromise = new Promise(function (resolve) { + let networkStream; + if (rangeTransport) { + networkStream = new _transport_stream_js__WEBPACK_IMPORTED_MODULE_10__.PDFDataTransportStream({ + length, + initialData: rangeTransport.initialData, + progressiveDone: rangeTransport.progressiveDone, + contentDispositionFilename: rangeTransport.contentDispositionFilename, + disableRange, + disableStream + }, rangeTransport); + } else if (!data) { + const createPDFNetworkStream = params => { + if (_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS) { + return new display_node_stream__WEBPACK_IMPORTED_MODULE_13__.PDFNodeStream(params); + } + return (0,_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.isValidFetchUrl)(params.url) ? new display_fetch_stream__WEBPACK_IMPORTED_MODULE_11__.PDFFetchStream(params) : new display_network__WEBPACK_IMPORTED_MODULE_12__.PDFNetworkStream(params); + }; + networkStream = createPDFNetworkStream({ + url, + length, + httpHeaders, + withCredentials, + rangeChunkSize, + disableRange, + disableStream + }); + } + resolve(networkStream); + }); + return Promise.all([workerIdPromise, networkStreamPromise]).then(function ([workerId, networkStream]) { + if (task.destroyed) { + throw new Error("Loading aborted"); + } + const messageHandler = new _shared_message_handler_js__WEBPACK_IMPORTED_MODULE_7__.MessageHandler(docId, workerId, worker.port); + const transport = new WorkerTransport(messageHandler, task, networkStream, transportParams, transportFactory); + task._transport = transport; + messageHandler.send("Ready", null); + }); + }).catch(task._capability.reject); + return task; +} +async function _fetchDocument(worker, source) { + if (worker.destroyed) { + throw new Error("Worker was destroyed"); + } + const workerId = await worker.messageHandler.sendWithPromise("GetDocRequest", source, source.data ? [source.data.buffer] : null); + if (worker.destroyed) { + throw new Error("Worker was destroyed"); + } + return workerId; +} +function getUrlProp(val) { + if (val instanceof URL) { + return val.href; + } + try { + return new URL(val, window.location).href; + } catch { + if (_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS && typeof val === "string") { + return val; + } + } + throw new Error("Invalid PDF url data: " + "either string or URL-object is expected in the url property."); +} +function getDataProp(val) { + if (_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS && typeof Buffer !== "undefined" && val instanceof Buffer) { + throw new Error("Please provide binary data as `Uint8Array`, rather than `Buffer`."); + } + if (val instanceof Uint8Array && val.byteLength === val.buffer.byteLength) { + return val; + } + if (typeof val === "string") { + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.stringToBytes)(val); + } + if (typeof val === "object" && !isNaN(val?.length) || (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isArrayBuffer)(val)) { + return new Uint8Array(val); + } + throw new Error("Invalid PDF binary data: either TypedArray, " + "string, or array-like object is expected in the data property."); +} +class PDFDocumentLoadingTask { + static #docId = 0; + constructor() { + this._capability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this._transport = null; + this._worker = null; + this.docId = `d${PDFDocumentLoadingTask.#docId++}`; + this.destroyed = false; + this.onPassword = null; + this.onProgress = null; + } + get promise() { + return this._capability.promise; + } + async destroy() { + this.destroyed = true; + try { + if (this._worker?.port) { + this._worker._pendingDestroy = true; + } + await this._transport?.destroy(); + } catch (ex) { + if (this._worker?.port) { + delete this._worker._pendingDestroy; + } + throw ex; + } + this._transport = null; + if (this._worker) { + this._worker.destroy(); + this._worker = null; + } + } +} +class PDFDataRangeTransport { + constructor(length, initialData, progressiveDone = false, contentDispositionFilename = null) { + this.length = length; + this.initialData = initialData; + this.progressiveDone = progressiveDone; + this.contentDispositionFilename = contentDispositionFilename; + this._rangeListeners = []; + this._progressListeners = []; + this._progressiveReadListeners = []; + this._progressiveDoneListeners = []; + this._readyCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + } + addRangeListener(listener) { + this._rangeListeners.push(listener); + } + addProgressListener(listener) { + this._progressListeners.push(listener); + } + addProgressiveReadListener(listener) { + this._progressiveReadListeners.push(listener); + } + addProgressiveDoneListener(listener) { + this._progressiveDoneListeners.push(listener); + } + onDataRange(begin, chunk) { + for (const listener of this._rangeListeners) { + listener(begin, chunk); + } + } + onDataProgress(loaded, total) { + this._readyCapability.promise.then(() => { + for (const listener of this._progressListeners) { + listener(loaded, total); + } + }); + } + onDataProgressiveRead(chunk) { + this._readyCapability.promise.then(() => { + for (const listener of this._progressiveReadListeners) { + listener(chunk); + } + }); + } + onDataProgressiveDone() { + this._readyCapability.promise.then(() => { + for (const listener of this._progressiveDoneListeners) { + listener(); + } + }); + } + transportReady() { + this._readyCapability.resolve(); + } + requestDataRange(begin, end) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Abstract method PDFDataRangeTransport.requestDataRange"); + } + abort() {} +} +class PDFDocumentProxy { + constructor(pdfInfo, transport) { + this._pdfInfo = pdfInfo; + this._transport = transport; + } + get annotationStorage() { + return this._transport.annotationStorage; + } + get filterFactory() { + return this._transport.filterFactory; + } + get numPages() { + return this._pdfInfo.numPages; + } + get fingerprints() { + return this._pdfInfo.fingerprints; + } + get isPureXfa() { + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "isPureXfa", !!this._transport._htmlForXfa); + } + get allXfaHtml() { + return this._transport._htmlForXfa; + } + getPage(pageNumber) { + return this._transport.getPage(pageNumber); + } + getPageIndex(ref) { + return this._transport.getPageIndex(ref); + } + getDestinations() { + return this._transport.getDestinations(); + } + getDestination(id) { + return this._transport.getDestination(id); + } + getPageLabels() { + return this._transport.getPageLabels(); + } + getPageLayout() { + return this._transport.getPageLayout(); + } + getPageMode() { + return this._transport.getPageMode(); + } + getViewerPreferences() { + return this._transport.getViewerPreferences(); + } + getOpenAction() { + return this._transport.getOpenAction(); + } + getAttachments() { + return this._transport.getAttachments(); + } + getJSActions() { + return this._transport.getDocJSActions(); + } + getOutline() { + return this._transport.getOutline(); + } + getOptionalContentConfig() { + return this._transport.getOptionalContentConfig(); + } + getPermissions() { + return this._transport.getPermissions(); + } + getMetadata() { + return this._transport.getMetadata(); + } + getMarkInfo() { + return this._transport.getMarkInfo(); + } + getData() { + return this._transport.getData(); + } + saveDocument() { + return this._transport.saveDocument(); + } + getDownloadInfo() { + return this._transport.downloadInfoCapability.promise; + } + cleanup(keepLoadedFonts = false) { + return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa); + } + destroy() { + return this.loadingTask.destroy(); + } + get loadingParams() { + return this._transport.loadingParams; + } + get loadingTask() { + return this._transport.loadingTask; + } + getFieldObjects() { + return this._transport.getFieldObjects(); + } + hasJSActions() { + return this._transport.hasJSActions(); + } + getCalculationOrderIds() { + return this._transport.getCalculationOrderIds(); + } +} +class PDFPageProxy { + #delayedCleanupTimeout = null; + #pendingCleanup = false; + constructor(pageIndex, pageInfo, transport, pdfBug = false) { + this._pageIndex = pageIndex; + this._pageInfo = pageInfo; + this._transport = transport; + this._stats = pdfBug ? new _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.StatTimer() : null; + this._pdfBug = pdfBug; + this.commonObjs = transport.commonObjs; + this.objs = new PDFObjects(); + this._maybeCleanupAfterRender = false; + this._intentStates = new Map(); + this.destroyed = false; + } + get pageNumber() { + return this._pageIndex + 1; + } + get rotate() { + return this._pageInfo.rotate; + } + get ref() { + return this._pageInfo.ref; + } + get userUnit() { + return this._pageInfo.userUnit; + } + get view() { + return this._pageInfo.view; + } + getViewport({ + scale, + rotation = this.rotate, + offsetX = 0, + offsetY = 0, + dontFlip = false + } = {}) { + return new _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.PageViewport({ + viewBox: this.view, + scale, + rotation, + offsetX, + offsetY, + dontFlip + }); + } + getAnnotations({ + intent = "display" + } = {}) { + const intentArgs = this._transport.getRenderingIntent(intent); + return this._transport.getAnnotations(this._pageIndex, intentArgs.renderingIntent); + } + getJSActions() { + return this._transport.getPageJSActions(this._pageIndex); + } + get filterFactory() { + return this._transport.filterFactory; + } + get isPureXfa() { + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "isPureXfa", !!this._transport._htmlForXfa); + } + async getXfa() { + return this._transport._htmlForXfa?.children[this._pageIndex] || null; + } + render({ + canvasContext, + viewport, + intent = "display", + annotationMode = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationMode.ENABLE, + transform = null, + background = null, + optionalContentConfigPromise = null, + annotationCanvasMap = null, + pageColors = null, + printAnnotationStorage = null + }) { + this._stats?.time("Overall"); + const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage); + this.#pendingCleanup = false; + this.#abortDelayedCleanup(); + if (!optionalContentConfigPromise) { + optionalContentConfigPromise = this._transport.getOptionalContentConfig(); + } + let intentState = this._intentStates.get(intentArgs.cacheKey); + if (!intentState) { + intentState = Object.create(null); + this._intentStates.set(intentArgs.cacheKey, intentState); + } + if (intentState.streamReaderCancelTimeout) { + clearTimeout(intentState.streamReaderCancelTimeout); + intentState.streamReaderCancelTimeout = null; + } + const intentPrint = !!(intentArgs.renderingIntent & _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.RenderingIntentFlag.PRINT); + if (!intentState.displayReadyCapability) { + intentState.displayReadyCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + intentState.operatorList = { + fnArray: [], + argsArray: [], + lastChunk: false, + separateAnnots: null + }; + this._stats?.time("Page Request"); + this._pumpOperatorList(intentArgs); + } + const complete = error => { + intentState.renderTasks.delete(internalRenderTask); + if (this._maybeCleanupAfterRender || intentPrint) { + this.#pendingCleanup = true; + } + this.#tryCleanup(!intentPrint); + if (error) { + internalRenderTask.capability.reject(error); + this._abortOperatorList({ + intentState, + reason: error instanceof Error ? error : new Error(error) + }); + } else { + internalRenderTask.capability.resolve(); + } + this._stats?.timeEnd("Rendering"); + this._stats?.timeEnd("Overall"); + }; + const internalRenderTask = new InternalRenderTask({ + callback: complete, + params: { + canvasContext, + viewport, + transform, + background + }, + objs: this.objs, + commonObjs: this.commonObjs, + annotationCanvasMap, + operatorList: intentState.operatorList, + pageIndex: this._pageIndex, + canvasFactory: this._transport.canvasFactory, + filterFactory: this._transport.filterFactory, + useRequestAnimationFrame: !intentPrint, + pdfBug: this._pdfBug, + pageColors + }); + (intentState.renderTasks ||= new Set()).add(internalRenderTask); + const renderTask = internalRenderTask.task; + Promise.all([intentState.displayReadyCapability.promise, optionalContentConfigPromise]).then(([transparency, optionalContentConfig]) => { + if (this.destroyed) { + complete(); + return; + } + this._stats?.time("Rendering"); + internalRenderTask.initializeGraphics({ + transparency, + optionalContentConfig + }); + internalRenderTask.operatorListChanged(); + }).catch(complete); + return renderTask; + } + getOperatorList({ + intent = "display", + annotationMode = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationMode.ENABLE, + printAnnotationStorage = null + } = {}) { + function operatorListChanged() { + if (intentState.operatorList.lastChunk) { + intentState.opListReadCapability.resolve(intentState.operatorList); + intentState.renderTasks.delete(opListTask); + } + } + const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage, true); + let intentState = this._intentStates.get(intentArgs.cacheKey); + if (!intentState) { + intentState = Object.create(null); + this._intentStates.set(intentArgs.cacheKey, intentState); + } + let opListTask; + if (!intentState.opListReadCapability) { + opListTask = Object.create(null); + opListTask.operatorListChanged = operatorListChanged; + intentState.opListReadCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + (intentState.renderTasks ||= new Set()).add(opListTask); + intentState.operatorList = { + fnArray: [], + argsArray: [], + lastChunk: false, + separateAnnots: null + }; + this._stats?.time("Page Request"); + this._pumpOperatorList(intentArgs); + } + return intentState.opListReadCapability.promise; + } + streamTextContent({ + includeMarkedContent = false, + disableNormalization = false + } = {}) { + const TEXT_CONTENT_CHUNK_SIZE = 100; + return this._transport.messageHandler.sendWithStream("GetTextContent", { + pageIndex: this._pageIndex, + includeMarkedContent: includeMarkedContent === true, + disableNormalization: disableNormalization === true + }, { + highWaterMark: TEXT_CONTENT_CHUNK_SIZE, + size(textContent) { + return textContent.items.length; + } + }); + } + getTextContent(params = {}) { + if (this._transport._htmlForXfa) { + return this.getXfa().then(xfa => { + return _xfa_text_js__WEBPACK_IMPORTED_MODULE_14__.XfaText.textContent(xfa); + }); + } + const readableStream = this.streamTextContent(params); + return new Promise(function (resolve, reject) { + function pump() { + reader.read().then(function ({ + value, + done + }) { + if (done) { + resolve(textContent); + return; + } + Object.assign(textContent.styles, value.styles); + textContent.items.push(...value.items); + pump(); + }, reject); + } + const reader = readableStream.getReader(); + const textContent = { + items: [], + styles: Object.create(null) + }; + pump(); + }); + } + getStructTree() { + return this._transport.getStructTree(this._pageIndex); + } + _destroy() { + this.destroyed = true; + const waitOn = []; + for (const intentState of this._intentStates.values()) { + this._abortOperatorList({ + intentState, + reason: new Error("Page was destroyed."), + force: true + }); + if (intentState.opListReadCapability) { + continue; + } + for (const internalRenderTask of intentState.renderTasks) { + waitOn.push(internalRenderTask.completed); + internalRenderTask.cancel(); + } + } + this.objs.clear(); + this.#pendingCleanup = false; + this.#abortDelayedCleanup(); + return Promise.all(waitOn); + } + cleanup(resetStats = false) { + this.#pendingCleanup = true; + const success = this.#tryCleanup(false); + if (resetStats && success) { + this._stats &&= new _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.StatTimer(); + } + return success; + } + #tryCleanup(delayed = false) { + this.#abortDelayedCleanup(); + if (!this.#pendingCleanup || this.destroyed) { + return false; + } + if (delayed) { + this.#delayedCleanupTimeout = setTimeout(() => { + this.#delayedCleanupTimeout = null; + this.#tryCleanup(false); + }, DELAYED_CLEANUP_TIMEOUT); + return false; + } + for (const { + renderTasks, + operatorList + } of this._intentStates.values()) { + if (renderTasks.size > 0 || !operatorList.lastChunk) { + return false; + } + } + this._intentStates.clear(); + this.objs.clear(); + this.#pendingCleanup = false; + return true; + } + #abortDelayedCleanup() { + if (this.#delayedCleanupTimeout) { + clearTimeout(this.#delayedCleanupTimeout); + this.#delayedCleanupTimeout = null; + } + } + _startRenderPage(transparency, cacheKey) { + const intentState = this._intentStates.get(cacheKey); + if (!intentState) { + return; + } + this._stats?.timeEnd("Page Request"); + intentState.displayReadyCapability?.resolve(transparency); + } + _renderPageChunk(operatorListChunk, intentState) { + for (let i = 0, ii = operatorListChunk.length; i < ii; i++) { + intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]); + intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]); + } + intentState.operatorList.lastChunk = operatorListChunk.lastChunk; + intentState.operatorList.separateAnnots = operatorListChunk.separateAnnots; + for (const internalRenderTask of intentState.renderTasks) { + internalRenderTask.operatorListChanged(); + } + if (operatorListChunk.lastChunk) { + this.#tryCleanup(true); + } + } + _pumpOperatorList({ + renderingIntent, + cacheKey, + annotationStorageSerializable + }) { + const { + map, + transfer + } = annotationStorageSerializable; + const readableStream = this._transport.messageHandler.sendWithStream("GetOperatorList", { + pageIndex: this._pageIndex, + intent: renderingIntent, + cacheKey, + annotationStorage: map + }, transfer); + const reader = readableStream.getReader(); + const intentState = this._intentStates.get(cacheKey); + intentState.streamReader = reader; + const pump = () => { + reader.read().then(({ + value, + done + }) => { + if (done) { + intentState.streamReader = null; + return; + } + if (this._transport.destroyed) { + return; + } + this._renderPageChunk(value, intentState); + pump(); + }, reason => { + intentState.streamReader = null; + if (this._transport.destroyed) { + return; + } + if (intentState.operatorList) { + intentState.operatorList.lastChunk = true; + for (const internalRenderTask of intentState.renderTasks) { + internalRenderTask.operatorListChanged(); + } + this.#tryCleanup(true); + } + if (intentState.displayReadyCapability) { + intentState.displayReadyCapability.reject(reason); + } else if (intentState.opListReadCapability) { + intentState.opListReadCapability.reject(reason); + } else { + throw reason; + } + }); + }; + pump(); + } + _abortOperatorList({ + intentState, + reason, + force = false + }) { + if (!intentState.streamReader) { + return; + } + if (intentState.streamReaderCancelTimeout) { + clearTimeout(intentState.streamReaderCancelTimeout); + intentState.streamReaderCancelTimeout = null; + } + if (!force) { + if (intentState.renderTasks.size > 0) { + return; + } + if (reason instanceof _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.RenderingCancelledException) { + let delay = RENDERING_CANCELLED_TIMEOUT; + if (reason.extraDelay > 0 && reason.extraDelay < 1000) { + delay += reason.extraDelay; + } + intentState.streamReaderCancelTimeout = setTimeout(() => { + intentState.streamReaderCancelTimeout = null; + this._abortOperatorList({ + intentState, + reason, + force: true + }); + }, delay); + return; + } + } + intentState.streamReader.cancel(new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AbortException(reason.message)).catch(() => {}); + intentState.streamReader = null; + if (this._transport.destroyed) { + return; + } + for (const [curCacheKey, curIntentState] of this._intentStates) { + if (curIntentState === intentState) { + this._intentStates.delete(curCacheKey); + break; + } + } + this.cleanup(); + } + get stats() { + return this._stats; + } +} +class LoopbackPort { + #listeners = new Set(); + #deferred = Promise.resolve(); + postMessage(obj, transfer) { + const event = { + data: structuredClone(obj, transfer ? { + transfer + } : null) + }; + this.#deferred.then(() => { + for (const listener of this.#listeners) { + listener.call(this, event); + } + }); + } + addEventListener(name, listener) { + this.#listeners.add(listener); + } + removeEventListener(name, listener) { + this.#listeners.delete(listener); + } + terminate() { + this.#listeners.clear(); + } +} +const PDFWorkerUtil = { + isWorkerDisabled: false, + fakeWorkerId: 0 +}; +{ + if (_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS) { + PDFWorkerUtil.isWorkerDisabled = true; + _worker_options_js__WEBPACK_IMPORTED_MODULE_6__.GlobalWorkerOptions.workerSrc ||= "./pdf.worker.mjs"; + } + PDFWorkerUtil.isSameOrigin = function (baseUrl, otherUrl) { + let base; + try { + base = new URL(baseUrl); + if (!base.origin || base.origin === "null") { + return false; + } + } catch { + return false; + } + const other = new URL(otherUrl, base); + return base.origin === other.origin; + }; + PDFWorkerUtil.createCDNWrapper = function (url) { + const wrapper = `await import("${url}");`; + return URL.createObjectURL(new Blob([wrapper])); + }; +} +class PDFWorker { + static #workerPorts; + constructor({ + name = null, + port = null, + verbosity = (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.getVerbosityLevel)() + } = {}) { + this.name = name; + this.destroyed = false; + this.verbosity = verbosity; + this._readyCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this._port = null; + this._webWorker = null; + this._messageHandler = null; + if (port) { + if (PDFWorker.#workerPorts?.has(port)) { + throw new Error("Cannot use more than one PDFWorker per port."); + } + (PDFWorker.#workerPorts ||= new WeakMap()).set(port, this); + this._initializeFromPort(port); + return; + } + this._initialize(); + } + get promise() { + return this._readyCapability.promise; + } + get port() { + return this._port; + } + get messageHandler() { + return this._messageHandler; + } + _initializeFromPort(port) { + this._port = port; + this._messageHandler = new _shared_message_handler_js__WEBPACK_IMPORTED_MODULE_7__.MessageHandler("main", "worker", port); + this._messageHandler.on("ready", function () {}); + this._readyCapability.resolve(); + this._messageHandler.send("configure", { + verbosity: this.verbosity + }); + } + _initialize() { + if (!PDFWorkerUtil.isWorkerDisabled && !PDFWorker.#mainThreadWorkerMessageHandler) { + let { + workerSrc + } = PDFWorker; + try { + if (!PDFWorkerUtil.isSameOrigin(window.location.href, workerSrc)) { + workerSrc = PDFWorkerUtil.createCDNWrapper(new URL(workerSrc, window.location).href); + } + const worker = new Worker(workerSrc, { + type: "module" + }); + const messageHandler = new _shared_message_handler_js__WEBPACK_IMPORTED_MODULE_7__.MessageHandler("main", "worker", worker); + const terminateEarly = () => { + worker.removeEventListener("error", onWorkerError); + messageHandler.destroy(); + worker.terminate(); + if (this.destroyed) { + this._readyCapability.reject(new Error("Worker was destroyed")); + } else { + this._setupFakeWorker(); + } + }; + const onWorkerError = () => { + if (!this._webWorker) { + terminateEarly(); + } + }; + worker.addEventListener("error", onWorkerError); + messageHandler.on("test", data => { + worker.removeEventListener("error", onWorkerError); + if (this.destroyed) { + terminateEarly(); + return; + } + if (data) { + this._messageHandler = messageHandler; + this._port = worker; + this._webWorker = worker; + this._readyCapability.resolve(); + messageHandler.send("configure", { + verbosity: this.verbosity + }); + } else { + this._setupFakeWorker(); + messageHandler.destroy(); + worker.terminate(); + } + }); + messageHandler.on("ready", data => { + worker.removeEventListener("error", onWorkerError); + if (this.destroyed) { + terminateEarly(); + return; + } + try { + sendTest(); + } catch { + this._setupFakeWorker(); + } + }); + const sendTest = () => { + const testObj = new Uint8Array(); + messageHandler.send("test", testObj, [testObj.buffer]); + }; + sendTest(); + return; + } catch { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.info)("The worker has been disabled."); + } + } + this._setupFakeWorker(); + } + _setupFakeWorker() { + if (!PDFWorkerUtil.isWorkerDisabled) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)("Setting up fake worker."); + PDFWorkerUtil.isWorkerDisabled = true; + } + PDFWorker._setupFakeWorkerGlobal.then(WorkerMessageHandler => { + if (this.destroyed) { + this._readyCapability.reject(new Error("Worker was destroyed")); + return; + } + const port = new LoopbackPort(); + this._port = port; + const id = `fake${PDFWorkerUtil.fakeWorkerId++}`; + const workerHandler = new _shared_message_handler_js__WEBPACK_IMPORTED_MODULE_7__.MessageHandler(id + "_worker", id, port); + WorkerMessageHandler.setup(workerHandler, port); + const messageHandler = new _shared_message_handler_js__WEBPACK_IMPORTED_MODULE_7__.MessageHandler(id, id + "_worker", port); + this._messageHandler = messageHandler; + this._readyCapability.resolve(); + messageHandler.send("configure", { + verbosity: this.verbosity + }); + }).catch(reason => { + this._readyCapability.reject(new Error(`Setting up fake worker failed: "${reason.message}".`)); + }); + } + destroy() { + this.destroyed = true; + if (this._webWorker) { + this._webWorker.terminate(); + this._webWorker = null; + } + PDFWorker.#workerPorts?.delete(this._port); + this._port = null; + if (this._messageHandler) { + this._messageHandler.destroy(); + this._messageHandler = null; + } + } + static fromPort(params) { + if (!params?.port) { + throw new Error("PDFWorker.fromPort - invalid method signature."); + } + const cachedPort = this.#workerPorts?.get(params.port); + if (cachedPort) { + if (cachedPort._pendingDestroy) { + throw new Error("PDFWorker.fromPort - the worker is being destroyed.\n" + "Please remember to await `PDFDocumentLoadingTask.destroy()`-calls."); + } + return cachedPort; + } + return new PDFWorker(params); + } + static get workerSrc() { + if (_worker_options_js__WEBPACK_IMPORTED_MODULE_6__.GlobalWorkerOptions.workerSrc) { + return _worker_options_js__WEBPACK_IMPORTED_MODULE_6__.GlobalWorkerOptions.workerSrc; + } + throw new Error('No "GlobalWorkerOptions.workerSrc" specified.'); + } + static get #mainThreadWorkerMessageHandler() { + try { + return globalThis.pdfjsWorker?.WorkerMessageHandler || null; + } catch { + return null; + } + } + static get _setupFakeWorkerGlobal() { + const loader = async () => { + if (this.#mainThreadWorkerMessageHandler) { + return this.#mainThreadWorkerMessageHandler; + } + const worker = await import(/* webpackIgnore: true */ this.workerSrc); + return worker.WorkerMessageHandler; + }; + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "_setupFakeWorkerGlobal", loader()); + } +} +class WorkerTransport { + #methodPromises = new Map(); + #pageCache = new Map(); + #pagePromises = new Map(); + #passwordCapability = null; + constructor(messageHandler, loadingTask, networkStream, params, factory) { + this.messageHandler = messageHandler; + this.loadingTask = loadingTask; + this.commonObjs = new PDFObjects(); + this.fontLoader = new _font_loader_js__WEBPACK_IMPORTED_MODULE_3__.FontLoader({ + ownerDocument: params.ownerDocument, + styleElement: params.styleElement + }); + this._params = params; + this.canvasFactory = factory.canvasFactory; + this.filterFactory = factory.filterFactory; + this.cMapReaderFactory = factory.cMapReaderFactory; + this.standardFontDataFactory = factory.standardFontDataFactory; + this.destroyed = false; + this.destroyCapability = null; + this._networkStream = networkStream; + this._fullReader = null; + this._lastProgress = null; + this.downloadInfoCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this.setupMessageHandler(); + } + #cacheSimpleMethod(name, data = null) { + const cachedPromise = this.#methodPromises.get(name); + if (cachedPromise) { + return cachedPromise; + } + const promise = this.messageHandler.sendWithPromise(name, data); + this.#methodPromises.set(name, promise); + return promise; + } + get annotationStorage() { + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "annotationStorage", new _annotation_storage_js__WEBPACK_IMPORTED_MODULE_1__.AnnotationStorage()); + } + getRenderingIntent(intent, annotationMode = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationMode.ENABLE, printAnnotationStorage = null, isOpList = false) { + let renderingIntent = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.RenderingIntentFlag.DISPLAY; + let annotationStorageSerializable = _annotation_storage_js__WEBPACK_IMPORTED_MODULE_1__.SerializableEmpty; + switch (intent) { + case "any": + renderingIntent = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.RenderingIntentFlag.ANY; + break; + case "display": + break; + case "print": + renderingIntent = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.RenderingIntentFlag.PRINT; + break; + default: + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`getRenderingIntent - invalid intent: ${intent}`); + } + switch (annotationMode) { + case _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationMode.DISABLE: + renderingIntent += _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.RenderingIntentFlag.ANNOTATIONS_DISABLE; + break; + case _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationMode.ENABLE: + break; + case _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationMode.ENABLE_FORMS: + renderingIntent += _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.RenderingIntentFlag.ANNOTATIONS_FORMS; + break; + case _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationMode.ENABLE_STORAGE: + renderingIntent += _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.RenderingIntentFlag.ANNOTATIONS_STORAGE; + const annotationStorage = renderingIntent & _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.RenderingIntentFlag.PRINT && printAnnotationStorage instanceof _annotation_storage_js__WEBPACK_IMPORTED_MODULE_1__.PrintAnnotationStorage ? printAnnotationStorage : this.annotationStorage; + annotationStorageSerializable = annotationStorage.serializable; + break; + default: + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`getRenderingIntent - invalid annotationMode: ${annotationMode}`); + } + if (isOpList) { + renderingIntent += _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.RenderingIntentFlag.OPLIST; + } + return { + renderingIntent, + cacheKey: `${renderingIntent}_${annotationStorageSerializable.hash}`, + annotationStorageSerializable + }; + } + destroy() { + if (this.destroyCapability) { + return this.destroyCapability.promise; + } + this.destroyed = true; + this.destroyCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this.#passwordCapability?.reject(new Error("Worker was destroyed during onPassword callback")); + const waitOn = []; + for (const page of this.#pageCache.values()) { + waitOn.push(page._destroy()); + } + this.#pageCache.clear(); + this.#pagePromises.clear(); + if (this.hasOwnProperty("annotationStorage")) { + this.annotationStorage.resetModified(); + } + const terminated = this.messageHandler.sendWithPromise("Terminate", null); + waitOn.push(terminated); + Promise.all(waitOn).then(() => { + this.commonObjs.clear(); + this.fontLoader.clear(); + this.#methodPromises.clear(); + this.filterFactory.destroy(); + this._networkStream?.cancelAllRequests(new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AbortException("Worker was terminated.")); + if (this.messageHandler) { + this.messageHandler.destroy(); + this.messageHandler = null; + } + this.destroyCapability.resolve(); + }, this.destroyCapability.reject); + return this.destroyCapability.promise; + } + setupMessageHandler() { + const { + messageHandler, + loadingTask + } = this; + messageHandler.on("GetReader", (data, sink) => { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(this._networkStream, "GetReader - no `IPDFStream` instance available."); + this._fullReader = this._networkStream.getFullReader(); + this._fullReader.onProgress = evt => { + this._lastProgress = { + loaded: evt.loaded, + total: evt.total + }; + }; + sink.onPull = () => { + this._fullReader.read().then(function ({ + value, + done + }) { + if (done) { + sink.close(); + return; + } + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(value instanceof ArrayBuffer, "GetReader - expected an ArrayBuffer."); + sink.enqueue(new Uint8Array(value), 1, [value]); + }).catch(reason => { + sink.error(reason); + }); + }; + sink.onCancel = reason => { + this._fullReader.cancel(reason); + sink.ready.catch(readyReason => { + if (this.destroyed) { + return; + } + throw readyReason; + }); + }; + }); + messageHandler.on("ReaderHeadersReady", data => { + const headersCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + const fullReader = this._fullReader; + fullReader.headersReady.then(() => { + if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) { + if (this._lastProgress) { + loadingTask.onProgress?.(this._lastProgress); + } + fullReader.onProgress = evt => { + loadingTask.onProgress?.({ + loaded: evt.loaded, + total: evt.total + }); + }; + } + headersCapability.resolve({ + isStreamingSupported: fullReader.isStreamingSupported, + isRangeSupported: fullReader.isRangeSupported, + contentLength: fullReader.contentLength + }); + }, headersCapability.reject); + return headersCapability.promise; + }); + messageHandler.on("GetRangeReader", (data, sink) => { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(this._networkStream, "GetRangeReader - no `IPDFStream` instance available."); + const rangeReader = this._networkStream.getRangeReader(data.begin, data.end); + if (!rangeReader) { + sink.close(); + return; + } + sink.onPull = () => { + rangeReader.read().then(function ({ + value, + done + }) { + if (done) { + sink.close(); + return; + } + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(value instanceof ArrayBuffer, "GetRangeReader - expected an ArrayBuffer."); + sink.enqueue(new Uint8Array(value), 1, [value]); + }).catch(reason => { + sink.error(reason); + }); + }; + sink.onCancel = reason => { + rangeReader.cancel(reason); + sink.ready.catch(readyReason => { + if (this.destroyed) { + return; + } + throw readyReason; + }); + }; + }); + messageHandler.on("GetDoc", ({ + pdfInfo + }) => { + this._numPages = pdfInfo.numPages; + this._htmlForXfa = pdfInfo.htmlForXfa; + delete pdfInfo.htmlForXfa; + loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this)); + }); + messageHandler.on("DocException", function (ex) { + let reason; + switch (ex.name) { + case "PasswordException": + reason = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PasswordException(ex.message, ex.code); + break; + case "InvalidPDFException": + reason = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.InvalidPDFException(ex.message); + break; + case "MissingPDFException": + reason = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.MissingPDFException(ex.message); + break; + case "UnexpectedResponseException": + reason = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.UnexpectedResponseException(ex.message, ex.status); + break; + case "UnknownErrorException": + reason = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.UnknownErrorException(ex.message, ex.details); + break; + default: + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("DocException - expected a valid Error."); + } + loadingTask._capability.reject(reason); + }); + messageHandler.on("PasswordRequest", exception => { + this.#passwordCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + if (loadingTask.onPassword) { + const updatePassword = password => { + if (password instanceof Error) { + this.#passwordCapability.reject(password); + } else { + this.#passwordCapability.resolve({ + password + }); + } + }; + try { + loadingTask.onPassword(updatePassword, exception.code); + } catch (ex) { + this.#passwordCapability.reject(ex); + } + } else { + this.#passwordCapability.reject(new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PasswordException(exception.message, exception.code)); + } + return this.#passwordCapability.promise; + }); + messageHandler.on("DataLoaded", data => { + loadingTask.onProgress?.({ + loaded: data.length, + total: data.length + }); + this.downloadInfoCapability.resolve(data); + }); + messageHandler.on("StartRenderPage", data => { + if (this.destroyed) { + return; + } + const page = this.#pageCache.get(data.pageIndex); + page._startRenderPage(data.transparency, data.cacheKey); + }); + messageHandler.on("commonobj", ([id, type, exportedData]) => { + if (this.destroyed) { + return; + } + if (this.commonObjs.has(id)) { + return; + } + switch (type) { + case "Font": + const params = this._params; + if ("error" in exportedData) { + const exportedError = exportedData.error; + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`Error during font loading: ${exportedError}`); + this.commonObjs.resolve(id, exportedError); + break; + } + const inspectFont = params.pdfBug && globalThis.FontInspector?.enabled ? (font, url) => globalThis.FontInspector.fontAdded(font, url) : null; + const font = new _font_loader_js__WEBPACK_IMPORTED_MODULE_3__.FontFaceObject(exportedData, { + isEvalSupported: params.isEvalSupported, + disableFontFace: params.disableFontFace, + ignoreErrors: params.ignoreErrors, + inspectFont + }); + this.fontLoader.bind(font).catch(reason => { + return messageHandler.sendWithPromise("FontFallback", { + id + }); + }).finally(() => { + if (!params.fontExtraProperties && font.data) { + font.data = null; + } + this.commonObjs.resolve(id, font); + }); + break; + case "FontPath": + case "Image": + case "Pattern": + this.commonObjs.resolve(id, exportedData); + break; + default: + throw new Error(`Got unknown common object type ${type}`); + } + }); + messageHandler.on("obj", ([id, pageIndex, type, imageData]) => { + if (this.destroyed) { + return; + } + const pageProxy = this.#pageCache.get(pageIndex); + if (pageProxy.objs.has(id)) { + return; + } + if (pageProxy._intentStates.size === 0) { + imageData?.bitmap?.close(); + return; + } + switch (type) { + case "Image": + pageProxy.objs.resolve(id, imageData); + if (imageData) { + let length; + if (imageData.bitmap) { + const { + width, + height + } = imageData; + length = width * height * 4; + } else { + length = imageData.data?.length || 0; + } + if (length > _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.MAX_IMAGE_SIZE_TO_CACHE) { + pageProxy._maybeCleanupAfterRender = true; + } + } + break; + case "Pattern": + pageProxy.objs.resolve(id, imageData); + break; + default: + throw new Error(`Got unknown object type ${type}`); + } + }); + messageHandler.on("DocProgress", data => { + if (this.destroyed) { + return; + } + loadingTask.onProgress?.({ + loaded: data.loaded, + total: data.total + }); + }); + messageHandler.on("FetchBuiltInCMap", data => { + if (this.destroyed) { + return Promise.reject(new Error("Worker was destroyed.")); + } + if (!this.cMapReaderFactory) { + return Promise.reject(new Error("CMapReaderFactory not initialized, see the `useWorkerFetch` parameter.")); + } + return this.cMapReaderFactory.fetch(data); + }); + messageHandler.on("FetchStandardFontData", data => { + if (this.destroyed) { + return Promise.reject(new Error("Worker was destroyed.")); + } + if (!this.standardFontDataFactory) { + return Promise.reject(new Error("StandardFontDataFactory not initialized, see the `useWorkerFetch` parameter.")); + } + return this.standardFontDataFactory.fetch(data); + }); + } + getData() { + return this.messageHandler.sendWithPromise("GetData", null); + } + saveDocument() { + if (this.annotationStorage.size <= 0) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)("saveDocument called while `annotationStorage` is empty, " + "please use the getData-method instead."); + } + const { + map, + transfer + } = this.annotationStorage.serializable; + return this.messageHandler.sendWithPromise("SaveDocument", { + isPureXfa: !!this._htmlForXfa, + numPages: this._numPages, + annotationStorage: map, + filename: this._fullReader?.filename ?? null + }, transfer).finally(() => { + this.annotationStorage.resetModified(); + }); + } + getPage(pageNumber) { + if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) { + return Promise.reject(new Error("Invalid page request.")); + } + const pageIndex = pageNumber - 1, + cachedPromise = this.#pagePromises.get(pageIndex); + if (cachedPromise) { + return cachedPromise; + } + const promise = this.messageHandler.sendWithPromise("GetPage", { + pageIndex + }).then(pageInfo => { + if (this.destroyed) { + throw new Error("Transport destroyed"); + } + const page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.pdfBug); + this.#pageCache.set(pageIndex, page); + return page; + }); + this.#pagePromises.set(pageIndex, promise); + return promise; + } + getPageIndex(ref) { + if (typeof ref !== "object" || ref === null || !Number.isInteger(ref.num) || ref.num < 0 || !Number.isInteger(ref.gen) || ref.gen < 0) { + return Promise.reject(new Error("Invalid pageIndex request.")); + } + return this.messageHandler.sendWithPromise("GetPageIndex", { + num: ref.num, + gen: ref.gen + }); + } + getAnnotations(pageIndex, intent) { + return this.messageHandler.sendWithPromise("GetAnnotations", { + pageIndex, + intent + }); + } + getFieldObjects() { + return this.#cacheSimpleMethod("GetFieldObjects"); + } + hasJSActions() { + return this.#cacheSimpleMethod("HasJSActions"); + } + getCalculationOrderIds() { + return this.messageHandler.sendWithPromise("GetCalculationOrderIds", null); + } + getDestinations() { + return this.messageHandler.sendWithPromise("GetDestinations", null); + } + getDestination(id) { + if (typeof id !== "string") { + return Promise.reject(new Error("Invalid destination request.")); + } + return this.messageHandler.sendWithPromise("GetDestination", { + id + }); + } + getPageLabels() { + return this.messageHandler.sendWithPromise("GetPageLabels", null); + } + getPageLayout() { + return this.messageHandler.sendWithPromise("GetPageLayout", null); + } + getPageMode() { + return this.messageHandler.sendWithPromise("GetPageMode", null); + } + getViewerPreferences() { + return this.messageHandler.sendWithPromise("GetViewerPreferences", null); + } + getOpenAction() { + return this.messageHandler.sendWithPromise("GetOpenAction", null); + } + getAttachments() { + return this.messageHandler.sendWithPromise("GetAttachments", null); + } + getDocJSActions() { + return this.#cacheSimpleMethod("GetDocJSActions"); + } + getPageJSActions(pageIndex) { + return this.messageHandler.sendWithPromise("GetPageJSActions", { + pageIndex + }); + } + getStructTree(pageIndex) { + return this.messageHandler.sendWithPromise("GetStructTree", { + pageIndex + }); + } + getOutline() { + return this.messageHandler.sendWithPromise("GetOutline", null); + } + getOptionalContentConfig() { + return this.messageHandler.sendWithPromise("GetOptionalContentConfig", null).then(results => { + return new _optional_content_config_js__WEBPACK_IMPORTED_MODULE_9__.OptionalContentConfig(results); + }); + } + getPermissions() { + return this.messageHandler.sendWithPromise("GetPermissions", null); + } + getMetadata() { + const name = "GetMetadata", + cachedPromise = this.#methodPromises.get(name); + if (cachedPromise) { + return cachedPromise; + } + const promise = this.messageHandler.sendWithPromise(name, null).then(results => { + return { + info: results[0], + metadata: results[1] ? new _metadata_js__WEBPACK_IMPORTED_MODULE_8__.Metadata(results[1]) : null, + contentDispositionFilename: this._fullReader?.filename ?? null, + contentLength: this._fullReader?.contentLength ?? null + }; + }); + this.#methodPromises.set(name, promise); + return promise; + } + getMarkInfo() { + return this.messageHandler.sendWithPromise("GetMarkInfo", null); + } + async startCleanup(keepLoadedFonts = false) { + if (this.destroyed) { + return; + } + await this.messageHandler.sendWithPromise("Cleanup", null); + for (const page of this.#pageCache.values()) { + const cleanupSuccessful = page.cleanup(); + if (!cleanupSuccessful) { + throw new Error(`startCleanup: Page ${page.pageNumber} is currently rendering.`); + } + } + this.commonObjs.clear(); + if (!keepLoadedFonts) { + this.fontLoader.clear(); + } + this.#methodPromises.clear(); + this.filterFactory.destroy(true); + } + get loadingParams() { + const { + disableAutoFetch, + enableXfa + } = this._params; + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "loadingParams", { + disableAutoFetch, + enableXfa + }); + } +} +class PDFObjects { + #objs = Object.create(null); + #ensureObj(objId) { + return this.#objs[objId] ||= { + capability: new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(), + data: null + }; + } + get(objId, callback = null) { + if (callback) { + const obj = this.#ensureObj(objId); + obj.capability.promise.then(() => callback(obj.data)); + return null; + } + const obj = this.#objs[objId]; + if (!obj?.capability.settled) { + throw new Error(`Requesting object that isn't resolved yet ${objId}.`); + } + return obj.data; + } + has(objId) { + const obj = this.#objs[objId]; + return obj?.capability.settled || false; + } + resolve(objId, data = null) { + const obj = this.#ensureObj(objId); + obj.data = data; + obj.capability.resolve(); + } + clear() { + for (const objId in this.#objs) { + const { + data + } = this.#objs[objId]; + data?.bitmap?.close(); + } + this.#objs = Object.create(null); + } +} +class RenderTask { + #internalRenderTask = null; + constructor(internalRenderTask) { + this.#internalRenderTask = internalRenderTask; + this.onContinue = null; + } + get promise() { + return this.#internalRenderTask.capability.promise; + } + cancel(extraDelay = 0) { + this.#internalRenderTask.cancel(null, extraDelay); + } + get separateAnnots() { + const { + separateAnnots + } = this.#internalRenderTask.operatorList; + if (!separateAnnots) { + return false; + } + const { + annotationCanvasMap + } = this.#internalRenderTask; + return separateAnnots.form || separateAnnots.canvas && annotationCanvasMap?.size > 0; + } +} +class InternalRenderTask { + static #canvasInUse = new WeakSet(); + constructor({ + callback, + params, + objs, + commonObjs, + annotationCanvasMap, + operatorList, + pageIndex, + canvasFactory, + filterFactory, + useRequestAnimationFrame = false, + pdfBug = false, + pageColors = null + }) { + this.callback = callback; + this.params = params; + this.objs = objs; + this.commonObjs = commonObjs; + this.annotationCanvasMap = annotationCanvasMap; + this.operatorListIdx = null; + this.operatorList = operatorList; + this._pageIndex = pageIndex; + this.canvasFactory = canvasFactory; + this.filterFactory = filterFactory; + this._pdfBug = pdfBug; + this.pageColors = pageColors; + this.running = false; + this.graphicsReadyCallback = null; + this.graphicsReady = false; + this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== "undefined"; + this.cancelled = false; + this.capability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this.task = new RenderTask(this); + this._cancelBound = this.cancel.bind(this); + this._continueBound = this._continue.bind(this); + this._scheduleNextBound = this._scheduleNext.bind(this); + this._nextBound = this._next.bind(this); + this._canvas = params.canvasContext.canvas; + } + get completed() { + return this.capability.promise.catch(function () {}); + } + initializeGraphics({ + transparency = false, + optionalContentConfig + }) { + if (this.cancelled) { + return; + } + if (this._canvas) { + if (InternalRenderTask.#canvasInUse.has(this._canvas)) { + throw new Error("Cannot use the same canvas during multiple render() operations. " + "Use different canvas or ensure previous operations were " + "cancelled or completed."); + } + InternalRenderTask.#canvasInUse.add(this._canvas); + } + if (this._pdfBug && globalThis.StepperManager?.enabled) { + this.stepper = globalThis.StepperManager.create(this._pageIndex); + this.stepper.init(this.operatorList); + this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint(); + } + const { + canvasContext, + viewport, + transform, + background + } = this.params; + this.gfx = new _canvas_js__WEBPACK_IMPORTED_MODULE_5__.CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, { + optionalContentConfig + }, this.annotationCanvasMap, this.pageColors); + this.gfx.beginDrawing({ + transform, + viewport, + transparency, + background + }); + this.operatorListIdx = 0; + this.graphicsReady = true; + this.graphicsReadyCallback?.(); + } + cancel(error = null, extraDelay = 0) { + this.running = false; + this.cancelled = true; + this.gfx?.endDrawing(); + InternalRenderTask.#canvasInUse.delete(this._canvas); + this.callback(error || new _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex + 1}`, extraDelay)); + } + operatorListChanged() { + if (!this.graphicsReady) { + this.graphicsReadyCallback ||= this._continueBound; + return; + } + this.stepper?.updateOperatorList(this.operatorList); + if (this.running) { + return; + } + this._continue(); + } + _continue() { + this.running = true; + if (this.cancelled) { + return; + } + if (this.task.onContinue) { + this.task.onContinue(this._scheduleNextBound); + } else { + this._scheduleNext(); + } + } + _scheduleNext() { + if (this._useRequestAnimationFrame) { + window.requestAnimationFrame(() => { + this._nextBound().catch(this._cancelBound); + }); + } else { + Promise.resolve().then(this._nextBound).catch(this._cancelBound); + } + } + async _next() { + if (this.cancelled) { + return; + } + this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper); + if (this.operatorListIdx === this.operatorList.argsArray.length) { + this.running = false; + if (this.operatorList.lastChunk) { + this.gfx.endDrawing(); + InternalRenderTask.#canvasInUse.delete(this._canvas); + this.callback(); + } + } + } +} +const version = '4.0.189'; +const build = '50f52b43a'; + +__webpack_async_result__(); +} catch(e) { __webpack_async_result__(e); } }); + +/***/ }), + +/***/ 822: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ BaseCMapReaderFactory: () => (/* binding */ BaseCMapReaderFactory), +/* harmony export */ BaseCanvasFactory: () => (/* binding */ BaseCanvasFactory), +/* harmony export */ BaseFilterFactory: () => (/* binding */ BaseFilterFactory), +/* harmony export */ BaseSVGFactory: () => (/* binding */ BaseSVGFactory), +/* harmony export */ BaseStandardFontDataFactory: () => (/* binding */ BaseStandardFontDataFactory) +/* harmony export */ }); +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); + +class BaseFilterFactory { + constructor() { + if (this.constructor === BaseFilterFactory) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Cannot initialize BaseFilterFactory."); + } + } + addFilter(maps) { + return "none"; + } + addHCMFilter(fgColor, bgColor) { + return "none"; + } + addHighlightHCMFilter(fgColor, bgColor, newFgColor, newBgColor) { + return "none"; + } + destroy(keepHCM = false) {} +} +class BaseCanvasFactory { + constructor() { + if (this.constructor === BaseCanvasFactory) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Cannot initialize BaseCanvasFactory."); + } + } + create(width, height) { + if (width <= 0 || height <= 0) { + throw new Error("Invalid canvas size"); + } + const canvas = this._createCanvas(width, height); + return { + canvas, + context: canvas.getContext("2d") + }; + } + reset(canvasAndContext, width, height) { + if (!canvasAndContext.canvas) { + throw new Error("Canvas is not specified"); + } + if (width <= 0 || height <= 0) { + throw new Error("Invalid canvas size"); + } + canvasAndContext.canvas.width = width; + canvasAndContext.canvas.height = height; + } + destroy(canvasAndContext) { + if (!canvasAndContext.canvas) { + throw new Error("Canvas is not specified"); + } + canvasAndContext.canvas.width = 0; + canvasAndContext.canvas.height = 0; + canvasAndContext.canvas = null; + canvasAndContext.context = null; + } + _createCanvas(width, height) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Abstract method `_createCanvas` called."); + } +} +class BaseCMapReaderFactory { + constructor({ + baseUrl = null, + isCompressed = true + }) { + if (this.constructor === BaseCMapReaderFactory) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Cannot initialize BaseCMapReaderFactory."); + } + this.baseUrl = baseUrl; + this.isCompressed = isCompressed; + } + async fetch({ + name + }) { + if (!this.baseUrl) { + throw new Error('The CMap "baseUrl" parameter must be specified, ensure that ' + 'the "cMapUrl" and "cMapPacked" API parameters are provided.'); + } + if (!name) { + throw new Error("CMap name must be specified."); + } + const url = this.baseUrl + name + (this.isCompressed ? ".bcmap" : ""); + const compressionType = this.isCompressed ? _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.CMapCompressionType.BINARY : _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.CMapCompressionType.NONE; + return this._fetchData(url, compressionType).catch(reason => { + throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}CMap at: ${url}`); + }); + } + _fetchData(url, compressionType) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Abstract method `_fetchData` called."); + } +} +class BaseStandardFontDataFactory { + constructor({ + baseUrl = null + }) { + if (this.constructor === BaseStandardFontDataFactory) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Cannot initialize BaseStandardFontDataFactory."); + } + this.baseUrl = baseUrl; + } + async fetch({ + filename + }) { + if (!this.baseUrl) { + throw new Error('The standard font "baseUrl" parameter must be specified, ensure that ' + 'the "standardFontDataUrl" API parameter is provided.'); + } + if (!filename) { + throw new Error("Font filename must be specified."); + } + const url = `${this.baseUrl}${filename}`; + return this._fetchData(url).catch(reason => { + throw new Error(`Unable to load font data at: ${url}`); + }); + } + _fetchData(url) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Abstract method `_fetchData` called."); + } +} +class BaseSVGFactory { + constructor() { + if (this.constructor === BaseSVGFactory) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Cannot initialize BaseSVGFactory."); + } + } + create(width, height, skipDimensions = false) { + if (width <= 0 || height <= 0) { + throw new Error("Invalid SVG dimensions"); + } + const svg = this._createSVG("svg:svg"); + svg.setAttribute("version", "1.1"); + if (!skipDimensions) { + svg.setAttribute("width", `${width}px`); + svg.setAttribute("height", `${height}px`); + } + svg.setAttribute("preserveAspectRatio", "none"); + svg.setAttribute("viewBox", `0 0 ${width} ${height}`); + return svg; + } + createElement(type) { + if (typeof type !== "string") { + throw new Error("Invalid SVG element type"); + } + return this._createSVG(type); + } + _createSVG(type) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Abstract method `_createSVG` called."); + } +} + + +/***/ }), + +/***/ 250: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + CanvasGraphics: () => (/* binding */ CanvasGraphics) +}); + +// EXTERNAL MODULE: ./src/shared/util.js +var util = __webpack_require__(266); +// EXTERNAL MODULE: ./src/display/display_utils.js +var display_utils = __webpack_require__(473); +;// CONCATENATED MODULE: ./src/display/pattern_helper.js + + +const PathType = { + FILL: "Fill", + STROKE: "Stroke", + SHADING: "Shading" +}; +function applyBoundingBox(ctx, bbox) { + if (!bbox) { + return; + } + const width = bbox[2] - bbox[0]; + const height = bbox[3] - bbox[1]; + const region = new Path2D(); + region.rect(bbox[0], bbox[1], width, height); + ctx.clip(region); +} +class BaseShadingPattern { + constructor() { + if (this.constructor === BaseShadingPattern) { + (0,util.unreachable)("Cannot initialize BaseShadingPattern."); + } + } + getPattern() { + (0,util.unreachable)("Abstract method `getPattern` called."); + } +} +class RadialAxialShadingPattern extends BaseShadingPattern { + constructor(IR) { + super(); + this._type = IR[1]; + this._bbox = IR[2]; + this._colorStops = IR[3]; + this._p0 = IR[4]; + this._p1 = IR[5]; + this._r0 = IR[6]; + this._r1 = IR[7]; + this.matrix = null; + } + _createGradient(ctx) { + let grad; + if (this._type === "axial") { + grad = ctx.createLinearGradient(this._p0[0], this._p0[1], this._p1[0], this._p1[1]); + } else if (this._type === "radial") { + grad = ctx.createRadialGradient(this._p0[0], this._p0[1], this._r0, this._p1[0], this._p1[1], this._r1); + } + for (const colorStop of this._colorStops) { + grad.addColorStop(colorStop[0], colorStop[1]); + } + return grad; + } + getPattern(ctx, owner, inverse, pathType) { + let pattern; + if (pathType === PathType.STROKE || pathType === PathType.FILL) { + const ownerBBox = owner.current.getClippedPathBoundingBox(pathType, (0,display_utils.getCurrentTransform)(ctx)) || [0, 0, 0, 0]; + const width = Math.ceil(ownerBBox[2] - ownerBBox[0]) || 1; + const height = Math.ceil(ownerBBox[3] - ownerBBox[1]) || 1; + const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", width, height, true); + const tmpCtx = tmpCanvas.context; + tmpCtx.clearRect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height); + tmpCtx.beginPath(); + tmpCtx.rect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height); + tmpCtx.translate(-ownerBBox[0], -ownerBBox[1]); + inverse = util.Util.transform(inverse, [1, 0, 0, 1, ownerBBox[0], ownerBBox[1]]); + tmpCtx.transform(...owner.baseTransform); + if (this.matrix) { + tmpCtx.transform(...this.matrix); + } + applyBoundingBox(tmpCtx, this._bbox); + tmpCtx.fillStyle = this._createGradient(tmpCtx); + tmpCtx.fill(); + pattern = ctx.createPattern(tmpCanvas.canvas, "no-repeat"); + const domMatrix = new DOMMatrix(inverse); + pattern.setTransform(domMatrix); + } else { + applyBoundingBox(ctx, this._bbox); + pattern = this._createGradient(ctx); + } + return pattern; + } +} +function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) { + const coords = context.coords, + colors = context.colors; + const bytes = data.data, + rowSize = data.width * 4; + let tmp; + if (coords[p1 + 1] > coords[p2 + 1]) { + tmp = p1; + p1 = p2; + p2 = tmp; + tmp = c1; + c1 = c2; + c2 = tmp; + } + if (coords[p2 + 1] > coords[p3 + 1]) { + tmp = p2; + p2 = p3; + p3 = tmp; + tmp = c2; + c2 = c3; + c3 = tmp; + } + if (coords[p1 + 1] > coords[p2 + 1]) { + tmp = p1; + p1 = p2; + p2 = tmp; + tmp = c1; + c1 = c2; + c2 = tmp; + } + const x1 = (coords[p1] + context.offsetX) * context.scaleX; + const y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY; + const x2 = (coords[p2] + context.offsetX) * context.scaleX; + const y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY; + const x3 = (coords[p3] + context.offsetX) * context.scaleX; + const y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY; + if (y1 >= y3) { + return; + } + const c1r = colors[c1], + c1g = colors[c1 + 1], + c1b = colors[c1 + 2]; + const c2r = colors[c2], + c2g = colors[c2 + 1], + c2b = colors[c2 + 2]; + const c3r = colors[c3], + c3g = colors[c3 + 1], + c3b = colors[c3 + 2]; + const minY = Math.round(y1), + maxY = Math.round(y3); + let xa, car, cag, cab; + let xb, cbr, cbg, cbb; + for (let y = minY; y <= maxY; y++) { + if (y < y2) { + const k = y < y1 ? 0 : (y1 - y) / (y1 - y2); + xa = x1 - (x1 - x2) * k; + car = c1r - (c1r - c2r) * k; + cag = c1g - (c1g - c2g) * k; + cab = c1b - (c1b - c2b) * k; + } else { + let k; + if (y > y3) { + k = 1; + } else if (y2 === y3) { + k = 0; + } else { + k = (y2 - y) / (y2 - y3); + } + xa = x2 - (x2 - x3) * k; + car = c2r - (c2r - c3r) * k; + cag = c2g - (c2g - c3g) * k; + cab = c2b - (c2b - c3b) * k; + } + let k; + if (y < y1) { + k = 0; + } else if (y > y3) { + k = 1; + } else { + k = (y1 - y) / (y1 - y3); + } + xb = x1 - (x1 - x3) * k; + cbr = c1r - (c1r - c3r) * k; + cbg = c1g - (c1g - c3g) * k; + cbb = c1b - (c1b - c3b) * k; + const x1_ = Math.round(Math.min(xa, xb)); + const x2_ = Math.round(Math.max(xa, xb)); + let j = rowSize * y + x1_ * 4; + for (let x = x1_; x <= x2_; x++) { + k = (xa - x) / (xa - xb); + if (k < 0) { + k = 0; + } else if (k > 1) { + k = 1; + } + bytes[j++] = car - (car - cbr) * k | 0; + bytes[j++] = cag - (cag - cbg) * k | 0; + bytes[j++] = cab - (cab - cbb) * k | 0; + bytes[j++] = 255; + } + } +} +function drawFigure(data, figure, context) { + const ps = figure.coords; + const cs = figure.colors; + let i, ii; + switch (figure.type) { + case "lattice": + const verticesPerRow = figure.verticesPerRow; + const rows = Math.floor(ps.length / verticesPerRow) - 1; + const cols = verticesPerRow - 1; + for (i = 0; i < rows; i++) { + let q = i * verticesPerRow; + for (let j = 0; j < cols; j++, q++) { + drawTriangle(data, context, ps[q], ps[q + 1], ps[q + verticesPerRow], cs[q], cs[q + 1], cs[q + verticesPerRow]); + drawTriangle(data, context, ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow], cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]); + } + } + break; + case "triangles": + for (i = 0, ii = ps.length; i < ii; i += 3) { + drawTriangle(data, context, ps[i], ps[i + 1], ps[i + 2], cs[i], cs[i + 1], cs[i + 2]); + } + break; + default: + throw new Error("illegal figure"); + } +} +class MeshShadingPattern extends BaseShadingPattern { + constructor(IR) { + super(); + this._coords = IR[2]; + this._colors = IR[3]; + this._figures = IR[4]; + this._bounds = IR[5]; + this._bbox = IR[7]; + this._background = IR[8]; + this.matrix = null; + } + _createMeshCanvas(combinedScale, backgroundColor, cachedCanvases) { + const EXPECTED_SCALE = 1.1; + const MAX_PATTERN_SIZE = 3000; + const BORDER_SIZE = 2; + const offsetX = Math.floor(this._bounds[0]); + const offsetY = Math.floor(this._bounds[1]); + const boundsWidth = Math.ceil(this._bounds[2]) - offsetX; + const boundsHeight = Math.ceil(this._bounds[3]) - offsetY; + const width = Math.min(Math.ceil(Math.abs(boundsWidth * combinedScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); + const height = Math.min(Math.ceil(Math.abs(boundsHeight * combinedScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); + const scaleX = boundsWidth / width; + const scaleY = boundsHeight / height; + const context = { + coords: this._coords, + colors: this._colors, + offsetX: -offsetX, + offsetY: -offsetY, + scaleX: 1 / scaleX, + scaleY: 1 / scaleY + }; + const paddedWidth = width + BORDER_SIZE * 2; + const paddedHeight = height + BORDER_SIZE * 2; + const tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight, false); + const tmpCtx = tmpCanvas.context; + const data = tmpCtx.createImageData(width, height); + if (backgroundColor) { + const bytes = data.data; + for (let i = 0, ii = bytes.length; i < ii; i += 4) { + bytes[i] = backgroundColor[0]; + bytes[i + 1] = backgroundColor[1]; + bytes[i + 2] = backgroundColor[2]; + bytes[i + 3] = 255; + } + } + for (const figure of this._figures) { + drawFigure(data, figure, context); + } + tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE); + const canvas = tmpCanvas.canvas; + return { + canvas, + offsetX: offsetX - BORDER_SIZE * scaleX, + offsetY: offsetY - BORDER_SIZE * scaleY, + scaleX, + scaleY + }; + } + getPattern(ctx, owner, inverse, pathType) { + applyBoundingBox(ctx, this._bbox); + let scale; + if (pathType === PathType.SHADING) { + scale = util.Util.singularValueDecompose2dScale((0,display_utils.getCurrentTransform)(ctx)); + } else { + scale = util.Util.singularValueDecompose2dScale(owner.baseTransform); + if (this.matrix) { + const matrixScale = util.Util.singularValueDecompose2dScale(this.matrix); + scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]]; + } + } + const temporaryPatternCanvas = this._createMeshCanvas(scale, pathType === PathType.SHADING ? null : this._background, owner.cachedCanvases); + if (pathType !== PathType.SHADING) { + ctx.setTransform(...owner.baseTransform); + if (this.matrix) { + ctx.transform(...this.matrix); + } + } + ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY); + ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY); + return ctx.createPattern(temporaryPatternCanvas.canvas, "no-repeat"); + } +} +class DummyShadingPattern extends BaseShadingPattern { + getPattern() { + return "hotpink"; + } +} +function getShadingPattern(IR) { + switch (IR[0]) { + case "RadialAxial": + return new RadialAxialShadingPattern(IR); + case "Mesh": + return new MeshShadingPattern(IR); + case "Dummy": + return new DummyShadingPattern(); + } + throw new Error(`Unknown IR type: ${IR[0]}`); +} +const PaintType = { + COLORED: 1, + UNCOLORED: 2 +}; +class TilingPattern { + static MAX_PATTERN_SIZE = 3000; + constructor(IR, color, ctx, canvasGraphicsFactory, baseTransform) { + this.operatorList = IR[2]; + this.matrix = IR[3] || [1, 0, 0, 1, 0, 0]; + this.bbox = IR[4]; + this.xstep = IR[5]; + this.ystep = IR[6]; + this.paintType = IR[7]; + this.tilingType = IR[8]; + this.color = color; + this.ctx = ctx; + this.canvasGraphicsFactory = canvasGraphicsFactory; + this.baseTransform = baseTransform; + } + createPatternCanvas(owner) { + const operatorList = this.operatorList; + const bbox = this.bbox; + const xstep = this.xstep; + const ystep = this.ystep; + const paintType = this.paintType; + const tilingType = this.tilingType; + const color = this.color; + const canvasGraphicsFactory = this.canvasGraphicsFactory; + (0,util.info)("TilingType: " + tilingType); + const x0 = bbox[0], + y0 = bbox[1], + x1 = bbox[2], + y1 = bbox[3]; + const matrixScale = util.Util.singularValueDecompose2dScale(this.matrix); + const curMatrixScale = util.Util.singularValueDecompose2dScale(this.baseTransform); + const combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]]; + const dimx = this.getSizeAndScale(xstep, this.ctx.canvas.width, combinedScale[0]); + const dimy = this.getSizeAndScale(ystep, this.ctx.canvas.height, combinedScale[1]); + const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", dimx.size, dimy.size, true); + const tmpCtx = tmpCanvas.context; + const graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx); + graphics.groupLevel = owner.groupLevel; + this.setFillAndStrokeStyleToContext(graphics, paintType, color); + let adjustedX0 = x0; + let adjustedY0 = y0; + let adjustedX1 = x1; + let adjustedY1 = y1; + if (x0 < 0) { + adjustedX0 = 0; + adjustedX1 += Math.abs(x0); + } + if (y0 < 0) { + adjustedY0 = 0; + adjustedY1 += Math.abs(y0); + } + tmpCtx.translate(-(dimx.scale * adjustedX0), -(dimy.scale * adjustedY0)); + graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0); + tmpCtx.save(); + this.clipBbox(graphics, adjustedX0, adjustedY0, adjustedX1, adjustedY1); + graphics.baseTransform = (0,display_utils.getCurrentTransform)(graphics.ctx); + graphics.executeOperatorList(operatorList); + graphics.endDrawing(); + return { + canvas: tmpCanvas.canvas, + scaleX: dimx.scale, + scaleY: dimy.scale, + offsetX: adjustedX0, + offsetY: adjustedY0 + }; + } + getSizeAndScale(step, realOutputSize, scale) { + step = Math.abs(step); + const maxSize = Math.max(TilingPattern.MAX_PATTERN_SIZE, realOutputSize); + let size = Math.ceil(step * scale); + if (size >= maxSize) { + size = maxSize; + } else { + scale = size / step; + } + return { + scale, + size + }; + } + clipBbox(graphics, x0, y0, x1, y1) { + const bboxWidth = x1 - x0; + const bboxHeight = y1 - y0; + graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight); + graphics.current.updateRectMinMax((0,display_utils.getCurrentTransform)(graphics.ctx), [x0, y0, x1, y1]); + graphics.clip(); + graphics.endPath(); + } + setFillAndStrokeStyleToContext(graphics, paintType, color) { + const context = graphics.ctx, + current = graphics.current; + switch (paintType) { + case PaintType.COLORED: + const ctx = this.ctx; + context.fillStyle = ctx.fillStyle; + context.strokeStyle = ctx.strokeStyle; + current.fillColor = ctx.fillStyle; + current.strokeColor = ctx.strokeStyle; + break; + case PaintType.UNCOLORED: + const cssColor = util.Util.makeHexColor(color[0], color[1], color[2]); + context.fillStyle = cssColor; + context.strokeStyle = cssColor; + current.fillColor = cssColor; + current.strokeColor = cssColor; + break; + default: + throw new util.FormatError(`Unsupported paint type: ${paintType}`); + } + } + getPattern(ctx, owner, inverse, pathType) { + let matrix = inverse; + if (pathType !== PathType.SHADING) { + matrix = util.Util.transform(matrix, owner.baseTransform); + if (this.matrix) { + matrix = util.Util.transform(matrix, this.matrix); + } + } + const temporaryPatternCanvas = this.createPatternCanvas(owner); + let domMatrix = new DOMMatrix(matrix); + domMatrix = domMatrix.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY); + domMatrix = domMatrix.scale(1 / temporaryPatternCanvas.scaleX, 1 / temporaryPatternCanvas.scaleY); + const pattern = ctx.createPattern(temporaryPatternCanvas.canvas, "repeat"); + pattern.setTransform(domMatrix); + return pattern; + } +} + +;// CONCATENATED MODULE: ./src/shared/image_utils.js + +function convertToRGBA(params) { + switch (params.kind) { + case ImageKind.GRAYSCALE_1BPP: + return convertBlackAndWhiteToRGBA(params); + case ImageKind.RGB_24BPP: + return convertRGBToRGBA(params); + } + return null; +} +function convertBlackAndWhiteToRGBA({ + src, + srcPos = 0, + dest, + width, + height, + nonBlackColor = 0xffffffff, + inverseDecode = false +}) { + const black = util.FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff; + const [zeroMapping, oneMapping] = inverseDecode ? [nonBlackColor, black] : [black, nonBlackColor]; + const widthInSource = width >> 3; + const widthRemainder = width & 7; + const srcLength = src.length; + dest = new Uint32Array(dest.buffer); + let destPos = 0; + for (let i = 0; i < height; i++) { + for (const max = srcPos + widthInSource; srcPos < max; srcPos++) { + const elem = srcPos < srcLength ? src[srcPos] : 255; + dest[destPos++] = elem & 0b10000000 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b1000000 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b100000 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b10000 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b1000 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b100 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b10 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b1 ? oneMapping : zeroMapping; + } + if (widthRemainder === 0) { + continue; + } + const elem = srcPos < srcLength ? src[srcPos++] : 255; + for (let j = 0; j < widthRemainder; j++) { + dest[destPos++] = elem & 1 << 7 - j ? oneMapping : zeroMapping; + } + } + return { + srcPos, + destPos + }; +} +function convertRGBToRGBA({ + src, + srcPos = 0, + dest, + destPos = 0, + width, + height +}) { + let i = 0; + const len32 = src.length >> 2; + const src32 = new Uint32Array(src.buffer, srcPos, len32); + if (FeatureTest.isLittleEndian) { + for (; i < len32 - 2; i += 3, destPos += 4) { + const s1 = src32[i]; + const s2 = src32[i + 1]; + const s3 = src32[i + 2]; + dest[destPos] = s1 | 0xff000000; + dest[destPos + 1] = s1 >>> 24 | s2 << 8 | 0xff000000; + dest[destPos + 2] = s2 >>> 16 | s3 << 16 | 0xff000000; + dest[destPos + 3] = s3 >>> 8 | 0xff000000; + } + for (let j = i * 4, jj = src.length; j < jj; j += 3) { + dest[destPos++] = src[j] | src[j + 1] << 8 | src[j + 2] << 16 | 0xff000000; + } + } else { + for (; i < len32 - 2; i += 3, destPos += 4) { + const s1 = src32[i]; + const s2 = src32[i + 1]; + const s3 = src32[i + 2]; + dest[destPos] = s1 | 0xff; + dest[destPos + 1] = s1 << 24 | s2 >>> 8 | 0xff; + dest[destPos + 2] = s2 << 16 | s3 >>> 16 | 0xff; + dest[destPos + 3] = s3 << 8 | 0xff; + } + for (let j = i * 4, jj = src.length; j < jj; j += 3) { + dest[destPos++] = src[j] << 24 | src[j + 1] << 16 | src[j + 2] << 8 | 0xff; + } + } + return { + srcPos, + destPos + }; +} +function grayToRGBA(src, dest) { + if (FeatureTest.isLittleEndian) { + for (let i = 0, ii = src.length; i < ii; i++) { + dest[i] = src[i] * 0x10101 | 0xff000000; + } + } else { + for (let i = 0, ii = src.length; i < ii; i++) { + dest[i] = src[i] * 0x1010100 | 0x000000ff; + } + } +} + +;// CONCATENATED MODULE: ./src/display/canvas.js + + + + +const MIN_FONT_SIZE = 16; +const MAX_FONT_SIZE = 100; +const MAX_GROUP_SIZE = 4096; +const EXECUTION_TIME = 15; +const EXECUTION_STEPS = 10; +const MAX_SIZE_TO_COMPILE = 1000; +const FULL_CHUNK_HEIGHT = 16; +function mirrorContextOperations(ctx, destCtx) { + if (ctx._removeMirroring) { + throw new Error("Context is already forwarding operations."); + } + ctx.__originalSave = ctx.save; + ctx.__originalRestore = ctx.restore; + ctx.__originalRotate = ctx.rotate; + ctx.__originalScale = ctx.scale; + ctx.__originalTranslate = ctx.translate; + ctx.__originalTransform = ctx.transform; + ctx.__originalSetTransform = ctx.setTransform; + ctx.__originalResetTransform = ctx.resetTransform; + ctx.__originalClip = ctx.clip; + ctx.__originalMoveTo = ctx.moveTo; + ctx.__originalLineTo = ctx.lineTo; + ctx.__originalBezierCurveTo = ctx.bezierCurveTo; + ctx.__originalRect = ctx.rect; + ctx.__originalClosePath = ctx.closePath; + ctx.__originalBeginPath = ctx.beginPath; + ctx._removeMirroring = () => { + ctx.save = ctx.__originalSave; + ctx.restore = ctx.__originalRestore; + ctx.rotate = ctx.__originalRotate; + ctx.scale = ctx.__originalScale; + ctx.translate = ctx.__originalTranslate; + ctx.transform = ctx.__originalTransform; + ctx.setTransform = ctx.__originalSetTransform; + ctx.resetTransform = ctx.__originalResetTransform; + ctx.clip = ctx.__originalClip; + ctx.moveTo = ctx.__originalMoveTo; + ctx.lineTo = ctx.__originalLineTo; + ctx.bezierCurveTo = ctx.__originalBezierCurveTo; + ctx.rect = ctx.__originalRect; + ctx.closePath = ctx.__originalClosePath; + ctx.beginPath = ctx.__originalBeginPath; + delete ctx._removeMirroring; + }; + ctx.save = function ctxSave() { + destCtx.save(); + this.__originalSave(); + }; + ctx.restore = function ctxRestore() { + destCtx.restore(); + this.__originalRestore(); + }; + ctx.translate = function ctxTranslate(x, y) { + destCtx.translate(x, y); + this.__originalTranslate(x, y); + }; + ctx.scale = function ctxScale(x, y) { + destCtx.scale(x, y); + this.__originalScale(x, y); + }; + ctx.transform = function ctxTransform(a, b, c, d, e, f) { + destCtx.transform(a, b, c, d, e, f); + this.__originalTransform(a, b, c, d, e, f); + }; + ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) { + destCtx.setTransform(a, b, c, d, e, f); + this.__originalSetTransform(a, b, c, d, e, f); + }; + ctx.resetTransform = function ctxResetTransform() { + destCtx.resetTransform(); + this.__originalResetTransform(); + }; + ctx.rotate = function ctxRotate(angle) { + destCtx.rotate(angle); + this.__originalRotate(angle); + }; + ctx.clip = function ctxRotate(rule) { + destCtx.clip(rule); + this.__originalClip(rule); + }; + ctx.moveTo = function (x, y) { + destCtx.moveTo(x, y); + this.__originalMoveTo(x, y); + }; + ctx.lineTo = function (x, y) { + destCtx.lineTo(x, y); + this.__originalLineTo(x, y); + }; + ctx.bezierCurveTo = function (cp1x, cp1y, cp2x, cp2y, x, y) { + destCtx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); + this.__originalBezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); + }; + ctx.rect = function (x, y, width, height) { + destCtx.rect(x, y, width, height); + this.__originalRect(x, y, width, height); + }; + ctx.closePath = function () { + destCtx.closePath(); + this.__originalClosePath(); + }; + ctx.beginPath = function () { + destCtx.beginPath(); + this.__originalBeginPath(); + }; +} +class CachedCanvases { + constructor(canvasFactory) { + this.canvasFactory = canvasFactory; + this.cache = Object.create(null); + } + getCanvas(id, width, height) { + let canvasEntry; + if (this.cache[id] !== undefined) { + canvasEntry = this.cache[id]; + this.canvasFactory.reset(canvasEntry, width, height); + } else { + canvasEntry = this.canvasFactory.create(width, height); + this.cache[id] = canvasEntry; + } + return canvasEntry; + } + delete(id) { + delete this.cache[id]; + } + clear() { + for (const id in this.cache) { + const canvasEntry = this.cache[id]; + this.canvasFactory.destroy(canvasEntry); + delete this.cache[id]; + } + } +} +function drawImageAtIntegerCoords(ctx, srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH) { + const [a, b, c, d, tx, ty] = (0,display_utils.getCurrentTransform)(ctx); + if (b === 0 && c === 0) { + const tlX = destX * a + tx; + const rTlX = Math.round(tlX); + const tlY = destY * d + ty; + const rTlY = Math.round(tlY); + const brX = (destX + destW) * a + tx; + const rWidth = Math.abs(Math.round(brX) - rTlX) || 1; + const brY = (destY + destH) * d + ty; + const rHeight = Math.abs(Math.round(brY) - rTlY) || 1; + ctx.setTransform(Math.sign(a), 0, 0, Math.sign(d), rTlX, rTlY); + ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rWidth, rHeight); + ctx.setTransform(a, b, c, d, tx, ty); + return [rWidth, rHeight]; + } + if (a === 0 && d === 0) { + const tlX = destY * c + tx; + const rTlX = Math.round(tlX); + const tlY = destX * b + ty; + const rTlY = Math.round(tlY); + const brX = (destY + destH) * c + tx; + const rWidth = Math.abs(Math.round(brX) - rTlX) || 1; + const brY = (destX + destW) * b + ty; + const rHeight = Math.abs(Math.round(brY) - rTlY) || 1; + ctx.setTransform(0, Math.sign(b), Math.sign(c), 0, rTlX, rTlY); + ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rHeight, rWidth); + ctx.setTransform(a, b, c, d, tx, ty); + return [rHeight, rWidth]; + } + ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH); + const scaleX = Math.hypot(a, b); + const scaleY = Math.hypot(c, d); + return [scaleX * destW, scaleY * destH]; +} +function compileType3Glyph(imgData) { + const { + width, + height + } = imgData; + if (width > MAX_SIZE_TO_COMPILE || height > MAX_SIZE_TO_COMPILE) { + return null; + } + const POINT_TO_PROCESS_LIMIT = 1000; + const POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]); + const width1 = width + 1; + let points = new Uint8Array(width1 * (height + 1)); + let i, j, j0; + const lineSize = width + 7 & ~7; + let data = new Uint8Array(lineSize * height), + pos = 0; + for (const elem of imgData.data) { + let mask = 128; + while (mask > 0) { + data[pos++] = elem & mask ? 0 : 255; + mask >>= 1; + } + } + let count = 0; + pos = 0; + if (data[pos] !== 0) { + points[0] = 1; + ++count; + } + for (j = 1; j < width; j++) { + if (data[pos] !== data[pos + 1]) { + points[j] = data[pos] ? 2 : 1; + ++count; + } + pos++; + } + if (data[pos] !== 0) { + points[j] = 2; + ++count; + } + for (i = 1; i < height; i++) { + pos = i * lineSize; + j0 = i * width1; + if (data[pos - lineSize] !== data[pos]) { + points[j0] = data[pos] ? 1 : 8; + ++count; + } + let sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0); + for (j = 1; j < width; j++) { + sum = (sum >> 2) + (data[pos + 1] ? 4 : 0) + (data[pos - lineSize + 1] ? 8 : 0); + if (POINT_TYPES[sum]) { + points[j0 + j] = POINT_TYPES[sum]; + ++count; + } + pos++; + } + if (data[pos - lineSize] !== data[pos]) { + points[j0 + j] = data[pos] ? 2 : 4; + ++count; + } + if (count > POINT_TO_PROCESS_LIMIT) { + return null; + } + } + pos = lineSize * (height - 1); + j0 = i * width1; + if (data[pos] !== 0) { + points[j0] = 8; + ++count; + } + for (j = 1; j < width; j++) { + if (data[pos] !== data[pos + 1]) { + points[j0 + j] = data[pos] ? 4 : 8; + ++count; + } + pos++; + } + if (data[pos] !== 0) { + points[j0 + j] = 4; + ++count; + } + if (count > POINT_TO_PROCESS_LIMIT) { + return null; + } + const steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]); + const path = new Path2D(); + for (i = 0; count && i <= height; i++) { + let p = i * width1; + const end = p + width; + while (p < end && !points[p]) { + p++; + } + if (p === end) { + continue; + } + path.moveTo(p % width1, i); + const p0 = p; + let type = points[p]; + do { + const step = steps[type]; + do { + p += step; + } while (!points[p]); + const pp = points[p]; + if (pp !== 5 && pp !== 10) { + type = pp; + points[p] = 0; + } else { + type = pp & 0x33 * type >> 4; + points[p] &= type >> 2 | type << 2; + } + path.lineTo(p % width1, p / width1 | 0); + if (!points[p]) { + --count; + } + } while (p0 !== p); + --i; + } + data = null; + points = null; + const drawOutline = function (c) { + c.save(); + c.scale(1 / width, -1 / height); + c.translate(0, -height); + c.fill(path); + c.beginPath(); + c.restore(); + }; + return drawOutline; +} +class CanvasExtraState { + constructor(width, height) { + this.alphaIsShape = false; + this.fontSize = 0; + this.fontSizeScale = 1; + this.textMatrix = util.IDENTITY_MATRIX; + this.textMatrixScale = 1; + this.fontMatrix = util.FONT_IDENTITY_MATRIX; + this.leading = 0; + this.x = 0; + this.y = 0; + this.lineX = 0; + this.lineY = 0; + this.charSpacing = 0; + this.wordSpacing = 0; + this.textHScale = 1; + this.textRenderingMode = util.TextRenderingMode.FILL; + this.textRise = 0; + this.fillColor = "#000000"; + this.strokeColor = "#000000"; + this.patternFill = false; + this.fillAlpha = 1; + this.strokeAlpha = 1; + this.lineWidth = 1; + this.activeSMask = null; + this.transferMaps = "none"; + this.startNewPathAndClipBox([0, 0, width, height]); + } + clone() { + const clone = Object.create(this); + clone.clipBox = this.clipBox.slice(); + return clone; + } + setCurrentPoint(x, y) { + this.x = x; + this.y = y; + } + updatePathMinMax(transform, x, y) { + [x, y] = util.Util.applyTransform([x, y], transform); + this.minX = Math.min(this.minX, x); + this.minY = Math.min(this.minY, y); + this.maxX = Math.max(this.maxX, x); + this.maxY = Math.max(this.maxY, y); + } + updateRectMinMax(transform, rect) { + const p1 = util.Util.applyTransform(rect, transform); + const p2 = util.Util.applyTransform(rect.slice(2), transform); + const p3 = util.Util.applyTransform([rect[0], rect[3]], transform); + const p4 = util.Util.applyTransform([rect[2], rect[1]], transform); + this.minX = Math.min(this.minX, p1[0], p2[0], p3[0], p4[0]); + this.minY = Math.min(this.minY, p1[1], p2[1], p3[1], p4[1]); + this.maxX = Math.max(this.maxX, p1[0], p2[0], p3[0], p4[0]); + this.maxY = Math.max(this.maxY, p1[1], p2[1], p3[1], p4[1]); + } + updateScalingPathMinMax(transform, minMax) { + util.Util.scaleMinMax(transform, minMax); + this.minX = Math.min(this.minX, minMax[0]); + this.maxX = Math.max(this.maxX, minMax[1]); + this.minY = Math.min(this.minY, minMax[2]); + this.maxY = Math.max(this.maxY, minMax[3]); + } + updateCurvePathMinMax(transform, x0, y0, x1, y1, x2, y2, x3, y3, minMax) { + const box = util.Util.bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3); + if (minMax) { + minMax[0] = Math.min(minMax[0], box[0], box[2]); + minMax[1] = Math.max(minMax[1], box[0], box[2]); + minMax[2] = Math.min(minMax[2], box[1], box[3]); + minMax[3] = Math.max(minMax[3], box[1], box[3]); + return; + } + this.updateRectMinMax(transform, box); + } + getPathBoundingBox(pathType = PathType.FILL, transform = null) { + const box = [this.minX, this.minY, this.maxX, this.maxY]; + if (pathType === PathType.STROKE) { + if (!transform) { + (0,util.unreachable)("Stroke bounding box must include transform."); + } + const scale = util.Util.singularValueDecompose2dScale(transform); + const xStrokePad = scale[0] * this.lineWidth / 2; + const yStrokePad = scale[1] * this.lineWidth / 2; + box[0] -= xStrokePad; + box[1] -= yStrokePad; + box[2] += xStrokePad; + box[3] += yStrokePad; + } + return box; + } + updateClipFromPath() { + const intersect = util.Util.intersect(this.clipBox, this.getPathBoundingBox()); + this.startNewPathAndClipBox(intersect || [0, 0, 0, 0]); + } + isEmptyClip() { + return this.minX === Infinity; + } + startNewPathAndClipBox(box) { + this.clipBox = box; + this.minX = Infinity; + this.minY = Infinity; + this.maxX = 0; + this.maxY = 0; + } + getClippedPathBoundingBox(pathType = PathType.FILL, transform = null) { + return util.Util.intersect(this.clipBox, this.getPathBoundingBox(pathType, transform)); + } +} +function putBinaryImageData(ctx, imgData) { + if (typeof ImageData !== "undefined" && imgData instanceof ImageData) { + ctx.putImageData(imgData, 0, 0); + return; + } + const height = imgData.height, + width = imgData.width; + const partialChunkHeight = height % FULL_CHUNK_HEIGHT; + const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; + const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; + const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); + let srcPos = 0, + destPos; + const src = imgData.data; + const dest = chunkImgData.data; + let i, j, thisChunkHeight, elemsInThisChunk; + if (imgData.kind === util.ImageKind.GRAYSCALE_1BPP) { + const srcLength = src.byteLength; + const dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2); + const dest32DataLength = dest32.length; + const fullSrcDiff = width + 7 >> 3; + const white = 0xffffffff; + const black = util.FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff; + for (i = 0; i < totalChunks; i++) { + thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; + destPos = 0; + for (j = 0; j < thisChunkHeight; j++) { + const srcDiff = srcLength - srcPos; + let k = 0; + const kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7; + const kEndUnrolled = kEnd & ~7; + let mask = 0; + let srcByte = 0; + for (; k < kEndUnrolled; k += 8) { + srcByte = src[srcPos++]; + dest32[destPos++] = srcByte & 128 ? white : black; + dest32[destPos++] = srcByte & 64 ? white : black; + dest32[destPos++] = srcByte & 32 ? white : black; + dest32[destPos++] = srcByte & 16 ? white : black; + dest32[destPos++] = srcByte & 8 ? white : black; + dest32[destPos++] = srcByte & 4 ? white : black; + dest32[destPos++] = srcByte & 2 ? white : black; + dest32[destPos++] = srcByte & 1 ? white : black; + } + for (; k < kEnd; k++) { + if (mask === 0) { + srcByte = src[srcPos++]; + mask = 128; + } + dest32[destPos++] = srcByte & mask ? white : black; + mask >>= 1; + } + } + while (destPos < dest32DataLength) { + dest32[destPos++] = 0; + } + ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); + } + } else if (imgData.kind === util.ImageKind.RGBA_32BPP) { + j = 0; + elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4; + for (i = 0; i < fullChunks; i++) { + dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); + srcPos += elemsInThisChunk; + ctx.putImageData(chunkImgData, 0, j); + j += FULL_CHUNK_HEIGHT; + } + if (i < totalChunks) { + elemsInThisChunk = width * partialChunkHeight * 4; + dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); + ctx.putImageData(chunkImgData, 0, j); + } + } else if (imgData.kind === util.ImageKind.RGB_24BPP) { + thisChunkHeight = FULL_CHUNK_HEIGHT; + elemsInThisChunk = width * thisChunkHeight; + for (i = 0; i < totalChunks; i++) { + if (i >= fullChunks) { + thisChunkHeight = partialChunkHeight; + elemsInThisChunk = width * thisChunkHeight; + } + destPos = 0; + for (j = elemsInThisChunk; j--;) { + dest[destPos++] = src[srcPos++]; + dest[destPos++] = src[srcPos++]; + dest[destPos++] = src[srcPos++]; + dest[destPos++] = 255; + } + ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); + } + } else { + throw new Error(`bad image kind: ${imgData.kind}`); + } +} +function putBinaryImageMask(ctx, imgData) { + if (imgData.bitmap) { + ctx.drawImage(imgData.bitmap, 0, 0); + return; + } + const height = imgData.height, + width = imgData.width; + const partialChunkHeight = height % FULL_CHUNK_HEIGHT; + const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; + const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; + const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); + let srcPos = 0; + const src = imgData.data; + const dest = chunkImgData.data; + for (let i = 0; i < totalChunks; i++) { + const thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; + ({ + srcPos + } = convertBlackAndWhiteToRGBA({ + src, + srcPos, + dest, + width, + height: thisChunkHeight, + nonBlackColor: 0 + })); + ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); + } +} +function copyCtxState(sourceCtx, destCtx) { + const properties = ["strokeStyle", "fillStyle", "fillRule", "globalAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "globalCompositeOperation", "font", "filter"]; + for (const property of properties) { + if (sourceCtx[property] !== undefined) { + destCtx[property] = sourceCtx[property]; + } + } + if (sourceCtx.setLineDash !== undefined) { + destCtx.setLineDash(sourceCtx.getLineDash()); + destCtx.lineDashOffset = sourceCtx.lineDashOffset; + } +} +function resetCtxToDefault(ctx) { + ctx.strokeStyle = ctx.fillStyle = "#000000"; + ctx.fillRule = "nonzero"; + ctx.globalAlpha = 1; + ctx.lineWidth = 1; + ctx.lineCap = "butt"; + ctx.lineJoin = "miter"; + ctx.miterLimit = 10; + ctx.globalCompositeOperation = "source-over"; + ctx.font = "10px sans-serif"; + if (ctx.setLineDash !== undefined) { + ctx.setLineDash([]); + ctx.lineDashOffset = 0; + } + if (!util.isNodeJS) { + const { + filter + } = ctx; + if (filter !== "none" && filter !== "") { + ctx.filter = "none"; + } + } +} +function composeSMaskBackdrop(bytes, r0, g0, b0) { + const length = bytes.length; + for (let i = 3; i < length; i += 4) { + const alpha = bytes[i]; + if (alpha === 0) { + bytes[i - 3] = r0; + bytes[i - 2] = g0; + bytes[i - 1] = b0; + } else if (alpha < 255) { + const alpha_ = 255 - alpha; + bytes[i - 3] = bytes[i - 3] * alpha + r0 * alpha_ >> 8; + bytes[i - 2] = bytes[i - 2] * alpha + g0 * alpha_ >> 8; + bytes[i - 1] = bytes[i - 1] * alpha + b0 * alpha_ >> 8; + } + } +} +function composeSMaskAlpha(maskData, layerData, transferMap) { + const length = maskData.length; + const scale = 1 / 255; + for (let i = 3; i < length; i += 4) { + const alpha = transferMap ? transferMap[maskData[i]] : maskData[i]; + layerData[i] = layerData[i] * alpha * scale | 0; + } +} +function composeSMaskLuminosity(maskData, layerData, transferMap) { + const length = maskData.length; + for (let i = 3; i < length; i += 4) { + const y = maskData[i - 3] * 77 + maskData[i - 2] * 152 + maskData[i - 1] * 28; + layerData[i] = transferMap ? layerData[i] * transferMap[y >> 8] >> 8 : layerData[i] * y >> 16; + } +} +function genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap, layerOffsetX, layerOffsetY, maskOffsetX, maskOffsetY) { + const hasBackdrop = !!backdrop; + const r0 = hasBackdrop ? backdrop[0] : 0; + const g0 = hasBackdrop ? backdrop[1] : 0; + const b0 = hasBackdrop ? backdrop[2] : 0; + const composeFn = subtype === "Luminosity" ? composeSMaskLuminosity : composeSMaskAlpha; + const PIXELS_TO_PROCESS = 1048576; + const chunkSize = Math.min(height, Math.ceil(PIXELS_TO_PROCESS / width)); + for (let row = 0; row < height; row += chunkSize) { + const chunkHeight = Math.min(chunkSize, height - row); + const maskData = maskCtx.getImageData(layerOffsetX - maskOffsetX, row + (layerOffsetY - maskOffsetY), width, chunkHeight); + const layerData = layerCtx.getImageData(layerOffsetX, row + layerOffsetY, width, chunkHeight); + if (hasBackdrop) { + composeSMaskBackdrop(maskData.data, r0, g0, b0); + } + composeFn(maskData.data, layerData.data, transferMap); + layerCtx.putImageData(layerData, layerOffsetX, row + layerOffsetY); + } +} +function composeSMask(ctx, smask, layerCtx, layerBox) { + const layerOffsetX = layerBox[0]; + const layerOffsetY = layerBox[1]; + const layerWidth = layerBox[2] - layerOffsetX; + const layerHeight = layerBox[3] - layerOffsetY; + if (layerWidth === 0 || layerHeight === 0) { + return; + } + genericComposeSMask(smask.context, layerCtx, layerWidth, layerHeight, smask.subtype, smask.backdrop, smask.transferMap, layerOffsetX, layerOffsetY, smask.offsetX, smask.offsetY); + ctx.save(); + ctx.globalAlpha = 1; + ctx.globalCompositeOperation = "source-over"; + ctx.setTransform(1, 0, 0, 1, 0, 0); + ctx.drawImage(layerCtx.canvas, 0, 0); + ctx.restore(); +} +function getImageSmoothingEnabled(transform, interpolate) { + const scale = util.Util.singularValueDecompose2dScale(transform); + scale[0] = Math.fround(scale[0]); + scale[1] = Math.fround(scale[1]); + const actualScale = Math.fround((globalThis.devicePixelRatio || 1) * display_utils.PixelsPerInch.PDF_TO_CSS_UNITS); + if (interpolate !== undefined) { + return interpolate; + } else if (scale[0] <= actualScale || scale[1] <= actualScale) { + return true; + } + return false; +} +const LINE_CAP_STYLES = ["butt", "round", "square"]; +const LINE_JOIN_STYLES = ["miter", "round", "bevel"]; +const NORMAL_CLIP = {}; +const EO_CLIP = {}; +class CanvasGraphics { + constructor(canvasCtx, commonObjs, objs, canvasFactory, filterFactory, { + optionalContentConfig, + markedContentStack = null + }, annotationCanvasMap, pageColors) { + this.ctx = canvasCtx; + this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height); + this.stateStack = []; + this.pendingClip = null; + this.pendingEOFill = false; + this.res = null; + this.xobjs = null; + this.commonObjs = commonObjs; + this.objs = objs; + this.canvasFactory = canvasFactory; + this.filterFactory = filterFactory; + this.groupStack = []; + this.processingType3 = null; + this.baseTransform = null; + this.baseTransformStack = []; + this.groupLevel = 0; + this.smaskStack = []; + this.smaskCounter = 0; + this.tempSMask = null; + this.suspendedCtx = null; + this.contentVisible = true; + this.markedContentStack = markedContentStack || []; + this.optionalContentConfig = optionalContentConfig; + this.cachedCanvases = new CachedCanvases(this.canvasFactory); + this.cachedPatterns = new Map(); + this.annotationCanvasMap = annotationCanvasMap; + this.viewportScale = 1; + this.outputScaleX = 1; + this.outputScaleY = 1; + this.pageColors = pageColors; + this._cachedScaleForStroking = [-1, 0]; + this._cachedGetSinglePixelWidth = null; + this._cachedBitmapsMap = new Map(); + } + getObject(data, fallback = null) { + if (typeof data === "string") { + return data.startsWith("g_") ? this.commonObjs.get(data) : this.objs.get(data); + } + return fallback; + } + beginDrawing({ + transform, + viewport, + transparency = false, + background = null + }) { + const width = this.ctx.canvas.width; + const height = this.ctx.canvas.height; + const savedFillStyle = this.ctx.fillStyle; + this.ctx.fillStyle = background || "#ffffff"; + this.ctx.fillRect(0, 0, width, height); + this.ctx.fillStyle = savedFillStyle; + if (transparency) { + const transparentCanvas = this.cachedCanvases.getCanvas("transparent", width, height); + this.compositeCtx = this.ctx; + this.transparentCanvas = transparentCanvas.canvas; + this.ctx = transparentCanvas.context; + this.ctx.save(); + this.ctx.transform(...(0,display_utils.getCurrentTransform)(this.compositeCtx)); + } + this.ctx.save(); + resetCtxToDefault(this.ctx); + if (transform) { + this.ctx.transform(...transform); + this.outputScaleX = transform[0]; + this.outputScaleY = transform[0]; + } + this.ctx.transform(...viewport.transform); + this.viewportScale = viewport.scale; + this.baseTransform = (0,display_utils.getCurrentTransform)(this.ctx); + } + executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) { + const argsArray = operatorList.argsArray; + const fnArray = operatorList.fnArray; + let i = executionStartIdx || 0; + const argsArrayLen = argsArray.length; + if (argsArrayLen === i) { + return i; + } + const chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === "function"; + const endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0; + let steps = 0; + const commonObjs = this.commonObjs; + const objs = this.objs; + let fnId; + while (true) { + if (stepper !== undefined && i === stepper.nextBreakPoint) { + stepper.breakIt(i, continueCallback); + return i; + } + fnId = fnArray[i]; + if (fnId !== util.OPS.dependency) { + this[fnId].apply(this, argsArray[i]); + } else { + for (const depObjId of argsArray[i]) { + const objsPool = depObjId.startsWith("g_") ? commonObjs : objs; + if (!objsPool.has(depObjId)) { + objsPool.get(depObjId, continueCallback); + return i; + } + } + } + i++; + if (i === argsArrayLen) { + return i; + } + if (chunkOperations && ++steps > EXECUTION_STEPS) { + if (Date.now() > endTime) { + continueCallback(); + return i; + } + steps = 0; + } + } + } + #restoreInitialState() { + while (this.stateStack.length || this.inSMaskMode) { + this.restore(); + } + this.ctx.restore(); + if (this.transparentCanvas) { + this.ctx = this.compositeCtx; + this.ctx.save(); + this.ctx.setTransform(1, 0, 0, 1, 0, 0); + this.ctx.drawImage(this.transparentCanvas, 0, 0); + this.ctx.restore(); + this.transparentCanvas = null; + } + } + endDrawing() { + this.#restoreInitialState(); + this.cachedCanvases.clear(); + this.cachedPatterns.clear(); + for (const cache of this._cachedBitmapsMap.values()) { + for (const canvas of cache.values()) { + if (typeof HTMLCanvasElement !== "undefined" && canvas instanceof HTMLCanvasElement) { + canvas.width = canvas.height = 0; + } + } + cache.clear(); + } + this._cachedBitmapsMap.clear(); + this.#drawFilter(); + } + #drawFilter() { + if (this.pageColors) { + const hcmFilterId = this.filterFactory.addHCMFilter(this.pageColors.foreground, this.pageColors.background); + if (hcmFilterId !== "none") { + const savedFilter = this.ctx.filter; + this.ctx.filter = hcmFilterId; + this.ctx.drawImage(this.ctx.canvas, 0, 0); + this.ctx.filter = savedFilter; + } + } + } + _scaleImage(img, inverseTransform) { + const width = img.width; + const height = img.height; + let widthScale = Math.max(Math.hypot(inverseTransform[0], inverseTransform[1]), 1); + let heightScale = Math.max(Math.hypot(inverseTransform[2], inverseTransform[3]), 1); + let paintWidth = width, + paintHeight = height; + let tmpCanvasId = "prescale1"; + let tmpCanvas, tmpCtx; + while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) { + let newWidth = paintWidth, + newHeight = paintHeight; + if (widthScale > 2 && paintWidth > 1) { + newWidth = paintWidth >= 16384 ? Math.floor(paintWidth / 2) - 1 || 1 : Math.ceil(paintWidth / 2); + widthScale /= paintWidth / newWidth; + } + if (heightScale > 2 && paintHeight > 1) { + newHeight = paintHeight >= 16384 ? Math.floor(paintHeight / 2) - 1 || 1 : Math.ceil(paintHeight) / 2; + heightScale /= paintHeight / newHeight; + } + tmpCanvas = this.cachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight); + tmpCtx = tmpCanvas.context; + tmpCtx.clearRect(0, 0, newWidth, newHeight); + tmpCtx.drawImage(img, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight); + img = tmpCanvas.canvas; + paintWidth = newWidth; + paintHeight = newHeight; + tmpCanvasId = tmpCanvasId === "prescale1" ? "prescale2" : "prescale1"; + } + return { + img, + paintWidth, + paintHeight + }; + } + _createMaskCanvas(img) { + const ctx = this.ctx; + const { + width, + height + } = img; + const fillColor = this.current.fillColor; + const isPatternFill = this.current.patternFill; + const currentTransform = (0,display_utils.getCurrentTransform)(ctx); + let cache, cacheKey, scaled, maskCanvas; + if ((img.bitmap || img.data) && img.count > 1) { + const mainKey = img.bitmap || img.data.buffer; + cacheKey = JSON.stringify(isPatternFill ? currentTransform : [currentTransform.slice(0, 4), fillColor]); + cache = this._cachedBitmapsMap.get(mainKey); + if (!cache) { + cache = new Map(); + this._cachedBitmapsMap.set(mainKey, cache); + } + const cachedImage = cache.get(cacheKey); + if (cachedImage && !isPatternFill) { + const offsetX = Math.round(Math.min(currentTransform[0], currentTransform[2]) + currentTransform[4]); + const offsetY = Math.round(Math.min(currentTransform[1], currentTransform[3]) + currentTransform[5]); + return { + canvas: cachedImage, + offsetX, + offsetY + }; + } + scaled = cachedImage; + } + if (!scaled) { + maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); + putBinaryImageMask(maskCanvas.context, img); + } + let maskToCanvas = util.Util.transform(currentTransform, [1 / width, 0, 0, -1 / height, 0, 0]); + maskToCanvas = util.Util.transform(maskToCanvas, [1, 0, 0, 1, 0, -height]); + const [minX, minY, maxX, maxY] = util.Util.getAxialAlignedBoundingBox([0, 0, width, height], maskToCanvas); + const drawnWidth = Math.round(maxX - minX) || 1; + const drawnHeight = Math.round(maxY - minY) || 1; + const fillCanvas = this.cachedCanvases.getCanvas("fillCanvas", drawnWidth, drawnHeight); + const fillCtx = fillCanvas.context; + const offsetX = minX; + const offsetY = minY; + fillCtx.translate(-offsetX, -offsetY); + fillCtx.transform(...maskToCanvas); + if (!scaled) { + scaled = this._scaleImage(maskCanvas.canvas, (0,display_utils.getCurrentTransformInverse)(fillCtx)); + scaled = scaled.img; + if (cache && isPatternFill) { + cache.set(cacheKey, scaled); + } + } + fillCtx.imageSmoothingEnabled = getImageSmoothingEnabled((0,display_utils.getCurrentTransform)(fillCtx), img.interpolate); + drawImageAtIntegerCoords(fillCtx, scaled, 0, 0, scaled.width, scaled.height, 0, 0, width, height); + fillCtx.globalCompositeOperation = "source-in"; + const inverse = util.Util.transform((0,display_utils.getCurrentTransformInverse)(fillCtx), [1, 0, 0, 1, -offsetX, -offsetY]); + fillCtx.fillStyle = isPatternFill ? fillColor.getPattern(ctx, this, inverse, PathType.FILL) : fillColor; + fillCtx.fillRect(0, 0, width, height); + if (cache && !isPatternFill) { + this.cachedCanvases.delete("fillCanvas"); + cache.set(cacheKey, fillCanvas.canvas); + } + return { + canvas: fillCanvas.canvas, + offsetX: Math.round(offsetX), + offsetY: Math.round(offsetY) + }; + } + setLineWidth(width) { + if (width !== this.current.lineWidth) { + this._cachedScaleForStroking[0] = -1; + } + this.current.lineWidth = width; + this.ctx.lineWidth = width; + } + setLineCap(style) { + this.ctx.lineCap = LINE_CAP_STYLES[style]; + } + setLineJoin(style) { + this.ctx.lineJoin = LINE_JOIN_STYLES[style]; + } + setMiterLimit(limit) { + this.ctx.miterLimit = limit; + } + setDash(dashArray, dashPhase) { + const ctx = this.ctx; + if (ctx.setLineDash !== undefined) { + ctx.setLineDash(dashArray); + ctx.lineDashOffset = dashPhase; + } + } + setRenderingIntent(intent) {} + setFlatness(flatness) {} + setGState(states) { + for (const [key, value] of states) { + switch (key) { + case "LW": + this.setLineWidth(value); + break; + case "LC": + this.setLineCap(value); + break; + case "LJ": + this.setLineJoin(value); + break; + case "ML": + this.setMiterLimit(value); + break; + case "D": + this.setDash(value[0], value[1]); + break; + case "RI": + this.setRenderingIntent(value); + break; + case "FL": + this.setFlatness(value); + break; + case "Font": + this.setFont(value[0], value[1]); + break; + case "CA": + this.current.strokeAlpha = value; + break; + case "ca": + this.current.fillAlpha = value; + this.ctx.globalAlpha = value; + break; + case "BM": + this.ctx.globalCompositeOperation = value; + break; + case "SMask": + this.current.activeSMask = value ? this.tempSMask : null; + this.tempSMask = null; + this.checkSMaskState(); + break; + case "TR": + this.ctx.filter = this.current.transferMaps = this.filterFactory.addFilter(value); + break; + } + } + } + get inSMaskMode() { + return !!this.suspendedCtx; + } + checkSMaskState() { + const inSMaskMode = this.inSMaskMode; + if (this.current.activeSMask && !inSMaskMode) { + this.beginSMaskMode(); + } else if (!this.current.activeSMask && inSMaskMode) { + this.endSMaskMode(); + } + } + beginSMaskMode() { + if (this.inSMaskMode) { + throw new Error("beginSMaskMode called while already in smask mode"); + } + const drawnWidth = this.ctx.canvas.width; + const drawnHeight = this.ctx.canvas.height; + const cacheId = "smaskGroupAt" + this.groupLevel; + const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight); + this.suspendedCtx = this.ctx; + this.ctx = scratchCanvas.context; + const ctx = this.ctx; + ctx.setTransform(...(0,display_utils.getCurrentTransform)(this.suspendedCtx)); + copyCtxState(this.suspendedCtx, ctx); + mirrorContextOperations(ctx, this.suspendedCtx); + this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); + } + endSMaskMode() { + if (!this.inSMaskMode) { + throw new Error("endSMaskMode called while not in smask mode"); + } + this.ctx._removeMirroring(); + copyCtxState(this.ctx, this.suspendedCtx); + this.ctx = this.suspendedCtx; + this.suspendedCtx = null; + } + compose(dirtyBox) { + if (!this.current.activeSMask) { + return; + } + if (!dirtyBox) { + dirtyBox = [0, 0, this.ctx.canvas.width, this.ctx.canvas.height]; + } else { + dirtyBox[0] = Math.floor(dirtyBox[0]); + dirtyBox[1] = Math.floor(dirtyBox[1]); + dirtyBox[2] = Math.ceil(dirtyBox[2]); + dirtyBox[3] = Math.ceil(dirtyBox[3]); + } + const smask = this.current.activeSMask; + const suspendedCtx = this.suspendedCtx; + composeSMask(suspendedCtx, smask, this.ctx, dirtyBox); + this.ctx.save(); + this.ctx.setTransform(1, 0, 0, 1, 0, 0); + this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height); + this.ctx.restore(); + } + save() { + if (this.inSMaskMode) { + copyCtxState(this.ctx, this.suspendedCtx); + this.suspendedCtx.save(); + } else { + this.ctx.save(); + } + const old = this.current; + this.stateStack.push(old); + this.current = old.clone(); + } + restore() { + if (this.stateStack.length === 0 && this.inSMaskMode) { + this.endSMaskMode(); + } + if (this.stateStack.length !== 0) { + this.current = this.stateStack.pop(); + if (this.inSMaskMode) { + this.suspendedCtx.restore(); + copyCtxState(this.suspendedCtx, this.ctx); + } else { + this.ctx.restore(); + } + this.checkSMaskState(); + this.pendingClip = null; + this._cachedScaleForStroking[0] = -1; + this._cachedGetSinglePixelWidth = null; + } + } + transform(a, b, c, d, e, f) { + this.ctx.transform(a, b, c, d, e, f); + this._cachedScaleForStroking[0] = -1; + this._cachedGetSinglePixelWidth = null; + } + constructPath(ops, args, minMax) { + const ctx = this.ctx; + const current = this.current; + let x = current.x, + y = current.y; + let startX, startY; + const currentTransform = (0,display_utils.getCurrentTransform)(ctx); + const isScalingMatrix = currentTransform[0] === 0 && currentTransform[3] === 0 || currentTransform[1] === 0 && currentTransform[2] === 0; + const minMaxForBezier = isScalingMatrix ? minMax.slice(0) : null; + for (let i = 0, j = 0, ii = ops.length; i < ii; i++) { + switch (ops[i] | 0) { + case util.OPS.rectangle: + x = args[j++]; + y = args[j++]; + const width = args[j++]; + const height = args[j++]; + const xw = x + width; + const yh = y + height; + ctx.moveTo(x, y); + if (width === 0 || height === 0) { + ctx.lineTo(xw, yh); + } else { + ctx.lineTo(xw, y); + ctx.lineTo(xw, yh); + ctx.lineTo(x, yh); + } + if (!isScalingMatrix) { + current.updateRectMinMax(currentTransform, [x, y, xw, yh]); + } + ctx.closePath(); + break; + case util.OPS.moveTo: + x = args[j++]; + y = args[j++]; + ctx.moveTo(x, y); + if (!isScalingMatrix) { + current.updatePathMinMax(currentTransform, x, y); + } + break; + case util.OPS.lineTo: + x = args[j++]; + y = args[j++]; + ctx.lineTo(x, y); + if (!isScalingMatrix) { + current.updatePathMinMax(currentTransform, x, y); + } + break; + case util.OPS.curveTo: + startX = x; + startY = y; + x = args[j + 4]; + y = args[j + 5]; + ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y); + current.updateCurvePathMinMax(currentTransform, startX, startY, args[j], args[j + 1], args[j + 2], args[j + 3], x, y, minMaxForBezier); + j += 6; + break; + case util.OPS.curveTo2: + startX = x; + startY = y; + ctx.bezierCurveTo(x, y, args[j], args[j + 1], args[j + 2], args[j + 3]); + current.updateCurvePathMinMax(currentTransform, startX, startY, x, y, args[j], args[j + 1], args[j + 2], args[j + 3], minMaxForBezier); + x = args[j + 2]; + y = args[j + 3]; + j += 4; + break; + case util.OPS.curveTo3: + startX = x; + startY = y; + x = args[j + 2]; + y = args[j + 3]; + ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y); + current.updateCurvePathMinMax(currentTransform, startX, startY, args[j], args[j + 1], x, y, x, y, minMaxForBezier); + j += 4; + break; + case util.OPS.closePath: + ctx.closePath(); + break; + } + } + if (isScalingMatrix) { + current.updateScalingPathMinMax(currentTransform, minMaxForBezier); + } + current.setCurrentPoint(x, y); + } + closePath() { + this.ctx.closePath(); + } + stroke(consumePath = true) { + const ctx = this.ctx; + const strokeColor = this.current.strokeColor; + ctx.globalAlpha = this.current.strokeAlpha; + if (this.contentVisible) { + if (typeof strokeColor === "object" && strokeColor?.getPattern) { + ctx.save(); + ctx.strokeStyle = strokeColor.getPattern(ctx, this, (0,display_utils.getCurrentTransformInverse)(ctx), PathType.STROKE); + this.rescaleAndStroke(false); + ctx.restore(); + } else { + this.rescaleAndStroke(true); + } + } + if (consumePath) { + this.consumePath(this.current.getClippedPathBoundingBox()); + } + ctx.globalAlpha = this.current.fillAlpha; + } + closeStroke() { + this.closePath(); + this.stroke(); + } + fill(consumePath = true) { + const ctx = this.ctx; + const fillColor = this.current.fillColor; + const isPatternFill = this.current.patternFill; + let needRestore = false; + if (isPatternFill) { + ctx.save(); + ctx.fillStyle = fillColor.getPattern(ctx, this, (0,display_utils.getCurrentTransformInverse)(ctx), PathType.FILL); + needRestore = true; + } + const intersect = this.current.getClippedPathBoundingBox(); + if (this.contentVisible && intersect !== null) { + if (this.pendingEOFill) { + ctx.fill("evenodd"); + this.pendingEOFill = false; + } else { + ctx.fill(); + } + } + if (needRestore) { + ctx.restore(); + } + if (consumePath) { + this.consumePath(intersect); + } + } + eoFill() { + this.pendingEOFill = true; + this.fill(); + } + fillStroke() { + this.fill(false); + this.stroke(false); + this.consumePath(); + } + eoFillStroke() { + this.pendingEOFill = true; + this.fillStroke(); + } + closeFillStroke() { + this.closePath(); + this.fillStroke(); + } + closeEOFillStroke() { + this.pendingEOFill = true; + this.closePath(); + this.fillStroke(); + } + endPath() { + this.consumePath(); + } + clip() { + this.pendingClip = NORMAL_CLIP; + } + eoClip() { + this.pendingClip = EO_CLIP; + } + beginText() { + this.current.textMatrix = util.IDENTITY_MATRIX; + this.current.textMatrixScale = 1; + this.current.x = this.current.lineX = 0; + this.current.y = this.current.lineY = 0; + } + endText() { + const paths = this.pendingTextPaths; + const ctx = this.ctx; + if (paths === undefined) { + ctx.beginPath(); + return; + } + ctx.save(); + ctx.beginPath(); + for (const path of paths) { + ctx.setTransform(...path.transform); + ctx.translate(path.x, path.y); + path.addToPath(ctx, path.fontSize); + } + ctx.restore(); + ctx.clip(); + ctx.beginPath(); + delete this.pendingTextPaths; + } + setCharSpacing(spacing) { + this.current.charSpacing = spacing; + } + setWordSpacing(spacing) { + this.current.wordSpacing = spacing; + } + setHScale(scale) { + this.current.textHScale = scale / 100; + } + setLeading(leading) { + this.current.leading = -leading; + } + setFont(fontRefName, size) { + const fontObj = this.commonObjs.get(fontRefName); + const current = this.current; + if (!fontObj) { + throw new Error(`Can't find font for ${fontRefName}`); + } + current.fontMatrix = fontObj.fontMatrix || util.FONT_IDENTITY_MATRIX; + if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) { + (0,util.warn)("Invalid font matrix for font " + fontRefName); + } + if (size < 0) { + size = -size; + current.fontDirection = -1; + } else { + current.fontDirection = 1; + } + this.current.font = fontObj; + this.current.fontSize = size; + if (fontObj.isType3Font) { + return; + } + const name = fontObj.loadedName || "sans-serif"; + const typeface = fontObj.systemFontInfo?.css || `"${name}", ${fontObj.fallbackName}`; + let bold = "normal"; + if (fontObj.black) { + bold = "900"; + } else if (fontObj.bold) { + bold = "bold"; + } + const italic = fontObj.italic ? "italic" : "normal"; + let browserFontSize = size; + if (size < MIN_FONT_SIZE) { + browserFontSize = MIN_FONT_SIZE; + } else if (size > MAX_FONT_SIZE) { + browserFontSize = MAX_FONT_SIZE; + } + this.current.fontSizeScale = size / browserFontSize; + this.ctx.font = `${italic} ${bold} ${browserFontSize}px ${typeface}`; + } + setTextRenderingMode(mode) { + this.current.textRenderingMode = mode; + } + setTextRise(rise) { + this.current.textRise = rise; + } + moveText(x, y) { + this.current.x = this.current.lineX += x; + this.current.y = this.current.lineY += y; + } + setLeadingMoveText(x, y) { + this.setLeading(-y); + this.moveText(x, y); + } + setTextMatrix(a, b, c, d, e, f) { + this.current.textMatrix = [a, b, c, d, e, f]; + this.current.textMatrixScale = Math.hypot(a, b); + this.current.x = this.current.lineX = 0; + this.current.y = this.current.lineY = 0; + } + nextLine() { + this.moveText(0, this.current.leading); + } + paintChar(character, x, y, patternTransform) { + const ctx = this.ctx; + const current = this.current; + const font = current.font; + const textRenderingMode = current.textRenderingMode; + const fontSize = current.fontSize / current.fontSizeScale; + const fillStrokeMode = textRenderingMode & util.TextRenderingMode.FILL_STROKE_MASK; + const isAddToPathSet = !!(textRenderingMode & util.TextRenderingMode.ADD_TO_PATH_FLAG); + const patternFill = current.patternFill && !font.missingFile; + let addToPath; + if (font.disableFontFace || isAddToPathSet || patternFill) { + addToPath = font.getPathGenerator(this.commonObjs, character); + } + if (font.disableFontFace || patternFill) { + ctx.save(); + ctx.translate(x, y); + ctx.beginPath(); + addToPath(ctx, fontSize); + if (patternTransform) { + ctx.setTransform(...patternTransform); + } + if (fillStrokeMode === util.TextRenderingMode.FILL || fillStrokeMode === util.TextRenderingMode.FILL_STROKE) { + ctx.fill(); + } + if (fillStrokeMode === util.TextRenderingMode.STROKE || fillStrokeMode === util.TextRenderingMode.FILL_STROKE) { + ctx.stroke(); + } + ctx.restore(); + } else { + if (fillStrokeMode === util.TextRenderingMode.FILL || fillStrokeMode === util.TextRenderingMode.FILL_STROKE) { + ctx.fillText(character, x, y); + } + if (fillStrokeMode === util.TextRenderingMode.STROKE || fillStrokeMode === util.TextRenderingMode.FILL_STROKE) { + ctx.strokeText(character, x, y); + } + } + if (isAddToPathSet) { + const paths = this.pendingTextPaths ||= []; + paths.push({ + transform: (0,display_utils.getCurrentTransform)(ctx), + x, + y, + fontSize, + addToPath + }); + } + } + get isFontSubpixelAAEnabled() { + const { + context: ctx + } = this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled", 10, 10); + ctx.scale(1.5, 1); + ctx.fillText("I", 0, 10); + const data = ctx.getImageData(0, 0, 10, 10).data; + let enabled = false; + for (let i = 3; i < data.length; i += 4) { + if (data[i] > 0 && data[i] < 255) { + enabled = true; + break; + } + } + return (0,util.shadow)(this, "isFontSubpixelAAEnabled", enabled); + } + showText(glyphs) { + const current = this.current; + const font = current.font; + if (font.isType3Font) { + return this.showType3Text(glyphs); + } + const fontSize = current.fontSize; + if (fontSize === 0) { + return undefined; + } + const ctx = this.ctx; + const fontSizeScale = current.fontSizeScale; + const charSpacing = current.charSpacing; + const wordSpacing = current.wordSpacing; + const fontDirection = current.fontDirection; + const textHScale = current.textHScale * fontDirection; + const glyphsLength = glyphs.length; + const vertical = font.vertical; + const spacingDir = vertical ? 1 : -1; + const defaultVMetrics = font.defaultVMetrics; + const widthAdvanceScale = fontSize * current.fontMatrix[0]; + const simpleFillText = current.textRenderingMode === util.TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill; + ctx.save(); + ctx.transform(...current.textMatrix); + ctx.translate(current.x, current.y + current.textRise); + if (fontDirection > 0) { + ctx.scale(textHScale, -1); + } else { + ctx.scale(textHScale, 1); + } + let patternTransform; + if (current.patternFill) { + ctx.save(); + const pattern = current.fillColor.getPattern(ctx, this, (0,display_utils.getCurrentTransformInverse)(ctx), PathType.FILL); + patternTransform = (0,display_utils.getCurrentTransform)(ctx); + ctx.restore(); + ctx.fillStyle = pattern; + } + let lineWidth = current.lineWidth; + const scale = current.textMatrixScale; + if (scale === 0 || lineWidth === 0) { + const fillStrokeMode = current.textRenderingMode & util.TextRenderingMode.FILL_STROKE_MASK; + if (fillStrokeMode === util.TextRenderingMode.STROKE || fillStrokeMode === util.TextRenderingMode.FILL_STROKE) { + lineWidth = this.getSinglePixelWidth(); + } + } else { + lineWidth /= scale; + } + if (fontSizeScale !== 1.0) { + ctx.scale(fontSizeScale, fontSizeScale); + lineWidth /= fontSizeScale; + } + ctx.lineWidth = lineWidth; + if (font.isInvalidPDFjsFont) { + const chars = []; + let width = 0; + for (const glyph of glyphs) { + chars.push(glyph.unicode); + width += glyph.width; + } + ctx.fillText(chars.join(""), 0, 0); + current.x += width * widthAdvanceScale * textHScale; + ctx.restore(); + this.compose(); + return undefined; + } + let x = 0, + i; + for (i = 0; i < glyphsLength; ++i) { + const glyph = glyphs[i]; + if (typeof glyph === "number") { + x += spacingDir * glyph * fontSize / 1000; + continue; + } + let restoreNeeded = false; + const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; + const character = glyph.fontChar; + const accent = glyph.accent; + let scaledX, scaledY; + let width = glyph.width; + if (vertical) { + const vmetric = glyph.vmetric || defaultVMetrics; + const vx = -(glyph.vmetric ? vmetric[1] : width * 0.5) * widthAdvanceScale; + const vy = vmetric[2] * widthAdvanceScale; + width = vmetric ? -vmetric[0] : width; + scaledX = vx / fontSizeScale; + scaledY = (x + vy) / fontSizeScale; + } else { + scaledX = x / fontSizeScale; + scaledY = 0; + } + if (font.remeasure && width > 0) { + const measuredWidth = ctx.measureText(character).width * 1000 / fontSize * fontSizeScale; + if (width < measuredWidth && this.isFontSubpixelAAEnabled) { + const characterScaleX = width / measuredWidth; + restoreNeeded = true; + ctx.save(); + ctx.scale(characterScaleX, 1); + scaledX /= characterScaleX; + } else if (width !== measuredWidth) { + scaledX += (width - measuredWidth) / 2000 * fontSize / fontSizeScale; + } + } + if (this.contentVisible && (glyph.isInFont || font.missingFile)) { + if (simpleFillText && !accent) { + ctx.fillText(character, scaledX, scaledY); + } else { + this.paintChar(character, scaledX, scaledY, patternTransform); + if (accent) { + const scaledAccentX = scaledX + fontSize * accent.offset.x / fontSizeScale; + const scaledAccentY = scaledY - fontSize * accent.offset.y / fontSizeScale; + this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform); + } + } + } + const charWidth = vertical ? width * widthAdvanceScale - spacing * fontDirection : width * widthAdvanceScale + spacing * fontDirection; + x += charWidth; + if (restoreNeeded) { + ctx.restore(); + } + } + if (vertical) { + current.y -= x; + } else { + current.x += x * textHScale; + } + ctx.restore(); + this.compose(); + return undefined; + } + showType3Text(glyphs) { + const ctx = this.ctx; + const current = this.current; + const font = current.font; + const fontSize = current.fontSize; + const fontDirection = current.fontDirection; + const spacingDir = font.vertical ? 1 : -1; + const charSpacing = current.charSpacing; + const wordSpacing = current.wordSpacing; + const textHScale = current.textHScale * fontDirection; + const fontMatrix = current.fontMatrix || util.FONT_IDENTITY_MATRIX; + const glyphsLength = glyphs.length; + const isTextInvisible = current.textRenderingMode === util.TextRenderingMode.INVISIBLE; + let i, glyph, width, spacingLength; + if (isTextInvisible || fontSize === 0) { + return; + } + this._cachedScaleForStroking[0] = -1; + this._cachedGetSinglePixelWidth = null; + ctx.save(); + ctx.transform(...current.textMatrix); + ctx.translate(current.x, current.y); + ctx.scale(textHScale, fontDirection); + for (i = 0; i < glyphsLength; ++i) { + glyph = glyphs[i]; + if (typeof glyph === "number") { + spacingLength = spacingDir * glyph * fontSize / 1000; + this.ctx.translate(spacingLength, 0); + current.x += spacingLength * textHScale; + continue; + } + const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; + const operatorList = font.charProcOperatorList[glyph.operatorListId]; + if (!operatorList) { + (0,util.warn)(`Type3 character "${glyph.operatorListId}" is not available.`); + continue; + } + if (this.contentVisible) { + this.processingType3 = glyph; + this.save(); + ctx.scale(fontSize, fontSize); + ctx.transform(...fontMatrix); + this.executeOperatorList(operatorList); + this.restore(); + } + const transformed = util.Util.applyTransform([glyph.width, 0], fontMatrix); + width = transformed[0] * fontSize + spacing; + ctx.translate(width, 0); + current.x += width * textHScale; + } + ctx.restore(); + this.processingType3 = null; + } + setCharWidth(xWidth, yWidth) {} + setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) { + this.ctx.rect(llx, lly, urx - llx, ury - lly); + this.ctx.clip(); + this.endPath(); + } + getColorN_Pattern(IR) { + let pattern; + if (IR[0] === "TilingPattern") { + const color = IR[1]; + const baseTransform = this.baseTransform || (0,display_utils.getCurrentTransform)(this.ctx); + const canvasGraphicsFactory = { + createCanvasGraphics: ctx => { + return new CanvasGraphics(ctx, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, { + optionalContentConfig: this.optionalContentConfig, + markedContentStack: this.markedContentStack + }); + } + }; + pattern = new TilingPattern(IR, color, this.ctx, canvasGraphicsFactory, baseTransform); + } else { + pattern = this._getPattern(IR[1], IR[2]); + } + return pattern; + } + setStrokeColorN() { + this.current.strokeColor = this.getColorN_Pattern(arguments); + } + setFillColorN() { + this.current.fillColor = this.getColorN_Pattern(arguments); + this.current.patternFill = true; + } + setStrokeRGBColor(r, g, b) { + const color = util.Util.makeHexColor(r, g, b); + this.ctx.strokeStyle = color; + this.current.strokeColor = color; + } + setFillRGBColor(r, g, b) { + const color = util.Util.makeHexColor(r, g, b); + this.ctx.fillStyle = color; + this.current.fillColor = color; + this.current.patternFill = false; + } + _getPattern(objId, matrix = null) { + let pattern; + if (this.cachedPatterns.has(objId)) { + pattern = this.cachedPatterns.get(objId); + } else { + pattern = getShadingPattern(this.getObject(objId)); + this.cachedPatterns.set(objId, pattern); + } + if (matrix) { + pattern.matrix = matrix; + } + return pattern; + } + shadingFill(objId) { + if (!this.contentVisible) { + return; + } + const ctx = this.ctx; + this.save(); + const pattern = this._getPattern(objId); + ctx.fillStyle = pattern.getPattern(ctx, this, (0,display_utils.getCurrentTransformInverse)(ctx), PathType.SHADING); + const inv = (0,display_utils.getCurrentTransformInverse)(ctx); + if (inv) { + const { + width, + height + } = ctx.canvas; + const [x0, y0, x1, y1] = util.Util.getAxialAlignedBoundingBox([0, 0, width, height], inv); + this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0); + } else { + this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10); + } + this.compose(this.current.getClippedPathBoundingBox()); + this.restore(); + } + beginInlineImage() { + (0,util.unreachable)("Should not call beginInlineImage"); + } + beginImageData() { + (0,util.unreachable)("Should not call beginImageData"); + } + paintFormXObjectBegin(matrix, bbox) { + if (!this.contentVisible) { + return; + } + this.save(); + this.baseTransformStack.push(this.baseTransform); + if (Array.isArray(matrix) && matrix.length === 6) { + this.transform(...matrix); + } + this.baseTransform = (0,display_utils.getCurrentTransform)(this.ctx); + if (bbox) { + const width = bbox[2] - bbox[0]; + const height = bbox[3] - bbox[1]; + this.ctx.rect(bbox[0], bbox[1], width, height); + this.current.updateRectMinMax((0,display_utils.getCurrentTransform)(this.ctx), bbox); + this.clip(); + this.endPath(); + } + } + paintFormXObjectEnd() { + if (!this.contentVisible) { + return; + } + this.restore(); + this.baseTransform = this.baseTransformStack.pop(); + } + beginGroup(group) { + if (!this.contentVisible) { + return; + } + this.save(); + if (this.inSMaskMode) { + this.endSMaskMode(); + this.current.activeSMask = null; + } + const currentCtx = this.ctx; + if (!group.isolated) { + (0,util.info)("TODO: Support non-isolated groups."); + } + if (group.knockout) { + (0,util.warn)("Knockout groups not supported."); + } + const currentTransform = (0,display_utils.getCurrentTransform)(currentCtx); + if (group.matrix) { + currentCtx.transform(...group.matrix); + } + if (!group.bbox) { + throw new Error("Bounding box is required."); + } + let bounds = util.Util.getAxialAlignedBoundingBox(group.bbox, (0,display_utils.getCurrentTransform)(currentCtx)); + const canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height]; + bounds = util.Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0]; + const offsetX = Math.floor(bounds[0]); + const offsetY = Math.floor(bounds[1]); + let drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1); + let drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1); + let scaleX = 1, + scaleY = 1; + if (drawnWidth > MAX_GROUP_SIZE) { + scaleX = drawnWidth / MAX_GROUP_SIZE; + drawnWidth = MAX_GROUP_SIZE; + } + if (drawnHeight > MAX_GROUP_SIZE) { + scaleY = drawnHeight / MAX_GROUP_SIZE; + drawnHeight = MAX_GROUP_SIZE; + } + this.current.startNewPathAndClipBox([0, 0, drawnWidth, drawnHeight]); + let cacheId = "groupAt" + this.groupLevel; + if (group.smask) { + cacheId += "_smask_" + this.smaskCounter++ % 2; + } + const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight); + const groupCtx = scratchCanvas.context; + groupCtx.scale(1 / scaleX, 1 / scaleY); + groupCtx.translate(-offsetX, -offsetY); + groupCtx.transform(...currentTransform); + if (group.smask) { + this.smaskStack.push({ + canvas: scratchCanvas.canvas, + context: groupCtx, + offsetX, + offsetY, + scaleX, + scaleY, + subtype: group.smask.subtype, + backdrop: group.smask.backdrop, + transferMap: group.smask.transferMap || null, + startTransformInverse: null + }); + } else { + currentCtx.setTransform(1, 0, 0, 1, 0, 0); + currentCtx.translate(offsetX, offsetY); + currentCtx.scale(scaleX, scaleY); + currentCtx.save(); + } + copyCtxState(currentCtx, groupCtx); + this.ctx = groupCtx; + this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); + this.groupStack.push(currentCtx); + this.groupLevel++; + } + endGroup(group) { + if (!this.contentVisible) { + return; + } + this.groupLevel--; + const groupCtx = this.ctx; + const ctx = this.groupStack.pop(); + this.ctx = ctx; + this.ctx.imageSmoothingEnabled = false; + if (group.smask) { + this.tempSMask = this.smaskStack.pop(); + this.restore(); + } else { + this.ctx.restore(); + const currentMtx = (0,display_utils.getCurrentTransform)(this.ctx); + this.restore(); + this.ctx.save(); + this.ctx.setTransform(...currentMtx); + const dirtyBox = util.Util.getAxialAlignedBoundingBox([0, 0, groupCtx.canvas.width, groupCtx.canvas.height], currentMtx); + this.ctx.drawImage(groupCtx.canvas, 0, 0); + this.ctx.restore(); + this.compose(dirtyBox); + } + } + beginAnnotation(id, rect, transform, matrix, hasOwnCanvas) { + this.#restoreInitialState(); + resetCtxToDefault(this.ctx); + this.ctx.save(); + this.save(); + if (this.baseTransform) { + this.ctx.setTransform(...this.baseTransform); + } + if (Array.isArray(rect) && rect.length === 4) { + const width = rect[2] - rect[0]; + const height = rect[3] - rect[1]; + if (hasOwnCanvas && this.annotationCanvasMap) { + transform = transform.slice(); + transform[4] -= rect[0]; + transform[5] -= rect[1]; + rect = rect.slice(); + rect[0] = rect[1] = 0; + rect[2] = width; + rect[3] = height; + const [scaleX, scaleY] = util.Util.singularValueDecompose2dScale((0,display_utils.getCurrentTransform)(this.ctx)); + const { + viewportScale + } = this; + const canvasWidth = Math.ceil(width * this.outputScaleX * viewportScale); + const canvasHeight = Math.ceil(height * this.outputScaleY * viewportScale); + this.annotationCanvas = this.canvasFactory.create(canvasWidth, canvasHeight); + const { + canvas, + context + } = this.annotationCanvas; + this.annotationCanvasMap.set(id, canvas); + this.annotationCanvas.savedCtx = this.ctx; + this.ctx = context; + this.ctx.save(); + this.ctx.setTransform(scaleX, 0, 0, -scaleY, 0, height * scaleY); + resetCtxToDefault(this.ctx); + } else { + resetCtxToDefault(this.ctx); + this.ctx.rect(rect[0], rect[1], width, height); + this.ctx.clip(); + this.endPath(); + } + } + this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height); + this.transform(...transform); + this.transform(...matrix); + } + endAnnotation() { + if (this.annotationCanvas) { + this.ctx.restore(); + this.#drawFilter(); + this.ctx = this.annotationCanvas.savedCtx; + delete this.annotationCanvas.savedCtx; + delete this.annotationCanvas; + } + } + paintImageMaskXObject(img) { + if (!this.contentVisible) { + return; + } + const count = img.count; + img = this.getObject(img.data, img); + img.count = count; + const ctx = this.ctx; + const glyph = this.processingType3; + if (glyph) { + if (glyph.compiled === undefined) { + glyph.compiled = compileType3Glyph(img); + } + if (glyph.compiled) { + glyph.compiled(ctx); + return; + } + } + const mask = this._createMaskCanvas(img); + const maskCanvas = mask.canvas; + ctx.save(); + ctx.setTransform(1, 0, 0, 1, 0, 0); + ctx.drawImage(maskCanvas, mask.offsetX, mask.offsetY); + ctx.restore(); + this.compose(); + } + paintImageMaskXObjectRepeat(img, scaleX, skewX = 0, skewY = 0, scaleY, positions) { + if (!this.contentVisible) { + return; + } + img = this.getObject(img.data, img); + const ctx = this.ctx; + ctx.save(); + const currentTransform = (0,display_utils.getCurrentTransform)(ctx); + ctx.transform(scaleX, skewX, skewY, scaleY, 0, 0); + const mask = this._createMaskCanvas(img); + ctx.setTransform(1, 0, 0, 1, mask.offsetX - currentTransform[4], mask.offsetY - currentTransform[5]); + for (let i = 0, ii = positions.length; i < ii; i += 2) { + const trans = util.Util.transform(currentTransform, [scaleX, skewX, skewY, scaleY, positions[i], positions[i + 1]]); + const [x, y] = util.Util.applyTransform([0, 0], trans); + ctx.drawImage(mask.canvas, x, y); + } + ctx.restore(); + this.compose(); + } + paintImageMaskXObjectGroup(images) { + if (!this.contentVisible) { + return; + } + const ctx = this.ctx; + const fillColor = this.current.fillColor; + const isPatternFill = this.current.patternFill; + for (const image of images) { + const { + data, + width, + height, + transform + } = image; + const maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); + const maskCtx = maskCanvas.context; + maskCtx.save(); + const img = this.getObject(data, image); + putBinaryImageMask(maskCtx, img); + maskCtx.globalCompositeOperation = "source-in"; + maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this, (0,display_utils.getCurrentTransformInverse)(ctx), PathType.FILL) : fillColor; + maskCtx.fillRect(0, 0, width, height); + maskCtx.restore(); + ctx.save(); + ctx.transform(...transform); + ctx.scale(1, -1); + drawImageAtIntegerCoords(ctx, maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1); + ctx.restore(); + } + this.compose(); + } + paintImageXObject(objId) { + if (!this.contentVisible) { + return; + } + const imgData = this.getObject(objId); + if (!imgData) { + (0,util.warn)("Dependent image isn't ready yet"); + return; + } + this.paintInlineImageXObject(imgData); + } + paintImageXObjectRepeat(objId, scaleX, scaleY, positions) { + if (!this.contentVisible) { + return; + } + const imgData = this.getObject(objId); + if (!imgData) { + (0,util.warn)("Dependent image isn't ready yet"); + return; + } + const width = imgData.width; + const height = imgData.height; + const map = []; + for (let i = 0, ii = positions.length; i < ii; i += 2) { + map.push({ + transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]], + x: 0, + y: 0, + w: width, + h: height + }); + } + this.paintInlineImageXObjectGroup(imgData, map); + } + applyTransferMapsToCanvas(ctx) { + if (this.current.transferMaps !== "none") { + ctx.filter = this.current.transferMaps; + ctx.drawImage(ctx.canvas, 0, 0); + ctx.filter = "none"; + } + return ctx.canvas; + } + applyTransferMapsToBitmap(imgData) { + if (this.current.transferMaps === "none") { + return imgData.bitmap; + } + const { + bitmap, + width, + height + } = imgData; + const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height); + const tmpCtx = tmpCanvas.context; + tmpCtx.filter = this.current.transferMaps; + tmpCtx.drawImage(bitmap, 0, 0); + tmpCtx.filter = "none"; + return tmpCanvas.canvas; + } + paintInlineImageXObject(imgData) { + if (!this.contentVisible) { + return; + } + const width = imgData.width; + const height = imgData.height; + const ctx = this.ctx; + this.save(); + if (!util.isNodeJS) { + const { + filter + } = ctx; + if (filter !== "none" && filter !== "") { + ctx.filter = "none"; + } + } + ctx.scale(1 / width, -1 / height); + let imgToPaint; + if (imgData.bitmap) { + imgToPaint = this.applyTransferMapsToBitmap(imgData); + } else if (typeof HTMLElement === "function" && imgData instanceof HTMLElement || !imgData.data) { + imgToPaint = imgData; + } else { + const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height); + const tmpCtx = tmpCanvas.context; + putBinaryImageData(tmpCtx, imgData); + imgToPaint = this.applyTransferMapsToCanvas(tmpCtx); + } + const scaled = this._scaleImage(imgToPaint, (0,display_utils.getCurrentTransformInverse)(ctx)); + ctx.imageSmoothingEnabled = getImageSmoothingEnabled((0,display_utils.getCurrentTransform)(ctx), imgData.interpolate); + drawImageAtIntegerCoords(ctx, scaled.img, 0, 0, scaled.paintWidth, scaled.paintHeight, 0, -height, width, height); + this.compose(); + this.restore(); + } + paintInlineImageXObjectGroup(imgData, map) { + if (!this.contentVisible) { + return; + } + const ctx = this.ctx; + let imgToPaint; + if (imgData.bitmap) { + imgToPaint = imgData.bitmap; + } else { + const w = imgData.width; + const h = imgData.height; + const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", w, h); + const tmpCtx = tmpCanvas.context; + putBinaryImageData(tmpCtx, imgData); + imgToPaint = this.applyTransferMapsToCanvas(tmpCtx); + } + for (const entry of map) { + ctx.save(); + ctx.transform(...entry.transform); + ctx.scale(1, -1); + drawImageAtIntegerCoords(ctx, imgToPaint, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1); + ctx.restore(); + } + this.compose(); + } + paintSolidColorImageMask() { + if (!this.contentVisible) { + return; + } + this.ctx.fillRect(0, 0, 1, 1); + this.compose(); + } + markPoint(tag) {} + markPointProps(tag, properties) {} + beginMarkedContent(tag) { + this.markedContentStack.push({ + visible: true + }); + } + beginMarkedContentProps(tag, properties) { + if (tag === "OC") { + this.markedContentStack.push({ + visible: this.optionalContentConfig.isVisible(properties) + }); + } else { + this.markedContentStack.push({ + visible: true + }); + } + this.contentVisible = this.isContentVisible(); + } + endMarkedContent() { + this.markedContentStack.pop(); + this.contentVisible = this.isContentVisible(); + } + beginCompat() {} + endCompat() {} + consumePath(clipBox) { + const isEmpty = this.current.isEmptyClip(); + if (this.pendingClip) { + this.current.updateClipFromPath(); + } + if (!this.pendingClip) { + this.compose(clipBox); + } + const ctx = this.ctx; + if (this.pendingClip) { + if (!isEmpty) { + if (this.pendingClip === EO_CLIP) { + ctx.clip("evenodd"); + } else { + ctx.clip(); + } + } + this.pendingClip = null; + } + this.current.startNewPathAndClipBox(this.current.clipBox); + ctx.beginPath(); + } + getSinglePixelWidth() { + if (!this._cachedGetSinglePixelWidth) { + const m = (0,display_utils.getCurrentTransform)(this.ctx); + if (m[1] === 0 && m[2] === 0) { + this._cachedGetSinglePixelWidth = 1 / Math.min(Math.abs(m[0]), Math.abs(m[3])); + } else { + const absDet = Math.abs(m[0] * m[3] - m[2] * m[1]); + const normX = Math.hypot(m[0], m[2]); + const normY = Math.hypot(m[1], m[3]); + this._cachedGetSinglePixelWidth = Math.max(normX, normY) / absDet; + } + } + return this._cachedGetSinglePixelWidth; + } + getScaleForStroking() { + if (this._cachedScaleForStroking[0] === -1) { + const { + lineWidth + } = this.current; + const { + a, + b, + c, + d + } = this.ctx.getTransform(); + let scaleX, scaleY; + if (b === 0 && c === 0) { + const normX = Math.abs(a); + const normY = Math.abs(d); + if (normX === normY) { + if (lineWidth === 0) { + scaleX = scaleY = 1 / normX; + } else { + const scaledLineWidth = normX * lineWidth; + scaleX = scaleY = scaledLineWidth < 1 ? 1 / scaledLineWidth : 1; + } + } else if (lineWidth === 0) { + scaleX = 1 / normX; + scaleY = 1 / normY; + } else { + const scaledXLineWidth = normX * lineWidth; + const scaledYLineWidth = normY * lineWidth; + scaleX = scaledXLineWidth < 1 ? 1 / scaledXLineWidth : 1; + scaleY = scaledYLineWidth < 1 ? 1 / scaledYLineWidth : 1; + } + } else { + const absDet = Math.abs(a * d - b * c); + const normX = Math.hypot(a, b); + const normY = Math.hypot(c, d); + if (lineWidth === 0) { + scaleX = normY / absDet; + scaleY = normX / absDet; + } else { + const baseArea = lineWidth * absDet; + scaleX = normY > baseArea ? normY / baseArea : 1; + scaleY = normX > baseArea ? normX / baseArea : 1; + } + } + this._cachedScaleForStroking[0] = scaleX; + this._cachedScaleForStroking[1] = scaleY; + } + return this._cachedScaleForStroking; + } + rescaleAndStroke(saveRestore) { + const { + ctx + } = this; + const { + lineWidth + } = this.current; + const [scaleX, scaleY] = this.getScaleForStroking(); + ctx.lineWidth = lineWidth || 1; + if (scaleX === 1 && scaleY === 1) { + ctx.stroke(); + return; + } + const dashes = ctx.getLineDash(); + if (saveRestore) { + ctx.save(); + } + ctx.scale(scaleX, scaleY); + if (dashes.length > 0) { + const scale = Math.max(scaleX, scaleY); + ctx.setLineDash(dashes.map(x => x / scale)); + ctx.lineDashOffset /= scale; + } + ctx.stroke(); + if (saveRestore) { + ctx.restore(); + } + } + isContentVisible() { + for (let i = this.markedContentStack.length - 1; i >= 0; i--) { + if (!this.markedContentStack[i].visible) { + return false; + } + } + return true; + } +} +for (const op in util.OPS) { + if (CanvasGraphics.prototype[op] !== undefined) { + CanvasGraphics.prototype[util.OPS[op]] = CanvasGraphics.prototype[op]; + } +} + + +/***/ }), + +/***/ 473: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ DOMCMapReaderFactory: () => (/* binding */ DOMCMapReaderFactory), +/* harmony export */ DOMCanvasFactory: () => (/* binding */ DOMCanvasFactory), +/* harmony export */ DOMFilterFactory: () => (/* binding */ DOMFilterFactory), +/* harmony export */ DOMSVGFactory: () => (/* binding */ DOMSVGFactory), +/* harmony export */ DOMStandardFontDataFactory: () => (/* binding */ DOMStandardFontDataFactory), +/* harmony export */ PDFDateString: () => (/* binding */ PDFDateString), +/* harmony export */ PageViewport: () => (/* binding */ PageViewport), +/* harmony export */ PixelsPerInch: () => (/* binding */ PixelsPerInch), +/* harmony export */ RenderingCancelledException: () => (/* binding */ RenderingCancelledException), +/* harmony export */ StatTimer: () => (/* binding */ StatTimer), +/* harmony export */ getColorValues: () => (/* binding */ getColorValues), +/* harmony export */ getCurrentTransform: () => (/* binding */ getCurrentTransform), +/* harmony export */ getCurrentTransformInverse: () => (/* binding */ getCurrentTransformInverse), +/* harmony export */ getFilenameFromUrl: () => (/* binding */ getFilenameFromUrl), +/* harmony export */ getPdfFilenameFromUrl: () => (/* binding */ getPdfFilenameFromUrl), +/* harmony export */ getRGB: () => (/* binding */ getRGB), +/* harmony export */ getXfaPageViewport: () => (/* binding */ getXfaPageViewport), +/* harmony export */ isDataScheme: () => (/* binding */ isDataScheme), +/* harmony export */ isPdfFile: () => (/* binding */ isPdfFile), +/* harmony export */ isValidFetchUrl: () => (/* binding */ isValidFetchUrl), +/* harmony export */ noContextMenu: () => (/* binding */ noContextMenu), +/* harmony export */ setLayerDimensions: () => (/* binding */ setLayerDimensions) +/* harmony export */ }); +/* unused harmony export deprecated */ +/* harmony import */ var _base_factory_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(822); +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(266); + + +const SVG_NS = "http://www.w3.org/2000/svg"; +class PixelsPerInch { + static CSS = 96.0; + static PDF = 72.0; + static PDF_TO_CSS_UNITS = this.CSS / this.PDF; +} +class DOMFilterFactory extends _base_factory_js__WEBPACK_IMPORTED_MODULE_0__.BaseFilterFactory { + #_cache; + #_defs; + #docId; + #document; + #hcmFilter; + #hcmKey; + #hcmUrl; + #hcmHighlightFilter; + #hcmHighlightKey; + #hcmHighlightUrl; + #id = 0; + constructor({ + docId, + ownerDocument = globalThis.document + } = {}) { + super(); + this.#docId = docId; + this.#document = ownerDocument; + } + get #cache() { + return this.#_cache ||= new Map(); + } + get #defs() { + if (!this.#_defs) { + const div = this.#document.createElement("div"); + const { + style + } = div; + style.visibility = "hidden"; + style.contain = "strict"; + style.width = style.height = 0; + style.position = "absolute"; + style.top = style.left = 0; + style.zIndex = -1; + const svg = this.#document.createElementNS(SVG_NS, "svg"); + svg.setAttribute("width", 0); + svg.setAttribute("height", 0); + this.#_defs = this.#document.createElementNS(SVG_NS, "defs"); + div.append(svg); + svg.append(this.#_defs); + this.#document.body.append(div); + } + return this.#_defs; + } + addFilter(maps) { + if (!maps) { + return "none"; + } + let value = this.#cache.get(maps); + if (value) { + return value; + } + let tableR, tableG, tableB, key; + if (maps.length === 1) { + const mapR = maps[0]; + const buffer = new Array(256); + for (let i = 0; i < 256; i++) { + buffer[i] = mapR[i] / 255; + } + key = tableR = tableG = tableB = buffer.join(","); + } else { + const [mapR, mapG, mapB] = maps; + const bufferR = new Array(256); + const bufferG = new Array(256); + const bufferB = new Array(256); + for (let i = 0; i < 256; i++) { + bufferR[i] = mapR[i] / 255; + bufferG[i] = mapG[i] / 255; + bufferB[i] = mapB[i] / 255; + } + tableR = bufferR.join(","); + tableG = bufferG.join(","); + tableB = bufferB.join(","); + key = `${tableR}${tableG}${tableB}`; + } + value = this.#cache.get(key); + if (value) { + this.#cache.set(maps, value); + return value; + } + const id = `g_${this.#docId}_transfer_map_${this.#id++}`; + const url = `url(#${id})`; + this.#cache.set(maps, url); + this.#cache.set(key, url); + const filter = this.#createFilter(id); + this.#addTransferMapConversion(tableR, tableG, tableB, filter); + return url; + } + addHCMFilter(fgColor, bgColor) { + const key = `${fgColor}-${bgColor}`; + if (this.#hcmKey === key) { + return this.#hcmUrl; + } + this.#hcmKey = key; + this.#hcmUrl = "none"; + this.#hcmFilter?.remove(); + if (!fgColor || !bgColor) { + return this.#hcmUrl; + } + const fgRGB = this.#getRGB(fgColor); + fgColor = _shared_util_js__WEBPACK_IMPORTED_MODULE_1__.Util.makeHexColor(...fgRGB); + const bgRGB = this.#getRGB(bgColor); + bgColor = _shared_util_js__WEBPACK_IMPORTED_MODULE_1__.Util.makeHexColor(...bgRGB); + this.#defs.style.color = ""; + if (fgColor === "#000000" && bgColor === "#ffffff" || fgColor === bgColor) { + return this.#hcmUrl; + } + const map = new Array(256); + for (let i = 0; i <= 255; i++) { + const x = i / 255; + map[i] = x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4; + } + const table = map.join(","); + const id = `g_${this.#docId}_hcm_filter`; + const filter = this.#hcmHighlightFilter = this.#createFilter(id); + this.#addTransferMapConversion(table, table, table, filter); + this.#addGrayConversion(filter); + const getSteps = (c, n) => { + const start = fgRGB[c] / 255; + const end = bgRGB[c] / 255; + const arr = new Array(n + 1); + for (let i = 0; i <= n; i++) { + arr[i] = start + i / n * (end - start); + } + return arr.join(","); + }; + this.#addTransferMapConversion(getSteps(0, 5), getSteps(1, 5), getSteps(2, 5), filter); + this.#hcmUrl = `url(#${id})`; + return this.#hcmUrl; + } + addHighlightHCMFilter(fgColor, bgColor, newFgColor, newBgColor) { + const key = `${fgColor}-${bgColor}-${newFgColor}-${newBgColor}`; + if (this.#hcmHighlightKey === key) { + return this.#hcmHighlightUrl; + } + this.#hcmHighlightKey = key; + this.#hcmHighlightUrl = "none"; + this.#hcmHighlightFilter?.remove(); + if (!fgColor || !bgColor) { + return this.#hcmHighlightUrl; + } + const [fgRGB, bgRGB] = [fgColor, bgColor].map(this.#getRGB.bind(this)); + let fgGray = Math.round(0.2126 * fgRGB[0] + 0.7152 * fgRGB[1] + 0.0722 * fgRGB[2]); + let bgGray = Math.round(0.2126 * bgRGB[0] + 0.7152 * bgRGB[1] + 0.0722 * bgRGB[2]); + let [newFgRGB, newBgRGB] = [newFgColor, newBgColor].map(this.#getRGB.bind(this)); + if (bgGray < fgGray) { + [fgGray, bgGray, newFgRGB, newBgRGB] = [bgGray, fgGray, newBgRGB, newFgRGB]; + } + this.#defs.style.color = ""; + const getSteps = (fg, bg, n) => { + const arr = new Array(256); + const step = (bgGray - fgGray) / n; + const newStart = fg / 255; + const newStep = (bg - fg) / (255 * n); + let prev = 0; + for (let i = 0; i <= n; i++) { + const k = Math.round(fgGray + i * step); + const value = newStart + i * newStep; + for (let j = prev; j <= k; j++) { + arr[j] = value; + } + prev = k + 1; + } + for (let i = prev; i < 256; i++) { + arr[i] = arr[prev - 1]; + } + return arr.join(","); + }; + const id = `g_${this.#docId}_hcm_highlight_filter`; + const filter = this.#hcmHighlightFilter = this.#createFilter(id); + this.#addGrayConversion(filter); + this.#addTransferMapConversion(getSteps(newFgRGB[0], newBgRGB[0], 5), getSteps(newFgRGB[1], newBgRGB[1], 5), getSteps(newFgRGB[2], newBgRGB[2], 5), filter); + this.#hcmHighlightUrl = `url(#${id})`; + return this.#hcmHighlightUrl; + } + destroy(keepHCM = false) { + if (keepHCM && (this.#hcmUrl || this.#hcmHighlightUrl)) { + return; + } + if (this.#_defs) { + this.#_defs.parentNode.parentNode.remove(); + this.#_defs = null; + } + if (this.#_cache) { + this.#_cache.clear(); + this.#_cache = null; + } + this.#id = 0; + } + #addGrayConversion(filter) { + const feColorMatrix = this.#document.createElementNS(SVG_NS, "feColorMatrix"); + feColorMatrix.setAttribute("type", "matrix"); + feColorMatrix.setAttribute("values", "0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0"); + filter.append(feColorMatrix); + } + #createFilter(id) { + const filter = this.#document.createElementNS(SVG_NS, "filter"); + filter.setAttribute("color-interpolation-filters", "sRGB"); + filter.setAttribute("id", id); + this.#defs.append(filter); + return filter; + } + #appendFeFunc(feComponentTransfer, func, table) { + const feFunc = this.#document.createElementNS(SVG_NS, func); + feFunc.setAttribute("type", "discrete"); + feFunc.setAttribute("tableValues", table); + feComponentTransfer.append(feFunc); + } + #addTransferMapConversion(rTable, gTable, bTable, filter) { + const feComponentTransfer = this.#document.createElementNS(SVG_NS, "feComponentTransfer"); + filter.append(feComponentTransfer); + this.#appendFeFunc(feComponentTransfer, "feFuncR", rTable); + this.#appendFeFunc(feComponentTransfer, "feFuncG", gTable); + this.#appendFeFunc(feComponentTransfer, "feFuncB", bTable); + } + #getRGB(color) { + this.#defs.style.color = color; + return getRGB(getComputedStyle(this.#defs).getPropertyValue("color")); + } +} +class DOMCanvasFactory extends _base_factory_js__WEBPACK_IMPORTED_MODULE_0__.BaseCanvasFactory { + constructor({ + ownerDocument = globalThis.document + } = {}) { + super(); + this._document = ownerDocument; + } + _createCanvas(width, height) { + const canvas = this._document.createElement("canvas"); + canvas.width = width; + canvas.height = height; + return canvas; + } +} +async function fetchData(url, asTypedArray = false) { + if (isValidFetchUrl(url, document.baseURI)) { + const response = await fetch(url); + if (!response.ok) { + throw new Error(response.statusText); + } + return asTypedArray ? new Uint8Array(await response.arrayBuffer()) : (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_1__.stringToBytes)(await response.text()); + } + return new Promise((resolve, reject) => { + const request = new XMLHttpRequest(); + request.open("GET", url, true); + if (asTypedArray) { + request.responseType = "arraybuffer"; + } + request.onreadystatechange = () => { + if (request.readyState !== XMLHttpRequest.DONE) { + return; + } + if (request.status === 200 || request.status === 0) { + let data; + if (asTypedArray && request.response) { + data = new Uint8Array(request.response); + } else if (!asTypedArray && request.responseText) { + data = (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_1__.stringToBytes)(request.responseText); + } + if (data) { + resolve(data); + return; + } + } + reject(new Error(request.statusText)); + }; + request.send(null); + }); +} +class DOMCMapReaderFactory extends _base_factory_js__WEBPACK_IMPORTED_MODULE_0__.BaseCMapReaderFactory { + _fetchData(url, compressionType) { + return fetchData(url, this.isCompressed).then(data => { + return { + cMapData: data, + compressionType + }; + }); + } +} +class DOMStandardFontDataFactory extends _base_factory_js__WEBPACK_IMPORTED_MODULE_0__.BaseStandardFontDataFactory { + _fetchData(url) { + return fetchData(url, true); + } +} +class DOMSVGFactory extends _base_factory_js__WEBPACK_IMPORTED_MODULE_0__.BaseSVGFactory { + _createSVG(type) { + return document.createElementNS(SVG_NS, type); + } +} +class PageViewport { + constructor({ + viewBox, + scale, + rotation, + offsetX = 0, + offsetY = 0, + dontFlip = false + }) { + this.viewBox = viewBox; + this.scale = scale; + this.rotation = rotation; + this.offsetX = offsetX; + this.offsetY = offsetY; + const centerX = (viewBox[2] + viewBox[0]) / 2; + const centerY = (viewBox[3] + viewBox[1]) / 2; + let rotateA, rotateB, rotateC, rotateD; + rotation %= 360; + if (rotation < 0) { + rotation += 360; + } + switch (rotation) { + case 180: + rotateA = -1; + rotateB = 0; + rotateC = 0; + rotateD = 1; + break; + case 90: + rotateA = 0; + rotateB = 1; + rotateC = 1; + rotateD = 0; + break; + case 270: + rotateA = 0; + rotateB = -1; + rotateC = -1; + rotateD = 0; + break; + case 0: + rotateA = 1; + rotateB = 0; + rotateC = 0; + rotateD = -1; + break; + default: + throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees."); + } + if (dontFlip) { + rotateC = -rotateC; + rotateD = -rotateD; + } + let offsetCanvasX, offsetCanvasY; + let width, height; + if (rotateA === 0) { + offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX; + offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY; + width = (viewBox[3] - viewBox[1]) * scale; + height = (viewBox[2] - viewBox[0]) * scale; + } else { + offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX; + offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY; + width = (viewBox[2] - viewBox[0]) * scale; + height = (viewBox[3] - viewBox[1]) * scale; + } + this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY]; + this.width = width; + this.height = height; + } + get rawDims() { + const { + viewBox + } = this; + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_1__.shadow)(this, "rawDims", { + pageWidth: viewBox[2] - viewBox[0], + pageHeight: viewBox[3] - viewBox[1], + pageX: viewBox[0], + pageY: viewBox[1] + }); + } + clone({ + scale = this.scale, + rotation = this.rotation, + offsetX = this.offsetX, + offsetY = this.offsetY, + dontFlip = false + } = {}) { + return new PageViewport({ + viewBox: this.viewBox.slice(), + scale, + rotation, + offsetX, + offsetY, + dontFlip + }); + } + convertToViewportPoint(x, y) { + return _shared_util_js__WEBPACK_IMPORTED_MODULE_1__.Util.applyTransform([x, y], this.transform); + } + convertToViewportRectangle(rect) { + const topLeft = _shared_util_js__WEBPACK_IMPORTED_MODULE_1__.Util.applyTransform([rect[0], rect[1]], this.transform); + const bottomRight = _shared_util_js__WEBPACK_IMPORTED_MODULE_1__.Util.applyTransform([rect[2], rect[3]], this.transform); + return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]]; + } + convertToPdfPoint(x, y) { + return _shared_util_js__WEBPACK_IMPORTED_MODULE_1__.Util.applyInverseTransform([x, y], this.transform); + } +} +class RenderingCancelledException extends _shared_util_js__WEBPACK_IMPORTED_MODULE_1__.BaseException { + constructor(msg, extraDelay = 0) { + super(msg, "RenderingCancelledException"); + this.extraDelay = extraDelay; + } +} +function isDataScheme(url) { + const ii = url.length; + let i = 0; + while (i < ii && url[i].trim() === "") { + i++; + } + return url.substring(i, i + 5).toLowerCase() === "data:"; +} +function isPdfFile(filename) { + return typeof filename === "string" && /\.pdf$/i.test(filename); +} +function getFilenameFromUrl(url, onlyStripPath = false) { + if (!onlyStripPath) { + [url] = url.split(/[#?]/, 1); + } + return url.substring(url.lastIndexOf("/") + 1); +} +function getPdfFilenameFromUrl(url, defaultFilename = "document.pdf") { + if (typeof url !== "string") { + return defaultFilename; + } + if (isDataScheme(url)) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_1__.warn)('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.'); + return defaultFilename; + } + const reURI = /^(?:(?:[^:]+:)?\/\/[^/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/; + const reFilename = /[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i; + const splitURI = reURI.exec(url); + let suggestedFilename = reFilename.exec(splitURI[1]) || reFilename.exec(splitURI[2]) || reFilename.exec(splitURI[3]); + if (suggestedFilename) { + suggestedFilename = suggestedFilename[0]; + if (suggestedFilename.includes("%")) { + try { + suggestedFilename = reFilename.exec(decodeURIComponent(suggestedFilename))[0]; + } catch {} + } + } + return suggestedFilename || defaultFilename; +} +class StatTimer { + started = Object.create(null); + times = []; + time(name) { + if (name in this.started) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_1__.warn)(`Timer is already running for ${name}`); + } + this.started[name] = Date.now(); + } + timeEnd(name) { + if (!(name in this.started)) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_1__.warn)(`Timer has not been started for ${name}`); + } + this.times.push({ + name, + start: this.started[name], + end: Date.now() + }); + delete this.started[name]; + } + toString() { + const outBuf = []; + let longest = 0; + for (const { + name + } of this.times) { + longest = Math.max(name.length, longest); + } + for (const { + name, + start, + end + } of this.times) { + outBuf.push(`${name.padEnd(longest)} ${end - start}ms\n`); + } + return outBuf.join(""); + } +} +function isValidFetchUrl(url, baseUrl) { + try { + const { + protocol + } = baseUrl ? new URL(url, baseUrl) : new URL(url); + return protocol === "http:" || protocol === "https:"; + } catch { + return false; + } +} +function noContextMenu(e) { + e.preventDefault(); +} +function deprecated(details) { + console.log("Deprecated API usage: " + details); +} +let pdfDateStringRegex; +class PDFDateString { + static toDateObject(input) { + if (!input || typeof input !== "string") { + return null; + } + pdfDateStringRegex ||= new RegExp("^D:" + "(\\d{4})" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "([Z|+|-])?" + "(\\d{2})?" + "'?" + "(\\d{2})?" + "'?"); + const matches = pdfDateStringRegex.exec(input); + if (!matches) { + return null; + } + const year = parseInt(matches[1], 10); + let month = parseInt(matches[2], 10); + month = month >= 1 && month <= 12 ? month - 1 : 0; + let day = parseInt(matches[3], 10); + day = day >= 1 && day <= 31 ? day : 1; + let hour = parseInt(matches[4], 10); + hour = hour >= 0 && hour <= 23 ? hour : 0; + let minute = parseInt(matches[5], 10); + minute = minute >= 0 && minute <= 59 ? minute : 0; + let second = parseInt(matches[6], 10); + second = second >= 0 && second <= 59 ? second : 0; + const universalTimeRelation = matches[7] || "Z"; + let offsetHour = parseInt(matches[8], 10); + offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0; + let offsetMinute = parseInt(matches[9], 10) || 0; + offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0; + if (universalTimeRelation === "-") { + hour += offsetHour; + minute += offsetMinute; + } else if (universalTimeRelation === "+") { + hour -= offsetHour; + minute -= offsetMinute; + } + return new Date(Date.UTC(year, month, day, hour, minute, second)); + } +} +function getXfaPageViewport(xfaPage, { + scale = 1, + rotation = 0 +}) { + const { + width, + height + } = xfaPage.attributes.style; + const viewBox = [0, 0, parseInt(width), parseInt(height)]; + return new PageViewport({ + viewBox, + scale, + rotation + }); +} +function getRGB(color) { + if (color.startsWith("#")) { + const colorRGB = parseInt(color.slice(1), 16); + return [(colorRGB & 0xff0000) >> 16, (colorRGB & 0x00ff00) >> 8, colorRGB & 0x0000ff]; + } + if (color.startsWith("rgb(")) { + return color.slice(4, -1).split(",").map(x => parseInt(x)); + } + if (color.startsWith("rgba(")) { + return color.slice(5, -1).split(",").map(x => parseInt(x)).slice(0, 3); + } + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_1__.warn)(`Not a valid color format: "${color}"`); + return [0, 0, 0]; +} +function getColorValues(colors) { + const span = document.createElement("span"); + span.style.visibility = "hidden"; + document.body.append(span); + for (const name of colors.keys()) { + span.style.color = name; + const computedColor = window.getComputedStyle(span).color; + colors.set(name, getRGB(computedColor)); + } + span.remove(); +} +function getCurrentTransform(ctx) { + const { + a, + b, + c, + d, + e, + f + } = ctx.getTransform(); + return [a, b, c, d, e, f]; +} +function getCurrentTransformInverse(ctx) { + const { + a, + b, + c, + d, + e, + f + } = ctx.getTransform().invertSelf(); + return [a, b, c, d, e, f]; +} +function setLayerDimensions(div, viewport, mustFlip = false, mustRotate = true) { + if (viewport instanceof PageViewport) { + const { + pageWidth, + pageHeight + } = viewport.rawDims; + const { + style + } = div; + const useRound = _shared_util_js__WEBPACK_IMPORTED_MODULE_1__.FeatureTest.isCSSRoundSupported; + const w = `var(--scale-factor) * ${pageWidth}px`, + h = `var(--scale-factor) * ${pageHeight}px`; + const widthStr = useRound ? `round(${w}, 1px)` : `calc(${w})`, + heightStr = useRound ? `round(${h}, 1px)` : `calc(${h})`; + if (!mustFlip || viewport.rotation % 180 === 0) { + style.width = widthStr; + style.height = heightStr; + } else { + style.width = heightStr; + style.height = widthStr; + } + } + if (mustRotate) { + div.setAttribute("data-main-rotation", viewport.rotation); + } +} + + +/***/ }), + +/***/ 331: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + AnnotationEditorLayer: () => (/* binding */ AnnotationEditorLayer) +}); + +// EXTERNAL MODULE: ./src/shared/util.js +var util = __webpack_require__(266); +// EXTERNAL MODULE: ./src/display/editor/editor.js +var editor_editor = __webpack_require__(682); +// EXTERNAL MODULE: ./src/display/editor/tools.js +var tools = __webpack_require__(812); +// EXTERNAL MODULE: ./src/display/annotation_layer.js + 1 modules +var annotation_layer = __webpack_require__(640); +;// CONCATENATED MODULE: ./src/display/editor/freetext.js + + + + +class FreeTextEditor extends editor_editor.AnnotationEditor { + #boundEditorDivBlur = this.editorDivBlur.bind(this); + #boundEditorDivFocus = this.editorDivFocus.bind(this); + #boundEditorDivInput = this.editorDivInput.bind(this); + #boundEditorDivKeydown = this.editorDivKeydown.bind(this); + #color; + #content = ""; + #editorDivId = `${this.id}-editor`; + #fontSize; + #initialData = null; + static _freeTextDefaultContent = ""; + static _internalPadding = 0; + static _defaultColor = null; + static _defaultFontSize = 10; + static get _keyboardManager() { + const proto = FreeTextEditor.prototype; + const arrowChecker = self => self.isEmpty(); + const small = tools.AnnotationEditorUIManager.TRANSLATE_SMALL; + const big = tools.AnnotationEditorUIManager.TRANSLATE_BIG; + return (0,util.shadow)(this, "_keyboardManager", new tools.KeyboardManager([[["ctrl+s", "mac+meta+s", "ctrl+p", "mac+meta+p"], proto.commitOrRemove, { + bubbles: true + }], [["ctrl+Enter", "mac+meta+Enter", "Escape", "mac+Escape"], proto.commitOrRemove], [["ArrowLeft", "mac+ArrowLeft"], proto._translateEmpty, { + args: [-small, 0], + checker: arrowChecker + }], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], proto._translateEmpty, { + args: [-big, 0], + checker: arrowChecker + }], [["ArrowRight", "mac+ArrowRight"], proto._translateEmpty, { + args: [small, 0], + checker: arrowChecker + }], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], proto._translateEmpty, { + args: [big, 0], + checker: arrowChecker + }], [["ArrowUp", "mac+ArrowUp"], proto._translateEmpty, { + args: [0, -small], + checker: arrowChecker + }], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], proto._translateEmpty, { + args: [0, -big], + checker: arrowChecker + }], [["ArrowDown", "mac+ArrowDown"], proto._translateEmpty, { + args: [0, small], + checker: arrowChecker + }], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], proto._translateEmpty, { + args: [0, big], + checker: arrowChecker + }]])); + } + static _type = "freetext"; + static _editorType = util.AnnotationEditorType.FREETEXT; + constructor(params) { + super({ + ...params, + name: "freeTextEditor" + }); + this.#color = params.color || FreeTextEditor._defaultColor || editor_editor.AnnotationEditor._defaultLineColor; + this.#fontSize = params.fontSize || FreeTextEditor._defaultFontSize; + } + static initialize(l10n) { + editor_editor.AnnotationEditor.initialize(l10n, { + strings: ["pdfjs-free-text-default-content"] + }); + const style = getComputedStyle(document.documentElement); + this._internalPadding = parseFloat(style.getPropertyValue("--freetext-padding")); + } + static updateDefaultParams(type, value) { + switch (type) { + case util.AnnotationEditorParamsType.FREETEXT_SIZE: + FreeTextEditor._defaultFontSize = value; + break; + case util.AnnotationEditorParamsType.FREETEXT_COLOR: + FreeTextEditor._defaultColor = value; + break; + } + } + updateParams(type, value) { + switch (type) { + case util.AnnotationEditorParamsType.FREETEXT_SIZE: + this.#updateFontSize(value); + break; + case util.AnnotationEditorParamsType.FREETEXT_COLOR: + this.#updateColor(value); + break; + } + } + static get defaultPropertiesToUpdate() { + return [[util.AnnotationEditorParamsType.FREETEXT_SIZE, FreeTextEditor._defaultFontSize], [util.AnnotationEditorParamsType.FREETEXT_COLOR, FreeTextEditor._defaultColor || editor_editor.AnnotationEditor._defaultLineColor]]; + } + get propertiesToUpdate() { + return [[util.AnnotationEditorParamsType.FREETEXT_SIZE, this.#fontSize], [util.AnnotationEditorParamsType.FREETEXT_COLOR, this.#color]]; + } + #updateFontSize(fontSize) { + const setFontsize = size => { + this.editorDiv.style.fontSize = `calc(${size}px * var(--scale-factor))`; + this.translate(0, -(size - this.#fontSize) * this.parentScale); + this.#fontSize = size; + this.#setEditorDimensions(); + }; + const savedFontsize = this.#fontSize; + this.addCommands({ + cmd: () => { + setFontsize(fontSize); + }, + undo: () => { + setFontsize(savedFontsize); + }, + mustExec: true, + type: util.AnnotationEditorParamsType.FREETEXT_SIZE, + overwriteIfSameType: true, + keepUndo: true + }); + } + #updateColor(color) { + const savedColor = this.#color; + this.addCommands({ + cmd: () => { + this.#color = this.editorDiv.style.color = color; + }, + undo: () => { + this.#color = this.editorDiv.style.color = savedColor; + }, + mustExec: true, + type: util.AnnotationEditorParamsType.FREETEXT_COLOR, + overwriteIfSameType: true, + keepUndo: true + }); + } + _translateEmpty(x, y) { + this._uiManager.translateSelectedEditors(x, y, true); + } + getInitialTranslation() { + const scale = this.parentScale; + return [-FreeTextEditor._internalPadding * scale, -(FreeTextEditor._internalPadding + this.#fontSize) * scale]; + } + rebuild() { + if (!this.parent) { + return; + } + super.rebuild(); + if (this.div === null) { + return; + } + if (!this.isAttachedToDOM) { + this.parent.add(this); + } + } + enableEditMode() { + if (this.isInEditMode()) { + return; + } + this.parent.setEditingState(false); + this.parent.updateToolbar(util.AnnotationEditorType.FREETEXT); + super.enableEditMode(); + this.overlayDiv.classList.remove("enabled"); + this.editorDiv.contentEditable = true; + this._isDraggable = false; + this.div.removeAttribute("aria-activedescendant"); + this.editorDiv.addEventListener("keydown", this.#boundEditorDivKeydown); + this.editorDiv.addEventListener("focus", this.#boundEditorDivFocus); + this.editorDiv.addEventListener("blur", this.#boundEditorDivBlur); + this.editorDiv.addEventListener("input", this.#boundEditorDivInput); + } + disableEditMode() { + if (!this.isInEditMode()) { + return; + } + this.parent.setEditingState(true); + super.disableEditMode(); + this.overlayDiv.classList.add("enabled"); + this.editorDiv.contentEditable = false; + this.div.setAttribute("aria-activedescendant", this.#editorDivId); + this._isDraggable = true; + this.editorDiv.removeEventListener("keydown", this.#boundEditorDivKeydown); + this.editorDiv.removeEventListener("focus", this.#boundEditorDivFocus); + this.editorDiv.removeEventListener("blur", this.#boundEditorDivBlur); + this.editorDiv.removeEventListener("input", this.#boundEditorDivInput); + this.div.focus({ + preventScroll: true + }); + this.isEditing = false; + this.parent.div.classList.add("freetextEditing"); + } + focusin(event) { + if (!this._focusEventsAllowed) { + return; + } + super.focusin(event); + if (event.target !== this.editorDiv) { + this.editorDiv.focus(); + } + } + onceAdded() { + if (this.width) { + this.#cheatInitialRect(); + return; + } + this.enableEditMode(); + this.editorDiv.focus(); + if (this._initialOptions?.isCentered) { + this.center(); + } + this._initialOptions = null; + } + isEmpty() { + return !this.editorDiv || this.editorDiv.innerText.trim() === ""; + } + remove() { + this.isEditing = false; + if (this.parent) { + this.parent.setEditingState(true); + this.parent.div.classList.add("freetextEditing"); + } + super.remove(); + } + #extractText() { + const divs = this.editorDiv.getElementsByTagName("div"); + if (divs.length === 0) { + return this.editorDiv.innerText; + } + const buffer = []; + for (const div of divs) { + buffer.push(div.innerText.replace(/\r\n?|\n/, "")); + } + return buffer.join("\n"); + } + #setEditorDimensions() { + const [parentWidth, parentHeight] = this.parentDimensions; + let rect; + if (this.isAttachedToDOM) { + rect = this.div.getBoundingClientRect(); + } else { + const { + currentLayer, + div + } = this; + const savedDisplay = div.style.display; + div.style.display = "hidden"; + currentLayer.div.append(this.div); + rect = div.getBoundingClientRect(); + div.remove(); + div.style.display = savedDisplay; + } + if (this.rotation % 180 === this.parentRotation % 180) { + this.width = rect.width / parentWidth; + this.height = rect.height / parentHeight; + } else { + this.width = rect.height / parentWidth; + this.height = rect.width / parentHeight; + } + this.fixAndSetPosition(); + } + commit() { + if (!this.isInEditMode()) { + return; + } + super.commit(); + this.disableEditMode(); + const savedText = this.#content; + const newText = this.#content = this.#extractText().trimEnd(); + if (savedText === newText) { + return; + } + const setText = text => { + this.#content = text; + if (!text) { + this.remove(); + return; + } + this.#setContent(); + this._uiManager.rebuild(this); + this.#setEditorDimensions(); + }; + this.addCommands({ + cmd: () => { + setText(newText); + }, + undo: () => { + setText(savedText); + }, + mustExec: false + }); + this.#setEditorDimensions(); + } + shouldGetKeyboardEvents() { + return this.isInEditMode(); + } + enterInEditMode() { + this.enableEditMode(); + this.editorDiv.focus(); + } + dblclick(event) { + this.enterInEditMode(); + } + keydown(event) { + if (event.target === this.div && event.key === "Enter") { + this.enterInEditMode(); + event.preventDefault(); + } + } + editorDivKeydown(event) { + FreeTextEditor._keyboardManager.exec(this, event); + } + editorDivFocus(event) { + this.isEditing = true; + } + editorDivBlur(event) { + this.isEditing = false; + } + editorDivInput(event) { + this.parent.div.classList.toggle("freetextEditing", this.isEmpty()); + } + disableEditing() { + this.editorDiv.setAttribute("role", "comment"); + this.editorDiv.removeAttribute("aria-multiline"); + } + enableEditing() { + this.editorDiv.setAttribute("role", "textbox"); + this.editorDiv.setAttribute("aria-multiline", true); + } + render() { + if (this.div) { + return this.div; + } + let baseX, baseY; + if (this.width) { + baseX = this.x; + baseY = this.y; + } + super.render(); + this.editorDiv = document.createElement("div"); + this.editorDiv.className = "internal"; + this.editorDiv.setAttribute("id", this.#editorDivId); + this.editorDiv.setAttribute("data-l10n-id", "pdfjs-free-text"); + this.enableEditing(); + editor_editor.AnnotationEditor._l10nPromise.get("pdfjs-free-text-default-content").then(msg => this.editorDiv?.setAttribute("default-content", msg)); + this.editorDiv.contentEditable = true; + const { + style + } = this.editorDiv; + style.fontSize = `calc(${this.#fontSize}px * var(--scale-factor))`; + style.color = this.#color; + this.div.append(this.editorDiv); + this.overlayDiv = document.createElement("div"); + this.overlayDiv.classList.add("overlay", "enabled"); + this.div.append(this.overlayDiv); + (0,tools.bindEvents)(this, this.div, ["dblclick", "keydown"]); + if (this.width) { + const [parentWidth, parentHeight] = this.parentDimensions; + if (this.annotationElementId) { + const { + position + } = this.#initialData; + let [tx, ty] = this.getInitialTranslation(); + [tx, ty] = this.pageTranslationToScreen(tx, ty); + const [pageWidth, pageHeight] = this.pageDimensions; + const [pageX, pageY] = this.pageTranslation; + let posX, posY; + switch (this.rotation) { + case 0: + posX = baseX + (position[0] - pageX) / pageWidth; + posY = baseY + this.height - (position[1] - pageY) / pageHeight; + break; + case 90: + posX = baseX + (position[0] - pageX) / pageWidth; + posY = baseY - (position[1] - pageY) / pageHeight; + [tx, ty] = [ty, -tx]; + break; + case 180: + posX = baseX - this.width + (position[0] - pageX) / pageWidth; + posY = baseY - (position[1] - pageY) / pageHeight; + [tx, ty] = [-tx, -ty]; + break; + case 270: + posX = baseX + (position[0] - pageX - this.height * pageHeight) / pageWidth; + posY = baseY + (position[1] - pageY - this.width * pageWidth) / pageHeight; + [tx, ty] = [-ty, tx]; + break; + } + this.setAt(posX * parentWidth, posY * parentHeight, tx, ty); + } else { + this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight); + } + this.#setContent(); + this._isDraggable = true; + this.editorDiv.contentEditable = false; + } else { + this._isDraggable = false; + this.editorDiv.contentEditable = true; + } + return this.div; + } + #setContent() { + this.editorDiv.replaceChildren(); + if (!this.#content) { + return; + } + for (const line of this.#content.split("\n")) { + const div = document.createElement("div"); + div.append(line ? document.createTextNode(line) : document.createElement("br")); + this.editorDiv.append(div); + } + } + get contentDiv() { + return this.editorDiv; + } + static deserialize(data, parent, uiManager) { + let initialData = null; + if (data instanceof annotation_layer.FreeTextAnnotationElement) { + const { + data: { + defaultAppearanceData: { + fontSize, + fontColor + }, + rect, + rotation, + id + }, + textContent, + textPosition, + parent: { + page: { + pageNumber + } + } + } = data; + if (!textContent || textContent.length === 0) { + return null; + } + initialData = data = { + annotationType: util.AnnotationEditorType.FREETEXT, + color: Array.from(fontColor), + fontSize, + value: textContent.join("\n"), + position: textPosition, + pageIndex: pageNumber - 1, + rect, + rotation, + id, + deleted: false + }; + } + const editor = super.deserialize(data, parent, uiManager); + editor.#fontSize = data.fontSize; + editor.#color = util.Util.makeHexColor(...data.color); + editor.#content = data.value; + editor.annotationElementId = data.id || null; + editor.#initialData = initialData; + return editor; + } + serialize(isForCopying = false) { + if (this.isEmpty()) { + return null; + } + if (this.deleted) { + return { + pageIndex: this.pageIndex, + id: this.annotationElementId, + deleted: true + }; + } + const padding = FreeTextEditor._internalPadding * this.parentScale; + const rect = this.getRect(padding, padding); + const color = editor_editor.AnnotationEditor._colorManager.convert(this.isAttachedToDOM ? getComputedStyle(this.editorDiv).color : this.#color); + const serialized = { + annotationType: util.AnnotationEditorType.FREETEXT, + color, + fontSize: this.#fontSize, + value: this.#content, + pageIndex: this.pageIndex, + rect, + rotation: this.rotation, + structTreeParentId: this._structTreeParentId + }; + if (isForCopying) { + return serialized; + } + if (this.annotationElementId && !this.#hasElementChanged(serialized)) { + return null; + } + serialized.id = this.annotationElementId; + return serialized; + } + #hasElementChanged(serialized) { + const { + value, + fontSize, + color, + rect, + pageIndex + } = this.#initialData; + return serialized.value !== value || serialized.fontSize !== fontSize || serialized.rect.some((x, i) => Math.abs(x - rect[i]) >= 1) || serialized.color.some((c, i) => c !== color[i]) || serialized.pageIndex !== pageIndex; + } + #cheatInitialRect(delayed = false) { + if (!this.annotationElementId) { + return; + } + this.#setEditorDimensions(); + if (!delayed && (this.width === 0 || this.height === 0)) { + setTimeout(() => this.#cheatInitialRect(true), 0); + return; + } + const padding = FreeTextEditor._internalPadding * this.parentScale; + this.#initialData.rect = this.getRect(padding, padding); + } +} + +// EXTERNAL MODULE: ./src/display/display_utils.js +var display_utils = __webpack_require__(473); +;// CONCATENATED MODULE: ./src/display/editor/ink.js + + + + + +class InkEditor extends editor_editor.AnnotationEditor { + #baseHeight = 0; + #baseWidth = 0; + #boundCanvasPointermove = this.canvasPointermove.bind(this); + #boundCanvasPointerleave = this.canvasPointerleave.bind(this); + #boundCanvasPointerup = this.canvasPointerup.bind(this); + #boundCanvasPointerdown = this.canvasPointerdown.bind(this); + #canvasContextMenuTimeoutId = null; + #currentPath2D = new Path2D(); + #disableEditing = false; + #hasSomethingToDraw = false; + #isCanvasInitialized = false; + #observer = null; + #realWidth = 0; + #realHeight = 0; + #requestFrameCallback = null; + static _defaultColor = null; + static _defaultOpacity = 1; + static _defaultThickness = 1; + static _type = "ink"; + static _editorType = util.AnnotationEditorType.INK; + constructor(params) { + super({ + ...params, + name: "inkEditor" + }); + this.color = params.color || null; + this.thickness = params.thickness || null; + this.opacity = params.opacity || null; + this.paths = []; + this.bezierPath2D = []; + this.allRawPaths = []; + this.currentPath = []; + this.scaleFactor = 1; + this.translationX = this.translationY = 0; + this.x = 0; + this.y = 0; + this._willKeepAspectRatio = true; + } + static initialize(l10n) { + editor_editor.AnnotationEditor.initialize(l10n); + } + static updateDefaultParams(type, value) { + switch (type) { + case util.AnnotationEditorParamsType.INK_THICKNESS: + InkEditor._defaultThickness = value; + break; + case util.AnnotationEditorParamsType.INK_COLOR: + InkEditor._defaultColor = value; + break; + case util.AnnotationEditorParamsType.INK_OPACITY: + InkEditor._defaultOpacity = value / 100; + break; + } + } + updateParams(type, value) { + switch (type) { + case util.AnnotationEditorParamsType.INK_THICKNESS: + this.#updateThickness(value); + break; + case util.AnnotationEditorParamsType.INK_COLOR: + this.#updateColor(value); + break; + case util.AnnotationEditorParamsType.INK_OPACITY: + this.#updateOpacity(value); + break; + } + } + static get defaultPropertiesToUpdate() { + return [[util.AnnotationEditorParamsType.INK_THICKNESS, InkEditor._defaultThickness], [util.AnnotationEditorParamsType.INK_COLOR, InkEditor._defaultColor || editor_editor.AnnotationEditor._defaultLineColor], [util.AnnotationEditorParamsType.INK_OPACITY, Math.round(InkEditor._defaultOpacity * 100)]]; + } + get propertiesToUpdate() { + return [[util.AnnotationEditorParamsType.INK_THICKNESS, this.thickness || InkEditor._defaultThickness], [util.AnnotationEditorParamsType.INK_COLOR, this.color || InkEditor._defaultColor || editor_editor.AnnotationEditor._defaultLineColor], [util.AnnotationEditorParamsType.INK_OPACITY, Math.round(100 * (this.opacity ?? InkEditor._defaultOpacity))]]; + } + #updateThickness(thickness) { + const savedThickness = this.thickness; + this.addCommands({ + cmd: () => { + this.thickness = thickness; + this.#fitToContent(); + }, + undo: () => { + this.thickness = savedThickness; + this.#fitToContent(); + }, + mustExec: true, + type: util.AnnotationEditorParamsType.INK_THICKNESS, + overwriteIfSameType: true, + keepUndo: true + }); + } + #updateColor(color) { + const savedColor = this.color; + this.addCommands({ + cmd: () => { + this.color = color; + this.#redraw(); + }, + undo: () => { + this.color = savedColor; + this.#redraw(); + }, + mustExec: true, + type: util.AnnotationEditorParamsType.INK_COLOR, + overwriteIfSameType: true, + keepUndo: true + }); + } + #updateOpacity(opacity) { + opacity /= 100; + const savedOpacity = this.opacity; + this.addCommands({ + cmd: () => { + this.opacity = opacity; + this.#redraw(); + }, + undo: () => { + this.opacity = savedOpacity; + this.#redraw(); + }, + mustExec: true, + type: util.AnnotationEditorParamsType.INK_OPACITY, + overwriteIfSameType: true, + keepUndo: true + }); + } + rebuild() { + if (!this.parent) { + return; + } + super.rebuild(); + if (this.div === null) { + return; + } + if (!this.canvas) { + this.#createCanvas(); + this.#createObserver(); + } + if (!this.isAttachedToDOM) { + this.parent.add(this); + this.#setCanvasDims(); + } + this.#fitToContent(); + } + remove() { + if (this.canvas === null) { + return; + } + if (!this.isEmpty()) { + this.commit(); + } + this.canvas.width = this.canvas.height = 0; + this.canvas.remove(); + this.canvas = null; + if (this.#canvasContextMenuTimeoutId) { + clearTimeout(this.#canvasContextMenuTimeoutId); + this.#canvasContextMenuTimeoutId = null; + } + this.#observer.disconnect(); + this.#observer = null; + super.remove(); + } + setParent(parent) { + if (!this.parent && parent) { + this._uiManager.removeShouldRescale(this); + } else if (this.parent && parent === null) { + this._uiManager.addShouldRescale(this); + } + super.setParent(parent); + } + onScaleChanging() { + const [parentWidth, parentHeight] = this.parentDimensions; + const width = this.width * parentWidth; + const height = this.height * parentHeight; + this.setDimensions(width, height); + } + enableEditMode() { + if (this.#disableEditing || this.canvas === null) { + return; + } + super.enableEditMode(); + this._isDraggable = false; + this.canvas.addEventListener("pointerdown", this.#boundCanvasPointerdown); + } + disableEditMode() { + if (!this.isInEditMode() || this.canvas === null) { + return; + } + super.disableEditMode(); + this._isDraggable = !this.isEmpty(); + this.div.classList.remove("editing"); + this.canvas.removeEventListener("pointerdown", this.#boundCanvasPointerdown); + } + onceAdded() { + this._isDraggable = !this.isEmpty(); + } + isEmpty() { + return this.paths.length === 0 || this.paths.length === 1 && this.paths[0].length === 0; + } + #getInitialBBox() { + const { + parentRotation, + parentDimensions: [width, height] + } = this; + switch (parentRotation) { + case 90: + return [0, height, height, width]; + case 180: + return [width, height, width, height]; + case 270: + return [width, 0, height, width]; + default: + return [0, 0, width, height]; + } + } + #setStroke() { + const { + ctx, + color, + opacity, + thickness, + parentScale, + scaleFactor + } = this; + ctx.lineWidth = thickness * parentScale / scaleFactor; + ctx.lineCap = "round"; + ctx.lineJoin = "round"; + ctx.miterLimit = 10; + ctx.strokeStyle = `${color}${(0,tools.opacityToHex)(opacity)}`; + } + #startDrawing(x, y) { + this.canvas.addEventListener("contextmenu", display_utils.noContextMenu); + this.canvas.addEventListener("pointerleave", this.#boundCanvasPointerleave); + this.canvas.addEventListener("pointermove", this.#boundCanvasPointermove); + this.canvas.addEventListener("pointerup", this.#boundCanvasPointerup); + this.canvas.removeEventListener("pointerdown", this.#boundCanvasPointerdown); + this.isEditing = true; + if (!this.#isCanvasInitialized) { + this.#isCanvasInitialized = true; + this.#setCanvasDims(); + this.thickness ||= InkEditor._defaultThickness; + this.color ||= InkEditor._defaultColor || editor_editor.AnnotationEditor._defaultLineColor; + this.opacity ??= InkEditor._defaultOpacity; + } + this.currentPath.push([x, y]); + this.#hasSomethingToDraw = false; + this.#setStroke(); + this.#requestFrameCallback = () => { + this.#drawPoints(); + if (this.#requestFrameCallback) { + window.requestAnimationFrame(this.#requestFrameCallback); + } + }; + window.requestAnimationFrame(this.#requestFrameCallback); + } + #draw(x, y) { + const [lastX, lastY] = this.currentPath.at(-1); + if (this.currentPath.length > 1 && x === lastX && y === lastY) { + return; + } + const currentPath = this.currentPath; + let path2D = this.#currentPath2D; + currentPath.push([x, y]); + this.#hasSomethingToDraw = true; + if (currentPath.length <= 2) { + path2D.moveTo(...currentPath[0]); + path2D.lineTo(x, y); + return; + } + if (currentPath.length === 3) { + this.#currentPath2D = path2D = new Path2D(); + path2D.moveTo(...currentPath[0]); + } + this.#makeBezierCurve(path2D, ...currentPath.at(-3), ...currentPath.at(-2), x, y); + } + #endPath() { + if (this.currentPath.length === 0) { + return; + } + const lastPoint = this.currentPath.at(-1); + this.#currentPath2D.lineTo(...lastPoint); + } + #stopDrawing(x, y) { + this.#requestFrameCallback = null; + x = Math.min(Math.max(x, 0), this.canvas.width); + y = Math.min(Math.max(y, 0), this.canvas.height); + this.#draw(x, y); + this.#endPath(); + let bezier; + if (this.currentPath.length !== 1) { + bezier = this.#generateBezierPoints(); + } else { + const xy = [x, y]; + bezier = [[xy, xy.slice(), xy.slice(), xy]]; + } + const path2D = this.#currentPath2D; + const currentPath = this.currentPath; + this.currentPath = []; + this.#currentPath2D = new Path2D(); + const cmd = () => { + this.allRawPaths.push(currentPath); + this.paths.push(bezier); + this.bezierPath2D.push(path2D); + this.rebuild(); + }; + const undo = () => { + this.allRawPaths.pop(); + this.paths.pop(); + this.bezierPath2D.pop(); + if (this.paths.length === 0) { + this.remove(); + } else { + if (!this.canvas) { + this.#createCanvas(); + this.#createObserver(); + } + this.#fitToContent(); + } + }; + this.addCommands({ + cmd, + undo, + mustExec: true + }); + } + #drawPoints() { + if (!this.#hasSomethingToDraw) { + return; + } + this.#hasSomethingToDraw = false; + const thickness = Math.ceil(this.thickness * this.parentScale); + const lastPoints = this.currentPath.slice(-3); + const x = lastPoints.map(xy => xy[0]); + const y = lastPoints.map(xy => xy[1]); + const xMin = Math.min(...x) - thickness; + const xMax = Math.max(...x) + thickness; + const yMin = Math.min(...y) - thickness; + const yMax = Math.max(...y) + thickness; + const { + ctx + } = this; + ctx.save(); + ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); + for (const path of this.bezierPath2D) { + ctx.stroke(path); + } + ctx.stroke(this.#currentPath2D); + ctx.restore(); + } + #makeBezierCurve(path2D, x0, y0, x1, y1, x2, y2) { + const prevX = (x0 + x1) / 2; + const prevY = (y0 + y1) / 2; + const x3 = (x1 + x2) / 2; + const y3 = (y1 + y2) / 2; + path2D.bezierCurveTo(prevX + 2 * (x1 - prevX) / 3, prevY + 2 * (y1 - prevY) / 3, x3 + 2 * (x1 - x3) / 3, y3 + 2 * (y1 - y3) / 3, x3, y3); + } + #generateBezierPoints() { + const path = this.currentPath; + if (path.length <= 2) { + return [[path[0], path[0], path.at(-1), path.at(-1)]]; + } + const bezierPoints = []; + let i; + let [x0, y0] = path[0]; + for (i = 1; i < path.length - 2; i++) { + const [x1, y1] = path[i]; + const [x2, y2] = path[i + 1]; + const x3 = (x1 + x2) / 2; + const y3 = (y1 + y2) / 2; + const control1 = [x0 + 2 * (x1 - x0) / 3, y0 + 2 * (y1 - y0) / 3]; + const control2 = [x3 + 2 * (x1 - x3) / 3, y3 + 2 * (y1 - y3) / 3]; + bezierPoints.push([[x0, y0], control1, control2, [x3, y3]]); + [x0, y0] = [x3, y3]; + } + const [x1, y1] = path[i]; + const [x2, y2] = path[i + 1]; + const control1 = [x0 + 2 * (x1 - x0) / 3, y0 + 2 * (y1 - y0) / 3]; + const control2 = [x2 + 2 * (x1 - x2) / 3, y2 + 2 * (y1 - y2) / 3]; + bezierPoints.push([[x0, y0], control1, control2, [x2, y2]]); + return bezierPoints; + } + #redraw() { + if (this.isEmpty()) { + this.#updateTransform(); + return; + } + this.#setStroke(); + const { + canvas, + ctx + } = this; + ctx.setTransform(1, 0, 0, 1, 0, 0); + ctx.clearRect(0, 0, canvas.width, canvas.height); + this.#updateTransform(); + for (const path of this.bezierPath2D) { + ctx.stroke(path); + } + } + commit() { + if (this.#disableEditing) { + return; + } + super.commit(); + this.isEditing = false; + this.disableEditMode(); + this.setInForeground(); + this.#disableEditing = true; + this.div.classList.add("disabled"); + this.#fitToContent(true); + this.makeResizable(); + this.parent.addInkEditorIfNeeded(true); + this.moveInDOM(); + this.div.focus({ + preventScroll: true + }); + } + focusin(event) { + if (!this._focusEventsAllowed) { + return; + } + super.focusin(event); + this.enableEditMode(); + } + canvasPointerdown(event) { + if (event.button !== 0 || !this.isInEditMode() || this.#disableEditing) { + return; + } + this.setInForeground(); + event.preventDefault(); + if (event.type !== "mouse") { + this.div.focus(); + } + this.#startDrawing(event.offsetX, event.offsetY); + } + canvasPointermove(event) { + event.preventDefault(); + this.#draw(event.offsetX, event.offsetY); + } + canvasPointerup(event) { + event.preventDefault(); + this.#endDrawing(event); + } + canvasPointerleave(event) { + this.#endDrawing(event); + } + #endDrawing(event) { + this.canvas.removeEventListener("pointerleave", this.#boundCanvasPointerleave); + this.canvas.removeEventListener("pointermove", this.#boundCanvasPointermove); + this.canvas.removeEventListener("pointerup", this.#boundCanvasPointerup); + this.canvas.addEventListener("pointerdown", this.#boundCanvasPointerdown); + if (this.#canvasContextMenuTimeoutId) { + clearTimeout(this.#canvasContextMenuTimeoutId); + } + this.#canvasContextMenuTimeoutId = setTimeout(() => { + this.#canvasContextMenuTimeoutId = null; + this.canvas.removeEventListener("contextmenu", display_utils.noContextMenu); + }, 10); + this.#stopDrawing(event.offsetX, event.offsetY); + this.addToAnnotationStorage(); + this.setInBackground(); + } + #createCanvas() { + this.canvas = document.createElement("canvas"); + this.canvas.width = this.canvas.height = 0; + this.canvas.className = "inkEditorCanvas"; + this.canvas.setAttribute("data-l10n-id", "pdfjs-ink-canvas"); + this.div.append(this.canvas); + this.ctx = this.canvas.getContext("2d"); + } + #createObserver() { + this.#observer = new ResizeObserver(entries => { + const rect = entries[0].contentRect; + if (rect.width && rect.height) { + this.setDimensions(rect.width, rect.height); + } + }); + this.#observer.observe(this.div); + } + get isResizable() { + return !this.isEmpty() && this.#disableEditing; + } + render() { + if (this.div) { + return this.div; + } + let baseX, baseY; + if (this.width) { + baseX = this.x; + baseY = this.y; + } + super.render(); + this.div.setAttribute("data-l10n-id", "pdfjs-ink"); + const [x, y, w, h] = this.#getInitialBBox(); + this.setAt(x, y, 0, 0); + this.setDims(w, h); + this.#createCanvas(); + if (this.width) { + const [parentWidth, parentHeight] = this.parentDimensions; + this.setAspectRatio(this.width * parentWidth, this.height * parentHeight); + this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight); + this.#isCanvasInitialized = true; + this.#setCanvasDims(); + this.setDims(this.width * parentWidth, this.height * parentHeight); + this.#redraw(); + this.div.classList.add("disabled"); + } else { + this.div.classList.add("editing"); + this.enableEditMode(); + } + this.#createObserver(); + return this.div; + } + #setCanvasDims() { + if (!this.#isCanvasInitialized) { + return; + } + const [parentWidth, parentHeight] = this.parentDimensions; + this.canvas.width = Math.ceil(this.width * parentWidth); + this.canvas.height = Math.ceil(this.height * parentHeight); + this.#updateTransform(); + } + setDimensions(width, height) { + const roundedWidth = Math.round(width); + const roundedHeight = Math.round(height); + if (this.#realWidth === roundedWidth && this.#realHeight === roundedHeight) { + return; + } + this.#realWidth = roundedWidth; + this.#realHeight = roundedHeight; + this.canvas.style.visibility = "hidden"; + const [parentWidth, parentHeight] = this.parentDimensions; + this.width = width / parentWidth; + this.height = height / parentHeight; + this.fixAndSetPosition(); + if (this.#disableEditing) { + this.#setScaleFactor(width, height); + } + this.#setCanvasDims(); + this.#redraw(); + this.canvas.style.visibility = "visible"; + this.fixDims(); + } + #setScaleFactor(width, height) { + const padding = this.#getPadding(); + const scaleFactorW = (width - padding) / this.#baseWidth; + const scaleFactorH = (height - padding) / this.#baseHeight; + this.scaleFactor = Math.min(scaleFactorW, scaleFactorH); + } + #updateTransform() { + const padding = this.#getPadding() / 2; + this.ctx.setTransform(this.scaleFactor, 0, 0, this.scaleFactor, this.translationX * this.scaleFactor + padding, this.translationY * this.scaleFactor + padding); + } + static #buildPath2D(bezier) { + const path2D = new Path2D(); + for (let i = 0, ii = bezier.length; i < ii; i++) { + const [first, control1, control2, second] = bezier[i]; + if (i === 0) { + path2D.moveTo(...first); + } + path2D.bezierCurveTo(control1[0], control1[1], control2[0], control2[1], second[0], second[1]); + } + return path2D; + } + static #toPDFCoordinates(points, rect, rotation) { + const [blX, blY, trX, trY] = rect; + switch (rotation) { + case 0: + for (let i = 0, ii = points.length; i < ii; i += 2) { + points[i] += blX; + points[i + 1] = trY - points[i + 1]; + } + break; + case 90: + for (let i = 0, ii = points.length; i < ii; i += 2) { + const x = points[i]; + points[i] = points[i + 1] + blX; + points[i + 1] = x + blY; + } + break; + case 180: + for (let i = 0, ii = points.length; i < ii; i += 2) { + points[i] = trX - points[i]; + points[i + 1] += blY; + } + break; + case 270: + for (let i = 0, ii = points.length; i < ii; i += 2) { + const x = points[i]; + points[i] = trX - points[i + 1]; + points[i + 1] = trY - x; + } + break; + default: + throw new Error("Invalid rotation"); + } + return points; + } + static #fromPDFCoordinates(points, rect, rotation) { + const [blX, blY, trX, trY] = rect; + switch (rotation) { + case 0: + for (let i = 0, ii = points.length; i < ii; i += 2) { + points[i] -= blX; + points[i + 1] = trY - points[i + 1]; + } + break; + case 90: + for (let i = 0, ii = points.length; i < ii; i += 2) { + const x = points[i]; + points[i] = points[i + 1] - blY; + points[i + 1] = x - blX; + } + break; + case 180: + for (let i = 0, ii = points.length; i < ii; i += 2) { + points[i] = trX - points[i]; + points[i + 1] -= blY; + } + break; + case 270: + for (let i = 0, ii = points.length; i < ii; i += 2) { + const x = points[i]; + points[i] = trY - points[i + 1]; + points[i + 1] = trX - x; + } + break; + default: + throw new Error("Invalid rotation"); + } + return points; + } + #serializePaths(s, tx, ty, rect) { + const paths = []; + const padding = this.thickness / 2; + const shiftX = s * tx + padding; + const shiftY = s * ty + padding; + for (const bezier of this.paths) { + const buffer = []; + const points = []; + for (let j = 0, jj = bezier.length; j < jj; j++) { + const [first, control1, control2, second] = bezier[j]; + const p10 = s * first[0] + shiftX; + const p11 = s * first[1] + shiftY; + const p20 = s * control1[0] + shiftX; + const p21 = s * control1[1] + shiftY; + const p30 = s * control2[0] + shiftX; + const p31 = s * control2[1] + shiftY; + const p40 = s * second[0] + shiftX; + const p41 = s * second[1] + shiftY; + if (j === 0) { + buffer.push(p10, p11); + points.push(p10, p11); + } + buffer.push(p20, p21, p30, p31, p40, p41); + points.push(p20, p21); + if (j === jj - 1) { + points.push(p40, p41); + } + } + paths.push({ + bezier: InkEditor.#toPDFCoordinates(buffer, rect, this.rotation), + points: InkEditor.#toPDFCoordinates(points, rect, this.rotation) + }); + } + return paths; + } + #getBbox() { + let xMin = Infinity; + let xMax = -Infinity; + let yMin = Infinity; + let yMax = -Infinity; + for (const path of this.paths) { + for (const [first, control1, control2, second] of path) { + const bbox = util.Util.bezierBoundingBox(...first, ...control1, ...control2, ...second); + xMin = Math.min(xMin, bbox[0]); + yMin = Math.min(yMin, bbox[1]); + xMax = Math.max(xMax, bbox[2]); + yMax = Math.max(yMax, bbox[3]); + } + } + return [xMin, yMin, xMax, yMax]; + } + #getPadding() { + return this.#disableEditing ? Math.ceil(this.thickness * this.parentScale) : 0; + } + #fitToContent(firstTime = false) { + if (this.isEmpty()) { + return; + } + if (!this.#disableEditing) { + this.#redraw(); + return; + } + const bbox = this.#getBbox(); + const padding = this.#getPadding(); + this.#baseWidth = Math.max(editor_editor.AnnotationEditor.MIN_SIZE, bbox[2] - bbox[0]); + this.#baseHeight = Math.max(editor_editor.AnnotationEditor.MIN_SIZE, bbox[3] - bbox[1]); + const width = Math.ceil(padding + this.#baseWidth * this.scaleFactor); + const height = Math.ceil(padding + this.#baseHeight * this.scaleFactor); + const [parentWidth, parentHeight] = this.parentDimensions; + this.width = width / parentWidth; + this.height = height / parentHeight; + this.setAspectRatio(width, height); + const prevTranslationX = this.translationX; + const prevTranslationY = this.translationY; + this.translationX = -bbox[0]; + this.translationY = -bbox[1]; + this.#setCanvasDims(); + this.#redraw(); + this.#realWidth = width; + this.#realHeight = height; + this.setDims(width, height); + const unscaledPadding = firstTime ? padding / this.scaleFactor / 2 : 0; + this.translate(prevTranslationX - this.translationX - unscaledPadding, prevTranslationY - this.translationY - unscaledPadding); + } + static deserialize(data, parent, uiManager) { + if (data instanceof annotation_layer.InkAnnotationElement) { + return null; + } + const editor = super.deserialize(data, parent, uiManager); + editor.thickness = data.thickness; + editor.color = util.Util.makeHexColor(...data.color); + editor.opacity = data.opacity; + const [pageWidth, pageHeight] = editor.pageDimensions; + const width = editor.width * pageWidth; + const height = editor.height * pageHeight; + const scaleFactor = editor.parentScale; + const padding = data.thickness / 2; + editor.#disableEditing = true; + editor.#realWidth = Math.round(width); + editor.#realHeight = Math.round(height); + const { + paths, + rect, + rotation + } = data; + for (let { + bezier + } of paths) { + bezier = InkEditor.#fromPDFCoordinates(bezier, rect, rotation); + const path = []; + editor.paths.push(path); + let p0 = scaleFactor * (bezier[0] - padding); + let p1 = scaleFactor * (bezier[1] - padding); + for (let i = 2, ii = bezier.length; i < ii; i += 6) { + const p10 = scaleFactor * (bezier[i] - padding); + const p11 = scaleFactor * (bezier[i + 1] - padding); + const p20 = scaleFactor * (bezier[i + 2] - padding); + const p21 = scaleFactor * (bezier[i + 3] - padding); + const p30 = scaleFactor * (bezier[i + 4] - padding); + const p31 = scaleFactor * (bezier[i + 5] - padding); + path.push([[p0, p1], [p10, p11], [p20, p21], [p30, p31]]); + p0 = p30; + p1 = p31; + } + const path2D = this.#buildPath2D(path); + editor.bezierPath2D.push(path2D); + } + const bbox = editor.#getBbox(); + editor.#baseWidth = Math.max(editor_editor.AnnotationEditor.MIN_SIZE, bbox[2] - bbox[0]); + editor.#baseHeight = Math.max(editor_editor.AnnotationEditor.MIN_SIZE, bbox[3] - bbox[1]); + editor.#setScaleFactor(width, height); + return editor; + } + serialize() { + if (this.isEmpty()) { + return null; + } + const rect = this.getRect(0, 0); + const color = editor_editor.AnnotationEditor._colorManager.convert(this.ctx.strokeStyle); + return { + annotationType: util.AnnotationEditorType.INK, + color, + thickness: this.thickness, + opacity: this.opacity, + paths: this.#serializePaths(this.scaleFactor / this.parentScale, this.translationX, this.translationY, rect), + pageIndex: this.pageIndex, + rect, + rotation: this.rotation, + structTreeParentId: this._structTreeParentId + }; + } +} + +;// CONCATENATED MODULE: ./src/display/editor/stamp.js + + + + +class StampEditor extends editor_editor.AnnotationEditor { + #bitmap = null; + #bitmapId = null; + #bitmapPromise = null; + #bitmapUrl = null; + #bitmapFile = null; + #bitmapFileName = ""; + #canvas = null; + #observer = null; + #resizeTimeoutId = null; + #isSvg = false; + #hasBeenAddedInUndoStack = false; + static _type = "stamp"; + static _editorType = util.AnnotationEditorType.STAMP; + constructor(params) { + super({ + ...params, + name: "stampEditor" + }); + this.#bitmapUrl = params.bitmapUrl; + this.#bitmapFile = params.bitmapFile; + } + static initialize(l10n) { + editor_editor.AnnotationEditor.initialize(l10n); + } + static get supportedTypes() { + const types = ["apng", "avif", "bmp", "gif", "jpeg", "png", "svg+xml", "webp", "x-icon"]; + return (0,util.shadow)(this, "supportedTypes", types.map(type => `image/${type}`)); + } + static get supportedTypesStr() { + return (0,util.shadow)(this, "supportedTypesStr", this.supportedTypes.join(",")); + } + static isHandlingMimeForPasting(mime) { + return this.supportedTypes.includes(mime); + } + static paste(item, parent) { + parent.pasteEditor(util.AnnotationEditorType.STAMP, { + bitmapFile: item.getAsFile() + }); + } + #getBitmapFetched(data, fromId = false) { + if (!data) { + this.remove(); + return; + } + this.#bitmap = data.bitmap; + if (!fromId) { + this.#bitmapId = data.id; + this.#isSvg = data.isSvg; + } + if (data.file) { + this.#bitmapFileName = data.file.name; + } + this.#createCanvas(); + } + #getBitmapDone() { + this.#bitmapPromise = null; + this._uiManager.enableWaiting(false); + if (this.#canvas) { + this.div.focus(); + } + } + #getBitmap() { + if (this.#bitmapId) { + this._uiManager.enableWaiting(true); + this._uiManager.imageManager.getFromId(this.#bitmapId).then(data => this.#getBitmapFetched(data, true)).finally(() => this.#getBitmapDone()); + return; + } + if (this.#bitmapUrl) { + const url = this.#bitmapUrl; + this.#bitmapUrl = null; + this._uiManager.enableWaiting(true); + this.#bitmapPromise = this._uiManager.imageManager.getFromUrl(url).then(data => this.#getBitmapFetched(data)).finally(() => this.#getBitmapDone()); + return; + } + if (this.#bitmapFile) { + const file = this.#bitmapFile; + this.#bitmapFile = null; + this._uiManager.enableWaiting(true); + this.#bitmapPromise = this._uiManager.imageManager.getFromFile(file).then(data => this.#getBitmapFetched(data)).finally(() => this.#getBitmapDone()); + return; + } + const input = document.createElement("input"); + input.type = "file"; + input.accept = StampEditor.supportedTypesStr; + this.#bitmapPromise = new Promise(resolve => { + input.addEventListener("change", async () => { + if (!input.files || input.files.length === 0) { + this.remove(); + } else { + this._uiManager.enableWaiting(true); + const data = await this._uiManager.imageManager.getFromFile(input.files[0]); + this.#getBitmapFetched(data); + } + resolve(); + }); + input.addEventListener("cancel", () => { + this.remove(); + resolve(); + }); + }).finally(() => this.#getBitmapDone()); + input.click(); + } + remove() { + if (this.#bitmapId) { + this.#bitmap = null; + this._uiManager.imageManager.deleteId(this.#bitmapId); + this.#canvas?.remove(); + this.#canvas = null; + this.#observer?.disconnect(); + this.#observer = null; + if (this.#resizeTimeoutId) { + clearTimeout(this.#resizeTimeoutId); + this.#resizeTimeoutId = null; + } + } + super.remove(); + } + rebuild() { + if (!this.parent) { + if (this.#bitmapId) { + this.#getBitmap(); + } + return; + } + super.rebuild(); + if (this.div === null) { + return; + } + if (this.#bitmapId) { + this.#getBitmap(); + } + if (!this.isAttachedToDOM) { + this.parent.add(this); + } + } + onceAdded() { + this._isDraggable = true; + this.div.focus(); + } + isEmpty() { + return !(this.#bitmapPromise || this.#bitmap || this.#bitmapUrl || this.#bitmapFile); + } + get isResizable() { + return true; + } + render() { + if (this.div) { + return this.div; + } + let baseX, baseY; + if (this.width) { + baseX = this.x; + baseY = this.y; + } + super.render(); + this.div.hidden = true; + if (this.#bitmap) { + this.#createCanvas(); + } else { + this.#getBitmap(); + } + if (this.width) { + const [parentWidth, parentHeight] = this.parentDimensions; + this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight); + } + return this.div; + } + #createCanvas() { + const { + div + } = this; + let { + width, + height + } = this.#bitmap; + const [pageWidth, pageHeight] = this.pageDimensions; + const MAX_RATIO = 0.75; + if (this.width) { + width = this.width * pageWidth; + height = this.height * pageHeight; + } else if (width > MAX_RATIO * pageWidth || height > MAX_RATIO * pageHeight) { + const factor = Math.min(MAX_RATIO * pageWidth / width, MAX_RATIO * pageHeight / height); + width *= factor; + height *= factor; + } + const [parentWidth, parentHeight] = this.parentDimensions; + this.setDims(width * parentWidth / pageWidth, height * parentHeight / pageHeight); + this._uiManager.enableWaiting(false); + const canvas = this.#canvas = document.createElement("canvas"); + div.append(canvas); + div.hidden = false; + this.#drawBitmap(width, height); + this.#createObserver(); + if (!this.#hasBeenAddedInUndoStack) { + this.parent.addUndoableEditor(this); + this.#hasBeenAddedInUndoStack = true; + } + this._uiManager._eventBus.dispatch("reporttelemetry", { + source: this, + details: { + type: "editing", + subtype: this.editorType, + data: { + action: "inserted_image" + } + } + }); + this.addAltTextButton(); + if (this.#bitmapFileName) { + canvas.setAttribute("aria-label", this.#bitmapFileName); + } + } + #setDimensions(width, height) { + const [parentWidth, parentHeight] = this.parentDimensions; + this.width = width / parentWidth; + this.height = height / parentHeight; + this.setDims(width, height); + if (this._initialOptions?.isCentered) { + this.center(); + } else { + this.fixAndSetPosition(); + } + this._initialOptions = null; + if (this.#resizeTimeoutId !== null) { + clearTimeout(this.#resizeTimeoutId); + } + const TIME_TO_WAIT = 200; + this.#resizeTimeoutId = setTimeout(() => { + this.#resizeTimeoutId = null; + this.#drawBitmap(width, height); + }, TIME_TO_WAIT); + } + #scaleBitmap(width, height) { + const { + width: bitmapWidth, + height: bitmapHeight + } = this.#bitmap; + let newWidth = bitmapWidth; + let newHeight = bitmapHeight; + let bitmap = this.#bitmap; + while (newWidth > 2 * width || newHeight > 2 * height) { + const prevWidth = newWidth; + const prevHeight = newHeight; + if (newWidth > 2 * width) { + newWidth = newWidth >= 16384 ? Math.floor(newWidth / 2) - 1 : Math.ceil(newWidth / 2); + } + if (newHeight > 2 * height) { + newHeight = newHeight >= 16384 ? Math.floor(newHeight / 2) - 1 : Math.ceil(newHeight / 2); + } + const offscreen = new OffscreenCanvas(newWidth, newHeight); + const ctx = offscreen.getContext("2d"); + ctx.drawImage(bitmap, 0, 0, prevWidth, prevHeight, 0, 0, newWidth, newHeight); + bitmap = offscreen.transferToImageBitmap(); + } + return bitmap; + } + #drawBitmap(width, height) { + width = Math.ceil(width); + height = Math.ceil(height); + const canvas = this.#canvas; + if (!canvas || canvas.width === width && canvas.height === height) { + return; + } + canvas.width = width; + canvas.height = height; + const bitmap = this.#isSvg ? this.#bitmap : this.#scaleBitmap(width, height); + const ctx = canvas.getContext("2d"); + ctx.filter = this._uiManager.hcmFilter; + ctx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, width, height); + } + getImageForAltText() { + return this.#canvas; + } + #serializeBitmap(toUrl) { + if (toUrl) { + if (this.#isSvg) { + const url = this._uiManager.imageManager.getSvgUrl(this.#bitmapId); + if (url) { + return url; + } + } + const canvas = document.createElement("canvas"); + ({ + width: canvas.width, + height: canvas.height + } = this.#bitmap); + const ctx = canvas.getContext("2d"); + ctx.drawImage(this.#bitmap, 0, 0); + return canvas.toDataURL(); + } + if (this.#isSvg) { + const [pageWidth, pageHeight] = this.pageDimensions; + const width = Math.round(this.width * pageWidth * display_utils.PixelsPerInch.PDF_TO_CSS_UNITS); + const height = Math.round(this.height * pageHeight * display_utils.PixelsPerInch.PDF_TO_CSS_UNITS); + const offscreen = new OffscreenCanvas(width, height); + const ctx = offscreen.getContext("2d"); + ctx.drawImage(this.#bitmap, 0, 0, this.#bitmap.width, this.#bitmap.height, 0, 0, width, height); + return offscreen.transferToImageBitmap(); + } + return structuredClone(this.#bitmap); + } + #createObserver() { + this.#observer = new ResizeObserver(entries => { + const rect = entries[0].contentRect; + if (rect.width && rect.height) { + this.#setDimensions(rect.width, rect.height); + } + }); + this.#observer.observe(this.div); + } + static deserialize(data, parent, uiManager) { + if (data instanceof annotation_layer.StampAnnotationElement) { + return null; + } + const editor = super.deserialize(data, parent, uiManager); + const { + rect, + bitmapUrl, + bitmapId, + isSvg, + accessibilityData + } = data; + if (bitmapId && uiManager.imageManager.isValidId(bitmapId)) { + editor.#bitmapId = bitmapId; + } else { + editor.#bitmapUrl = bitmapUrl; + } + editor.#isSvg = isSvg; + const [parentWidth, parentHeight] = editor.pageDimensions; + editor.width = (rect[2] - rect[0]) / parentWidth; + editor.height = (rect[3] - rect[1]) / parentHeight; + if (accessibilityData) { + editor.altTextData = accessibilityData; + } + return editor; + } + serialize(isForCopying = false, context = null) { + if (this.isEmpty()) { + return null; + } + const serialized = { + annotationType: util.AnnotationEditorType.STAMP, + bitmapId: this.#bitmapId, + pageIndex: this.pageIndex, + rect: this.getRect(0, 0), + rotation: this.rotation, + isSvg: this.#isSvg, + structTreeParentId: this._structTreeParentId + }; + if (isForCopying) { + serialized.bitmapUrl = this.#serializeBitmap(true); + serialized.accessibilityData = this.altTextData; + return serialized; + } + const { + decorative, + altText + } = this.altTextData; + if (!decorative && altText) { + serialized.accessibilityData = { + type: "Figure", + alt: altText + }; + } + if (context === null) { + return serialized; + } + context.stamps ||= new Map(); + const area = this.#isSvg ? (serialized.rect[2] - serialized.rect[0]) * (serialized.rect[3] - serialized.rect[1]) : null; + if (!context.stamps.has(this.#bitmapId)) { + context.stamps.set(this.#bitmapId, { + area, + serialized + }); + serialized.bitmap = this.#serializeBitmap(false); + } else if (this.#isSvg) { + const prevData = context.stamps.get(this.#bitmapId); + if (area > prevData.area) { + prevData.area = area; + prevData.serialized.bitmap.close(); + prevData.serialized.bitmap = this.#serializeBitmap(false); + } + } + return serialized; + } +} + +;// CONCATENATED MODULE: ./src/display/editor/annotation_editor_layer.js + + + + + + +class AnnotationEditorLayer { + #accessibilityManager; + #allowClick = false; + #annotationLayer = null; + #boundPointerup = this.pointerup.bind(this); + #boundPointerdown = this.pointerdown.bind(this); + #editorFocusTimeoutId = null; + #editors = new Map(); + #hadPointerDown = false; + #isCleaningUp = false; + #isDisabling = false; + #uiManager; + static _initialized = false; + static #editorTypes = new Map([FreeTextEditor, InkEditor, StampEditor].map(type => [type._editorType, type])); + constructor({ + uiManager, + pageIndex, + div, + accessibilityManager, + annotationLayer, + viewport, + l10n + }) { + const editorTypes = [...AnnotationEditorLayer.#editorTypes.values()]; + if (!AnnotationEditorLayer._initialized) { + AnnotationEditorLayer._initialized = true; + for (const editorType of editorTypes) { + editorType.initialize(l10n); + } + } + uiManager.registerEditorTypes(editorTypes); + this.#uiManager = uiManager; + this.pageIndex = pageIndex; + this.div = div; + this.#accessibilityManager = accessibilityManager; + this.#annotationLayer = annotationLayer; + this.viewport = viewport; + this.#uiManager.addLayer(this); + } + get isEmpty() { + return this.#editors.size === 0; + } + updateToolbar(mode) { + this.#uiManager.updateToolbar(mode); + } + updateMode(mode = this.#uiManager.getMode()) { + this.#cleanup(); + if (mode === util.AnnotationEditorType.INK) { + this.addInkEditorIfNeeded(false); + this.disableClick(); + } else { + this.enableClick(); + } + if (mode !== util.AnnotationEditorType.NONE) { + const { + classList + } = this.div; + for (const editorType of AnnotationEditorLayer.#editorTypes.values()) { + classList.toggle(`${editorType._type}Editing`, mode === editorType._editorType); + } + this.div.hidden = false; + } + } + addInkEditorIfNeeded(isCommitting) { + if (!isCommitting && this.#uiManager.getMode() !== util.AnnotationEditorType.INK) { + return; + } + if (!isCommitting) { + for (const editor of this.#editors.values()) { + if (editor.isEmpty()) { + editor.setInBackground(); + return; + } + } + } + const editor = this.#createAndAddNewEditor({ + offsetX: 0, + offsetY: 0 + }, false); + editor.setInBackground(); + } + setEditingState(isEditing) { + this.#uiManager.setEditingState(isEditing); + } + addCommands(params) { + this.#uiManager.addCommands(params); + } + togglePointerEvents(enabled = false) { + this.div.classList.toggle("disabled", !enabled); + } + enable() { + this.togglePointerEvents(true); + const annotationElementIds = new Set(); + for (const editor of this.#editors.values()) { + editor.enableEditing(); + if (editor.annotationElementId) { + annotationElementIds.add(editor.annotationElementId); + } + } + if (!this.#annotationLayer) { + return; + } + const editables = this.#annotationLayer.getEditableAnnotations(); + for (const editable of editables) { + editable.hide(); + if (this.#uiManager.isDeletedAnnotationElement(editable.data.id)) { + continue; + } + if (annotationElementIds.has(editable.data.id)) { + continue; + } + const editor = this.deserialize(editable); + if (!editor) { + continue; + } + this.addOrRebuild(editor); + editor.enableEditing(); + } + } + disable() { + this.#isDisabling = true; + this.togglePointerEvents(false); + const hiddenAnnotationIds = new Set(); + for (const editor of this.#editors.values()) { + editor.disableEditing(); + if (!editor.annotationElementId || editor.serialize() !== null) { + hiddenAnnotationIds.add(editor.annotationElementId); + continue; + } + this.getEditableAnnotation(editor.annotationElementId)?.show(); + editor.remove(); + } + if (this.#annotationLayer) { + const editables = this.#annotationLayer.getEditableAnnotations(); + for (const editable of editables) { + const { + id + } = editable.data; + if (hiddenAnnotationIds.has(id) || this.#uiManager.isDeletedAnnotationElement(id)) { + continue; + } + editable.show(); + } + } + this.#cleanup(); + if (this.isEmpty) { + this.div.hidden = true; + } + const { + classList + } = this.div; + for (const editorType of AnnotationEditorLayer.#editorTypes.values()) { + classList.remove(`${editorType._type}Editing`); + } + this.#isDisabling = false; + } + getEditableAnnotation(id) { + return this.#annotationLayer?.getEditableAnnotation(id) || null; + } + setActiveEditor(editor) { + const currentActive = this.#uiManager.getActive(); + if (currentActive === editor) { + return; + } + this.#uiManager.setActiveEditor(editor); + } + enableClick() { + this.div.addEventListener("pointerdown", this.#boundPointerdown); + this.div.addEventListener("pointerup", this.#boundPointerup); + } + disableClick() { + this.div.removeEventListener("pointerdown", this.#boundPointerdown); + this.div.removeEventListener("pointerup", this.#boundPointerup); + } + attach(editor) { + this.#editors.set(editor.id, editor); + const { + annotationElementId + } = editor; + if (annotationElementId && this.#uiManager.isDeletedAnnotationElement(annotationElementId)) { + this.#uiManager.removeDeletedAnnotationElement(editor); + } + } + detach(editor) { + this.#editors.delete(editor.id); + this.#accessibilityManager?.removePointerInTextLayer(editor.contentDiv); + if (!this.#isDisabling && editor.annotationElementId) { + this.#uiManager.addDeletedAnnotationElement(editor); + } + } + remove(editor) { + this.detach(editor); + this.#uiManager.removeEditor(editor); + editor.div.remove(); + editor.isAttachedToDOM = false; + if (!this.#isCleaningUp) { + this.addInkEditorIfNeeded(false); + } + } + changeParent(editor) { + if (editor.parent === this) { + return; + } + if (editor.annotationElementId) { + this.#uiManager.addDeletedAnnotationElement(editor.annotationElementId); + editor_editor.AnnotationEditor.deleteAnnotationElement(editor); + editor.annotationElementId = null; + } + this.attach(editor); + editor.parent?.detach(editor); + editor.setParent(this); + if (editor.div && editor.isAttachedToDOM) { + editor.div.remove(); + this.div.append(editor.div); + } + } + add(editor) { + this.changeParent(editor); + this.#uiManager.addEditor(editor); + this.attach(editor); + if (!editor.isAttachedToDOM) { + const div = editor.render(); + this.div.append(div); + editor.isAttachedToDOM = true; + } + editor.fixAndSetPosition(); + editor.onceAdded(); + this.#uiManager.addToAnnotationStorage(editor); + } + moveEditorInDOM(editor) { + if (!editor.isAttachedToDOM) { + return; + } + const { + activeElement + } = document; + if (editor.div.contains(activeElement) && !this.#editorFocusTimeoutId) { + editor._focusEventsAllowed = false; + this.#editorFocusTimeoutId = setTimeout(() => { + this.#editorFocusTimeoutId = null; + if (!editor.div.contains(document.activeElement)) { + editor.div.addEventListener("focusin", () => { + editor._focusEventsAllowed = true; + }, { + once: true + }); + activeElement.focus(); + } else { + editor._focusEventsAllowed = true; + } + }, 0); + } + editor._structTreeParentId = this.#accessibilityManager?.moveElementInDOM(this.div, editor.div, editor.contentDiv, true); + } + addOrRebuild(editor) { + if (editor.needsToBeRebuilt()) { + editor.parent ||= this; + editor.rebuild(); + } else { + this.add(editor); + } + } + addUndoableEditor(editor) { + const cmd = () => editor._uiManager.rebuild(editor); + const undo = () => { + editor.remove(); + }; + this.addCommands({ + cmd, + undo, + mustExec: false + }); + } + getNextId() { + return this.#uiManager.getId(); + } + #createNewEditor(params) { + const editorType = AnnotationEditorLayer.#editorTypes.get(this.#uiManager.getMode()); + return editorType ? new editorType.prototype.constructor(params) : null; + } + pasteEditor(mode, params) { + this.#uiManager.updateToolbar(mode); + this.#uiManager.updateMode(mode); + const { + offsetX, + offsetY + } = this.#getCenterPoint(); + const id = this.getNextId(); + const editor = this.#createNewEditor({ + parent: this, + id, + x: offsetX, + y: offsetY, + uiManager: this.#uiManager, + isCentered: true, + ...params + }); + if (editor) { + this.add(editor); + } + } + deserialize(data) { + return AnnotationEditorLayer.#editorTypes.get(data.annotationType ?? data.annotationEditorType)?.deserialize(data, this, this.#uiManager) || null; + } + #createAndAddNewEditor(event, isCentered) { + const id = this.getNextId(); + const editor = this.#createNewEditor({ + parent: this, + id, + x: event.offsetX, + y: event.offsetY, + uiManager: this.#uiManager, + isCentered + }); + if (editor) { + this.add(editor); + } + return editor; + } + #getCenterPoint() { + const { + x, + y, + width, + height + } = this.div.getBoundingClientRect(); + const tlX = Math.max(0, x); + const tlY = Math.max(0, y); + const brX = Math.min(window.innerWidth, x + width); + const brY = Math.min(window.innerHeight, y + height); + const centerX = (tlX + brX) / 2 - x; + const centerY = (tlY + brY) / 2 - y; + const [offsetX, offsetY] = this.viewport.rotation % 180 === 0 ? [centerX, centerY] : [centerY, centerX]; + return { + offsetX, + offsetY + }; + } + addNewEditor() { + this.#createAndAddNewEditor(this.#getCenterPoint(), true); + } + setSelected(editor) { + this.#uiManager.setSelected(editor); + } + toggleSelected(editor) { + this.#uiManager.toggleSelected(editor); + } + isSelected(editor) { + return this.#uiManager.isSelected(editor); + } + unselect(editor) { + this.#uiManager.unselect(editor); + } + pointerup(event) { + const { + isMac + } = util.FeatureTest.platform; + if (event.button !== 0 || event.ctrlKey && isMac) { + return; + } + if (event.target !== this.div) { + return; + } + if (!this.#hadPointerDown) { + return; + } + this.#hadPointerDown = false; + if (!this.#allowClick) { + this.#allowClick = true; + return; + } + if (this.#uiManager.getMode() === util.AnnotationEditorType.STAMP) { + this.#uiManager.unselectAll(); + return; + } + this.#createAndAddNewEditor(event, false); + } + pointerdown(event) { + if (this.#hadPointerDown) { + this.#hadPointerDown = false; + return; + } + const { + isMac + } = util.FeatureTest.platform; + if (event.button !== 0 || event.ctrlKey && isMac) { + return; + } + if (event.target !== this.div) { + return; + } + this.#hadPointerDown = true; + const editor = this.#uiManager.getActive(); + this.#allowClick = !editor || editor.isEmpty(); + } + findNewParent(editor, x, y) { + const layer = this.#uiManager.findParent(x, y); + if (layer === null || layer === this) { + return false; + } + layer.changeParent(editor); + return true; + } + destroy() { + if (this.#uiManager.getActive()?.parent === this) { + this.#uiManager.commitOrRemove(); + this.#uiManager.setActiveEditor(null); + } + if (this.#editorFocusTimeoutId) { + clearTimeout(this.#editorFocusTimeoutId); + this.#editorFocusTimeoutId = null; + } + for (const editor of this.#editors.values()) { + this.#accessibilityManager?.removePointerInTextLayer(editor.contentDiv); + editor.setParent(null); + editor.isAttachedToDOM = false; + editor.div.remove(); + } + this.div = null; + this.#editors.clear(); + this.#uiManager.removeLayer(this); + } + #cleanup() { + this.#isCleaningUp = true; + for (const editor of this.#editors.values()) { + if (editor.isEmpty()) { + editor.remove(); + } + } + this.#isCleaningUp = false; + } + render({ + viewport + }) { + this.viewport = viewport; + (0,display_utils.setLayerDimensions)(this.div, viewport); + for (const editor of this.#uiManager.getEditors(this.pageIndex)) { + this.add(editor); + } + this.updateMode(); + } + update({ + viewport + }) { + this.#uiManager.commitOrRemove(); + this.viewport = viewport; + (0,display_utils.setLayerDimensions)(this.div, { + rotation: viewport.rotation + }); + this.updateMode(); + } + get pageDimensions() { + const { + pageWidth, + pageHeight + } = this.viewport.rawDims; + return [pageWidth, pageHeight]; + } +} + + +/***/ }), + +/***/ 682: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ AnnotationEditor: () => (/* binding */ AnnotationEditor) +/* harmony export */ }); +/* harmony import */ var _tools_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(812); +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(266); +/* harmony import */ var _display_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(473); + + + +class AnnotationEditor { + #allResizerDivs = null; + #altText = ""; + #altTextDecorative = false; + #altTextButton = null; + #altTextTooltip = null; + #altTextTooltipTimeout = null; + #altTextWasFromKeyBoard = false; + #keepAspectRatio = false; + #resizersDiv = null; + #savedDimensions = null; + #boundFocusin = this.focusin.bind(this); + #boundFocusout = this.focusout.bind(this); + #focusedResizerName = ""; + #hasBeenClicked = false; + #isEditing = false; + #isInEditMode = false; + #isResizerEnabledForKeyboard = false; + #moveInDOMTimeout = null; + _initialOptions = Object.create(null); + _uiManager = null; + _focusEventsAllowed = true; + _l10nPromise = null; + #isDraggable = false; + #zIndex = AnnotationEditor._zIndex++; + static _borderLineWidth = -1; + static _colorManager = new _tools_js__WEBPACK_IMPORTED_MODULE_0__.ColorManager(); + static _zIndex = 1; + static SMALL_EDITOR_SIZE = 0; + static get _resizerKeyboardManager() { + const resize = AnnotationEditor.prototype._resizeWithKeyboard; + const small = _tools_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationEditorUIManager.TRANSLATE_SMALL; + const big = _tools_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationEditorUIManager.TRANSLATE_BIG; + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_1__.shadow)(this, "_resizerKeyboardManager", new _tools_js__WEBPACK_IMPORTED_MODULE_0__.KeyboardManager([[["ArrowLeft", "mac+ArrowLeft"], resize, { + args: [-small, 0] + }], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], resize, { + args: [-big, 0] + }], [["ArrowRight", "mac+ArrowRight"], resize, { + args: [small, 0] + }], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], resize, { + args: [big, 0] + }], [["ArrowUp", "mac+ArrowUp"], resize, { + args: [0, -small] + }], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], resize, { + args: [0, -big] + }], [["ArrowDown", "mac+ArrowDown"], resize, { + args: [0, small] + }], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], resize, { + args: [0, big] + }], [["Escape", "mac+Escape"], AnnotationEditor.prototype._stopResizingWithKeyboard]])); + } + constructor(parameters) { + if (this.constructor === AnnotationEditor) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_1__.unreachable)("Cannot initialize AnnotationEditor."); + } + this.parent = parameters.parent; + this.id = parameters.id; + this.width = this.height = null; + this.pageIndex = parameters.parent.pageIndex; + this.name = parameters.name; + this.div = null; + this._uiManager = parameters.uiManager; + this.annotationElementId = null; + this._willKeepAspectRatio = false; + this._initialOptions.isCentered = parameters.isCentered; + this._structTreeParentId = null; + const { + rotation, + rawDims: { + pageWidth, + pageHeight, + pageX, + pageY + } + } = this.parent.viewport; + this.rotation = rotation; + this.pageRotation = (360 + rotation - this._uiManager.viewParameters.rotation) % 360; + this.pageDimensions = [pageWidth, pageHeight]; + this.pageTranslation = [pageX, pageY]; + const [width, height] = this.parentDimensions; + this.x = parameters.x / width; + this.y = parameters.y / height; + this.isAttachedToDOM = false; + this.deleted = false; + } + get editorType() { + return Object.getPrototypeOf(this).constructor._type; + } + static get _defaultLineColor() { + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_1__.shadow)(this, "_defaultLineColor", this._colorManager.getHexCode("CanvasText")); + } + static deleteAnnotationElement(editor) { + const fakeEditor = new FakeEditor({ + id: editor.parent.getNextId(), + parent: editor.parent, + uiManager: editor._uiManager + }); + fakeEditor.annotationElementId = editor.annotationElementId; + fakeEditor.deleted = true; + fakeEditor._uiManager.addToAnnotationStorage(fakeEditor); + } + static initialize(l10n, options = null) { + AnnotationEditor._l10nPromise ||= new Map(["pdfjs-editor-alt-text-button-label", "pdfjs-editor-alt-text-edit-button-label", "pdfjs-editor-alt-text-decorative-tooltip", "pdfjs-editor-resizer-label-topLeft", "pdfjs-editor-resizer-label-topMiddle", "pdfjs-editor-resizer-label-topRight", "pdfjs-editor-resizer-label-middleRight", "pdfjs-editor-resizer-label-bottomRight", "pdfjs-editor-resizer-label-bottomMiddle", "pdfjs-editor-resizer-label-bottomLeft", "pdfjs-editor-resizer-label-middleLeft"].map(str => [str, l10n.get(str.replaceAll(/([A-Z])/g, c => `-${c.toLowerCase()}`))])); + if (options?.strings) { + for (const str of options.strings) { + AnnotationEditor._l10nPromise.set(str, l10n.get(str)); + } + } + if (AnnotationEditor._borderLineWidth !== -1) { + return; + } + const style = getComputedStyle(document.documentElement); + AnnotationEditor._borderLineWidth = parseFloat(style.getPropertyValue("--outline-width")) || 0; + } + static updateDefaultParams(_type, _value) {} + static get defaultPropertiesToUpdate() { + return []; + } + static isHandlingMimeForPasting(mime) { + return false; + } + static paste(item, parent) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_1__.unreachable)("Not implemented"); + } + get propertiesToUpdate() { + return []; + } + get _isDraggable() { + return this.#isDraggable; + } + set _isDraggable(value) { + this.#isDraggable = value; + this.div?.classList.toggle("draggable", value); + } + get isEnterHandled() { + return true; + } + center() { + const [pageWidth, pageHeight] = this.pageDimensions; + switch (this.parentRotation) { + case 90: + this.x -= this.height * pageHeight / (pageWidth * 2); + this.y += this.width * pageWidth / (pageHeight * 2); + break; + case 180: + this.x += this.width / 2; + this.y += this.height / 2; + break; + case 270: + this.x += this.height * pageHeight / (pageWidth * 2); + this.y -= this.width * pageWidth / (pageHeight * 2); + break; + default: + this.x -= this.width / 2; + this.y -= this.height / 2; + break; + } + this.fixAndSetPosition(); + } + addCommands(params) { + this._uiManager.addCommands(params); + } + get currentLayer() { + return this._uiManager.currentLayer; + } + setInBackground() { + this.div.style.zIndex = 0; + } + setInForeground() { + this.div.style.zIndex = this.#zIndex; + } + setParent(parent) { + if (parent !== null) { + this.pageIndex = parent.pageIndex; + this.pageDimensions = parent.pageDimensions; + } else { + this.#stopResizing(); + } + this.parent = parent; + } + focusin(event) { + if (!this._focusEventsAllowed) { + return; + } + if (!this.#hasBeenClicked) { + this.parent.setSelected(this); + } else { + this.#hasBeenClicked = false; + } + } + focusout(event) { + if (!this._focusEventsAllowed) { + return; + } + if (!this.isAttachedToDOM) { + return; + } + const target = event.relatedTarget; + if (target?.closest(`#${this.id}`)) { + return; + } + event.preventDefault(); + if (!this.parent?.isMultipleSelection) { + this.commitOrRemove(); + } + } + commitOrRemove() { + if (this.isEmpty()) { + this.remove(); + } else { + this.commit(); + } + } + commit() { + this.addToAnnotationStorage(); + } + addToAnnotationStorage() { + this._uiManager.addToAnnotationStorage(this); + } + setAt(x, y, tx, ty) { + const [width, height] = this.parentDimensions; + [tx, ty] = this.screenToPageTranslation(tx, ty); + this.x = (x + tx) / width; + this.y = (y + ty) / height; + this.fixAndSetPosition(); + } + #translate([width, height], x, y) { + [x, y] = this.screenToPageTranslation(x, y); + this.x += x / width; + this.y += y / height; + this.fixAndSetPosition(); + } + translate(x, y) { + this.#translate(this.parentDimensions, x, y); + } + translateInPage(x, y) { + this.#translate(this.pageDimensions, x, y); + this.div.scrollIntoView({ + block: "nearest" + }); + } + drag(tx, ty) { + const [parentWidth, parentHeight] = this.parentDimensions; + this.x += tx / parentWidth; + this.y += ty / parentHeight; + if (this.parent && (this.x < 0 || this.x > 1 || this.y < 0 || this.y > 1)) { + const { + x, + y + } = this.div.getBoundingClientRect(); + if (this.parent.findNewParent(this, x, y)) { + this.x -= Math.floor(this.x); + this.y -= Math.floor(this.y); + } + } + let { + x, + y + } = this; + const [bx, by] = this.#getBaseTranslation(); + x += bx; + y += by; + this.div.style.left = `${(100 * x).toFixed(2)}%`; + this.div.style.top = `${(100 * y).toFixed(2)}%`; + this.div.scrollIntoView({ + block: "nearest" + }); + } + #getBaseTranslation() { + const [parentWidth, parentHeight] = this.parentDimensions; + const { + _borderLineWidth + } = AnnotationEditor; + const x = _borderLineWidth / parentWidth; + const y = _borderLineWidth / parentHeight; + switch (this.rotation) { + case 90: + return [-x, y]; + case 180: + return [x, y]; + case 270: + return [x, -y]; + default: + return [-x, -y]; + } + } + fixAndSetPosition() { + const [pageWidth, pageHeight] = this.pageDimensions; + let { + x, + y, + width, + height + } = this; + width *= pageWidth; + height *= pageHeight; + x *= pageWidth; + y *= pageHeight; + switch (this.rotation) { + case 0: + x = Math.max(0, Math.min(pageWidth - width, x)); + y = Math.max(0, Math.min(pageHeight - height, y)); + break; + case 90: + x = Math.max(0, Math.min(pageWidth - height, x)); + y = Math.min(pageHeight, Math.max(width, y)); + break; + case 180: + x = Math.min(pageWidth, Math.max(width, x)); + y = Math.min(pageHeight, Math.max(height, y)); + break; + case 270: + x = Math.min(pageWidth, Math.max(height, x)); + y = Math.max(0, Math.min(pageHeight - width, y)); + break; + } + this.x = x /= pageWidth; + this.y = y /= pageHeight; + const [bx, by] = this.#getBaseTranslation(); + x += bx; + y += by; + const { + style + } = this.div; + style.left = `${(100 * x).toFixed(2)}%`; + style.top = `${(100 * y).toFixed(2)}%`; + this.moveInDOM(); + } + static #rotatePoint(x, y, angle) { + switch (angle) { + case 90: + return [y, -x]; + case 180: + return [-x, -y]; + case 270: + return [-y, x]; + default: + return [x, y]; + } + } + screenToPageTranslation(x, y) { + return AnnotationEditor.#rotatePoint(x, y, this.parentRotation); + } + pageTranslationToScreen(x, y) { + return AnnotationEditor.#rotatePoint(x, y, 360 - this.parentRotation); + } + #getRotationMatrix(rotation) { + switch (rotation) { + case 90: + { + const [pageWidth, pageHeight] = this.pageDimensions; + return [0, -pageWidth / pageHeight, pageHeight / pageWidth, 0]; + } + case 180: + return [-1, 0, 0, -1]; + case 270: + { + const [pageWidth, pageHeight] = this.pageDimensions; + return [0, pageWidth / pageHeight, -pageHeight / pageWidth, 0]; + } + default: + return [1, 0, 0, 1]; + } + } + get parentScale() { + return this._uiManager.viewParameters.realScale; + } + get parentRotation() { + return (this._uiManager.viewParameters.rotation + this.pageRotation) % 360; + } + get parentDimensions() { + const { + parentScale, + pageDimensions: [pageWidth, pageHeight] + } = this; + const scaledWidth = pageWidth * parentScale; + const scaledHeight = pageHeight * parentScale; + return _shared_util_js__WEBPACK_IMPORTED_MODULE_1__.FeatureTest.isCSSRoundSupported ? [Math.round(scaledWidth), Math.round(scaledHeight)] : [scaledWidth, scaledHeight]; + } + setDims(width, height) { + const [parentWidth, parentHeight] = this.parentDimensions; + this.div.style.width = `${(100 * width / parentWidth).toFixed(2)}%`; + if (!this.#keepAspectRatio) { + this.div.style.height = `${(100 * height / parentHeight).toFixed(2)}%`; + } + this.#altTextButton?.classList.toggle("small", width < AnnotationEditor.SMALL_EDITOR_SIZE || height < AnnotationEditor.SMALL_EDITOR_SIZE); + } + fixDims() { + const { + style + } = this.div; + const { + height, + width + } = style; + const widthPercent = width.endsWith("%"); + const heightPercent = !this.#keepAspectRatio && height.endsWith("%"); + if (widthPercent && heightPercent) { + return; + } + const [parentWidth, parentHeight] = this.parentDimensions; + if (!widthPercent) { + style.width = `${(100 * parseFloat(width) / parentWidth).toFixed(2)}%`; + } + if (!this.#keepAspectRatio && !heightPercent) { + style.height = `${(100 * parseFloat(height) / parentHeight).toFixed(2)}%`; + } + } + getInitialTranslation() { + return [0, 0]; + } + #createResizers() { + if (this.#resizersDiv) { + return; + } + this.#resizersDiv = document.createElement("div"); + this.#resizersDiv.classList.add("resizers"); + const classes = this._willKeepAspectRatio ? ["topLeft", "topRight", "bottomRight", "bottomLeft"] : ["topLeft", "topMiddle", "topRight", "middleRight", "bottomRight", "bottomMiddle", "bottomLeft", "middleLeft"]; + for (const name of classes) { + const div = document.createElement("div"); + this.#resizersDiv.append(div); + div.classList.add("resizer", name); + div.setAttribute("data-resizer-name", name); + div.addEventListener("pointerdown", this.#resizerPointerdown.bind(this, name)); + div.addEventListener("contextmenu", _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.noContextMenu); + div.tabIndex = -1; + } + this.div.prepend(this.#resizersDiv); + } + #resizerPointerdown(name, event) { + event.preventDefault(); + const { + isMac + } = _shared_util_js__WEBPACK_IMPORTED_MODULE_1__.FeatureTest.platform; + if (event.button !== 0 || event.ctrlKey && isMac) { + return; + } + this.#toggleAltTextButton(false); + const boundResizerPointermove = this.#resizerPointermove.bind(this, name); + const savedDraggable = this._isDraggable; + this._isDraggable = false; + const pointerMoveOptions = { + passive: true, + capture: true + }; + this.parent.togglePointerEvents(false); + window.addEventListener("pointermove", boundResizerPointermove, pointerMoveOptions); + const savedX = this.x; + const savedY = this.y; + const savedWidth = this.width; + const savedHeight = this.height; + const savedParentCursor = this.parent.div.style.cursor; + const savedCursor = this.div.style.cursor; + this.div.style.cursor = this.parent.div.style.cursor = window.getComputedStyle(event.target).cursor; + const pointerUpCallback = () => { + this.parent.togglePointerEvents(true); + this.#toggleAltTextButton(true); + this._isDraggable = savedDraggable; + window.removeEventListener("pointerup", pointerUpCallback); + window.removeEventListener("blur", pointerUpCallback); + window.removeEventListener("pointermove", boundResizerPointermove, pointerMoveOptions); + this.parent.div.style.cursor = savedParentCursor; + this.div.style.cursor = savedCursor; + this.#addResizeToUndoStack(savedX, savedY, savedWidth, savedHeight); + }; + window.addEventListener("pointerup", pointerUpCallback); + window.addEventListener("blur", pointerUpCallback); + } + #addResizeToUndoStack(savedX, savedY, savedWidth, savedHeight) { + const newX = this.x; + const newY = this.y; + const newWidth = this.width; + const newHeight = this.height; + if (newX === savedX && newY === savedY && newWidth === savedWidth && newHeight === savedHeight) { + return; + } + this.addCommands({ + cmd: () => { + this.width = newWidth; + this.height = newHeight; + this.x = newX; + this.y = newY; + const [parentWidth, parentHeight] = this.parentDimensions; + this.setDims(parentWidth * newWidth, parentHeight * newHeight); + this.fixAndSetPosition(); + }, + undo: () => { + this.width = savedWidth; + this.height = savedHeight; + this.x = savedX; + this.y = savedY; + const [parentWidth, parentHeight] = this.parentDimensions; + this.setDims(parentWidth * savedWidth, parentHeight * savedHeight); + this.fixAndSetPosition(); + }, + mustExec: true + }); + } + #resizerPointermove(name, event) { + const [parentWidth, parentHeight] = this.parentDimensions; + const savedX = this.x; + const savedY = this.y; + const savedWidth = this.width; + const savedHeight = this.height; + const minWidth = AnnotationEditor.MIN_SIZE / parentWidth; + const minHeight = AnnotationEditor.MIN_SIZE / parentHeight; + const round = x => Math.round(x * 10000) / 10000; + const rotationMatrix = this.#getRotationMatrix(this.rotation); + const transf = (x, y) => [rotationMatrix[0] * x + rotationMatrix[2] * y, rotationMatrix[1] * x + rotationMatrix[3] * y]; + const invRotationMatrix = this.#getRotationMatrix(360 - this.rotation); + const invTransf = (x, y) => [invRotationMatrix[0] * x + invRotationMatrix[2] * y, invRotationMatrix[1] * x + invRotationMatrix[3] * y]; + let getPoint; + let getOpposite; + let isDiagonal = false; + let isHorizontal = false; + switch (name) { + case "topLeft": + isDiagonal = true; + getPoint = (w, h) => [0, 0]; + getOpposite = (w, h) => [w, h]; + break; + case "topMiddle": + getPoint = (w, h) => [w / 2, 0]; + getOpposite = (w, h) => [w / 2, h]; + break; + case "topRight": + isDiagonal = true; + getPoint = (w, h) => [w, 0]; + getOpposite = (w, h) => [0, h]; + break; + case "middleRight": + isHorizontal = true; + getPoint = (w, h) => [w, h / 2]; + getOpposite = (w, h) => [0, h / 2]; + break; + case "bottomRight": + isDiagonal = true; + getPoint = (w, h) => [w, h]; + getOpposite = (w, h) => [0, 0]; + break; + case "bottomMiddle": + getPoint = (w, h) => [w / 2, h]; + getOpposite = (w, h) => [w / 2, 0]; + break; + case "bottomLeft": + isDiagonal = true; + getPoint = (w, h) => [0, h]; + getOpposite = (w, h) => [w, 0]; + break; + case "middleLeft": + isHorizontal = true; + getPoint = (w, h) => [0, h / 2]; + getOpposite = (w, h) => [w, h / 2]; + break; + } + const point = getPoint(savedWidth, savedHeight); + const oppositePoint = getOpposite(savedWidth, savedHeight); + let transfOppositePoint = transf(...oppositePoint); + const oppositeX = round(savedX + transfOppositePoint[0]); + const oppositeY = round(savedY + transfOppositePoint[1]); + let ratioX = 1; + let ratioY = 1; + let [deltaX, deltaY] = this.screenToPageTranslation(event.movementX, event.movementY); + [deltaX, deltaY] = invTransf(deltaX / parentWidth, deltaY / parentHeight); + if (isDiagonal) { + const oldDiag = Math.hypot(savedWidth, savedHeight); + ratioX = ratioY = Math.max(Math.min(Math.hypot(oppositePoint[0] - point[0] - deltaX, oppositePoint[1] - point[1] - deltaY) / oldDiag, 1 / savedWidth, 1 / savedHeight), minWidth / savedWidth, minHeight / savedHeight); + } else if (isHorizontal) { + ratioX = Math.max(minWidth, Math.min(1, Math.abs(oppositePoint[0] - point[0] - deltaX))) / savedWidth; + } else { + ratioY = Math.max(minHeight, Math.min(1, Math.abs(oppositePoint[1] - point[1] - deltaY))) / savedHeight; + } + const newWidth = round(savedWidth * ratioX); + const newHeight = round(savedHeight * ratioY); + transfOppositePoint = transf(...getOpposite(newWidth, newHeight)); + const newX = oppositeX - transfOppositePoint[0]; + const newY = oppositeY - transfOppositePoint[1]; + this.width = newWidth; + this.height = newHeight; + this.x = newX; + this.y = newY; + this.setDims(parentWidth * newWidth, parentHeight * newHeight); + this.fixAndSetPosition(); + } + async addAltTextButton() { + if (this.#altTextButton) { + return; + } + const altText = this.#altTextButton = document.createElement("button"); + altText.className = "altText"; + const msg = await AnnotationEditor._l10nPromise.get("pdfjs-editor-alt-text-button-label"); + altText.textContent = msg; + altText.setAttribute("aria-label", msg); + altText.tabIndex = "0"; + altText.addEventListener("contextmenu", _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.noContextMenu); + altText.addEventListener("pointerdown", event => event.stopPropagation()); + const onClick = event => { + this.#altTextButton.hidden = true; + event.preventDefault(); + this._uiManager.editAltText(this); + }; + altText.addEventListener("click", onClick, { + capture: true + }); + altText.addEventListener("keydown", event => { + if (event.target === altText && event.key === "Enter") { + this.#altTextWasFromKeyBoard = true; + onClick(event); + } + }); + this.#setAltTextButtonState(); + this.div.append(altText); + if (!AnnotationEditor.SMALL_EDITOR_SIZE) { + const PERCENT = 40; + AnnotationEditor.SMALL_EDITOR_SIZE = Math.min(128, Math.round(altText.getBoundingClientRect().width * (1 + PERCENT / 100))); + } + } + async #setAltTextButtonState() { + const button = this.#altTextButton; + if (!button) { + return; + } + if (!this.#altText && !this.#altTextDecorative) { + button.classList.remove("done"); + this.#altTextTooltip?.remove(); + return; + } + button.classList.add("done"); + AnnotationEditor._l10nPromise.get("pdfjs-editor-alt-text-edit-button-label").then(msg => { + button.setAttribute("aria-label", msg); + }); + let tooltip = this.#altTextTooltip; + if (!tooltip) { + this.#altTextTooltip = tooltip = document.createElement("span"); + tooltip.className = "tooltip"; + tooltip.setAttribute("role", "tooltip"); + const id = tooltip.id = `alt-text-tooltip-${this.id}`; + button.setAttribute("aria-describedby", id); + const DELAY_TO_SHOW_TOOLTIP = 100; + button.addEventListener("mouseenter", () => { + this.#altTextTooltipTimeout = setTimeout(() => { + this.#altTextTooltipTimeout = null; + this.#altTextTooltip.classList.add("show"); + this._uiManager._eventBus.dispatch("reporttelemetry", { + source: this, + details: { + type: "editing", + subtype: this.editorType, + data: { + action: "alt_text_tooltip" + } + } + }); + }, DELAY_TO_SHOW_TOOLTIP); + }); + button.addEventListener("mouseleave", () => { + if (this.#altTextTooltipTimeout) { + clearTimeout(this.#altTextTooltipTimeout); + this.#altTextTooltipTimeout = null; + } + this.#altTextTooltip?.classList.remove("show"); + }); + } + tooltip.innerText = this.#altTextDecorative ? await AnnotationEditor._l10nPromise.get("pdfjs-editor-alt-text-decorative-tooltip") : this.#altText; + if (!tooltip.parentNode) { + button.append(tooltip); + } + const element = this.getImageForAltText(); + element?.setAttribute("aria-describedby", tooltip.id); + } + #toggleAltTextButton(enabled = false) { + if (!this.#altTextButton) { + return; + } + if (!enabled && this.#altTextTooltipTimeout) { + clearTimeout(this.#altTextTooltipTimeout); + this.#altTextTooltipTimeout = null; + } + this.#altTextButton.disabled = !enabled; + } + altTextFinish() { + if (!this.#altTextButton) { + return; + } + this.#altTextButton.hidden = false; + this.#altTextButton.focus({ + focusVisible: this.#altTextWasFromKeyBoard + }); + this.#altTextWasFromKeyBoard = false; + } + getClientDimensions() { + return this.div.getBoundingClientRect(); + } + get altTextData() { + return { + altText: this.#altText, + decorative: this.#altTextDecorative + }; + } + set altTextData({ + altText, + decorative + }) { + if (this.#altText === altText && this.#altTextDecorative === decorative) { + return; + } + this.#altText = altText; + this.#altTextDecorative = decorative; + this.#setAltTextButtonState(); + } + render() { + this.div = document.createElement("div"); + this.div.setAttribute("data-editor-rotation", (360 - this.rotation) % 360); + this.div.className = this.name; + this.div.setAttribute("id", this.id); + this.div.setAttribute("tabIndex", 0); + this.setInForeground(); + this.div.addEventListener("focusin", this.#boundFocusin); + this.div.addEventListener("focusout", this.#boundFocusout); + const [parentWidth, parentHeight] = this.parentDimensions; + if (this.parentRotation % 180 !== 0) { + this.div.style.maxWidth = `${(100 * parentHeight / parentWidth).toFixed(2)}%`; + this.div.style.maxHeight = `${(100 * parentWidth / parentHeight).toFixed(2)}%`; + } + const [tx, ty] = this.getInitialTranslation(); + this.translate(tx, ty); + (0,_tools_js__WEBPACK_IMPORTED_MODULE_0__.bindEvents)(this, this.div, ["pointerdown"]); + return this.div; + } + pointerdown(event) { + const { + isMac + } = _shared_util_js__WEBPACK_IMPORTED_MODULE_1__.FeatureTest.platform; + if (event.button !== 0 || event.ctrlKey && isMac) { + event.preventDefault(); + return; + } + this.#hasBeenClicked = true; + this.#setUpDragSession(event); + } + #setUpDragSession(event) { + if (!this._isDraggable) { + return; + } + const isSelected = this._uiManager.isSelected(this); + this._uiManager.setUpDragSession(); + let pointerMoveOptions, pointerMoveCallback; + if (isSelected) { + pointerMoveOptions = { + passive: true, + capture: true + }; + pointerMoveCallback = e => { + const [tx, ty] = this.screenToPageTranslation(e.movementX, e.movementY); + this._uiManager.dragSelectedEditors(tx, ty); + }; + window.addEventListener("pointermove", pointerMoveCallback, pointerMoveOptions); + } + const pointerUpCallback = () => { + window.removeEventListener("pointerup", pointerUpCallback); + window.removeEventListener("blur", pointerUpCallback); + if (isSelected) { + window.removeEventListener("pointermove", pointerMoveCallback, pointerMoveOptions); + } + this.#hasBeenClicked = false; + if (!this._uiManager.endDragSession()) { + const { + isMac + } = _shared_util_js__WEBPACK_IMPORTED_MODULE_1__.FeatureTest.platform; + if (event.ctrlKey && !isMac || event.shiftKey || event.metaKey && isMac) { + this.parent.toggleSelected(this); + } else { + this.parent.setSelected(this); + } + } + }; + window.addEventListener("pointerup", pointerUpCallback); + window.addEventListener("blur", pointerUpCallback); + } + moveInDOM() { + if (this.#moveInDOMTimeout) { + clearTimeout(this.#moveInDOMTimeout); + } + this.#moveInDOMTimeout = setTimeout(() => { + this.#moveInDOMTimeout = null; + this.parent?.moveEditorInDOM(this); + }, 0); + } + _setParentAndPosition(parent, x, y) { + parent.changeParent(this); + this.x = x; + this.y = y; + this.fixAndSetPosition(); + } + getRect(tx, ty) { + const scale = this.parentScale; + const [pageWidth, pageHeight] = this.pageDimensions; + const [pageX, pageY] = this.pageTranslation; + const shiftX = tx / scale; + const shiftY = ty / scale; + const x = this.x * pageWidth; + const y = this.y * pageHeight; + const width = this.width * pageWidth; + const height = this.height * pageHeight; + switch (this.rotation) { + case 0: + return [x + shiftX + pageX, pageHeight - y - shiftY - height + pageY, x + shiftX + width + pageX, pageHeight - y - shiftY + pageY]; + case 90: + return [x + shiftY + pageX, pageHeight - y + shiftX + pageY, x + shiftY + height + pageX, pageHeight - y + shiftX + width + pageY]; + case 180: + return [x - shiftX - width + pageX, pageHeight - y + shiftY + pageY, x - shiftX + pageX, pageHeight - y + shiftY + height + pageY]; + case 270: + return [x - shiftY - height + pageX, pageHeight - y - shiftX - width + pageY, x - shiftY + pageX, pageHeight - y - shiftX + pageY]; + default: + throw new Error("Invalid rotation"); + } + } + getRectInCurrentCoords(rect, pageHeight) { + const [x1, y1, x2, y2] = rect; + const width = x2 - x1; + const height = y2 - y1; + switch (this.rotation) { + case 0: + return [x1, pageHeight - y2, width, height]; + case 90: + return [x1, pageHeight - y1, height, width]; + case 180: + return [x2, pageHeight - y1, width, height]; + case 270: + return [x2, pageHeight - y2, height, width]; + default: + throw new Error("Invalid rotation"); + } + } + onceAdded() {} + isEmpty() { + return false; + } + enableEditMode() { + this.#isInEditMode = true; + } + disableEditMode() { + this.#isInEditMode = false; + } + isInEditMode() { + return this.#isInEditMode; + } + shouldGetKeyboardEvents() { + return this.#isResizerEnabledForKeyboard; + } + needsToBeRebuilt() { + return this.div && !this.isAttachedToDOM; + } + rebuild() { + this.div?.addEventListener("focusin", this.#boundFocusin); + this.div?.addEventListener("focusout", this.#boundFocusout); + } + serialize(isForCopying = false, context = null) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_1__.unreachable)("An editor must be serializable"); + } + static deserialize(data, parent, uiManager) { + const editor = new this.prototype.constructor({ + parent, + id: parent.getNextId(), + uiManager + }); + editor.rotation = data.rotation; + const [pageWidth, pageHeight] = editor.pageDimensions; + const [x, y, width, height] = editor.getRectInCurrentCoords(data.rect, pageHeight); + editor.x = x / pageWidth; + editor.y = y / pageHeight; + editor.width = width / pageWidth; + editor.height = height / pageHeight; + return editor; + } + remove() { + this.div.removeEventListener("focusin", this.#boundFocusin); + this.div.removeEventListener("focusout", this.#boundFocusout); + if (!this.isEmpty()) { + this.commit(); + } + if (this.parent) { + this.parent.remove(this); + } else { + this._uiManager.removeEditor(this); + } + this.#altTextButton?.remove(); + this.#altTextButton = null; + this.#altTextTooltip = null; + if (this.#moveInDOMTimeout) { + clearTimeout(this.#moveInDOMTimeout); + this.#moveInDOMTimeout = null; + } + this.#stopResizing(); + } + get isResizable() { + return false; + } + makeResizable() { + if (this.isResizable) { + this.#createResizers(); + this.#resizersDiv.classList.remove("hidden"); + (0,_tools_js__WEBPACK_IMPORTED_MODULE_0__.bindEvents)(this, this.div, ["keydown"]); + } + } + keydown(event) { + if (!this.isResizable || event.target !== this.div || event.key !== "Enter") { + return; + } + this._uiManager.setSelected(this); + this.#savedDimensions = { + savedX: this.x, + savedY: this.y, + savedWidth: this.width, + savedHeight: this.height + }; + const children = this.#resizersDiv.children; + if (!this.#allResizerDivs) { + this.#allResizerDivs = Array.from(children); + const boundResizerKeydown = this.#resizerKeydown.bind(this); + const boundResizerBlur = this.#resizerBlur.bind(this); + for (const div of this.#allResizerDivs) { + const name = div.getAttribute("data-resizer-name"); + div.setAttribute("role", "spinbutton"); + div.addEventListener("keydown", boundResizerKeydown); + div.addEventListener("blur", boundResizerBlur); + div.addEventListener("focus", this.#resizerFocus.bind(this, name)); + AnnotationEditor._l10nPromise.get(`pdfjs-editor-resizer-label-${name}`).then(msg => div.setAttribute("aria-label", msg)); + } + } + const first = this.#allResizerDivs[0]; + let firstPosition = 0; + for (const div of children) { + if (div === first) { + break; + } + firstPosition++; + } + const nextFirstPosition = (360 - this.rotation + this.parentRotation) % 360 / 90 * (this.#allResizerDivs.length / 4); + if (nextFirstPosition !== firstPosition) { + if (nextFirstPosition < firstPosition) { + for (let i = 0; i < firstPosition - nextFirstPosition; i++) { + this.#resizersDiv.append(this.#resizersDiv.firstChild); + } + } else if (nextFirstPosition > firstPosition) { + for (let i = 0; i < nextFirstPosition - firstPosition; i++) { + this.#resizersDiv.firstChild.before(this.#resizersDiv.lastChild); + } + } + let i = 0; + for (const child of children) { + const div = this.#allResizerDivs[i++]; + const name = div.getAttribute("data-resizer-name"); + AnnotationEditor._l10nPromise.get(`pdfjs-editor-resizer-label-${name}`).then(msg => child.setAttribute("aria-label", msg)); + } + } + this.#setResizerTabIndex(0); + this.#isResizerEnabledForKeyboard = true; + this.#resizersDiv.firstChild.focus({ + focusVisible: true + }); + event.preventDefault(); + event.stopImmediatePropagation(); + } + #resizerKeydown(event) { + AnnotationEditor._resizerKeyboardManager.exec(this, event); + } + #resizerBlur(event) { + if (this.#isResizerEnabledForKeyboard && event.relatedTarget?.parentNode !== this.#resizersDiv) { + this.#stopResizing(); + } + } + #resizerFocus(name) { + this.#focusedResizerName = this.#isResizerEnabledForKeyboard ? name : ""; + } + #setResizerTabIndex(value) { + if (!this.#allResizerDivs) { + return; + } + for (const div of this.#allResizerDivs) { + div.tabIndex = value; + } + } + _resizeWithKeyboard(x, y) { + if (!this.#isResizerEnabledForKeyboard) { + return; + } + this.#resizerPointermove(this.#focusedResizerName, { + movementX: x, + movementY: y + }); + } + #stopResizing() { + this.#isResizerEnabledForKeyboard = false; + this.#setResizerTabIndex(-1); + if (this.#savedDimensions) { + const { + savedX, + savedY, + savedWidth, + savedHeight + } = this.#savedDimensions; + this.#addResizeToUndoStack(savedX, savedY, savedWidth, savedHeight); + this.#savedDimensions = null; + } + } + _stopResizingWithKeyboard() { + this.#stopResizing(); + this.div.focus(); + } + select() { + this.makeResizable(); + this.div?.classList.add("selectedEditor"); + } + unselect() { + this.#resizersDiv?.classList.add("hidden"); + this.div?.classList.remove("selectedEditor"); + if (this.div?.contains(document.activeElement)) { + this._uiManager.currentLayer.div.focus(); + } + } + updateParams(type, value) {} + disableEditing() { + if (this.#altTextButton) { + this.#altTextButton.hidden = true; + } + } + enableEditing() { + if (this.#altTextButton) { + this.#altTextButton.hidden = false; + } + } + enterInEditMode() {} + getImageForAltText() { + return null; + } + get contentDiv() { + return this.div; + } + get isEditing() { + return this.#isEditing; + } + set isEditing(value) { + this.#isEditing = value; + if (!this.parent) { + return; + } + if (value) { + this.parent.setSelected(this); + this.parent.setActiveEditor(this); + } else { + this.parent.setActiveEditor(null); + } + } + setAspectRatio(width, height) { + this.#keepAspectRatio = true; + const aspectRatio = width / height; + const { + style + } = this.div; + style.aspectRatio = aspectRatio; + style.height = "auto"; + } + static get MIN_SIZE() { + return 16; + } +} +class FakeEditor extends AnnotationEditor { + constructor(params) { + super(params); + this.annotationElementId = params.annotationElementId; + this.deleted = true; + } + serialize() { + return { + id: this.annotationElementId, + deleted: true, + pageIndex: this.pageIndex + }; + } +} + + +/***/ }), + +/***/ 812: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ AnnotationEditorUIManager: () => (/* binding */ AnnotationEditorUIManager), +/* harmony export */ ColorManager: () => (/* binding */ ColorManager), +/* harmony export */ KeyboardManager: () => (/* binding */ KeyboardManager), +/* harmony export */ bindEvents: () => (/* binding */ bindEvents), +/* harmony export */ opacityToHex: () => (/* binding */ opacityToHex) +/* harmony export */ }); +/* unused harmony export CommandManager */ +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); +/* harmony import */ var _display_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(473); + + +function bindEvents(obj, element, names) { + for (const name of names) { + element.addEventListener(name, obj[name].bind(obj)); + } +} +function opacityToHex(opacity) { + return Math.round(Math.min(255, Math.max(1, 255 * opacity))).toString(16).padStart(2, "0"); +} +class IdManager { + #id = 0; + getId() { + return `${_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationEditorPrefix}${this.#id++}`; + } +} +class ImageManager { + #baseId = (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.getUuid)(); + #id = 0; + #cache = null; + static get _isSVGFittingCanvas() { + const svg = `data:image/svg+xml;charset=UTF-8,`; + const canvas = new OffscreenCanvas(1, 3); + const ctx = canvas.getContext("2d"); + const image = new Image(); + image.src = svg; + const promise = image.decode().then(() => { + ctx.drawImage(image, 0, 0, 1, 1, 0, 0, 1, 3); + return new Uint32Array(ctx.getImageData(0, 0, 1, 1).data.buffer)[0] === 0; + }); + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "_isSVGFittingCanvas", promise); + } + async #get(key, rawData) { + this.#cache ||= new Map(); + let data = this.#cache.get(key); + if (data === null) { + return null; + } + if (data?.bitmap) { + data.refCounter += 1; + return data; + } + try { + data ||= { + bitmap: null, + id: `image_${this.#baseId}_${this.#id++}`, + refCounter: 0, + isSvg: false + }; + let image; + if (typeof rawData === "string") { + data.url = rawData; + const response = await fetch(rawData); + if (!response.ok) { + throw new Error(response.statusText); + } + image = await response.blob(); + } else { + image = data.file = rawData; + } + if (image.type === "image/svg+xml") { + const mustRemoveAspectRatioPromise = ImageManager._isSVGFittingCanvas; + const fileReader = new FileReader(); + const imageElement = new Image(); + const imagePromise = new Promise((resolve, reject) => { + imageElement.onload = () => { + data.bitmap = imageElement; + data.isSvg = true; + resolve(); + }; + fileReader.onload = async () => { + const url = data.svgUrl = fileReader.result; + imageElement.src = (await mustRemoveAspectRatioPromise) ? `${url}#svgView(preserveAspectRatio(none))` : url; + }; + imageElement.onerror = fileReader.onerror = reject; + }); + fileReader.readAsDataURL(image); + await imagePromise; + } else { + data.bitmap = await createImageBitmap(image); + } + data.refCounter = 1; + } catch (e) { + console.error(e); + data = null; + } + this.#cache.set(key, data); + if (data) { + this.#cache.set(data.id, data); + } + return data; + } + async getFromFile(file) { + const { + lastModified, + name, + size, + type + } = file; + return this.#get(`${lastModified}_${name}_${size}_${type}`, file); + } + async getFromUrl(url) { + return this.#get(url, url); + } + async getFromId(id) { + this.#cache ||= new Map(); + const data = this.#cache.get(id); + if (!data) { + return null; + } + if (data.bitmap) { + data.refCounter += 1; + return data; + } + if (data.file) { + return this.getFromFile(data.file); + } + return this.getFromUrl(data.url); + } + getSvgUrl(id) { + const data = this.#cache.get(id); + if (!data?.isSvg) { + return null; + } + return data.svgUrl; + } + deleteId(id) { + this.#cache ||= new Map(); + const data = this.#cache.get(id); + if (!data) { + return; + } + data.refCounter -= 1; + if (data.refCounter !== 0) { + return; + } + data.bitmap = null; + } + isValidId(id) { + return id.startsWith(`image_${this.#baseId}_`); + } +} +class CommandManager { + #commands = []; + #locked = false; + #maxSize; + #position = -1; + constructor(maxSize = 128) { + this.#maxSize = maxSize; + } + add({ + cmd, + undo, + mustExec, + type = NaN, + overwriteIfSameType = false, + keepUndo = false + }) { + if (mustExec) { + cmd(); + } + if (this.#locked) { + return; + } + const save = { + cmd, + undo, + type + }; + if (this.#position === -1) { + if (this.#commands.length > 0) { + this.#commands.length = 0; + } + this.#position = 0; + this.#commands.push(save); + return; + } + if (overwriteIfSameType && this.#commands[this.#position].type === type) { + if (keepUndo) { + save.undo = this.#commands[this.#position].undo; + } + this.#commands[this.#position] = save; + return; + } + const next = this.#position + 1; + if (next === this.#maxSize) { + this.#commands.splice(0, 1); + } else { + this.#position = next; + if (next < this.#commands.length) { + this.#commands.splice(next); + } + } + this.#commands.push(save); + } + undo() { + if (this.#position === -1) { + return; + } + this.#locked = true; + this.#commands[this.#position].undo(); + this.#locked = false; + this.#position -= 1; + } + redo() { + if (this.#position < this.#commands.length - 1) { + this.#position += 1; + this.#locked = true; + this.#commands[this.#position].cmd(); + this.#locked = false; + } + } + hasSomethingToUndo() { + return this.#position !== -1; + } + hasSomethingToRedo() { + return this.#position < this.#commands.length - 1; + } + destroy() { + this.#commands = null; + } +} +class KeyboardManager { + constructor(callbacks) { + this.buffer = []; + this.callbacks = new Map(); + this.allKeys = new Set(); + const { + isMac + } = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.FeatureTest.platform; + for (const [keys, callback, options = {}] of callbacks) { + for (const key of keys) { + const isMacKey = key.startsWith("mac+"); + if (isMac && isMacKey) { + this.callbacks.set(key.slice(4), { + callback, + options + }); + this.allKeys.add(key.split("+").at(-1)); + } else if (!isMac && !isMacKey) { + this.callbacks.set(key, { + callback, + options + }); + this.allKeys.add(key.split("+").at(-1)); + } + } + } + } + #serialize(event) { + if (event.altKey) { + this.buffer.push("alt"); + } + if (event.ctrlKey) { + this.buffer.push("ctrl"); + } + if (event.metaKey) { + this.buffer.push("meta"); + } + if (event.shiftKey) { + this.buffer.push("shift"); + } + this.buffer.push(event.key); + const str = this.buffer.join("+"); + this.buffer.length = 0; + return str; + } + exec(self, event) { + if (!this.allKeys.has(event.key)) { + return; + } + const info = this.callbacks.get(this.#serialize(event)); + if (!info) { + return; + } + const { + callback, + options: { + bubbles = false, + args = [], + checker = null + } + } = info; + if (checker && !checker(self, event)) { + return; + } + callback.bind(self, ...args)(); + if (!bubbles) { + event.stopPropagation(); + event.preventDefault(); + } + } +} +class ColorManager { + static _colorsMapping = new Map([["CanvasText", [0, 0, 0]], ["Canvas", [255, 255, 255]]]); + get _colors() { + const colors = new Map([["CanvasText", null], ["Canvas", null]]); + (0,_display_utils_js__WEBPACK_IMPORTED_MODULE_1__.getColorValues)(colors); + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "_colors", colors); + } + convert(color) { + const rgb = (0,_display_utils_js__WEBPACK_IMPORTED_MODULE_1__.getRGB)(color); + if (!window.matchMedia("(forced-colors: active)").matches) { + return rgb; + } + for (const [name, RGB] of this._colors) { + if (RGB.every((x, i) => x === rgb[i])) { + return ColorManager._colorsMapping.get(name); + } + } + return rgb; + } + getHexCode(name) { + const rgb = this._colors.get(name); + if (!rgb) { + return name; + } + return _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.Util.makeHexColor(...rgb); + } +} +class AnnotationEditorUIManager { + #activeEditor = null; + #allEditors = new Map(); + #allLayers = new Map(); + #altTextManager = null; + #annotationStorage = null; + #commandManager = new CommandManager(); + #currentPageIndex = 0; + #deletedAnnotationsElementIds = new Set(); + #draggingEditors = null; + #editorTypes = null; + #editorsToRescale = new Set(); + #filterFactory = null; + #focusMainContainerTimeoutId = null; + #idManager = new IdManager(); + #isEnabled = false; + #isWaiting = false; + #lastActiveElement = null; + #mode = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationEditorType.NONE; + #selectedEditors = new Set(); + #pageColors = null; + #boundBlur = this.blur.bind(this); + #boundFocus = this.focus.bind(this); + #boundCopy = this.copy.bind(this); + #boundCut = this.cut.bind(this); + #boundPaste = this.paste.bind(this); + #boundKeydown = this.keydown.bind(this); + #boundOnEditingAction = this.onEditingAction.bind(this); + #boundOnPageChanging = this.onPageChanging.bind(this); + #boundOnScaleChanging = this.onScaleChanging.bind(this); + #boundOnRotationChanging = this.onRotationChanging.bind(this); + #previousStates = { + isEditing: false, + isEmpty: true, + hasSomethingToUndo: false, + hasSomethingToRedo: false, + hasSelectedEditor: false + }; + #translation = [0, 0]; + #translationTimeoutId = null; + #container = null; + #viewer = null; + static TRANSLATE_SMALL = 1; + static TRANSLATE_BIG = 10; + static get _keyboardManager() { + const proto = AnnotationEditorUIManager.prototype; + const arrowChecker = self => { + return self.#container.contains(document.activeElement) && self.hasSomethingToControl(); + }; + const textInputChecker = (_self, { + target: el + }) => { + if (el instanceof HTMLInputElement) { + const { + type + } = el; + return type !== "text" && type !== "number"; + } + return true; + }; + const small = this.TRANSLATE_SMALL; + const big = this.TRANSLATE_BIG; + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "_keyboardManager", new KeyboardManager([[["ctrl+a", "mac+meta+a"], proto.selectAll, { + checker: textInputChecker + }], [["ctrl+z", "mac+meta+z"], proto.undo, { + checker: textInputChecker + }], [["ctrl+y", "ctrl+shift+z", "mac+meta+shift+z", "ctrl+shift+Z", "mac+meta+shift+Z"], proto.redo, { + checker: textInputChecker + }], [["Backspace", "alt+Backspace", "ctrl+Backspace", "shift+Backspace", "mac+Backspace", "mac+alt+Backspace", "mac+ctrl+Backspace", "Delete", "ctrl+Delete", "shift+Delete", "mac+Delete"], proto.delete, { + checker: textInputChecker + }], [["Enter", "mac+Enter"], proto.addNewEditorFromKeyboard, { + checker: self => self.#container.contains(document.activeElement) && !self.isEnterHandled + }], [[" ", "mac+ "], proto.addNewEditorFromKeyboard, { + checker: self => self.#container.contains(document.activeElement) + }], [["Escape", "mac+Escape"], proto.unselectAll], [["ArrowLeft", "mac+ArrowLeft"], proto.translateSelectedEditors, { + args: [-small, 0], + checker: arrowChecker + }], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], proto.translateSelectedEditors, { + args: [-big, 0], + checker: arrowChecker + }], [["ArrowRight", "mac+ArrowRight"], proto.translateSelectedEditors, { + args: [small, 0], + checker: arrowChecker + }], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], proto.translateSelectedEditors, { + args: [big, 0], + checker: arrowChecker + }], [["ArrowUp", "mac+ArrowUp"], proto.translateSelectedEditors, { + args: [0, -small], + checker: arrowChecker + }], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], proto.translateSelectedEditors, { + args: [0, -big], + checker: arrowChecker + }], [["ArrowDown", "mac+ArrowDown"], proto.translateSelectedEditors, { + args: [0, small], + checker: arrowChecker + }], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], proto.translateSelectedEditors, { + args: [0, big], + checker: arrowChecker + }]])); + } + constructor(container, viewer, altTextManager, eventBus, pdfDocument, pageColors) { + this.#container = container; + this.#viewer = viewer; + this.#altTextManager = altTextManager; + this._eventBus = eventBus; + this._eventBus._on("editingaction", this.#boundOnEditingAction); + this._eventBus._on("pagechanging", this.#boundOnPageChanging); + this._eventBus._on("scalechanging", this.#boundOnScaleChanging); + this._eventBus._on("rotationchanging", this.#boundOnRotationChanging); + this.#annotationStorage = pdfDocument.annotationStorage; + this.#filterFactory = pdfDocument.filterFactory; + this.#pageColors = pageColors; + this.viewParameters = { + realScale: _display_utils_js__WEBPACK_IMPORTED_MODULE_1__.PixelsPerInch.PDF_TO_CSS_UNITS, + rotation: 0 + }; + } + destroy() { + this.#removeKeyboardManager(); + this.#removeFocusManager(); + this._eventBus._off("editingaction", this.#boundOnEditingAction); + this._eventBus._off("pagechanging", this.#boundOnPageChanging); + this._eventBus._off("scalechanging", this.#boundOnScaleChanging); + this._eventBus._off("rotationchanging", this.#boundOnRotationChanging); + for (const layer of this.#allLayers.values()) { + layer.destroy(); + } + this.#allLayers.clear(); + this.#allEditors.clear(); + this.#editorsToRescale.clear(); + this.#activeEditor = null; + this.#selectedEditors.clear(); + this.#commandManager.destroy(); + this.#altTextManager.destroy(); + if (this.#focusMainContainerTimeoutId) { + clearTimeout(this.#focusMainContainerTimeoutId); + this.#focusMainContainerTimeoutId = null; + } + if (this.#translationTimeoutId) { + clearTimeout(this.#translationTimeoutId); + this.#translationTimeoutId = null; + } + } + get hcmFilter() { + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "hcmFilter", this.#pageColors ? this.#filterFactory.addHCMFilter(this.#pageColors.foreground, this.#pageColors.background) : "none"); + } + get direction() { + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "direction", getComputedStyle(this.#container).direction); + } + editAltText(editor) { + this.#altTextManager?.editAltText(this, editor); + } + onPageChanging({ + pageNumber + }) { + this.#currentPageIndex = pageNumber - 1; + } + focusMainContainer() { + this.#container.focus(); + } + findParent(x, y) { + for (const layer of this.#allLayers.values()) { + const { + x: layerX, + y: layerY, + width, + height + } = layer.div.getBoundingClientRect(); + if (x >= layerX && x <= layerX + width && y >= layerY && y <= layerY + height) { + return layer; + } + } + return null; + } + disableUserSelect(value = false) { + this.#viewer.classList.toggle("noUserSelect", value); + } + addShouldRescale(editor) { + this.#editorsToRescale.add(editor); + } + removeShouldRescale(editor) { + this.#editorsToRescale.delete(editor); + } + onScaleChanging({ + scale + }) { + this.commitOrRemove(); + this.viewParameters.realScale = scale * _display_utils_js__WEBPACK_IMPORTED_MODULE_1__.PixelsPerInch.PDF_TO_CSS_UNITS; + for (const editor of this.#editorsToRescale) { + editor.onScaleChanging(); + } + } + onRotationChanging({ + pagesRotation + }) { + this.commitOrRemove(); + this.viewParameters.rotation = pagesRotation; + } + addToAnnotationStorage(editor) { + if (!editor.isEmpty() && this.#annotationStorage && !this.#annotationStorage.has(editor.id)) { + this.#annotationStorage.setValue(editor.id, editor); + } + } + #addFocusManager() { + window.addEventListener("focus", this.#boundFocus); + window.addEventListener("blur", this.#boundBlur); + } + #removeFocusManager() { + window.removeEventListener("focus", this.#boundFocus); + window.removeEventListener("blur", this.#boundBlur); + } + blur() { + if (!this.hasSelection) { + return; + } + const { + activeElement + } = document; + for (const editor of this.#selectedEditors) { + if (editor.div.contains(activeElement)) { + this.#lastActiveElement = [editor, activeElement]; + editor._focusEventsAllowed = false; + break; + } + } + } + focus() { + if (!this.#lastActiveElement) { + return; + } + const [lastEditor, lastActiveElement] = this.#lastActiveElement; + this.#lastActiveElement = null; + lastActiveElement.addEventListener("focusin", () => { + lastEditor._focusEventsAllowed = true; + }, { + once: true + }); + lastActiveElement.focus(); + } + #addKeyboardManager() { + window.addEventListener("keydown", this.#boundKeydown); + } + #removeKeyboardManager() { + window.removeEventListener("keydown", this.#boundKeydown); + } + #addCopyPasteListeners() { + document.addEventListener("copy", this.#boundCopy); + document.addEventListener("cut", this.#boundCut); + document.addEventListener("paste", this.#boundPaste); + } + #removeCopyPasteListeners() { + document.removeEventListener("copy", this.#boundCopy); + document.removeEventListener("cut", this.#boundCut); + document.removeEventListener("paste", this.#boundPaste); + } + addEditListeners() { + this.#addKeyboardManager(); + this.#addCopyPasteListeners(); + } + removeEditListeners() { + this.#removeKeyboardManager(); + this.#removeCopyPasteListeners(); + } + copy(event) { + event.preventDefault(); + this.#activeEditor?.commitOrRemove(); + if (!this.hasSelection) { + return; + } + const editors = []; + for (const editor of this.#selectedEditors) { + const serialized = editor.serialize(true); + if (serialized) { + editors.push(serialized); + } + } + if (editors.length === 0) { + return; + } + event.clipboardData.setData("application/pdfjs", JSON.stringify(editors)); + } + cut(event) { + this.copy(event); + this.delete(); + } + paste(event) { + event.preventDefault(); + const { + clipboardData + } = event; + for (const item of clipboardData.items) { + for (const editorType of this.#editorTypes) { + if (editorType.isHandlingMimeForPasting(item.type)) { + editorType.paste(item, this.currentLayer); + return; + } + } + } + let data = clipboardData.getData("application/pdfjs"); + if (!data) { + return; + } + try { + data = JSON.parse(data); + } catch (ex) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`paste: "${ex.message}".`); + return; + } + if (!Array.isArray(data)) { + return; + } + this.unselectAll(); + const layer = this.currentLayer; + try { + const newEditors = []; + for (const editor of data) { + const deserializedEditor = layer.deserialize(editor); + if (!deserializedEditor) { + return; + } + newEditors.push(deserializedEditor); + } + const cmd = () => { + for (const editor of newEditors) { + this.#addEditorToLayer(editor); + } + this.#selectEditors(newEditors); + }; + const undo = () => { + for (const editor of newEditors) { + editor.remove(); + } + }; + this.addCommands({ + cmd, + undo, + mustExec: true + }); + } catch (ex) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`paste: "${ex.message}".`); + } + } + keydown(event) { + if (!this.isEditorHandlingKeyboard) { + AnnotationEditorUIManager._keyboardManager.exec(this, event); + } + } + onEditingAction(details) { + if (["undo", "redo", "delete", "selectAll"].includes(details.name)) { + this[details.name](); + } + } + #dispatchUpdateStates(details) { + const hasChanged = Object.entries(details).some(([key, value]) => this.#previousStates[key] !== value); + if (hasChanged) { + this._eventBus.dispatch("annotationeditorstateschanged", { + source: this, + details: Object.assign(this.#previousStates, details) + }); + } + } + #dispatchUpdateUI(details) { + this._eventBus.dispatch("annotationeditorparamschanged", { + source: this, + details + }); + } + setEditingState(isEditing) { + if (isEditing) { + this.#addFocusManager(); + this.#addKeyboardManager(); + this.#addCopyPasteListeners(); + this.#dispatchUpdateStates({ + isEditing: this.#mode !== _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationEditorType.NONE, + isEmpty: this.#isEmpty(), + hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(), + hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(), + hasSelectedEditor: false + }); + } else { + this.#removeFocusManager(); + this.#removeKeyboardManager(); + this.#removeCopyPasteListeners(); + this.#dispatchUpdateStates({ + isEditing: false + }); + this.disableUserSelect(false); + } + } + registerEditorTypes(types) { + if (this.#editorTypes) { + return; + } + this.#editorTypes = types; + for (const editorType of this.#editorTypes) { + this.#dispatchUpdateUI(editorType.defaultPropertiesToUpdate); + } + } + getId() { + return this.#idManager.getId(); + } + get currentLayer() { + return this.#allLayers.get(this.#currentPageIndex); + } + getLayer(pageIndex) { + return this.#allLayers.get(pageIndex); + } + get currentPageIndex() { + return this.#currentPageIndex; + } + addLayer(layer) { + this.#allLayers.set(layer.pageIndex, layer); + if (this.#isEnabled) { + layer.enable(); + } else { + layer.disable(); + } + } + removeLayer(layer) { + this.#allLayers.delete(layer.pageIndex); + } + updateMode(mode, editId = null, isFromKeyboard = false) { + if (this.#mode === mode) { + return; + } + this.#mode = mode; + if (mode === _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationEditorType.NONE) { + this.setEditingState(false); + this.#disableAll(); + return; + } + this.setEditingState(true); + this.#enableAll(); + this.unselectAll(); + for (const layer of this.#allLayers.values()) { + layer.updateMode(mode); + } + if (!editId && isFromKeyboard) { + this.addNewEditorFromKeyboard(); + return; + } + if (!editId) { + return; + } + for (const editor of this.#allEditors.values()) { + if (editor.annotationElementId === editId) { + this.setSelected(editor); + editor.enterInEditMode(); + break; + } + } + } + addNewEditorFromKeyboard() { + this.currentLayer.addNewEditor(); + } + updateToolbar(mode) { + if (mode === this.#mode) { + return; + } + this._eventBus.dispatch("switchannotationeditormode", { + source: this, + mode + }); + } + updateParams(type, value) { + if (!this.#editorTypes) { + return; + } + if (type === _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationEditorParamsType.CREATE) { + this.currentLayer.addNewEditor(); + return; + } + for (const editor of this.#selectedEditors) { + editor.updateParams(type, value); + } + for (const editorType of this.#editorTypes) { + editorType.updateDefaultParams(type, value); + } + } + enableWaiting(mustWait = false) { + if (this.#isWaiting === mustWait) { + return; + } + this.#isWaiting = mustWait; + for (const layer of this.#allLayers.values()) { + if (mustWait) { + layer.disableClick(); + } else { + layer.enableClick(); + } + layer.div.classList.toggle("waiting", mustWait); + } + } + #enableAll() { + if (!this.#isEnabled) { + this.#isEnabled = true; + for (const layer of this.#allLayers.values()) { + layer.enable(); + } + } + } + #disableAll() { + this.unselectAll(); + if (this.#isEnabled) { + this.#isEnabled = false; + for (const layer of this.#allLayers.values()) { + layer.disable(); + } + } + } + getEditors(pageIndex) { + const editors = []; + for (const editor of this.#allEditors.values()) { + if (editor.pageIndex === pageIndex) { + editors.push(editor); + } + } + return editors; + } + getEditor(id) { + return this.#allEditors.get(id); + } + addEditor(editor) { + this.#allEditors.set(editor.id, editor); + } + removeEditor(editor) { + if (editor.div.contains(document.activeElement)) { + if (this.#focusMainContainerTimeoutId) { + clearTimeout(this.#focusMainContainerTimeoutId); + } + this.#focusMainContainerTimeoutId = setTimeout(() => { + this.focusMainContainer(); + this.#focusMainContainerTimeoutId = null; + }, 0); + } + this.#allEditors.delete(editor.id); + this.unselect(editor); + if (!editor.annotationElementId || !this.#deletedAnnotationsElementIds.has(editor.annotationElementId)) { + this.#annotationStorage?.remove(editor.id); + } + } + addDeletedAnnotationElement(editor) { + this.#deletedAnnotationsElementIds.add(editor.annotationElementId); + editor.deleted = true; + } + isDeletedAnnotationElement(annotationElementId) { + return this.#deletedAnnotationsElementIds.has(annotationElementId); + } + removeDeletedAnnotationElement(editor) { + this.#deletedAnnotationsElementIds.delete(editor.annotationElementId); + editor.deleted = false; + } + #addEditorToLayer(editor) { + const layer = this.#allLayers.get(editor.pageIndex); + if (layer) { + layer.addOrRebuild(editor); + } else { + this.addEditor(editor); + } + } + setActiveEditor(editor) { + if (this.#activeEditor === editor) { + return; + } + this.#activeEditor = editor; + if (editor) { + this.#dispatchUpdateUI(editor.propertiesToUpdate); + } + } + toggleSelected(editor) { + if (this.#selectedEditors.has(editor)) { + this.#selectedEditors.delete(editor); + editor.unselect(); + this.#dispatchUpdateStates({ + hasSelectedEditor: this.hasSelection + }); + return; + } + this.#selectedEditors.add(editor); + editor.select(); + this.#dispatchUpdateUI(editor.propertiesToUpdate); + this.#dispatchUpdateStates({ + hasSelectedEditor: true + }); + } + setSelected(editor) { + for (const ed of this.#selectedEditors) { + if (ed !== editor) { + ed.unselect(); + } + } + this.#selectedEditors.clear(); + this.#selectedEditors.add(editor); + editor.select(); + this.#dispatchUpdateUI(editor.propertiesToUpdate); + this.#dispatchUpdateStates({ + hasSelectedEditor: true + }); + } + isSelected(editor) { + return this.#selectedEditors.has(editor); + } + get firstSelectedEditor() { + return this.#selectedEditors.values().next().value; + } + unselect(editor) { + editor.unselect(); + this.#selectedEditors.delete(editor); + this.#dispatchUpdateStates({ + hasSelectedEditor: this.hasSelection + }); + } + get hasSelection() { + return this.#selectedEditors.size !== 0; + } + get isEnterHandled() { + return this.#selectedEditors.size === 1 && this.firstSelectedEditor.isEnterHandled; + } + undo() { + this.#commandManager.undo(); + this.#dispatchUpdateStates({ + hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(), + hasSomethingToRedo: true, + isEmpty: this.#isEmpty() + }); + } + redo() { + this.#commandManager.redo(); + this.#dispatchUpdateStates({ + hasSomethingToUndo: true, + hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(), + isEmpty: this.#isEmpty() + }); + } + addCommands(params) { + this.#commandManager.add(params); + this.#dispatchUpdateStates({ + hasSomethingToUndo: true, + hasSomethingToRedo: false, + isEmpty: this.#isEmpty() + }); + } + #isEmpty() { + if (this.#allEditors.size === 0) { + return true; + } + if (this.#allEditors.size === 1) { + for (const editor of this.#allEditors.values()) { + return editor.isEmpty(); + } + } + return false; + } + delete() { + this.commitOrRemove(); + if (!this.hasSelection) { + return; + } + const editors = [...this.#selectedEditors]; + const cmd = () => { + for (const editor of editors) { + editor.remove(); + } + }; + const undo = () => { + for (const editor of editors) { + this.#addEditorToLayer(editor); + } + }; + this.addCommands({ + cmd, + undo, + mustExec: true + }); + } + commitOrRemove() { + this.#activeEditor?.commitOrRemove(); + } + hasSomethingToControl() { + return this.#activeEditor || this.hasSelection; + } + #selectEditors(editors) { + this.#selectedEditors.clear(); + for (const editor of editors) { + if (editor.isEmpty()) { + continue; + } + this.#selectedEditors.add(editor); + editor.select(); + } + this.#dispatchUpdateStates({ + hasSelectedEditor: true + }); + } + selectAll() { + for (const editor of this.#selectedEditors) { + editor.commit(); + } + this.#selectEditors(this.#allEditors.values()); + } + unselectAll() { + if (this.#activeEditor) { + this.#activeEditor.commitOrRemove(); + return; + } + if (!this.hasSelection) { + return; + } + for (const editor of this.#selectedEditors) { + editor.unselect(); + } + this.#selectedEditors.clear(); + this.#dispatchUpdateStates({ + hasSelectedEditor: false + }); + } + translateSelectedEditors(x, y, noCommit = false) { + if (!noCommit) { + this.commitOrRemove(); + } + if (!this.hasSelection) { + return; + } + this.#translation[0] += x; + this.#translation[1] += y; + const [totalX, totalY] = this.#translation; + const editors = [...this.#selectedEditors]; + const TIME_TO_WAIT = 1000; + if (this.#translationTimeoutId) { + clearTimeout(this.#translationTimeoutId); + } + this.#translationTimeoutId = setTimeout(() => { + this.#translationTimeoutId = null; + this.#translation[0] = this.#translation[1] = 0; + this.addCommands({ + cmd: () => { + for (const editor of editors) { + if (this.#allEditors.has(editor.id)) { + editor.translateInPage(totalX, totalY); + } + } + }, + undo: () => { + for (const editor of editors) { + if (this.#allEditors.has(editor.id)) { + editor.translateInPage(-totalX, -totalY); + } + } + }, + mustExec: false + }); + }, TIME_TO_WAIT); + for (const editor of editors) { + editor.translateInPage(x, y); + } + } + setUpDragSession() { + if (!this.hasSelection) { + return; + } + this.disableUserSelect(true); + this.#draggingEditors = new Map(); + for (const editor of this.#selectedEditors) { + this.#draggingEditors.set(editor, { + savedX: editor.x, + savedY: editor.y, + savedPageIndex: editor.pageIndex, + newX: 0, + newY: 0, + newPageIndex: -1 + }); + } + } + endDragSession() { + if (!this.#draggingEditors) { + return false; + } + this.disableUserSelect(false); + const map = this.#draggingEditors; + this.#draggingEditors = null; + let mustBeAddedInUndoStack = false; + for (const [{ + x, + y, + pageIndex + }, value] of map) { + value.newX = x; + value.newY = y; + value.newPageIndex = pageIndex; + mustBeAddedInUndoStack ||= x !== value.savedX || y !== value.savedY || pageIndex !== value.savedPageIndex; + } + if (!mustBeAddedInUndoStack) { + return false; + } + const move = (editor, x, y, pageIndex) => { + if (this.#allEditors.has(editor.id)) { + const parent = this.#allLayers.get(pageIndex); + if (parent) { + editor._setParentAndPosition(parent, x, y); + } else { + editor.pageIndex = pageIndex; + editor.x = x; + editor.y = y; + } + } + }; + this.addCommands({ + cmd: () => { + for (const [editor, { + newX, + newY, + newPageIndex + }] of map) { + move(editor, newX, newY, newPageIndex); + } + }, + undo: () => { + for (const [editor, { + savedX, + savedY, + savedPageIndex + }] of map) { + move(editor, savedX, savedY, savedPageIndex); + } + }, + mustExec: true + }); + return true; + } + dragSelectedEditors(tx, ty) { + if (!this.#draggingEditors) { + return; + } + for (const editor of this.#draggingEditors.keys()) { + editor.drag(tx, ty); + } + } + rebuild(editor) { + if (editor.parent === null) { + const parent = this.getLayer(editor.pageIndex); + if (parent) { + parent.changeParent(editor); + parent.addOrRebuild(editor); + } else { + this.addEditor(editor); + this.addToAnnotationStorage(editor); + editor.rebuild(); + } + } else { + editor.parent.addOrRebuild(editor); + } + } + get isEditorHandlingKeyboard() { + return this.getActive()?.shouldGetKeyboardEvents() || this.#selectedEditors.size === 1 && this.firstSelectedEditor.shouldGetKeyboardEvents(); + } + isActive(editor) { + return this.#activeEditor === editor; + } + getActive() { + return this.#activeEditor; + } + getMode() { + return this.#mode; + } + get imageManager() { + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "imageManager", new ImageManager()); + } +} + + +/***/ }), + +/***/ 171: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ PDFFetchStream: () => (/* binding */ PDFFetchStream) +/* harmony export */ }); +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); +/* harmony import */ var _network_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(253); + + +; +function createFetchOptions(headers, withCredentials, abortController) { + return { + method: "GET", + headers, + signal: abortController.signal, + mode: "cors", + credentials: withCredentials ? "include" : "same-origin", + redirect: "follow" + }; +} +function createHeaders(httpHeaders) { + const headers = new Headers(); + for (const property in httpHeaders) { + const value = httpHeaders[property]; + if (value === undefined) { + continue; + } + headers.append(property, value); + } + return headers; +} +function getArrayBuffer(val) { + if (val instanceof Uint8Array) { + return val.buffer; + } + if (val instanceof ArrayBuffer) { + return val; + } + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`getArrayBuffer - unexpected data format: ${val}`); + return new Uint8Array(val).buffer; +} +class PDFFetchStream { + constructor(source) { + this.source = source; + this.isHttp = /^https?:/i.test(source.url); + this.httpHeaders = this.isHttp && source.httpHeaders || {}; + this._fullRequestReader = null; + this._rangeRequestReaders = []; + } + get _progressiveDataLength() { + return this._fullRequestReader?._loaded ?? 0; + } + getFullReader() { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(!this._fullRequestReader, "PDFFetchStream.getFullReader can only be called once."); + this._fullRequestReader = new PDFFetchStreamReader(this); + return this._fullRequestReader; + } + getRangeReader(begin, end) { + if (end <= this._progressiveDataLength) { + return null; + } + const reader = new PDFFetchStreamRangeReader(this, begin, end); + this._rangeRequestReaders.push(reader); + return reader; + } + cancelAllRequests(reason) { + this._fullRequestReader?.cancel(reason); + for (const reader of this._rangeRequestReaders.slice(0)) { + reader.cancel(reason); + } + } +} +class PDFFetchStreamReader { + constructor(stream) { + this._stream = stream; + this._reader = null; + this._loaded = 0; + this._filename = null; + const source = stream.source; + this._withCredentials = source.withCredentials || false; + this._contentLength = source.length; + this._headersCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this._disableRange = source.disableRange || false; + this._rangeChunkSize = source.rangeChunkSize; + if (!this._rangeChunkSize && !this._disableRange) { + this._disableRange = true; + } + this._abortController = new AbortController(); + this._isStreamingSupported = !source.disableStream; + this._isRangeSupported = !source.disableRange; + this._headers = createHeaders(this._stream.httpHeaders); + const url = source.url; + fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(response => { + if (!(0,_network_utils_js__WEBPACK_IMPORTED_MODULE_1__.validateResponseStatus)(response.status)) { + throw (0,_network_utils_js__WEBPACK_IMPORTED_MODULE_1__.createResponseStatusError)(response.status, url); + } + this._reader = response.body.getReader(); + this._headersCapability.resolve(); + const getResponseHeader = name => { + return response.headers.get(name); + }; + const { + allowRangeRequests, + suggestedLength + } = (0,_network_utils_js__WEBPACK_IMPORTED_MODULE_1__.validateRangeRequestCapabilities)({ + getResponseHeader, + isHttp: this._stream.isHttp, + rangeChunkSize: this._rangeChunkSize, + disableRange: this._disableRange + }); + this._isRangeSupported = allowRangeRequests; + this._contentLength = suggestedLength || this._contentLength; + this._filename = (0,_network_utils_js__WEBPACK_IMPORTED_MODULE_1__.extractFilenameFromHeader)(getResponseHeader); + if (!this._isStreamingSupported && this._isRangeSupported) { + this.cancel(new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AbortException("Streaming is disabled.")); + } + }).catch(this._headersCapability.reject); + this.onProgress = null; + } + get headersReady() { + return this._headersCapability.promise; + } + get filename() { + return this._filename; + } + get contentLength() { + return this._contentLength; + } + get isRangeSupported() { + return this._isRangeSupported; + } + get isStreamingSupported() { + return this._isStreamingSupported; + } + async read() { + await this._headersCapability.promise; + const { + value, + done + } = await this._reader.read(); + if (done) { + return { + value, + done + }; + } + this._loaded += value.byteLength; + this.onProgress?.({ + loaded: this._loaded, + total: this._contentLength + }); + return { + value: getArrayBuffer(value), + done: false + }; + } + cancel(reason) { + this._reader?.cancel(reason); + this._abortController.abort(); + } +} +class PDFFetchStreamRangeReader { + constructor(stream, begin, end) { + this._stream = stream; + this._reader = null; + this._loaded = 0; + const source = stream.source; + this._withCredentials = source.withCredentials || false; + this._readCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this._isStreamingSupported = !source.disableStream; + this._abortController = new AbortController(); + this._headers = createHeaders(this._stream.httpHeaders); + this._headers.append("Range", `bytes=${begin}-${end - 1}`); + const url = source.url; + fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(response => { + if (!(0,_network_utils_js__WEBPACK_IMPORTED_MODULE_1__.validateResponseStatus)(response.status)) { + throw (0,_network_utils_js__WEBPACK_IMPORTED_MODULE_1__.createResponseStatusError)(response.status, url); + } + this._readCapability.resolve(); + this._reader = response.body.getReader(); + }).catch(this._readCapability.reject); + this.onProgress = null; + } + get isStreamingSupported() { + return this._isStreamingSupported; + } + async read() { + await this._readCapability.promise; + const { + value, + done + } = await this._reader.read(); + if (done) { + return { + value, + done + }; + } + this._loaded += value.byteLength; + this.onProgress?.({ + loaded: this._loaded + }); + return { + value: getArrayBuffer(value), + done: false + }; + } + cancel(reason) { + this._reader?.cancel(reason); + this._abortController.abort(); + } +} + + +/***/ }), + +/***/ 742: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ FontFaceObject: () => (/* binding */ FontFaceObject), +/* harmony export */ FontLoader: () => (/* binding */ FontLoader) +/* harmony export */ }); +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); + +class FontLoader { + #systemFonts = new Set(); + constructor({ + ownerDocument = globalThis.document, + styleElement = null + }) { + this._document = ownerDocument; + this.nativeFontFaces = new Set(); + this.styleElement = null; + this.loadingRequests = []; + this.loadTestFontId = 0; + } + addNativeFontFace(nativeFontFace) { + this.nativeFontFaces.add(nativeFontFace); + this._document.fonts.add(nativeFontFace); + } + removeNativeFontFace(nativeFontFace) { + this.nativeFontFaces.delete(nativeFontFace); + this._document.fonts.delete(nativeFontFace); + } + insertRule(rule) { + if (!this.styleElement) { + this.styleElement = this._document.createElement("style"); + this._document.documentElement.getElementsByTagName("head")[0].append(this.styleElement); + } + const styleSheet = this.styleElement.sheet; + styleSheet.insertRule(rule, styleSheet.cssRules.length); + } + clear() { + for (const nativeFontFace of this.nativeFontFaces) { + this._document.fonts.delete(nativeFontFace); + } + this.nativeFontFaces.clear(); + this.#systemFonts.clear(); + if (this.styleElement) { + this.styleElement.remove(); + this.styleElement = null; + } + } + async loadSystemFont({ + systemFontInfo: info, + _inspectFont + }) { + if (!info || this.#systemFonts.has(info.loadedName)) { + return; + } + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(!this.disableFontFace, "loadSystemFont shouldn't be called when `disableFontFace` is set."); + if (this.isFontLoadingAPISupported) { + const { + loadedName, + src, + style + } = info; + const fontFace = new FontFace(loadedName, src, style); + this.addNativeFontFace(fontFace); + try { + await fontFace.load(); + this.#systemFonts.add(loadedName); + _inspectFont?.(info); + } catch { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`Cannot load system font: ${info.baseFontName}, installing it could help to improve PDF rendering.`); + this.removeNativeFontFace(fontFace); + } + return; + } + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Not implemented: loadSystemFont without the Font Loading API."); + } + async bind(font) { + if (font.attached || font.missingFile && !font.systemFontInfo) { + return; + } + font.attached = true; + if (font.systemFontInfo) { + await this.loadSystemFont(font); + return; + } + if (this.isFontLoadingAPISupported) { + const nativeFontFace = font.createNativeFontFace(); + if (nativeFontFace) { + this.addNativeFontFace(nativeFontFace); + try { + await nativeFontFace.loaded; + } catch (ex) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`Failed to load font '${nativeFontFace.family}': '${ex}'.`); + font.disableFontFace = true; + throw ex; + } + } + return; + } + const rule = font.createFontFaceRule(); + if (rule) { + this.insertRule(rule); + if (this.isSyncFontLoadingSupported) { + return; + } + await new Promise(resolve => { + const request = this._queueLoadingCallback(resolve); + this._prepareFontLoadEvent(font, request); + }); + } + } + get isFontLoadingAPISupported() { + const hasFonts = !!this._document?.fonts; + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "isFontLoadingAPISupported", hasFonts); + } + get isSyncFontLoadingSupported() { + let supported = false; + if (_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS) { + supported = true; + } else if (typeof navigator !== "undefined" && typeof navigator?.userAgent === "string" && /Mozilla\/5.0.*?rv:\d+.*? Gecko/.test(navigator.userAgent)) { + supported = true; + } + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "isSyncFontLoadingSupported", supported); + } + _queueLoadingCallback(callback) { + function completeRequest() { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(!request.done, "completeRequest() cannot be called twice."); + request.done = true; + while (loadingRequests.length > 0 && loadingRequests[0].done) { + const otherRequest = loadingRequests.shift(); + setTimeout(otherRequest.callback, 0); + } + } + const { + loadingRequests + } = this; + const request = { + done: false, + complete: completeRequest, + callback + }; + loadingRequests.push(request); + return request; + } + get _loadTestFont() { + const testFont = atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQA" + "FQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAA" + "ALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgA" + "AAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1" + "AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD" + "6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACM" + "AooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4D" + "IP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAA" + "AAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUA" + "AQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgAB" + "AAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABY" + "AAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAA" + "AC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAA" + "AAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQAC" + "AQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3" + "Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTj" + "FQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA=="); + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "_loadTestFont", testFont); + } + _prepareFontLoadEvent(font, request) { + function int32(data, offset) { + return data.charCodeAt(offset) << 24 | data.charCodeAt(offset + 1) << 16 | data.charCodeAt(offset + 2) << 8 | data.charCodeAt(offset + 3) & 0xff; + } + function spliceString(s, offset, remove, insert) { + const chunk1 = s.substring(0, offset); + const chunk2 = s.substring(offset + remove); + return chunk1 + insert + chunk2; + } + let i, ii; + const canvas = this._document.createElement("canvas"); + canvas.width = 1; + canvas.height = 1; + const ctx = canvas.getContext("2d"); + let called = 0; + function isFontReady(name, callback) { + if (++called > 30) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)("Load test font never loaded."); + callback(); + return; + } + ctx.font = "30px " + name; + ctx.fillText(".", 0, 20); + const imageData = ctx.getImageData(0, 0, 1, 1); + if (imageData.data[3] > 0) { + callback(); + return; + } + setTimeout(isFontReady.bind(null, name, callback)); + } + const loadTestFontId = `lt${Date.now()}${this.loadTestFontId++}`; + let data = this._loadTestFont; + const COMMENT_OFFSET = 976; + data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId); + const CFF_CHECKSUM_OFFSET = 16; + const XXXX_VALUE = 0x58585858; + let checksum = int32(data, CFF_CHECKSUM_OFFSET); + for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) { + checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0; + } + if (i < loadTestFontId.length) { + checksum = checksum - XXXX_VALUE + int32(loadTestFontId + "XXX", i) | 0; + } + data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.string32)(checksum)); + const url = `url(data:font/opentype;base64,${btoa(data)});`; + const rule = `@font-face {font-family:"${loadTestFontId}";src:${url}}`; + this.insertRule(rule); + const div = this._document.createElement("div"); + div.style.visibility = "hidden"; + div.style.width = div.style.height = "10px"; + div.style.position = "absolute"; + div.style.top = div.style.left = "0px"; + for (const name of [font.loadedName, loadTestFontId]) { + const span = this._document.createElement("span"); + span.textContent = "Hi"; + span.style.fontFamily = name; + div.append(span); + } + this._document.body.append(div); + isFontReady(loadTestFontId, () => { + div.remove(); + request.complete(); + }); + } +} +class FontFaceObject { + constructor(translatedData, { + isEvalSupported = true, + disableFontFace = false, + ignoreErrors = false, + inspectFont = null + }) { + this.compiledGlyphs = Object.create(null); + for (const i in translatedData) { + this[i] = translatedData[i]; + } + this.isEvalSupported = isEvalSupported !== false; + this.disableFontFace = disableFontFace === true; + this.ignoreErrors = ignoreErrors === true; + this._inspectFont = inspectFont; + } + createNativeFontFace() { + if (!this.data || this.disableFontFace) { + return null; + } + let nativeFontFace; + if (!this.cssFontInfo) { + nativeFontFace = new FontFace(this.loadedName, this.data, {}); + } else { + const css = { + weight: this.cssFontInfo.fontWeight + }; + if (this.cssFontInfo.italicAngle) { + css.style = `oblique ${this.cssFontInfo.italicAngle}deg`; + } + nativeFontFace = new FontFace(this.cssFontInfo.fontFamily, this.data, css); + } + this._inspectFont?.(this); + return nativeFontFace; + } + createFontFaceRule() { + if (!this.data || this.disableFontFace) { + return null; + } + const data = (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.bytesToString)(this.data); + const url = `url(data:${this.mimetype};base64,${btoa(data)});`; + let rule; + if (!this.cssFontInfo) { + rule = `@font-face {font-family:"${this.loadedName}";src:${url}}`; + } else { + let css = `font-weight: ${this.cssFontInfo.fontWeight};`; + if (this.cssFontInfo.italicAngle) { + css += `font-style: oblique ${this.cssFontInfo.italicAngle}deg;`; + } + rule = `@font-face {font-family:"${this.cssFontInfo.fontFamily}";${css}src:${url}}`; + } + this._inspectFont?.(this, url); + return rule; + } + getPathGenerator(objs, character) { + if (this.compiledGlyphs[character] !== undefined) { + return this.compiledGlyphs[character]; + } + let cmds; + try { + cmds = objs.get(this.loadedName + "_path_" + character); + } catch (ex) { + if (!this.ignoreErrors) { + throw ex; + } + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`getPathGenerator - ignoring character: "${ex}".`); + return this.compiledGlyphs[character] = function (c, size) {}; + } + if (this.isEvalSupported && _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.FeatureTest.isEvalSupported) { + const jsBuf = []; + for (const current of cmds) { + const args = current.args !== undefined ? current.args.join(",") : ""; + jsBuf.push("c.", current.cmd, "(", args, ");\n"); + } + return this.compiledGlyphs[character] = new Function("c", "size", jsBuf.join("")); + } + return this.compiledGlyphs[character] = function (c, size) { + for (const current of cmds) { + if (current.cmd === "scale") { + current.args = [size, -size]; + } + c[current.cmd].apply(c, current.args); + } + }; + } +} + + +/***/ }), + +/***/ 472: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Metadata: () => (/* binding */ Metadata) +/* harmony export */ }); +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); + +class Metadata { + #metadataMap; + #data; + constructor({ + parsedData, + rawData + }) { + this.#metadataMap = parsedData; + this.#data = rawData; + } + getRaw() { + return this.#data; + } + get(name) { + return this.#metadataMap.get(name) ?? null; + } + getAll() { + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.objectFromMap)(this.#metadataMap); + } + has(name) { + return this.#metadataMap.has(name); + } +} + + +/***/ }), + +/***/ 474: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ PDFNetworkStream: () => (/* binding */ PDFNetworkStream) +/* harmony export */ }); +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); +/* harmony import */ var _network_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(253); + + +; +const OK_RESPONSE = 200; +const PARTIAL_CONTENT_RESPONSE = 206; +function getArrayBuffer(xhr) { + const data = xhr.response; + if (typeof data !== "string") { + return data; + } + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.stringToBytes)(data).buffer; +} +class NetworkManager { + constructor(url, args = {}) { + this.url = url; + this.isHttp = /^https?:/i.test(url); + this.httpHeaders = this.isHttp && args.httpHeaders || Object.create(null); + this.withCredentials = args.withCredentials || false; + this.currXhrId = 0; + this.pendingRequests = Object.create(null); + } + requestRange(begin, end, listeners) { + const args = { + begin, + end + }; + for (const prop in listeners) { + args[prop] = listeners[prop]; + } + return this.request(args); + } + requestFull(listeners) { + return this.request(listeners); + } + request(args) { + const xhr = new XMLHttpRequest(); + const xhrId = this.currXhrId++; + const pendingRequest = this.pendingRequests[xhrId] = { + xhr + }; + xhr.open("GET", this.url); + xhr.withCredentials = this.withCredentials; + for (const property in this.httpHeaders) { + const value = this.httpHeaders[property]; + if (value === undefined) { + continue; + } + xhr.setRequestHeader(property, value); + } + if (this.isHttp && "begin" in args && "end" in args) { + xhr.setRequestHeader("Range", `bytes=${args.begin}-${args.end - 1}`); + pendingRequest.expectedStatus = PARTIAL_CONTENT_RESPONSE; + } else { + pendingRequest.expectedStatus = OK_RESPONSE; + } + xhr.responseType = "arraybuffer"; + if (args.onError) { + xhr.onerror = function (evt) { + args.onError(xhr.status); + }; + } + xhr.onreadystatechange = this.onStateChange.bind(this, xhrId); + xhr.onprogress = this.onProgress.bind(this, xhrId); + pendingRequest.onHeadersReceived = args.onHeadersReceived; + pendingRequest.onDone = args.onDone; + pendingRequest.onError = args.onError; + pendingRequest.onProgress = args.onProgress; + xhr.send(null); + return xhrId; + } + onProgress(xhrId, evt) { + const pendingRequest = this.pendingRequests[xhrId]; + if (!pendingRequest) { + return; + } + pendingRequest.onProgress?.(evt); + } + onStateChange(xhrId, evt) { + const pendingRequest = this.pendingRequests[xhrId]; + if (!pendingRequest) { + return; + } + const xhr = pendingRequest.xhr; + if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) { + pendingRequest.onHeadersReceived(); + delete pendingRequest.onHeadersReceived; + } + if (xhr.readyState !== 4) { + return; + } + if (!(xhrId in this.pendingRequests)) { + return; + } + delete this.pendingRequests[xhrId]; + if (xhr.status === 0 && this.isHttp) { + pendingRequest.onError?.(xhr.status); + return; + } + const xhrStatus = xhr.status || OK_RESPONSE; + const ok_response_on_range_request = xhrStatus === OK_RESPONSE && pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE; + if (!ok_response_on_range_request && xhrStatus !== pendingRequest.expectedStatus) { + pendingRequest.onError?.(xhr.status); + return; + } + const chunk = getArrayBuffer(xhr); + if (xhrStatus === PARTIAL_CONTENT_RESPONSE) { + const rangeHeader = xhr.getResponseHeader("Content-Range"); + const matches = /bytes (\d+)-(\d+)\/(\d+)/.exec(rangeHeader); + pendingRequest.onDone({ + begin: parseInt(matches[1], 10), + chunk + }); + } else if (chunk) { + pendingRequest.onDone({ + begin: 0, + chunk + }); + } else { + pendingRequest.onError?.(xhr.status); + } + } + getRequestXhr(xhrId) { + return this.pendingRequests[xhrId].xhr; + } + isPendingRequest(xhrId) { + return xhrId in this.pendingRequests; + } + abortRequest(xhrId) { + const xhr = this.pendingRequests[xhrId].xhr; + delete this.pendingRequests[xhrId]; + xhr.abort(); + } +} +class PDFNetworkStream { + constructor(source) { + this._source = source; + this._manager = new NetworkManager(source.url, { + httpHeaders: source.httpHeaders, + withCredentials: source.withCredentials + }); + this._rangeChunkSize = source.rangeChunkSize; + this._fullRequestReader = null; + this._rangeRequestReaders = []; + } + _onRangeRequestReaderClosed(reader) { + const i = this._rangeRequestReaders.indexOf(reader); + if (i >= 0) { + this._rangeRequestReaders.splice(i, 1); + } + } + getFullReader() { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(!this._fullRequestReader, "PDFNetworkStream.getFullReader can only be called once."); + this._fullRequestReader = new PDFNetworkStreamFullRequestReader(this._manager, this._source); + return this._fullRequestReader; + } + getRangeReader(begin, end) { + const reader = new PDFNetworkStreamRangeRequestReader(this._manager, begin, end); + reader.onClosed = this._onRangeRequestReaderClosed.bind(this); + this._rangeRequestReaders.push(reader); + return reader; + } + cancelAllRequests(reason) { + this._fullRequestReader?.cancel(reason); + for (const reader of this._rangeRequestReaders.slice(0)) { + reader.cancel(reason); + } + } +} +class PDFNetworkStreamFullRequestReader { + constructor(manager, source) { + this._manager = manager; + const args = { + onHeadersReceived: this._onHeadersReceived.bind(this), + onDone: this._onDone.bind(this), + onError: this._onError.bind(this), + onProgress: this._onProgress.bind(this) + }; + this._url = source.url; + this._fullRequestId = manager.requestFull(args); + this._headersReceivedCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this._disableRange = source.disableRange || false; + this._contentLength = source.length; + this._rangeChunkSize = source.rangeChunkSize; + if (!this._rangeChunkSize && !this._disableRange) { + this._disableRange = true; + } + this._isStreamingSupported = false; + this._isRangeSupported = false; + this._cachedChunks = []; + this._requests = []; + this._done = false; + this._storedError = undefined; + this._filename = null; + this.onProgress = null; + } + _onHeadersReceived() { + const fullRequestXhrId = this._fullRequestId; + const fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId); + const getResponseHeader = name => { + return fullRequestXhr.getResponseHeader(name); + }; + const { + allowRangeRequests, + suggestedLength + } = (0,_network_utils_js__WEBPACK_IMPORTED_MODULE_1__.validateRangeRequestCapabilities)({ + getResponseHeader, + isHttp: this._manager.isHttp, + rangeChunkSize: this._rangeChunkSize, + disableRange: this._disableRange + }); + if (allowRangeRequests) { + this._isRangeSupported = true; + } + this._contentLength = suggestedLength || this._contentLength; + this._filename = (0,_network_utils_js__WEBPACK_IMPORTED_MODULE_1__.extractFilenameFromHeader)(getResponseHeader); + if (this._isRangeSupported) { + this._manager.abortRequest(fullRequestXhrId); + } + this._headersReceivedCapability.resolve(); + } + _onDone(data) { + if (data) { + if (this._requests.length > 0) { + const requestCapability = this._requests.shift(); + requestCapability.resolve({ + value: data.chunk, + done: false + }); + } else { + this._cachedChunks.push(data.chunk); + } + } + this._done = true; + if (this._cachedChunks.length > 0) { + return; + } + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: undefined, + done: true + }); + } + this._requests.length = 0; + } + _onError(status) { + this._storedError = (0,_network_utils_js__WEBPACK_IMPORTED_MODULE_1__.createResponseStatusError)(status, this._url); + this._headersReceivedCapability.reject(this._storedError); + for (const requestCapability of this._requests) { + requestCapability.reject(this._storedError); + } + this._requests.length = 0; + this._cachedChunks.length = 0; + } + _onProgress(evt) { + this.onProgress?.({ + loaded: evt.loaded, + total: evt.lengthComputable ? evt.total : this._contentLength + }); + } + get filename() { + return this._filename; + } + get isRangeSupported() { + return this._isRangeSupported; + } + get isStreamingSupported() { + return this._isStreamingSupported; + } + get contentLength() { + return this._contentLength; + } + get headersReady() { + return this._headersReceivedCapability.promise; + } + async read() { + if (this._storedError) { + throw this._storedError; + } + if (this._cachedChunks.length > 0) { + const chunk = this._cachedChunks.shift(); + return { + value: chunk, + done: false + }; + } + if (this._done) { + return { + value: undefined, + done: true + }; + } + const requestCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this._requests.push(requestCapability); + return requestCapability.promise; + } + cancel(reason) { + this._done = true; + this._headersReceivedCapability.reject(reason); + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: undefined, + done: true + }); + } + this._requests.length = 0; + if (this._manager.isPendingRequest(this._fullRequestId)) { + this._manager.abortRequest(this._fullRequestId); + } + this._fullRequestReader = null; + } +} +class PDFNetworkStreamRangeRequestReader { + constructor(manager, begin, end) { + this._manager = manager; + const args = { + onDone: this._onDone.bind(this), + onError: this._onError.bind(this), + onProgress: this._onProgress.bind(this) + }; + this._url = manager.url; + this._requestId = manager.requestRange(begin, end, args); + this._requests = []; + this._queuedChunk = null; + this._done = false; + this._storedError = undefined; + this.onProgress = null; + this.onClosed = null; + } + _close() { + this.onClosed?.(this); + } + _onDone(data) { + const chunk = data.chunk; + if (this._requests.length > 0) { + const requestCapability = this._requests.shift(); + requestCapability.resolve({ + value: chunk, + done: false + }); + } else { + this._queuedChunk = chunk; + } + this._done = true; + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: undefined, + done: true + }); + } + this._requests.length = 0; + this._close(); + } + _onError(status) { + this._storedError = (0,_network_utils_js__WEBPACK_IMPORTED_MODULE_1__.createResponseStatusError)(status, this._url); + for (const requestCapability of this._requests) { + requestCapability.reject(this._storedError); + } + this._requests.length = 0; + this._queuedChunk = null; + } + _onProgress(evt) { + if (!this.isStreamingSupported) { + this.onProgress?.({ + loaded: evt.loaded + }); + } + } + get isStreamingSupported() { + return false; + } + async read() { + if (this._storedError) { + throw this._storedError; + } + if (this._queuedChunk !== null) { + const chunk = this._queuedChunk; + this._queuedChunk = null; + return { + value: chunk, + done: false + }; + } + if (this._done) { + return { + value: undefined, + done: true + }; + } + const requestCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this._requests.push(requestCapability); + return requestCapability.promise; + } + cancel(reason) { + this._done = true; + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: undefined, + done: true + }); + } + this._requests.length = 0; + if (this._manager.isPendingRequest(this._requestId)) { + this._manager.abortRequest(this._requestId); + } + this._close(); + } +} + + +/***/ }), + +/***/ 253: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + createResponseStatusError: () => (/* binding */ createResponseStatusError), + extractFilenameFromHeader: () => (/* binding */ extractFilenameFromHeader), + validateRangeRequestCapabilities: () => (/* binding */ validateRangeRequestCapabilities), + validateResponseStatus: () => (/* binding */ validateResponseStatus) +}); + +// EXTERNAL MODULE: ./src/shared/util.js +var util = __webpack_require__(266); +;// CONCATENATED MODULE: ./src/display/content_disposition.js + +function getFilenameFromContentDispositionHeader(contentDisposition) { + let needsEncodingFixup = true; + let tmp = toParamRegExp("filename\\*", "i").exec(contentDisposition); + if (tmp) { + tmp = tmp[1]; + let filename = rfc2616unquote(tmp); + filename = unescape(filename); + filename = rfc5987decode(filename); + filename = rfc2047decode(filename); + return fixupEncoding(filename); + } + tmp = rfc2231getparam(contentDisposition); + if (tmp) { + const filename = rfc2047decode(tmp); + return fixupEncoding(filename); + } + tmp = toParamRegExp("filename", "i").exec(contentDisposition); + if (tmp) { + tmp = tmp[1]; + let filename = rfc2616unquote(tmp); + filename = rfc2047decode(filename); + return fixupEncoding(filename); + } + function toParamRegExp(attributePattern, flags) { + return new RegExp("(?:^|;)\\s*" + attributePattern + "\\s*=\\s*" + "(" + '[^";\\s][^;\\s]*' + "|" + '"(?:[^"\\\\]|\\\\"?)+"?' + ")", flags); + } + function textdecode(encoding, value) { + if (encoding) { + if (!/^[\x00-\xFF]+$/.test(value)) { + return value; + } + try { + const decoder = new TextDecoder(encoding, { + fatal: true + }); + const buffer = (0,util.stringToBytes)(value); + value = decoder.decode(buffer); + needsEncodingFixup = false; + } catch {} + } + return value; + } + function fixupEncoding(value) { + if (needsEncodingFixup && /[\x80-\xff]/.test(value)) { + value = textdecode("utf-8", value); + if (needsEncodingFixup) { + value = textdecode("iso-8859-1", value); + } + } + return value; + } + function rfc2231getparam(contentDispositionStr) { + const matches = []; + let match; + const iter = toParamRegExp("filename\\*((?!0\\d)\\d+)(\\*?)", "ig"); + while ((match = iter.exec(contentDispositionStr)) !== null) { + let [, n, quot, part] = match; + n = parseInt(n, 10); + if (n in matches) { + if (n === 0) { + break; + } + continue; + } + matches[n] = [quot, part]; + } + const parts = []; + for (let n = 0; n < matches.length; ++n) { + if (!(n in matches)) { + break; + } + let [quot, part] = matches[n]; + part = rfc2616unquote(part); + if (quot) { + part = unescape(part); + if (n === 0) { + part = rfc5987decode(part); + } + } + parts.push(part); + } + return parts.join(""); + } + function rfc2616unquote(value) { + if (value.startsWith('"')) { + const parts = value.slice(1).split('\\"'); + for (let i = 0; i < parts.length; ++i) { + const quotindex = parts[i].indexOf('"'); + if (quotindex !== -1) { + parts[i] = parts[i].slice(0, quotindex); + parts.length = i + 1; + } + parts[i] = parts[i].replaceAll(/\\(.)/g, "$1"); + } + value = parts.join('"'); + } + return value; + } + function rfc5987decode(extvalue) { + const encodingend = extvalue.indexOf("'"); + if (encodingend === -1) { + return extvalue; + } + const encoding = extvalue.slice(0, encodingend); + const langvalue = extvalue.slice(encodingend + 1); + const value = langvalue.replace(/^[^']*'/, ""); + return textdecode(encoding, value); + } + function rfc2047decode(value) { + if (!value.startsWith("=?") || /[\x00-\x19\x80-\xff]/.test(value)) { + return value; + } + return value.replaceAll(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g, function (matches, charset, encoding, text) { + if (encoding === "q" || encoding === "Q") { + text = text.replaceAll("_", " "); + text = text.replaceAll(/=([0-9a-fA-F]{2})/g, function (match, hex) { + return String.fromCharCode(parseInt(hex, 16)); + }); + return textdecode(charset, text); + } + try { + text = atob(text); + } catch {} + return textdecode(charset, text); + }); + } + return ""; +} + +// EXTERNAL MODULE: ./src/display/display_utils.js +var display_utils = __webpack_require__(473); +;// CONCATENATED MODULE: ./src/display/network_utils.js + + + +function validateRangeRequestCapabilities({ + getResponseHeader, + isHttp, + rangeChunkSize, + disableRange +}) { + const returnValues = { + allowRangeRequests: false, + suggestedLength: undefined + }; + const length = parseInt(getResponseHeader("Content-Length"), 10); + if (!Number.isInteger(length)) { + return returnValues; + } + returnValues.suggestedLength = length; + if (length <= 2 * rangeChunkSize) { + return returnValues; + } + if (disableRange || !isHttp) { + return returnValues; + } + if (getResponseHeader("Accept-Ranges") !== "bytes") { + return returnValues; + } + const contentEncoding = getResponseHeader("Content-Encoding") || "identity"; + if (contentEncoding !== "identity") { + return returnValues; + } + returnValues.allowRangeRequests = true; + return returnValues; +} +function extractFilenameFromHeader(getResponseHeader) { + const contentDisposition = getResponseHeader("Content-Disposition"); + if (contentDisposition) { + let filename = getFilenameFromContentDispositionHeader(contentDisposition); + if (filename.includes("%")) { + try { + filename = decodeURIComponent(filename); + } catch {} + } + if ((0,display_utils.isPdfFile)(filename)) { + return filename; + } + } + return null; +} +function createResponseStatusError(status, url) { + if (status === 404 || status === 0 && url.startsWith("file:")) { + return new util.MissingPDFException('Missing PDF "' + url + '".'); + } + return new util.UnexpectedResponseException(`Unexpected server response (${status}) while retrieving PDF "${url}".`, status); +} +function validateResponseStatus(status) { + return status === 200 || status === 206; +} + + +/***/ }), + +/***/ 498: +/***/ ((__webpack_module__, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.a(__webpack_module__, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try { +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ PDFNodeStream: () => (/* binding */ PDFNodeStream) +/* harmony export */ }); +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); +/* harmony import */ var _network_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(253); + + +; +let fs, http, https, url; +if (_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS) { + fs = await import(/* webpackIgnore: true */ "fs"); + http = await import(/* webpackIgnore: true */ "http"); + https = await import(/* webpackIgnore: true */ "https"); + url = await import(/* webpackIgnore: true */ "url"); +} +const fileUriRegex = /^file:\/\/\/[a-zA-Z]:\//; +function parseUrl(sourceUrl) { + const parsedUrl = url.parse(sourceUrl); + if (parsedUrl.protocol === "file:" || parsedUrl.host) { + return parsedUrl; + } + if (/^[a-z]:[/\\]/i.test(sourceUrl)) { + return url.parse(`file:///${sourceUrl}`); + } + if (!parsedUrl.host) { + parsedUrl.protocol = "file:"; + } + return parsedUrl; +} +class PDFNodeStream { + constructor(source) { + this.source = source; + this.url = parseUrl(source.url); + this.isHttp = this.url.protocol === "http:" || this.url.protocol === "https:"; + this.isFsUrl = this.url.protocol === "file:"; + this.httpHeaders = this.isHttp && source.httpHeaders || {}; + this._fullRequestReader = null; + this._rangeRequestReaders = []; + } + get _progressiveDataLength() { + return this._fullRequestReader?._loaded ?? 0; + } + getFullReader() { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(!this._fullRequestReader, "PDFNodeStream.getFullReader can only be called once."); + this._fullRequestReader = this.isFsUrl ? new PDFNodeStreamFsFullReader(this) : new PDFNodeStreamFullReader(this); + return this._fullRequestReader; + } + getRangeReader(start, end) { + if (end <= this._progressiveDataLength) { + return null; + } + const rangeReader = this.isFsUrl ? new PDFNodeStreamFsRangeReader(this, start, end) : new PDFNodeStreamRangeReader(this, start, end); + this._rangeRequestReaders.push(rangeReader); + return rangeReader; + } + cancelAllRequests(reason) { + this._fullRequestReader?.cancel(reason); + for (const reader of this._rangeRequestReaders.slice(0)) { + reader.cancel(reason); + } + } +} +class BaseFullReader { + constructor(stream) { + this._url = stream.url; + this._done = false; + this._storedError = null; + this.onProgress = null; + const source = stream.source; + this._contentLength = source.length; + this._loaded = 0; + this._filename = null; + this._disableRange = source.disableRange || false; + this._rangeChunkSize = source.rangeChunkSize; + if (!this._rangeChunkSize && !this._disableRange) { + this._disableRange = true; + } + this._isStreamingSupported = !source.disableStream; + this._isRangeSupported = !source.disableRange; + this._readableStream = null; + this._readCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this._headersCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + } + get headersReady() { + return this._headersCapability.promise; + } + get filename() { + return this._filename; + } + get contentLength() { + return this._contentLength; + } + get isRangeSupported() { + return this._isRangeSupported; + } + get isStreamingSupported() { + return this._isStreamingSupported; + } + async read() { + await this._readCapability.promise; + if (this._done) { + return { + value: undefined, + done: true + }; + } + if (this._storedError) { + throw this._storedError; + } + const chunk = this._readableStream.read(); + if (chunk === null) { + this._readCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + return this.read(); + } + this._loaded += chunk.length; + this.onProgress?.({ + loaded: this._loaded, + total: this._contentLength + }); + const buffer = new Uint8Array(chunk).buffer; + return { + value: buffer, + done: false + }; + } + cancel(reason) { + if (!this._readableStream) { + this._error(reason); + return; + } + this._readableStream.destroy(reason); + } + _error(reason) { + this._storedError = reason; + this._readCapability.resolve(); + } + _setReadableStream(readableStream) { + this._readableStream = readableStream; + readableStream.on("readable", () => { + this._readCapability.resolve(); + }); + readableStream.on("end", () => { + readableStream.destroy(); + this._done = true; + this._readCapability.resolve(); + }); + readableStream.on("error", reason => { + this._error(reason); + }); + if (!this._isStreamingSupported && this._isRangeSupported) { + this._error(new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AbortException("streaming is disabled")); + } + if (this._storedError) { + this._readableStream.destroy(this._storedError); + } + } +} +class BaseRangeReader { + constructor(stream) { + this._url = stream.url; + this._done = false; + this._storedError = null; + this.onProgress = null; + this._loaded = 0; + this._readableStream = null; + this._readCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + const source = stream.source; + this._isStreamingSupported = !source.disableStream; + } + get isStreamingSupported() { + return this._isStreamingSupported; + } + async read() { + await this._readCapability.promise; + if (this._done) { + return { + value: undefined, + done: true + }; + } + if (this._storedError) { + throw this._storedError; + } + const chunk = this._readableStream.read(); + if (chunk === null) { + this._readCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + return this.read(); + } + this._loaded += chunk.length; + this.onProgress?.({ + loaded: this._loaded + }); + const buffer = new Uint8Array(chunk).buffer; + return { + value: buffer, + done: false + }; + } + cancel(reason) { + if (!this._readableStream) { + this._error(reason); + return; + } + this._readableStream.destroy(reason); + } + _error(reason) { + this._storedError = reason; + this._readCapability.resolve(); + } + _setReadableStream(readableStream) { + this._readableStream = readableStream; + readableStream.on("readable", () => { + this._readCapability.resolve(); + }); + readableStream.on("end", () => { + readableStream.destroy(); + this._done = true; + this._readCapability.resolve(); + }); + readableStream.on("error", reason => { + this._error(reason); + }); + if (this._storedError) { + this._readableStream.destroy(this._storedError); + } + } +} +function createRequestOptions(parsedUrl, headers) { + return { + protocol: parsedUrl.protocol, + auth: parsedUrl.auth, + host: parsedUrl.hostname, + port: parsedUrl.port, + path: parsedUrl.path, + method: "GET", + headers + }; +} +class PDFNodeStreamFullReader extends BaseFullReader { + constructor(stream) { + super(stream); + const handleResponse = response => { + if (response.statusCode === 404) { + const error = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.MissingPDFException(`Missing PDF "${this._url}".`); + this._storedError = error; + this._headersCapability.reject(error); + return; + } + this._headersCapability.resolve(); + this._setReadableStream(response); + const getResponseHeader = name => { + return this._readableStream.headers[name.toLowerCase()]; + }; + const { + allowRangeRequests, + suggestedLength + } = (0,_network_utils_js__WEBPACK_IMPORTED_MODULE_1__.validateRangeRequestCapabilities)({ + getResponseHeader, + isHttp: stream.isHttp, + rangeChunkSize: this._rangeChunkSize, + disableRange: this._disableRange + }); + this._isRangeSupported = allowRangeRequests; + this._contentLength = suggestedLength || this._contentLength; + this._filename = (0,_network_utils_js__WEBPACK_IMPORTED_MODULE_1__.extractFilenameFromHeader)(getResponseHeader); + }; + this._request = null; + if (this._url.protocol === "http:") { + this._request = http.request(createRequestOptions(this._url, stream.httpHeaders), handleResponse); + } else { + this._request = https.request(createRequestOptions(this._url, stream.httpHeaders), handleResponse); + } + this._request.on("error", reason => { + this._storedError = reason; + this._headersCapability.reject(reason); + }); + this._request.end(); + } +} +class PDFNodeStreamRangeReader extends BaseRangeReader { + constructor(stream, start, end) { + super(stream); + this._httpHeaders = {}; + for (const property in stream.httpHeaders) { + const value = stream.httpHeaders[property]; + if (value === undefined) { + continue; + } + this._httpHeaders[property] = value; + } + this._httpHeaders.Range = `bytes=${start}-${end - 1}`; + const handleResponse = response => { + if (response.statusCode === 404) { + const error = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.MissingPDFException(`Missing PDF "${this._url}".`); + this._storedError = error; + return; + } + this._setReadableStream(response); + }; + this._request = null; + if (this._url.protocol === "http:") { + this._request = http.request(createRequestOptions(this._url, this._httpHeaders), handleResponse); + } else { + this._request = https.request(createRequestOptions(this._url, this._httpHeaders), handleResponse); + } + this._request.on("error", reason => { + this._storedError = reason; + }); + this._request.end(); + } +} +class PDFNodeStreamFsFullReader extends BaseFullReader { + constructor(stream) { + super(stream); + let path = decodeURIComponent(this._url.path); + if (fileUriRegex.test(this._url.href)) { + path = path.replace(/^\//, ""); + } + fs.lstat(path, (error, stat) => { + if (error) { + if (error.code === "ENOENT") { + error = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.MissingPDFException(`Missing PDF "${path}".`); + } + this._storedError = error; + this._headersCapability.reject(error); + return; + } + this._contentLength = stat.size; + this._setReadableStream(fs.createReadStream(path)); + this._headersCapability.resolve(); + }); + } +} +class PDFNodeStreamFsRangeReader extends BaseRangeReader { + constructor(stream, start, end) { + super(stream); + let path = decodeURIComponent(this._url.path); + if (fileUriRegex.test(this._url.href)) { + path = path.replace(/^\//, ""); + } + this._setReadableStream(fs.createReadStream(path, { + start, + end: end - 1 + })); + } +} + +__webpack_async_result__(); +} catch(e) { __webpack_async_result__(e); } }, 1); + +/***/ }), + +/***/ 738: +/***/ ((__webpack_module__, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.a(__webpack_module__, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try { +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ NodeCMapReaderFactory: () => (/* binding */ NodeCMapReaderFactory), +/* harmony export */ NodeCanvasFactory: () => (/* binding */ NodeCanvasFactory), +/* harmony export */ NodeFilterFactory: () => (/* binding */ NodeFilterFactory), +/* harmony export */ NodeStandardFontDataFactory: () => (/* binding */ NodeStandardFontDataFactory) +/* harmony export */ }); +/* harmony import */ var _base_factory_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(822); +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(266); + + +; +let fs, canvas, path2d_polyfill; +if (_shared_util_js__WEBPACK_IMPORTED_MODULE_1__.isNodeJS) { + fs = await import(/* webpackIgnore: true */ "fs"); + try { + canvas = await import(/* webpackIgnore: true */ "canvas"); + } catch {} + try { + path2d_polyfill = await import(/* webpackIgnore: true */ "path2d-polyfill"); + } catch {} +} +; +const fetchData = function (url) { + return new Promise((resolve, reject) => { + fs.readFile(url, (error, data) => { + if (error || !data) { + reject(new Error(error)); + return; + } + resolve(new Uint8Array(data)); + }); + }); +}; +class NodeFilterFactory extends _base_factory_js__WEBPACK_IMPORTED_MODULE_0__.BaseFilterFactory {} +class NodeCanvasFactory extends _base_factory_js__WEBPACK_IMPORTED_MODULE_0__.BaseCanvasFactory { + _createCanvas(width, height) { + return canvas.createCanvas(width, height); + } +} +class NodeCMapReaderFactory extends _base_factory_js__WEBPACK_IMPORTED_MODULE_0__.BaseCMapReaderFactory { + _fetchData(url, compressionType) { + return fetchData(url).then(data => { + return { + cMapData: data, + compressionType + }; + }); + } +} +class NodeStandardFontDataFactory extends _base_factory_js__WEBPACK_IMPORTED_MODULE_0__.BaseStandardFontDataFactory { + _fetchData(url) { + return fetchData(url); + } +} + +__webpack_async_result__(); +} catch(e) { __webpack_async_result__(e); } }, 1); + +/***/ }), + +/***/ 890: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ OptionalContentConfig: () => (/* binding */ OptionalContentConfig) +/* harmony export */ }); +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); +/* harmony import */ var _shared_murmurhash3_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(825); + + +const INTERNAL = Symbol("INTERNAL"); +class OptionalContentGroup { + #visible = true; + constructor(name, intent) { + this.name = name; + this.intent = intent; + } + get visible() { + return this.#visible; + } + _setVisible(internal, visible) { + if (internal !== INTERNAL) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Internal method `_setVisible` called."); + } + this.#visible = visible; + } +} +class OptionalContentConfig { + #cachedGetHash = null; + #groups = new Map(); + #initialHash = null; + #order = null; + constructor(data) { + this.name = null; + this.creator = null; + if (data === null) { + return; + } + this.name = data.name; + this.creator = data.creator; + this.#order = data.order; + for (const group of data.groups) { + this.#groups.set(group.id, new OptionalContentGroup(group.name, group.intent)); + } + if (data.baseState === "OFF") { + for (const group of this.#groups.values()) { + group._setVisible(INTERNAL, false); + } + } + for (const on of data.on) { + this.#groups.get(on)._setVisible(INTERNAL, true); + } + for (const off of data.off) { + this.#groups.get(off)._setVisible(INTERNAL, false); + } + this.#initialHash = this.getHash(); + } + #evaluateVisibilityExpression(array) { + const length = array.length; + if (length < 2) { + return true; + } + const operator = array[0]; + for (let i = 1; i < length; i++) { + const element = array[i]; + let state; + if (Array.isArray(element)) { + state = this.#evaluateVisibilityExpression(element); + } else if (this.#groups.has(element)) { + state = this.#groups.get(element).visible; + } else { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`Optional content group not found: ${element}`); + return true; + } + switch (operator) { + case "And": + if (!state) { + return false; + } + break; + case "Or": + if (state) { + return true; + } + break; + case "Not": + return !state; + default: + return true; + } + } + return operator === "And"; + } + isVisible(group) { + if (this.#groups.size === 0) { + return true; + } + if (!group) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)("Optional content group not defined."); + return true; + } + if (group.type === "OCG") { + if (!this.#groups.has(group.id)) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`Optional content group not found: ${group.id}`); + return true; + } + return this.#groups.get(group.id).visible; + } else if (group.type === "OCMD") { + if (group.expression) { + return this.#evaluateVisibilityExpression(group.expression); + } + if (!group.policy || group.policy === "AnyOn") { + for (const id of group.ids) { + if (!this.#groups.has(id)) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`Optional content group not found: ${id}`); + return true; + } + if (this.#groups.get(id).visible) { + return true; + } + } + return false; + } else if (group.policy === "AllOn") { + for (const id of group.ids) { + if (!this.#groups.has(id)) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`Optional content group not found: ${id}`); + return true; + } + if (!this.#groups.get(id).visible) { + return false; + } + } + return true; + } else if (group.policy === "AnyOff") { + for (const id of group.ids) { + if (!this.#groups.has(id)) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`Optional content group not found: ${id}`); + return true; + } + if (!this.#groups.get(id).visible) { + return true; + } + } + return false; + } else if (group.policy === "AllOff") { + for (const id of group.ids) { + if (!this.#groups.has(id)) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`Optional content group not found: ${id}`); + return true; + } + if (this.#groups.get(id).visible) { + return false; + } + } + return true; + } + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`Unknown optional content policy ${group.policy}.`); + return true; + } + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`Unknown group type ${group.type}.`); + return true; + } + setVisibility(id, visible = true) { + if (!this.#groups.has(id)) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`Optional content group not found: ${id}`); + return; + } + this.#groups.get(id)._setVisible(INTERNAL, !!visible); + this.#cachedGetHash = null; + } + get hasInitialVisibility() { + return this.#initialHash === null || this.getHash() === this.#initialHash; + } + getOrder() { + if (!this.#groups.size) { + return null; + } + if (this.#order) { + return this.#order.slice(); + } + return [...this.#groups.keys()]; + } + getGroups() { + return this.#groups.size > 0 ? (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.objectFromMap)(this.#groups) : null; + } + getGroup(id) { + return this.#groups.get(id) || null; + } + getHash() { + if (this.#cachedGetHash !== null) { + return this.#cachedGetHash; + } + const hash = new _shared_murmurhash3_js__WEBPACK_IMPORTED_MODULE_1__.MurmurHash3_64(); + for (const [id, group] of this.#groups) { + hash.update(`${id}:${group.visible}`); + } + return this.#cachedGetHash = hash.hexdigest(); + } +} + + +/***/ }), + +/***/ 739: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ renderTextLayer: () => (/* binding */ renderTextLayer), +/* harmony export */ updateTextLayer: () => (/* binding */ updateTextLayer) +/* harmony export */ }); +/* unused harmony export TextLayerRenderTask */ +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); +/* harmony import */ var _display_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(473); + + +const MAX_TEXT_DIVS_TO_RENDER = 100000; +const DEFAULT_FONT_SIZE = 30; +const DEFAULT_FONT_ASCENT = 0.8; +const ascentCache = new Map(); +function getCtx(size, isOffscreenCanvasSupported) { + let ctx; + if (isOffscreenCanvasSupported && _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.FeatureTest.isOffscreenCanvasSupported) { + ctx = new OffscreenCanvas(size, size).getContext("2d", { + alpha: false + }); + } else { + const canvas = document.createElement("canvas"); + canvas.width = canvas.height = size; + ctx = canvas.getContext("2d", { + alpha: false + }); + } + return ctx; +} +function getAscent(fontFamily, isOffscreenCanvasSupported) { + const cachedAscent = ascentCache.get(fontFamily); + if (cachedAscent) { + return cachedAscent; + } + const ctx = getCtx(DEFAULT_FONT_SIZE, isOffscreenCanvasSupported); + ctx.font = `${DEFAULT_FONT_SIZE}px ${fontFamily}`; + const metrics = ctx.measureText(""); + let ascent = metrics.fontBoundingBoxAscent; + let descent = Math.abs(metrics.fontBoundingBoxDescent); + if (ascent) { + const ratio = ascent / (ascent + descent); + ascentCache.set(fontFamily, ratio); + ctx.canvas.width = ctx.canvas.height = 0; + return ratio; + } + ctx.strokeStyle = "red"; + ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE); + ctx.strokeText("g", 0, 0); + let pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data; + descent = 0; + for (let i = pixels.length - 1 - 3; i >= 0; i -= 4) { + if (pixels[i] > 0) { + descent = Math.ceil(i / 4 / DEFAULT_FONT_SIZE); + break; + } + } + ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE); + ctx.strokeText("A", 0, DEFAULT_FONT_SIZE); + pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data; + ascent = 0; + for (let i = 0, ii = pixels.length; i < ii; i += 4) { + if (pixels[i] > 0) { + ascent = DEFAULT_FONT_SIZE - Math.floor(i / 4 / DEFAULT_FONT_SIZE); + break; + } + } + ctx.canvas.width = ctx.canvas.height = 0; + if (ascent) { + const ratio = ascent / (ascent + descent); + ascentCache.set(fontFamily, ratio); + return ratio; + } + ascentCache.set(fontFamily, DEFAULT_FONT_ASCENT); + return DEFAULT_FONT_ASCENT; +} +function appendText(task, geom, styles) { + const textDiv = document.createElement("span"); + const textDivProperties = { + angle: 0, + canvasWidth: 0, + hasText: geom.str !== "", + hasEOL: geom.hasEOL, + fontSize: 0 + }; + task._textDivs.push(textDiv); + const tx = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.Util.transform(task._transform, geom.transform); + let angle = Math.atan2(tx[1], tx[0]); + const style = styles[geom.fontName]; + if (style.vertical) { + angle += Math.PI / 2; + } + const fontFamily = task._fontInspectorEnabled && style.fontSubstitution || style.fontFamily; + const fontHeight = Math.hypot(tx[2], tx[3]); + const fontAscent = fontHeight * getAscent(fontFamily, task._isOffscreenCanvasSupported); + let left, top; + if (angle === 0) { + left = tx[4]; + top = tx[5] - fontAscent; + } else { + left = tx[4] + fontAscent * Math.sin(angle); + top = tx[5] - fontAscent * Math.cos(angle); + } + const scaleFactorStr = "calc(var(--scale-factor)*"; + const divStyle = textDiv.style; + if (task._container === task._rootContainer) { + divStyle.left = `${(100 * left / task._pageWidth).toFixed(2)}%`; + divStyle.top = `${(100 * top / task._pageHeight).toFixed(2)}%`; + } else { + divStyle.left = `${scaleFactorStr}${left.toFixed(2)}px)`; + divStyle.top = `${scaleFactorStr}${top.toFixed(2)}px)`; + } + divStyle.fontSize = `${scaleFactorStr}${fontHeight.toFixed(2)}px)`; + divStyle.fontFamily = fontFamily; + textDivProperties.fontSize = fontHeight; + textDiv.setAttribute("role", "presentation"); + textDiv.textContent = geom.str; + textDiv.dir = geom.dir; + if (task._fontInspectorEnabled) { + textDiv.dataset.fontName = style.fontSubstitutionLoadedName || geom.fontName; + } + if (angle !== 0) { + textDivProperties.angle = angle * (180 / Math.PI); + } + let shouldScaleText = false; + if (geom.str.length > 1) { + shouldScaleText = true; + } else if (geom.str !== " " && geom.transform[0] !== geom.transform[3]) { + const absScaleX = Math.abs(geom.transform[0]), + absScaleY = Math.abs(geom.transform[3]); + if (absScaleX !== absScaleY && Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5) { + shouldScaleText = true; + } + } + if (shouldScaleText) { + textDivProperties.canvasWidth = style.vertical ? geom.height : geom.width; + } + task._textDivProperties.set(textDiv, textDivProperties); + if (task._isReadableStream) { + task._layoutText(textDiv); + } +} +function layout(params) { + const { + div, + scale, + properties, + ctx, + prevFontSize, + prevFontFamily + } = params; + const { + style + } = div; + let transform = ""; + if (properties.canvasWidth !== 0 && properties.hasText) { + const { + fontFamily + } = style; + const { + canvasWidth, + fontSize + } = properties; + if (prevFontSize !== fontSize || prevFontFamily !== fontFamily) { + ctx.font = `${fontSize * scale}px ${fontFamily}`; + params.prevFontSize = fontSize; + params.prevFontFamily = fontFamily; + } + const { + width + } = ctx.measureText(div.textContent); + if (width > 0) { + transform = `scaleX(${canvasWidth * scale / width})`; + } + } + if (properties.angle !== 0) { + transform = `rotate(${properties.angle}deg) ${transform}`; + } + if (transform.length > 0) { + style.transform = transform; + } +} +function render(task) { + if (task._canceled) { + return; + } + const textDivs = task._textDivs; + const capability = task._capability; + const textDivsLength = textDivs.length; + if (textDivsLength > MAX_TEXT_DIVS_TO_RENDER) { + capability.resolve(); + return; + } + if (!task._isReadableStream) { + for (const textDiv of textDivs) { + task._layoutText(textDiv); + } + } + capability.resolve(); +} +class TextLayerRenderTask { + constructor({ + textContentSource, + container, + viewport, + textDivs, + textDivProperties, + textContentItemsStr, + isOffscreenCanvasSupported + }) { + this._textContentSource = textContentSource; + this._isReadableStream = textContentSource instanceof ReadableStream; + this._container = this._rootContainer = container; + this._textDivs = textDivs || []; + this._textContentItemsStr = textContentItemsStr || []; + this._isOffscreenCanvasSupported = isOffscreenCanvasSupported; + this._fontInspectorEnabled = !!globalThis.FontInspector?.enabled; + this._reader = null; + this._textDivProperties = textDivProperties || new WeakMap(); + this._canceled = false; + this._capability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this._layoutTextParams = { + prevFontSize: null, + prevFontFamily: null, + div: null, + scale: viewport.scale * (globalThis.devicePixelRatio || 1), + properties: null, + ctx: getCtx(0, isOffscreenCanvasSupported) + }; + const { + pageWidth, + pageHeight, + pageX, + pageY + } = viewport.rawDims; + this._transform = [1, 0, 0, -1, -pageX, pageY + pageHeight]; + this._pageWidth = pageWidth; + this._pageHeight = pageHeight; + (0,_display_utils_js__WEBPACK_IMPORTED_MODULE_1__.setLayerDimensions)(container, viewport); + this._capability.promise.finally(() => { + this._layoutTextParams = null; + }).catch(() => {}); + } + get promise() { + return this._capability.promise; + } + cancel() { + this._canceled = true; + if (this._reader) { + this._reader.cancel(new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AbortException("TextLayer task cancelled.")).catch(() => {}); + this._reader = null; + } + this._capability.reject(new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AbortException("TextLayer task cancelled.")); + } + _processItems(items, styleCache) { + for (const item of items) { + if (item.str === undefined) { + if (item.type === "beginMarkedContentProps" || item.type === "beginMarkedContent") { + const parent = this._container; + this._container = document.createElement("span"); + this._container.classList.add("markedContent"); + if (item.id !== null) { + this._container.setAttribute("id", `${item.id}`); + } + parent.append(this._container); + } else if (item.type === "endMarkedContent") { + this._container = this._container.parentNode; + } + continue; + } + this._textContentItemsStr.push(item.str); + appendText(this, item, styleCache); + } + } + _layoutText(textDiv) { + const textDivProperties = this._layoutTextParams.properties = this._textDivProperties.get(textDiv); + this._layoutTextParams.div = textDiv; + layout(this._layoutTextParams); + if (textDivProperties.hasText) { + this._container.append(textDiv); + } + if (textDivProperties.hasEOL) { + const br = document.createElement("br"); + br.setAttribute("role", "presentation"); + this._container.append(br); + } + } + _render() { + const capability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + let styleCache = Object.create(null); + if (this._isReadableStream) { + const pump = () => { + this._reader.read().then(({ + value, + done + }) => { + if (done) { + capability.resolve(); + return; + } + Object.assign(styleCache, value.styles); + this._processItems(value.items, styleCache); + pump(); + }, capability.reject); + }; + this._reader = this._textContentSource.getReader(); + pump(); + } else if (this._textContentSource) { + const { + items, + styles + } = this._textContentSource; + this._processItems(items, styles); + capability.resolve(); + } else { + throw new Error('No "textContentSource" parameter specified.'); + } + capability.promise.then(() => { + styleCache = null; + render(this); + }, this._capability.reject); + } +} +function renderTextLayer(params) { + const task = new TextLayerRenderTask(params); + task._render(); + return task; +} +function updateTextLayer({ + container, + viewport, + textDivs, + textDivProperties, + isOffscreenCanvasSupported, + mustRotate = true, + mustRescale = true +}) { + if (mustRotate) { + (0,_display_utils_js__WEBPACK_IMPORTED_MODULE_1__.setLayerDimensions)(container, { + rotation: viewport.rotation + }); + } + if (mustRescale) { + const ctx = getCtx(0, isOffscreenCanvasSupported); + const scale = viewport.scale * (globalThis.devicePixelRatio || 1); + const params = { + prevFontSize: null, + prevFontFamily: null, + div: null, + scale, + properties: null, + ctx + }; + for (const div of textDivs) { + params.properties = textDivProperties.get(div); + params.div = div; + layout(params); + } + } +} + + +/***/ }), + +/***/ 92: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ PDFDataTransportStream: () => (/* binding */ PDFDataTransportStream) +/* harmony export */ }); +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); +/* harmony import */ var _display_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(473); + + +class PDFDataTransportStream { + constructor({ + length, + initialData, + progressiveDone = false, + contentDispositionFilename = null, + disableRange = false, + disableStream = false + }, pdfDataRangeTransport) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(pdfDataRangeTransport, 'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.'); + this._queuedChunks = []; + this._progressiveDone = progressiveDone; + this._contentDispositionFilename = contentDispositionFilename; + if (initialData?.length > 0) { + const buffer = initialData instanceof Uint8Array && initialData.byteLength === initialData.buffer.byteLength ? initialData.buffer : new Uint8Array(initialData).buffer; + this._queuedChunks.push(buffer); + } + this._pdfDataRangeTransport = pdfDataRangeTransport; + this._isStreamingSupported = !disableStream; + this._isRangeSupported = !disableRange; + this._contentLength = length; + this._fullRequestReader = null; + this._rangeReaders = []; + this._pdfDataRangeTransport.addRangeListener((begin, chunk) => { + this._onReceiveData({ + begin, + chunk + }); + }); + this._pdfDataRangeTransport.addProgressListener((loaded, total) => { + this._onProgress({ + loaded, + total + }); + }); + this._pdfDataRangeTransport.addProgressiveReadListener(chunk => { + this._onReceiveData({ + chunk + }); + }); + this._pdfDataRangeTransport.addProgressiveDoneListener(() => { + this._onProgressiveDone(); + }); + this._pdfDataRangeTransport.transportReady(); + } + _onReceiveData({ + begin, + chunk + }) { + const buffer = chunk instanceof Uint8Array && chunk.byteLength === chunk.buffer.byteLength ? chunk.buffer : new Uint8Array(chunk).buffer; + if (begin === undefined) { + if (this._fullRequestReader) { + this._fullRequestReader._enqueue(buffer); + } else { + this._queuedChunks.push(buffer); + } + } else { + const found = this._rangeReaders.some(function (rangeReader) { + if (rangeReader._begin !== begin) { + return false; + } + rangeReader._enqueue(buffer); + return true; + }); + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(found, "_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found."); + } + } + get _progressiveDataLength() { + return this._fullRequestReader?._loaded ?? 0; + } + _onProgress(evt) { + if (evt.total === undefined) { + this._rangeReaders[0]?.onProgress?.({ + loaded: evt.loaded + }); + } else { + this._fullRequestReader?.onProgress?.({ + loaded: evt.loaded, + total: evt.total + }); + } + } + _onProgressiveDone() { + this._fullRequestReader?.progressiveDone(); + this._progressiveDone = true; + } + _removeRangeReader(reader) { + const i = this._rangeReaders.indexOf(reader); + if (i >= 0) { + this._rangeReaders.splice(i, 1); + } + } + getFullReader() { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(!this._fullRequestReader, "PDFDataTransportStream.getFullReader can only be called once."); + const queuedChunks = this._queuedChunks; + this._queuedChunks = null; + return new PDFDataTransportStreamReader(this, queuedChunks, this._progressiveDone, this._contentDispositionFilename); + } + getRangeReader(begin, end) { + if (end <= this._progressiveDataLength) { + return null; + } + const reader = new PDFDataTransportStreamRangeReader(this, begin, end); + this._pdfDataRangeTransport.requestDataRange(begin, end); + this._rangeReaders.push(reader); + return reader; + } + cancelAllRequests(reason) { + this._fullRequestReader?.cancel(reason); + for (const reader of this._rangeReaders.slice(0)) { + reader.cancel(reason); + } + this._pdfDataRangeTransport.abort(); + } +} +class PDFDataTransportStreamReader { + constructor(stream, queuedChunks, progressiveDone = false, contentDispositionFilename = null) { + this._stream = stream; + this._done = progressiveDone || false; + this._filename = (0,_display_utils_js__WEBPACK_IMPORTED_MODULE_1__.isPdfFile)(contentDispositionFilename) ? contentDispositionFilename : null; + this._queuedChunks = queuedChunks || []; + this._loaded = 0; + for (const chunk of this._queuedChunks) { + this._loaded += chunk.byteLength; + } + this._requests = []; + this._headersReady = Promise.resolve(); + stream._fullRequestReader = this; + this.onProgress = null; + } + _enqueue(chunk) { + if (this._done) { + return; + } + if (this._requests.length > 0) { + const requestCapability = this._requests.shift(); + requestCapability.resolve({ + value: chunk, + done: false + }); + } else { + this._queuedChunks.push(chunk); + } + this._loaded += chunk.byteLength; + } + get headersReady() { + return this._headersReady; + } + get filename() { + return this._filename; + } + get isRangeSupported() { + return this._stream._isRangeSupported; + } + get isStreamingSupported() { + return this._stream._isStreamingSupported; + } + get contentLength() { + return this._stream._contentLength; + } + async read() { + if (this._queuedChunks.length > 0) { + const chunk = this._queuedChunks.shift(); + return { + value: chunk, + done: false + }; + } + if (this._done) { + return { + value: undefined, + done: true + }; + } + const requestCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this._requests.push(requestCapability); + return requestCapability.promise; + } + cancel(reason) { + this._done = true; + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: undefined, + done: true + }); + } + this._requests.length = 0; + } + progressiveDone() { + if (this._done) { + return; + } + this._done = true; + } +} +class PDFDataTransportStreamRangeReader { + constructor(stream, begin, end) { + this._stream = stream; + this._begin = begin; + this._end = end; + this._queuedChunk = null; + this._requests = []; + this._done = false; + this.onProgress = null; + } + _enqueue(chunk) { + if (this._done) { + return; + } + if (this._requests.length === 0) { + this._queuedChunk = chunk; + } else { + const requestsCapability = this._requests.shift(); + requestsCapability.resolve({ + value: chunk, + done: false + }); + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: undefined, + done: true + }); + } + this._requests.length = 0; + } + this._done = true; + this._stream._removeRangeReader(this); + } + get isStreamingSupported() { + return false; + } + async read() { + if (this._queuedChunk) { + const chunk = this._queuedChunk; + this._queuedChunk = null; + return { + value: chunk, + done: false + }; + } + if (this._done) { + return { + value: undefined, + done: true + }; + } + const requestCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this._requests.push(requestCapability); + return requestCapability.promise; + } + cancel(reason) { + this._done = true; + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: undefined, + done: true + }); + } + this._requests.length = 0; + this._stream._removeRangeReader(this); + } +} + + +/***/ }), + +/***/ 368: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ GlobalWorkerOptions: () => (/* binding */ GlobalWorkerOptions) +/* harmony export */ }); +const GlobalWorkerOptions = Object.create(null); +GlobalWorkerOptions.workerPort = null; +GlobalWorkerOptions.workerSrc = ""; + + +/***/ }), + +/***/ 160: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ XfaLayer: () => (/* binding */ XfaLayer) +/* harmony export */ }); +/* harmony import */ var _xfa_text_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(521); + +class XfaLayer { + static setupStorage(html, id, element, storage, intent) { + const storedData = storage.getValue(id, { + value: null + }); + switch (element.name) { + case "textarea": + if (storedData.value !== null) { + html.textContent = storedData.value; + } + if (intent === "print") { + break; + } + html.addEventListener("input", event => { + storage.setValue(id, { + value: event.target.value + }); + }); + break; + case "input": + if (element.attributes.type === "radio" || element.attributes.type === "checkbox") { + if (storedData.value === element.attributes.xfaOn) { + html.setAttribute("checked", true); + } else if (storedData.value === element.attributes.xfaOff) { + html.removeAttribute("checked"); + } + if (intent === "print") { + break; + } + html.addEventListener("change", event => { + storage.setValue(id, { + value: event.target.checked ? event.target.getAttribute("xfaOn") : event.target.getAttribute("xfaOff") + }); + }); + } else { + if (storedData.value !== null) { + html.setAttribute("value", storedData.value); + } + if (intent === "print") { + break; + } + html.addEventListener("input", event => { + storage.setValue(id, { + value: event.target.value + }); + }); + } + break; + case "select": + if (storedData.value !== null) { + html.setAttribute("value", storedData.value); + for (const option of element.children) { + if (option.attributes.value === storedData.value) { + option.attributes.selected = true; + } else if (option.attributes.hasOwnProperty("selected")) { + delete option.attributes.selected; + } + } + } + html.addEventListener("input", event => { + const options = event.target.options; + const value = options.selectedIndex === -1 ? "" : options[options.selectedIndex].value; + storage.setValue(id, { + value + }); + }); + break; + } + } + static setAttributes({ + html, + element, + storage = null, + intent, + linkService + }) { + const { + attributes + } = element; + const isHTMLAnchorElement = html instanceof HTMLAnchorElement; + if (attributes.type === "radio") { + attributes.name = `${attributes.name}-${intent}`; + } + for (const [key, value] of Object.entries(attributes)) { + if (value === null || value === undefined) { + continue; + } + switch (key) { + case "class": + if (value.length) { + html.setAttribute(key, value.join(" ")); + } + break; + case "dataId": + break; + case "id": + html.setAttribute("data-element-id", value); + break; + case "style": + Object.assign(html.style, value); + break; + case "textContent": + html.textContent = value; + break; + default: + if (!isHTMLAnchorElement || key !== "href" && key !== "newWindow") { + html.setAttribute(key, value); + } + } + } + if (isHTMLAnchorElement) { + linkService.addLinkAttributes(html, attributes.href, attributes.newWindow); + } + if (storage && attributes.dataId) { + this.setupStorage(html, attributes.dataId, element, storage); + } + } + static render(parameters) { + const storage = parameters.annotationStorage; + const linkService = parameters.linkService; + const root = parameters.xfaHtml; + const intent = parameters.intent || "display"; + const rootHtml = document.createElement(root.name); + if (root.attributes) { + this.setAttributes({ + html: rootHtml, + element: root, + intent, + linkService + }); + } + const isNotForRichText = intent !== "richText"; + const rootDiv = parameters.div; + rootDiv.append(rootHtml); + if (parameters.viewport) { + const transform = `matrix(${parameters.viewport.transform.join(",")})`; + rootDiv.style.transform = transform; + } + if (isNotForRichText) { + rootDiv.setAttribute("class", "xfaLayer xfaFont"); + } + const textDivs = []; + if (root.children.length === 0) { + if (root.value) { + const node = document.createTextNode(root.value); + rootHtml.append(node); + if (isNotForRichText && _xfa_text_js__WEBPACK_IMPORTED_MODULE_0__.XfaText.shouldBuildText(root.name)) { + textDivs.push(node); + } + } + return { + textDivs + }; + } + const stack = [[root, -1, rootHtml]]; + while (stack.length > 0) { + const [parent, i, html] = stack.at(-1); + if (i + 1 === parent.children.length) { + stack.pop(); + continue; + } + const child = parent.children[++stack.at(-1)[1]]; + if (child === null) { + continue; + } + const { + name + } = child; + if (name === "#text") { + const node = document.createTextNode(child.value); + textDivs.push(node); + html.append(node); + continue; + } + const childHtml = child?.attributes?.xmlns ? document.createElementNS(child.attributes.xmlns, name) : document.createElement(name); + html.append(childHtml); + if (child.attributes) { + this.setAttributes({ + html: childHtml, + element: child, + storage, + intent, + linkService + }); + } + if (child.children?.length > 0) { + stack.push([child, -1, childHtml]); + } else if (child.value) { + const node = document.createTextNode(child.value); + if (isNotForRichText && _xfa_text_js__WEBPACK_IMPORTED_MODULE_0__.XfaText.shouldBuildText(name)) { + textDivs.push(node); + } + childHtml.append(node); + } + } + for (const el of rootDiv.querySelectorAll(".xfaNonInteractive input, .xfaNonInteractive textarea")) { + el.setAttribute("readOnly", true); + } + return { + textDivs + }; + } + static update(parameters) { + const transform = `matrix(${parameters.viewport.transform.join(",")})`; + parameters.div.style.transform = transform; + parameters.div.hidden = false; + } +} + + +/***/ }), + +/***/ 521: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ XfaText: () => (/* binding */ XfaText) +/* harmony export */ }); +class XfaText { + static textContent(xfa) { + const items = []; + const output = { + items, + styles: Object.create(null) + }; + function walk(node) { + if (!node) { + return; + } + let str = null; + const name = node.name; + if (name === "#text") { + str = node.value; + } else if (!XfaText.shouldBuildText(name)) { + return; + } else if (node?.attributes?.textContent) { + str = node.attributes.textContent; + } else if (node.value) { + str = node.value; + } + if (str !== null) { + items.push({ + str + }); + } + if (!node.children) { + return; + } + for (const child of node.children) { + walk(child); + } + } + walk(xfa); + return output; + } + static shouldBuildText(name) { + return !(name === "textarea" || name === "input" || name === "option" || name === "select"); + } +} + + +/***/ }), + +/***/ 907: +/***/ ((__webpack_module__, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.a(__webpack_module__, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try { +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ AbortException: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AbortException), +/* harmony export */ AnnotationEditorLayer: () => (/* reexport safe */ _display_editor_annotation_editor_layer_js__WEBPACK_IMPORTED_MODULE_4__.AnnotationEditorLayer), +/* harmony export */ AnnotationEditorParamsType: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationEditorParamsType), +/* harmony export */ AnnotationEditorType: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationEditorType), +/* harmony export */ AnnotationEditorUIManager: () => (/* reexport safe */ _display_editor_tools_js__WEBPACK_IMPORTED_MODULE_5__.AnnotationEditorUIManager), +/* harmony export */ AnnotationLayer: () => (/* reexport safe */ _display_annotation_layer_js__WEBPACK_IMPORTED_MODULE_6__.AnnotationLayer), +/* harmony export */ AnnotationMode: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationMode), +/* harmony export */ CMapCompressionType: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.CMapCompressionType), +/* harmony export */ DOMSVGFactory: () => (/* reexport safe */ _display_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.DOMSVGFactory), +/* harmony export */ FeatureTest: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.FeatureTest), +/* harmony export */ GlobalWorkerOptions: () => (/* reexport safe */ _display_worker_options_js__WEBPACK_IMPORTED_MODULE_7__.GlobalWorkerOptions), +/* harmony export */ ImageKind: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.ImageKind), +/* harmony export */ InvalidPDFException: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.InvalidPDFException), +/* harmony export */ MissingPDFException: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.MissingPDFException), +/* harmony export */ OPS: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.OPS), +/* harmony export */ PDFDataRangeTransport: () => (/* reexport safe */ _display_api_js__WEBPACK_IMPORTED_MODULE_1__.PDFDataRangeTransport), +/* harmony export */ PDFDateString: () => (/* reexport safe */ _display_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.PDFDateString), +/* harmony export */ PDFWorker: () => (/* reexport safe */ _display_api_js__WEBPACK_IMPORTED_MODULE_1__.PDFWorker), +/* harmony export */ PasswordResponses: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PasswordResponses), +/* harmony export */ PermissionFlag: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PermissionFlag), +/* harmony export */ PixelsPerInch: () => (/* reexport safe */ _display_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.PixelsPerInch), +/* harmony export */ PromiseCapability: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability), +/* harmony export */ RenderingCancelledException: () => (/* reexport safe */ _display_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.RenderingCancelledException), +/* harmony export */ UnexpectedResponseException: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.UnexpectedResponseException), +/* harmony export */ Util: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.Util), +/* harmony export */ VerbosityLevel: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.VerbosityLevel), +/* harmony export */ XfaLayer: () => (/* reexport safe */ _display_xfa_layer_js__WEBPACK_IMPORTED_MODULE_8__.XfaLayer), +/* harmony export */ build: () => (/* reexport safe */ _display_api_js__WEBPACK_IMPORTED_MODULE_1__.build), +/* harmony export */ createValidAbsoluteUrl: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.createValidAbsoluteUrl), +/* harmony export */ getDocument: () => (/* reexport safe */ _display_api_js__WEBPACK_IMPORTED_MODULE_1__.getDocument), +/* harmony export */ getFilenameFromUrl: () => (/* reexport safe */ _display_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.getFilenameFromUrl), +/* harmony export */ getPdfFilenameFromUrl: () => (/* reexport safe */ _display_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.getPdfFilenameFromUrl), +/* harmony export */ getXfaPageViewport: () => (/* reexport safe */ _display_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.getXfaPageViewport), +/* harmony export */ isDataScheme: () => (/* reexport safe */ _display_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.isDataScheme), +/* harmony export */ isPdfFile: () => (/* reexport safe */ _display_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.isPdfFile), +/* harmony export */ noContextMenu: () => (/* reexport safe */ _display_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.noContextMenu), +/* harmony export */ normalizeUnicode: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeUnicode), +/* harmony export */ renderTextLayer: () => (/* reexport safe */ _display_text_layer_js__WEBPACK_IMPORTED_MODULE_3__.renderTextLayer), +/* harmony export */ setLayerDimensions: () => (/* reexport safe */ _display_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.setLayerDimensions), +/* harmony export */ shadow: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow), +/* harmony export */ updateTextLayer: () => (/* reexport safe */ _display_text_layer_js__WEBPACK_IMPORTED_MODULE_3__.updateTextLayer), +/* harmony export */ version: () => (/* reexport safe */ _display_api_js__WEBPACK_IMPORTED_MODULE_1__.version) +/* harmony export */ }); +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); +/* harmony import */ var _display_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(406); +/* harmony import */ var _display_display_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(473); +/* harmony import */ var _display_text_layer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(739); +/* harmony import */ var _display_editor_annotation_editor_layer_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(331); +/* harmony import */ var _display_editor_tools_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(812); +/* harmony import */ var _display_annotation_layer_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(640); +/* harmony import */ var _display_worker_options_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(368); +/* harmony import */ var _display_xfa_layer_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(160); +var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_display_api_js__WEBPACK_IMPORTED_MODULE_1__]); +_display_api_js__WEBPACK_IMPORTED_MODULE_1__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0]; + + + + + + + + + +const pdfjsVersion = '4.0.189'; +const pdfjsBuild = '50f52b43a'; + +__webpack_async_result__(); +} catch(e) { __webpack_async_result__(e); } }); + +/***/ }), + +/***/ 694: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ MessageHandler: () => (/* binding */ MessageHandler) +/* harmony export */ }); +/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); + +const CallbackKind = { + UNKNOWN: 0, + DATA: 1, + ERROR: 2 +}; +const StreamKind = { + UNKNOWN: 0, + CANCEL: 1, + CANCEL_COMPLETE: 2, + CLOSE: 3, + ENQUEUE: 4, + ERROR: 5, + PULL: 6, + PULL_COMPLETE: 7, + START_COMPLETE: 8 +}; +function wrapReason(reason) { + if (!(reason instanceof Error || typeof reason === "object" && reason !== null)) { + (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)('wrapReason: Expected "reason" to be a (possibly cloned) Error.'); + } + switch (reason.name) { + case "AbortException": + return new _util_js__WEBPACK_IMPORTED_MODULE_0__.AbortException(reason.message); + case "MissingPDFException": + return new _util_js__WEBPACK_IMPORTED_MODULE_0__.MissingPDFException(reason.message); + case "PasswordException": + return new _util_js__WEBPACK_IMPORTED_MODULE_0__.PasswordException(reason.message, reason.code); + case "UnexpectedResponseException": + return new _util_js__WEBPACK_IMPORTED_MODULE_0__.UnexpectedResponseException(reason.message, reason.status); + case "UnknownErrorException": + return new _util_js__WEBPACK_IMPORTED_MODULE_0__.UnknownErrorException(reason.message, reason.details); + default: + return new _util_js__WEBPACK_IMPORTED_MODULE_0__.UnknownErrorException(reason.message, reason.toString()); + } +} +class MessageHandler { + constructor(sourceName, targetName, comObj) { + this.sourceName = sourceName; + this.targetName = targetName; + this.comObj = comObj; + this.callbackId = 1; + this.streamId = 1; + this.streamSinks = Object.create(null); + this.streamControllers = Object.create(null); + this.callbackCapabilities = Object.create(null); + this.actionHandler = Object.create(null); + this._onComObjOnMessage = event => { + const data = event.data; + if (data.targetName !== this.sourceName) { + return; + } + if (data.stream) { + this.#processStreamMessage(data); + return; + } + if (data.callback) { + const callbackId = data.callbackId; + const capability = this.callbackCapabilities[callbackId]; + if (!capability) { + throw new Error(`Cannot resolve callback ${callbackId}`); + } + delete this.callbackCapabilities[callbackId]; + if (data.callback === CallbackKind.DATA) { + capability.resolve(data.data); + } else if (data.callback === CallbackKind.ERROR) { + capability.reject(wrapReason(data.reason)); + } else { + throw new Error("Unexpected callback case"); + } + return; + } + const action = this.actionHandler[data.action]; + if (!action) { + throw new Error(`Unknown action from worker: ${data.action}`); + } + if (data.callbackId) { + const cbSourceName = this.sourceName; + const cbTargetName = data.sourceName; + new Promise(function (resolve) { + resolve(action(data.data)); + }).then(function (result) { + comObj.postMessage({ + sourceName: cbSourceName, + targetName: cbTargetName, + callback: CallbackKind.DATA, + callbackId: data.callbackId, + data: result + }); + }, function (reason) { + comObj.postMessage({ + sourceName: cbSourceName, + targetName: cbTargetName, + callback: CallbackKind.ERROR, + callbackId: data.callbackId, + reason: wrapReason(reason) + }); + }); + return; + } + if (data.streamId) { + this.#createStreamSink(data); + return; + } + action(data.data); + }; + comObj.addEventListener("message", this._onComObjOnMessage); + } + on(actionName, handler) { + const ah = this.actionHandler; + if (ah[actionName]) { + throw new Error(`There is already an actionName called "${actionName}"`); + } + ah[actionName] = handler; + } + send(actionName, data, transfers) { + this.comObj.postMessage({ + sourceName: this.sourceName, + targetName: this.targetName, + action: actionName, + data + }, transfers); + } + sendWithPromise(actionName, data, transfers) { + const callbackId = this.callbackId++; + const capability = new _util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this.callbackCapabilities[callbackId] = capability; + try { + this.comObj.postMessage({ + sourceName: this.sourceName, + targetName: this.targetName, + action: actionName, + callbackId, + data + }, transfers); + } catch (ex) { + capability.reject(ex); + } + return capability.promise; + } + sendWithStream(actionName, data, queueingStrategy, transfers) { + const streamId = this.streamId++, + sourceName = this.sourceName, + targetName = this.targetName, + comObj = this.comObj; + return new ReadableStream({ + start: controller => { + const startCapability = new _util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this.streamControllers[streamId] = { + controller, + startCall: startCapability, + pullCall: null, + cancelCall: null, + isClosed: false + }; + comObj.postMessage({ + sourceName, + targetName, + action: actionName, + streamId, + data, + desiredSize: controller.desiredSize + }, transfers); + return startCapability.promise; + }, + pull: controller => { + const pullCapability = new _util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this.streamControllers[streamId].pullCall = pullCapability; + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.PULL, + streamId, + desiredSize: controller.desiredSize + }); + return pullCapability.promise; + }, + cancel: reason => { + (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(reason instanceof Error, "cancel must have a valid reason"); + const cancelCapability = new _util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this.streamControllers[streamId].cancelCall = cancelCapability; + this.streamControllers[streamId].isClosed = true; + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.CANCEL, + streamId, + reason: wrapReason(reason) + }); + return cancelCapability.promise; + } + }, queueingStrategy); + } + #createStreamSink(data) { + const streamId = data.streamId, + sourceName = this.sourceName, + targetName = data.sourceName, + comObj = this.comObj; + const self = this, + action = this.actionHandler[data.action]; + const streamSink = { + enqueue(chunk, size = 1, transfers) { + if (this.isCancelled) { + return; + } + const lastDesiredSize = this.desiredSize; + this.desiredSize -= size; + if (lastDesiredSize > 0 && this.desiredSize <= 0) { + this.sinkCapability = new _util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this.ready = this.sinkCapability.promise; + } + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.ENQUEUE, + streamId, + chunk + }, transfers); + }, + close() { + if (this.isCancelled) { + return; + } + this.isCancelled = true; + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.CLOSE, + streamId + }); + delete self.streamSinks[streamId]; + }, + error(reason) { + (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(reason instanceof Error, "error must have a valid reason"); + if (this.isCancelled) { + return; + } + this.isCancelled = true; + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.ERROR, + streamId, + reason: wrapReason(reason) + }); + }, + sinkCapability: new _util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(), + onPull: null, + onCancel: null, + isCancelled: false, + desiredSize: data.desiredSize, + ready: null + }; + streamSink.sinkCapability.resolve(); + streamSink.ready = streamSink.sinkCapability.promise; + this.streamSinks[streamId] = streamSink; + new Promise(function (resolve) { + resolve(action(data.data, streamSink)); + }).then(function () { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.START_COMPLETE, + streamId, + success: true + }); + }, function (reason) { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.START_COMPLETE, + streamId, + reason: wrapReason(reason) + }); + }); + } + #processStreamMessage(data) { + const streamId = data.streamId, + sourceName = this.sourceName, + targetName = data.sourceName, + comObj = this.comObj; + const streamController = this.streamControllers[streamId], + streamSink = this.streamSinks[streamId]; + switch (data.stream) { + case StreamKind.START_COMPLETE: + if (data.success) { + streamController.startCall.resolve(); + } else { + streamController.startCall.reject(wrapReason(data.reason)); + } + break; + case StreamKind.PULL_COMPLETE: + if (data.success) { + streamController.pullCall.resolve(); + } else { + streamController.pullCall.reject(wrapReason(data.reason)); + } + break; + case StreamKind.PULL: + if (!streamSink) { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.PULL_COMPLETE, + streamId, + success: true + }); + break; + } + if (streamSink.desiredSize <= 0 && data.desiredSize > 0) { + streamSink.sinkCapability.resolve(); + } + streamSink.desiredSize = data.desiredSize; + new Promise(function (resolve) { + resolve(streamSink.onPull?.()); + }).then(function () { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.PULL_COMPLETE, + streamId, + success: true + }); + }, function (reason) { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.PULL_COMPLETE, + streamId, + reason: wrapReason(reason) + }); + }); + break; + case StreamKind.ENQUEUE: + (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(streamController, "enqueue should have stream controller"); + if (streamController.isClosed) { + break; + } + streamController.controller.enqueue(data.chunk); + break; + case StreamKind.CLOSE: + (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(streamController, "close should have stream controller"); + if (streamController.isClosed) { + break; + } + streamController.isClosed = true; + streamController.controller.close(); + this.#deleteStreamController(streamController, streamId); + break; + case StreamKind.ERROR: + (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(streamController, "error should have stream controller"); + streamController.controller.error(wrapReason(data.reason)); + this.#deleteStreamController(streamController, streamId); + break; + case StreamKind.CANCEL_COMPLETE: + if (data.success) { + streamController.cancelCall.resolve(); + } else { + streamController.cancelCall.reject(wrapReason(data.reason)); + } + this.#deleteStreamController(streamController, streamId); + break; + case StreamKind.CANCEL: + if (!streamSink) { + break; + } + new Promise(function (resolve) { + resolve(streamSink.onCancel?.(wrapReason(data.reason))); + }).then(function () { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.CANCEL_COMPLETE, + streamId, + success: true + }); + }, function (reason) { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.CANCEL_COMPLETE, + streamId, + reason: wrapReason(reason) + }); + }); + streamSink.sinkCapability.reject(wrapReason(data.reason)); + streamSink.isCancelled = true; + delete this.streamSinks[streamId]; + break; + default: + throw new Error("Unexpected stream case"); + } + } + async #deleteStreamController(streamController, streamId) { + await Promise.allSettled([streamController.startCall?.promise, streamController.pullCall?.promise, streamController.cancelCall?.promise]); + delete this.streamControllers[streamId]; + } + destroy() { + this.comObj.removeEventListener("message", this._onComObjOnMessage); + } +} + + +/***/ }), + +/***/ 825: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ MurmurHash3_64: () => (/* binding */ MurmurHash3_64) +/* harmony export */ }); +/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); + +const SEED = 0xc3d2e1f0; +const MASK_HIGH = 0xffff0000; +const MASK_LOW = 0xffff; +class MurmurHash3_64 { + constructor(seed) { + this.h1 = seed ? seed & 0xffffffff : SEED; + this.h2 = seed ? seed & 0xffffffff : SEED; + } + update(input) { + let data, length; + if (typeof input === "string") { + data = new Uint8Array(input.length * 2); + length = 0; + for (let i = 0, ii = input.length; i < ii; i++) { + const code = input.charCodeAt(i); + if (code <= 0xff) { + data[length++] = code; + } else { + data[length++] = code >>> 8; + data[length++] = code & 0xff; + } + } + } else if ((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.isArrayBuffer)(input)) { + data = input.slice(); + length = data.byteLength; + } else { + throw new Error("Wrong data format in MurmurHash3_64_update. " + "Input must be a string or array."); + } + const blockCounts = length >> 2; + const tailLength = length - blockCounts * 4; + const dataUint32 = new Uint32Array(data.buffer, 0, blockCounts); + let k1 = 0, + k2 = 0; + let h1 = this.h1, + h2 = this.h2; + const C1 = 0xcc9e2d51, + C2 = 0x1b873593; + const C1_LOW = C1 & MASK_LOW, + C2_LOW = C2 & MASK_LOW; + for (let i = 0; i < blockCounts; i++) { + if (i & 1) { + k1 = dataUint32[i]; + k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; + k1 = k1 << 15 | k1 >>> 17; + k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; + h1 ^= k1; + h1 = h1 << 13 | h1 >>> 19; + h1 = h1 * 5 + 0xe6546b64; + } else { + k2 = dataUint32[i]; + k2 = k2 * C1 & MASK_HIGH | k2 * C1_LOW & MASK_LOW; + k2 = k2 << 15 | k2 >>> 17; + k2 = k2 * C2 & MASK_HIGH | k2 * C2_LOW & MASK_LOW; + h2 ^= k2; + h2 = h2 << 13 | h2 >>> 19; + h2 = h2 * 5 + 0xe6546b64; + } + } + k1 = 0; + switch (tailLength) { + case 3: + k1 ^= data[blockCounts * 4 + 2] << 16; + case 2: + k1 ^= data[blockCounts * 4 + 1] << 8; + case 1: + k1 ^= data[blockCounts * 4]; + k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; + k1 = k1 << 15 | k1 >>> 17; + k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; + if (blockCounts & 1) { + h1 ^= k1; + } else { + h2 ^= k1; + } + } + this.h1 = h1; + this.h2 = h2; + } + hexdigest() { + let h1 = this.h1, + h2 = this.h2; + h1 ^= h2 >>> 1; + h1 = h1 * 0xed558ccd & MASK_HIGH | h1 * 0x8ccd & MASK_LOW; + h2 = h2 * 0xff51afd7 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xafd7ed55 & MASK_HIGH) >>> 16; + h1 ^= h2 >>> 1; + h1 = h1 * 0x1a85ec53 & MASK_HIGH | h1 * 0xec53 & MASK_LOW; + h2 = h2 * 0xc4ceb9fe & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xb9fe1a85 & MASK_HIGH) >>> 16; + h1 ^= h2 >>> 1; + return (h1 >>> 0).toString(16).padStart(8, "0") + (h2 >>> 0).toString(16).padStart(8, "0"); + } +} + + +/***/ }), + +/***/ 266: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ AbortException: () => (/* binding */ AbortException), +/* harmony export */ AnnotationBorderStyleType: () => (/* binding */ AnnotationBorderStyleType), +/* harmony export */ AnnotationEditorParamsType: () => (/* binding */ AnnotationEditorParamsType), +/* harmony export */ AnnotationEditorPrefix: () => (/* binding */ AnnotationEditorPrefix), +/* harmony export */ AnnotationEditorType: () => (/* binding */ AnnotationEditorType), +/* harmony export */ AnnotationMode: () => (/* binding */ AnnotationMode), +/* harmony export */ AnnotationPrefix: () => (/* binding */ AnnotationPrefix), +/* harmony export */ AnnotationType: () => (/* binding */ AnnotationType), +/* harmony export */ BaseException: () => (/* binding */ BaseException), +/* harmony export */ CMapCompressionType: () => (/* binding */ CMapCompressionType), +/* harmony export */ FONT_IDENTITY_MATRIX: () => (/* binding */ FONT_IDENTITY_MATRIX), +/* harmony export */ FeatureTest: () => (/* binding */ FeatureTest), +/* harmony export */ FormatError: () => (/* binding */ FormatError), +/* harmony export */ IDENTITY_MATRIX: () => (/* binding */ IDENTITY_MATRIX), +/* harmony export */ ImageKind: () => (/* binding */ ImageKind), +/* harmony export */ InvalidPDFException: () => (/* binding */ InvalidPDFException), +/* harmony export */ LINE_FACTOR: () => (/* binding */ LINE_FACTOR), +/* harmony export */ MAX_IMAGE_SIZE_TO_CACHE: () => (/* binding */ MAX_IMAGE_SIZE_TO_CACHE), +/* harmony export */ MissingPDFException: () => (/* binding */ MissingPDFException), +/* harmony export */ OPS: () => (/* binding */ OPS), +/* harmony export */ PasswordException: () => (/* binding */ PasswordException), +/* harmony export */ PasswordResponses: () => (/* binding */ PasswordResponses), +/* harmony export */ PermissionFlag: () => (/* binding */ PermissionFlag), +/* harmony export */ PromiseCapability: () => (/* binding */ PromiseCapability), +/* harmony export */ RenderingIntentFlag: () => (/* binding */ RenderingIntentFlag), +/* harmony export */ TextRenderingMode: () => (/* binding */ TextRenderingMode), +/* harmony export */ UnexpectedResponseException: () => (/* binding */ UnexpectedResponseException), +/* harmony export */ UnknownErrorException: () => (/* binding */ UnknownErrorException), +/* harmony export */ Util: () => (/* binding */ Util), +/* harmony export */ VerbosityLevel: () => (/* binding */ VerbosityLevel), +/* harmony export */ assert: () => (/* binding */ assert), +/* harmony export */ bytesToString: () => (/* binding */ bytesToString), +/* harmony export */ createValidAbsoluteUrl: () => (/* binding */ createValidAbsoluteUrl), +/* harmony export */ getUuid: () => (/* binding */ getUuid), +/* harmony export */ getVerbosityLevel: () => (/* binding */ getVerbosityLevel), +/* harmony export */ info: () => (/* binding */ info), +/* harmony export */ isArrayBuffer: () => (/* binding */ isArrayBuffer), +/* harmony export */ isNodeJS: () => (/* binding */ isNodeJS), +/* harmony export */ normalizeUnicode: () => (/* binding */ normalizeUnicode), +/* harmony export */ objectFromMap: () => (/* binding */ objectFromMap), +/* harmony export */ setVerbosityLevel: () => (/* binding */ setVerbosityLevel), +/* harmony export */ shadow: () => (/* binding */ shadow), +/* harmony export */ string32: () => (/* binding */ string32), +/* harmony export */ stringToBytes: () => (/* binding */ stringToBytes), +/* harmony export */ unreachable: () => (/* binding */ unreachable), +/* harmony export */ warn: () => (/* binding */ warn) +/* harmony export */ }); +/* unused harmony exports AnnotationActionEventType, AnnotationFieldFlag, AnnotationFlag, AnnotationReplyType, BASELINE_FACTOR, DocumentActionEventType, getModificationDate, isArrayEqual, LINE_DESCENT_FACTOR, objectSize, PageActionEventType, stringToPDFString, stringToUTF8String, utf8StringToString */ +const isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== "browser"); +const IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; +const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0]; +const MAX_IMAGE_SIZE_TO_CACHE = 10e6; +const LINE_FACTOR = 1.35; +const LINE_DESCENT_FACTOR = 0.35; +const BASELINE_FACTOR = LINE_DESCENT_FACTOR / LINE_FACTOR; +const RenderingIntentFlag = { + ANY: 0x01, + DISPLAY: 0x02, + PRINT: 0x04, + SAVE: 0x08, + ANNOTATIONS_FORMS: 0x10, + ANNOTATIONS_STORAGE: 0x20, + ANNOTATIONS_DISABLE: 0x40, + OPLIST: 0x100 +}; +const AnnotationMode = { + DISABLE: 0, + ENABLE: 1, + ENABLE_FORMS: 2, + ENABLE_STORAGE: 3 +}; +const AnnotationEditorPrefix = "pdfjs_internal_editor_"; +const AnnotationEditorType = { + DISABLE: -1, + NONE: 0, + FREETEXT: 3, + STAMP: 13, + INK: 15 +}; +const AnnotationEditorParamsType = { + RESIZE: 1, + CREATE: 2, + FREETEXT_SIZE: 11, + FREETEXT_COLOR: 12, + FREETEXT_OPACITY: 13, + INK_COLOR: 21, + INK_THICKNESS: 22, + INK_OPACITY: 23 +}; +const PermissionFlag = { + PRINT: 0x04, + MODIFY_CONTENTS: 0x08, + COPY: 0x10, + MODIFY_ANNOTATIONS: 0x20, + FILL_INTERACTIVE_FORMS: 0x100, + COPY_FOR_ACCESSIBILITY: 0x200, + ASSEMBLE: 0x400, + PRINT_HIGH_QUALITY: 0x800 +}; +const TextRenderingMode = { + FILL: 0, + STROKE: 1, + FILL_STROKE: 2, + INVISIBLE: 3, + FILL_ADD_TO_PATH: 4, + STROKE_ADD_TO_PATH: 5, + FILL_STROKE_ADD_TO_PATH: 6, + ADD_TO_PATH: 7, + FILL_STROKE_MASK: 3, + ADD_TO_PATH_FLAG: 4 +}; +const ImageKind = { + GRAYSCALE_1BPP: 1, + RGB_24BPP: 2, + RGBA_32BPP: 3 +}; +const AnnotationType = { + TEXT: 1, + LINK: 2, + FREETEXT: 3, + LINE: 4, + SQUARE: 5, + CIRCLE: 6, + POLYGON: 7, + POLYLINE: 8, + HIGHLIGHT: 9, + UNDERLINE: 10, + SQUIGGLY: 11, + STRIKEOUT: 12, + STAMP: 13, + CARET: 14, + INK: 15, + POPUP: 16, + FILEATTACHMENT: 17, + SOUND: 18, + MOVIE: 19, + WIDGET: 20, + SCREEN: 21, + PRINTERMARK: 22, + TRAPNET: 23, + WATERMARK: 24, + THREED: 25, + REDACT: 26 +}; +const AnnotationReplyType = { + GROUP: "Group", + REPLY: "R" +}; +const AnnotationFlag = { + INVISIBLE: 0x01, + HIDDEN: 0x02, + PRINT: 0x04, + NOZOOM: 0x08, + NOROTATE: 0x10, + NOVIEW: 0x20, + READONLY: 0x40, + LOCKED: 0x80, + TOGGLENOVIEW: 0x100, + LOCKEDCONTENTS: 0x200 +}; +const AnnotationFieldFlag = { + READONLY: 0x0000001, + REQUIRED: 0x0000002, + NOEXPORT: 0x0000004, + MULTILINE: 0x0001000, + PASSWORD: 0x0002000, + NOTOGGLETOOFF: 0x0004000, + RADIO: 0x0008000, + PUSHBUTTON: 0x0010000, + COMBO: 0x0020000, + EDIT: 0x0040000, + SORT: 0x0080000, + FILESELECT: 0x0100000, + MULTISELECT: 0x0200000, + DONOTSPELLCHECK: 0x0400000, + DONOTSCROLL: 0x0800000, + COMB: 0x1000000, + RICHTEXT: 0x2000000, + RADIOSINUNISON: 0x2000000, + COMMITONSELCHANGE: 0x4000000 +}; +const AnnotationBorderStyleType = { + SOLID: 1, + DASHED: 2, + BEVELED: 3, + INSET: 4, + UNDERLINE: 5 +}; +const AnnotationActionEventType = { + E: "Mouse Enter", + X: "Mouse Exit", + D: "Mouse Down", + U: "Mouse Up", + Fo: "Focus", + Bl: "Blur", + PO: "PageOpen", + PC: "PageClose", + PV: "PageVisible", + PI: "PageInvisible", + K: "Keystroke", + F: "Format", + V: "Validate", + C: "Calculate" +}; +const DocumentActionEventType = { + WC: "WillClose", + WS: "WillSave", + DS: "DidSave", + WP: "WillPrint", + DP: "DidPrint" +}; +const PageActionEventType = { + O: "PageOpen", + C: "PageClose" +}; +const VerbosityLevel = { + ERRORS: 0, + WARNINGS: 1, + INFOS: 5 +}; +const CMapCompressionType = { + NONE: 0, + BINARY: 1 +}; +const OPS = { + dependency: 1, + setLineWidth: 2, + setLineCap: 3, + setLineJoin: 4, + setMiterLimit: 5, + setDash: 6, + setRenderingIntent: 7, + setFlatness: 8, + setGState: 9, + save: 10, + restore: 11, + transform: 12, + moveTo: 13, + lineTo: 14, + curveTo: 15, + curveTo2: 16, + curveTo3: 17, + closePath: 18, + rectangle: 19, + stroke: 20, + closeStroke: 21, + fill: 22, + eoFill: 23, + fillStroke: 24, + eoFillStroke: 25, + closeFillStroke: 26, + closeEOFillStroke: 27, + endPath: 28, + clip: 29, + eoClip: 30, + beginText: 31, + endText: 32, + setCharSpacing: 33, + setWordSpacing: 34, + setHScale: 35, + setLeading: 36, + setFont: 37, + setTextRenderingMode: 38, + setTextRise: 39, + moveText: 40, + setLeadingMoveText: 41, + setTextMatrix: 42, + nextLine: 43, + showText: 44, + showSpacedText: 45, + nextLineShowText: 46, + nextLineSetSpacingShowText: 47, + setCharWidth: 48, + setCharWidthAndBounds: 49, + setStrokeColorSpace: 50, + setFillColorSpace: 51, + setStrokeColor: 52, + setStrokeColorN: 53, + setFillColor: 54, + setFillColorN: 55, + setStrokeGray: 56, + setFillGray: 57, + setStrokeRGBColor: 58, + setFillRGBColor: 59, + setStrokeCMYKColor: 60, + setFillCMYKColor: 61, + shadingFill: 62, + beginInlineImage: 63, + beginImageData: 64, + endInlineImage: 65, + paintXObject: 66, + markPoint: 67, + markPointProps: 68, + beginMarkedContent: 69, + beginMarkedContentProps: 70, + endMarkedContent: 71, + beginCompat: 72, + endCompat: 73, + paintFormXObjectBegin: 74, + paintFormXObjectEnd: 75, + beginGroup: 76, + endGroup: 77, + beginAnnotation: 80, + endAnnotation: 81, + paintImageMaskXObject: 83, + paintImageMaskXObjectGroup: 84, + paintImageXObject: 85, + paintInlineImageXObject: 86, + paintInlineImageXObjectGroup: 87, + paintImageXObjectRepeat: 88, + paintImageMaskXObjectRepeat: 89, + paintSolidColorImageMask: 90, + constructPath: 91 +}; +const PasswordResponses = { + NEED_PASSWORD: 1, + INCORRECT_PASSWORD: 2 +}; +let verbosity = VerbosityLevel.WARNINGS; +function setVerbosityLevel(level) { + if (Number.isInteger(level)) { + verbosity = level; + } +} +function getVerbosityLevel() { + return verbosity; +} +function info(msg) { + if (verbosity >= VerbosityLevel.INFOS) { + console.log(`Info: ${msg}`); + } +} +function warn(msg) { + if (verbosity >= VerbosityLevel.WARNINGS) { + console.log(`Warning: ${msg}`); + } +} +function unreachable(msg) { + throw new Error(msg); +} +function assert(cond, msg) { + if (!cond) { + unreachable(msg); + } +} +function _isValidProtocol(url) { + switch (url?.protocol) { + case "http:": + case "https:": + case "ftp:": + case "mailto:": + case "tel:": + return true; + default: + return false; + } +} +function createValidAbsoluteUrl(url, baseUrl = null, options = null) { + if (!url) { + return null; + } + try { + if (options && typeof url === "string") { + if (options.addDefaultProtocol && url.startsWith("www.")) { + const dots = url.match(/\./g); + if (dots?.length >= 2) { + url = `http://${url}`; + } + } + if (options.tryConvertEncoding) { + try { + url = stringToUTF8String(url); + } catch {} + } + } + const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url); + if (_isValidProtocol(absoluteUrl)) { + return absoluteUrl; + } + } catch {} + return null; +} +function shadow(obj, prop, value, nonSerializable = false) { + Object.defineProperty(obj, prop, { + value, + enumerable: !nonSerializable, + configurable: true, + writable: false + }); + return value; +} +const BaseException = function BaseExceptionClosure() { + function BaseException(message, name) { + if (this.constructor === BaseException) { + unreachable("Cannot initialize BaseException."); + } + this.message = message; + this.name = name; + } + BaseException.prototype = new Error(); + BaseException.constructor = BaseException; + return BaseException; +}(); +class PasswordException extends BaseException { + constructor(msg, code) { + super(msg, "PasswordException"); + this.code = code; + } +} +class UnknownErrorException extends BaseException { + constructor(msg, details) { + super(msg, "UnknownErrorException"); + this.details = details; + } +} +class InvalidPDFException extends BaseException { + constructor(msg) { + super(msg, "InvalidPDFException"); + } +} +class MissingPDFException extends BaseException { + constructor(msg) { + super(msg, "MissingPDFException"); + } +} +class UnexpectedResponseException extends BaseException { + constructor(msg, status) { + super(msg, "UnexpectedResponseException"); + this.status = status; + } +} +class FormatError extends BaseException { + constructor(msg) { + super(msg, "FormatError"); + } +} +class AbortException extends BaseException { + constructor(msg) { + super(msg, "AbortException"); + } +} +function bytesToString(bytes) { + if (typeof bytes !== "object" || bytes?.length === undefined) { + unreachable("Invalid argument for bytesToString"); + } + const length = bytes.length; + const MAX_ARGUMENT_COUNT = 8192; + if (length < MAX_ARGUMENT_COUNT) { + return String.fromCharCode.apply(null, bytes); + } + const strBuf = []; + for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) { + const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length); + const chunk = bytes.subarray(i, chunkEnd); + strBuf.push(String.fromCharCode.apply(null, chunk)); + } + return strBuf.join(""); +} +function stringToBytes(str) { + if (typeof str !== "string") { + unreachable("Invalid argument for stringToBytes"); + } + const length = str.length; + const bytes = new Uint8Array(length); + for (let i = 0; i < length; ++i) { + bytes[i] = str.charCodeAt(i) & 0xff; + } + return bytes; +} +function string32(value) { + return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff); +} +function objectSize(obj) { + return Object.keys(obj).length; +} +function objectFromMap(map) { + const obj = Object.create(null); + for (const [key, value] of map) { + obj[key] = value; + } + return obj; +} +function isLittleEndian() { + const buffer8 = new Uint8Array(4); + buffer8[0] = 1; + const view32 = new Uint32Array(buffer8.buffer, 0, 1); + return view32[0] === 1; +} +function isEvalSupported() { + try { + new Function(""); + return true; + } catch { + return false; + } +} +class FeatureTest { + static get isLittleEndian() { + return shadow(this, "isLittleEndian", isLittleEndian()); + } + static get isEvalSupported() { + return shadow(this, "isEvalSupported", isEvalSupported()); + } + static get isOffscreenCanvasSupported() { + return shadow(this, "isOffscreenCanvasSupported", typeof OffscreenCanvas !== "undefined"); + } + static get platform() { + if (typeof navigator !== "undefined" && typeof navigator?.platform === "string") { + return shadow(this, "platform", { + isMac: navigator.platform.includes("Mac") + }); + } + return shadow(this, "platform", { + isMac: false + }); + } + static get isCSSRoundSupported() { + return shadow(this, "isCSSRoundSupported", globalThis.CSS?.supports?.("width: round(1.5px, 1px)")); + } +} +const hexNumbers = [...Array(256).keys()].map(n => n.toString(16).padStart(2, "0")); +class Util { + static makeHexColor(r, g, b) { + return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`; + } + static scaleMinMax(transform, minMax) { + let temp; + if (transform[0]) { + if (transform[0] < 0) { + temp = minMax[0]; + minMax[0] = minMax[1]; + minMax[1] = temp; + } + minMax[0] *= transform[0]; + minMax[1] *= transform[0]; + if (transform[3] < 0) { + temp = minMax[2]; + minMax[2] = minMax[3]; + minMax[3] = temp; + } + minMax[2] *= transform[3]; + minMax[3] *= transform[3]; + } else { + temp = minMax[0]; + minMax[0] = minMax[2]; + minMax[2] = temp; + temp = minMax[1]; + minMax[1] = minMax[3]; + minMax[3] = temp; + if (transform[1] < 0) { + temp = minMax[2]; + minMax[2] = minMax[3]; + minMax[3] = temp; + } + minMax[2] *= transform[1]; + minMax[3] *= transform[1]; + if (transform[2] < 0) { + temp = minMax[0]; + minMax[0] = minMax[1]; + minMax[1] = temp; + } + minMax[0] *= transform[2]; + minMax[1] *= transform[2]; + } + minMax[0] += transform[4]; + minMax[1] += transform[4]; + minMax[2] += transform[5]; + minMax[3] += transform[5]; + } + static transform(m1, m2) { + return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]]; + } + static applyTransform(p, m) { + const xt = p[0] * m[0] + p[1] * m[2] + m[4]; + const yt = p[0] * m[1] + p[1] * m[3] + m[5]; + return [xt, yt]; + } + static applyInverseTransform(p, m) { + const d = m[0] * m[3] - m[1] * m[2]; + const xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d; + const yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d; + return [xt, yt]; + } + static getAxialAlignedBoundingBox(r, m) { + const p1 = this.applyTransform(r, m); + const p2 = this.applyTransform(r.slice(2, 4), m); + const p3 = this.applyTransform([r[0], r[3]], m); + const p4 = this.applyTransform([r[2], r[1]], m); + return [Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1])]; + } + static inverseTransform(m) { + const d = m[0] * m[3] - m[1] * m[2]; + return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d]; + } + static singularValueDecompose2dScale(m) { + const transpose = [m[0], m[2], m[1], m[3]]; + const a = m[0] * transpose[0] + m[1] * transpose[2]; + const b = m[0] * transpose[1] + m[1] * transpose[3]; + const c = m[2] * transpose[0] + m[3] * transpose[2]; + const d = m[2] * transpose[1] + m[3] * transpose[3]; + const first = (a + d) / 2; + const second = Math.sqrt((a + d) ** 2 - 4 * (a * d - c * b)) / 2; + const sx = first + second || 1; + const sy = first - second || 1; + return [Math.sqrt(sx), Math.sqrt(sy)]; + } + static normalizeRect(rect) { + const r = rect.slice(0); + if (rect[0] > rect[2]) { + r[0] = rect[2]; + r[2] = rect[0]; + } + if (rect[1] > rect[3]) { + r[1] = rect[3]; + r[3] = rect[1]; + } + return r; + } + static intersect(rect1, rect2) { + const xLow = Math.max(Math.min(rect1[0], rect1[2]), Math.min(rect2[0], rect2[2])); + const xHigh = Math.min(Math.max(rect1[0], rect1[2]), Math.max(rect2[0], rect2[2])); + if (xLow > xHigh) { + return null; + } + const yLow = Math.max(Math.min(rect1[1], rect1[3]), Math.min(rect2[1], rect2[3])); + const yHigh = Math.min(Math.max(rect1[1], rect1[3]), Math.max(rect2[1], rect2[3])); + if (yLow > yHigh) { + return null; + } + return [xLow, yLow, xHigh, yHigh]; + } + static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3) { + const tvalues = [], + bounds = [[], []]; + let a, b, c, t, t1, t2, b2ac, sqrtb2ac; + for (let i = 0; i < 2; ++i) { + if (i === 0) { + b = 6 * x0 - 12 * x1 + 6 * x2; + a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3; + c = 3 * x1 - 3 * x0; + } else { + b = 6 * y0 - 12 * y1 + 6 * y2; + a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3; + c = 3 * y1 - 3 * y0; + } + if (Math.abs(a) < 1e-12) { + if (Math.abs(b) < 1e-12) { + continue; + } + t = -c / b; + if (0 < t && t < 1) { + tvalues.push(t); + } + continue; + } + b2ac = b * b - 4 * c * a; + sqrtb2ac = Math.sqrt(b2ac); + if (b2ac < 0) { + continue; + } + t1 = (-b + sqrtb2ac) / (2 * a); + if (0 < t1 && t1 < 1) { + tvalues.push(t1); + } + t2 = (-b - sqrtb2ac) / (2 * a); + if (0 < t2 && t2 < 1) { + tvalues.push(t2); + } + } + let j = tvalues.length, + mt; + const jlen = j; + while (j--) { + t = tvalues[j]; + mt = 1 - t; + bounds[0][j] = mt * mt * mt * x0 + 3 * mt * mt * t * x1 + 3 * mt * t * t * x2 + t * t * t * x3; + bounds[1][j] = mt * mt * mt * y0 + 3 * mt * mt * t * y1 + 3 * mt * t * t * y2 + t * t * t * y3; + } + bounds[0][jlen] = x0; + bounds[1][jlen] = y0; + bounds[0][jlen + 1] = x3; + bounds[1][jlen + 1] = y3; + bounds[0].length = bounds[1].length = jlen + 2; + return [Math.min(...bounds[0]), Math.min(...bounds[1]), Math.max(...bounds[0]), Math.max(...bounds[1])]; + } +} +const PDFStringTranslateTable = (/* unused pure expression or super */ null && ([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2d8, 0x2c7, 0x2c6, 0x2d9, 0x2dd, 0x2db, 0x2da, 0x2dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192, 0x2044, 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018, 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x141, 0x152, 0x160, 0x178, 0x17d, 0x131, 0x142, 0x153, 0x161, 0x17e, 0, 0x20ac])); +function stringToPDFString(str) { + if (str[0] >= "\xEF") { + let encoding; + if (str[0] === "\xFE" && str[1] === "\xFF") { + encoding = "utf-16be"; + } else if (str[0] === "\xFF" && str[1] === "\xFE") { + encoding = "utf-16le"; + } else if (str[0] === "\xEF" && str[1] === "\xBB" && str[2] === "\xBF") { + encoding = "utf-8"; + } + if (encoding) { + try { + const decoder = new TextDecoder(encoding, { + fatal: true + }); + const buffer = stringToBytes(str); + return decoder.decode(buffer); + } catch (ex) { + warn(`stringToPDFString: "${ex}".`); + } + } + } + const strBuf = []; + for (let i = 0, ii = str.length; i < ii; i++) { + const code = PDFStringTranslateTable[str.charCodeAt(i)]; + strBuf.push(code ? String.fromCharCode(code) : str.charAt(i)); + } + return strBuf.join(""); +} +function stringToUTF8String(str) { + return decodeURIComponent(escape(str)); +} +function utf8StringToString(str) { + return unescape(encodeURIComponent(str)); +} +function isArrayBuffer(v) { + return typeof v === "object" && v?.byteLength !== undefined; +} +function isArrayEqual(arr1, arr2) { + if (arr1.length !== arr2.length) { + return false; + } + for (let i = 0, ii = arr1.length; i < ii; i++) { + if (arr1[i] !== arr2[i]) { + return false; + } + } + return true; +} +function getModificationDate(date = new Date()) { + const buffer = [date.getUTCFullYear().toString(), (date.getUTCMonth() + 1).toString().padStart(2, "0"), date.getUTCDate().toString().padStart(2, "0"), date.getUTCHours().toString().padStart(2, "0"), date.getUTCMinutes().toString().padStart(2, "0"), date.getUTCSeconds().toString().padStart(2, "0")]; + return buffer.join(""); +} +class PromiseCapability { + #settled = false; + constructor() { + this.promise = new Promise((resolve, reject) => { + this.resolve = data => { + this.#settled = true; + resolve(data); + }; + this.reject = reason => { + this.#settled = true; + reject(reason); + }; + }); + } + get settled() { + return this.#settled; + } +} +let NormalizeRegex = null; +let NormalizationMap = null; +function normalizeUnicode(str) { + if (!NormalizeRegex) { + NormalizeRegex = /([\u00a0\u00b5\u037e\u0eb3\u2000-\u200a\u202f\u2126\ufb00-\ufb04\ufb06\ufb20-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufba1\ufba4-\ufba9\ufbae-\ufbb1\ufbd3-\ufbdc\ufbde-\ufbe7\ufbea-\ufbf8\ufbfc-\ufbfd\ufc00-\ufc5d\ufc64-\ufcf1\ufcf5-\ufd3d\ufd88\ufdf4\ufdfa-\ufdfb\ufe71\ufe77\ufe79\ufe7b\ufe7d]+)|(\ufb05+)/gu; + NormalizationMap = new Map([["ſt", "ſt"]]); + } + return str.replaceAll(NormalizeRegex, (_, p1, p2) => { + return p1 ? p1.normalize("NFKC") : NormalizationMap.get(p2); + }); +} +function getUuid() { + if (typeof crypto !== "undefined" && typeof crypto?.randomUUID === "function") { + return crypto.randomUUID(); + } + const buf = new Uint8Array(32); + if (typeof crypto !== "undefined" && typeof crypto?.getRandomValues === "function") { + crypto.getRandomValues(buf); + } else { + for (let i = 0; i < 32; i++) { + buf[i] = Math.floor(Math.random() * 255); + } + } + return bytesToString(buf); +} +const AnnotationPrefix = "pdfjs_internal_id_"; + + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/async module */ +/******/ (() => { +/******/ var webpackQueues = typeof Symbol === "function" ? Symbol("webpack queues") : "__webpack_queues__"; +/******/ var webpackExports = typeof Symbol === "function" ? Symbol("webpack exports") : "__webpack_exports__"; +/******/ var webpackError = typeof Symbol === "function" ? Symbol("webpack error") : "__webpack_error__"; +/******/ var resolveQueue = (queue) => { +/******/ if(queue && queue.d < 1) { +/******/ queue.d = 1; +/******/ queue.forEach((fn) => (fn.r--)); +/******/ queue.forEach((fn) => (fn.r-- ? fn.r++ : fn())); +/******/ } +/******/ } +/******/ var wrapDeps = (deps) => (deps.map((dep) => { +/******/ if(dep !== null && typeof dep === "object") { +/******/ if(dep[webpackQueues]) return dep; +/******/ if(dep.then) { +/******/ var queue = []; +/******/ queue.d = 0; +/******/ dep.then((r) => { +/******/ obj[webpackExports] = r; +/******/ resolveQueue(queue); +/******/ }, (e) => { +/******/ obj[webpackError] = e; +/******/ resolveQueue(queue); +/******/ }); +/******/ var obj = {}; +/******/ obj[webpackQueues] = (fn) => (fn(queue)); +/******/ return obj; +/******/ } +/******/ } +/******/ var ret = {}; +/******/ ret[webpackQueues] = x => {}; +/******/ ret[webpackExports] = dep; +/******/ return ret; +/******/ })); +/******/ __webpack_require__.a = (module, body, hasAwait) => { +/******/ var queue; +/******/ hasAwait && ((queue = []).d = -1); +/******/ var depQueues = new Set(); +/******/ var exports = module.exports; +/******/ var currentDeps; +/******/ var outerResolve; +/******/ var reject; +/******/ var promise = new Promise((resolve, rej) => { +/******/ reject = rej; +/******/ outerResolve = resolve; +/******/ }); +/******/ promise[webpackExports] = exports; +/******/ promise[webpackQueues] = (fn) => (queue && fn(queue), depQueues.forEach(fn), promise["catch"](x => {})); +/******/ module.exports = promise; +/******/ body((deps) => { +/******/ currentDeps = wrapDeps(deps); +/******/ var fn; +/******/ var getResult = () => (currentDeps.map((d) => { +/******/ if(d[webpackError]) throw d[webpackError]; +/******/ return d[webpackExports]; +/******/ })) +/******/ var promise = new Promise((resolve) => { +/******/ fn = () => (resolve(getResult)); +/******/ fn.r = 0; +/******/ var fnQueue = (q) => (q !== queue && !depQueues.has(q) && (depQueues.add(q), q && !q.d && (fn.r++, q.push(fn)))); +/******/ currentDeps.map((dep) => (dep[webpackQueues](fnQueue))); +/******/ }); +/******/ return fn.r ? promise : getResult(); +/******/ }, (err) => ((err ? reject(promise[webpackError] = err) : outerResolve(exports)), resolveQueue(queue))); +/******/ queue && queue.d < 0 && (queue.d = 0); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module used 'module' so it can't be inlined +/******/ var __webpack_exports__ = __webpack_require__(907); +/******/ __webpack_exports__ = globalThis.pdfjsLib = await __webpack_exports__; +/******/ var __webpack_exports__AbortException = __webpack_exports__.AbortException; +/******/ var __webpack_exports__AnnotationEditorLayer = __webpack_exports__.AnnotationEditorLayer; +/******/ var __webpack_exports__AnnotationEditorParamsType = __webpack_exports__.AnnotationEditorParamsType; +/******/ var __webpack_exports__AnnotationEditorType = __webpack_exports__.AnnotationEditorType; +/******/ var __webpack_exports__AnnotationEditorUIManager = __webpack_exports__.AnnotationEditorUIManager; +/******/ var __webpack_exports__AnnotationLayer = __webpack_exports__.AnnotationLayer; +/******/ var __webpack_exports__AnnotationMode = __webpack_exports__.AnnotationMode; +/******/ var __webpack_exports__CMapCompressionType = __webpack_exports__.CMapCompressionType; +/******/ var __webpack_exports__DOMSVGFactory = __webpack_exports__.DOMSVGFactory; +/******/ var __webpack_exports__FeatureTest = __webpack_exports__.FeatureTest; +/******/ var __webpack_exports__GlobalWorkerOptions = __webpack_exports__.GlobalWorkerOptions; +/******/ var __webpack_exports__ImageKind = __webpack_exports__.ImageKind; +/******/ var __webpack_exports__InvalidPDFException = __webpack_exports__.InvalidPDFException; +/******/ var __webpack_exports__MissingPDFException = __webpack_exports__.MissingPDFException; +/******/ var __webpack_exports__OPS = __webpack_exports__.OPS; +/******/ var __webpack_exports__PDFDataRangeTransport = __webpack_exports__.PDFDataRangeTransport; +/******/ var __webpack_exports__PDFDateString = __webpack_exports__.PDFDateString; +/******/ var __webpack_exports__PDFWorker = __webpack_exports__.PDFWorker; +/******/ var __webpack_exports__PasswordResponses = __webpack_exports__.PasswordResponses; +/******/ var __webpack_exports__PermissionFlag = __webpack_exports__.PermissionFlag; +/******/ var __webpack_exports__PixelsPerInch = __webpack_exports__.PixelsPerInch; +/******/ var __webpack_exports__PromiseCapability = __webpack_exports__.PromiseCapability; +/******/ var __webpack_exports__RenderingCancelledException = __webpack_exports__.RenderingCancelledException; +/******/ var __webpack_exports__UnexpectedResponseException = __webpack_exports__.UnexpectedResponseException; +/******/ var __webpack_exports__Util = __webpack_exports__.Util; +/******/ var __webpack_exports__VerbosityLevel = __webpack_exports__.VerbosityLevel; +/******/ var __webpack_exports__XfaLayer = __webpack_exports__.XfaLayer; +/******/ var __webpack_exports__build = __webpack_exports__.build; +/******/ var __webpack_exports__createValidAbsoluteUrl = __webpack_exports__.createValidAbsoluteUrl; +/******/ var __webpack_exports__getDocument = __webpack_exports__.getDocument; +/******/ var __webpack_exports__getFilenameFromUrl = __webpack_exports__.getFilenameFromUrl; +/******/ var __webpack_exports__getPdfFilenameFromUrl = __webpack_exports__.getPdfFilenameFromUrl; +/******/ var __webpack_exports__getXfaPageViewport = __webpack_exports__.getXfaPageViewport; +/******/ var __webpack_exports__isDataScheme = __webpack_exports__.isDataScheme; +/******/ var __webpack_exports__isPdfFile = __webpack_exports__.isPdfFile; +/******/ var __webpack_exports__noContextMenu = __webpack_exports__.noContextMenu; +/******/ var __webpack_exports__normalizeUnicode = __webpack_exports__.normalizeUnicode; +/******/ var __webpack_exports__renderTextLayer = __webpack_exports__.renderTextLayer; +/******/ var __webpack_exports__setLayerDimensions = __webpack_exports__.setLayerDimensions; +/******/ var __webpack_exports__shadow = __webpack_exports__.shadow; +/******/ var __webpack_exports__updateTextLayer = __webpack_exports__.updateTextLayer; +/******/ var __webpack_exports__version = __webpack_exports__.version; +/******/ export { __webpack_exports__AbortException as AbortException, __webpack_exports__AnnotationEditorLayer as AnnotationEditorLayer, __webpack_exports__AnnotationEditorParamsType as AnnotationEditorParamsType, __webpack_exports__AnnotationEditorType as AnnotationEditorType, __webpack_exports__AnnotationEditorUIManager as AnnotationEditorUIManager, __webpack_exports__AnnotationLayer as AnnotationLayer, __webpack_exports__AnnotationMode as AnnotationMode, __webpack_exports__CMapCompressionType as CMapCompressionType, __webpack_exports__DOMSVGFactory as DOMSVGFactory, __webpack_exports__FeatureTest as FeatureTest, __webpack_exports__GlobalWorkerOptions as GlobalWorkerOptions, __webpack_exports__ImageKind as ImageKind, __webpack_exports__InvalidPDFException as InvalidPDFException, __webpack_exports__MissingPDFException as MissingPDFException, __webpack_exports__OPS as OPS, __webpack_exports__PDFDataRangeTransport as PDFDataRangeTransport, __webpack_exports__PDFDateString as PDFDateString, __webpack_exports__PDFWorker as PDFWorker, __webpack_exports__PasswordResponses as PasswordResponses, __webpack_exports__PermissionFlag as PermissionFlag, __webpack_exports__PixelsPerInch as PixelsPerInch, __webpack_exports__PromiseCapability as PromiseCapability, __webpack_exports__RenderingCancelledException as RenderingCancelledException, __webpack_exports__UnexpectedResponseException as UnexpectedResponseException, __webpack_exports__Util as Util, __webpack_exports__VerbosityLevel as VerbosityLevel, __webpack_exports__XfaLayer as XfaLayer, __webpack_exports__build as build, __webpack_exports__createValidAbsoluteUrl as createValidAbsoluteUrl, __webpack_exports__getDocument as getDocument, __webpack_exports__getFilenameFromUrl as getFilenameFromUrl, __webpack_exports__getPdfFilenameFromUrl as getPdfFilenameFromUrl, __webpack_exports__getXfaPageViewport as getXfaPageViewport, __webpack_exports__isDataScheme as isDataScheme, __webpack_exports__isPdfFile as isPdfFile, __webpack_exports__noContextMenu as noContextMenu, __webpack_exports__normalizeUnicode as normalizeUnicode, __webpack_exports__renderTextLayer as renderTextLayer, __webpack_exports__setLayerDimensions as setLayerDimensions, __webpack_exports__shadow as shadow, __webpack_exports__updateTextLayer as updateTextLayer, __webpack_exports__version as version }; +/******/ + +//# sourceMappingURL=pdf.mjs.map \ No newline at end of file diff --git a/qdntz/加载PDF/pdfjs-4.0.189-dist/build/pdf.mjs.map b/qdntz/加载PDF/pdfjs-4.0.189-dist/build/pdf.mjs.map new file mode 100644 index 0000000..b88831e --- /dev/null +++ b/qdntz/加载PDF/pdfjs-4.0.189-dist/build/pdf.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"pdf.mjs","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBA,SAASA,aAATA,CAAuBC,CAAvB,EAA0B;EACxB,OAAOC,IAAA,CAAKC,KAAL,CAAWD,IAAA,CAAKE,GAAL,CAAS,CAAT,EAAYF,IAAA,CAAKG,GAAL,CAAS,CAAT,EAAYJ,CAAZ,CAAZ,IAA8B,GAAzC,EACJK,QADI,CACK,EADL,EAEJC,QAFI,CAEK,CAFL,EAEQ,GAFR,CAAP;AADwB;AAM1B,SAASC,aAATA,CAAuBC,CAAvB,EAA0B;EACxB,OAAOP,IAAA,CAAKE,GAAL,CAAS,CAAT,EAAYF,IAAA,CAAKG,GAAL,CAAS,GAAT,EAAc,MAAMI,CAApB,CAAZ,CAAP;AADwB;AAK1B,MAAMC,eAAN,CAAsB;EACpB,OAAOC,MAAPA,CAAc,CAACC,CAAD,EAAIC,CAAJ,EAAOC,CAAP,EAAUC,CAAV,CAAd,EAA4B;IAC1B,OAAO,CAAC,GAAD,EAAM,IAAIb,IAAA,CAAKG,GAAL,CAAS,CAAT,EAAY,MAAMO,CAAN,GAAU,OAAOE,CAAjB,GAAqB,OAAOD,CAA5B,GAAgCE,CAA5C,CAAV,CAAP;EAD0B;EAI5B,OAAOC,MAAPA,CAAc,CAACC,CAAD,CAAd,EAAmB;IACjB,OAAO,CAAC,MAAD,EAAS,CAAT,EAAY,CAAZ,EAAe,CAAf,EAAkB,IAAIA,CAAtB,CAAP;EADiB;EAInB,OAAOC,KAAPA,CAAa,CAACD,CAAD,CAAb,EAAkB;IAChB,OAAO,CAAC,KAAD,EAAQA,CAAR,EAAWA,CAAX,EAAcA,CAAd,CAAP;EADgB;EAIlB,OAAOE,KAAPA,CAAa,CAACF,CAAD,CAAb,EAAkB;IAChBA,CAAA,GAAIT,aAAA,CAAcS,CAAd,CAAJ;IACA,OAAO,CAACA,CAAD,EAAIA,CAAJ,EAAOA,CAAP,CAAP;EAFgB;EAKlB,OAAOG,MAAPA,CAAc,CAACH,CAAD,CAAd,EAAmB;IACjB,MAAMI,CAAA,GAAIrB,aAAA,CAAciB,CAAd,CAAV;IACA,OAAQ,IAAGI,CAAJ,GAAQA,CAAR,GAAYA,CAAZ,EAAP;EAFiB;EAKnB,OAAOC,KAAPA,CAAa,CAACC,CAAD,EAAIN,CAAJ,EAAOO,CAAP,CAAb,EAAwB;IACtB,OAAO,CAAC,GAAD,EAAM,MAAMD,CAAN,GAAU,OAAON,CAAjB,GAAqB,OAAOO,CAAlC,CAAP;EADsB;EAIxB,OAAOC,OAAPA,CAAeC,KAAf,EAAsB;IACpB,OAAOA,KAAA,CAAMC,GAAN,CAAUnB,aAAV,CAAP;EADoB;EAItB,OAAOoB,QAAPA,CAAgBF,KAAhB,EAAuB;IACrB,OAAQ,IAAGA,KAAA,CAAMC,GAAN,CAAU3B,aAAV,EAAyB6B,IAAzB,CAA8B,EAA9B,CAAJ,EAAP;EADqB;EAIvB,OAAOC,MAAPA,CAAA,EAAgB;IACd,OAAO,WAAP;EADc;EAIhB,OAAOC,KAAPA,CAAA,EAAe;IACb,OAAO,CAAC,IAAD,CAAP;EADa;EAIf,OAAOC,QAAPA,CAAgB,CAACpB,CAAD,EAAIC,CAAJ,EAAOC,CAAP,EAAUC,CAAV,CAAhB,EAA8B;IAC5B,OAAO,CACL,KADK,EAEL,IAAIb,IAAA,CAAKG,GAAL,CAAS,CAAT,EAAYO,CAAA,GAAIG,CAAhB,CAFC,EAGL,IAAIb,IAAA,CAAKG,GAAL,CAAS,CAAT,EAAYS,CAAA,GAAIC,CAAhB,CAHC,EAIL,IAAIb,IAAA,CAAKG,GAAL,CAAS,CAAT,EAAYQ,CAAA,GAAIE,CAAhB,CAJC,CAAP;EAD4B;EAS9B,OAAOkB,QAAPA,CAAgB,CAACrB,CAAD,EAAIC,CAAJ,EAAOC,CAAP,EAAUC,CAAV,CAAhB,EAA8B;IAC5B,OAAO,CACLP,aAAA,CAAc,IAAIN,IAAA,CAAKG,GAAL,CAAS,CAAT,EAAYO,CAAA,GAAIG,CAAhB,CAAlB,CADK,EAELP,aAAA,CAAc,IAAIN,IAAA,CAAKG,GAAL,CAAS,CAAT,EAAYS,CAAA,GAAIC,CAAhB,CAAlB,CAFK,EAGLP,aAAA,CAAc,IAAIN,IAAA,CAAKG,GAAL,CAAS,CAAT,EAAYQ,CAAA,GAAIE,CAAhB,CAAlB,CAHK,CAAP;EAD4B;EAQ9B,OAAOmB,SAAPA,CAAiBC,UAAjB,EAA6B;IAC3B,MAAMC,GAAA,GAAM,KAAKJ,QAAL,CAAcG,UAAd,EAA0BE,KAA1B,CAAgC,CAAhC,CAAZ;IACA,OAAO,KAAKT,QAAL,CAAcQ,GAAd,CAAP;EAF2B;EAK7B,OAAOE,QAAPA,CAAgB,CAACf,CAAD,EAAIN,CAAJ,EAAOO,CAAP,CAAhB,EAA2B;IACzB,MAAMZ,CAAA,GAAI,IAAIW,CAAd;IACA,MAAMT,CAAA,GAAI,IAAIG,CAAd;IACA,MAAMJ,CAAA,GAAI,IAAIW,CAAd;IACA,MAAMT,CAAA,GAAIb,IAAA,CAAKG,GAAL,CAASO,CAAT,EAAYE,CAAZ,EAAeD,CAAf,CAAV;IACA,OAAO,CAAC,MAAD,EAASD,CAAT,EAAYE,CAAZ,EAAeD,CAAf,EAAkBE,CAAlB,CAAP;EALyB;AAjEP;;;;;ACVtB;AAYA;AAMA;AACA;AACA;AAEA,MAAMwC,iBAAA,GAAoB,IAA1B;AACA,MAAMC,iBAAA,GAAoB,CAA1B;AACA,MAAMC,oBAAA,GAAuB,IAAIC,OAAJ,EAA7B;AAEA,SAASC,WAATA,CAAqBC,IAArB,EAA2B;EACzB,OAAO;IACLC,KAAA,EAAOD,IAAA,CAAK,CAAL,IAAUA,IAAA,CAAK,CAAL,CADZ;IAELE,MAAA,EAAQF,IAAA,CAAK,CAAL,IAAUA,IAAA,CAAK,CAAL;EAFb,CAAP;AADyB;AAuB3B,MAAMG,wBAAN,CAA+B;EAK7B,OAAOC,MAAPA,CAAcC,UAAd,EAA0B;IACxB,MAAMC,OAAA,GAAUD,UAAA,CAAWE,IAAX,CAAgBC,cAAhC;IAEA,QAAQF,OAAR;MACE,KAAKxB,mBAAA,CAAe2B,IAApB;QACE,OAAO,IAAIC,qBAAJ,CAA0BL,UAA1B,CAAP;MAEF,KAAKvB,mBAAA,CAAe6B,IAApB;QACE,OAAO,IAAIC,qBAAJ,CAA0BP,UAA1B,CAAP;MAEF,KAAKvB,mBAAA,CAAe+B,MAApB;QACE,MAAMC,SAAA,GAAYT,UAAA,CAAWE,IAAX,CAAgBO,SAAlC;QAEA,QAAQA,SAAR;UACE,KAAK,IAAL;YACE,OAAO,IAAIC,2BAAJ,CAAgCV,UAAhC,CAAP;UACF,KAAK,KAAL;YACE,IAAIA,UAAA,CAAWE,IAAX,CAAgBS,WAApB,EAAiC;cAC/B,OAAO,IAAIC,kCAAJ,CAAuCZ,UAAvC,CAAP;YAD+B,CAAjC,MAEO,IAAIA,UAAA,CAAWE,IAAX,CAAgBW,QAApB,EAA8B;cACnC,OAAO,IAAIC,+BAAJ,CAAoCd,UAApC,CAAP;YADmC;YAGrC,OAAO,IAAIe,iCAAJ,CAAsCf,UAAtC,CAAP;UACF,KAAK,IAAL;YACE,OAAO,IAAIgB,6BAAJ,CAAkChB,UAAlC,CAAP;UACF,KAAK,KAAL;YACE,OAAO,IAAIiB,gCAAJ,CAAqCjB,UAArC,CAAP;QAbJ;QAeA,OAAO,IAAIkB,uBAAJ,CAA4BlB,UAA5B,CAAP;MAEF,KAAKvB,mBAAA,CAAe0C,KAApB;QACE,OAAO,IAAIC,sBAAJ,CAA2BpB,UAA3B,CAAP;MAEF,KAAKvB,mBAAA,CAAe4C,QAApB;QACE,OAAO,IAAIC,yBAAJ,CAA8BtB,UAA9B,CAAP;MAEF,KAAKvB,mBAAA,CAAe8C,IAApB;QACE,OAAO,IAAIC,qBAAJ,CAA0BxB,UAA1B,CAAP;MAEF,KAAKvB,mBAAA,CAAegD,MAApB;QACE,OAAO,IAAIC,uBAAJ,CAA4B1B,UAA5B,CAAP;MAEF,KAAKvB,mBAAA,CAAekD,MAApB;QACE,OAAO,IAAIC,uBAAJ,CAA4B5B,UAA5B,CAAP;MAEF,KAAKvB,mBAAA,CAAeoD,QAApB;QACE,OAAO,IAAIC,yBAAJ,CAA8B9B,UAA9B,CAAP;MAEF,KAAKvB,mBAAA,CAAesD,KAApB;QACE,OAAO,IAAIC,sBAAJ,CAA2BhC,UAA3B,CAAP;MAEF,KAAKvB,mBAAA,CAAewD,GAApB;QACE,OAAO,IAAIC,oBAAJ,CAAyBlC,UAAzB,CAAP;MAEF,KAAKvB,mBAAA,CAAe0D,OAApB;QACE,OAAO,IAAIC,wBAAJ,CAA6BpC,UAA7B,CAAP;MAEF,KAAKvB,mBAAA,CAAe4D,SAApB;QACE,OAAO,IAAIC,0BAAJ,CAA+BtC,UAA/B,CAAP;MAEF,KAAKvB,mBAAA,CAAe8D,SAApB;QACE,OAAO,IAAIC,0BAAJ,CAA+BxC,UAA/B,CAAP;MAEF,KAAKvB,mBAAA,CAAegE,QAApB;QACE,OAAO,IAAIC,yBAAJ,CAA8B1C,UAA9B,CAAP;MAEF,KAAKvB,mBAAA,CAAekE,SAApB;QACE,OAAO,IAAIC,0BAAJ,CAA+B5C,UAA/B,CAAP;MAEF,KAAKvB,mBAAA,CAAeoE,KAApB;QACE,OAAO,IAAIC,sBAAJ,CAA2B9C,UAA3B,CAAP;MAEF,KAAKvB,mBAAA,CAAesE,cAApB;QACE,OAAO,IAAIC,+BAAJ,CAAoChD,UAApC,CAAP;MAEF;QACE,OAAO,IAAIiD,iBAAJ,CAAsBjD,UAAtB,CAAP;IAzEJ;EAHwB;AALG;AAsF/B,MAAMiD,iBAAN,CAAwB;EACtB,CAAAC,SAAA,GAAa,KAAb;EAEAC,YACEnD,UADF,EAEE;IACEoD,YAAA,GAAe,KADjB;IAEEC,YAAA,GAAe,KAFjB;IAGEC,oBAAA,GAAuB;EAHzB,IAII,EANN,EAOE;IACA,KAAKF,YAAL,GAAoBA,YAApB;IACA,KAAKlD,IAAL,GAAYF,UAAA,CAAWE,IAAvB;IACA,KAAKqD,KAAL,GAAavD,UAAA,CAAWuD,KAAxB;IACA,KAAKC,WAAL,GAAmBxD,UAAA,CAAWwD,WAA9B;IACA,KAAKC,eAAL,GAAuBzD,UAAA,CAAWyD,eAAlC;IACA,KAAKC,kBAAL,GAA0B1D,UAAA,CAAW0D,kBAArC;IACA,KAAKC,WAAL,GAAmB3D,UAAA,CAAW2D,WAA9B;IACA,KAAKC,UAAL,GAAkB5D,UAAA,CAAW4D,UAA7B;IACA,KAAKC,iBAAL,GAAyB7D,UAAA,CAAW6D,iBAApC;IACA,KAAKC,eAAL,GAAuB9D,UAAA,CAAW8D,eAAlC;IACA,KAAKC,YAAL,GAAoB/D,UAAA,CAAW+D,YAA/B;IACA,KAAKC,aAAL,GAAqBhE,UAAA,CAAWiE,YAAhC;IACA,KAAKC,MAAL,GAAclE,UAAA,CAAWkE,MAAzB;IAEA,IAAId,YAAJ,EAAkB;MAChB,KAAKe,SAAL,GAAiB,KAAKC,gBAAL,CAAsBf,YAAtB,CAAjB;IADgB;IAGlB,IAAIC,oBAAJ,EAA0B;MACxB,KAAKe,qBAAL;IADwB;EAlB1B;EAuBF,OAAOC,aAAPA,CAAqB;IAAEC,QAAF;IAAYC,WAAZ;IAAyBC;EAAzB,CAArB,EAA0D;IACxD,OAAO,CAAC,EAAEF,QAAA,EAAUG,GAAV,IAAiBF,WAAA,EAAaE,GAA9B,IAAqCD,QAAA,EAAUC,GAA/C,CAAV;EADwD;EAI1D,IAAIC,YAAJA,CAAA,EAAmB;IACjB,OAAO1B,iBAAA,CAAkBqB,aAAlB,CAAgC,KAAKpE,IAArC,CAAP;EADiB;EAYnBkE,iBAAiBf,YAAjB,EAA+B;IAC7B,MAAM;MACJnD,IADI;MAEJgE,MAAA,EAAQ;QAAEU,IAAF;QAAQC;MAAR;IAFJ,IAGF,IAHJ;IAKA,MAAMV,SAAA,GAAYW,QAAA,CAASC,aAAT,CAAuB,SAAvB,CAAlB;IACAZ,SAAA,CAAUa,YAAV,CAAuB,oBAAvB,EAA6C9E,IAAA,CAAK+E,EAAlD;IACA,IAAI,EAAE,gBAAgB/D,uBAAhB,CAAN,EAAgD;MAC9CiD,SAAA,CAAUe,QAAV,GAAqB5F,iBAArB;IAD8C;IAShD6E,SAAA,CAAUgB,KAAV,CAAgBC,MAAhB,GAAyB,KAAKlB,MAAL,CAAYkB,MAAZ,EAAzB;IAEA,IAAI,KAAKlF,IAAL,CAAUmF,QAAd,EAAwB;MACtBlB,SAAA,CAAUa,YAAV,CAAuB,eAAvB,EAAwC,QAAxC;IADsB;IAIxB,IAAI9E,IAAA,CAAKoF,QAAT,EAAmB;MACjBnB,SAAA,CAAUoB,SAAV,CAAoBC,GAApB,CAAwB,UAAxB;IADiB;IAInB,MAAM;MAAEC,SAAF;MAAaC,UAAb;MAAyBC,KAAzB;MAAgCC;IAAhC,IAA0Cf,QAAA,CAASgB,OAAzD;IAEA,IAAI,CAAC3F,IAAA,CAAKP,IAAN,IAAc,gBAAgByB,sBAAlC,EAA0D;MACxD,MAAM;QAAE0E;MAAF,IAAe5F,IAArB;MACA,IAAI,CAACA,IAAA,CAAK6F,YAAN,IAAsBD,QAAA,KAAa,CAAvC,EAA0C;QACxC,KAAKE,WAAL,CAAiBF,QAAjB,EAA2B3B,SAA3B;MADwC;MAG1C,OAAOA,SAAP;IALwD;IAQ1D,MAAM;MAAEvE,KAAF;MAASC;IAAT,IAAoBH,WAAA,CAAYQ,IAAA,CAAKP,IAAjB,CAA1B;IAIA,MAAMA,IAAA,GAAOb,SAAA,CAAKmH,aAAL,CAAmB,CAC9B/F,IAAA,CAAKP,IAAL,CAAU,CAAV,CAD8B,EAE9BiF,IAAA,CAAKsB,IAAL,CAAU,CAAV,IAAehG,IAAA,CAAKP,IAAL,CAAU,CAAV,CAAf,GAA8BiF,IAAA,CAAKsB,IAAL,CAAU,CAAV,CAFA,EAG9BhG,IAAA,CAAKP,IAAL,CAAU,CAAV,CAH8B,EAI9BiF,IAAA,CAAKsB,IAAL,CAAU,CAAV,IAAehG,IAAA,CAAKP,IAAL,CAAU,CAAV,CAAf,GAA8BiF,IAAA,CAAKsB,IAAL,CAAU,CAAV,CAJA,CAAnB,CAAb;IAOA,IAAI,CAAC7C,YAAD,IAAiBnD,IAAA,CAAKiG,WAAL,CAAiBvG,KAAjB,GAAyB,CAA9C,EAAiD;MAC/CuE,SAAA,CAAUgB,KAAV,CAAgBiB,WAAhB,GAA8B,GAAGlG,IAAA,CAAKiG,WAAL,CAAiBvG,KAAM,IAAxD;MAEA,MAAMyG,gBAAA,GAAmBnG,IAAA,CAAKiG,WAAL,CAAiBG,sBAA1C;MACA,MAAMC,cAAA,GAAiBrG,IAAA,CAAKiG,WAAL,CAAiBK,oBAAxC;MACA,IAAIH,gBAAA,GAAmB,CAAnB,IAAwBE,cAAA,GAAiB,CAA7C,EAAgD;QAC9C,MAAME,MAAA,GAAU,QAAOJ,gBAAiB,oCAAmCE,cAAe,2BAA1F;QACApC,SAAA,CAAUgB,KAAV,CAAgBuB,YAAhB,GAA+BD,MAA/B;MAF8C,CAAhD,MAGO,IAAI,gBAAgB7F,kCAApB,EAAwD;QAC7D,MAAM6F,MAAA,GAAU,QAAO7G,KAAM,oCAAmCC,MAAO,2BAAvE;QACAsE,SAAA,CAAUgB,KAAV,CAAgBuB,YAAhB,GAA+BD,MAA/B;MAF6D;MAK/D,QAAQvG,IAAA,CAAKiG,WAAL,CAAiBhB,KAAzB;QACE,KAAK7G,8BAAA,CAA0BqI,KAA/B;UACExC,SAAA,CAAUgB,KAAV,CAAgBgB,WAAhB,GAA8B,OAA9B;UACA;QAEF,KAAK7H,8BAAA,CAA0BsI,MAA/B;UACEzC,SAAA,CAAUgB,KAAV,CAAgBgB,WAAhB,GAA8B,QAA9B;UACA;QAEF,KAAK7H,8BAAA,CAA0BuI,OAA/B;UACE9H,aAAA,CAAK,qCAAL;UACA;QAEF,KAAKT,8BAAA,CAA0BwI,KAA/B;UACE/H,aAAA,CAAK,mCAAL;UACA;QAEF,KAAKT,8BAAA,CAA0BiE,SAA/B;UACE4B,SAAA,CAAUgB,KAAV,CAAgB4B,iBAAhB,GAAoC,OAApC;UACA;QAEF;UACE;MAtBJ;MAyBA,MAAMC,WAAA,GAAc9G,IAAA,CAAK8G,WAAL,IAAoB,IAAxC;MACA,IAAIA,WAAJ,EAAiB;QACf,KAAK,CAAA9D,SAAL,GAAkB,IAAlB;QACAiB,SAAA,CAAUgB,KAAV,CAAgB6B,WAAhB,GAA8BlI,SAAA,CAAKmI,YAAL,CAC5BD,WAAA,CAAY,CAAZ,IAAiB,CADW,EAE5BA,WAAA,CAAY,CAAZ,IAAiB,CAFW,EAG5BA,WAAA,CAAY,CAAZ,IAAiB,CAHW,CAA9B;MAFe,CAAjB,MAOO;QAEL7C,SAAA,CAAUgB,KAAV,CAAgBiB,WAAhB,GAA8B,CAA9B;MAFK;IA9CwC;IAoDjDjC,SAAA,CAAUgB,KAAV,CAAgB+B,IAAhB,GAAuB,GAAI,OAAOvH,IAAA,CAAK,CAAL,IAAUgG,KAAV,CAAR,GAA4BF,SAAU,GAAhE;IACAtB,SAAA,CAAUgB,KAAV,CAAgBgC,GAAhB,GAAsB,GAAI,OAAOxH,IAAA,CAAK,CAAL,IAAUiG,KAAV,CAAR,GAA4BF,UAAW,GAAhE;IAEA,MAAM;MAAEI;IAAF,IAAe5F,IAArB;IACA,IAAIA,IAAA,CAAK6F,YAAL,IAAqBD,QAAA,KAAa,CAAtC,EAAyC;MACvC3B,SAAA,CAAUgB,KAAV,CAAgBvF,KAAhB,GAAwB,GAAI,MAAMA,KAAP,GAAgB6F,SAAU,GAArD;MACAtB,SAAA,CAAUgB,KAAV,CAAgBtF,MAAhB,GAAyB,GAAI,MAAMA,MAAP,GAAiB6F,UAAW,GAAxD;IAFuC,CAAzC,MAGO;MACL,KAAKM,WAAL,CAAiBF,QAAjB,EAA2B3B,SAA3B;IADK;IAIP,OAAOA,SAAP;EA/G6B;EAkH/B6B,YAAYoB,KAAZ,EAAmBjD,SAAA,GAAY,KAAKA,SAApC,EAA+C;IAC7C,IAAI,CAAC,KAAKjE,IAAL,CAAUP,IAAf,EAAqB;MACnB;IADmB;IAGrB,MAAM;MAAE8F,SAAF;MAAaC;IAAb,IAA4B,KAAKxB,MAAL,CAAYW,QAAZ,CAAqBgB,OAAvD;IACA,MAAM;MAAEjG,KAAF;MAASC;IAAT,IAAoBH,WAAA,CAAY,KAAKQ,IAAL,CAAUP,IAAtB,CAA1B;IAEA,IAAI0H,YAAJ,EAAkBC,aAAlB;IACA,IAAIF,KAAA,GAAQ,GAAR,KAAgB,CAApB,EAAuB;MACrBC,YAAA,GAAgB,MAAMzH,KAAP,GAAgB6F,SAA/B;MACA6B,aAAA,GAAiB,MAAMzH,MAAP,GAAiB6F,UAAjC;IAFqB,CAAvB,MAGO;MACL2B,YAAA,GAAgB,MAAMxH,MAAP,GAAiB4F,SAAhC;MACA6B,aAAA,GAAiB,MAAM1H,KAAP,GAAgB8F,UAAhC;IAFK;IAKPvB,SAAA,CAAUgB,KAAV,CAAgBvF,KAAhB,GAAwB,GAAGyH,YAAa,GAAxC;IACAlD,SAAA,CAAUgB,KAAV,CAAgBtF,MAAhB,GAAyB,GAAGyH,aAAc,GAA1C;IAEAnD,SAAA,CAAUa,YAAV,CAAuB,oBAAvB,EAA8C,OAAMoC,KAAN,IAAe,GAA7D;EAnB6C;EAsB/C,IAAIG,cAAJA,CAAA,EAAqB;IACnB,MAAMC,QAAA,GAAWA,CAACC,MAAD,EAASC,SAAT,EAAoBC,KAApB,KAA8B;MAC7C,MAAMlK,KAAA,GAAQkK,KAAA,CAAMC,MAAN,CAAaH,MAAb,CAAd;MACA,MAAMI,SAAA,GAAYpK,KAAA,CAAM,CAAN,CAAlB;MACA,MAAMqK,UAAA,GAAarK,KAAA,CAAMW,KAAN,CAAY,CAAZ,CAAnB;MACAuJ,KAAA,CAAMI,MAAN,CAAa5C,KAAb,CAAmBuC,SAAnB,IACEjL,eAAA,CAAgB,GAAGoL,SAAU,OAA7B,EAAqCC,UAArC,CADF;MAEA,KAAKjE,iBAAL,CAAuBmE,QAAvB,CAAgC,KAAK9H,IAAL,CAAU+E,EAA1C,EAA8C;QAC5C,CAACyC,SAAD,GAAajL,eAAA,CAAgB,GAAGoL,SAAU,MAA7B,EAAoCC,UAApC;MAD+B,CAA9C;IAN6C,CAA/C;IAWA,OAAOlJ,eAAA,CAAO,IAAP,EAAa,gBAAb,EAA+B;MACpCqJ,OAAA,EAASN,KAAA,IAAS;QAChB,MAAM;UAAEM;QAAF,IAAcN,KAAA,CAAMC,MAA1B;QAGA,MAAMM,MAAA,GAASD,OAAA,GAAU,CAAV,KAAgB,CAA/B;QACA,KAAK9D,SAAL,CAAegB,KAAf,CAAqBgD,UAArB,GAAkCD,MAAA,GAAS,QAAT,GAAoB,SAAtD;QACA,KAAKrE,iBAAL,CAAuBmE,QAAvB,CAAgC,KAAK9H,IAAL,CAAU+E,EAA1C,EAA8C;UAC5CmD,MAAA,EAAQF,MADoC;UAE5CG,OAAA,EAASJ,OAAA,KAAY,CAAZ,IAAiBA,OAAA,KAAY;QAFM,CAA9C;MANgB,CADkB;MAYpCK,KAAA,EAAOX,KAAA,IAAS;QACd,KAAK9D,iBAAL,CAAuBmE,QAAvB,CAAgC,KAAK9H,IAAL,CAAU+E,EAA1C,EAA8C;UAC5CoD,OAAA,EAAS,CAACV,KAAA,CAAMC,MAAN,CAAaU;QADqB,CAA9C;MADc,CAZoB;MAiBpCJ,MAAA,EAAQP,KAAA,IAAS;QACf,MAAM;UAAEO;QAAF,IAAaP,KAAA,CAAMC,MAAzB;QACA,KAAKzD,SAAL,CAAegB,KAAf,CAAqBgD,UAArB,GAAkCD,MAAA,GAAS,QAAT,GAAoB,SAAtD;QACA,KAAKrE,iBAAL,CAAuBmE,QAAvB,CAAgC,KAAK9H,IAAL,CAAU+E,EAA1C,EAA8C;UAC5CoD,OAAA,EAASH,MADmC;UAE5CE,MAAA,EAAQF;QAFoC,CAA9C;MAHe,CAjBmB;MAyBpCK,KAAA,EAAOZ,KAAA,IAAS;QACda,UAAA,CAAW,MAAMb,KAAA,CAAMI,MAAN,CAAaQ,KAAb,CAAmB;UAAEE,aAAA,EAAe;QAAjB,CAAnB,CAAjB,EAA+D,CAA/D;MADc,CAzBoB;MA4BpCC,QAAA,EAAUf,KAAA,IAAS;QAEjBA,KAAA,CAAMI,MAAN,CAAaY,KAAb,GAAqBhB,KAAA,CAAMC,MAAN,CAAac,QAAlC;MAFiB,CA5BiB;MAgCpCE,QAAA,EAAUjB,KAAA,IAAS;QACjBA,KAAA,CAAMI,MAAN,CAAac,QAAb,GAAwBlB,KAAA,CAAMC,MAAN,CAAagB,QAArC;MADiB,CAhCiB;MAmCpCE,QAAA,EAAUnB,KAAA,IAAS;QACjB,KAAKoB,YAAL,CAAkBpB,KAAA,CAAMI,MAAxB,EAAgCJ,KAAA,CAAMC,MAAN,CAAakB,QAA7C;MADiB,CAnCiB;MAsCpCE,OAAA,EAASrB,KAAA,IAAS;QAChBH,QAAA,CAAS,SAAT,EAAoB,iBAApB,EAAuCG,KAAvC;MADgB,CAtCkB;MAyCpCsB,SAAA,EAAWtB,KAAA,IAAS;QAClBH,QAAA,CAAS,WAAT,EAAsB,iBAAtB,EAAyCG,KAAzC;MADkB,CAzCgB;MA4CpCuB,OAAA,EAASvB,KAAA,IAAS;QAChBH,QAAA,CAAS,SAAT,EAAoB,OAApB,EAA6BG,KAA7B;MADgB,CA5CkB;MA+CpCwB,SAAA,EAAWxB,KAAA,IAAS;QAClBH,QAAA,CAAS,WAAT,EAAsB,OAAtB,EAA+BG,KAA/B;MADkB,CA/CgB;MAkDpCX,WAAA,EAAaW,KAAA,IAAS;QACpBH,QAAA,CAAS,aAAT,EAAwB,aAAxB,EAAuCG,KAAvC;MADoB,CAlDc;MAqDpCyB,WAAA,EAAazB,KAAA,IAAS;QACpBH,QAAA,CAAS,aAAT,EAAwB,aAAxB,EAAuCG,KAAvC;MADoB,CArDc;MAwDpC7B,QAAA,EAAU6B,KAAA,IAAS;QACjB,MAAMP,KAAA,GAAQO,KAAA,CAAMC,MAAN,CAAa9B,QAA3B;QACA,KAAKE,WAAL,CAAiBoB,KAAjB;QACA,KAAKvD,iBAAL,CAAuBmE,QAAvB,CAAgC,KAAK9H,IAAL,CAAU+E,EAA1C,EAA8C;UAC5Ca,QAAA,EAAUsB;QADkC,CAA9C;MAHiB;IAxDiB,CAA/B,CAAP;EAZmB;EA8ErBiC,0BAA0BC,OAA1B,EAAmCC,OAAnC,EAA4C;IAC1C,MAAMC,aAAA,GAAgB,KAAKjC,cAA3B;IACA,WAAWkC,IAAX,IAAmBC,MAAA,CAAOC,IAAP,CAAYJ,OAAA,CAAQ3B,MAApB,CAAnB,EAAgD;MAC9C,MAAMgC,MAAA,GAASN,OAAA,CAAQG,IAAR,KAAiBD,aAAA,CAAcC,IAAd,CAAhC;MACAG,MAAA,GAASL,OAAT;IAF8C;EAFN;EAQ5CM,4BAA4BC,OAA5B,EAAqC;IACnC,IAAI,CAAC,KAAKhG,eAAV,EAA2B;MACzB;IADyB;IAK3B,MAAMiG,UAAA,GAAa,KAAKlG,iBAAL,CAAuBmG,WAAvB,CAAmC,KAAK9J,IAAL,CAAU+E,EAA7C,CAAnB;IACA,IAAI,CAAC8E,UAAL,EAAiB;MACf;IADe;IAIjB,MAAMP,aAAA,GAAgB,KAAKjC,cAA3B;IACA,WAAW,CAAC0C,UAAD,EAAarC,MAAb,CAAX,IAAmC8B,MAAA,CAAOQ,OAAP,CAAeH,UAAf,CAAnC,EAA+D;MAC7D,MAAMH,MAAA,GAASJ,aAAA,CAAcS,UAAd,CAAf;MACA,IAAIL,MAAJ,EAAY;QACV,MAAMO,UAAA,GAAa;UACjBvC,MAAA,EAAQ;YACN,CAACqC,UAAD,GAAcrC;UADR,CADS;UAIjBG,MAAA,EAAQ+B;QAJS,CAAnB;QAMAF,MAAA,CAAOO,UAAP;QAEA,OAAOJ,UAAA,CAAWE,UAAX,CAAP;MATU;IAFiD;EAZ5B;EAkCrC5F,sBAAA,EAAwB;IACtB,IAAI,CAAC,KAAKF,SAAV,EAAqB;MACnB;IADmB;IAGrB,MAAM;MAAEiG;IAAF,IAAiB,KAAKlK,IAA5B;IACA,IAAI,CAACkK,UAAL,EAAiB;MACf;IADe;IAIjB,MAAM,CAACC,OAAD,EAAUC,OAAV,EAAmBC,OAAnB,EAA4BC,OAA5B,IAAuC,KAAKtK,IAAL,CAAUP,IAAvD;IAEA,IAAIyK,UAAA,CAAWK,MAAX,KAAsB,CAA1B,EAA6B;MAC3B,MAAM,GAAG;QAAEjO,CAAA,EAAGkO,GAAL;QAAU9N,CAAA,EAAG+N;MAAb,CAAH,EAAuB;QAAEnO,CAAA,EAAGoO,GAAL;QAAUhO,CAAA,EAAGiO;MAAb,CAAvB,IAA6CT,UAAA,CAAW,CAAX,CAAnD;MACA,IACEG,OAAA,KAAYG,GAAZ,IACAF,OAAA,KAAYG,GADZ,IAEAN,OAAA,KAAYO,GAFZ,IAGAN,OAAA,KAAYO,GAJd,EAKE;QAGA;MAHA;IAPyB;IAc7B,MAAM;MAAE1F;IAAF,IAAY,KAAKhB,SAAvB;IACA,IAAI2G,SAAJ;IACA,IAAI,KAAK,CAAA5H,SAAT,EAAqB;MACnB,MAAM;QAAE8D,WAAF;QAAeZ;MAAf,IAA+BjB,KAArC;MACAA,KAAA,CAAMiB,WAAN,GAAoB,CAApB;MACA0E,SAAA,GAAY,CACV,+BADU,EAET,yCAFS,EAGT,gDAHS,EAIT,iCAAgC9D,WAAY,mBAAkBZ,WAAY,IAJjE,CAAZ;MAMA,KAAKjC,SAAL,CAAeoB,SAAf,CAAyBC,GAAzB,CAA6B,WAA7B;IATmB;IAgBrB,MAAM5F,KAAA,GAAQ2K,OAAA,GAAUF,OAAxB;IACA,MAAMxK,MAAA,GAAS2K,OAAA,GAAUF,OAAzB;IAEA,MAAM;MAAE1G;IAAF,IAAiB,IAAvB;IACA,MAAMmH,GAAA,GAAMnH,UAAA,CAAWmB,aAAX,CAAyB,KAAzB,CAAZ;IACAgG,GAAA,CAAIxF,SAAJ,CAAcC,GAAd,CAAkB,yBAAlB;IACAuF,GAAA,CAAI/F,YAAJ,CAAiB,OAAjB,EAA0B,CAA1B;IACA+F,GAAA,CAAI/F,YAAJ,CAAiB,QAAjB,EAA2B,CAA3B;IACA,MAAMgG,IAAA,GAAOpH,UAAA,CAAWmB,aAAX,CAAyB,MAAzB,CAAb;IACAgG,GAAA,CAAIE,MAAJ,CAAWD,IAAX;IACA,MAAME,QAAA,GAAWtH,UAAA,CAAWmB,aAAX,CAAyB,UAAzB,CAAjB;IACA,MAAME,EAAA,GAAM,YAAW,KAAK/E,IAAL,CAAU+E,EAAtB,EAAX;IACAiG,QAAA,CAASlG,YAAT,CAAsB,IAAtB,EAA4BC,EAA5B;IACAiG,QAAA,CAASlG,YAAT,CAAsB,eAAtB,EAAuC,mBAAvC;IACAgG,IAAA,CAAKC,MAAL,CAAYC,QAAZ;IAEA,WAAW,GAAG;MAAE1O,CAAA,EAAGkO,GAAL;MAAU9N,CAAA,EAAG+N;IAAb,CAAH,EAAuB;MAAEnO,CAAA,EAAGoO,GAAL;MAAUhO,CAAA,EAAGiO;IAAb,CAAvB,CAAX,IAAyDT,UAAzD,EAAqE;MACnE,MAAMzK,IAAA,GAAOiE,UAAA,CAAWmB,aAAX,CAAyB,MAAzB,CAAb;MACA,MAAMvI,CAAA,GAAK,CAAAoO,GAAA,GAAMP,OAAN,IAAiBzK,KAA5B;MACA,MAAMhD,CAAA,GAAK,CAAA4N,OAAA,GAAUG,GAAV,IAAiB9K,MAA5B;MACA,MAAMsL,SAAA,GAAa,CAAAT,GAAA,GAAME,GAAN,IAAahL,KAAhC;MACA,MAAMwL,UAAA,GAAc,CAAAT,GAAA,GAAME,GAAN,IAAahL,MAAjC;MACAF,IAAA,CAAKqF,YAAL,CAAkB,GAAlB,EAAuBxI,CAAvB;MACAmD,IAAA,CAAKqF,YAAL,CAAkB,GAAlB,EAAuBpI,CAAvB;MACA+C,IAAA,CAAKqF,YAAL,CAAkB,OAAlB,EAA2BmG,SAA3B;MACAxL,IAAA,CAAKqF,YAAL,CAAkB,QAAlB,EAA4BoG,UAA5B;MACAF,QAAA,CAASD,MAAT,CAAgBtL,IAAhB;MACAmL,SAAA,EAAWO,IAAX,CACG,+CAA8C7O,CAAE,QAAOI,CAAE,YAAWuO,SAAU,aAAYC,UAAW,KADxG;IAXmE;IAgBrE,IAAI,KAAK,CAAAlI,SAAT,EAAqB;MACnB4H,SAAA,CAAUO,IAAV,CAAgB,cAAhB;MACAlG,KAAA,CAAMmG,eAAN,GAAwBR,SAAA,CAAUlN,IAAV,CAAe,EAAf,CAAxB;IAFmB;IAKrB,KAAKuG,SAAL,CAAe8G,MAAf,CAAsBF,GAAtB;IACA,KAAK5G,SAAL,CAAegB,KAAf,CAAqB+F,QAArB,GAAiC,QAAOjG,EAAG,GAA3C;EAjFsB;EA4FxBsG,aAAA,EAAe;IACb,MAAM;MAAEpH,SAAF;MAAajE;IAAb,IAAsB,IAA5B;IACAiE,SAAA,CAAUa,YAAV,CAAuB,eAAvB,EAAwC,QAAxC;IAEA,MAAMwG,KAAA,GAAQ,IAAIpK,sBAAJ,CAA2B;MACvClB,IAAA,EAAM;QACJzC,KAAA,EAAOyC,IAAA,CAAKzC,KADR;QAEJ8G,QAAA,EAAUrE,IAAA,CAAKqE,QAFX;QAGJkH,gBAAA,EAAkBvL,IAAA,CAAKuL,gBAHnB;QAIJjH,WAAA,EAAatE,IAAA,CAAKsE,WAJd;QAKJC,QAAA,EAAUvE,IAAA,CAAKuE,QALX;QAMJiH,UAAA,EAAYxL,IAAA,CAAKP,IANb;QAOJwG,WAAA,EAAa,CAPT;QAQJlB,EAAA,EAAK,SAAQ/E,IAAA,CAAK+E,EAAd,EARA;QASJa,QAAA,EAAU5F,IAAA,CAAK4F;MATX,CADiC;MAYvC5B,MAAA,EAAQ,KAAKA,MAZ0B;MAavCyH,QAAA,EAAU,CAAC,IAAD;IAb6B,CAA3B,CAAd;IAeA,KAAKzH,MAAL,CAAY0H,GAAZ,CAAgBX,MAAhB,CAAuBO,KAAA,CAAMK,MAAN,EAAvB;EAnBa;EA4BfA,OAAA,EAAS;IACPhN,oBAAA,CAAY,mDAAZ;EADO;EAQTiN,mBAAmBrC,IAAnB,EAAyBsC,MAAA,GAAS,IAAlC,EAAwC;IACtC,MAAMC,MAAA,GAAS,EAAf;IAEA,IAAI,KAAKhI,aAAT,EAAwB;MACtB,MAAMiI,QAAA,GAAW,KAAKjI,aAAL,CAAmByF,IAAnB,CAAjB;MACA,IAAIwC,QAAJ,EAAc;QACZ,WAAW;UAAErH,IAAF;UAAQK,EAAR;UAAYiH;QAAZ,CAAX,IAAyCD,QAAzC,EAAmD;UACjD,IAAIrH,IAAA,KAAS,CAAC,CAAd,EAAiB;YACf;UADe;UAGjB,IAAIK,EAAA,KAAO8G,MAAX,EAAmB;YACjB;UADiB;UAGnB,MAAMI,WAAA,GACJ,OAAOD,YAAP,KAAwB,QAAxB,GAAmCA,YAAnC,GAAkD,IADpD;UAGA,MAAME,UAAA,GAAatH,QAAA,CAASuH,aAAT,CAChB,qBAAoBpH,EAAG,IADP,CAAnB;UAGA,IAAImH,UAAA,IAAc,CAAC5M,oBAAA,CAAqB8M,GAArB,CAAyBF,UAAzB,CAAnB,EAAyD;YACvDrN,aAAA,CAAM,6CAA4CkG,EAA7C,EAAL;YACA;UAFuD;UAIzD+G,MAAA,CAAOX,IAAP,CAAY;YAAEpG,EAAF;YAAMkH,WAAN;YAAmBC;UAAnB,CAAZ;QAjBiD;MADvC;MAqBd,OAAOJ,MAAP;IAvBsB;IA2BxB,WAAWI,UAAX,IAAyBtH,QAAA,CAASyH,iBAAT,CAA2B9C,IAA3B,CAAzB,EAA2D;MACzD,MAAM;QAAE0C;MAAF,IAAkBC,UAAxB;MACA,MAAMnH,EAAA,GAAKmH,UAAA,CAAWI,YAAX,CAAwB,iBAAxB,CAAX;MACA,IAAIvH,EAAA,KAAO8G,MAAX,EAAmB;QACjB;MADiB;MAGnB,IAAI,CAACvM,oBAAA,CAAqB8M,GAArB,CAAyBF,UAAzB,CAAL,EAA2C;QACzC;MADyC;MAG3CJ,MAAA,CAAOX,IAAP,CAAY;QAAEpG,EAAF;QAAMkH,WAAN;QAAmBC;MAAnB,CAAZ;IATyD;IAW3D,OAAOJ,MAAP;EAzCsC;EA4CxCS,KAAA,EAAO;IACL,IAAI,KAAKtI,SAAT,EAAoB;MAClB,KAAKA,SAAL,CAAe+D,MAAf,GAAwB,KAAxB;IADkB;IAGpB,KAAKsD,KAAL,EAAYkB,SAAZ;EAJK;EAOPC,KAAA,EAAO;IACL,IAAI,KAAKxI,SAAT,EAAoB;MAClB,KAAKA,SAAL,CAAe+D,MAAf,GAAwB,IAAxB;IADkB;IAGpB,KAAKsD,KAAL,EAAYoB,SAAZ;EAJK;EAePC,0BAAA,EAA4B;IAC1B,OAAO,KAAK1I,SAAZ;EAD0B;EAI5B2I,iBAAA,EAAmB;IACjB,MAAMC,QAAA,GAAW,KAAKF,yBAAL,EAAjB;IACA,IAAIG,KAAA,CAAMC,OAAN,CAAcF,QAAd,CAAJ,EAA6B;MAC3B,WAAWjD,OAAX,IAAsBiD,QAAtB,EAAgC;QAC9BjD,OAAA,CAAQvE,SAAR,CAAkBC,GAAlB,CAAsB,eAAtB;MAD8B;IADL,CAA7B,MAIO;MACLuH,QAAA,CAASxH,SAAT,CAAmBC,GAAnB,CAAuB,eAAvB;IADK;EANU;EAWnB,IAAI0H,WAAJA,CAAA,EAAkB;IAChB,OAAO,KAAP;EADgB;EAIlBC,mBAAA,EAAqB;IACnB,IAAI,CAAC,KAAKD,WAAV,EAAuB;MACrB;IADqB;IAGvB,MAAM;MACJE,oBAAA,EAAsBC,IADlB;MAEJnN,IAAA,EAAM;QAAE+E,EAAA,EAAIqI;MAAN;IAFF,IAGF,IAHJ;IAIA,KAAKnJ,SAAL,CAAeoJ,gBAAf,CAAgC,UAAhC,EAA4C,MAAM;MAChD,KAAK/J,WAAL,CAAiBgK,QAAjB,EAA2BC,QAA3B,CAAoC,4BAApC,EAAkE;QAChEC,MAAA,EAAQ,IADwD;QAEhEL,IAFgE;QAGhEC;MAHgE,CAAlE;IADgD,CAAlD;EARmB;AAtgBC;AAwhBxB,MAAMjN,qBAAN,SAAoC4C,iBAApC,CAAsD;EACpDE,YAAYnD,UAAZ,EAAwB2N,OAAA,GAAU,IAAlC,EAAwC;IACtC,MAAM3N,UAAN,EAAkB;MAChBoD,YAAA,EAAc,IADE;MAEhBC,YAAA,EAAc,CAAC,CAACsK,OAAA,EAAStK,YAFT;MAGhBC,oBAAA,EAAsB;IAHN,CAAlB;IAKA,KAAKsK,aAAL,GAAqB5N,UAAA,CAAWE,IAAX,CAAgB0N,aAArC;EANsC;EASxC/B,OAAA,EAAS;IACP,MAAM;MAAE3L,IAAF;MAAQsD;IAAR,IAAwB,IAA9B;IACA,MAAMqK,IAAA,GAAO/I,QAAA,CAASC,aAAT,CAAuB,GAAvB,CAAb;IACA8I,IAAA,CAAK7I,YAAL,CAAkB,iBAAlB,EAAqC9E,IAAA,CAAK+E,EAA1C;IACA,IAAI6I,OAAA,GAAU,KAAd;IAEA,IAAI5N,IAAA,CAAK6N,GAAT,EAAc;MACZvK,WAAA,CAAYwK,iBAAZ,CAA8BH,IAA9B,EAAoC3N,IAAA,CAAK6N,GAAzC,EAA8C7N,IAAA,CAAK+N,SAAnD;MACAH,OAAA,GAAU,IAAV;IAFY,CAAd,MAGO,IAAI5N,IAAA,CAAK0J,MAAT,EAAiB;MACtB,KAAKsE,gBAAL,CAAsBL,IAAtB,EAA4B3N,IAAA,CAAK0J,MAAjC;MACAkE,OAAA,GAAU,IAAV;IAFsB,CAAjB,MAGA,IAAI5N,IAAA,CAAKiO,UAAT,EAAqB;MAC1B,KAAK,CAAAC,cAAL,CAAqBP,IAArB,EAA2B3N,IAAA,CAAKiO,UAAhC,EAA4CjO,IAAA,CAAKmO,cAAjD;MACAP,OAAA,GAAU,IAAV;IAF0B,CAArB,MAGA,IAAI5N,IAAA,CAAKoO,WAAT,EAAsB;MAC3B,KAAK,CAAAC,eAAL,CAAsBV,IAAtB,EAA4B3N,IAAA,CAAKoO,WAAjC;MACAR,OAAA,GAAU,IAAV;IAF2B,CAAtB,MAGA,IAAI5N,IAAA,CAAKsO,IAAT,EAAe;MACpB,KAAKC,SAAL,CAAeZ,IAAf,EAAqB3N,IAAA,CAAKsO,IAA1B;MACAV,OAAA,GAAU,IAAV;IAFoB,CAAf,MAGA;MACL,IACE5N,IAAA,CAAKoJ,OAAL,KACCpJ,IAAA,CAAKoJ,OAAL,CAAaoF,MAAb,IACCxO,IAAA,CAAKoJ,OAAL,CAAa,UAAb,CADD,IAECpJ,IAAA,CAAKoJ,OAAL,CAAa,YAAb,CAFD,CADD,IAIA,KAAKxF,eAJL,IAKA,KAAKC,YANP,EAOE;QACA,KAAK4K,aAAL,CAAmBd,IAAnB,EAAyB3N,IAAzB;QACA4N,OAAA,GAAU,IAAV;MAFA;MAKF,IAAI5N,IAAA,CAAK0O,SAAT,EAAoB;QAClB,KAAKC,oBAAL,CAA0BhB,IAA1B,EAAgC3N,IAAA,CAAK0O,SAArC;QACAd,OAAA,GAAU,IAAV;MAFkB,CAApB,MAGO,IAAI,KAAKF,aAAL,IAAsB,CAACE,OAA3B,EAAoC;QACzC,KAAKW,SAAL,CAAeZ,IAAf,EAAqB,EAArB;QACAC,OAAA,GAAU,IAAV;MAFyC;IAhBtC;IAsBP,KAAK3J,SAAL,CAAeoB,SAAf,CAAyBC,GAAzB,CAA6B,gBAA7B;IACA,IAAIsI,OAAJ,EAAa;MACX,KAAK3J,SAAL,CAAe8G,MAAf,CAAsB4C,IAAtB;IADW;IAIb,OAAO,KAAK1J,SAAZ;EAhDO;EAmDT,CAAA2K,gBAAA,EAAmB;IACjB,KAAK3K,SAAL,CAAea,YAAf,CAA4B,oBAA5B,EAAkD,EAAlD;EADiB;EAYnByJ,UAAUZ,IAAV,EAAgBkB,WAAhB,EAA6B;IAC3BlB,IAAA,CAAKmB,IAAL,GAAY,KAAKxL,WAAL,CAAiByL,kBAAjB,CAAoCF,WAApC,CAAZ;IACAlB,IAAA,CAAKqB,OAAL,GAAe,MAAM;MACnB,IAAIH,WAAJ,EAAiB;QACf,KAAKvL,WAAL,CAAiB2L,eAAjB,CAAiCJ,WAAjC;MADe;MAGjB,OAAO,KAAP;IAJmB,CAArB;IAMA,IAAIA,WAAA,IAAeA,WAAA,KAAsC,EAAzD,EAA6D;MAC3D,KAAK,CAAAD,eAAL;IAD2D;EARlC;EAqB7BZ,iBAAiBL,IAAjB,EAAuBjE,MAAvB,EAA+B;IAC7BiE,IAAA,CAAKmB,IAAL,GAAY,KAAKxL,WAAL,CAAiB4L,YAAjB,CAA8B,EAA9B,CAAZ;IACAvB,IAAA,CAAKqB,OAAL,GAAe,MAAM;MACnB,KAAK1L,WAAL,CAAiB6L,kBAAjB,CAAoCzF,MAApC;MACA,OAAO,KAAP;IAFmB,CAArB;IAIA,KAAK,CAAAkF,eAAL;EAN6B;EAe/B,CAAAV,eAAgBP,IAAhB,EAAsBM,UAAtB,EAAkCK,IAAA,GAAO,IAAzC,EAA+C;IAC7CX,IAAA,CAAKmB,IAAL,GAAY,KAAKxL,WAAL,CAAiB4L,YAAjB,CAA8B,EAA9B,CAAZ;IACAvB,IAAA,CAAKqB,OAAL,GAAe,MAAM;MACnB,KAAKzL,eAAL,EAAsB6L,kBAAtB,CACEnB,UAAA,CAAWoB,OADb,EAEEpB,UAAA,CAAWqB,QAFb,EAGEhB,IAHF;MAKA,OAAO,KAAP;IANmB,CAArB;IAQA,KAAK,CAAAM,eAAL;EAV6C;EAkB/C,CAAAP,gBAAiBV,IAAjB,EAAuBjE,MAAvB,EAA+B;IAC7BiE,IAAA,CAAKmB,IAAL,GAAY,KAAKxL,WAAL,CAAiB4L,YAAjB,CAA8B,EAA9B,CAAZ;IACAvB,IAAA,CAAKqB,OAAL,GAAe,MAAM;MACnB,KAAK1L,WAAL,CAAiBiM,kBAAjB,CAAoC7F,MAApC;MACA,OAAO,KAAP;IAFmB,CAArB;IAIA,KAAK,CAAAkF,eAAL;EAN6B;EAiB/BH,cAAcd,IAAd,EAAoB3N,IAApB,EAA0B;IACxB2N,IAAA,CAAKmB,IAAL,GAAY,KAAKxL,WAAL,CAAiB4L,YAAjB,CAA8B,EAA9B,CAAZ;IACA,MAAM1R,GAAA,GAAM,IAAIgS,GAAJ,CAAQ,CAClB,CAAC,QAAD,EAAW,SAAX,CADkB,EAElB,CAAC,UAAD,EAAa,WAAb,CAFkB,EAGlB,CAAC,YAAD,EAAe,aAAf,CAHkB,CAAR,CAAZ;IAKA,WAAWjG,IAAX,IAAmBC,MAAA,CAAOC,IAAP,CAAYzJ,IAAA,CAAKoJ,OAAjB,CAAnB,EAA8C;MAC5C,MAAM7B,MAAA,GAAS/J,GAAA,CAAIiS,GAAJ,CAAQlG,IAAR,CAAf;MACA,IAAI,CAAChC,MAAL,EAAa;QACX;MADW;MAGboG,IAAA,CAAKpG,MAAL,IAAe,MAAM;QACnB,KAAKjE,WAAL,CAAiBgK,QAAjB,EAA2BC,QAA3B,CAAoC,wBAApC,EAA8D;UAC5DC,MAAA,EAAQ,IADoD;UAE5D9F,MAAA,EAAQ;YACN3C,EAAA,EAAI/E,IAAA,CAAK+E,EADH;YAENwE;UAFM;QAFoD,CAA9D;QAOA,OAAO,KAAP;MARmB,CAArB;IAL4C;IAiB9C,IAAI,CAACoE,IAAA,CAAKqB,OAAV,EAAmB;MACjBrB,IAAA,CAAKqB,OAAL,GAAe,MAAM,KAArB;IADiB;IAGnB,KAAK,CAAAJ,eAAL;EA3BwB;EA8B1BD,qBAAqBhB,IAArB,EAA2Be,SAA3B,EAAsC;IACpC,MAAMgB,gBAAA,GAAmB/B,IAAA,CAAKqB,OAA9B;IACA,IAAI,CAACU,gBAAL,EAAuB;MACrB/B,IAAA,CAAKmB,IAAL,GAAY,KAAKxL,WAAL,CAAiB4L,YAAjB,CAA8B,EAA9B,CAAZ;IADqB;IAGvB,KAAK,CAAAN,eAAL;IAEA,IAAI,CAAC,KAAK9K,aAAV,EAAyB;MACvBjF,aAAA,CACG,2DAAD,GACE,uDAFJ;MAIA,IAAI,CAAC6Q,gBAAL,EAAuB;QACrB/B,IAAA,CAAKqB,OAAL,GAAe,MAAM,KAArB;MADqB;MAGvB;IARuB;IAWzBrB,IAAA,CAAKqB,OAAL,GAAe,MAAM;MACnBU,gBAAA;MAEA,MAAM;QACJ5D,MAAA,EAAQ6D,eADJ;QAEJC,IAAA,EAAMC,aAFF;QAGJC;MAHI,IAIFpB,SAJJ;MAMA,MAAMqB,SAAA,GAAY,EAAlB;MACA,IAAIJ,eAAA,CAAgBpF,MAAhB,KAA2B,CAA3B,IAAgCsF,aAAA,CAActF,MAAd,KAAyB,CAA7D,EAAgE;QAC9D,MAAMyF,QAAA,GAAW,IAAIC,GAAJ,CAAQJ,aAAR,CAAjB;QACA,WAAWK,SAAX,IAAwBP,eAAxB,EAAyC;UACvC,MAAM7D,MAAA,GAAS,KAAKhI,aAAL,CAAmBoM,SAAnB,KAAiC,EAAhD;UACA,WAAW;YAAEnL;UAAF,CAAX,IAAqB+G,MAArB,EAA6B;YAC3BkE,QAAA,CAAS1K,GAAT,CAAaP,EAAb;UAD2B;QAFU;QAMzC,WAAW+G,MAAX,IAAqBtC,MAAA,CAAO2G,MAAP,CAAc,KAAKrM,aAAnB,CAArB,EAAwD;UACtD,WAAWsM,KAAX,IAAoBtE,MAApB,EAA4B;YAC1B,IAAIkE,QAAA,CAAS5D,GAAT,CAAagE,KAAA,CAAMrL,EAAnB,MAA2B+K,OAA/B,EAAwC;cACtCC,SAAA,CAAU5E,IAAV,CAAeiF,KAAf;YADsC;UADd;QAD0B;MARM,CAAhE,MAeO;QACL,WAAWtE,MAAX,IAAqBtC,MAAA,CAAO2G,MAAP,CAAc,KAAKrM,aAAnB,CAArB,EAAwD;UACtDiM,SAAA,CAAU5E,IAAV,CAAe,GAAGW,MAAlB;QADsD;MADnD;MAMP,MAAMuE,OAAA,GAAU,KAAK1M,iBAArB;MACA,MAAM2M,MAAA,GAAS,EAAf;MACA,WAAWF,KAAX,IAAoBL,SAApB,EAA+B;QAC7B,MAAM;UAAEhL;QAAF,IAASqL,KAAf;QACAE,MAAA,CAAOnF,IAAP,CAAYpG,EAAZ;QACA,QAAQqL,KAAA,CAAMG,IAAd;UACE,KAAK,MAAL;YAAa;cACX,MAAMC,KAAA,GAAQJ,KAAA,CAAMK,YAAN,IAAsB,EAApC;cACAJ,OAAA,CAAQvI,QAAR,CAAiB/C,EAAjB,EAAqB;gBAAEyL;cAAF,CAArB;cACA;YAHW;UAKb,KAAK,UAAL;UACA,KAAK,aAAL;YAAoB;cAClB,MAAMA,KAAA,GAAQJ,KAAA,CAAMK,YAAN,KAAuBL,KAAA,CAAMpE,YAA3C;cACAqE,OAAA,CAAQvI,QAAR,CAAiB/C,EAAjB,EAAqB;gBAAEyL;cAAF,CAArB;cACA;YAHkB;UAKpB,KAAK,UAAL;UACA,KAAK,SAAL;YAAgB;cACd,MAAMA,KAAA,GAAQJ,KAAA,CAAMK,YAAN,IAAsB,EAApC;cACAJ,OAAA,CAAQvI,QAAR,CAAiB/C,EAAjB,EAAqB;gBAAEyL;cAAF,CAArB;cACA;YAHc;UAKhB;YACE;QAnBJ;QAsBA,MAAMtE,UAAA,GAAatH,QAAA,CAASuH,aAAT,CAAwB,qBAAoBpH,EAAG,IAA/C,CAAnB;QACA,IAAI,CAACmH,UAAL,EAAiB;UACf;QADe,CAAjB,MAEO,IAAI,CAAC5M,oBAAA,CAAqB8M,GAArB,CAAyBF,UAAzB,CAAL,EAA2C;UAChDrN,aAAA,CAAM,+CAA8CkG,EAA/C,EAAL;UACA;QAFgD;QAIlDmH,UAAA,CAAWwE,aAAX,CAAyB,IAAIC,KAAJ,CAAU,WAAV,CAAzB;MAhC6B;MAmC/B,IAAI,KAAK/M,eAAT,EAA0B;QAExB,KAAKN,WAAL,CAAiBgK,QAAjB,EAA2BC,QAA3B,CAAoC,wBAApC,EAA8D;UAC5DC,MAAA,EAAQ,IADoD;UAE5D9F,MAAA,EAAQ;YACN3C,EAAA,EAAI,KADE;YAEN6L,GAAA,EAAKN,MAFC;YAGN/G,IAAA,EAAM;UAHA;QAFoD,CAA9D;MAFwB;MAY1B,OAAO,KAAP;IAhFmB,CAArB;EAlBoC;AA9Kc;AAqRtD,MAAMlJ,qBAAN,SAAoC0C,iBAApC,CAAsD;EACpDE,YAAYnD,UAAZ,EAAwB;IACtB,MAAMA,UAAN,EAAkB;MAAEoD,YAAA,EAAc;IAAhB,CAAlB;EADsB;EAIxByI,OAAA,EAAS;IACP,KAAK1H,SAAL,CAAeoB,SAAf,CAAyBC,GAAzB,CAA6B,gBAA7B;IAEA,MAAMuL,KAAA,GAAQjM,QAAA,CAASC,aAAT,CAAuB,KAAvB,CAAd;IACAgM,KAAA,CAAMC,GAAN,GACE,KAAKtN,kBAAL,GACA,aADA,GAEA,KAAKxD,IAAL,CAAUuJ,IAAV,CAAewH,WAAf,EAFA,GAGA,MAJF;IAKAF,KAAA,CAAM/L,YAAN,CAAmB,cAAnB,EAAmC,4BAAnC;IACA+L,KAAA,CAAM/L,YAAN,CACE,gBADF,EAEEkM,IAAA,CAAKC,SAAL,CAAe;MAAEV,IAAA,EAAM,KAAKvQ,IAAL,CAAUuJ;IAAlB,CAAf,CAFF;IAKA,IAAI,CAAC,KAAKvJ,IAAL,CAAUmF,QAAX,IAAuB,KAAKV,YAAhC,EAA8C;MAC5C,KAAK4G,YAAL;IAD4C;IAI9C,KAAKpH,SAAL,CAAe8G,MAAf,CAAsB8F,KAAtB;IACA,OAAO,KAAK5M,SAAZ;EApBO;AAL2C;AA6BtD,MAAMjD,uBAAN,SAAsC+B,iBAAtC,CAAwD;EACtD4I,OAAA,EAAS;IAEP,IAAI,KAAK3L,IAAL,CAAUkR,eAAd,EAA+B;MAC7B,KAAKjN,SAAL,CAAewE,KAAf,GAAuB,KAAKzI,IAAL,CAAUkR,eAAjC;IAD6B;IAI/B,OAAO,KAAKjN,SAAZ;EANO;EASTkN,yBAAyBvH,OAAzB,EAAkC;IAChC,IAAI,KAAK5J,IAAL,CAAU6F,YAAd,EAA4B;MAC1B,IAAI+D,OAAA,CAAQwH,eAAR,EAAyBC,QAAzB,KAAsC,QAA1C,EAAoD;QAClDzH,OAAA,CAAQwH,eAAR,CAAwBpJ,MAAxB,GAAiC,IAAjC;MADkD;MAGpD4B,OAAA,CAAQ5B,MAAR,GAAiB,KAAjB;IAJ0B;EADI;EASlCsJ,gBAAgB7J,KAAhB,EAAuB;IACrB,OAAOjJ,gBAAA,CAAY+S,QAAZ,CAAqBC,KAArB,GAA6B/J,KAAA,CAAMgK,OAAnC,GAA6ChK,KAAA,CAAMiK,OAA1D;EADqB;EAIvBC,kBAAkB/H,OAAlB,EAA2BgI,WAA3B,EAAwCC,QAAxC,EAAkDC,SAAlD,EAA6DC,WAA7D,EAA0E;IACxE,IAAIF,QAAA,CAASG,QAAT,CAAkB,OAAlB,CAAJ,EAAgC;MAE9BpI,OAAA,CAAQyD,gBAAR,CAAyBwE,QAAzB,EAAmCpK,KAAA,IAAS;QAC1C,KAAKnE,WAAL,CAAiBgK,QAAjB,EAA2BC,QAA3B,CAAoC,wBAApC,EAA8D;UAC5DC,MAAA,EAAQ,IADoD;UAE5D9F,MAAA,EAAQ;YACN3C,EAAA,EAAI,KAAK/E,IAAL,CAAU+E,EADR;YAENwE,IAAA,EAAMuI,SAFA;YAGNtB,KAAA,EAAOuB,WAAA,CAAYtK,KAAZ,CAHD;YAINwK,KAAA,EAAOxK,KAAA,CAAMyK,QAJP;YAKNC,QAAA,EAAU,KAAKb,eAAL,CAAqB7J,KAArB;UALJ;QAFoD,CAA9D;MAD0C,CAA5C;IAF8B,CAAhC,MAcO;MAELmC,OAAA,CAAQyD,gBAAR,CAAyBwE,QAAzB,EAAmCpK,KAAA,IAAS;QAC1C,IAAIoK,QAAA,KAAa,MAAjB,EAAyB;UACvB,IAAI,CAACD,WAAA,CAAYQ,OAAb,IAAwB,CAAC3K,KAAA,CAAM4K,aAAnC,EAAkD;YAChD;UADgD;UAGlDT,WAAA,CAAYQ,OAAZ,GAAsB,KAAtB;QAJuB,CAAzB,MAKO,IAAIP,QAAA,KAAa,OAAjB,EAA0B;UAC/B,IAAID,WAAA,CAAYQ,OAAhB,EAAyB;YACvB;UADuB;UAGzBR,WAAA,CAAYQ,OAAZ,GAAsB,IAAtB;QAJ+B;QAOjC,IAAI,CAACL,WAAL,EAAkB;UAChB;QADgB;QAIlB,KAAKzO,WAAL,CAAiBgK,QAAjB,EAA2BC,QAA3B,CAAoC,wBAApC,EAA8D;UAC5DC,MAAA,EAAQ,IADoD;UAE5D9F,MAAA,EAAQ;YACN3C,EAAA,EAAI,KAAK/E,IAAL,CAAU+E,EADR;YAENwE,IAAA,EAAMuI,SAFA;YAGNtB,KAAA,EAAOuB,WAAA,CAAYtK,KAAZ;UAHD;QAFoD,CAA9D;MAjB0C,CAA5C;IAFK;EAfiE;EA8C1E6K,mBAAmB1I,OAAnB,EAA4BgI,WAA5B,EAAyCW,KAAzC,EAAgDC,MAAhD,EAAwD;IACtD,WAAW,CAACX,QAAD,EAAWC,SAAX,CAAX,IAAoCS,KAApC,EAA2C;MACzC,IAAIT,SAAA,KAAc,QAAd,IAA0B,KAAK9R,IAAL,CAAUoJ,OAAV,GAAoB0I,SAApB,CAA9B,EAA8D;QAC5D,IAAIA,SAAA,KAAc,OAAd,IAAyBA,SAAA,KAAc,MAA3C,EAAmD;UACjDF,WAAA,KAAgB;YAAEQ,OAAA,EAAS;UAAX,CAAhB;QADiD;QAGnD,KAAKT,iBAAL,CACE/H,OADF,EAEEgI,WAFF,EAGEC,QAHF,EAIEC,SAJF,EAKEU,MALF;QAOA,IAAIV,SAAA,KAAc,OAAd,IAAyB,CAAC,KAAK9R,IAAL,CAAUoJ,OAAV,EAAmBqJ,IAAjD,EAAuD;UAErD,KAAKd,iBAAL,CAAuB/H,OAAvB,EAAgCgI,WAAhC,EAA6C,MAA7C,EAAqD,MAArD,EAA6D,IAA7D;QAFqD,CAAvD,MAGO,IAAIE,SAAA,KAAc,MAAd,IAAwB,CAAC,KAAK9R,IAAL,CAAUoJ,OAAV,EAAmBsJ,KAAhD,EAAuD;UAC5D,KAAKf,iBAAL,CAAuB/H,OAAvB,EAAgCgI,WAAhC,EAA6C,OAA7C,EAAsD,OAAtD,EAA+D,IAA/D;QAD4D;MAdF;IADrB;EADW;EAuBxDe,oBAAoB/I,OAApB,EAA6B;IAC3B,MAAMrM,KAAA,GAAQ,KAAKyC,IAAL,CAAU4S,eAAV,IAA6B,IAA3C;IACAhJ,OAAA,CAAQ3E,KAAR,CAAc2N,eAAd,GACErV,KAAA,KAAU,IAAV,GACI,aADJ,GAEIqB,SAAA,CAAKmI,YAAL,CAAkBxJ,KAAA,CAAM,CAAN,CAAlB,EAA4BA,KAAA,CAAM,CAAN,CAA5B,EAAsCA,KAAA,CAAM,CAAN,CAAtC,CAHN;EAF2B;EAe7BsV,cAAcjJ,OAAd,EAAuB;IACrB,MAAMkJ,cAAA,GAAiB,CAAC,MAAD,EAAS,QAAT,EAAmB,OAAnB,CAAvB;IACA,MAAM;MAAEC;IAAF,IAAgB,KAAK/S,IAAL,CAAUgT,qBAAhC;IACA,MAAMC,QAAA,GACJ,KAAKjT,IAAL,CAAUgT,qBAAV,CAAgCC,QAAhC,IAA4C5T,iBAD9C;IAGA,MAAM4F,KAAA,GAAQ2E,OAAA,CAAQ3E,KAAtB;IAWA,IAAIiO,gBAAJ;IACA,MAAMC,WAAA,GAAc,CAApB;IACA,MAAMC,iBAAA,GAAoB9W,CAAA,IAAKP,IAAA,CAAKsX,KAAL,CAAW,KAAK/W,CAAhB,IAAqB,EAApD;IACA,IAAI,KAAK0D,IAAL,CAAUsT,SAAd,EAAyB;MACvB,MAAM3T,MAAA,GAAS5D,IAAA,CAAKwX,GAAL,CACb,KAAKvT,IAAL,CAAUP,IAAV,CAAe,CAAf,IAAoB,KAAKO,IAAL,CAAUP,IAAV,CAAe,CAAf,CAApB,GAAwC0T,WAD3B,CAAf;MAGA,MAAMK,aAAA,GAAgBzX,IAAA,CAAKsX,KAAL,CAAW1T,MAAA,IAAUlB,gBAAA,GAAcwU,QAAd,CAArB,KAAiD,CAAvE;MACA,MAAMQ,UAAA,GAAa9T,MAAA,GAAS6T,aAA5B;MACAN,gBAAA,GAAmBnX,IAAA,CAAKG,GAAL,CACjB+W,QADiB,EAEjBG,iBAAA,CAAkBK,UAAA,GAAahV,gBAA/B,CAFiB,CAAnB;IANuB,CAAzB,MAUO;MACL,MAAMkB,MAAA,GAAS5D,IAAA,CAAKwX,GAAL,CACb,KAAKvT,IAAL,CAAUP,IAAV,CAAe,CAAf,IAAoB,KAAKO,IAAL,CAAUP,IAAV,CAAe,CAAf,CAApB,GAAwC0T,WAD3B,CAAf;MAGAD,gBAAA,GAAmBnX,IAAA,CAAKG,GAAL,CACjB+W,QADiB,EAEjBG,iBAAA,CAAkBzT,MAAA,GAASlB,gBAA3B,CAFiB,CAAnB;IAJK;IASPwG,KAAA,CAAMgO,QAAN,GAAkB,QAAOC,gBAAiB,2BAA1C;IAEAjO,KAAA,CAAM1H,KAAN,GAAcqB,SAAA,CAAKmI,YAAL,CAAkBgM,SAAA,CAAU,CAAV,CAAlB,EAAgCA,SAAA,CAAU,CAAV,CAAhC,EAA8CA,SAAA,CAAU,CAAV,CAA9C,CAAd;IAEA,IAAI,KAAK/S,IAAL,CAAU0T,aAAV,KAA4B,IAAhC,EAAsC;MACpCzO,KAAA,CAAM0O,SAAN,GAAkBb,cAAA,CAAe,KAAK9S,IAAL,CAAU0T,aAAzB,CAAlB;IADoC;EA3CjB;EAgDvB7K,aAAae,OAAb,EAAsBgK,UAAtB,EAAkC;IAChC,IAAIA,UAAJ,EAAgB;MACdhK,OAAA,CAAQ9E,YAAR,CAAqB,UAArB,EAAiC,IAAjC;IADc,CAAhB,MAEO;MACL8E,OAAA,CAAQiK,eAAR,CAAwB,UAAxB;IADK;IAGPjK,OAAA,CAAQ9E,YAAR,CAAqB,eAArB,EAAsC8O,UAAtC;EANgC;AA3JoB;AAqKxD,MAAMpT,2BAAN,SAA0CQ,uBAA1C,CAAkE;EAChEiC,YAAYnD,UAAZ,EAAwB;IACtB,MAAMoD,YAAA,GACJpD,UAAA,CAAW2D,WAAX,IACA3D,UAAA,CAAWE,IAAX,CAAgB6F,YADhB,IAEC,CAAC/F,UAAA,CAAWE,IAAX,CAAgB8T,aAAjB,IAAkC,CAAC,CAAChU,UAAA,CAAWE,IAAX,CAAgB+T,UAHvD;IAIA,MAAMjU,UAAN,EAAkB;MAAEoD;IAAF,CAAlB;EALsB;EAQxB8Q,sBAAsBC,IAAtB,EAA4BC,GAA5B,EAAiC1D,KAAjC,EAAwC2D,YAAxC,EAAsD;IACpD,MAAM9D,OAAA,GAAU,KAAK1M,iBAArB;IACA,WAAWiG,OAAX,IAAsB,KAAKgC,kBAAL,CACpBqI,IAAA,CAAK1K,IADe,EAEL0K,IAAA,CAAKlP,EAFA,CAAtB,EAGG;MACD,IAAI6E,OAAA,CAAQsC,UAAZ,EAAwB;QACtBtC,OAAA,CAAQsC,UAAR,CAAmBgI,GAAnB,IAA0B1D,KAA1B;MADsB;MAGxBH,OAAA,CAAQvI,QAAR,CAAiB8B,OAAA,CAAQ7E,EAAzB,EAA6B;QAAE,CAACoP,YAAD,GAAgB3D;MAAlB,CAA7B;IAJC;EALiD;EAatD7E,OAAA,EAAS;IACP,MAAM0E,OAAA,GAAU,KAAK1M,iBAArB;IACA,MAAMoB,EAAA,GAAK,KAAK/E,IAAL,CAAU+E,EAArB;IAEA,KAAKd,SAAL,CAAeoB,SAAf,CAAyBC,GAAzB,CAA6B,sBAA7B;IAEA,IAAIsE,OAAA,GAAU,IAAd;IACA,IAAI,KAAKnG,WAAT,EAAsB;MAIpB,MAAMoG,UAAA,GAAawG,OAAA,CAAQ+D,QAAR,CAAiBrP,EAAjB,EAAqB;QACtCyL,KAAA,EAAO,KAAKxQ,IAAL,CAAU+T;MADqB,CAArB,CAAnB;MAGA,IAAIM,WAAA,GAAcxK,UAAA,CAAW2G,KAAX,IAAoB,EAAtC;MACA,MAAM8D,MAAA,GAASjE,OAAA,CAAQ+D,QAAR,CAAiBrP,EAAjB,EAAqB;QAClCwP,SAAA,EAAW,KAAKvU,IAAL,CAAUsU;MADa,CAArB,EAEZC,SAFH;MAGA,IAAID,MAAA,IAAUD,WAAA,CAAY9J,MAAZ,GAAqB+J,MAAnC,EAA2C;QACzCD,WAAA,GAAcA,WAAA,CAAYnW,KAAZ,CAAkB,CAAlB,EAAqBoW,MAArB,CAAd;MADyC;MAI3C,IAAIE,oBAAA,GACF3K,UAAA,CAAW4K,cAAX,IAA6B,KAAKzU,IAAL,CAAUqU,WAAV,EAAuB3W,IAAvB,CAA4B,IAA5B,CAA7B,IAAkE,IADpE;MAEA,IAAI8W,oBAAA,IAAwB,KAAKxU,IAAL,CAAU0U,IAAtC,EAA4C;QAC1CF,oBAAA,GAAuBA,oBAAA,CAAqBG,UAArB,CAAgC,MAAhC,EAAwC,EAAxC,CAAvB;MAD0C;MAI5C,MAAM/C,WAAA,GAAc;QAClBgD,SAAA,EAAWP,WADO;QAElBI,cAAA,EAAgBD,oBAFE;QAGlBK,kBAAA,EAAoB,IAHF;QAIlBC,SAAA,EAAW,CAJO;QAKlB1C,OAAA,EAAS;MALS,CAApB;MAQA,IAAI,KAAKpS,IAAL,CAAUsT,SAAd,EAAyB;QACvB1J,OAAA,GAAUhF,QAAA,CAASC,aAAT,CAAuB,UAAvB,CAAV;QACA+E,OAAA,CAAQyK,WAAR,GAAsBG,oBAAA,IAAwBH,WAA9C;QACA,IAAI,KAAKrU,IAAL,CAAU+U,WAAd,EAA2B;UACzBnL,OAAA,CAAQ3E,KAAR,CAAc+P,SAAd,GAA0B,QAA1B;QADyB;MAHJ,CAAzB,MAMO;QACLpL,OAAA,GAAUhF,QAAA,CAASC,aAAT,CAAuB,OAAvB,CAAV;QACA+E,OAAA,CAAQ2G,IAAR,GAAe,MAAf;QACA3G,OAAA,CAAQ9E,YAAR,CAAqB,OAArB,EAA8B0P,oBAAA,IAAwBH,WAAtD;QACA,IAAI,KAAKrU,IAAL,CAAU+U,WAAd,EAA2B;UACzBnL,OAAA,CAAQ3E,KAAR,CAAcgQ,SAAd,GAA0B,QAA1B;QADyB;MAJtB;MAQP,IAAI,KAAKjV,IAAL,CAAU6F,YAAd,EAA4B;QAC1B+D,OAAA,CAAQ5B,MAAR,GAAiB,IAAjB;MAD0B;MAG5B1I,oBAAA,CAAqBgG,GAArB,CAAyBsE,OAAzB;MACAA,OAAA,CAAQ9E,YAAR,CAAqB,iBAArB,EAAwCC,EAAxC;MAEA6E,OAAA,CAAQjB,QAAR,GAAmB,KAAK3I,IAAL,CAAUkV,QAA7B;MACAtL,OAAA,CAAQL,IAAR,GAAe,KAAKvJ,IAAL,CAAUkQ,SAAzB;MACAtG,OAAA,CAAQ5E,QAAR,GAAmB5F,iBAAnB;MAEA,KAAKyJ,YAAL,CAAkBe,OAAlB,EAA2B,KAAK5J,IAAL,CAAU4I,QAArC;MAEA,IAAI0L,MAAJ,EAAY;QACV1K,OAAA,CAAQuL,SAAR,GAAoBb,MAApB;MADU;MAIZ1K,OAAA,CAAQyD,gBAAR,CAAyB,OAAzB,EAAkC5F,KAAA,IAAS;QACzC4I,OAAA,CAAQvI,QAAR,CAAiB/C,EAAjB,EAAqB;UAAEyL,KAAA,EAAO/I,KAAA,CAAMI,MAAN,CAAa2I;QAAtB,CAArB;QACA,KAAKwD,qBAAL,CACEpK,OADF,EAEE,OAFF,EAGEnC,KAAA,CAAMI,MAAN,CAAa2I,KAHf,EAIE,OAJF;QAMAoB,WAAA,CAAY6C,cAAZ,GAA6B,IAA7B;MARyC,CAA3C;MAWA7K,OAAA,CAAQyD,gBAAR,CAAyB,WAAzB,EAAsC5F,KAAA,IAAS;QAC7C,MAAMgJ,YAAA,GAAe,KAAKzQ,IAAL,CAAUoV,iBAAV,IAA+B,EAApD;QACAxL,OAAA,CAAQ4G,KAAR,GAAgBoB,WAAA,CAAYgD,SAAZ,GAAwBnE,YAAxC;QACAmB,WAAA,CAAY6C,cAAZ,GAA6B,IAA7B;MAH6C,CAA/C;MAMA,IAAIY,YAAA,GAAe5N,KAAA,IAAS;QAC1B,MAAM;UAAEgN;QAAF,IAAqB7C,WAA3B;QACA,IAAI6C,cAAA,KAAmB,IAAnB,IAA2BA,cAAA,KAAmBa,SAAlD,EAA6D;UAC3D7N,KAAA,CAAMI,MAAN,CAAa2I,KAAb,GAAqBiE,cAArB;QAD2D;QAI7DhN,KAAA,CAAMI,MAAN,CAAa0N,UAAb,GAA0B,CAA1B;MAN0B,CAA5B;MASA,IAAI,KAAK3R,eAAL,IAAwB,KAAKC,YAAjC,EAA+C;QAC7C+F,OAAA,CAAQyD,gBAAR,CAAyB,OAAzB,EAAkC5F,KAAA,IAAS;UACzC,IAAImK,WAAA,CAAYQ,OAAhB,EAAyB;YACvB;UADuB;UAGzB,MAAM;YAAEvK;UAAF,IAAaJ,KAAnB;UACA,IAAImK,WAAA,CAAYgD,SAAhB,EAA2B;YACzB/M,MAAA,CAAO2I,KAAP,GAAeoB,WAAA,CAAYgD,SAA3B;UADyB;UAG3BhD,WAAA,CAAYiD,kBAAZ,GAAiChN,MAAA,CAAO2I,KAAxC;UACAoB,WAAA,CAAYkD,SAAZ,GAAwB,CAAxB;UACAlD,WAAA,CAAYQ,OAAZ,GAAsB,IAAtB;QAVyC,CAA3C;QAaAxI,OAAA,CAAQyD,gBAAR,CAAyB,mBAAzB,EAA8ChE,OAAA,IAAW;UACvD,KAAK8H,wBAAL,CAA8B9H,OAAA,CAAQxB,MAAtC;UACA,MAAMuB,OAAA,GAAU;YACdoH,MAAM/I,KAAN,EAAa;cACXmK,WAAA,CAAYgD,SAAZ,GAAwBnN,KAAA,CAAMC,MAAN,CAAa8I,KAAb,IAAsB,EAA9C;cACAH,OAAA,CAAQvI,QAAR,CAAiB/C,EAAjB,EAAqB;gBAAEyL,KAAA,EAAOoB,WAAA,CAAYgD,SAAZ,CAAsBzY,QAAtB;cAAT,CAArB;cACAsL,KAAA,CAAMI,MAAN,CAAa2I,KAAb,GAAqBoB,WAAA,CAAYgD,SAAjC;YAHW,CADC;YAMdH,eAAehN,KAAf,EAAsB;cACpB,MAAM;gBAAEgN;cAAF,IAAqBhN,KAAA,CAAMC,MAAjC;cACAkK,WAAA,CAAY6C,cAAZ,GAA6BA,cAA7B;cACA,IACEA,cAAA,KAAmB,IAAnB,IACAA,cAAA,KAAmBa,SADnB,IAEA7N,KAAA,CAAMI,MAAN,KAAiBjD,QAAA,CAAS4Q,aAH5B,EAIE;gBAEA/N,KAAA,CAAMI,MAAN,CAAa2I,KAAb,GAAqBiE,cAArB;cAFA;cAIFpE,OAAA,CAAQvI,QAAR,CAAiB/C,EAAjB,EAAqB;gBACnB0P;cADmB,CAArB;YAXoB,CANR;YAqBdgB,SAAShO,KAAT,EAAgB;cACdA,KAAA,CAAMI,MAAN,CAAa6N,iBAAb,CAA+B,GAAGjO,KAAA,CAAMC,MAAN,CAAa+N,QAA/C;YADc,CArBF;YAwBdlB,SAAA,EAAW9M,KAAA,IAAS;cAClB,MAAM;gBAAE8M;cAAF,IAAgB9M,KAAA,CAAMC,MAA5B;cACA,MAAM;gBAAEG;cAAF,IAAaJ,KAAnB;cACA,IAAI8M,SAAA,KAAc,CAAlB,EAAqB;gBACnB1M,MAAA,CAAOgM,eAAP,CAAuB,WAAvB;gBACA;cAFmB;cAKrBhM,MAAA,CAAO/C,YAAP,CAAoB,WAApB,EAAiCyP,SAAjC;cACA,IAAI/D,KAAA,GAAQoB,WAAA,CAAYgD,SAAxB;cACA,IAAI,CAACpE,KAAD,IAAUA,KAAA,CAAMjG,MAAN,IAAgBgK,SAA9B,EAAyC;gBACvC;cADuC;cAGzC/D,KAAA,GAAQA,KAAA,CAAMtS,KAAN,CAAY,CAAZ,EAAeqW,SAAf,CAAR;cACA1M,MAAA,CAAO2I,KAAP,GAAeoB,WAAA,CAAYgD,SAAZ,GAAwBpE,KAAvC;cACAH,OAAA,CAAQvI,QAAR,CAAiB/C,EAAjB,EAAqB;gBAAEyL;cAAF,CAArB;cAEA,KAAKlN,WAAL,CAAiBgK,QAAjB,EAA2BC,QAA3B,CAAoC,wBAApC,EAA8D;gBAC5DC,MAAA,EAAQ,IADoD;gBAE5D9F,MAAA,EAAQ;kBACN3C,EADM;kBAENwE,IAAA,EAAM,WAFA;kBAGNiH,KAHM;kBAINmF,UAAA,EAAY,IAJN;kBAKNb,SAAA,EAAW,CALL;kBAMNc,QAAA,EAAU/N,MAAA,CAAOgO,cANX;kBAONC,MAAA,EAAQjO,MAAA,CAAOkO;gBAPT;cAFoD,CAA9D;YAjBkB;UAxBN,CAAhB;UAuDA,KAAK5M,yBAAL,CAA+BC,OAA/B,EAAwCC,OAAxC;QAzDuD,CAAzD;QA8DAO,OAAA,CAAQyD,gBAAR,CAAyB,SAAzB,EAAoC5F,KAAA,IAAS;UAC3CmK,WAAA,CAAYkD,SAAZ,GAAwB,CAAxB;UAGA,IAAIA,SAAA,GAAY,CAAC,CAAjB;UACA,IAAIrN,KAAA,CAAMyM,GAAN,KAAc,QAAlB,EAA4B;YAC1BY,SAAA,GAAY,CAAZ;UAD0B,CAA5B,MAEO,IAAIrN,KAAA,CAAMyM,GAAN,KAAc,OAAd,IAAyB,CAAC,KAAKlU,IAAL,CAAUsT,SAAxC,EAAmD;YAIxDwB,SAAA,GAAY,CAAZ;UAJwD,CAAnD,MAKA,IAAIrN,KAAA,CAAMyM,GAAN,KAAc,KAAlB,EAAyB;YAC9BtC,WAAA,CAAYkD,SAAZ,GAAwB,CAAxB;UAD8B;UAGhC,IAAIA,SAAA,KAAc,CAAC,CAAnB,EAAsB;YACpB;UADoB;UAGtB,MAAM;YAAEtE;UAAF,IAAY/I,KAAA,CAAMI,MAAxB;UACA,IAAI+J,WAAA,CAAYiD,kBAAZ,KAAmCrE,KAAvC,EAA8C;YAC5C;UAD4C;UAG9CoB,WAAA,CAAYiD,kBAAZ,GAAiCrE,KAAjC;UAEAoB,WAAA,CAAYgD,SAAZ,GAAwBpE,KAAxB;UACA,KAAKlN,WAAL,CAAiBgK,QAAjB,EAA2BC,QAA3B,CAAoC,wBAApC,EAA8D;YAC5DC,MAAA,EAAQ,IADoD;YAE5D9F,MAAA,EAAQ;cACN3C,EADM;cAENwE,IAAA,EAAM,WAFA;cAGNiH,KAHM;cAINmF,UAAA,EAAY,IAJN;cAKNb,SALM;cAMNc,QAAA,EAAUnO,KAAA,CAAMI,MAAN,CAAagO,cANjB;cAONC,MAAA,EAAQrO,KAAA,CAAMI,MAAN,CAAakO;YAPf;UAFoD,CAA9D;QAzB2C,CAA7C;QAsCA,MAAMC,aAAA,GAAgBX,YAAtB;QACAA,YAAA,GAAe,IAAf;QACAzL,OAAA,CAAQyD,gBAAR,CAAyB,MAAzB,EAAiC5F,KAAA,IAAS;UACxC,IAAI,CAACmK,WAAA,CAAYQ,OAAb,IAAwB,CAAC3K,KAAA,CAAM4K,aAAnC,EAAkD;YAChD;UADgD;UAGlDT,WAAA,CAAYQ,OAAZ,GAAsB,KAAtB;UACA,MAAM;YAAE5B;UAAF,IAAY/I,KAAA,CAAMI,MAAxB;UACA+J,WAAA,CAAYgD,SAAZ,GAAwBpE,KAAxB;UACA,IAAIoB,WAAA,CAAYiD,kBAAZ,KAAmCrE,KAAvC,EAA8C;YAC5C,KAAKlN,WAAL,CAAiBgK,QAAjB,EAA2BC,QAA3B,CAAoC,wBAApC,EAA8D;cAC5DC,MAAA,EAAQ,IADoD;cAE5D9F,MAAA,EAAQ;gBACN3C,EADM;gBAENwE,IAAA,EAAM,WAFA;gBAGNiH,KAHM;gBAINmF,UAAA,EAAY,IAJN;gBAKNb,SAAA,EAAWlD,WAAA,CAAYkD,SALjB;gBAMNc,QAAA,EAAUnO,KAAA,CAAMI,MAAN,CAAagO,cANjB;gBAONC,MAAA,EAAQrO,KAAA,CAAMI,MAAN,CAAakO;cAPf;YAFoD,CAA9D;UAD4C;UAc9CC,aAAA,CAAcvO,KAAd;QArBwC,CAA1C;QAwBA,IAAI,KAAKzH,IAAL,CAAUoJ,OAAV,EAAmB6M,SAAvB,EAAkC;UAChCrM,OAAA,CAAQyD,gBAAR,CAAyB,aAAzB,EAAwC5F,KAAA,IAAS;YAC/CmK,WAAA,CAAYiD,kBAAZ,GAAiC,IAAjC;YACA,MAAM;cAAE7U,IAAF;cAAQ6H;YAAR,IAAmBJ,KAAzB;YACA,MAAM;cAAE+I,KAAF;cAASqF,cAAT;cAAyBE;YAAzB,IAA0ClO,MAAhD;YAEA,IAAI+N,QAAA,GAAWC,cAAf;cACEC,MAAA,GAASC,YADX;YAGA,QAAQtO,KAAA,CAAMyO,SAAd;cAEE,KAAK,oBAAL;gBAA2B;kBACzB,MAAMC,KAAA,GAAQ3F,KAAA,CACX4F,SADW,CACD,CADC,EACEP,cADF,EAEXM,KAFW,CAEL,YAFK,CAAd;kBAGA,IAAIA,KAAJ,EAAW;oBACTP,QAAA,IAAYO,KAAA,CAAM,CAAN,EAAS5L,MAArB;kBADS;kBAGX;gBAPyB;cAS3B,KAAK,mBAAL;gBAA0B;kBACxB,MAAM4L,KAAA,GAAQ3F,KAAA,CACX4F,SADW,CACDP,cADC,EAEXM,KAFW,CAEL,YAFK,CAAd;kBAGA,IAAIA,KAAJ,EAAW;oBACTL,MAAA,IAAUK,KAAA,CAAM,CAAN,EAAS5L,MAAnB;kBADS;kBAGX;gBAPwB;cAS1B,KAAK,uBAAL;gBACE,IAAIsL,cAAA,KAAmBE,YAAvB,EAAqC;kBACnCH,QAAA,IAAY,CAAZ;gBADmC;gBAGrC;cACF,KAAK,sBAAL;gBACE,IAAIC,cAAA,KAAmBE,YAAvB,EAAqC;kBACnCD,MAAA,IAAU,CAAV;gBADmC;gBAGrC;YA7BJ;YAiCArO,KAAA,CAAM4O,cAAN;YACA,KAAK/S,WAAL,CAAiBgK,QAAjB,EAA2BC,QAA3B,CAAoC,wBAApC,EAA8D;cAC5DC,MAAA,EAAQ,IADoD;cAE5D9F,MAAA,EAAQ;gBACN3C,EADM;gBAENwE,IAAA,EAAM,WAFA;gBAGNiH,KAHM;gBAIN8F,MAAA,EAAQtW,IAAA,IAAQ,EAJV;gBAKN2V,UAAA,EAAY,KALN;gBAMNC,QANM;gBAONE;cAPM;YAFoD,CAA9D;UA1C+C,CAAjD;QADgC;QA0DlC,KAAKxD,kBAAL,CACE1I,OADF,EAEEgI,WAFF,EAGE,CACE,CAAC,OAAD,EAAU,OAAV,CADF,EAEE,CAAC,MAAD,EAAS,MAAT,CAFF,EAGE,CAAC,WAAD,EAAc,YAAd,CAHF,EAIE,CAAC,YAAD,EAAe,aAAf,CAJF,EAKE,CAAC,YAAD,EAAe,YAAf,CALF,EAME,CAAC,SAAD,EAAY,UAAZ,CANF,CAHF,EAWEnK,KAAA,IAASA,KAAA,CAAMI,MAAN,CAAa2I,KAXxB;MAtM6C;MAqN/C,IAAI6E,YAAJ,EAAkB;QAChBzL,OAAA,CAAQyD,gBAAR,CAAyB,MAAzB,EAAiCgI,YAAjC;MADgB;MAIlB,IAAI,KAAKrV,IAAL,CAAU0U,IAAd,EAAoB;QAClB,MAAM6B,UAAA,GAAa,KAAKvW,IAAL,CAAUP,IAAV,CAAe,CAAf,IAAoB,KAAKO,IAAL,CAAUP,IAAV,CAAe,CAAf,CAAvC;QACA,MAAM+W,SAAA,GAAYD,UAAA,GAAajC,MAA/B;QAEA1K,OAAA,CAAQvE,SAAR,CAAkBC,GAAlB,CAAsB,MAAtB;QACAsE,OAAA,CAAQ3E,KAAR,CAAcwR,aAAd,GAA+B,QAAOD,SAAU,iCAAhD;MALkB;IA9SA,CAAtB,MAqTO;MACL5M,OAAA,GAAUhF,QAAA,CAASC,aAAT,CAAuB,KAAvB,CAAV;MACA+E,OAAA,CAAQyK,WAAR,GAAsB,KAAKrU,IAAL,CAAU+T,UAAhC;MACAnK,OAAA,CAAQ3E,KAAR,CAAcyR,aAAd,GAA8B,QAA9B;MACA9M,OAAA,CAAQ3E,KAAR,CAAc8C,OAAd,GAAwB,YAAxB;MAEA,IAAI,KAAK/H,IAAL,CAAU6F,YAAd,EAA4B;QAC1B+D,OAAA,CAAQ5B,MAAR,GAAiB,IAAjB;MAD0B;IANvB;IAWP,KAAK6K,aAAL,CAAmBjJ,OAAnB;IACA,KAAK+I,mBAAL,CAAyB/I,OAAzB;IACA,KAAKD,2BAAL,CAAiCC,OAAjC;IAEA,KAAK3F,SAAL,CAAe8G,MAAf,CAAsBnB,OAAtB;IACA,OAAO,KAAK3F,SAAZ;EA5UO;AAtBuD;AAsWlE,MAAMlD,gCAAN,SAA+CC,uBAA/C,CAAuE;EACrEiC,YAAYnD,UAAZ,EAAwB;IACtB,MAAMA,UAAN,EAAkB;MAAEoD,YAAA,EAAc,CAAC,CAACpD,UAAA,CAAWE,IAAX,CAAgB6F;IAAlC,CAAlB;EADsB;AAD6C;AAMvE,MAAMjF,+BAAN,SAA8CI,uBAA9C,CAAsE;EACpEiC,YAAYnD,UAAZ,EAAwB;IACtB,MAAMA,UAAN,EAAkB;MAAEoD,YAAA,EAAcpD,UAAA,CAAW2D;IAA3B,CAAlB;EADsB;EAIxBkI,OAAA,EAAS;IACP,MAAM0E,OAAA,GAAU,KAAK1M,iBAArB;IACA,MAAM3D,IAAA,GAAO,KAAKA,IAAlB;IACA,MAAM+E,EAAA,GAAK/E,IAAA,CAAK+E,EAAhB;IACA,IAAIyL,KAAA,GAAQH,OAAA,CAAQ+D,QAAR,CAAiBrP,EAAjB,EAAqB;MAC/ByL,KAAA,EAAOxQ,IAAA,CAAKiM,WAAL,KAAqBjM,IAAA,CAAK+T;IADF,CAArB,EAETvD,KAFH;IAGA,IAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;MAE7BA,KAAA,GAAQA,KAAA,KAAU,KAAlB;MACAH,OAAA,CAAQvI,QAAR,CAAiB/C,EAAjB,EAAqB;QAAEyL;MAAF,CAArB;IAH6B;IAM/B,KAAKvM,SAAL,CAAeoB,SAAf,CAAyBC,GAAzB,CAA6B,wBAA7B,EAAuD,UAAvD;IAEA,MAAMsE,OAAA,GAAUhF,QAAA,CAASC,aAAT,CAAuB,OAAvB,CAAhB;IACAvF,oBAAA,CAAqBgG,GAArB,CAAyBsE,OAAzB;IACAA,OAAA,CAAQ9E,YAAR,CAAqB,iBAArB,EAAwCC,EAAxC;IAEA6E,OAAA,CAAQjB,QAAR,GAAmB3I,IAAA,CAAKkV,QAAxB;IACA,KAAKrM,YAAL,CAAkBe,OAAlB,EAA2B,KAAK5J,IAAL,CAAU4I,QAArC;IACAgB,OAAA,CAAQ2G,IAAR,GAAe,UAAf;IACA3G,OAAA,CAAQL,IAAR,GAAevJ,IAAA,CAAKkQ,SAApB;IACA,IAAIM,KAAJ,EAAW;MACT5G,OAAA,CAAQ9E,YAAR,CAAqB,SAArB,EAAgC,IAAhC;IADS;IAGX8E,OAAA,CAAQ9E,YAAR,CAAqB,aAArB,EAAoC9E,IAAA,CAAKiM,WAAzC;IACArC,OAAA,CAAQ5E,QAAR,GAAmB5F,iBAAnB;IAEAwK,OAAA,CAAQyD,gBAAR,CAAyB,QAAzB,EAAmC5F,KAAA,IAAS;MAC1C,MAAM;QAAE8B,IAAF;QAAQoN;MAAR,IAAoBlP,KAAA,CAAMI,MAAhC;MACA,WAAW+O,QAAX,IAAuB,KAAKhL,kBAAL,CAAwBrC,IAAxB,EAA6CxE,EAA7C,CAAvB,EAAyE;QACvE,MAAM8R,UAAA,GAAaF,OAAA,IAAWC,QAAA,CAAS3K,WAAT,KAAyBjM,IAAA,CAAKiM,WAA5D;QACA,IAAI2K,QAAA,CAAS1K,UAAb,EAAyB;UACvB0K,QAAA,CAAS1K,UAAT,CAAoByK,OAApB,GAA8BE,UAA9B;QADuB;QAGzBxG,OAAA,CAAQvI,QAAR,CAAiB8O,QAAA,CAAS7R,EAA1B,EAA8B;UAAEyL,KAAA,EAAOqG;QAAT,CAA9B;MALuE;MAOzExG,OAAA,CAAQvI,QAAR,CAAiB/C,EAAjB,EAAqB;QAAEyL,KAAA,EAAOmG;MAAT,CAArB;IAT0C,CAA5C;IAYA/M,OAAA,CAAQyD,gBAAR,CAAyB,WAAzB,EAAsC5F,KAAA,IAAS;MAC7C,MAAMgJ,YAAA,GAAezQ,IAAA,CAAKoV,iBAAL,IAA0B,KAA/C;MACA3N,KAAA,CAAMI,MAAN,CAAa8O,OAAb,GAAuBlG,YAAA,KAAiBzQ,IAAA,CAAKiM,WAA7C;IAF6C,CAA/C;IAKA,IAAI,KAAKrI,eAAL,IAAwB,KAAKC,YAAjC,EAA+C;MAC7C+F,OAAA,CAAQyD,gBAAR,CAAyB,mBAAzB,EAA8ChE,OAAA,IAAW;QACvD,MAAMD,OAAA,GAAU;UACdoH,MAAM/I,KAAN,EAAa;YACXA,KAAA,CAAMI,MAAN,CAAa8O,OAAb,GAAuBlP,KAAA,CAAMC,MAAN,CAAa8I,KAAb,KAAuB,KAA9C;YACAH,OAAA,CAAQvI,QAAR,CAAiB/C,EAAjB,EAAqB;cAAEyL,KAAA,EAAO/I,KAAA,CAAMI,MAAN,CAAa8O;YAAtB,CAArB;UAFW;QADC,CAAhB;QAMA,KAAKxN,yBAAL,CAA+BC,OAA/B,EAAwCC,OAAxC;MAPuD,CAAzD;MAUA,KAAKiJ,kBAAL,CACE1I,OADF,EAEE,IAFF,EAGE,CACE,CAAC,QAAD,EAAW,UAAX,CADF,EAEE,CAAC,QAAD,EAAW,QAAX,CAFF,EAGE,CAAC,OAAD,EAAU,OAAV,CAHF,EAIE,CAAC,MAAD,EAAS,MAAT,CAJF,EAKE,CAAC,WAAD,EAAc,YAAd,CALF,EAME,CAAC,YAAD,EAAe,aAAf,CANF,EAOE,CAAC,YAAD,EAAe,YAAf,CAPF,EAQE,CAAC,SAAD,EAAY,UAAZ,CARF,CAHF,EAaEnC,KAAA,IAASA,KAAA,CAAMI,MAAN,CAAa8O,OAbxB;IAX6C;IA4B/C,KAAKhE,mBAAL,CAAyB/I,OAAzB;IACA,KAAKD,2BAAL,CAAiCC,OAAjC;IAEA,KAAK3F,SAAL,CAAe8G,MAAf,CAAsBnB,OAAtB;IACA,OAAO,KAAK3F,SAAZ;EA9EO;AAL2D;AAuFtE,MAAMvD,kCAAN,SAAiDM,uBAAjD,CAAyE;EACvEiC,YAAYnD,UAAZ,EAAwB;IACtB,MAAMA,UAAN,EAAkB;MAAEoD,YAAA,EAAcpD,UAAA,CAAW2D;IAA3B,CAAlB;EADsB;EAIxBkI,OAAA,EAAS;IACP,KAAK1H,SAAL,CAAeoB,SAAf,CAAyBC,GAAzB,CAA6B,wBAA7B,EAAuD,aAAvD;IACA,MAAM+K,OAAA,GAAU,KAAK1M,iBAArB;IACA,MAAM3D,IAAA,GAAO,KAAKA,IAAlB;IACA,MAAM+E,EAAA,GAAK/E,IAAA,CAAK+E,EAAhB;IACA,IAAIyL,KAAA,GAAQH,OAAA,CAAQ+D,QAAR,CAAiBrP,EAAjB,EAAqB;MAC/ByL,KAAA,EAAOxQ,IAAA,CAAK+T,UAAL,KAAoB/T,IAAA,CAAK8W;IADD,CAArB,EAETtG,KAFH;IAGA,IAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;MAE7BA,KAAA,GAAQA,KAAA,KAAUxQ,IAAA,CAAK8W,WAAvB;MACAzG,OAAA,CAAQvI,QAAR,CAAiB/C,EAAjB,EAAqB;QAAEyL;MAAF,CAArB;IAH6B;IAM/B,MAAM5G,OAAA,GAAUhF,QAAA,CAASC,aAAT,CAAuB,OAAvB,CAAhB;IACAvF,oBAAA,CAAqBgG,GAArB,CAAyBsE,OAAzB;IACAA,OAAA,CAAQ9E,YAAR,CAAqB,iBAArB,EAAwCC,EAAxC;IAEA6E,OAAA,CAAQjB,QAAR,GAAmB3I,IAAA,CAAKkV,QAAxB;IACA,KAAKrM,YAAL,CAAkBe,OAAlB,EAA2B,KAAK5J,IAAL,CAAU4I,QAArC;IACAgB,OAAA,CAAQ2G,IAAR,GAAe,OAAf;IACA3G,OAAA,CAAQL,IAAR,GAAevJ,IAAA,CAAKkQ,SAApB;IACA,IAAIM,KAAJ,EAAW;MACT5G,OAAA,CAAQ9E,YAAR,CAAqB,SAArB,EAAgC,IAAhC;IADS;IAGX8E,OAAA,CAAQ5E,QAAR,GAAmB5F,iBAAnB;IAEAwK,OAAA,CAAQyD,gBAAR,CAAyB,QAAzB,EAAmC5F,KAAA,IAAS;MAC1C,MAAM;QAAE8B,IAAF;QAAQoN;MAAR,IAAoBlP,KAAA,CAAMI,MAAhC;MACA,WAAWkP,KAAX,IAAoB,KAAKnL,kBAAL,CAAwBrC,IAAxB,EAA6CxE,EAA7C,CAApB,EAAsE;QACpEsL,OAAA,CAAQvI,QAAR,CAAiBiP,KAAA,CAAMhS,EAAvB,EAA2B;UAAEyL,KAAA,EAAO;QAAT,CAA3B;MADoE;MAGtEH,OAAA,CAAQvI,QAAR,CAAiB/C,EAAjB,EAAqB;QAAEyL,KAAA,EAAOmG;MAAT,CAArB;IAL0C,CAA5C;IAQA/M,OAAA,CAAQyD,gBAAR,CAAyB,WAAzB,EAAsC5F,KAAA,IAAS;MAC7C,MAAMgJ,YAAA,GAAezQ,IAAA,CAAKoV,iBAA1B;MACA3N,KAAA,CAAMI,MAAN,CAAa8O,OAAb,GACElG,YAAA,KAAiB,IAAjB,IACAA,YAAA,KAAiB6E,SADjB,IAEA7E,YAAA,KAAiBzQ,IAAA,CAAK8W,WAHxB;IAF6C,CAA/C;IAQA,IAAI,KAAKlT,eAAL,IAAwB,KAAKC,YAAjC,EAA+C;MAC7C,MAAMmT,cAAA,GAAiBhX,IAAA,CAAK8W,WAA5B;MACAlN,OAAA,CAAQyD,gBAAR,CAAyB,mBAAzB,EAA8ChE,OAAA,IAAW;QACvD,MAAMD,OAAA,GAAU;UACdoH,KAAA,EAAO/I,KAAA,IAAS;YACd,MAAMkP,OAAA,GAAUK,cAAA,KAAmBvP,KAAA,CAAMC,MAAN,CAAa8I,KAAhD;YACA,WAAWuG,KAAX,IAAoB,KAAKnL,kBAAL,CAAwBnE,KAAA,CAAMI,MAAN,CAAa0B,IAArC,CAApB,EAAgE;cAC9D,MAAMsN,UAAA,GAAaF,OAAA,IAAWI,KAAA,CAAMhS,EAAN,KAAaA,EAA3C;cACA,IAAIgS,KAAA,CAAM7K,UAAV,EAAsB;gBACpB6K,KAAA,CAAM7K,UAAN,CAAiByK,OAAjB,GAA2BE,UAA3B;cADoB;cAGtBxG,OAAA,CAAQvI,QAAR,CAAiBiP,KAAA,CAAMhS,EAAvB,EAA2B;gBAAEyL,KAAA,EAAOqG;cAAT,CAA3B;YAL8D;UAFlD;QADF,CAAhB;QAYA,KAAK1N,yBAAL,CAA+BC,OAA/B,EAAwCC,OAAxC;MAbuD,CAAzD;MAgBA,KAAKiJ,kBAAL,CACE1I,OADF,EAEE,IAFF,EAGE,CACE,CAAC,QAAD,EAAW,UAAX,CADF,EAEE,CAAC,QAAD,EAAW,QAAX,CAFF,EAGE,CAAC,OAAD,EAAU,OAAV,CAHF,EAIE,CAAC,MAAD,EAAS,MAAT,CAJF,EAKE,CAAC,WAAD,EAAc,YAAd,CALF,EAME,CAAC,YAAD,EAAe,aAAf,CANF,EAOE,CAAC,YAAD,EAAe,YAAf,CAPF,EAQE,CAAC,SAAD,EAAY,UAAZ,CARF,CAHF,EAaEnC,KAAA,IAASA,KAAA,CAAMI,MAAN,CAAa8O,OAbxB;IAlB6C;IAmC/C,KAAKhE,mBAAL,CAAyB/I,OAAzB;IACA,KAAKD,2BAAL,CAAiCC,OAAjC;IAEA,KAAK3F,SAAL,CAAe8G,MAAf,CAAsBnB,OAAtB;IACA,OAAO,KAAK3F,SAAZ;EAlFO;AAL8D;AA2FzE,MAAMpD,iCAAN,SAAgDV,qBAAhD,CAAsE;EACpE8C,YAAYnD,UAAZ,EAAwB;IACtB,MAAMA,UAAN,EAAkB;MAAEqD,YAAA,EAAcrD,UAAA,CAAWE,IAAX,CAAgB8T;IAAhC,CAAlB;EADsB;EAIxBnI,OAAA,EAAS;IAIP,MAAM1H,SAAA,GAAY,MAAM0H,MAAN,EAAlB;IACA1H,SAAA,CAAUoB,SAAV,CAAoBC,GAApB,CAAwB,wBAAxB,EAAkD,YAAlD;IAEA,IAAI,KAAKtF,IAAL,CAAUkR,eAAd,EAA+B;MAC7BjN,SAAA,CAAUwE,KAAV,GAAkB,KAAKzI,IAAL,CAAUkR,eAA5B;IAD6B;IAI/B,MAAM+F,WAAA,GAAchT,SAAA,CAAUiT,SAA9B;IACA,IAAI,KAAKtT,eAAL,IAAwB,KAAKC,YAA7B,IAA6CoT,WAAjD,EAA8D;MAC5D,KAAKtN,2BAAL,CAAiCsN,WAAjC;MAEAA,WAAA,CAAY5J,gBAAZ,CAA6B,mBAA7B,EAAkDhE,OAAA,IAAW;QAC3D,KAAKF,yBAAL,CAA+B,EAA/B,EAAmCE,OAAnC;MAD2D,CAA7D;IAH4D;IAQ9D,OAAOpF,SAAP;EApBO;AAL2D;AA6BtE,MAAMnD,6BAAN,SAA4CE,uBAA5C,CAAoE;EAClEiC,YAAYnD,UAAZ,EAAwB;IACtB,MAAMA,UAAN,EAAkB;MAAEoD,YAAA,EAAcpD,UAAA,CAAW2D;IAA3B,CAAlB;EADsB;EAIxBkI,OAAA,EAAS;IACP,KAAK1H,SAAL,CAAeoB,SAAf,CAAyBC,GAAzB,CAA6B,wBAA7B;IACA,MAAM+K,OAAA,GAAU,KAAK1M,iBAArB;IACA,MAAMoB,EAAA,GAAK,KAAK/E,IAAL,CAAU+E,EAArB;IAEA,MAAM8E,UAAA,GAAawG,OAAA,CAAQ+D,QAAR,CAAiBrP,EAAjB,EAAqB;MACtCyL,KAAA,EAAO,KAAKxQ,IAAL,CAAU+T;IADqB,CAArB,CAAnB;IAIA,MAAMoD,aAAA,GAAgBvS,QAAA,CAASC,aAAT,CAAuB,QAAvB,CAAtB;IACAvF,oBAAA,CAAqBgG,GAArB,CAAyB6R,aAAzB;IACAA,aAAA,CAAcrS,YAAd,CAA2B,iBAA3B,EAA8CC,EAA9C;IAEAoS,aAAA,CAAcxO,QAAd,GAAyB,KAAK3I,IAAL,CAAUkV,QAAnC;IACA,KAAKrM,YAAL,CAAkBsO,aAAlB,EAAiC,KAAKnX,IAAL,CAAU4I,QAA3C;IACAuO,aAAA,CAAc5N,IAAd,GAAqB,KAAKvJ,IAAL,CAAUkQ,SAA/B;IACAiH,aAAA,CAAcnS,QAAd,GAAyB5F,iBAAzB;IAEA,IAAIgY,eAAA,GAAkB,KAAKpX,IAAL,CAAUqX,KAAV,IAAmB,KAAKrX,IAAL,CAAUyN,OAAV,CAAkBlD,MAAlB,GAA2B,CAApE;IAEA,IAAI,CAAC,KAAKvK,IAAL,CAAUqX,KAAf,EAAsB;MAEpBF,aAAA,CAAcG,IAAd,GAAqB,KAAKtX,IAAL,CAAUyN,OAAV,CAAkBlD,MAAvC;MACA,IAAI,KAAKvK,IAAL,CAAUuX,WAAd,EAA2B;QACzBJ,aAAA,CAAcK,QAAd,GAAyB,IAAzB;MADyB;IAHP;IAQtBL,aAAA,CAAc9J,gBAAd,CAA+B,WAA/B,EAA4C5F,KAAA,IAAS;MACnD,MAAMgJ,YAAA,GAAe,KAAKzQ,IAAL,CAAUoV,iBAA/B;MACA,WAAWqC,MAAX,IAAqBN,aAAA,CAAc1J,OAAnC,EAA4C;QAC1CgK,MAAA,CAAOC,QAAP,GAAkBD,MAAA,CAAOjH,KAAP,KAAiBC,YAAnC;MAD0C;IAFO,CAArD;IAQA,WAAWgH,MAAX,IAAqB,KAAKzX,IAAL,CAAUyN,OAA/B,EAAwC;MACtC,MAAMkK,aAAA,GAAgB/S,QAAA,CAASC,aAAT,CAAuB,QAAvB,CAAtB;MACA8S,aAAA,CAActD,WAAd,GAA4BoD,MAAA,CAAOG,YAAnC;MACAD,aAAA,CAAcnH,KAAd,GAAsBiH,MAAA,CAAOxL,WAA7B;MACA,IAAIpC,UAAA,CAAW2G,KAAX,CAAiBwB,QAAjB,CAA0ByF,MAAA,CAAOxL,WAAjC,CAAJ,EAAmD;QACjD0L,aAAA,CAAc7S,YAAd,CAA2B,UAA3B,EAAuC,IAAvC;QACAsS,eAAA,GAAkB,KAAlB;MAFiD;MAInDD,aAAA,CAAcpM,MAAd,CAAqB4M,aAArB;IARsC;IAWxC,IAAIE,gBAAA,GAAmB,IAAvB;IACA,IAAIT,eAAJ,EAAqB;MACnB,MAAMU,iBAAA,GAAoBlT,QAAA,CAASC,aAAT,CAAuB,QAAvB,CAA1B;MACAiT,iBAAA,CAAkBtH,KAAlB,GAA0B,GAA1B;MACAsH,iBAAA,CAAkBhT,YAAlB,CAA+B,QAA/B,EAAyC,IAAzC;MACAgT,iBAAA,CAAkBhT,YAAlB,CAA+B,UAA/B,EAA2C,IAA3C;MACAqS,aAAA,CAAcY,OAAd,CAAsBD,iBAAtB;MAEAD,gBAAA,GAAmBA,CAAA,KAAM;QACvBC,iBAAA,CAAkBE,MAAlB;QACAb,aAAA,CAAcc,mBAAd,CAAkC,OAAlC,EAA2CJ,gBAA3C;QACAA,gBAAA,GAAmB,IAAnB;MAHuB,CAAzB;MAKAV,aAAA,CAAc9J,gBAAd,CAA+B,OAA/B,EAAwCwK,gBAAxC;IAZmB;IAerB,MAAMzD,QAAA,GAAW8D,QAAA,IAAY;MAC3B,MAAM3O,IAAA,GAAO2O,QAAA,GAAW,OAAX,GAAqB,aAAlC;MACA,MAAM;QAAEzK,OAAF;QAAW+J;MAAX,IAAwBL,aAA9B;MACA,IAAI,CAACK,QAAL,EAAe;QACb,OAAO/J,OAAA,CAAQ0K,aAAR,KAA0B,CAAC,CAA3B,GACH,IADG,GAEH1K,OAAA,CAAQA,OAAA,CAAQ0K,aAAhB,EAA+B5O,IAA/B,CAFJ;MADa;MAKf,OAAOuD,KAAA,CAAMsL,SAAN,CAAgBC,MAAhB,CACJC,IADI,CACC7K,OADD,EACUgK,MAAA,IAAUA,MAAA,CAAOC,QAD3B,EAEJla,GAFI,CAEAia,MAAA,IAAUA,MAAA,CAAOlO,IAAP,CAFV,CAAP;IAR2B,CAA7B;IAaA,IAAIgP,cAAA,GAAiBnE,QAAA,CAAwB,KAAxB,CAArB;IAEA,MAAMoE,QAAA,GAAW/Q,KAAA,IAAS;MACxB,MAAMgG,OAAA,GAAUhG,KAAA,CAAMI,MAAN,CAAa4F,OAA7B;MACA,OAAOX,KAAA,CAAMsL,SAAN,CAAgB5a,GAAhB,CAAoB8a,IAApB,CAAyB7K,OAAzB,EAAkCgK,MAAA,IAAU;QACjD,OAAO;UAAEG,YAAA,EAAcH,MAAA,CAAOpD,WAAvB;UAAoCpI,WAAA,EAAawL,MAAA,CAAOjH;QAAxD,CAAP;MADiD,CAA5C,CAAP;IAFwB,CAA1B;IAOA,IAAI,KAAK5M,eAAL,IAAwB,KAAKC,YAAjC,EAA+C;MAC7CsT,aAAA,CAAc9J,gBAAd,CAA+B,mBAA/B,EAAoDhE,OAAA,IAAW;QAC7D,MAAMD,OAAA,GAAU;UACdoH,MAAM/I,KAAN,EAAa;YACXoQ,gBAAA;YACA,MAAMrH,KAAA,GAAQ/I,KAAA,CAAMC,MAAN,CAAa8I,KAA3B;YACA,MAAML,MAAA,GAAS,IAAIF,GAAJ,CAAQnD,KAAA,CAAMC,OAAN,CAAcyD,KAAd,IAAuBA,KAAvB,GAA+B,CAACA,KAAD,CAAvC,CAAf;YACA,WAAWiH,MAAX,IAAqBN,aAAA,CAAc1J,OAAnC,EAA4C;cAC1CgK,MAAA,CAAOC,QAAP,GAAkBvH,MAAA,CAAO/D,GAAP,CAAWqL,MAAA,CAAOjH,KAAlB,CAAlB;YAD0C;YAG5CH,OAAA,CAAQvI,QAAR,CAAiB/C,EAAjB,EAAqB;cACnByL,KAAA,EAAO4D,QAAA,CAAwB,IAAxB;YADY,CAArB;YAGAmE,cAAA,GAAiBnE,QAAA,CAAwB,KAAxB,CAAjB;UAVW,CADC;UAadqE,kBAAkBhR,KAAlB,EAAyB;YACvB0P,aAAA,CAAcK,QAAd,GAAyB,IAAzB;UADuB,CAbX;UAgBdQ,OAAOvQ,KAAP,EAAc;YACZ,MAAMgG,OAAA,GAAU0J,aAAA,CAAc1J,OAA9B;YACA,MAAMiL,KAAA,GAAQjR,KAAA,CAAMC,MAAN,CAAasQ,MAA3B;YACAvK,OAAA,CAAQiL,KAAR,EAAehB,QAAf,GAA0B,KAA1B;YACAP,aAAA,CAAca,MAAd,CAAqBU,KAArB;YACA,IAAIjL,OAAA,CAAQlD,MAAR,GAAiB,CAArB,EAAwB;cACtB,MAAMoO,CAAA,GAAI7L,KAAA,CAAMsL,SAAN,CAAgBQ,SAAhB,CAA0BN,IAA1B,CACR7K,OADQ,EAERgK,MAAA,IAAUA,MAAA,CAAOC,QAFT,CAAV;cAIA,IAAIiB,CAAA,KAAM,CAAC,CAAX,EAAc;gBACZlL,OAAA,CAAQ,CAAR,EAAWiK,QAAX,GAAsB,IAAtB;cADY;YALQ;YASxBrH,OAAA,CAAQvI,QAAR,CAAiB/C,EAAjB,EAAqB;cACnByL,KAAA,EAAO4D,QAAA,CAAwB,IAAxB,CADY;cAEnByE,KAAA,EAAOL,QAAA,CAAS/Q,KAAT;YAFY,CAArB;YAIA8Q,cAAA,GAAiBnE,QAAA,CAAwB,KAAxB,CAAjB;UAlBY,CAhBA;UAoCd0E,MAAMrR,KAAN,EAAa;YACX,OAAO0P,aAAA,CAAc5M,MAAd,KAAyB,CAAhC,EAAmC;cACjC4M,aAAA,CAAca,MAAd,CAAqB,CAArB;YADiC;YAGnC3H,OAAA,CAAQvI,QAAR,CAAiB/C,EAAjB,EAAqB;cAAEyL,KAAA,EAAO,IAAT;cAAeqI,KAAA,EAAO;YAAtB,CAArB;YACAN,cAAA,GAAiBnE,QAAA,CAAwB,KAAxB,CAAjB;UALW,CApCC;UA2Cd2E,OAAOtR,KAAP,EAAc;YACZ,MAAM;cAAEiR,KAAF;cAASd,YAAT;cAAuB3L;YAAvB,IAAuCxE,KAAA,CAAMC,MAAN,CAAaqR,MAA1D;YACA,MAAMC,WAAA,GAAc7B,aAAA,CAAc8B,QAAd,CAAuBP,KAAvB,CAApB;YACA,MAAMf,aAAA,GAAgB/S,QAAA,CAASC,aAAT,CAAuB,QAAvB,CAAtB;YACA8S,aAAA,CAActD,WAAd,GAA4BuD,YAA5B;YACAD,aAAA,CAAcnH,KAAd,GAAsBvE,WAAtB;YAEA,IAAI+M,WAAJ,EAAiB;cACfA,WAAA,CAAYE,MAAZ,CAAmBvB,aAAnB;YADe,CAAjB,MAEO;cACLR,aAAA,CAAcpM,MAAd,CAAqB4M,aAArB;YADK;YAGPtH,OAAA,CAAQvI,QAAR,CAAiB/C,EAAjB,EAAqB;cACnByL,KAAA,EAAO4D,QAAA,CAAwB,IAAxB,CADY;cAEnByE,KAAA,EAAOL,QAAA,CAAS/Q,KAAT;YAFY,CAArB;YAIA8Q,cAAA,GAAiBnE,QAAA,CAAwB,KAAxB,CAAjB;UAhBY,CA3CA;UA6DdyE,MAAMpR,KAAN,EAAa;YACX,MAAM;cAAEoR;YAAF,IAAYpR,KAAA,CAAMC,MAAxB;YACA,OAAOyP,aAAA,CAAc5M,MAAd,KAAyB,CAAhC,EAAmC;cACjC4M,aAAA,CAAca,MAAd,CAAqB,CAArB;YADiC;YAGnC,WAAWmB,IAAX,IAAmBN,KAAnB,EAA0B;cACxB,MAAM;gBAAEjB,YAAF;gBAAgB3L;cAAhB,IAAgCkN,IAAtC;cACA,MAAMxB,aAAA,GAAgB/S,QAAA,CAASC,aAAT,CAAuB,QAAvB,CAAtB;cACA8S,aAAA,CAActD,WAAd,GAA4BuD,YAA5B;cACAD,aAAA,CAAcnH,KAAd,GAAsBvE,WAAtB;cACAkL,aAAA,CAAcpM,MAAd,CAAqB4M,aAArB;YALwB;YAO1B,IAAIR,aAAA,CAAc1J,OAAd,CAAsBlD,MAAtB,GAA+B,CAAnC,EAAsC;cACpC4M,aAAA,CAAc1J,OAAd,CAAsB,CAAtB,EAAyBiK,QAAzB,GAAoC,IAApC;YADoC;YAGtCrH,OAAA,CAAQvI,QAAR,CAAiB/C,EAAjB,EAAqB;cACnByL,KAAA,EAAO4D,QAAA,CAAwB,IAAxB,CADY;cAEnByE,KAAA,EAAOL,QAAA,CAAS/Q,KAAT;YAFY,CAArB;YAIA8Q,cAAA,GAAiBnE,QAAA,CAAwB,KAAxB,CAAjB;UAnBW,CA7DC;UAkFdgF,QAAQ3R,KAAR,EAAe;YACb,MAAM2R,OAAA,GAAU,IAAInJ,GAAJ,CAAQxI,KAAA,CAAMC,MAAN,CAAa0R,OAArB,CAAhB;YACA,WAAW3B,MAAX,IAAqBhQ,KAAA,CAAMI,MAAN,CAAa4F,OAAlC,EAA2C;cACzCgK,MAAA,CAAOC,QAAP,GAAkB0B,OAAA,CAAQhN,GAAR,CAAYqL,MAAA,CAAOiB,KAAnB,CAAlB;YADyC;YAG3CrI,OAAA,CAAQvI,QAAR,CAAiB/C,EAAjB,EAAqB;cACnByL,KAAA,EAAO4D,QAAA,CAAwB,IAAxB;YADY,CAArB;YAGAmE,cAAA,GAAiBnE,QAAA,CAAwB,KAAxB,CAAjB;UARa,CAlFD;UA4FdiF,SAAS5R,KAAT,EAAgB;YACdA,KAAA,CAAMI,MAAN,CAAac,QAAb,GAAwB,CAAClB,KAAA,CAAMC,MAAN,CAAa2R,QAAtC;UADc;QA5FF,CAAhB;QAgGA,KAAKlQ,yBAAL,CAA+BC,OAA/B,EAAwCC,OAAxC;MAjG6D,CAA/D;MAoGA8N,aAAA,CAAc9J,gBAAd,CAA+B,OAA/B,EAAwC5F,KAAA,IAAS;QAC/C,MAAMwE,WAAA,GAAcmI,QAAA,CAAwB,IAAxB,CAApB;QACA/D,OAAA,CAAQvI,QAAR,CAAiB/C,EAAjB,EAAqB;UAAEyL,KAAA,EAAOvE;QAAT,CAArB;QAEAxE,KAAA,CAAM4O,cAAN;QAEA,KAAK/S,WAAL,CAAiBgK,QAAjB,EAA2BC,QAA3B,CAAoC,wBAApC,EAA8D;UAC5DC,MAAA,EAAQ,IADoD;UAE5D9F,MAAA,EAAQ;YACN3C,EADM;YAENwE,IAAA,EAAM,WAFA;YAGNiH,KAAA,EAAO+H,cAHD;YAINe,QAAA,EAAUrN,WAJJ;YAKN0J,UAAA,EAAY,KALN;YAMNb,SAAA,EAAW,CANL;YAONyE,OAAA,EAAS;UAPH;QAFoD,CAA9D;MAN+C,CAAjD;MAoBA,KAAKjH,kBAAL,CACE6E,aADF,EAEE,IAFF,EAGE,CACE,CAAC,OAAD,EAAU,OAAV,CADF,EAEE,CAAC,MAAD,EAAS,MAAT,CAFF,EAGE,CAAC,WAAD,EAAc,YAAd,CAHF,EAIE,CAAC,YAAD,EAAe,aAAf,CAJF,EAKE,CAAC,YAAD,EAAe,YAAf,CALF,EAME,CAAC,SAAD,EAAY,UAAZ,CANF,EAOE,CAAC,OAAD,EAAU,QAAV,CAPF,EAQE,CAAC,OAAD,EAAU,UAAV,CARF,CAHF,EAaE1P,KAAA,IAASA,KAAA,CAAMI,MAAN,CAAa2I,KAbxB;IAzH6C,CAA/C,MAwIO;MACL2G,aAAA,CAAc9J,gBAAd,CAA+B,OAA/B,EAAwC,UAAU5F,KAAV,EAAiB;QACvD4I,OAAA,CAAQvI,QAAR,CAAiB/C,EAAjB,EAAqB;UAAEyL,KAAA,EAAO4D,QAAA,CAAwB,IAAxB;QAAT,CAArB;MADuD,CAAzD;IADK;IAMP,IAAI,KAAKpU,IAAL,CAAUqX,KAAd,EAAqB;MACnB,KAAKxE,aAAL,CAAmBsE,aAAnB;IADmB,CAArB,MAEO;IAIP,KAAKxE,mBAAL,CAAyBwE,aAAzB;IACA,KAAKxN,2BAAL,CAAiCwN,aAAjC;IAEA,KAAKlT,SAAL,CAAe8G,MAAf,CAAsBoM,aAAtB;IACA,OAAO,KAAKlT,SAAZ;EA7OO;AALyD;AAsPpE,MAAM/C,sBAAN,SAAqC6B,iBAArC,CAAuD;EACrDE,YAAYnD,UAAZ,EAAwB;IACtB,MAAM;MAAEE,IAAF;MAAQyL;IAAR,IAAqB3L,UAA3B;IACA,MAAMA,UAAN,EAAkB;MAAEoD,YAAA,EAAcH,iBAAA,CAAkBqB,aAAlB,CAAgCpE,IAAhC;IAAhB,CAAlB;IACA,KAAKyL,QAAL,GAAgBA,QAAhB;EAHsB;EAMxBE,OAAA,EAAS;IACP,KAAK1H,SAAL,CAAeoB,SAAf,CAAyBC,GAAzB,CAA6B,iBAA7B;IAEA,MAAMgG,KAAA,GAAQ,IAAIkO,YAAJ,CAAiB;MAC7BvV,SAAA,EAAW,KAAKA,SADa;MAE7B1G,KAAA,EAAO,KAAKyC,IAAL,CAAUzC,KAFY;MAG7B8G,QAAA,EAAU,KAAKrE,IAAL,CAAUqE,QAHS;MAI7BkH,gBAAA,EAAkB,KAAKvL,IAAL,CAAUuL,gBAJC;MAK7BjH,WAAA,EAAa,KAAKtE,IAAL,CAAUsE,WALM;MAM7BC,QAAA,EAAU,KAAKvE,IAAL,CAAUuE,QANS;MAO7B9E,IAAA,EAAM,KAAKO,IAAL,CAAUP,IAPa;MAQ7B+L,UAAA,EAAY,KAAKxL,IAAL,CAAUwL,UAAV,IAAwB,IARP;MAS7BxH,MAAA,EAAQ,KAAKA,MATgB;MAU7ByH,QAAA,EAAU,KAAKA,QAVc;MAW7BgO,IAAA,EAAM,KAAKzZ,IAAL,CAAUyZ;IAXa,CAAjB,CAAd;IAcA,MAAMC,UAAA,GAAa,EAAnB;IACA,WAAW9P,OAAX,IAAsB,KAAK6B,QAA3B,EAAqC;MACnC7B,OAAA,CAAQ0B,KAAR,GAAgBA,KAAhB;MACAoO,UAAA,CAAWvO,IAAX,CAAgBvB,OAAA,CAAQ5J,IAAR,CAAa+E,EAA7B;MACA6E,OAAA,CAAQgD,gBAAR;IAHmC;IAMrC,KAAK3I,SAAL,CAAea,YAAf,CACE,eADF,EAEE4U,UAAA,CAAWlc,GAAX,CAAeuH,EAAA,IAAM,GAAGzG,qBAAH,GAAsByG,EAAtB,EAArB,EAAiDrH,IAAjD,CAAsD,GAAtD,CAFF;IAKA,OAAO,KAAKuG,SAAZ;EA7BO;AAP4C;AAwCvD,MAAMuV,YAAN,CAAmB;EACjB,CAAAG,YAAA,GAAgB,KAAK,CAAAJ,OAAL,CAAcK,IAAd,CAAmB,IAAnB,CAAhB;EAEA,CAAAC,SAAA,GAAa,KAAK,CAAApN,IAAL,CAAWmN,IAAX,CAAgB,IAAhB,CAAb;EAEA,CAAAE,SAAA,GAAa,KAAK,CAAAvN,IAAL,CAAWqN,IAAX,CAAgB,IAAhB,CAAb;EAEA,CAAAG,WAAA,GAAe,KAAK,CAAAC,MAAL,CAAaJ,IAAb,CAAkB,IAAlB,CAAf;EAEA,CAAArc,KAAA,GAAS,IAAT;EAEA,CAAA0G,SAAA,GAAa,IAAb;EAEA,CAAAK,WAAA,GAAe,IAAf;EAEA,CAAA2V,OAAA,GAAW,IAAX;EAEA,CAAAxO,QAAA,GAAY,IAAZ;EAEA,CAAAzH,MAAA,GAAU,IAAV;EAEA,CAAAwH,UAAA,GAAc,IAAd;EAEA,CAAA0O,MAAA,GAAU,KAAV;EAEA,CAAA5O,KAAA,GAAS,IAAT;EAEA,CAAA7L,IAAA,GAAQ,IAAR;EAEA,CAAA8E,QAAA,GAAY,IAAZ;EAEA,CAAAF,QAAA,GAAY,IAAZ;EAEA,CAAA8V,UAAA,GAAc,KAAd;EAEAlX,YAAY;IACVgB,SADU;IAEV1G,KAFU;IAGVkO,QAHU;IAIVpH,QAJU;IAKVkH,gBALU;IAMVjH,WANU;IAOVC,QAPU;IAQVP,MARU;IASVvE,IATU;IAUV+L,UAVU;IAWViO;EAXU,CAAZ,EAYG;IACD,KAAK,CAAAxV,SAAL,GAAkBA,SAAlB;IACA,KAAK,CAAAI,QAAL,GAAiBA,QAAjB;IACA,KAAK,CAAAC,WAAL,GAAoBA,WAApB;IACA,KAAK,CAAAC,QAAL,GAAiBA,QAAjB;IACA,KAAK,CAAAP,MAAL,GAAeA,MAAf;IACA,KAAK,CAAAzG,KAAL,GAAcA,KAAd;IACA,KAAK,CAAAkC,IAAL,GAAaA,IAAb;IACA,KAAK,CAAA+L,UAAL,GAAmBA,UAAnB;IACA,KAAK,CAAAC,QAAL,GAAiBA,QAAjB;IAKA,KAAK,CAAAwO,OAAL,GAAgBjb,2BAAA,CAAcob,YAAd,CAA2B7O,gBAA3B,CAAhB;IAEA,KAAK8O,OAAL,GAAe5O,QAAA,CAAS6O,OAAT,CAAiBC,CAAA,IAAKA,CAAA,CAAE5N,yBAAF,EAAtB,CAAf;IAEA,WAAW/C,OAAX,IAAsB,KAAKyQ,OAA3B,EAAoC;MAClCzQ,OAAA,CAAQyD,gBAAR,CAAyB,OAAzB,EAAkC,KAAK,CAAA0M,WAAvC;MACAnQ,OAAA,CAAQyD,gBAAR,CAAyB,YAAzB,EAAuC,KAAK,CAAAyM,SAA5C;MACAlQ,OAAA,CAAQyD,gBAAR,CAAyB,YAAzB,EAAuC,KAAK,CAAAwM,SAA5C;MACAjQ,OAAA,CAAQvE,SAAR,CAAkBC,GAAlB,CAAsB,kBAAtB;IAJkC;IAQpC,WAAWsE,OAAX,IAAsB6B,QAAtB,EAAgC;MAC9B7B,OAAA,CAAQ3F,SAAR,EAAmBoJ,gBAAnB,CAAoC,SAApC,EAA+C,KAAK,CAAAsM,YAApD;IAD8B;IAIhC,KAAK,CAAA1V,SAAL,CAAgB+D,MAAhB,GAAyB,IAAzB;IACA,IAAIyR,IAAJ,EAAU;MACR,KAAK,CAAAO,MAAL;IADQ;EA/BT;EA8CHrO,OAAA,EAAS;IACP,IAAI,KAAK,CAAAL,KAAT,EAAiB;MACf;IADe;IAIjB,MAAM;MACJ5G,IAAA,EAAM;QAAEsB;MAAF,CADF;MAEJrB,QAAA,EAAU;QACRgB,OAAA,EAAS;UAAEJ,SAAF;UAAaC,UAAb;UAAyBC,KAAzB;UAAgCC;QAAhC;MADD;IAFN,IAKF,KAAK,CAAA1B,MALT;IAMA,MAAMsH,KAAA,GAAS,KAAK,CAAAA,KAAL,GAAc1G,QAAA,CAASC,aAAT,CAAuB,KAAvB,CAA7B;IACAyG,KAAA,CAAMkP,SAAN,GAAkB,OAAlB;IAEA,IAAI,KAAK,CAAAjd,KAAT,EAAiB;MACf,MAAMkd,SAAA,GAAanP,KAAA,CAAMrG,KAAN,CAAYyV,YAAZ,GAA2B9b,SAAA,CAAKmI,YAAL,CAC5C,GAAG,KAAK,CAAAxJ,KADoC,CAA9C;MAGA,IAEEod,GAAA,CAAIC,QAAJ,CAAa,kBAAb,EAAiC,oCAAjC,CAFF,EAGE;QACAtP,KAAA,CAAMrG,KAAN,CAAY2N,eAAZ,GAA+B,sBAAqB6H,SAAU,cAA9D;MADA,CAHF,MAKO;QAKL,MAAMI,kBAAA,GAAqB,GAA3B;QACAvP,KAAA,CAAMrG,KAAN,CAAY2N,eAAZ,GAA8BhU,SAAA,CAAKmI,YAAL,CAC5B,GAAG,KAAK,CAAAxJ,KAAL,CAAYC,GAAZ,CAAgBf,CAAA,IACjBV,IAAA,CAAKC,KAAL,CAAW6e,kBAAA,IAAsB,MAAMpe,CAAN,CAAtB,GAAiCA,CAA5C,CADC,CADyB,CAA9B;MANK;IATQ;IAuBjB,MAAMqe,MAAA,GAASlW,QAAA,CAASC,aAAT,CAAuB,MAAvB,CAAf;IACAiW,MAAA,CAAON,SAAP,GAAmB,QAAnB;IACA,MAAM/R,KAAA,GAAQ7D,QAAA,CAASC,aAAT,CAAuB,IAAvB,CAAd;IACAiW,MAAA,CAAO/P,MAAP,CAActC,KAAd;IACA,CAAC;MAAEsS,GAAA,EAAKtS,KAAA,CAAMsS,GAAb;MAAkBvW,GAAA,EAAKiE,KAAA,CAAM4L;IAA7B,IAA6C,KAAK,CAAAhQ,QAAnD;IACAiH,KAAA,CAAMP,MAAN,CAAa+P,MAAb;IAEA,IAAI,KAAK,CAAAb,OAAT,EAAmB;MACjB,MAAM1O,gBAAA,GAAmB3G,QAAA,CAASC,aAAT,CAAuB,MAAvB,CAAzB;MACA0G,gBAAA,CAAiBlG,SAAjB,CAA2BC,GAA3B,CAA+B,WAA/B;MACAiG,gBAAA,CAAiBzG,YAAjB,CACE,cADF,EAEE,8BAFF;MAIAyG,gBAAA,CAAiBzG,YAAjB,CACE,gBADF,EAEEkM,IAAA,CAAKC,SAAL,CAAe;QACb+J,IAAA,EAAM,KAAK,CAAAf,OAAL,CAAcgB,kBAAd,EADO;QAEbC,IAAA,EAAM,KAAK,CAAAjB,OAAL,CAAckB,kBAAd;MAFO,CAAf,CAFF;MAOAL,MAAA,CAAO/P,MAAP,CAAcQ,gBAAd;IAdiB;IAiBnB,MAAMjH,WAAA,GAAc,KAAK,CAAAA,WAAzB;IACA,MAAMC,QAAA,GAAW,KAAK,CAAAA,QAAtB;IACA,IACEA,QAAA,EAAUC,GAAV,KACC,CAACF,WAAA,EAAaE,GAAd,IAAqBF,WAAA,CAAYE,GAAZ,KAAoBD,QAAA,CAASC,GAAlD,CAFH,EAGE;MACArF,kBAAA,CAASwM,MAAT,CAAgB;QACdyP,OAAA,EAAS7W,QAAA,CAAS8W,IADJ;QAEdC,MAAA,EAAQ,UAFM;QAGd5P,GAAA,EAAKJ;MAHS,CAAhB;MAKAA,KAAA,CAAM4L,SAAN,CAAgB7R,SAAhB,CAA0BC,GAA1B,CAA8B,UAA9B,EAA0C,cAA1C;IANA,CAHF,MAUO;MACL,MAAMiW,QAAA,GAAW,KAAKC,eAAL,CAAqBlX,WAArB,CAAjB;MACAgH,KAAA,CAAMP,MAAN,CAAawQ,QAAb;IAFK;IAKP,IAAIE,aAAA,GAAgB,CAAC,CAAC,KAAK,CAAAjQ,UAA3B;IACA,IAAI/L,IAAA,GAAOgc,aAAA,GAAgB,KAAK,CAAAjQ,UAArB,GAAmC,KAAK,CAAA/L,IAAnD;IACA,WAAWmK,OAAX,IAAsB,KAAK,CAAA6B,QAA3B,EAAsC;MACpC,IAAI,CAAChM,IAAD,IAASb,SAAA,CAAK8c,SAAL,CAAe9R,OAAA,CAAQ5J,IAAR,CAAaP,IAA5B,EAAkCA,IAAlC,MAA4C,IAAzD,EAA+D;QAC7DA,IAAA,GAAOmK,OAAA,CAAQ5J,IAAR,CAAaP,IAApB;QACAgc,aAAA,GAAgB,IAAhB;QACA;MAH6D;IAD3B;IAQtC,MAAME,cAAA,GAAiB/c,SAAA,CAAKmH,aAAL,CAAmB,CACxCtG,IAAA,CAAK,CAAL,CADwC,EAExCuG,IAAA,CAAK,CAAL,IAAUvG,IAAA,CAAK,CAAL,CAAV,GAAoBuG,IAAA,CAAK,CAAL,CAFoB,EAGxCvG,IAAA,CAAK,CAAL,CAHwC,EAIxCuG,IAAA,CAAK,CAAL,IAAUvG,IAAA,CAAK,CAAL,CAAV,GAAoBuG,IAAA,CAAK,CAAL,CAJoB,CAAnB,CAAvB;IAOA,MAAM4V,iCAAA,GAAoC,CAA1C;IACA,MAAMC,WAAA,GAAcJ,aAAA,GAChBhc,IAAA,CAAK,CAAL,IAAUA,IAAA,CAAK,CAAL,CAAV,GAAoBmc,iCADJ,GAEhB,CAFJ;IAGA,MAAME,SAAA,GAAYH,cAAA,CAAe,CAAf,IAAoBE,WAAtC;IACA,MAAME,QAAA,GAAWJ,cAAA,CAAe,CAAf,CAAjB;IAEA,MAAM;MAAE1W;IAAF,IAAY,KAAK,CAAAhB,SAAvB;IACAgB,KAAA,CAAM+B,IAAN,GAAa,GAAI,OAAO8U,SAAA,GAAYrW,KAAZ,CAAR,GAA8BF,SAAU,GAAxD;IACAN,KAAA,CAAMgC,GAAN,GAAY,GAAI,OAAO8U,QAAA,GAAWrW,KAAX,CAAR,GAA6BF,UAAW,GAAvD;IAEA,KAAK,CAAAvB,SAAL,CAAgB8G,MAAhB,CAAuBO,KAAvB;EA1GO;EAqHTkQ,gBAAgB;IAAEhX,GAAF;IAAOuW;EAAP,CAAhB,EAA8B;IAC5B,MAAMiB,CAAA,GAAIpX,QAAA,CAASC,aAAT,CAAuB,GAAvB,CAAV;IACAmX,CAAA,CAAE3W,SAAF,CAAYC,GAAZ,CAAgB,cAAhB;IACA0W,CAAA,CAAEjB,GAAF,GAAQA,GAAR;IACA,MAAMkB,KAAA,GAAQzX,GAAA,CAAI0X,KAAJ,CAAU,cAAV,CAAd;IACA,KAAK,IAAIvD,CAAA,GAAI,CAAR,EAAWwD,EAAA,GAAKF,KAAA,CAAM1R,MAAtB,EAA8BoO,CAAA,GAAIwD,EAAvC,EAA2C,EAAExD,CAA7C,EAAgD;MAC9C,MAAMyD,IAAA,GAAOH,KAAA,CAAMtD,CAAN,CAAb;MACAqD,CAAA,CAAEjR,MAAF,CAASnG,QAAA,CAASyX,cAAT,CAAwBD,IAAxB,CAAT;MACA,IAAIzD,CAAA,GAAIwD,EAAA,GAAK,CAAb,EAAgB;QACdH,CAAA,CAAEjR,MAAF,CAASnG,QAAA,CAASC,aAAT,CAAuB,IAAvB,CAAT;MADc;IAH8B;IAOhD,OAAOmX,CAAP;EAZ4B;EAe9B,CAAAzC,QAAS9R,KAAT,EAAgB;IACd,IAAIA,KAAA,CAAM6U,MAAN,IAAgB7U,KAAA,CAAMyK,QAAtB,IAAkCzK,KAAA,CAAMiK,OAAxC,IAAmDjK,KAAA,CAAMgK,OAA7D,EAAsE;MACpE;IADoE;IAItE,IAAIhK,KAAA,CAAMyM,GAAN,KAAc,OAAd,IAA0BzM,KAAA,CAAMyM,GAAN,KAAc,QAAd,IAA0B,KAAK,CAAAgG,MAA7D,EAAuE;MACrE,KAAK,CAAAF,MAAL;IADqE;EALzD;EAahB,CAAAA,OAAA,EAAU;IACR,KAAK,CAAAE,MAAL,GAAe,CAAC,KAAK,CAAAA,MAArB;IACA,IAAI,KAAK,CAAAA,MAAT,EAAkB;MAChB,KAAK,CAAA3N,IAAL;MACA,KAAK,CAAAtI,SAAL,CAAgBoJ,gBAAhB,CAAiC,OAAjC,EAA0C,KAAK,CAAA0M,WAA/C;MACA,KAAK,CAAA9V,SAAL,CAAgBoJ,gBAAhB,CAAiC,SAAjC,EAA4C,KAAK,CAAAsM,YAAjD;IAHgB,CAAlB,MAIO;MACL,KAAK,CAAAlN,IAAL;MACA,KAAK,CAAAxI,SAAL,CAAgBgU,mBAAhB,CAAoC,OAApC,EAA6C,KAAK,CAAA8B,WAAlD;MACA,KAAK,CAAA9V,SAAL,CAAgBgU,mBAAhB,CAAoC,SAApC,EAA+C,KAAK,CAAA0B,YAApD;IAHK;EANC;EAgBV,CAAApN,KAAA,EAAQ;IACN,IAAI,CAAC,KAAK,CAAAjB,KAAV,EAAkB;MAChB,KAAKK,MAAL;IADgB;IAGlB,IAAI,CAAC,KAAK4Q,SAAV,EAAqB;MACnB,KAAK,CAAAtY,SAAL,CAAgB+D,MAAhB,GAAyB,KAAzB;MACA,KAAK,CAAA/D,SAAL,CAAgBgB,KAAhB,CAAsBC,MAAtB,GACEsX,QAAA,CAAS,KAAK,CAAAvY,SAAL,CAAgBgB,KAAhB,CAAsBC,MAA/B,IAAyC,IAD3C;IAFmB,CAArB,MAIO,IAAI,KAAK,CAAAgV,MAAT,EAAkB;MACvB,KAAK,CAAAjW,SAAL,CAAgBoB,SAAhB,CAA0BC,GAA1B,CAA8B,SAA9B;IADuB;EARnB;EAgBR,CAAAmH,KAAA,EAAQ;IACN,KAAK,CAAAxI,SAAL,CAAgBoB,SAAhB,CAA0B2S,MAA1B,CAAiC,SAAjC;IACA,IAAI,KAAK,CAAAkC,MAAL,IAAgB,CAAC,KAAKqC,SAA1B,EAAqC;MACnC;IADmC;IAGrC,KAAK,CAAAtY,SAAL,CAAgB+D,MAAhB,GAAyB,IAAzB;IACA,KAAK,CAAA/D,SAAL,CAAgBgB,KAAhB,CAAsBC,MAAtB,GACEsX,QAAA,CAAS,KAAK,CAAAvY,SAAL,CAAgBgB,KAAhB,CAAsBC,MAA/B,IAAyC,IAD3C;EANM;EAURwH,UAAA,EAAY;IACV,KAAK,CAAAyN,UAAL,GAAmB,KAAKoC,SAAxB;IACA,IAAI,CAAC,KAAK,CAAApC,UAAV,EAAuB;MACrB;IADqB;IAGvB,KAAK,CAAAlW,SAAL,CAAgB+D,MAAhB,GAAyB,IAAzB;EALU;EAQZwE,UAAA,EAAY;IACV,IAAI,CAAC,KAAK,CAAA2N,UAAV,EAAuB;MACrB;IADqB;IAGvB,KAAK,CAAAA,UAAL,GAAmB,KAAnB;IACA,KAAK,CAAAlW,SAAL,CAAgB+D,MAAhB,GAAyB,KAAzB;EALU;EAQZ,IAAIuU,SAAJA,CAAA,EAAgB;IACd,OAAO,KAAK,CAAAtY,SAAL,CAAgB+D,MAAhB,KAA2B,KAAlC;EADc;AAxSC;AA6SnB,MAAM5G,yBAAN,SAAwC2B,iBAAxC,CAA0D;EACxDE,YAAYnD,UAAZ,EAAwB;IACtB,MAAMA,UAAN,EAAkB;MAAEoD,YAAA,EAAc,IAAhB;MAAsBC,YAAA,EAAc;IAApC,CAAlB;IACA,KAAKkR,WAAL,GAAmBvU,UAAA,CAAWE,IAAX,CAAgBqU,WAAnC;IACA,KAAKoI,YAAL,GAAoB3c,UAAA,CAAWE,IAAX,CAAgByc,YAApC;IACA,KAAKvP,oBAAL,GAA4B7O,yBAAA,CAAqB8C,QAAjD;EAJsB;EAOxBwK,OAAA,EAAS;IACP,KAAK1H,SAAL,CAAeoB,SAAf,CAAyBC,GAAzB,CAA6B,oBAA7B;IAEA,IAAI,KAAK+O,WAAT,EAAsB;MACpB,MAAMhF,OAAA,GAAUzK,QAAA,CAASC,aAAT,CAAuB,KAAvB,CAAhB;MACAwK,OAAA,CAAQhK,SAAR,CAAkBC,GAAlB,CAAsB,uBAAtB;MACA+J,OAAA,CAAQvK,YAAR,CAAqB,MAArB,EAA6B,SAA7B;MACA,WAAWsX,IAAX,IAAmB,KAAK/H,WAAxB,EAAqC;QACnC,MAAMqI,QAAA,GAAW9X,QAAA,CAASC,aAAT,CAAuB,MAAvB,CAAjB;QACA6X,QAAA,CAASrI,WAAT,GAAuB+H,IAAvB;QACA/M,OAAA,CAAQtE,MAAR,CAAe2R,QAAf;MAHmC;MAKrC,KAAKzY,SAAL,CAAe8G,MAAf,CAAsBsE,OAAtB;IAToB;IAYtB,IAAI,CAAC,KAAKrP,IAAL,CAAUmF,QAAX,IAAuB,KAAKV,YAAhC,EAA8C;MAC5C,KAAK4G,YAAL;IAD4C;IAI9C,KAAK4B,kBAAL;IAEA,OAAO,KAAKhJ,SAAZ;EArBO;EAwBT,IAAI+I,WAAJA,CAAA,EAAkB;IAChB,OAAO,KAAKhN,IAAL,CAAU6F,YAAjB;EADgB;AAhCsC;AAqC1D,MAAMvE,qBAAN,SAAoCyB,iBAApC,CAAsD;EACpD,CAAAqZ,IAAA,GAAQ,IAAR;EAEAnZ,YAAYnD,UAAZ,EAAwB;IACtB,MAAMA,UAAN,EAAkB;MAAEoD,YAAA,EAAc,IAAhB;MAAsBC,YAAA,EAAc;IAApC,CAAlB;EADsB;EAIxBwI,OAAA,EAAS;IACP,KAAK1H,SAAL,CAAeoB,SAAf,CAAyBC,GAAzB,CAA6B,gBAA7B;IAKA,MAAMtF,IAAA,GAAO,KAAKA,IAAlB;IACA,MAAM;MAAEN,KAAF;MAASC;IAAT,IAAoBH,WAAA,CAAYQ,IAAA,CAAKP,IAAjB,CAA1B;IACA,MAAMoL,GAAA,GAAM,KAAKnH,UAAL,CAAgB7D,MAAhB,CACVH,KADU,EAEVC,MAFU,EAGa,IAHb,CAAZ;IAQA,MAAMyc,IAAA,GAAQ,KAAK,CAAAA,IAAL,GAAa,KAAK1Y,UAAL,CAAgBmB,aAAhB,CAA8B,UAA9B,CAA3B;IACAuX,IAAA,CAAKtX,YAAL,CAAkB,IAAlB,EAAwB9E,IAAA,CAAKP,IAAL,CAAU,CAAV,IAAeO,IAAA,CAAK2c,eAAL,CAAqB,CAArB,CAAvC;IACAP,IAAA,CAAKtX,YAAL,CAAkB,IAAlB,EAAwB9E,IAAA,CAAKP,IAAL,CAAU,CAAV,IAAeO,IAAA,CAAK2c,eAAL,CAAqB,CAArB,CAAvC;IACAP,IAAA,CAAKtX,YAAL,CAAkB,IAAlB,EAAwB9E,IAAA,CAAKP,IAAL,CAAU,CAAV,IAAeO,IAAA,CAAK2c,eAAL,CAAqB,CAArB,CAAvC;IACAP,IAAA,CAAKtX,YAAL,CAAkB,IAAlB,EAAwB9E,IAAA,CAAKP,IAAL,CAAU,CAAV,IAAeO,IAAA,CAAK2c,eAAL,CAAqB,CAArB,CAAvC;IAGAP,IAAA,CAAKtX,YAAL,CAAkB,cAAlB,EAAkC9E,IAAA,CAAKiG,WAAL,CAAiBvG,KAAjB,IAA0B,CAA5D;IACA0c,IAAA,CAAKtX,YAAL,CAAkB,QAAlB,EAA4B,aAA5B;IACAsX,IAAA,CAAKtX,YAAL,CAAkB,MAAlB,EAA0B,aAA1B;IAEA+F,GAAA,CAAIE,MAAJ,CAAWqR,IAAX;IACA,KAAKnY,SAAL,CAAe8G,MAAf,CAAsBF,GAAtB;IAIA,IAAI,CAAC7K,IAAA,CAAKmF,QAAN,IAAkB,KAAKV,YAA3B,EAAyC;MACvC,KAAK4G,YAAL;IADuC;IAIzC,OAAO,KAAKpH,SAAZ;EApCO;EAuCT0I,0BAAA,EAA4B;IAC1B,OAAO,KAAK,CAAAyP,IAAZ;EAD0B;EAI5BxP,iBAAA,EAAmB;IACjB,KAAK3I,SAAL,CAAeoB,SAAf,CAAyBC,GAAzB,CAA6B,eAA7B;EADiB;AAlDiC;AAuDtD,MAAM9D,uBAAN,SAAsCuB,iBAAtC,CAAwD;EACtD,CAAA6Z,MAAA,GAAU,IAAV;EAEA3Z,YAAYnD,UAAZ,EAAwB;IACtB,MAAMA,UAAN,EAAkB;MAAEoD,YAAA,EAAc,IAAhB;MAAsBC,YAAA,EAAc;IAApC,CAAlB;EADsB;EAIxBwI,OAAA,EAAS;IACP,KAAK1H,SAAL,CAAeoB,SAAf,CAAyBC,GAAzB,CAA6B,kBAA7B;IAKA,MAAMtF,IAAA,GAAO,KAAKA,IAAlB;IACA,MAAM;MAAEN,KAAF;MAASC;IAAT,IAAoBH,WAAA,CAAYQ,IAAA,CAAKP,IAAjB,CAA1B;IACA,MAAMoL,GAAA,GAAM,KAAKnH,UAAL,CAAgB7D,MAAhB,CACVH,KADU,EAEVC,MAFU,EAGa,IAHb,CAAZ;IASA,MAAMuG,WAAA,GAAclG,IAAA,CAAKiG,WAAL,CAAiBvG,KAArC;IACA,MAAMkd,MAAA,GAAU,KAAK,CAAAA,MAAL,GAAe,KAAKlZ,UAAL,CAAgBmB,aAAhB,CAA8B,UAA9B,CAA/B;IACA+X,MAAA,CAAO9X,YAAP,CAAoB,GAApB,EAAyBoB,WAAA,GAAc,CAAvC;IACA0W,MAAA,CAAO9X,YAAP,CAAoB,GAApB,EAAyBoB,WAAA,GAAc,CAAvC;IACA0W,MAAA,CAAO9X,YAAP,CAAoB,OAApB,EAA6BpF,KAAA,GAAQwG,WAArC;IACA0W,MAAA,CAAO9X,YAAP,CAAoB,QAApB,EAA8BnF,MAAA,GAASuG,WAAvC;IAGA0W,MAAA,CAAO9X,YAAP,CAAoB,cAApB,EAAoCoB,WAAA,IAAe,CAAnD;IACA0W,MAAA,CAAO9X,YAAP,CAAoB,QAApB,EAA8B,aAA9B;IACA8X,MAAA,CAAO9X,YAAP,CAAoB,MAApB,EAA4B,aAA5B;IAEA+F,GAAA,CAAIE,MAAJ,CAAW6R,MAAX;IACA,KAAK3Y,SAAL,CAAe8G,MAAf,CAAsBF,GAAtB;IAIA,IAAI,CAAC7K,IAAA,CAAKmF,QAAN,IAAkB,KAAKV,YAA3B,EAAyC;MACvC,KAAK4G,YAAL;IADuC;IAIzC,OAAO,KAAKpH,SAAZ;EAtCO;EAyCT0I,0BAAA,EAA4B;IAC1B,OAAO,KAAK,CAAAiQ,MAAZ;EAD0B;EAI5BhQ,iBAAA,EAAmB;IACjB,KAAK3I,SAAL,CAAeoB,SAAf,CAAyBC,GAAzB,CAA6B,eAA7B;EADiB;AApDmC;AAyDxD,MAAM5D,uBAAN,SAAsCqB,iBAAtC,CAAwD;EACtD,CAAA8Z,MAAA,GAAU,IAAV;EAEA5Z,YAAYnD,UAAZ,EAAwB;IACtB,MAAMA,UAAN,EAAkB;MAAEoD,YAAA,EAAc,IAAhB;MAAsBC,YAAA,EAAc;IAApC,CAAlB;EADsB;EAIxBwI,OAAA,EAAS;IACP,KAAK1H,SAAL,CAAeoB,SAAf,CAAyBC,GAAzB,CAA6B,kBAA7B;IAKA,MAAMtF,IAAA,GAAO,KAAKA,IAAlB;IACA,MAAM;MAAEN,KAAF;MAASC;IAAT,IAAoBH,WAAA,CAAYQ,IAAA,CAAKP,IAAjB,CAA1B;IACA,MAAMoL,GAAA,GAAM,KAAKnH,UAAL,CAAgB7D,MAAhB,CACVH,KADU,EAEVC,MAFU,EAGa,IAHb,CAAZ;IASA,MAAMuG,WAAA,GAAclG,IAAA,CAAKiG,WAAL,CAAiBvG,KAArC;IACA,MAAMmd,MAAA,GAAU,KAAK,CAAAA,MAAL,GACd,KAAKnZ,UAAL,CAAgBmB,aAAhB,CAA8B,aAA9B,CADF;IAEAgY,MAAA,CAAO/X,YAAP,CAAoB,IAApB,EAA0BpF,KAAA,GAAQ,CAAlC;IACAmd,MAAA,CAAO/X,YAAP,CAAoB,IAApB,EAA0BnF,MAAA,GAAS,CAAnC;IACAkd,MAAA,CAAO/X,YAAP,CAAoB,IAApB,EAA0BpF,KAAA,GAAQ,CAAR,GAAYwG,WAAA,GAAc,CAApD;IACA2W,MAAA,CAAO/X,YAAP,CAAoB,IAApB,EAA0BnF,MAAA,GAAS,CAAT,GAAauG,WAAA,GAAc,CAArD;IAGA2W,MAAA,CAAO/X,YAAP,CAAoB,cAApB,EAAoCoB,WAAA,IAAe,CAAnD;IACA2W,MAAA,CAAO/X,YAAP,CAAoB,QAApB,EAA8B,aAA9B;IACA+X,MAAA,CAAO/X,YAAP,CAAoB,MAApB,EAA4B,aAA5B;IAEA+F,GAAA,CAAIE,MAAJ,CAAW8R,MAAX;IACA,KAAK5Y,SAAL,CAAe8G,MAAf,CAAsBF,GAAtB;IAIA,IAAI,CAAC7K,IAAA,CAAKmF,QAAN,IAAkB,KAAKV,YAA3B,EAAyC;MACvC,KAAK4G,YAAL;IADuC;IAIzC,OAAO,KAAKpH,SAAZ;EAvCO;EA0CT0I,0BAAA,EAA4B;IAC1B,OAAO,KAAK,CAAAkQ,MAAZ;EAD0B;EAI5BjQ,iBAAA,EAAmB;IACjB,KAAK3I,SAAL,CAAeoB,SAAf,CAAyBC,GAAzB,CAA6B,eAA7B;EADiB;AArDmC;AA0DxD,MAAM1D,yBAAN,SAAwCmB,iBAAxC,CAA0D;EACxD,CAAA+Z,QAAA,GAAY,IAAZ;EAEA7Z,YAAYnD,UAAZ,EAAwB;IACtB,MAAMA,UAAN,EAAkB;MAAEoD,YAAA,EAAc,IAAhB;MAAsBC,YAAA,EAAc;IAApC,CAAlB;IAEA,KAAK4Z,kBAAL,GAA0B,oBAA1B;IACA,KAAKC,cAAL,GAAsB,cAAtB;EAJsB;EAOxBrR,OAAA,EAAS;IACP,KAAK1H,SAAL,CAAeoB,SAAf,CAAyBC,GAAzB,CAA6B,KAAKyX,kBAAlC;IAKA,MAAM/c,IAAA,GAAO,KAAKA,IAAlB;IACA,MAAM;MAAEN,KAAF;MAASC;IAAT,IAAoBH,WAAA,CAAYQ,IAAA,CAAKP,IAAjB,CAA1B;IACA,MAAMoL,GAAA,GAAM,KAAKnH,UAAL,CAAgB7D,MAAhB,CACVH,KADU,EAEVC,MAFU,EAGa,IAHb,CAAZ;IAUA,IAAIsd,MAAA,GAAS,EAAb;IACA,WAAWC,UAAX,IAAyBld,IAAA,CAAKmd,QAA9B,EAAwC;MACtC,MAAM7gB,CAAA,GAAI4gB,UAAA,CAAW5gB,CAAX,GAAe0D,IAAA,CAAKP,IAAL,CAAU,CAAV,CAAzB;MACA,MAAM/C,CAAA,GAAIsD,IAAA,CAAKP,IAAL,CAAU,CAAV,IAAeyd,UAAA,CAAWxgB,CAApC;MACAugB,MAAA,CAAO9R,IAAP,CAAY7O,CAAA,GAAI,GAAJ,GAAUI,CAAtB;IAHsC;IAKxCugB,MAAA,GAASA,MAAA,CAAOvf,IAAP,CAAY,GAAZ,CAAT;IAEA,MAAMof,QAAA,GAAY,KAAK,CAAAA,QAAL,GAAiB,KAAKpZ,UAAL,CAAgBmB,aAAhB,CACjC,KAAKmY,cAD4B,CAAnC;IAGAF,QAAA,CAAShY,YAAT,CAAsB,QAAtB,EAAgCmY,MAAhC;IAGAH,QAAA,CAAShY,YAAT,CAAsB,cAAtB,EAAsC9E,IAAA,CAAKiG,WAAL,CAAiBvG,KAAjB,IAA0B,CAAhE;IACAod,QAAA,CAAShY,YAAT,CAAsB,QAAtB,EAAgC,aAAhC;IACAgY,QAAA,CAAShY,YAAT,CAAsB,MAAtB,EAA8B,aAA9B;IAEA+F,GAAA,CAAIE,MAAJ,CAAW+R,QAAX;IACA,KAAK7Y,SAAL,CAAe8G,MAAf,CAAsBF,GAAtB;IAIA,IAAI,CAAC7K,IAAA,CAAKmF,QAAN,IAAkB,KAAKV,YAA3B,EAAyC;MACvC,KAAK4G,YAAL;IADuC;IAIzC,OAAO,KAAKpH,SAAZ;EA7CO;EAgDT0I,0BAAA,EAA4B;IAC1B,OAAO,KAAK,CAAAmQ,QAAZ;EAD0B;EAI5BlQ,iBAAA,EAAmB;IACjB,KAAK3I,SAAL,CAAeoB,SAAf,CAAyBC,GAAzB,CAA6B,eAA7B;EADiB;AA9DqC;AAmE1D,MAAMpD,wBAAN,SAAuCN,yBAAvC,CAAiE;EAC/DqB,YAAYnD,UAAZ,EAAwB;IAEtB,MAAMA,UAAN;IAEA,KAAKid,kBAAL,GAA0B,mBAA1B;IACA,KAAKC,cAAL,GAAsB,aAAtB;EALsB;AADuC;AAUjE,MAAMlb,sBAAN,SAAqCiB,iBAArC,CAAuD;EACrDE,YAAYnD,UAAZ,EAAwB;IACtB,MAAMA,UAAN,EAAkB;MAAEoD,YAAA,EAAc,IAAhB;MAAsBC,YAAA,EAAc;IAApC,CAAlB;EADsB;EAIxBwI,OAAA,EAAS;IACP,KAAK1H,SAAL,CAAeoB,SAAf,CAAyBC,GAAzB,CAA6B,iBAA7B;IAEA,IAAI,CAAC,KAAKtF,IAAL,CAAUmF,QAAX,IAAuB,KAAKV,YAAhC,EAA8C;MAC5C,KAAK4G,YAAL;IAD4C;IAG9C,OAAO,KAAKpH,SAAZ;EANO;AAL4C;AAevD,MAAMjC,oBAAN,SAAmCe,iBAAnC,CAAqD;EACnD,CAAAqa,SAAA,GAAa,EAAb;EAEAna,YAAYnD,UAAZ,EAAwB;IACtB,MAAMA,UAAN,EAAkB;MAAEoD,YAAA,EAAc,IAAhB;MAAsBC,YAAA,EAAc;IAApC,CAAlB;IAEA,KAAK4Z,kBAAL,GAA0B,eAA1B;IAIA,KAAKC,cAAL,GAAsB,cAAtB;IACA,KAAK9P,oBAAL,GAA4B7O,yBAAA,CAAqB0D,GAAjD;EARsB;EAWxB4J,OAAA,EAAS;IACP,KAAK1H,SAAL,CAAeoB,SAAf,CAAyBC,GAAzB,CAA6B,KAAKyX,kBAAlC;IAIA,MAAM/c,IAAA,GAAO,KAAKA,IAAlB;IACA,MAAM;MAAEN,KAAF;MAASC;IAAT,IAAoBH,WAAA,CAAYQ,IAAA,CAAKP,IAAjB,CAA1B;IACA,MAAMoL,GAAA,GAAM,KAAKnH,UAAL,CAAgB7D,MAAhB,CACVH,KADU,EAEVC,MAFU,EAGa,IAHb,CAAZ;IAMA,WAAW0d,OAAX,IAAsBrd,IAAA,CAAKsd,QAA3B,EAAqC;MAKnC,IAAIL,MAAA,GAAS,EAAb;MACA,WAAWC,UAAX,IAAyBG,OAAzB,EAAkC;QAChC,MAAM/gB,CAAA,GAAI4gB,UAAA,CAAW5gB,CAAX,GAAe0D,IAAA,CAAKP,IAAL,CAAU,CAAV,CAAzB;QACA,MAAM/C,CAAA,GAAIsD,IAAA,CAAKP,IAAL,CAAU,CAAV,IAAeyd,UAAA,CAAWxgB,CAApC;QACAugB,MAAA,CAAO9R,IAAP,CAAY,GAAG7O,CAAE,IAAGI,CAAR,EAAZ;MAHgC;MAKlCugB,MAAA,GAASA,MAAA,CAAOvf,IAAP,CAAY,GAAZ,CAAT;MAEA,MAAMof,QAAA,GAAW,KAAKpZ,UAAL,CAAgBmB,aAAhB,CAA8B,KAAKmY,cAAnC,CAAjB;MACA,KAAK,CAAAI,SAAL,CAAgBjS,IAAhB,CAAqB2R,QAArB;MACAA,QAAA,CAAShY,YAAT,CAAsB,QAAtB,EAAgCmY,MAAhC;MAGAH,QAAA,CAAShY,YAAT,CAAsB,cAAtB,EAAsC9E,IAAA,CAAKiG,WAAL,CAAiBvG,KAAjB,IAA0B,CAAhE;MACAod,QAAA,CAAShY,YAAT,CAAsB,QAAtB,EAAgC,aAAhC;MACAgY,QAAA,CAAShY,YAAT,CAAsB,MAAtB,EAA8B,aAA9B;MAIA,IAAI,CAAC9E,IAAA,CAAKmF,QAAN,IAAkB,KAAKV,YAA3B,EAAyC;QACvC,KAAK4G,YAAL;MADuC;MAIzCR,GAAA,CAAIE,MAAJ,CAAW+R,QAAX;IA5BmC;IA+BrC,KAAK7Y,SAAL,CAAe8G,MAAf,CAAsBF,GAAtB;IACA,OAAO,KAAK5G,SAAZ;EA7CO;EAgDT0I,0BAAA,EAA4B;IAC1B,OAAO,KAAK,CAAAyQ,SAAZ;EAD0B;EAI5BxQ,iBAAA,EAAmB;IACjB,KAAK3I,SAAL,CAAeoB,SAAf,CAAyBC,GAAzB,CAA6B,eAA7B;EADiB;AAlEgC;AAuErD,MAAMlD,0BAAN,SAAyCW,iBAAzC,CAA2D;EACzDE,YAAYnD,UAAZ,EAAwB;IACtB,MAAMA,UAAN,EAAkB;MAChBoD,YAAA,EAAc,IADE;MAEhBC,YAAA,EAAc,IAFE;MAGhBC,oBAAA,EAAsB;IAHN,CAAlB;EADsB;EAQxBuI,OAAA,EAAS;IACP,IAAI,CAAC,KAAK3L,IAAL,CAAUmF,QAAX,IAAuB,KAAKV,YAAhC,EAA8C;MAC5C,KAAK4G,YAAL;IAD4C;IAI9C,KAAKpH,SAAL,CAAeoB,SAAf,CAAyBC,GAAzB,CAA6B,qBAA7B;IACA,OAAO,KAAKrB,SAAZ;EANO;AATgD;AAmB3D,MAAM3B,0BAAN,SAAyCS,iBAAzC,CAA2D;EACzDE,YAAYnD,UAAZ,EAAwB;IACtB,MAAMA,UAAN,EAAkB;MAChBoD,YAAA,EAAc,IADE;MAEhBC,YAAA,EAAc,IAFE;MAGhBC,oBAAA,EAAsB;IAHN,CAAlB;EADsB;EAQxBuI,OAAA,EAAS;IACP,IAAI,CAAC,KAAK3L,IAAL,CAAUmF,QAAX,IAAuB,KAAKV,YAAhC,EAA8C;MAC5C,KAAK4G,YAAL;IAD4C;IAI9C,KAAKpH,SAAL,CAAeoB,SAAf,CAAyBC,GAAzB,CAA6B,qBAA7B;IACA,OAAO,KAAKrB,SAAZ;EANO;AATgD;AAmB3D,MAAMzB,yBAAN,SAAwCO,iBAAxC,CAA0D;EACxDE,YAAYnD,UAAZ,EAAwB;IACtB,MAAMA,UAAN,EAAkB;MAChBoD,YAAA,EAAc,IADE;MAEhBC,YAAA,EAAc,IAFE;MAGhBC,oBAAA,EAAsB;IAHN,CAAlB;EADsB;EAQxBuI,OAAA,EAAS;IACP,IAAI,CAAC,KAAK3L,IAAL,CAAUmF,QAAX,IAAuB,KAAKV,YAAhC,EAA8C;MAC5C,KAAK4G,YAAL;IAD4C;IAI9C,KAAKpH,SAAL,CAAeoB,SAAf,CAAyBC,GAAzB,CAA6B,oBAA7B;IACA,OAAO,KAAKrB,SAAZ;EANO;AAT+C;AAmB1D,MAAMvB,0BAAN,SAAyCK,iBAAzC,CAA2D;EACzDE,YAAYnD,UAAZ,EAAwB;IACtB,MAAMA,UAAN,EAAkB;MAChBoD,YAAA,EAAc,IADE;MAEhBC,YAAA,EAAc,IAFE;MAGhBC,oBAAA,EAAsB;IAHN,CAAlB;EADsB;EAQxBuI,OAAA,EAAS;IACP,IAAI,CAAC,KAAK3L,IAAL,CAAUmF,QAAX,IAAuB,KAAKV,YAAhC,EAA8C;MAC5C,KAAK4G,YAAL;IAD4C;IAI9C,KAAKpH,SAAL,CAAeoB,SAAf,CAAyBC,GAAzB,CAA6B,qBAA7B;IACA,OAAO,KAAKrB,SAAZ;EANO;AATgD;AAmB3D,MAAMrB,sBAAN,SAAqCG,iBAArC,CAAuD;EACrDE,YAAYnD,UAAZ,EAAwB;IACtB,MAAMA,UAAN,EAAkB;MAAEoD,YAAA,EAAc,IAAhB;MAAsBC,YAAA,EAAc;IAApC,CAAlB;EADsB;EAIxBwI,OAAA,EAAS;IACP,KAAK1H,SAAL,CAAeoB,SAAf,CAAyBC,GAAzB,CAA6B,iBAA7B;IAEA,IAAI,CAAC,KAAKtF,IAAL,CAAUmF,QAAX,IAAuB,KAAKV,YAAhC,EAA8C;MAC5C,KAAK4G,YAAL;IAD4C;IAG9C,OAAO,KAAKpH,SAAZ;EANO;AAL4C;AAevD,MAAMnB,+BAAN,SAA8CC,iBAA9C,CAAgE;EAC9D,CAAAsX,OAAA,GAAW,IAAX;EAEApX,YAAYnD,UAAZ,EAAwB;IACtB,MAAMA,UAAN,EAAkB;MAAEoD,YAAA,EAAc;IAAhB,CAAlB;IAEA,MAAM;MAAEoM,QAAF;MAAYD;IAAZ,IAAwB,KAAKrP,IAAL,CAAUud,IAAxC;IACA,KAAKjO,QAAL,GAAgBvQ,oCAAA,CAAmBuQ,QAAnB,EAAmD,IAAnD,CAAhB;IACA,KAAKD,OAAL,GAAeA,OAAf;IAEA,KAAK/L,WAAL,CAAiBgK,QAAjB,EAA2BC,QAA3B,CAAoC,0BAApC,EAAgE;MAC9DC,MAAA,EAAQ,IADsD;MAE9D8B,QAF8D;MAG9DD;IAH8D,CAAhE;EAPsB;EAcxB1D,OAAA,EAAS;IACP,KAAK1H,SAAL,CAAeoB,SAAf,CAAyBC,GAAzB,CAA6B,0BAA7B;IAEA,MAAM;MAAErB,SAAF;MAAajE;IAAb,IAAsB,IAA5B;IACA,IAAIqa,OAAJ;IACA,IAAIra,IAAA,CAAK8T,aAAL,IAAsB9T,IAAA,CAAKwd,SAAL,KAAmB,CAA7C,EAAgD;MAC9CnD,OAAA,GAAUzV,QAAA,CAASC,aAAT,CAAuB,KAAvB,CAAV;IAD8C,CAAhD,MAEO;MAMLwV,OAAA,GAAUzV,QAAA,CAASC,aAAT,CAAuB,KAAvB,CAAV;MACAwV,OAAA,CAAQvJ,GAAR,GAAc,GAAG,KAAKtN,kBAAmB,cACvC,aAAaia,IAAb,CAAkBzd,IAAA,CAAKuJ,IAAvB,IAA+B,WAA/B,GAA6C,SAC9C,MAFD;MAIA,IAAIvJ,IAAA,CAAKwd,SAAL,IAAkBxd,IAAA,CAAKwd,SAAL,GAAiB,CAAvC,EAA0C;QACxCnD,OAAA,CAAQpV,KAAR,GAAiB,mBAAkBlJ,IAAA,CAAKsX,KAAL,CACjCrT,IAAA,CAAKwd,SAAL,GAAiB,GADgB,CAEjC,KAFF;MADwC;IAXrC;IAqBPnD,OAAA,CAAQhN,gBAAR,CAAyB,UAAzB,EAAqC,KAAK,CAAAqQ,QAAL,CAAe9D,IAAf,CAAoB,IAApB,CAArC;IACA,KAAK,CAAAS,OAAL,GAAgBA,OAAhB;IAEA,MAAM;MAAE7I;IAAF,IAAYhT,gBAAA,CAAY+S,QAA9B;IACAtN,SAAA,CAAUoJ,gBAAV,CAA2B,SAA3B,EAAsCsQ,GAAA,IAAO;MAC3C,IAAIA,GAAA,CAAIzJ,GAAJ,KAAY,OAAZ,KAAwB1C,KAAA,GAAQmM,GAAA,CAAIlM,OAAZ,GAAsBkM,GAAA,CAAIjM,OAA1B,CAA5B,EAAgE;QAC9D,KAAK,CAAAgM,QAAL;MAD8D;IADrB,CAA7C;IAMA,IAAI,CAAC1d,IAAA,CAAKmF,QAAN,IAAkB,KAAKV,YAA3B,EAAyC;MACvC,KAAK4G,YAAL;IADuC,CAAzC,MAEO;MACLgP,OAAA,CAAQhV,SAAR,CAAkBC,GAAlB,CAAsB,kBAAtB;IADK;IAIPrB,SAAA,CAAU8G,MAAV,CAAiBsP,OAAjB;IACA,OAAOpW,SAAP;EA7CO;EAgDT0I,0BAAA,EAA4B;IAC1B,OAAO,KAAK,CAAA0N,OAAZ;EAD0B;EAI5BzN,iBAAA,EAAmB;IACjB,KAAK3I,SAAL,CAAeoB,SAAf,CAAyBC,GAAzB,CAA6B,eAA7B;EADiB;EAOnB,CAAAoY,SAAA,EAAY;IACV,KAAKna,eAAL,EAAsB6L,kBAAtB,CAAyC,KAAKC,OAA9C,EAAuD,KAAKC,QAA5D;EADU;AA5EkD;AAwGhE,MAAMsO,eAAN,CAAsB;EACpB,CAAAC,oBAAA,GAAwB,IAAxB;EAEA,CAAAC,mBAAA,GAAuB,IAAvB;EAEA,CAAAC,mBAAA,GAAuB,IAAIvO,GAAJ,EAAvB;EAEAvM,YAAY;IACVyI,GADU;IAEVmS,oBAFU;IAGVC,mBAHU;IAIVpZ,IAJU;IAKVC;EALU,CAAZ,EAMG;IACD,KAAK+G,GAAL,GAAWA,GAAX;IACA,KAAK,CAAAmS,oBAAL,GAA6BA,oBAA7B;IACA,KAAK,CAAAC,mBAAL,GAA4BA,mBAA5B;IACA,KAAKpZ,IAAL,GAAYA,IAAZ;IACA,KAAKC,QAAL,GAAgBA,QAAhB;IACA,KAAKO,MAAL,GAAc,CAAd;EANC;EAqBH,CAAA8Y,cAAepU,OAAf,EAAwB7E,EAAxB,EAA4B;IAC1B,MAAMkZ,cAAA,GAAiBrU,OAAA,CAAQsU,UAAR,IAAsBtU,OAA7C;IACAqU,cAAA,CAAelZ,EAAf,GAAoB,GAAGzG,qBAAH,GAAsByG,EAAtB,EAApB;IAEA,KAAK2G,GAAL,CAASX,MAAT,CAAgBnB,OAAhB;IACA,KAAK,CAAAiU,oBAAL,EAA4BM,gBAA5B,CACE,KAAKzS,GADP,EAEE9B,OAFF,EAGEqU,cAHF,EAIsB,KAJtB;EAL0B;EAmB5B,MAAMtS,MAANA,CAAayS,MAAb,EAAqB;IACnB,MAAM;MAAEC;IAAF,IAAkBD,MAAxB;IACA,MAAM/a,KAAA,GAAQ,KAAKqI,GAAnB;IACAzM,oCAAA,CAAmBoE,KAAnB,EAA0B,KAAKsB,QAA/B;IAEA,MAAM2Z,eAAA,GAAkB,IAAI9O,GAAJ,EAAxB;IACA,MAAM+O,aAAA,GAAgB;MACpBve,IAAA,EAAM,IADc;MAEpBqD,KAFoB;MAGpBC,WAAA,EAAa8a,MAAA,CAAO9a,WAHA;MAIpBC,eAAA,EAAiB6a,MAAA,CAAO7a,eAJJ;MAKpBC,kBAAA,EAAoB4a,MAAA,CAAO5a,kBAAP,IAA6B,EAL7B;MAMpBC,WAAA,EAAa2a,MAAA,CAAO3a,WAAP,KAAuB,KANhB;MAOpBC,UAAA,EAAY,IAAI5E,2BAAJ,EAPQ;MAQpB6E,iBAAA,EAAmBya,MAAA,CAAOza,iBAAP,IAA4B,IAAIzE,oCAAJ,EAR3B;MASpB0E,eAAA,EAAiBwa,MAAA,CAAOxa,eAAP,KAA2B,IATxB;MAUpBC,YAAA,EAAcua,MAAA,CAAOva,YAVD;MAWpBE,YAAA,EAAcqa,MAAA,CAAOra,YAXD;MAYpBC,MAAA,EAAQ,IAZY;MAapByH,QAAA,EAAU;IAbU,CAAtB;IAgBA,WAAWzL,IAAX,IAAmBqe,WAAnB,EAAgC;MAC9B,IAAIre,IAAA,CAAKwe,MAAT,EAAiB;QACf;MADe;MAGjB,MAAMC,iBAAA,GAAoBze,IAAA,CAAKC,cAAL,KAAwB1B,mBAAA,CAAe0C,KAAjE;MACA,IAAI,CAACwd,iBAAL,EAAwB;QACtB,MAAM;UAAE/e,KAAF;UAASC;QAAT,IAAoBH,WAAA,CAAYQ,IAAA,CAAKP,IAAjB,CAA1B;QACA,IAAIC,KAAA,IAAS,CAAT,IAAcC,MAAA,IAAU,CAA5B,EAA+B;UAC7B;QAD6B;MAFT,CAAxB,MAKO;QACL,MAAM8L,QAAA,GAAW6S,eAAA,CAAgB7O,GAAhB,CAAoBzP,IAAA,CAAK+E,EAAzB,CAAjB;QACA,IAAI,CAAC0G,QAAL,EAAe;UAEb;QAFa;QAIf8S,aAAA,CAAc9S,QAAd,GAAyBA,QAAzB;MANK;MAQP8S,aAAA,CAAcve,IAAd,GAAqBA,IAArB;MACA,MAAM4J,OAAA,GAAUhK,wBAAA,CAAyBC,MAAzB,CAAgC0e,aAAhC,CAAhB;MAEA,IAAI,CAAC3U,OAAA,CAAQ1G,YAAb,EAA2B;QACzB;MADyB;MAI3B,IAAI,CAACub,iBAAD,IAAsBze,IAAA,CAAKmF,QAA/B,EAAyC;QACvC,MAAMsG,QAAA,GAAW6S,eAAA,CAAgB7O,GAAhB,CAAoBzP,IAAA,CAAKmF,QAAzB,CAAjB;QACA,IAAI,CAACsG,QAAL,EAAe;UACb6S,eAAA,CAAgBI,GAAhB,CAAoB1e,IAAA,CAAKmF,QAAzB,EAAmC,CAACyE,OAAD,CAAnC;QADa,CAAf,MAEO;UACL6B,QAAA,CAASN,IAAT,CAAcvB,OAAd;QADK;MAJgC;MASzC,IAAIA,OAAA,CAAQsD,oBAAR,GAA+B,CAAnC,EAAsC;QACpC,KAAK,CAAA6Q,mBAAL,CAA0BW,GAA1B,CAA8B9U,OAAA,CAAQ5J,IAAR,CAAa+E,EAA3C,EAA+C6E,OAA/C;MADoC;MAItC,MAAM+U,QAAA,GAAW/U,OAAA,CAAQ+B,MAAR,EAAjB;MACA,IAAI3L,IAAA,CAAKgI,MAAT,EAAiB;QACf2W,QAAA,CAAS1Z,KAAT,CAAegD,UAAf,GAA4B,QAA5B;MADe;MAGjB,KAAK,CAAA+V,aAAL,CAAoBW,QAApB,EAA8B3e,IAAA,CAAK+E,EAAnC;IA1C8B;IA6ChC,KAAK,CAAA6Z,sBAAL;EAnEmB;EA4ErBC,OAAO;IAAEla;EAAF,CAAP,EAAqB;IACnB,MAAMtB,KAAA,GAAQ,KAAKqI,GAAnB;IACA,KAAK/G,QAAL,GAAgBA,QAAhB;IACA1F,oCAAA,CAAmBoE,KAAnB,EAA0B;MAAEuC,QAAA,EAAUjB,QAAA,CAASiB;IAArB,CAA1B;IAEA,KAAK,CAAAgZ,sBAAL;IACAvb,KAAA,CAAM2E,MAAN,GAAe,KAAf;EANmB;EASrB,CAAA4W,uBAAA,EAA0B;IACxB,IAAI,CAAC,KAAK,CAAAd,mBAAV,EAAgC;MAC9B;IAD8B;IAGhC,MAAMza,KAAA,GAAQ,KAAKqI,GAAnB;IACA,WAAW,CAAC3G,EAAD,EAAK+Z,MAAL,CAAX,IAA2B,KAAK,CAAAhB,mBAAhC,EAAsD;MACpD,MAAMlU,OAAA,GAAUvG,KAAA,CAAM8I,aAAN,CAAqB,wBAAuBpH,EAAG,IAA/C,CAAhB;MACA,IAAI,CAAC6E,OAAL,EAAc;QACZ;MADY;MAId,MAAM;QAAEsU;MAAF,IAAiBtU,OAAvB;MACA,IAAI,CAACsU,UAAL,EAAiB;QACftU,OAAA,CAAQmB,MAAR,CAAe+T,MAAf;MADe,CAAjB,MAEO,IAAIZ,UAAA,CAAW7M,QAAX,KAAwB,QAA5B,EAAsC;QAC3C6M,UAAA,CAAWa,WAAX,CAAuBD,MAAvB;MAD2C,CAAtC,MAEA;QACLZ,UAAA,CAAWhF,MAAX,CAAkB4F,MAAlB;MADK;IAX6C;IAetD,KAAK,CAAAhB,mBAAL,CAA0BhF,KAA1B;EApBwB;EAuB1BkG,uBAAA,EAAyB;IACvB,OAAOlS,KAAA,CAAMmS,IAAN,CAAW,KAAK,CAAAlB,mBAAL,CAA0B5N,MAA1B,EAAX,CAAP;EADuB;EAIzB+O,sBAAsBna,EAAtB,EAA0B;IACxB,OAAO,KAAK,CAAAgZ,mBAAL,CAA0BtO,GAA1B,CAA8B1K,EAA9B,CAAP;EADwB;AArKN;;;;;;;;;;;;;;;;ACzzFtB;AACA;AACA;AAEA,MAAMua,iBAAA,GAAoB9V,MAAA,CAAO+V,MAAP,CAAc;EACtC/hB,GAAA,EAAK,IADiC;EAEtCgiB,IAAA,EAAM,EAFgC;EAGtCC,QAAA,EAAUnK;AAH4B,CAAd,CAA1B;AASA,MAAMpW,iBAAN,CAAwB;EACtB,CAAAwgB,QAAA,GAAY,KAAZ;EAEA,CAAArP,OAAA,GAAW,IAAIb,GAAJ,EAAX;EAEAvM,YAAA,EAAc;IAKZ,KAAK0c,aAAL,GAAqB,IAArB;IACA,KAAKC,eAAL,GAAuB,IAAvB;IACA,KAAKC,kBAAL,GAA0B,IAA1B;EAPY;EAgBdzL,SAASF,GAAT,EAAczD,YAAd,EAA4B;IAC1B,MAAMD,KAAA,GAAQ,KAAK,CAAAH,OAAL,CAAcZ,GAAd,CAAkByE,GAAlB,CAAd;IACA,IAAI1D,KAAA,KAAU8E,SAAd,EAAyB;MACvB,OAAO7E,YAAP;IADuB;IAIzB,OAAOjH,MAAA,CAAOsW,MAAP,CAAcrP,YAAd,EAA4BD,KAA5B,CAAP;EAN0B;EAc5B1G,YAAYoK,GAAZ,EAAiB;IACf,OAAO,KAAK,CAAA7D,OAAL,CAAcZ,GAAd,CAAkByE,GAAlB,CAAP;EADe;EAQjB8D,OAAO9D,GAAP,EAAY;IACV,KAAK,CAAA7D,OAAL,CAAc0P,MAAd,CAAqB7L,GAArB;IAEA,IAAI,KAAK,CAAA7D,OAAL,CAAciH,IAAd,KAAuB,CAA3B,EAA8B;MAC5B,KAAK0I,aAAL;IAD4B;IAI9B,IAAI,OAAO,KAAKH,kBAAZ,KAAmC,UAAvC,EAAmD;MACjD,WAAWrP,KAAX,IAAoB,KAAK,CAAAH,OAAL,CAAcF,MAAd,EAApB,EAA4C;QAC1C,IAAIK,KAAA,YAAiB4O,+DAArB,EAAuC;UACrC;QADqC;MADG;MAK5C,KAAKS,kBAAL,CAAwB,IAAxB;IANiD;EAPzC;EAsBZ/X,SAASoM,GAAT,EAAc1D,KAAd,EAAqB;IACnB,MAAMyP,GAAA,GAAM,KAAK,CAAA5P,OAAL,CAAcZ,GAAd,CAAkByE,GAAlB,CAAZ;IACA,IAAIwL,QAAA,GAAW,KAAf;IACA,IAAIO,GAAA,KAAQ3K,SAAZ,EAAuB;MACrB,WAAW,CAAC4K,KAAD,EAAQC,GAAR,CAAX,IAA2B3W,MAAA,CAAOQ,OAAP,CAAewG,KAAf,CAA3B,EAAkD;QAChD,IAAIyP,GAAA,CAAIC,KAAJ,MAAeC,GAAnB,EAAwB;UACtBT,QAAA,GAAW,IAAX;UACAO,GAAA,CAAIC,KAAJ,IAAaC,GAAb;QAFsB;MADwB;IAD7B,CAAvB,MAOO;MACLT,QAAA,GAAW,IAAX;MACA,KAAK,CAAArP,OAAL,CAAcqO,GAAd,CAAkBxK,GAAlB,EAAuB1D,KAAvB;IAFK;IAIP,IAAIkP,QAAJ,EAAc;MACZ,KAAK,CAAAU,WAAL;IADY;IAId,IACE5P,KAAA,YAAiB4O,+DAAjB,IACA,OAAO,KAAKS,kBAAZ,KAAmC,UAFrC,EAGE;MACA,KAAKA,kBAAL,CAAwBrP,KAAA,CAAMvN,WAAN,CAAkBod,KAA1C;IADA;EArBiB;EA+BrBjU,IAAI8H,GAAJ,EAAS;IACP,OAAO,KAAK,CAAA7D,OAAL,CAAcjE,GAAd,CAAkB8H,GAAlB,CAAP;EADO;EAOToM,OAAA,EAAS;IACP,OAAO,KAAK,CAAAjQ,OAAL,CAAciH,IAAd,GAAqB,CAArB,GAAyB6H,8DAAA,CAAc,KAAK,CAAA9O,OAAnB,CAAzB,GAAwD,IAA/D;EADO;EAOTkQ,OAAON,GAAP,EAAY;IACV,WAAW,CAAC/L,GAAD,EAAMiM,GAAN,CAAX,IAAyB3W,MAAA,CAAOQ,OAAP,CAAeiW,GAAf,CAAzB,EAA8C;MAC5C,KAAKnY,QAAL,CAAcoM,GAAd,EAAmBiM,GAAnB;IAD4C;EADpC;EAMZ,IAAI7I,IAAJA,CAAA,EAAW;IACT,OAAO,KAAK,CAAAjH,OAAL,CAAciH,IAArB;EADS;EAIX,CAAA8I,YAAA,EAAe;IACb,IAAI,CAAC,KAAK,CAAAV,QAAV,EAAqB;MACnB,KAAK,CAAAA,QAAL,GAAiB,IAAjB;MACA,IAAI,OAAO,KAAKC,aAAZ,KAA8B,UAAlC,EAA8C;QAC5C,KAAKA,aAAL;MAD4C;IAF3B;EADR;EASfK,cAAA,EAAgB;IACd,IAAI,KAAK,CAAAN,QAAT,EAAoB;MAClB,KAAK,CAAAA,QAAL,GAAiB,KAAjB;MACA,IAAI,OAAO,KAAKE,eAAZ,KAAgC,UAApC,EAAgD;QAC9C,KAAKA,eAAL;MAD8C;IAF9B;EADN;EAYhB,IAAIxX,KAAJA,CAAA,EAAY;IACV,OAAO,IAAIoY,sBAAJ,CAA2B,IAA3B,CAAP;EADU;EAQZ,IAAIC,YAAJA,CAAA,EAAmB;IACjB,IAAI,KAAK,CAAApQ,OAAL,CAAciH,IAAd,KAAuB,CAA3B,EAA8B;MAC5B,OAAOgI,iBAAP;IAD4B;IAG9B,MAAM9hB,GAAA,GAAM,IAAIgS,GAAJ,EAAZ;MACEgQ,IAAA,GAAO,IAAIH,kEAAJ,EADT;MAEEI,QAAA,GAAW,EAFb;IAGA,MAAMiB,OAAA,GAAUlX,MAAA,CAAO3J,MAAP,CAAc,IAAd,CAAhB;IACA,IAAI8gB,SAAA,GAAY,KAAhB;IAEA,WAAW,CAACzM,GAAD,EAAMiM,GAAN,CAAX,IAAyB,KAAK,CAAA9P,OAA9B,EAAwC;MACtC,MAAMuQ,UAAA,GACJT,GAAA,YAAef,+DAAf,GACIe,GAAA,CAAIU,SAAJ,CAAmC,KAAnC,EAA0CH,OAA1C,CADJ,GAEIP,GAHN;MAIA,IAAIS,UAAJ,EAAgB;QACdpjB,GAAA,CAAIkhB,GAAJ,CAAQxK,GAAR,EAAa0M,UAAb;QAEApB,IAAA,CAAKX,MAAL,CAAY,GAAG3K,GAAI,IAAGlD,IAAA,CAAKC,SAAL,CAAe2P,UAAf,CAAV,EAAZ;QACAD,SAAA,KAAc,CAAC,CAACC,UAAA,CAAWE,MAA3B;MAJc;IALsB;IAaxC,IAAIH,SAAJ,EAAe;MAGb,WAAWnQ,KAAX,IAAoBhT,GAAA,CAAI2S,MAAJ,EAApB,EAAkC;QAChC,IAAIK,KAAA,CAAMsQ,MAAV,EAAkB;UAChBrB,QAAA,CAAStU,IAAT,CAAcqF,KAAA,CAAMsQ,MAApB;QADgB;MADc;IAHrB;IAUf,OAAOtjB,GAAA,CAAI8Z,IAAJ,GAAW,CAAX,GACH;MAAE9Z,GAAF;MAAOgiB,IAAA,EAAMA,IAAA,CAAKuB,SAAL,EAAb;MAA+BtB;IAA/B,CADG,GAEHH,iBAFJ;EAjCiB;AArJG;AAiMxB,MAAMkB,sBAAN,SAAqCthB,iBAArC,CAAuD;EACrD,CAAAuhB,YAAA;EAEAxd,YAAYe,MAAZ,EAAoB;IAClB;IACA,MAAM;MAAExG,GAAF;MAAOgiB,IAAP;MAAaC;IAAb,IAA0Bzb,MAAA,CAAOyc,YAAvC;IAEA,MAAMO,KAAA,GAAQC,eAAA,CAAgBzjB,GAAhB,EAAqBiiB,QAAA,GAAW;MAAEA;IAAF,CAAX,GAA0B,IAA/C,CAAd;IAEA,KAAK,CAAAgB,YAAL,GAAqB;MAAEjjB,GAAA,EAAKwjB,KAAP;MAAcxB,IAAd;MAAoBC;IAApB,CAArB;EANkB;EAapB,IAAIrX,KAAJA,CAAA,EAAY;IACVzJ,4DAAA,CAAY,8CAAZ;EADU;EAQZ,IAAI8hB,YAAJA,CAAA,EAAmB;IACjB,OAAO,KAAK,CAAAA,YAAZ;EADiB;AAxBkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1MvD;AAsBA;AAKA;AAWA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,MAAMmD,wBAAA,GAA2B,KAAjC;AACA,MAAMC,2BAAA,GAA8B,GAApC;AACA,MAAMC,uBAAA,GAA0B,IAAhC;AAEA,MAAMC,oBAAA,GAC2DtC,qDAA/D,GACIqB,iEADJ,GAEIX,+DAHN;AAIA,MAAM6B,wBAAA,GAC2DvC,qDAA/D,GACIsB,qEADJ,GAEIX,mEAHN;AAIA,MAAM6B,oBAAA,GAC2DxC,qDAA/D,GACIuB,iEADJ,GAEIX,+DAHN;AAIA,MAAM6B,8BAAA,GAC2DzC,qDAA/D,GACIwB,2EADJ,GAEIX,yEAHN;AA6IA,SAAS6B,WAATA,CAAqBrT,GAArB,EAA0B;EAEtB,IAAI,OAAOA,GAAP,KAAe,QAAf,IAA2BA,GAAA,YAAesT,GAA9C,EAAmD;IACjDtT,GAAA,GAAM;MAAEjD,GAAA,EAAKiD;IAAP,CAAN;EADiD,CAAnD,MAEO,IAAI0Q,8DAAA,CAAc1Q,GAAd,CAAJ,EAAwB;IAC7BA,GAAA,GAAM;MAAE9Q,IAAA,EAAM8Q;IAAR,CAAN;EAD6B;EAIjC,IAAI,OAAOA,GAAP,KAAe,QAAnB,EAA6B;IAC3B,MAAM,IAAIuT,KAAJ,CAAU,0DAAV,CAAN;EAD2B;EAG7B,IAAI,CAACvT,GAAA,CAAIjD,GAAL,IAAY,CAACiD,GAAA,CAAI9Q,IAAjB,IAAyB,CAAC8Q,GAAA,CAAIwT,KAAlC,EAAyC;IACvC,MAAM,IAAID,KAAJ,CACJ,6DADI,CAAN;EADuC;EAKzC,MAAME,IAAA,GAAO,IAAIC,sBAAJ,EAAb;EACA,MAAM;IAAEC;EAAF,IAAYF,IAAlB;EAEA,MAAM1W,GAAA,GAAMiD,GAAA,CAAIjD,GAAJ,GAAU6W,UAAA,CAAW5T,GAAA,CAAIjD,GAAf,CAAV,GAAgC,IAA5C;EACA,MAAM7N,IAAA,GAAO8Q,GAAA,CAAI9Q,IAAJ,GAAW2kB,WAAA,CAAY7T,GAAA,CAAI9Q,IAAhB,CAAX,GAAmC,IAAhD;EACA,MAAM4kB,WAAA,GAAc9T,GAAA,CAAI8T,WAAJ,IAAmB,IAAvC;EACA,MAAMC,eAAA,GAAkB/T,GAAA,CAAI+T,eAAJ,KAAwB,IAAhD;EACA,MAAMC,QAAA,GAAWhU,GAAA,CAAIgU,QAAJ,IAAgB,IAAjC;EACA,MAAMC,cAAA,GACJjU,GAAA,CAAIwT,KAAJ,YAAqBU,qBAArB,GAA6ClU,GAAA,CAAIwT,KAAjD,GAAyD,IAD3D;EAEA,MAAMW,cAAA,GACJC,MAAA,CAAOC,SAAP,CAAiBrU,GAAA,CAAImU,cAArB,KAAwCnU,GAAA,CAAImU,cAAJ,GAAqB,CAA7D,GACInU,GAAA,CAAImU,cADR,GAEIrB,wBAHN;EAIA,IAAIwB,MAAA,GAAStU,GAAA,CAAIsU,MAAJ,YAAsBC,SAAtB,GAAkCvU,GAAA,CAAIsU,MAAtC,GAA+C,IAA5D;EACA,MAAME,SAAA,GAAYxU,GAAA,CAAIwU,SAAtB;EAIA,MAAMC,UAAA,GACJ,OAAOzU,GAAA,CAAIyU,UAAX,KAA0B,QAA1B,IAAsC,CAAChD,+DAAA,CAAazR,GAAA,CAAIyU,UAAjB,CAAvC,GACIzU,GAAA,CAAIyU,UADR,GAEI,IAHN;EAIA,MAAMC,OAAA,GAAU,OAAO1U,GAAA,CAAI0U,OAAX,KAAuB,QAAvB,GAAkC1U,GAAA,CAAI0U,OAAtC,GAAgD,IAAhE;EACA,MAAMC,UAAA,GAAa3U,GAAA,CAAI2U,UAAJ,KAAmB,KAAtC;EACA,MAAMC,iBAAA,GAAoB5U,GAAA,CAAI4U,iBAAJ,IAAyB1B,wBAAnD;EACA,MAAM2B,mBAAA,GACJ,OAAO7U,GAAA,CAAI6U,mBAAX,KAAmC,QAAnC,GACI7U,GAAA,CAAI6U,mBADR,GAEI,IAHN;EAIA,MAAMC,uBAAA,GACJ9U,GAAA,CAAI8U,uBAAJ,IAA+B1B,8BADjC;EAEA,MAAM2B,YAAA,GAAe/U,GAAA,CAAIgV,YAAJ,KAAqB,IAA1C;EACA,MAAMC,YAAA,GACJb,MAAA,CAAOC,SAAP,CAAiBrU,GAAA,CAAIiV,YAArB,KAAsCjV,GAAA,CAAIiV,YAAJ,GAAmB,CAAC,CAA1D,GACIjV,GAAA,CAAIiV,YADR,GAEI,CAAC,CAHP;EAIA,MAAMC,eAAA,GAAkBlV,GAAA,CAAIkV,eAAJ,KAAwB,KAAhD;EACA,MAAMC,0BAAA,GACJ,OAAOnV,GAAA,CAAImV,0BAAX,KAA0C,SAA1C,GACInV,GAAA,CAAImV,0BADR,GAEI,CAACxE,qDAHP;EAIA,MAAMyE,oBAAA,GAAuBhB,MAAA,CAAOC,SAAP,CAAiBrU,GAAA,CAAIoV,oBAArB,IACzBpV,GAAA,CAAIoV,oBADqB,GAEzB,CAAC,CAFL;EAGA,MAAMC,eAAA,GACJ,OAAOrV,GAAA,CAAIqV,eAAX,KAA+B,SAA/B,GAA2CrV,GAAA,CAAIqV,eAA/C,GAAiE1E,qDADnE;EAEA,MAAM2E,mBAAA,GAAsBtV,GAAA,CAAIsV,mBAAJ,KAA4B,IAAxD;EACA,MAAMC,SAAA,GAAYvV,GAAA,CAAIuV,SAAJ,KAAkB,IAApC;EACA,MAAMC,aAAA,GAAgBxV,GAAA,CAAIwV,aAAJ,IAAqBC,UAAA,CAAW3hB,QAAtD;EACA,MAAM4hB,YAAA,GAAe1V,GAAA,CAAI0V,YAAJ,KAAqB,IAA1C;EACA,MAAMC,aAAA,GAAgB3V,GAAA,CAAI2V,aAAJ,KAAsB,IAA5C;EACA,MAAMC,gBAAA,GAAmB5V,GAAA,CAAI4V,gBAAJ,KAAyB,IAAlD;EACA,MAAMC,MAAA,GAAS7V,GAAA,CAAI6V,MAAJ,KAAe,IAA9B;EAGA,MAAMpc,MAAA,GAASwa,cAAA,GAAiBA,cAAA,CAAexa,MAAhC,GAAyCuG,GAAA,CAAIvG,MAAJ,IAAcqc,GAAtE;EACA,MAAMC,cAAA,GACJ,OAAO/V,GAAA,CAAI+V,cAAX,KAA8B,SAA9B,GACI/V,GAAA,CAAI+V,cADR,GAEI,CAACpF,qDAAD,IAAa,CAAC0E,eAHpB;EAIA,MAAMW,cAAA,GACJ,OAAOhW,GAAA,CAAIgW,cAAX,KAA8B,SAA9B,GACIhW,GAAA,CAAIgW,cADR,GAGKpB,iBAAA,KAAsBtD,mEAAtB,IACCwD,uBAAA,KAA4BtD,yEAD7B,IAECkD,OAFD,IAGCG,mBAHD,IAICnD,kEAAA,CAAgBgD,OAAhB,EAAyB5gB,QAAA,CAASmiB,OAAlC,CAJD,IAKCvE,kEAAA,CAAgBmD,mBAAhB,EAAqC/gB,QAAA,CAASmiB,OAA9C,CATR;EAUA,MAAMC,aAAA,GACJlW,GAAA,CAAIkW,aAAJ,IAAqB,IAAIjD,oBAAJ,CAAyB;IAAEuC;EAAF,CAAzB,CADvB;EAEA,MAAMW,aAAA,GACJnW,GAAA,CAAImW,aAAJ,IAAqB,IAAIhD,oBAAJ,CAAyB;IAAEQ,KAAF;IAAS6B;EAAT,CAAzB,CADvB;EAIA,MAAMY,YAAA,GAGA,IAHN;EAMAnF,kEAAA,CAAkBuD,SAAlB;EAIA,MAAM6B,gBAAA,GAAmB;IACvBH,aADuB;IAEvBC;EAFuB,CAAzB;EAIA,IAAI,CAACH,cAAL,EAAqB;IACnBK,gBAAA,CAAiBC,iBAAjB,GAAqC,IAAI1B,iBAAJ,CAAsB;MACzD2B,OAAA,EAAS7B,OADgD;MAEzD8B,YAAA,EAAc7B;IAF2C,CAAtB,CAArC;IAIA0B,gBAAA,CAAiBI,uBAAjB,GAA2C,IAAI3B,uBAAJ,CAA4B;MACrEyB,OAAA,EAAS1B;IAD4D,CAA5B,CAA3C;EALmB;EAUrB,IAAI,CAACP,MAAL,EAAa;IACX,MAAMoC,YAAA,GAAe;MACnBlC,SADmB;MAEnBmC,IAAA,EAAMtE,mEAAA,CAAoBuE;IAFP,CAArB;IAMAtC,MAAA,GAASoC,YAAA,CAAaC,IAAb,GACLpC,SAAA,CAAUsC,QAAV,CAAmBH,YAAnB,CADK,GAEL,IAAInC,SAAJ,CAAcmC,YAAd,CAFJ;IAGAjD,IAAA,CAAKqD,OAAL,GAAexC,MAAf;EAVW;EAab,MAAMyC,cAAA,GAAiB;IACrBpD,KADqB;IAErBqD,UAAA,EAEM,SAJe;IAMrB9nB,IANqB;IAOrB8kB,QAPqB;IAQrB4B,gBARqB;IASrBzB,cATqB;IAUrB1a,MAVqB;IAWrBgb,UAXqB;IAYrBc,SAZqB;IAarB0B,gBAAA,EAAkB;MAChBhC,YADgB;MAEhBI,eAFgB;MAGhBN,YAHgB;MAIhBG,eAJgB;MAKhBC,0BALgB;MAMhBC,oBANgB;MAOhBE,mBAPgB;MAQhBS,cARgB;MAShBrB,OAAA,EAASsB,cAAA,GAAiBtB,OAAjB,GAA2B,IATpB;MAUhBG,mBAAA,EAAqBmB,cAAA,GAAiBnB,mBAAjB,GAAuC;IAV5C;EAbG,CAAvB;EA0BA,MAAMqC,eAAA,GAAkB;IACtBnC,YADsB;IAEtBG,eAFsB;IAGtBG,eAHsB;IAItBC,mBAJsB;IAKtBC,SALsB;IAMtBC,aANsB;IAOtBI,gBAPsB;IAQtBC,MARsB;IAStBO;EATsB,CAAxB;EAYA9B,MAAA,CAAO6C,OAAP,CACGC,IADH,CACQ,YAAY;IAChB,IAAI3D,IAAA,CAAK4D,SAAT,EAAoB;MAClB,MAAM,IAAI9D,KAAJ,CAAU,iBAAV,CAAN;IADkB;IAIpB,MAAM+D,eAAA,GAAkBC,cAAA,CAAejD,MAAf,EAAuByC,cAAvB,CAAxB;IACA,MAAMS,oBAAA,GAAuB,IAAIC,OAAJ,CAAY,UAAUC,OAAV,EAAmB;MAC1D,IAAIC,aAAJ;MACA,IAAI1D,cAAJ,EAAoB;QAClB0D,aAAA,GAAgB,IAAIlF,yEAAJ,CACd;UACEhZ,MADF;UAEEme,WAAA,EAAa3D,cAAA,CAAe2D,WAF9B;UAGEC,eAAA,EAAiB5D,cAAA,CAAe4D,eAHlC;UAIEC,0BAAA,EACE7D,cAAA,CAAe6D,0BALnB;UAMEpC,YANF;UAOEC;QAPF,CADc,EAUd1B,cAVc,CAAhB;MADkB,CAApB,MAaO,IAAI,CAAC/kB,IAAL,EAAW;QAIhB,MAAM6oB,sBAAA,GAAyBzK,MAAA,IAAU;UACvC,IAGEqD,qDAHF,EAIE;YACA,OAAO,IAAIiC,+DAAJ,CAAkBtF,MAAlB,CAAP;UADA;UAGF,OAAOoE,kEAAA,CAAgBpE,MAAA,CAAOvQ,GAAvB,IACH,IAAI2V,iEAAJ,CAAmBpF,MAAnB,CADG,GAEH,IAAIqF,8DAAJ,CAAqBrF,MAArB,CAFJ;QARuC,CAAzC;QAaAqK,aAAA,GAAgBI,sBAAA,CAAuB;UACrChb,GADqC;UAErCtD,MAFqC;UAGrCqa,WAHqC;UAIrCC,eAJqC;UAKrCI,cALqC;UAMrCuB,YANqC;UAOrCC;QAPqC,CAAvB,CAAhB;MAjBgB;MA2BlB+B,OAAA,CAAQC,aAAR;IA1C0D,CAA/B,CAA7B;IA6CA,OAAOF,OAAA,CAAQO,GAAR,CAAY,CAACV,eAAD,EAAkBE,oBAAlB,CAAZ,EAAqDJ,IAArD,CACL,UAAU,CAACa,QAAD,EAAWN,aAAX,CAAV,EAAqC;MACnC,IAAIlE,IAAA,CAAK4D,SAAT,EAAoB;QAClB,MAAM,IAAI9D,KAAJ,CAAU,iBAAV,CAAN;MADkB;MAIpB,MAAM2E,cAAA,GAAiB,IAAI5F,sEAAJ,CACrBqB,KADqB,EAErBsE,QAFqB,EAGrB3D,MAAA,CAAOqC,IAHc,CAAvB;MAKA,MAAMwB,SAAA,GAAY,IAAIC,eAAJ,CAChBF,cADgB,EAEhBzE,IAFgB,EAGhBkE,aAHgB,EAIhBT,eAJgB,EAKhBb,gBALgB,CAAlB;MAOA5C,IAAA,CAAK4E,UAAL,GAAkBF,SAAlB;MACAD,cAAA,CAAeI,IAAf,CAAoB,OAApB,EAA6B,IAA7B;IAlBmC,CADhC,CAAP;EAnDgB,CADpB,EA2EGC,KA3EH,CA2ES9E,IAAA,CAAK+E,WAAL,CAAiBC,MA3E1B;EA6EA,OAAOhF,IAAP;AArPwB;AAiQ1B,eAAe8D,cAAfA,CAA8BjD,MAA9B,EAAsC5X,MAAtC,EAA8C;EAC5C,IAAI4X,MAAA,CAAO+C,SAAX,EAAsB;IACpB,MAAM,IAAI9D,KAAJ,CAAU,sBAAV,CAAN;EADoB;EAGtB,MAAM0E,QAAA,GAAW,MAAM3D,MAAA,CAAO4D,cAAP,CAAsBQ,eAAtB,CACrB,eADqB,EAErBhc,MAFqB,EAGrBA,MAAA,CAAOxN,IAAP,GAAc,CAACwN,MAAA,CAAOxN,IAAP,CAAYypB,MAAb,CAAd,GAAqC,IAHhB,CAAvB;EAMA,IAAIrE,MAAA,CAAO+C,SAAX,EAAsB;IACpB,MAAM,IAAI9D,KAAJ,CAAU,sBAAV,CAAN;EADoB;EAGtB,OAAO0E,QAAP;AAb4C;AAgB9C,SAASrE,UAATA,CAAoBvE,GAApB,EAAyB;EAIvB,IAAIA,GAAA,YAAeiE,GAAnB,EAAwB;IACtB,OAAOjE,GAAA,CAAIrR,IAAX;EADsB;EAGxB,IAAI;IAEF,OAAO,IAAIsV,GAAJ,CAAQjE,GAAR,EAAauJ,MAAA,CAAOC,QAApB,EAA8B7a,IAArC;EAFE,CAAJ,CAGE,MAAM;IACN,IAGE2S,qDAFA,IAGA,OAAOtB,GAAP,KAAe,QAJjB,EAKE;MACA,OAAOA,GAAP;IADA;EANI;EAUR,MAAM,IAAIkE,KAAJ,CACJ,2BACE,8DAFE,CAAN;AApBuB;AA0BzB,SAASM,WAATA,CAAqBxE,GAArB,EAA0B;EAExB,IAGEsB,qDAFA,IAGA,OAAOmI,MAAP,KAAkB,WAHlB,IAIAzJ,GAAA,YAAeyJ,MALjB,EAME;IACA,MAAM,IAAIvF,KAAJ,CACJ,mEADI,CAAN;EADA;EAKF,IAAIlE,GAAA,YAAe0J,UAAf,IAA6B1J,GAAA,CAAI2J,UAAJ,KAAmB3J,GAAA,CAAIsJ,MAAJ,CAAWK,UAA/D,EAA2E;IAIzE,OAAO3J,GAAP;EAJyE;EAM3E,IAAI,OAAOA,GAAP,KAAe,QAAnB,EAA6B;IAC3B,OAAO6B,8DAAA,CAAc7B,GAAd,CAAP;EAD2B;EAG7B,IAAK,OAAOA,GAAP,KAAe,QAAf,IAA2B,CAAC4J,KAAA,CAAM5J,GAAA,EAAK5V,MAAX,CAA7B,IAAoDiX,8DAAA,CAAcrB,GAAd,CAAxD,EAA4E;IAC1E,OAAO,IAAI0J,UAAJ,CAAe1J,GAAf,CAAP;EAD0E;EAG5E,MAAM,IAAIkE,KAAJ,CACJ,iDACE,gEAFE,CAAN;AAzBwB;AA0C1B,MAAMG,sBAAN,CAA6B;EAC3B,OAAO,CAAAC,KAAP,GAAgB,CAAhB;EAEAxhB,YAAA,EAAc;IACZ,KAAKqmB,WAAL,GAAmB,IAAIzH,8DAAJ,EAAnB;IACA,KAAKsH,UAAL,GAAkB,IAAlB;IACA,KAAKvB,OAAL,GAAe,IAAf;IAMA,KAAKnD,KAAL,GAAc,IAAGD,sBAAA,CAAuB,CAAAC,KAAvB,EAAJ,EAAb;IAMA,KAAK0D,SAAL,GAAiB,KAAjB;IAQA,KAAK6B,UAAL,GAAkB,IAAlB;IAQA,KAAKC,UAAL,GAAkB,IAAlB;EA/BY;EAsCd,IAAIhC,OAAJA,CAAA,EAAc;IACZ,OAAO,KAAKqB,WAAL,CAAiBrB,OAAxB;EADY;EASd,MAAMiC,OAANA,CAAA,EAAgB;IACd,KAAK/B,SAAL,GAAiB,IAAjB;IACA,IAAI;MACF,IAAI,KAAKP,OAAL,EAAcH,IAAlB,EAAwB;QACtB,KAAKG,OAAL,CAAauC,eAAb,GAA+B,IAA/B;MADsB;MAGxB,MAAM,KAAKhB,UAAL,EAAiBe,OAAjB,EAAN;IAJE,CAAJ,CAKE,OAAOE,EAAP,EAAW;MACX,IAAI,KAAKxC,OAAL,EAAcH,IAAlB,EAAwB;QACtB,OAAO,KAAKG,OAAL,CAAauC,eAApB;MADsB;MAGxB,MAAMC,EAAN;IAJW;IAOb,KAAKjB,UAAL,GAAkB,IAAlB;IACA,IAAI,KAAKvB,OAAT,EAAkB;MAChB,KAAKA,OAAL,CAAasC,OAAb;MACA,KAAKtC,OAAL,GAAe,IAAf;IAFgB;EAfJ;AAlDW;AA+E7B,MAAM5C,qBAAN,CAA4B;EAO1B/hB,YACEsH,MADF,EAEEme,WAFF,EAGEC,eAAA,GAAkB,KAHpB,EAIEC,0BAAA,GAA6B,IAJ/B,EAKE;IACA,KAAKre,MAAL,GAAcA,MAAd;IACA,KAAKme,WAAL,GAAmBA,WAAnB;IACA,KAAKC,eAAL,GAAuBA,eAAvB;IACA,KAAKC,0BAAL,GAAkCA,0BAAlC;IAEA,KAAKyB,eAAL,GAAuB,EAAvB;IACA,KAAKC,kBAAL,GAA0B,EAA1B;IACA,KAAKC,yBAAL,GAAiC,EAAjC;IACA,KAAKC,yBAAL,GAAiC,EAAjC;IACA,KAAKC,gBAAL,GAAwB,IAAI5I,8DAAJ,EAAxB;EAVA;EAgBF6I,iBAAiBC,QAAjB,EAA2B;IACzB,KAAKN,eAAL,CAAqBlf,IAArB,CAA0Bwf,QAA1B;EADyB;EAO3BC,oBAAoBD,QAApB,EAA8B;IAC5B,KAAKL,kBAAL,CAAwBnf,IAAxB,CAA6Bwf,QAA7B;EAD4B;EAO9BE,2BAA2BF,QAA3B,EAAqC;IACnC,KAAKJ,yBAAL,CAA+Bpf,IAA/B,CAAoCwf,QAApC;EADmC;EAOrCG,2BAA2BH,QAA3B,EAAqC;IACnC,KAAKH,yBAAL,CAA+Brf,IAA/B,CAAoCwf,QAApC;EADmC;EAQrCI,YAAYC,KAAZ,EAAmBC,KAAnB,EAA0B;IACxB,WAAWN,QAAX,IAAuB,KAAKN,eAA5B,EAA6C;MAC3CM,QAAA,CAASK,KAAT,EAAgBC,KAAhB;IAD2C;EADrB;EAU1BC,eAAeC,MAAf,EAAuBC,KAAvB,EAA8B;IAC5B,KAAKX,gBAAL,CAAsBxC,OAAtB,CAA8BC,IAA9B,CAAmC,MAAM;MACvC,WAAWyC,QAAX,IAAuB,KAAKL,kBAA5B,EAAgD;QAC9CK,QAAA,CAASQ,MAAT,EAAiBC,KAAjB;MAD8C;IADT,CAAzC;EAD4B;EAW9BC,sBAAsBJ,KAAtB,EAA6B;IAC3B,KAAKR,gBAAL,CAAsBxC,OAAtB,CAA8BC,IAA9B,CAAmC,MAAM;MACvC,WAAWyC,QAAX,IAAuB,KAAKJ,yBAA5B,EAAuD;QACrDI,QAAA,CAASM,KAAT;MADqD;IADhB,CAAzC;EAD2B;EAQ7BK,sBAAA,EAAwB;IACtB,KAAKb,gBAAL,CAAsBxC,OAAtB,CAA8BC,IAA9B,CAAmC,MAAM;MACvC,WAAWyC,QAAX,IAAuB,KAAKH,yBAA5B,EAAuD;QACrDG,QAAA;MADqD;IADhB,CAAzC;EADsB;EAQxBY,eAAA,EAAiB;IACf,KAAKd,gBAAL,CAAsBjC,OAAtB;EADe;EAQjBgD,iBAAiBR,KAAjB,EAAwBS,GAAxB,EAA6B;IAC3B9sB,4DAAA,CAAY,wDAAZ;EAD2B;EAI7B+sB,MAAA,EAAQ;AA1GkB;AAgH5B,MAAMC,gBAAN,CAAuB;EACrB1oB,YAAY2oB,OAAZ,EAAqB3C,SAArB,EAAgC;IAC9B,KAAK4C,QAAL,GAAgBD,OAAhB;IACA,KAAKzC,UAAL,GAAkBF,SAAlB;EAF8B;EA2BhC,IAAItlB,iBAAJA,CAAA,EAAwB;IACtB,OAAO,KAAKwlB,UAAL,CAAgBxlB,iBAAvB;EADsB;EAOxB,IAAIsjB,aAAJA,CAAA,EAAoB;IAClB,OAAO,KAAKkC,UAAL,CAAgBlC,aAAvB;EADkB;EAOpB,IAAI6E,QAAJA,CAAA,EAAe;IACb,OAAO,KAAKD,QAAL,CAAcC,QAArB;EADa;EAUf,IAAIC,YAAJA,CAAA,EAAmB;IACjB,OAAO,KAAKF,QAAL,CAAcE,YAArB;EADiB;EAOnB,IAAIC,SAAJA,CAAA,EAAgB;IACd,OAAOttB,uDAAA,CAAO,IAAP,EAAa,WAAb,EAA0B,CAAC,CAAC,KAAKyqB,UAAL,CAAgB8C,WAA5C,CAAP;EADc;EAUhB,IAAIC,UAAJA,CAAA,EAAiB;IACf,OAAO,KAAK/C,UAAL,CAAgB8C,WAAvB;EADe;EASjBE,QAAQC,UAAR,EAAoB;IAClB,OAAO,KAAKjD,UAAL,CAAgBgD,OAAhB,CAAwBC,UAAxB,CAAP;EADkB;EASpBC,aAAaC,GAAb,EAAkB;IAChB,OAAO,KAAKnD,UAAL,CAAgBkD,YAAhB,CAA6BC,GAA7B,CAAP;EADgB;EAUlBC,gBAAA,EAAkB;IAChB,OAAO,KAAKpD,UAAL,CAAgBoD,eAAhB,EAAP;EADgB;EAUlBC,eAAeznB,EAAf,EAAmB;IACjB,OAAO,KAAKokB,UAAL,CAAgBqD,cAAhB,CAA+BznB,EAA/B,CAAP;EADiB;EASnB0nB,cAAA,EAAgB;IACd,OAAO,KAAKtD,UAAL,CAAgBsD,aAAhB,EAAP;EADc;EAQhBC,cAAA,EAAgB;IACd,OAAO,KAAKvD,UAAL,CAAgBuD,aAAhB,EAAP;EADc;EAQhBC,YAAA,EAAc;IACZ,OAAO,KAAKxD,UAAL,CAAgBwD,WAAhB,EAAP;EADY;EASdC,qBAAA,EAAuB;IACrB,OAAO,KAAKzD,UAAL,CAAgByD,oBAAhB,EAAP;EADqB;EASvBC,cAAA,EAAgB;IACd,OAAO,KAAK1D,UAAL,CAAgB0D,aAAhB,EAAP;EADc;EAQhBC,eAAA,EAAiB;IACf,OAAO,KAAK3D,UAAL,CAAgB2D,cAAhB,EAAP;EADe;EAWjBC,aAAA,EAAe;IACb,OAAO,KAAK5D,UAAL,CAAgB6D,eAAhB,EAAP;EADa;EAuBfC,WAAA,EAAa;IACX,OAAO,KAAK9D,UAAL,CAAgB8D,UAAhB,EAAP;EADW;EASbC,yBAAA,EAA2B;IACzB,OAAO,KAAK/D,UAAL,CAAgB+D,wBAAhB,EAAP;EADyB;EAS3BC,eAAA,EAAiB;IACf,OAAO,KAAKhE,UAAL,CAAgBgE,cAAhB,EAAP;EADe;EAWjBC,YAAA,EAAc;IACZ,OAAO,KAAKjE,UAAL,CAAgBiE,WAAhB,EAAP;EADY;EAiBdC,YAAA,EAAc;IACZ,OAAO,KAAKlE,UAAL,CAAgBkE,WAAhB,EAAP;EADY;EAQdC,QAAA,EAAU;IACR,OAAO,KAAKnE,UAAL,CAAgBmE,OAAhB,EAAP;EADQ;EAQVC,aAAA,EAAe;IACb,OAAO,KAAKpE,UAAL,CAAgBoE,YAAhB,EAAP;EADa;EASfC,gBAAA,EAAkB;IAChB,OAAO,KAAKrE,UAAL,CAAgBsE,sBAAhB,CAAuCxF,OAA9C;EADgB;EAgBlByF,QAAQC,eAAA,GAAkB,KAA1B,EAAiC;IAC/B,OAAO,KAAKxE,UAAL,CAAgByE,YAAhB,CAA6BD,eAAA,IAAmB,KAAK3B,SAArD,CAAP;EAD+B;EAOjC9B,QAAA,EAAU;IACR,OAAO,KAAK2D,WAAL,CAAiB3D,OAAjB,EAAP;EADQ;EAQV,IAAI4D,aAAJA,CAAA,EAAoB;IAClB,OAAO,KAAK3E,UAAL,CAAgB2E,aAAvB;EADkB;EAOpB,IAAID,WAAJA,CAAA,EAAkB;IAChB,OAAO,KAAK1E,UAAL,CAAgB0E,WAAvB;EADgB;EASlBE,gBAAA,EAAkB;IAChB,OAAO,KAAK5E,UAAL,CAAgB4E,eAAhB,EAAP;EADgB;EAQlBlqB,aAAA,EAAe;IACb,OAAO,KAAKslB,UAAL,CAAgBtlB,YAAhB,EAAP;EADa;EASfmqB,uBAAA,EAAyB;IACvB,OAAO,KAAK7E,UAAL,CAAgB6E,sBAAhB,EAAP;EADuB;AAvUJ;AA6fvB,MAAMC,YAAN,CAAmB;EACjB,CAAAC,qBAAA,GAAyB,IAAzB;EAEA,CAAAC,cAAA,GAAkB,KAAlB;EAEAlrB,YAAYmrB,SAAZ,EAAuBC,QAAvB,EAAiCpF,SAAjC,EAA4CtC,MAAA,GAAS,KAArD,EAA4D;IAC1D,KAAK2H,UAAL,GAAkBF,SAAlB;IACA,KAAKG,SAAL,GAAiBF,QAAjB;IACA,KAAKlF,UAAL,GAAkBF,SAAlB;IACA,KAAKuF,MAAL,GAAc7H,MAAA,GAAS,IAAIhE,wDAAJ,EAAT,GAA2B,IAAzC;IACA,KAAK8L,OAAL,GAAe9H,MAAf;IAEA,KAAK+H,UAAL,GAAkBzF,SAAA,CAAUyF,UAA5B;IACA,KAAKC,IAAL,GAAY,IAAIC,UAAJ,EAAZ;IAEA,KAAKC,wBAAL,GAAgC,KAAhC;IACA,KAAKC,aAAL,GAAqB,IAAItf,GAAJ,EAArB;IACA,KAAK2Y,SAAL,GAAiB,KAAjB;EAZ0D;EAkB5D,IAAIiE,UAAJA,CAAA,EAAiB;IACf,OAAO,KAAKkC,UAAL,GAAkB,CAAzB;EADe;EAOjB,IAAIS,MAAJA,CAAA,EAAa;IACX,OAAO,KAAKR,SAAL,CAAeQ,MAAtB;EADW;EAOb,IAAIzC,GAAJA,CAAA,EAAU;IACR,OAAO,KAAKiC,SAAL,CAAejC,GAAtB;EADQ;EAOV,IAAI0C,QAAJA,CAAA,EAAe;IACb,OAAO,KAAKT,SAAL,CAAeS,QAAtB;EADa;EAQf,IAAIhpB,IAAJA,CAAA,EAAW;IACT,OAAO,KAAKuoB,SAAL,CAAevoB,IAAtB;EADS;EASXipB,YAAY;IACVC,KADU;IAEVtpB,QAAA,GAAW,KAAKmpB,MAFN;IAGVI,OAAA,GAAU,CAHA;IAIVC,OAAA,GAAU,CAJA;IAKVC,QAAA,GAAW;EALD,IAMR,EANJ,EAMQ;IACN,OAAO,IAAI5M,2DAAJ,CAAiB;MACtB6M,OAAA,EAAS,KAAKtpB,IADQ;MAEtBkpB,KAFsB;MAGtBtpB,QAHsB;MAItBupB,OAJsB;MAKtBC,OALsB;MAMtBC;IANsB,CAAjB,CAAP;EADM;EAgBRE,eAAe;IAAEjU,MAAA,GAAS;EAAX,IAAyB,EAAxC,EAA4C;IAC1C,MAAMkU,UAAA,GAAa,KAAKrG,UAAL,CAAgBsG,kBAAhB,CAAmCnU,MAAnC,CAAnB;IAEA,OAAO,KAAK6N,UAAL,CAAgBoG,cAAhB,CACL,KAAKjB,UADA,EAELkB,UAAA,CAAWE,eAFN,CAAP;EAH0C;EAa5C3C,aAAA,EAAe;IACb,OAAO,KAAK5D,UAAL,CAAgBwG,gBAAhB,CAAiC,KAAKrB,UAAtC,CAAP;EADa;EAOf,IAAIrH,aAAJA,CAAA,EAAoB;IAClB,OAAO,KAAKkC,UAAL,CAAgBlC,aAAvB;EADkB;EAOpB,IAAI+E,SAAJA,CAAA,EAAgB;IACd,OAAOttB,uDAAA,CAAO,IAAP,EAAa,WAAb,EAA0B,CAAC,CAAC,KAAKyqB,UAAL,CAAgB8C,WAA5C,CAAP;EADc;EAUhB,MAAM2D,MAANA,CAAA,EAAe;IACb,OAAO,KAAKzG,UAAL,CAAgB8C,WAAhB,EAA6BhT,QAA7B,CAAsC,KAAKqV,UAA3C,KAA0D,IAAjE;EADa;EAWf3iB,OAAO;IACLkkB,aADK;IAELlrB,QAFK;IAGL2W,MAAA,GAAS,SAHJ;IAILwU,cAAA,GAAiB3O,2DAAA,CAAe4O,MAJ3B;IAKLC,SAAA,GAAY,IALP;IAMLC,UAAA,GAAa,IANR;IAOLC,4BAAA,GAA+B,IAP1B;IAQLpS,mBAAA,GAAsB,IARjB;IASLqS,UAAA,GAAa,IATR;IAULC,sBAAA,GAAyB;EAVpB,CAAP,EAWG;IACD,KAAK5B,MAAL,EAAatT,IAAb,CAAkB,SAAlB;IAEA,MAAMsU,UAAA,GAAa,KAAKrG,UAAL,CAAgBsG,kBAAhB,CACjBnU,MADiB,EAEjBwU,cAFiB,EAGjBM,sBAHiB,CAAnB;IAOA,KAAK,CAAAjC,cAAL,GAAuB,KAAvB;IAEA,KAAK,CAAAkC,mBAAL;IAEA,IAAI,CAACH,4BAAL,EAAmC;MACjCA,4BAAA,GAA+B,KAAK/G,UAAL,CAAgB+D,wBAAhB,EAA/B;IADiC;IAInC,IAAIoD,WAAA,GAAc,KAAKxB,aAAL,CAAmBrf,GAAnB,CAAuB+f,UAAA,CAAWe,QAAlC,CAAlB;IACA,IAAI,CAACD,WAAL,EAAkB;MAChBA,WAAA,GAAc9mB,MAAA,CAAO3J,MAAP,CAAc,IAAd,CAAd;MACA,KAAKivB,aAAL,CAAmBpQ,GAAnB,CAAuB8Q,UAAA,CAAWe,QAAlC,EAA4CD,WAA5C;IAFgB;IAMlB,IAAIA,WAAA,CAAYE,yBAAhB,EAA2C;MACzCC,YAAA,CAAaH,WAAA,CAAYE,yBAAzB;MACAF,WAAA,CAAYE,yBAAZ,GAAwC,IAAxC;IAFyC;IAK3C,MAAME,WAAA,GAAc,CAAC,EACnBlB,UAAA,CAAWE,eAAX,GAA6B5N,gEAAA,CAAoB6O,KAAjD,CADF;IAMA,IAAI,CAACL,WAAA,CAAYM,sBAAjB,EAAyC;MACvCN,WAAA,CAAYM,sBAAZ,GAAqC,IAAI/O,8DAAJ,EAArC;MACAyO,WAAA,CAAYO,YAAZ,GAA2B;QACzBC,OAAA,EAAS,EADgB;QAEzBC,SAAA,EAAW,EAFc;QAGzBC,SAAA,EAAW,KAHc;QAIzBC,cAAA,EAAgB;MAJS,CAA3B;MAOA,KAAKzC,MAAL,EAAatT,IAAb,CAAkB,cAAlB;MACA,KAAKgW,iBAAL,CAAuB1B,UAAvB;IAVuC;IAazC,MAAM2B,QAAA,GAAWC,KAAA,IAAS;MACxBd,WAAA,CAAYe,WAAZ,CAAwBtR,MAAxB,CAA+BuR,kBAA/B;MAIA,IAAI,KAAKzC,wBAAL,IAAiC6B,WAArC,EAAkD;QAChD,KAAK,CAAAvC,cAAL,GAAuB,IAAvB;MADgD;MAGlD,KAAK,CAAAoD,UAAL,CAAiC,CAACb,WAAlC;MAEA,IAAIU,KAAJ,EAAW;QACTE,kBAAA,CAAmBE,UAAnB,CAA8BjI,MAA9B,CAAqC6H,KAArC;QAEA,KAAKK,kBAAL,CAAwB;UACtBnB,WADsB;UAEtBoB,MAAA,EAAQN,KAAA,YAAiB/M,KAAjB,GAAyB+M,KAAzB,GAAiC,IAAI/M,KAAJ,CAAU+M,KAAV;QAFnB,CAAxB;MAHS,CAAX,MAOO;QACLE,kBAAA,CAAmBE,UAAnB,CAA8BhJ,OAA9B;MADK;MAIP,KAAKgG,MAAL,EAAamD,OAAb,CAAqB,WAArB;MACA,KAAKnD,MAAL,EAAamD,OAAb,CAAqB,SAArB;IAtBwB,CAA1B;IAyBA,MAAML,kBAAA,GAAqB,IAAIM,kBAAJ,CAAuB;MAChDC,QAAA,EAAUV,QADsC;MAGhD/S,MAAA,EAAQ;QACNyR,aADM;QAENlrB,QAFM;QAGNqrB,SAHM;QAINC;MAJM,CAHwC;MAShDtB,IAAA,EAAM,KAAKA,IATqC;MAUhDD,UAAA,EAAY,KAAKA,UAV+B;MAWhD5Q,mBAXgD;MAYhD+S,YAAA,EAAcP,WAAA,CAAYO,YAZsB;MAahDzC,SAAA,EAAW,KAAKE,UAbgC;MAchDtH,aAAA,EAAe,KAAKmC,UAAL,CAAgBnC,aAdiB;MAehDC,aAAA,EAAe,KAAKkC,UAAL,CAAgBlC,aAfiB;MAgBhD6K,wBAAA,EAA0B,CAACpB,WAhBqB;MAiBhD/J,MAAA,EAAQ,KAAK8H,OAjBmC;MAkBhD0B;IAlBgD,CAAvB,CAA3B;IAqBC,CAAAG,WAAA,CAAYe,WAAZ,KAA4B,IAAIphB,GAAJ,EAA5B,EAAuC3K,GAAxC,CAA4CgsB,kBAA5C;IACA,MAAMS,UAAA,GAAaT,kBAAA,CAAmB/M,IAAtC;IAEAgE,OAAA,CAAQO,GAAR,CAAY,CACVwH,WAAA,CAAYM,sBAAZ,CAAmC3I,OADzB,EAEViI,4BAFU,CAAZ,EAIGhI,IAJH,CAIQ,CAAC,CAAC8J,YAAD,EAAeC,qBAAf,CAAD,KAA2C;MAC/C,IAAI,KAAK9J,SAAT,EAAoB;QAClBgJ,QAAA;QACA;MAFkB;MAIpB,KAAK3C,MAAL,EAAatT,IAAb,CAAkB,WAAlB;MAEAoW,kBAAA,CAAmBY,kBAAnB,CAAsC;QACpCF,YADoC;QAEpCC;MAFoC,CAAtC;MAIAX,kBAAA,CAAmBa,mBAAnB;IAX+C,CAJnD,EAiBG9I,KAjBH,CAiBS8H,QAjBT;IAmBA,OAAOY,UAAP;EArHC;EA8HHK,gBAAgB;IACd9W,MAAA,GAAS,SADK;IAEdwU,cAAA,GAAiB3O,2DAAA,CAAe4O,MAFlB;IAGdK,sBAAA,GAAyB;EAHX,IAIZ,EAJJ,EAIQ;IAIN,SAAS+B,mBAATA,CAAA,EAA+B;MAC7B,IAAI7B,WAAA,CAAYO,YAAZ,CAAyBG,SAA7B,EAAwC;QACtCV,WAAA,CAAY+B,oBAAZ,CAAiC7J,OAAjC,CAAyC8H,WAAA,CAAYO,YAArD;QAEAP,WAAA,CAAYe,WAAZ,CAAwBtR,MAAxB,CAA+BuS,UAA/B;MAHsC;IADX;IAQ/B,MAAM9C,UAAA,GAAa,KAAKrG,UAAL,CAAgBsG,kBAAhB,CACjBnU,MADiB,EAEjBwU,cAFiB,EAGjBM,sBAHiB,EAIA,IAJA,CAAnB;IAMA,IAAIE,WAAA,GAAc,KAAKxB,aAAL,CAAmBrf,GAAnB,CAAuB+f,UAAA,CAAWe,QAAlC,CAAlB;IACA,IAAI,CAACD,WAAL,EAAkB;MAChBA,WAAA,GAAc9mB,MAAA,CAAO3J,MAAP,CAAc,IAAd,CAAd;MACA,KAAKivB,aAAL,CAAmBpQ,GAAnB,CAAuB8Q,UAAA,CAAWe,QAAlC,EAA4CD,WAA5C;IAFgB;IAIlB,IAAIgC,UAAJ;IAEA,IAAI,CAAChC,WAAA,CAAY+B,oBAAjB,EAAuC;MACrCC,UAAA,GAAa9oB,MAAA,CAAO3J,MAAP,CAAc,IAAd,CAAb;MACAyyB,UAAA,CAAWH,mBAAX,GAAiCA,mBAAjC;MACA7B,WAAA,CAAY+B,oBAAZ,GAAmC,IAAIxQ,8DAAJ,EAAnC;MACC,CAAAyO,WAAA,CAAYe,WAAZ,KAA4B,IAAIphB,GAAJ,EAA5B,EAAuC3K,GAAxC,CAA4CgtB,UAA5C;MACAhC,WAAA,CAAYO,YAAZ,GAA2B;QACzBC,OAAA,EAAS,EADgB;QAEzBC,SAAA,EAAW,EAFc;QAGzBC,SAAA,EAAW,KAHc;QAIzBC,cAAA,EAAgB;MAJS,CAA3B;MAOA,KAAKzC,MAAL,EAAatT,IAAb,CAAkB,cAAlB;MACA,KAAKgW,iBAAL,CAAuB1B,UAAvB;IAbqC;IAevC,OAAOc,WAAA,CAAY+B,oBAAZ,CAAiCpK,OAAxC;EAxCM;EAkDRsK,kBAAkB;IAChBC,oBAAA,GAAuB,KADP;IAEhBC,oBAAA,GAAuB;EAFP,IAGd,EAHJ,EAGQ;IACN,MAAMC,uBAAA,GAA0B,GAAhC;IAEA,OAAO,KAAKvJ,UAAL,CAAgBH,cAAhB,CAA+B2J,cAA/B,CACL,gBADK,EAEL;MACEvE,SAAA,EAAW,KAAKE,UADlB;MAEEkE,oBAAA,EAAsBA,oBAAA,KAAyB,IAFjD;MAGEC,oBAAA,EAAsBA,oBAAA,KAAyB;IAHjD,CAFK,EAOL;MACEG,aAAA,EAAeF,uBADjB;MAEEpb,KAAKjD,WAAL,EAAkB;QAChB,OAAOA,WAAA,CAAYwE,KAAZ,CAAkBtO,MAAzB;MADgB;IAFpB,CAPK,CAAP;EAHM;EA2BRsoB,eAAezU,MAAA,GAAS,EAAxB,EAA4B;IAC1B,IAAI,KAAK+K,UAAL,CAAgB8C,WAApB,EAAiC;MAG/B,OAAO,KAAK2D,MAAL,GAAc1H,IAAd,CAAmB4K,GAAA,IAAO;QAC/B,OAAOnP,kDAAA,CAAQtP,WAAR,CAAoBye,GAApB,CAAP;MAD+B,CAA1B,CAAP;IAH+B;IAOjC,MAAMC,cAAA,GAAiB,KAAKR,iBAAL,CAAuBnU,MAAvB,CAAvB;IAEA,OAAO,IAAImK,OAAJ,CAAY,UAAUC,OAAV,EAAmBe,MAAnB,EAA2B;MAC5C,SAASyJ,IAATA,CAAA,EAAgB;QACdC,MAAA,CAAOC,IAAP,GAAchL,IAAd,CAAmB,UAAU;UAAE1X,KAAF;UAAS2iB;QAAT,CAAV,EAA2B;UAC5C,IAAIA,IAAJ,EAAU;YACR3K,OAAA,CAAQnU,WAAR;YACA;UAFQ;UAIV7K,MAAA,CAAOsW,MAAP,CAAczL,WAAA,CAAY+e,MAA1B,EAAkC5iB,KAAA,CAAM4iB,MAAxC;UACA/e,WAAA,CAAYwE,KAAZ,CAAkB1N,IAAlB,CAAuB,GAAGqF,KAAA,CAAMqI,KAAhC;UACAma,IAAA;QAP4C,CAA9C,EAQGzJ,MARH;MADc;MAYhB,MAAM0J,MAAA,GAASF,cAAA,CAAeM,SAAf,EAAf;MACA,MAAMhf,WAAA,GAAc;QAClBwE,KAAA,EAAO,EADW;QAElBua,MAAA,EAAQ5pB,MAAA,CAAO3J,MAAP,CAAc,IAAd;MAFU,CAApB;MAIAmzB,IAAA;IAlB4C,CAAvC,CAAP;EAV0B;EAqC5BM,cAAA,EAAgB;IACd,OAAO,KAAKnK,UAAL,CAAgBmK,aAAhB,CAA8B,KAAKhF,UAAnC,CAAP;EADc;EAQhBiF,SAAA,EAAW;IACT,KAAKpL,SAAL,GAAiB,IAAjB;IAEA,MAAMqL,MAAA,GAAS,EAAf;IACA,WAAWlD,WAAX,IAA0B,KAAKxB,aAAL,CAAmB3e,MAAnB,EAA1B,EAAuD;MACrD,KAAKshB,kBAAL,CAAwB;QACtBnB,WADsB;QAEtBoB,MAAA,EAAQ,IAAIrN,KAAJ,CAAU,qBAAV,CAFc;QAGtBoP,KAAA,EAAO;MAHe,CAAxB;MAMA,IAAInD,WAAA,CAAY+B,oBAAhB,EAAsC;QAEpC;MAFoC;MAItC,WAAWf,kBAAX,IAAiChB,WAAA,CAAYe,WAA7C,EAA0D;QACxDmC,MAAA,CAAOroB,IAAP,CAAYmmB,kBAAA,CAAmBoC,SAA/B;QACApC,kBAAA,CAAmBqC,MAAnB;MAFwD;IAXL;IAgBvD,KAAKhF,IAAL,CAAU7V,KAAV;IACA,KAAK,CAAAqV,cAAL,GAAuB,KAAvB;IACA,KAAK,CAAAkC,mBAAL;IAEA,OAAO9H,OAAA,CAAQO,GAAR,CAAY0K,MAAZ,CAAP;EAxBS;EAkCX9F,QAAQkG,UAAA,GAAa,KAArB,EAA4B;IAC1B,KAAK,CAAAzF,cAAL,GAAuB,IAAvB;IACA,MAAM0F,OAAA,GAAU,KAAK,CAAAtC,UAAL,CAAiC,KAAjC,CAAhB;IAEA,IAAIqC,UAAA,IAAcC,OAAlB,EAA2B;MACzB,KAAKrF,MAAL,KAAgB,IAAI7L,wDAAJ,EAAhB;IADyB;IAG3B,OAAOkR,OAAP;EAP0B;EAiB5B,CAAAtC,WAAYuC,OAAA,GAAU,KAAtB,EAA6B;IAC3B,KAAK,CAAAzD,mBAAL;IAEA,IAAI,CAAC,KAAK,CAAAlC,cAAN,IAAyB,KAAKhG,SAAlC,EAA6C;MAC3C,OAAO,KAAP;IAD2C;IAG7C,IAAI2L,OAAJ,EAAa;MACX,KAAK,CAAA5F,qBAAL,GAA8B5lB,UAAA,CAAW,MAAM;QAC7C,KAAK,CAAA4lB,qBAAL,GAA8B,IAA9B;QACA,KAAK,CAAAqD,UAAL,CAAiC,KAAjC;MAF6C,CAAjB,EAG3BzN,uBAH2B,CAA9B;MAKA,OAAO,KAAP;IANW;IAQb,WAAW;MAAEuN,WAAF;MAAeR;IAAf,CAAX,IAA4C,KAAK/B,aAAL,CAAmB3e,MAAnB,EAA5C,EAAyE;MACvE,IAAIkhB,WAAA,CAAY/Z,IAAZ,GAAmB,CAAnB,IAAwB,CAACuZ,YAAA,CAAaG,SAA1C,EAAqD;QACnD,OAAO,KAAP;MADmD;IADkB;IAKzE,KAAKlC,aAAL,CAAmBhW,KAAnB;IACA,KAAK6V,IAAL,CAAU7V,KAAV;IACA,KAAK,CAAAqV,cAAL,GAAuB,KAAvB;IACA,OAAO,IAAP;EAtB2B;EAyB7B,CAAAkC,oBAAA,EAAuB;IACrB,IAAI,KAAK,CAAAnC,qBAAT,EAAiC;MAC/BuC,YAAA,CAAa,KAAK,CAAAvC,qBAAlB;MACA,KAAK,CAAAA,qBAAL,GAA8B,IAA9B;IAF+B;EADZ;EAUvB6F,iBAAiB/B,YAAjB,EAA+BzB,QAA/B,EAAyC;IACvC,MAAMD,WAAA,GAAc,KAAKxB,aAAL,CAAmBrf,GAAnB,CAAuB8gB,QAAvB,CAApB;IACA,IAAI,CAACD,WAAL,EAAkB;MAChB;IADgB;IAGlB,KAAK9B,MAAL,EAAamD,OAAb,CAAqB,cAArB;IAIArB,WAAA,CAAYM,sBAAZ,EAAoCpI,OAApC,CAA4CwJ,YAA5C;EATuC;EAezCgC,iBAAiBC,iBAAjB,EAAoC3D,WAApC,EAAiD;IAE/C,KAAK,IAAI3X,CAAA,GAAI,CAAR,EAAWwD,EAAA,GAAK8X,iBAAA,CAAkB1pB,MAAlC,EAA0CoO,CAAA,GAAIwD,EAAnD,EAAuDxD,CAAA,EAAvD,EAA4D;MAC1D2X,WAAA,CAAYO,YAAZ,CAAyBC,OAAzB,CAAiC3lB,IAAjC,CAAsC8oB,iBAAA,CAAkBnD,OAAlB,CAA0BnY,CAA1B,CAAtC;MACA2X,WAAA,CAAYO,YAAZ,CAAyBE,SAAzB,CAAmC5lB,IAAnC,CAAwC8oB,iBAAA,CAAkBlD,SAAlB,CAA4BpY,CAA5B,CAAxC;IAF0D;IAI5D2X,WAAA,CAAYO,YAAZ,CAAyBG,SAAzB,GAAqCiD,iBAAA,CAAkBjD,SAAvD;IACAV,WAAA,CAAYO,YAAZ,CAAyBI,cAAzB,GAA0CgD,iBAAA,CAAkBhD,cAA5D;IAGA,WAAWK,kBAAX,IAAiChB,WAAA,CAAYe,WAA7C,EAA0D;MACxDC,kBAAA,CAAmBa,mBAAnB;IADwD;IAI1D,IAAI8B,iBAAA,CAAkBjD,SAAtB,EAAiC;MAC/B,KAAK,CAAAO,UAAL,CAAiC,IAAjC;IAD+B;EAdc;EAsBjDL,kBAAkB;IAChBxB,eADgB;IAEhBa,QAFgB;IAGhB2D;EAHgB,CAAlB,EAIG;IAOD,MAAM;MAAE12B,GAAF;MAAOiiB;IAAP,IAAoByU,6BAA1B;IAEA,MAAMnB,cAAA,GAAiB,KAAK5J,UAAL,CAAgBH,cAAhB,CAA+B2J,cAA/B,CACrB,iBADqB,EAErB;MACEvE,SAAA,EAAW,KAAKE,UADlB;MAEEhT,MAAA,EAAQoU,eAFV;MAGEa,QAHF;MAIE5sB,iBAAA,EAAmBnG;IAJrB,CAFqB,EAQrBiiB,QARqB,CAAvB;IAUA,MAAMwT,MAAA,GAASF,cAAA,CAAeM,SAAf,EAAf;IAEA,MAAM/C,WAAA,GAAc,KAAKxB,aAAL,CAAmBrf,GAAnB,CAAuB8gB,QAAvB,CAApB;IACAD,WAAA,CAAY6D,YAAZ,GAA2BlB,MAA3B;IAEA,MAAMD,IAAA,GAAOA,CAAA,KAAM;MACjBC,MAAA,CAAOC,IAAP,GAAchL,IAAd,CACE,CAAC;QAAE1X,KAAF;QAAS2iB;MAAT,CAAD,KAAqB;QACnB,IAAIA,IAAJ,EAAU;UACR7C,WAAA,CAAY6D,YAAZ,GAA2B,IAA3B;UACA;QAFQ;QAIV,IAAI,KAAKhL,UAAL,CAAgBhB,SAApB,EAA+B;UAC7B;QAD6B;QAG/B,KAAK6L,gBAAL,CAAsBxjB,KAAtB,EAA6B8f,WAA7B;QACA0C,IAAA;MATmB,CADvB,EAYEtB,MAAA,IAAU;QACRpB,WAAA,CAAY6D,YAAZ,GAA2B,IAA3B;QAEA,IAAI,KAAKhL,UAAL,CAAgBhB,SAApB,EAA+B;UAC7B;QAD6B;QAG/B,IAAImI,WAAA,CAAYO,YAAhB,EAA8B;UAE5BP,WAAA,CAAYO,YAAZ,CAAyBG,SAAzB,GAAqC,IAArC;UAEA,WAAWM,kBAAX,IAAiChB,WAAA,CAAYe,WAA7C,EAA0D;YACxDC,kBAAA,CAAmBa,mBAAnB;UADwD;UAG1D,KAAK,CAAAZ,UAAL,CAAiC,IAAjC;QAP4B;QAU9B,IAAIjB,WAAA,CAAYM,sBAAhB,EAAwC;UACtCN,WAAA,CAAYM,sBAAZ,CAAmCrH,MAAnC,CAA0CmI,MAA1C;QADsC,CAAxC,MAEO,IAAIpB,WAAA,CAAY+B,oBAAhB,EAAsC;UAC3C/B,WAAA,CAAY+B,oBAAZ,CAAiC9I,MAAjC,CAAwCmI,MAAxC;QAD2C,CAAtC,MAEA;UACL,MAAMA,MAAN;QADK;MApBC,CAZZ;IADiB,CAAnB;IAuCAsB,IAAA;EA/DC;EAqEHvB,mBAAmB;IAAEnB,WAAF;IAAeoB,MAAf;IAAuB+B,KAAA,GAAQ;EAA/B,CAAnB,EAA2D;IAQzD,IAAI,CAACnD,WAAA,CAAY6D,YAAjB,EAA+B;MAC7B;IAD6B;IAI/B,IAAI7D,WAAA,CAAYE,yBAAhB,EAA2C;MACzCC,YAAA,CAAaH,WAAA,CAAYE,yBAAzB;MACAF,WAAA,CAAYE,yBAAZ,GAAwC,IAAxC;IAFyC;IAK3C,IAAI,CAACiD,KAAL,EAAY;MAGV,IAAInD,WAAA,CAAYe,WAAZ,CAAwB/Z,IAAxB,GAA+B,CAAnC,EAAsC;QACpC;MADoC;MAMtC,IAAIoa,MAAA,YAAkBhP,0EAAtB,EAAmD;QACjD,IAAI0R,KAAA,GAAQvQ,2BAAZ;QACA,IAAI6N,MAAA,CAAO2C,UAAP,GAAoB,CAApB,IAAyB3C,MAAA,CAAO2C,UAAP,GAA+B,IAA5D,EAAkE;UAEhED,KAAA,IAAS1C,MAAA,CAAO2C,UAAhB;QAFgE;QAKlE/D,WAAA,CAAYE,yBAAZ,GAAwCloB,UAAA,CAAW,MAAM;UACvDgoB,WAAA,CAAYE,yBAAZ,GAAwC,IAAxC;UACA,KAAKiB,kBAAL,CAAwB;YAAEnB,WAAF;YAAeoB,MAAf;YAAuB+B,KAAA,EAAO;UAA9B,CAAxB;QAFuD,CAAjB,EAGrCW,KAHqC,CAAxC;QAIA;MAXiD;IATzC;IAuBZ9D,WAAA,CAAY6D,YAAZ,CACGR,MADH,CACU,IAAIzS,2DAAJ,CAAmBwQ,MAAA,CAAO4C,OAA1B,CADV,EAEGjL,KAFH,CAES,MAAM,EAFf;IAKAiH,WAAA,CAAY6D,YAAZ,GAA2B,IAA3B;IAEA,IAAI,KAAKhL,UAAL,CAAgBhB,SAApB,EAA+B;MAC7B;IAD6B;IAK/B,WAAW,CAACoM,WAAD,EAAcC,cAAd,CAAX,IAA4C,KAAK1F,aAAjD,EAAgE;MAC9D,IAAI0F,cAAA,KAAmBlE,WAAvB,EAAoC;QAClC,KAAKxB,aAAL,CAAmB/O,MAAnB,CAA0BwU,WAA1B;QACA;MAFkC;IAD0B;IAOhE,KAAK7G,OAAL;EA3DyD;EAkE3D,IAAI+G,KAAJA,CAAA,EAAY;IACV,OAAO,KAAKjG,MAAZ;EADU;AAnpBK;AAwpBnB,MAAMkG,YAAN,CAAmB;EACjB,CAAAC,SAAA,GAAa,IAAI1kB,GAAJ,EAAb;EAEA,CAAA2kB,QAAA,GAAYrM,OAAA,CAAQC,OAAR,EAAZ;EAEAqM,YAAY5U,GAAZ,EAAiBR,QAAjB,EAA2B;IACzB,MAAMhY,KAAA,GAAQ;MACZzH,IAAA,EAAMihB,eAAA,CAAgBhB,GAAhB,EAAqBR,QAAA,GAAW;QAAEA;MAAF,CAAX,GAA0B,IAA/C;IADM,CAAd;IAIA,KAAK,CAAAmV,QAAL,CAAe1M,IAAf,CAAoB,MAAM;MACxB,WAAWyC,QAAX,IAAuB,KAAK,CAAAgK,SAA5B,EAAwC;QACtChK,QAAA,CAASrS,IAAT,CAAc,IAAd,EAAoB7Q,KAApB;MADsC;IADhB,CAA1B;EALyB;EAY3B4F,iBAAiB9D,IAAjB,EAAuBohB,QAAvB,EAAiC;IAC/B,KAAK,CAAAgK,SAAL,CAAgBrvB,GAAhB,CAAoBqlB,QAApB;EAD+B;EAIjC1S,oBAAoB1O,IAApB,EAA0BohB,QAA1B,EAAoC;IAClC,KAAK,CAAAgK,SAAL,CAAgB5U,MAAhB,CAAuB4K,QAAvB;EADkC;EAIpCmK,UAAA,EAAY;IACV,KAAK,CAAAH,SAAL,CAAgB7b,KAAhB;EADU;AAzBK;AAsCnB,MAAMic,aAAA,GAAgB;EACpBC,gBAAA,EAAkB,KADE;EAEpBC,YAAA,EAAc;AAFM,CAAtB;AAIiE;EAC/D,IAAIxT,qDAAJ,EAAc;IAEZsT,aAAA,CAAcC,gBAAd,GAAiC,IAAjC;IAEA7R,mEAAA,CAAoB+R,SAApB,KAEI,kBAFJ;EAJY;EAUdH,aAAA,CAAcI,YAAd,GAA6B,UAAU9N,OAAV,EAAmB+N,QAAnB,EAA6B;IACxD,IAAInhB,IAAJ;IACA,IAAI;MACFA,IAAA,GAAO,IAAImQ,GAAJ,CAAQiD,OAAR,CAAP;MACA,IAAI,CAACpT,IAAA,CAAKohB,MAAN,IAAgBphB,IAAA,CAAKohB,MAAL,KAAgB,MAApC,EAA4C;QAC1C,OAAO,KAAP;MAD0C;IAF1C,CAAJ,CAKE,MAAM;MACN,OAAO,KAAP;IADM;IAIR,MAAMC,KAAA,GAAQ,IAAIlR,GAAJ,CAAQgR,QAAR,EAAkBnhB,IAAlB,CAAd;IACA,OAAOA,IAAA,CAAKohB,MAAL,KAAgBC,KAAA,CAAMD,MAA7B;EAZwD,CAA1D;EAeAN,aAAA,CAAcQ,gBAAd,GAAiC,UAAU1nB,GAAV,EAAe;IAI9C,MAAM2nB,OAAA,GAAW,iBAAgB3nB,GAAI,KAArC;IACA,OAAOuW,GAAA,CAAIqR,eAAJ,CAAoB,IAAIC,IAAJ,CAAS,CAACF,OAAD,CAAT,CAApB,CAAP;EAL8C,CAAhD;AA1B+D;AA2CjE,MAAMnQ,SAAN,CAAgB;EACd,OAAO,CAAAsQ,WAAP;EAEA1yB,YAAY;IACVsG,IAAA,GAAO,IADG;IAEVke,IAAA,GAAO,IAFG;IAGVnC,SAAA,GAAYjE,kEAAA;EAHF,IAIR,EAJJ,EAIQ;IACN,KAAK9X,IAAL,GAAYA,IAAZ;IACA,KAAK4e,SAAL,GAAiB,KAAjB;IACA,KAAK7C,SAAL,GAAiBA,SAAjB;IAEA,KAAKmF,gBAAL,GAAwB,IAAI5I,8DAAJ,EAAxB;IACA,KAAK+T,KAAL,GAAa,IAAb;IACA,KAAKC,UAAL,GAAkB,IAAlB;IACA,KAAKC,eAAL,GAAuB,IAAvB;IAEA,IAEErO,IAFF,EAGE;MACA,IAAIpC,SAAA,CAAU,CAAAsQ,WAAV,EAAwBvpB,GAAxB,CAA4Bqb,IAA5B,CAAJ,EAAuC;QACrC,MAAM,IAAIpD,KAAJ,CAAU,8CAAV,CAAN;MADqC;MAGtC,CAAAgB,SAAA,CAAU,CAAAsQ,WAAV,KAA2B,IAAII,OAAJ,EAA3B,EAA0CrX,GAA3C,CAA+C+I,IAA/C,EAAqD,IAArD;MACA,KAAKuO,mBAAL,CAAyBvO,IAAzB;MACA;IANA;IAQF,KAAKwO,WAAL;EArBM;EA4BR,IAAIhO,OAAJA,CAAA,EAAc;IACZ,OAAO,KAAKwC,gBAAL,CAAsBxC,OAA7B;EADY;EAQd,IAAIR,IAAJA,CAAA,EAAW;IACT,OAAO,KAAKmO,KAAZ;EADS;EAQX,IAAI5M,cAAJA,CAAA,EAAqB;IACnB,OAAO,KAAK8M,eAAZ;EADmB;EAIrBE,oBAAoBvO,IAApB,EAA0B;IAIxB,KAAKmO,KAAL,GAAanO,IAAb;IACA,KAAKqO,eAAL,GAAuB,IAAI1S,sEAAJ,CAAmB,MAAnB,EAA2B,QAA3B,EAAqCqE,IAArC,CAAvB;IACA,KAAKqO,eAAL,CAAqBI,EAArB,CAAwB,OAAxB,EAAiC,YAAY,EAA7C;IAIA,KAAKzL,gBAAL,CAAsBjC,OAAtB;IAEA,KAAKsN,eAAL,CAAqB1M,IAArB,CAA0B,WAA1B,EAAuC;MACrC9D,SAAA,EAAW,KAAKA;IADqB,CAAvC;EAZwB;EAiB1B2Q,YAAA,EAAc;IAMZ,IACE,CAAClB,aAAA,CAAcC,gBAAf,IACA,CAAC3P,SAAA,CAAU,CAAA8Q,8BAFb,EAGE;MACA,IAAI;QAAEjB;MAAF,IAAgB7P,SAApB;MAEA,IAAI;QAGF,IAGE,CAAC0P,aAAA,CAAcI,YAAd,CAA2BzL,MAAA,CAAOC,QAAP,CAAgB7a,IAA3C,EAAiDomB,SAAjD,CAHH,EAIE;UACAA,SAAA,GAAYH,aAAA,CAAcQ,gBAAd,CACV,IAAInR,GAAJ,CAAQ8Q,SAAR,EAAmBxL,MAAA,CAAOC,QAA1B,EAAoC7a,IAD1B,CAAZ;QADA;QAMF,MAAMsW,MAAA,GAAS,IAAIgR,MAAJ,CAAWlB,SAAX,EAAsB;UAAE3kB,IAAA,EAAM;QAAR,CAAtB,CAAf;QACA,MAAMyY,cAAA,GAAiB,IAAI5F,sEAAJ,CAAmB,MAAnB,EAA2B,QAA3B,EAAqCgC,MAArC,CAAvB;QACA,MAAMiR,cAAA,GAAiBA,CAAA,KAAM;UAC3BjR,MAAA,CAAOnN,mBAAP,CAA2B,OAA3B,EAAoCqe,aAApC;UACAtN,cAAA,CAAekB,OAAf;UACA9E,MAAA,CAAO0P,SAAP;UACA,IAAI,KAAK3M,SAAT,EAAoB;YAClB,KAAKsC,gBAAL,CAAsBlB,MAAtB,CAA6B,IAAIlF,KAAJ,CAAU,sBAAV,CAA7B;UADkB,CAApB,MAEO;YAGL,KAAKkS,gBAAL;UAHK;QANoB,CAA7B;QAaA,MAAMD,aAAA,GAAgBA,CAAA,KAAM;UAC1B,IAAI,CAAC,KAAKT,UAAV,EAAsB;YAGpBQ,cAAA;UAHoB;QADI,CAA5B;QAOAjR,MAAA,CAAO/X,gBAAP,CAAwB,OAAxB,EAAiCipB,aAAjC;QAEAtN,cAAA,CAAekN,EAAf,CAAkB,MAAlB,EAA0Bl2B,IAAA,IAAQ;UAChColB,MAAA,CAAOnN,mBAAP,CAA2B,OAA3B,EAAoCqe,aAApC;UACA,IAAI,KAAKnO,SAAT,EAAoB;YAClBkO,cAAA;YACA;UAFkB;UAIpB,IAAIr2B,IAAJ,EAAU;YACR,KAAK81B,eAAL,GAAuB9M,cAAvB;YACA,KAAK4M,KAAL,GAAaxQ,MAAb;YACA,KAAKyQ,UAAL,GAAkBzQ,MAAlB;YAEA,KAAKqF,gBAAL,CAAsBjC,OAAtB;YAEAQ,cAAA,CAAeI,IAAf,CAAoB,WAApB,EAAiC;cAC/B9D,SAAA,EAAW,KAAKA;YADe,CAAjC;UAPQ,CAAV,MAUO;YACL,KAAKiR,gBAAL;YACAvN,cAAA,CAAekB,OAAf;YACA9E,MAAA,CAAO0P,SAAP;UAHK;QAhByB,CAAlC;QAuBA9L,cAAA,CAAekN,EAAf,CAAkB,OAAlB,EAA2Bl2B,IAAA,IAAQ;UACjColB,MAAA,CAAOnN,mBAAP,CAA2B,OAA3B,EAAoCqe,aAApC;UACA,IAAI,KAAKnO,SAAT,EAAoB;YAClBkO,cAAA;YACA;UAFkB;UAIpB,IAAI;YACFG,QAAA;UADE,CAAJ,CAEE,MAAM;YAEN,KAAKD,gBAAL;UAFM;QARyB,CAAnC;QAcA,MAAMC,QAAA,GAAWA,CAAA,KAAM;UACrB,MAAMC,OAAA,GAAU,IAAI5M,UAAJ,EAAhB;UAEAb,cAAA,CAAeI,IAAf,CAAoB,MAApB,EAA4BqN,OAA5B,EAAqC,CAACA,OAAA,CAAQhN,MAAT,CAArC;QAHqB,CAAvB;QASA+M,QAAA;QACA;MApFE,CAAJ,CAqFE,MAAM;QACNlV,qDAAA,CAAK,+BAAL;MADM;IAxFR;IA8FF,KAAKiV,gBAAL;EAvGY;EA0GdA,iBAAA,EAAmB;IACjB,IAAI,CAACxB,aAAA,CAAcC,gBAAnB,EAAqC;MACnCn2B,qDAAA,CAAK,yBAAL;MACAk2B,aAAA,CAAcC,gBAAd,GAAiC,IAAjC;IAFmC;IAKrC3P,SAAA,CAAUqR,sBAAV,CACGxO,IADH,CACQyO,oBAAA,IAAwB;MAC5B,IAAI,KAAKxO,SAAT,EAAoB;QAClB,KAAKsC,gBAAL,CAAsBlB,MAAtB,CAA6B,IAAIlF,KAAJ,CAAU,sBAAV,CAA7B;QACA;MAFkB;MAIpB,MAAMoD,IAAA,GAAO,IAAIiN,YAAJ,EAAb;MACA,KAAKkB,KAAL,GAAanO,IAAb;MAGA,MAAM1iB,EAAA,GAAM,OAAMgwB,aAAA,CAAcE,YAAd,EAAP,EAAX;MAIA,MAAM2B,aAAA,GAAgB,IAAIxT,sEAAJ,CAAmBre,EAAA,GAAK,SAAxB,EAAmCA,EAAnC,EAAuC0iB,IAAvC,CAAtB;MACAkP,oBAAA,CAAqBE,KAArB,CAA2BD,aAA3B,EAA0CnP,IAA1C;MAEA,MAAMuB,cAAA,GAAiB,IAAI5F,sEAAJ,CAAmBre,EAAnB,EAAuBA,EAAA,GAAK,SAA5B,EAAuC0iB,IAAvC,CAAvB;MACA,KAAKqO,eAAL,GAAuB9M,cAAvB;MACA,KAAKyB,gBAAL,CAAsBjC,OAAtB;MAEAQ,cAAA,CAAeI,IAAf,CAAoB,WAApB,EAAiC;QAC/B9D,SAAA,EAAW,KAAKA;MADe,CAAjC;IApB4B,CADhC,EAyBG+D,KAzBH,CAyBSqI,MAAA,IAAU;MACf,KAAKjH,gBAAL,CAAsBlB,MAAtB,CACE,IAAIlF,KAAJ,CAAW,mCAAkCqN,MAAA,CAAO4C,OAAQ,IAA5D,CADF;IADe,CAzBnB;EANiB;EAyCnBpK,QAAA,EAAU;IACR,KAAK/B,SAAL,GAAiB,IAAjB;IACA,IAAI,KAAK0N,UAAT,EAAqB;MAEnB,KAAKA,UAAL,CAAgBf,SAAhB;MACA,KAAKe,UAAL,GAAkB,IAAlB;IAHmB;IAKrBxQ,SAAA,CAAU,CAAAsQ,WAAV,EAAwB5V,MAAxB,CAA+B,KAAK6V,KAApC;IACA,KAAKA,KAAL,GAAa,IAAb;IACA,IAAI,KAAKE,eAAT,EAA0B;MACxB,KAAKA,eAAL,CAAqB5L,OAArB;MACA,KAAK4L,eAAL,GAAuB,IAAvB;IAFwB;EATlB;EAkBV,OAAOnO,QAAPA,CAAgBvJ,MAAhB,EAAwB;IAItB,IAAI,CAACA,MAAA,EAAQqJ,IAAb,EAAmB;MACjB,MAAM,IAAIpD,KAAJ,CAAU,gDAAV,CAAN;IADiB;IAGnB,MAAMyS,UAAA,GAAa,KAAK,CAAAnB,WAAL,EAAmBlmB,GAAnB,CAAuB2O,MAAA,CAAOqJ,IAA9B,CAAnB;IACA,IAAIqP,UAAJ,EAAgB;MACd,IAAIA,UAAA,CAAW3M,eAAf,EAAgC;QAC9B,MAAM,IAAI9F,KAAJ,CACJ,0DACE,oEAFE,CAAN;MAD8B;MAMhC,OAAOyS,UAAP;IAPc;IAShB,OAAO,IAAIzR,SAAJ,CAAcjH,MAAd,CAAP;EAjBsB;EAwBxB,WAAW8W,SAAXA,CAAA,EAAuB;IACrB,IAAI/R,mEAAA,CAAoB+R,SAAxB,EAAmC;MACjC,OAAO/R,mEAAA,CAAoB+R,SAA3B;IADiC;IAGnC,MAAM,IAAI7Q,KAAJ,CAAU,+CAAV,CAAN;EAJqB;EAOvB,WAAW,CAAA8R,8BAAXA,CAAA,EAA6C;IAC3C,IAAI;MACF,OAAO5P,UAAA,CAAWwQ,WAAX,EAAwBJ,oBAAxB,IAAgD,IAAvD;IADE,CAAJ,CAEE,MAAM;MACN,OAAO,IAAP;IADM;EAHmC;EAS7C,WAAWD,sBAAXA,CAAA,EAAoC;IAClC,MAAMM,MAAA,GAAS,MAAAA,CAAA,KAAY;MACzB,IAAI,KAAK,CAAAb,8BAAT,EAA0C;QAExC,OAAO,KAAK,CAAAA,8BAAZ;MAFwC;MAI1C,MAAM/Q,MAAA,GAGA,MAAM6R,sBAAA,CAAuB,KAAK/B,SAA5B,CAHZ;MAIA,OAAO9P,MAAA,CAAOuR,oBAAd;IATyB,CAA3B;IAYA,OAAOj4B,uDAAA,CAAO,IAAP,EAAa,wBAAb,EAAuCs4B,MAAA,EAAvC,CAAP;EAbkC;AArRtB;AA0ShB,MAAM9N,eAAN,CAAsB;EACpB,CAAAgO,cAAA,GAAkB,IAAI1nB,GAAJ,EAAlB;EAEA,CAAA2nB,SAAA,GAAa,IAAI3nB,GAAJ,EAAb;EAEA,CAAA4nB,YAAA,GAAgB,IAAI5nB,GAAJ,EAAhB;EAEA,CAAA6nB,kBAAA,GAAsB,IAAtB;EAEAp0B,YAAY+lB,cAAZ,EAA4B6E,WAA5B,EAAyCpF,aAAzC,EAAwDrK,MAAxD,EAAgEkZ,OAAhE,EAAyE;IACvE,KAAKtO,cAAL,GAAsBA,cAAtB;IACA,KAAK6E,WAAL,GAAmBA,WAAnB;IACA,KAAKa,UAAL,GAAkB,IAAIE,UAAJ,EAAlB;IACA,KAAK2I,UAAL,GAAkB,IAAI1U,uDAAJ,CAAe;MAC/ByD,aAAA,EAAelI,MAAA,CAAOkI,aADS;MAE/BY,YAAA,EAAc9I,MAAA,CAAO8I;IAFU,CAAf,CAAlB;IAIA,KAAKsQ,OAAL,GAAepZ,MAAf;IAEA,KAAK4I,aAAL,GAAqBsQ,OAAA,CAAQtQ,aAA7B;IACA,KAAKC,aAAL,GAAqBqQ,OAAA,CAAQrQ,aAA7B;IACA,KAAKG,iBAAL,GAAyBkQ,OAAA,CAAQlQ,iBAAjC;IACA,KAAKG,uBAAL,GAA+B+P,OAAA,CAAQ/P,uBAAvC;IAEA,KAAKY,SAAL,GAAiB,KAAjB;IACA,KAAKsP,iBAAL,GAAyB,IAAzB;IAEA,KAAKC,cAAL,GAAsBjP,aAAtB;IACA,KAAKkP,WAAL,GAAmB,IAAnB;IACA,KAAKC,aAAL,GAAqB,IAArB;IACA,KAAKnK,sBAAL,GAA8B,IAAI5L,8DAAJ,EAA9B;IAEA,KAAKgW,mBAAL;EAvBuE;EA+CzE,CAAAC,kBAAmBvuB,IAAnB,EAAyBvJ,IAAA,GAAO,IAAhC,EAAsC;IACpC,MAAM+3B,aAAA,GAAgB,KAAK,CAAAb,cAAL,CAAqBznB,GAArB,CAAyBlG,IAAzB,CAAtB;IACA,IAAIwuB,aAAJ,EAAmB;MACjB,OAAOA,aAAP;IADiB;IAGnB,MAAM9P,OAAA,GAAU,KAAKe,cAAL,CAAoBQ,eAApB,CAAoCjgB,IAApC,EAA0CvJ,IAA1C,CAAhB;IAEA,KAAK,CAAAk3B,cAAL,CAAqBxY,GAArB,CAAyBnV,IAAzB,EAA+B0e,OAA/B;IACA,OAAOA,OAAP;EARoC;EAWtC,IAAItkB,iBAAJA,CAAA,EAAwB;IACtB,OAAOjF,uDAAA,CAAO,IAAP,EAAa,mBAAb,EAAkC,IAAIQ,qEAAJ,EAAlC,CAAP;EADsB;EAIxBuwB,mBACEnU,MADF,EAEEwU,cAAA,GAAiB3O,2DAAA,CAAe4O,MAFlC,EAGEK,sBAAA,GAAyB,IAH3B,EAIE4H,QAAA,GAAW,KAJb,EAKE;IACA,IAAItI,eAAA,GAAkB5N,gEAAA,CAAoBmW,OAA1C;IACA,IAAI/D,6BAAA,GAAgC5U,qEAApC;IAEA,QAAQhE,MAAR;MACE,KAAK,KAAL;QACEoU,eAAA,GAAkB5N,gEAAA,CAAoBoW,GAAtC;QACA;MACF,KAAK,SAAL;QACE;MACF,KAAK,OAAL;QACExI,eAAA,GAAkB5N,gEAAA,CAAoB6O,KAAtC;QACA;MACF;QACE9xB,qDAAA,CAAM,wCAAuCyc,MAAxC,EAAL;IAVJ;IAaA,QAAQwU,cAAR;MACE,KAAK3O,2DAAA,CAAegX,OAApB;QACEzI,eAAA,IAAmB5N,gEAAA,CAAoBsW,mBAAvC;QACA;MACF,KAAKjX,2DAAA,CAAe4O,MAApB;QACE;MACF,KAAK5O,2DAAA,CAAekX,YAApB;QACE3I,eAAA,IAAmB5N,gEAAA,CAAoBwW,iBAAvC;QACA;MACF,KAAKnX,2DAAA,CAAeoX,cAApB;QACE7I,eAAA,IAAmB5N,gEAAA,CAAoB0W,mBAAvC;QAEA,MAAM70B,iBAAA,GACJ+rB,eAAA,GAAkB5N,gEAAA,CAAoB6O,KAAtC,IACAP,sBAAA,YAAkC5P,0EADlC,GAEI4P,sBAFJ,GAGI,KAAKzsB,iBAJX;QAMAuwB,6BAAA,GAAgCvwB,iBAAA,CAAkB8c,YAAlD;QACA;MACF;QACE5hB,qDAAA,CAAM,gDAA+CixB,cAAhD,EAAL;IArBJ;IAwBA,IAAIkI,QAAJ,EAAc;MACZtI,eAAA,IAAmB5N,gEAAA,CAAoB2W,MAAvC;IADY;IAId,OAAO;MACL/I,eADK;MAELa,QAAA,EAAU,GAAGb,eAAgB,IAAGwE,6BAAA,CAA8B1U,IAApD,EAFL;MAGL0U;IAHK,CAAP;EA7CA;EAoDFhK,QAAA,EAAU;IACR,IAAI,KAAKuN,iBAAT,EAA4B;MAC1B,OAAO,KAAKA,iBAAL,CAAuBxP,OAA9B;IAD0B;IAI5B,KAAKE,SAAL,GAAiB,IAAjB;IACA,KAAKsP,iBAAL,GAAyB,IAAI5V,8DAAJ,EAAzB;IAEA,KAAK,CAAAwV,kBAAL,EAA0B9N,MAA1B,CACE,IAAIlF,KAAJ,CAAU,iDAAV,CADF;IAIA,MAAMmP,MAAA,GAAS,EAAf;IAGA,WAAW9uB,IAAX,IAAmB,KAAK,CAAAyyB,SAAL,CAAgBhnB,MAAhB,EAAnB,EAA6C;MAC3CqjB,MAAA,CAAOroB,IAAP,CAAYzG,IAAA,CAAK6uB,QAAL,EAAZ;IAD2C;IAG7C,KAAK,CAAA4D,SAAL,CAAgBre,KAAhB;IACA,KAAK,CAAAse,YAAL,CAAmBte,KAAnB;IAEA,IAAI,KAAK4f,cAAL,CAAoB,mBAApB,CAAJ,EAA8C;MAC5C,KAAK/0B,iBAAL,CAAuBqc,aAAvB;IAD4C;IAI9C,MAAM2Y,UAAA,GAAa,KAAK3P,cAAL,CAAoBQ,eAApB,CAAoC,WAApC,EAAiD,IAAjD,CAAnB;IACAgK,MAAA,CAAOroB,IAAP,CAAYwtB,UAAZ;IAEApQ,OAAA,CAAQO,GAAR,CAAY0K,MAAZ,EAAoBtL,IAApB,CAAyB,MAAM;MAC7B,KAAKwG,UAAL,CAAgB5V,KAAhB;MACA,KAAKye,UAAL,CAAgBze,KAAhB;MACA,KAAK,CAAAoe,cAAL,CAAqBpe,KAArB;MACA,KAAKmO,aAAL,CAAmBiD,OAAnB;MAEA,KAAKwN,cAAL,EAAqBkB,iBAArB,CACE,IAAI1X,2DAAJ,CAAmB,wBAAnB,CADF;MAIA,IAAI,KAAK8H,cAAT,EAAyB;QACvB,KAAKA,cAAL,CAAoBkB,OAApB;QACA,KAAKlB,cAAL,GAAsB,IAAtB;MAFuB;MAIzB,KAAKyO,iBAAL,CAAuBjP,OAAvB;IAd6B,CAA/B,EAeG,KAAKiP,iBAAL,CAAuBlO,MAf1B;IAgBA,OAAO,KAAKkO,iBAAL,CAAuBxP,OAA9B;EA5CQ;EA+CV4P,oBAAA,EAAsB;IACpB,MAAM;MAAE7O,cAAF;MAAkB6E;IAAlB,IAAkC,IAAxC;IAEA7E,cAAA,CAAekN,EAAf,CAAkB,WAAlB,EAA+B,CAACl2B,IAAD,EAAO64B,IAAP,KAAgB;MAC7CzX,uDAAA,CACE,KAAKsW,cADP,EAEE,iDAFF;MAIA,KAAKC,WAAL,GAAmB,KAAKD,cAAL,CAAoBoB,aAApB,EAAnB;MACA,KAAKnB,WAAL,CAAiB1N,UAAjB,GAA8BtM,GAAA,IAAO;QACnC,KAAKia,aAAL,GAAqB;UACnBzM,MAAA,EAAQxN,GAAA,CAAIwN,MADO;UAEnBC,KAAA,EAAOzN,GAAA,CAAIyN;QAFQ,CAArB;MADmC,CAArC;MAMAyN,IAAA,CAAKE,MAAL,GAAc,MAAM;QAClB,KAAKpB,WAAL,CACGzE,IADH,GAEGhL,IAFH,CAEQ,UAAU;UAAE1X,KAAF;UAAS2iB;QAAT,CAAV,EAA2B;UAC/B,IAAIA,IAAJ,EAAU;YACR0F,IAAA,CAAKG,KAAL;YACA;UAFQ;UAIV5X,uDAAA,CACE5Q,KAAA,YAAiByoB,WADnB,EAEE,sCAFF;UAMAJ,IAAA,CAAKK,OAAL,CAAa,IAAIrP,UAAJ,CAAerZ,KAAf,CAAb,EAAoC,CAApC,EAAuC,CAACA,KAAD,CAAvC;QAX+B,CAFnC,EAeG6Y,KAfH,CAeSqI,MAAA,IAAU;UACfmH,IAAA,CAAKzH,KAAL,CAAWM,MAAX;QADe,CAfnB;MADkB,CAApB;MAqBAmH,IAAA,CAAKM,QAAL,GAAgBzH,MAAA,IAAU;QACxB,KAAKiG,WAAL,CAAiBhE,MAAjB,CAAwBjC,MAAxB;QAEAmH,IAAA,CAAKO,KAAL,CAAW/P,KAAX,CAAiBgQ,WAAA,IAAe;UAC9B,IAAI,KAAKlR,SAAT,EAAoB;YAClB;UADkB;UAGpB,MAAMkR,WAAN;QAJ8B,CAAhC;MAHwB,CAA1B;IAjC6C,CAA/C;IA6CArQ,cAAA,CAAekN,EAAf,CAAkB,oBAAlB,EAAwCl2B,IAAA,IAAQ;MAC9C,MAAMs5B,iBAAA,GAAoB,IAAIzX,8DAAJ,EAA1B;MACA,MAAM0X,UAAA,GAAa,KAAK5B,WAAxB;MACA4B,UAAA,CAAWC,YAAX,CAAwBtR,IAAxB,CAA6B,MAAM;QAGjC,IAAI,CAACqR,UAAA,CAAWE,oBAAZ,IAAoC,CAACF,UAAA,CAAWG,gBAApD,EAAsE;UACpE,IAAI,KAAK9B,aAAT,EAAwB;YACtB/J,WAAA,CAAY5D,UAAZ,GAAyB,KAAK2N,aAA9B;UADsB;UAGxB2B,UAAA,CAAWtP,UAAX,GAAwBtM,GAAA,IAAO;YAC7BkQ,WAAA,CAAY5D,UAAZ,GAAyB;cACvBkB,MAAA,EAAQxN,GAAA,CAAIwN,MADW;cAEvBC,KAAA,EAAOzN,GAAA,CAAIyN;YAFY,CAAzB;UAD6B,CAA/B;QAJoE;QAYtEkO,iBAAA,CAAkB9Q,OAAlB,CAA0B;UACxBiR,oBAAA,EAAsBF,UAAA,CAAWE,oBADT;UAExBC,gBAAA,EAAkBH,UAAA,CAAWG,gBAFL;UAGxBC,aAAA,EAAeJ,UAAA,CAAWI;QAHF,CAA1B;MAfiC,CAAnC,EAoBGL,iBAAA,CAAkB/P,MApBrB;MAsBA,OAAO+P,iBAAA,CAAkBrR,OAAzB;IAzB8C,CAAhD;IA4BAe,cAAA,CAAekN,EAAf,CAAkB,gBAAlB,EAAoC,CAACl2B,IAAD,EAAO64B,IAAP,KAAgB;MAClDzX,uDAAA,CACE,KAAKsW,cADP,EAEE,sDAFF;MAIA,MAAMkC,WAAA,GAAc,KAAKlC,cAAL,CAAoBmC,cAApB,CAClB75B,IAAA,CAAKgrB,KADa,EAElBhrB,IAAA,CAAKyrB,GAFa,CAApB;MAeA,IAAI,CAACmO,WAAL,EAAkB;QAChBf,IAAA,CAAKG,KAAL;QACA;MAFgB;MAKlBH,IAAA,CAAKE,MAAL,GAAc,MAAM;QAClBa,WAAA,CACG1G,IADH,GAEGhL,IAFH,CAEQ,UAAU;UAAE1X,KAAF;UAAS2iB;QAAT,CAAV,EAA2B;UAC/B,IAAIA,IAAJ,EAAU;YACR0F,IAAA,CAAKG,KAAL;YACA;UAFQ;UAIV5X,uDAAA,CACE5Q,KAAA,YAAiByoB,WADnB,EAEE,2CAFF;UAIAJ,IAAA,CAAKK,OAAL,CAAa,IAAIrP,UAAJ,CAAerZ,KAAf,CAAb,EAAoC,CAApC,EAAuC,CAACA,KAAD,CAAvC;QAT+B,CAFnC,EAaG6Y,KAbH,CAaSqI,MAAA,IAAU;UACfmH,IAAA,CAAKzH,KAAL,CAAWM,MAAX;QADe,CAbnB;MADkB,CAApB;MAmBAmH,IAAA,CAAKM,QAAL,GAAgBzH,MAAA,IAAU;QACxBkI,WAAA,CAAYjG,MAAZ,CAAmBjC,MAAnB;QAEAmH,IAAA,CAAKO,KAAL,CAAW/P,KAAX,CAAiBgQ,WAAA,IAAe;UAC9B,IAAI,KAAKlR,SAAT,EAAoB;YAClB;UADkB;UAGpB,MAAMkR,WAAN;QAJ8B,CAAhC;MAHwB,CAA1B;IA5CkD,CAApD;IAwDArQ,cAAA,CAAekN,EAAf,CAAkB,QAAlB,EAA4B,CAAC;MAAEtK;IAAF,CAAD,KAAiB;MAC3C,KAAKkO,SAAL,GAAiBlO,OAAA,CAAQE,QAAzB;MACA,KAAKG,WAAL,GAAmBL,OAAA,CAAQmO,UAA3B;MACA,OAAOnO,OAAA,CAAQmO,UAAf;MACAlM,WAAA,CAAYvE,WAAZ,CAAwBd,OAAxB,CAAgC,IAAImD,gBAAJ,CAAqBC,OAArB,EAA8B,IAA9B,CAAhC;IAJ2C,CAA7C;IAOA5C,cAAA,CAAekN,EAAf,CAAkB,cAAlB,EAAkC,UAAU9L,EAAV,EAAc;MAC9C,IAAIsH,MAAJ;MACA,QAAQtH,EAAA,CAAG7gB,IAAX;QACE,KAAK,mBAAL;UACEmoB,MAAA,GAAS,IAAI9P,8DAAJ,CAAsBwI,EAAA,CAAGkK,OAAzB,EAAkClK,EAAA,CAAG4P,IAArC,CAAT;UACA;QACF,KAAK,qBAAL;UACEtI,MAAA,GAAS,IAAInQ,gEAAJ,CAAwB6I,EAAA,CAAGkK,OAA3B,CAAT;UACA;QACF,KAAK,qBAAL;UACE5C,MAAA,GAAS,IAAI/P,gEAAJ,CAAwByI,EAAA,CAAGkK,OAA3B,CAAT;UACA;QACF,KAAK,6BAAL;UACE5C,MAAA,GAAS,IAAIzP,wEAAJ,CAAgCmI,EAAA,CAAGkK,OAAnC,EAA4ClK,EAAA,CAAG6P,MAA/C,CAAT;UACA;QACF,KAAK,uBAAL;UACEvI,MAAA,GAAS,IAAIxP,kEAAJ,CAA0BkI,EAAA,CAAGkK,OAA7B,EAAsClK,EAAA,CAAG8P,OAAzC,CAAT;UACA;QACF;UACEv7B,4DAAA,CAAY,wCAAZ;MAjBJ;MAmBAkvB,WAAA,CAAYvE,WAAZ,CAAwBC,MAAxB,CAA+BmI,MAA/B;IArB8C,CAAhD;IAwBA1I,cAAA,CAAekN,EAAf,CAAkB,iBAAlB,EAAqCiE,SAAA,IAAa;MAChD,KAAK,CAAA9C,kBAAL,GAA2B,IAAIxV,8DAAJ,EAA3B;MAEA,IAAIgM,WAAA,CAAY7D,UAAhB,EAA4B;QAC1B,MAAMoQ,cAAA,GAAiBtV,QAAA,IAAY;UACjC,IAAIA,QAAA,YAAoBT,KAAxB,EAA+B;YAC7B,KAAK,CAAAgT,kBAAL,CAAyB9N,MAAzB,CAAgCzE,QAAhC;UAD6B,CAA/B,MAEO;YACL,KAAK,CAAAuS,kBAAL,CAAyB7O,OAAzB,CAAiC;cAAE1D;YAAF,CAAjC;UADK;QAH0B,CAAnC;QAOA,IAAI;UACF+I,WAAA,CAAY7D,UAAZ,CAAuBoQ,cAAvB,EAAuCD,SAAA,CAAUH,IAAjD;QADE,CAAJ,CAEE,OAAO5P,EAAP,EAAW;UACX,KAAK,CAAAiN,kBAAL,CAAyB9N,MAAzB,CAAgCa,EAAhC;QADW;MAVa,CAA5B,MAaO;QACL,KAAK,CAAAiN,kBAAL,CAAyB9N,MAAzB,CACE,IAAI3H,8DAAJ,CAAsBuY,SAAA,CAAU7F,OAAhC,EAAyC6F,SAAA,CAAUH,IAAnD,CADF;MADK;MAKP,OAAO,KAAK,CAAA3C,kBAAL,CAAyBpP,OAAhC;IArBgD,CAAlD;IAwBAe,cAAA,CAAekN,EAAf,CAAkB,YAAlB,EAAgCl2B,IAAA,IAAQ;MAGtC6tB,WAAA,CAAY5D,UAAZ,GAAyB;QACvBkB,MAAA,EAAQnrB,IAAA,CAAKuK,MADU;QAEvB6gB,KAAA,EAAOprB,IAAA,CAAKuK;MAFW,CAAzB;MAKA,KAAKkjB,sBAAL,CAA4BjF,OAA5B,CAAoCxoB,IAApC;IARsC,CAAxC;IAWAgpB,cAAA,CAAekN,EAAf,CAAkB,iBAAlB,EAAqCl2B,IAAA,IAAQ;MAC3C,IAAI,KAAKmoB,SAAT,EAAoB;QAClB;MADkB;MAIpB,MAAMzjB,IAAA,GAAO,KAAK,CAAAyyB,SAAL,CAAgB1nB,GAAhB,CAAoBzP,IAAA,CAAKouB,SAAzB,CAAb;MACA1pB,IAAA,CAAKqvB,gBAAL,CAAsB/zB,IAAA,CAAKgyB,YAA3B,EAAyChyB,IAAA,CAAKuwB,QAA9C;IAN2C,CAA7C;IASAvH,cAAA,CAAekN,EAAf,CAAkB,WAAlB,EAA+B,CAAC,CAACnxB,EAAD,EAAKwL,IAAL,EAAW8pB,YAAX,CAAD,KAA8B;MAC3D,IAAI,KAAKlS,SAAT,EAAoB;QAClB;MADkB;MAIpB,IAAI,KAAKuG,UAAL,CAAgBtiB,GAAhB,CAAoBrH,EAApB,CAAJ,EAA6B;QAC3B;MAD2B;MAI7B,QAAQwL,IAAR;QACE,KAAK,MAAL;UACE,MAAM6N,MAAA,GAAS,KAAKoZ,OAApB;UAEA,IAAI,WAAW6C,YAAf,EAA6B;YAC3B,MAAMC,aAAA,GAAgBD,YAAA,CAAajJ,KAAnC;YACAvyB,qDAAA,CAAM,8BAA6By7B,aAA9B,EAAL;YACA,KAAK5L,UAAL,CAAgBlG,OAAhB,CAAwBzjB,EAAxB,EAA4Bu1B,aAA5B;YACA;UAJ2B;UAO7B,MAAMC,WAAA,GACJnc,MAAA,CAAOuI,MAAP,IAAiBJ,UAAA,CAAWiU,aAAX,EAA0BC,OAA3C,GACI,CAACC,IAAD,EAAO7sB,GAAP,KAAe0Y,UAAA,CAAWiU,aAAX,CAAyBG,SAAzB,CAAmCD,IAAnC,EAAyC7sB,GAAzC,CADnB,GAEI,IAHN;UAIA,MAAM6sB,IAAA,GAAO,IAAI9X,2DAAJ,CAAmByX,YAAnB,EAAiC;YAC5CrU,eAAA,EAAiB5H,MAAA,CAAO4H,eADoB;YAE5CG,eAAA,EAAiB/H,MAAA,CAAO+H,eAFoB;YAG5CN,YAAA,EAAczH,MAAA,CAAOyH,YAHuB;YAI5C0U;UAJ4C,CAAjC,CAAb;UAOA,KAAKhD,UAAL,CACG3d,IADH,CACQ8gB,IADR,EAEGrR,KAFH,CAESqI,MAAA,IAAU;YACf,OAAO1I,cAAA,CAAeQ,eAAf,CAA+B,cAA/B,EAA+C;cAAEzkB;YAAF,CAA/C,CAAP;UADe,CAFnB,EAKG61B,OALH,CAKW,MAAM;YACb,IAAI,CAACxc,MAAA,CAAOgI,mBAAR,IAA+BsU,IAAA,CAAK16B,IAAxC,EAA8C;cAM5C06B,IAAA,CAAK16B,IAAL,GAAY,IAAZ;YAN4C;YAQ9C,KAAK0uB,UAAL,CAAgBlG,OAAhB,CAAwBzjB,EAAxB,EAA4B21B,IAA5B;UATa,CALjB;UAgBA;QACF,KAAK,UAAL;QACA,KAAK,OAAL;QACA,KAAK,SAAL;UACE,KAAKhM,UAAL,CAAgBlG,OAAhB,CAAwBzjB,EAAxB,EAA4Bs1B,YAA5B;UACA;QACF;UACE,MAAM,IAAIhW,KAAJ,CAAW,kCAAiC9T,IAAlC,EAAV,CAAN;MA7CJ;IAT2D,CAA7D;IA0DAyY,cAAA,CAAekN,EAAf,CAAkB,KAAlB,EAAyB,CAAC,CAACnxB,EAAD,EAAKqpB,SAAL,EAAgB7d,IAAhB,EAAsBsqB,SAAtB,CAAD,KAAsC;MAC7D,IAAI,KAAK1S,SAAT,EAAoB;QAElB;MAFkB;MAKpB,MAAM2S,SAAA,GAAY,KAAK,CAAA3D,SAAL,CAAgB1nB,GAAhB,CAAoB2e,SAApB,CAAlB;MACA,IAAI0M,SAAA,CAAUnM,IAAV,CAAeviB,GAAf,CAAmBrH,EAAnB,CAAJ,EAA4B;QAC1B;MAD0B;MAI5B,IAAI+1B,SAAA,CAAUhM,aAAV,CAAwBxX,IAAxB,KAAiC,CAArC,EAAwC;QACtCujB,SAAA,EAAW/Z,MAAX,EAAmBkY,KAAnB;QACA;MAFsC;MAKxC,QAAQzoB,IAAR;QACE,KAAK,OAAL;UACEuqB,SAAA,CAAUnM,IAAV,CAAenG,OAAf,CAAuBzjB,EAAvB,EAA2B81B,SAA3B;UAGA,IAAIA,SAAJ,EAAe;YACb,IAAItwB,MAAJ;YACA,IAAIswB,SAAA,CAAU/Z,MAAd,EAAsB;cACpB,MAAM;gBAAEphB,KAAF;gBAASC;cAAT,IAAoBk7B,SAA1B;cACAtwB,MAAA,GAAS7K,KAAA,GAAQC,MAAR,GAAiB,CAA1B;YAFoB,CAAtB,MAGO;cACL4K,MAAA,GAASswB,SAAA,CAAU76B,IAAV,EAAgBuK,MAAhB,IAA0B,CAAnC;YADK;YAIP,IAAIA,MAAA,GAASmX,oEAAb,EAAsC;cACpCoZ,SAAA,CAAUjM,wBAAV,GAAqC,IAArC;YADoC;UATzB;UAaf;QACF,KAAK,SAAL;UACEiM,SAAA,CAAUnM,IAAV,CAAenG,OAAf,CAAuBzjB,EAAvB,EAA2B81B,SAA3B;UACA;QACF;UACE,MAAM,IAAIxW,KAAJ,CAAW,2BAA0B9T,IAA3B,EAAV,CAAN;MAvBJ;IAhB6D,CAA/D;IA2CAyY,cAAA,CAAekN,EAAf,CAAkB,aAAlB,EAAiCl2B,IAAA,IAAQ;MACvC,IAAI,KAAKmoB,SAAT,EAAoB;QAClB;MADkB;MAGpB0F,WAAA,CAAY5D,UAAZ,GAAyB;QACvBkB,MAAA,EAAQnrB,IAAA,CAAKmrB,MADU;QAEvBC,KAAA,EAAOprB,IAAA,CAAKorB;MAFW,CAAzB;IAJuC,CAAzC;IAUApC,cAAA,CAAekN,EAAf,CAAkB,kBAAlB,EAAsCl2B,IAAA,IAAQ;MAC5C,IAAI,KAAKmoB,SAAT,EAAoB;QAClB,OAAOI,OAAA,CAAQgB,MAAR,CAAe,IAAIlF,KAAJ,CAAU,uBAAV,CAAf,CAAP;MADkB;MAGpB,IAAI,CAAC,KAAK+C,iBAAV,EAA6B;QAC3B,OAAOmB,OAAA,CAAQgB,MAAR,CACL,IAAIlF,KAAJ,CACE,wEADF,CADK,CAAP;MAD2B;MAO7B,OAAO,KAAK+C,iBAAL,CAAuB2T,KAAvB,CAA6B/6B,IAA7B,CAAP;IAX4C,CAA9C;IAcAgpB,cAAA,CAAekN,EAAf,CAAkB,uBAAlB,EAA2Cl2B,IAAA,IAAQ;MACjD,IAAI,KAAKmoB,SAAT,EAAoB;QAClB,OAAOI,OAAA,CAAQgB,MAAR,CAAe,IAAIlF,KAAJ,CAAU,uBAAV,CAAf,CAAP;MADkB;MAGpB,IAAI,CAAC,KAAKkD,uBAAV,EAAmC;QACjC,OAAOgB,OAAA,CAAQgB,MAAR,CACL,IAAIlF,KAAJ,CACE,8EADF,CADK,CAAP;MADiC;MAOnC,OAAO,KAAKkD,uBAAL,CAA6BwT,KAA7B,CAAmC/6B,IAAnC,CAAP;IAXiD,CAAnD;EA5UoB;EA2VtBstB,QAAA,EAAU;IACR,OAAO,KAAKtE,cAAL,CAAoBQ,eAApB,CAAoC,SAApC,EAA+C,IAA/C,CAAP;EADQ;EAIV+D,aAAA,EAAe;IACb,IAAI,KAAK5pB,iBAAL,CAAuB2T,IAAvB,IAA+B,CAAnC,EAAsC;MACpCzY,qDAAA,CACE,6DACE,wCAFJ;IADoC;IAMtC,MAAM;MAAErB,GAAF;MAAOiiB;IAAP,IAAoB,KAAK9b,iBAAL,CAAuB8c,YAAjD;IAEA,OAAO,KAAKuI,cAAL,CACJQ,eADI,CAEH,cAFG,EAGH;MACEwC,SAAA,EAAW,CAAC,CAAC,KAAKC,WADpB;MAEEH,QAAA,EAAU,KAAKgO,SAFjB;MAGEn2B,iBAAA,EAAmBnG,GAHrB;MAIE8R,QAAA,EAAU,KAAKqoB,WAAL,EAAkBroB,QAAlB,IAA8B;IAJ1C,CAHG,EASHmQ,QATG,EAWJmb,OAXI,CAWI,MAAM;MACb,KAAKj3B,iBAAL,CAAuBqc,aAAvB;IADa,CAXV,CAAP;EATa;EAyBfmM,QAAQC,UAAR,EAAoB;IAClB,IACE,CAAClH,MAAA,CAAOC,SAAP,CAAiBiH,UAAjB,CAAD,IACAA,UAAA,IAAc,CADd,IAEAA,UAAA,GAAa,KAAK0N,SAHpB,EAIE;MACA,OAAOvR,OAAA,CAAQgB,MAAR,CAAe,IAAIlF,KAAJ,CAAU,uBAAV,CAAf,CAAP;IADA;IAIF,MAAM+J,SAAA,GAAYhC,UAAA,GAAa,CAA/B;MACE2L,aAAA,GAAgB,KAAK,CAAAX,YAAL,CAAmB3nB,GAAnB,CAAuB2e,SAAvB,CADlB;IAEA,IAAI2J,aAAJ,EAAmB;MACjB,OAAOA,aAAP;IADiB;IAGnB,MAAM9P,OAAA,GAAU,KAAKe,cAAL,CACbQ,eADa,CACG,SADH,EACc;MAC1B4E;IAD0B,CADd,EAIblG,IAJa,CAIRmG,QAAA,IAAY;MAChB,IAAI,KAAKlG,SAAT,EAAoB;QAClB,MAAM,IAAI9D,KAAJ,CAAU,qBAAV,CAAN;MADkB;MAGpB,MAAM3f,IAAA,GAAO,IAAIupB,YAAJ,CACXG,SADW,EAEXC,QAFW,EAGX,IAHW,EAIX,KAAKmJ,OAAL,CAAa7Q,MAJF,CAAb;MAMA,KAAK,CAAAwQ,SAAL,CAAgBzY,GAAhB,CAAoB0P,SAApB,EAA+B1pB,IAA/B;MACA,OAAOA,IAAP;IAXgB,CAJJ,CAAhB;IAiBA,KAAK,CAAA0yB,YAAL,CAAmB1Y,GAAnB,CAAuB0P,SAAvB,EAAkCnG,OAAlC;IACA,OAAOA,OAAP;EAhCkB;EAmCpBoE,aAAaC,GAAb,EAAkB;IAChB,IACE,OAAOA,GAAP,KAAe,QAAf,IACAA,GAAA,KAAQ,IADR,IAEA,CAACpH,MAAA,CAAOC,SAAP,CAAiBmH,GAAA,CAAI0O,GAArB,CAFD,IAGA1O,GAAA,CAAI0O,GAAJ,GAAU,CAHV,IAIA,CAAC9V,MAAA,CAAOC,SAAP,CAAiBmH,GAAA,CAAI2O,GAArB,CAJD,IAKA3O,GAAA,CAAI2O,GAAJ,GAAU,CANZ,EAOE;MACA,OAAO1S,OAAA,CAAQgB,MAAR,CAAe,IAAIlF,KAAJ,CAAU,4BAAV,CAAf,CAAP;IADA;IAGF,OAAO,KAAK2E,cAAL,CAAoBQ,eAApB,CAAoC,cAApC,EAAoD;MACzDwR,GAAA,EAAK1O,GAAA,CAAI0O,GADgD;MAEzDC,GAAA,EAAK3O,GAAA,CAAI2O;IAFgD,CAApD,CAAP;EAXgB;EAiBlB1L,eAAenB,SAAf,EAA0B9S,MAA1B,EAAkC;IAChC,OAAO,KAAK0N,cAAL,CAAoBQ,eAApB,CAAoC,gBAApC,EAAsD;MAC3D4E,SAD2D;MAE3D9S;IAF2D,CAAtD,CAAP;EADgC;EAOlCyS,gBAAA,EAAkB;IAChB,OAAO,KAAK,CAAA+J,iBAAL,CAAwB,iBAAxB,CAAP;EADgB;EAIlBj0B,aAAA,EAAe;IACb,OAAO,KAAK,CAAAi0B,iBAAL,CAAwB,cAAxB,CAAP;EADa;EAIf9J,uBAAA,EAAyB;IACvB,OAAO,KAAKhF,cAAL,CAAoBQ,eAApB,CAAoC,wBAApC,EAA8D,IAA9D,CAAP;EADuB;EAIzB+C,gBAAA,EAAkB;IAChB,OAAO,KAAKvD,cAAL,CAAoBQ,eAApB,CAAoC,iBAApC,EAAuD,IAAvD,CAAP;EADgB;EAIlBgD,eAAeznB,EAAf,EAAmB;IACjB,IAAI,OAAOA,EAAP,KAAc,QAAlB,EAA4B;MAC1B,OAAOwjB,OAAA,CAAQgB,MAAR,CAAe,IAAIlF,KAAJ,CAAU,8BAAV,CAAf,CAAP;IAD0B;IAG5B,OAAO,KAAK2E,cAAL,CAAoBQ,eAApB,CAAoC,gBAApC,EAAsD;MAC3DzkB;IAD2D,CAAtD,CAAP;EAJiB;EASnB0nB,cAAA,EAAgB;IACd,OAAO,KAAKzD,cAAL,CAAoBQ,eAApB,CAAoC,eAApC,EAAqD,IAArD,CAAP;EADc;EAIhBkD,cAAA,EAAgB;IACd,OAAO,KAAK1D,cAAL,CAAoBQ,eAApB,CAAoC,eAApC,EAAqD,IAArD,CAAP;EADc;EAIhBmD,YAAA,EAAc;IACZ,OAAO,KAAK3D,cAAL,CAAoBQ,eAApB,CAAoC,aAApC,EAAmD,IAAnD,CAAP;EADY;EAIdoD,qBAAA,EAAuB;IACrB,OAAO,KAAK5D,cAAL,CAAoBQ,eAApB,CAAoC,sBAApC,EAA4D,IAA5D,CAAP;EADqB;EAIvBqD,cAAA,EAAgB;IACd,OAAO,KAAK7D,cAAL,CAAoBQ,eAApB,CAAoC,eAApC,EAAqD,IAArD,CAAP;EADc;EAIhBsD,eAAA,EAAiB;IACf,OAAO,KAAK9D,cAAL,CAAoBQ,eAApB,CAAoC,gBAApC,EAAsD,IAAtD,CAAP;EADe;EAIjBwD,gBAAA,EAAkB;IAChB,OAAO,KAAK,CAAA8K,iBAAL,CAAwB,iBAAxB,CAAP;EADgB;EAIlBnI,iBAAiBvB,SAAjB,EAA4B;IAC1B,OAAO,KAAKpF,cAAL,CAAoBQ,eAApB,CAAoC,kBAApC,EAAwD;MAC7D4E;IAD6D,CAAxD,CAAP;EAD0B;EAM5BkF,cAAclF,SAAd,EAAyB;IACvB,OAAO,KAAKpF,cAAL,CAAoBQ,eAApB,CAAoC,eAApC,EAAqD;MAC1D4E;IAD0D,CAArD,CAAP;EADuB;EAMzBnB,WAAA,EAAa;IACX,OAAO,KAAKjE,cAAL,CAAoBQ,eAApB,CAAoC,YAApC,EAAkD,IAAlD,CAAP;EADW;EAIb0D,yBAAA,EAA2B;IACzB,OAAO,KAAKlE,cAAL,CACJQ,eADI,CACY,0BADZ,EACwC,IADxC,EAEJtB,IAFI,CAECgT,OAAA,IAAW;MACf,OAAO,IAAI5X,8EAAJ,CAA0B4X,OAA1B,CAAP;IADe,CAFZ,CAAP;EADyB;EAQ3B/N,eAAA,EAAiB;IACf,OAAO,KAAKnE,cAAL,CAAoBQ,eAApB,CAAoC,gBAApC,EAAsD,IAAtD,CAAP;EADe;EAIjB4D,YAAA,EAAc;IACZ,MAAM7jB,IAAA,GAAO,aAAb;MACEwuB,aAAA,GAAgB,KAAK,CAAAb,cAAL,CAAqBznB,GAArB,CAAyBlG,IAAzB,CADlB;IAEA,IAAIwuB,aAAJ,EAAmB;MACjB,OAAOA,aAAP;IADiB;IAGnB,MAAM9P,OAAA,GAAU,KAAKe,cAAL,CACbQ,eADa,CACGjgB,IADH,EACS,IADT,EAEb2e,IAFa,CAERgT,OAAA,IAAW;MACf,OAAO;QACL5Z,IAAA,EAAM4Z,OAAA,CAAQ,CAAR,CADD;QAELC,QAAA,EAAUD,OAAA,CAAQ,CAAR,IAAa,IAAI7X,kDAAJ,CAAa6X,OAAA,CAAQ,CAAR,CAAb,CAAb,GAAwC,IAF7C;QAGLtS,0BAAA,EAA4B,KAAK+O,WAAL,EAAkBroB,QAAlB,IAA8B,IAHrD;QAILqqB,aAAA,EAAe,KAAKhC,WAAL,EAAkBgC,aAAlB,IAAmC;MAJ7C,CAAP;IADe,CAFH,CAAhB;IAUA,KAAK,CAAAzC,cAAL,CAAqBxY,GAArB,CAAyBnV,IAAzB,EAA+B0e,OAA/B;IACA,OAAOA,OAAP;EAjBY;EAoBdoF,YAAA,EAAc;IACZ,OAAO,KAAKrE,cAAL,CAAoBQ,eAApB,CAAoC,aAApC,EAAmD,IAAnD,CAAP;EADY;EAId,MAAMoE,YAANA,CAAmBD,eAAA,GAAkB,KAArC,EAA4C;IAC1C,IAAI,KAAKxF,SAAT,EAAoB;MAClB;IADkB;IAGpB,MAAM,KAAKa,cAAL,CAAoBQ,eAApB,CAAoC,SAApC,EAA+C,IAA/C,CAAN;IAEA,WAAW9kB,IAAX,IAAmB,KAAK,CAAAyyB,SAAL,CAAgBhnB,MAAhB,EAAnB,EAA6C;MAC3C,MAAMirB,iBAAA,GAAoB12B,IAAA,CAAKgpB,OAAL,EAA1B;MAEA,IAAI,CAAC0N,iBAAL,EAAwB;QACtB,MAAM,IAAI/W,KAAJ,CACH,sBAAqB3f,IAAA,CAAK0nB,UAAW,0BADlC,CAAN;MADsB;IAHmB;IAS7C,KAAKsC,UAAL,CAAgB5V,KAAhB;IACA,IAAI,CAAC6U,eAAL,EAAsB;MACpB,KAAK4J,UAAL,CAAgBze,KAAhB;IADoB;IAGtB,KAAK,CAAAoe,cAAL,CAAqBpe,KAArB;IACA,KAAKmO,aAAL,CAAmBiD,OAAnB,CAA2C,IAA3C;EApB0C;EAuB5C,IAAI4D,aAAJA,CAAA,EAAoB;IAClB,MAAM;MAAEpH,gBAAF;MAAoBL;IAApB,IAAkC,KAAKmR,OAA7C;IACA,OAAO94B,uDAAA,CAAO,IAAP,EAAa,eAAb,EAA8B;MACnCgoB,gBADmC;MAEnCL;IAFmC,CAA9B,CAAP;EAFkB;AAluBA;AAgvBtB,MAAMuI,UAAN,CAAiB;EACf,CAAAD,IAAA,GAAQnlB,MAAA,CAAO3J,MAAP,CAAc,IAAd,CAAR;EAQA,CAAAw7B,UAAWC,KAAX,EAAkB;IAChB,OAAQ,KAAK,CAAA3M,IAAL,CAAW2M,KAAX,MAAsB;MAC5B9J,UAAA,EAAY,IAAI3P,8DAAJ,EADgB;MAE5B7hB,IAAA,EAAM;IAFsB,CAA9B;EADgB;EAmBlByP,IAAI6rB,KAAJ,EAAWzJ,QAAA,GAAW,IAAtB,EAA4B;IAG1B,IAAIA,QAAJ,EAAc;MACZ,MAAM5R,GAAA,GAAM,KAAK,CAAAob,SAAL,CAAgBC,KAAhB,CAAZ;MACArb,GAAA,CAAIuR,UAAJ,CAAevJ,OAAf,CAAuBC,IAAvB,CAA4B,MAAM2J,QAAA,CAAS5R,GAAA,CAAIjgB,IAAb,CAAlC;MACA,OAAO,IAAP;IAHY;IAOd,MAAMigB,GAAA,GAAM,KAAK,CAAA0O,IAAL,CAAW2M,KAAX,CAAZ;IAGA,IAAI,CAACrb,GAAA,EAAKuR,UAAL,CAAgB+J,OAArB,EAA8B;MAC5B,MAAM,IAAIlX,KAAJ,CAAW,6CAA4CiX,KAAM,GAA7D,CAAN;IAD4B;IAG9B,OAAOrb,GAAA,CAAIjgB,IAAX;EAhB0B;EAuB5BoM,IAAIkvB,KAAJ,EAAW;IACT,MAAMrb,GAAA,GAAM,KAAK,CAAA0O,IAAL,CAAW2M,KAAX,CAAZ;IACA,OAAOrb,GAAA,EAAKuR,UAAL,CAAgB+J,OAAhB,IAA2B,KAAlC;EAFS;EAWX/S,QAAQ8S,KAAR,EAAet7B,IAAA,GAAO,IAAtB,EAA4B;IAC1B,MAAMigB,GAAA,GAAM,KAAK,CAAAob,SAAL,CAAgBC,KAAhB,CAAZ;IACArb,GAAA,CAAIjgB,IAAJ,GAAWA,IAAX;IACAigB,GAAA,CAAIuR,UAAJ,CAAehJ,OAAf;EAH0B;EAM5B1P,MAAA,EAAQ;IACN,WAAWwiB,KAAX,IAAoB,KAAK,CAAA3M,IAAzB,EAAgC;MAC9B,MAAM;QAAE3uB;MAAF,IAAW,KAAK,CAAA2uB,IAAL,CAAW2M,KAAX,CAAjB;MACAt7B,IAAA,EAAM8gB,MAAN,EAAckY,KAAd;IAF8B;IAIhC,KAAK,CAAArK,IAAL,GAAanlB,MAAA,CAAO3J,MAAP,CAAc,IAAd,CAAb;EALM;AApEO;AAgFjB,MAAM27B,UAAN,CAAiB;EACf,CAAAlK,kBAAA,GAAsB,IAAtB;EAEAruB,YAAYquB,kBAAZ,EAAgC;IAC9B,KAAK,CAAAA,kBAAL,GAA2BA,kBAA3B;IAQA,KAAKmK,UAAL,GAAkB,IAAlB;EAT8B;EAgBhC,IAAIxT,OAAJA,CAAA,EAAc;IACZ,OAAO,KAAK,CAAAqJ,kBAAL,CAAyBE,UAAzB,CAAoCvJ,OAA3C;EADY;EAWd0L,OAAOU,UAAA,GAAa,CAApB,EAAuB;IACrB,KAAK,CAAA/C,kBAAL,CAAyBqC,MAAzB,CAA8C,IAA9C,EAAoDU,UAApD;EADqB;EAQvB,IAAIpD,cAAJA,CAAA,EAAqB;IACnB,MAAM;MAAEA;IAAF,IAAqB,KAAK,CAAAK,kBAAL,CAAyBT,YAApD;IACA,IAAI,CAACI,cAAL,EAAqB;MACnB,OAAO,KAAP;IADmB;IAGrB,MAAM;MAAEnT;IAAF,IAA0B,KAAK,CAAAwT,kBAArC;IACA,OACEL,cAAA,CAAeyK,IAAf,IACCzK,cAAA,CAAenS,MAAf,IAAyBhB,mBAAA,EAAqBxG,IAArB,GAA4B,CAFxD;EANmB;AAtCN;AAuDjB,MAAMsa,kBAAN,CAAyB;EACvB,OAAO,CAAA+J,WAAP,GAAsB,IAAIp8B,OAAJ,EAAtB;EAEA0D,YAAY;IACV4uB,QADU;IAEVzT,MAFU;IAGVuQ,IAHU;IAIVD,UAJU;IAKV5Q,mBALU;IAMV+S,YANU;IAOVzC,SAPU;IAQVpH,aARU;IASVC,aATU;IAUV6K,wBAAA,GAA2B,KAVjB;IAWVnL,MAAA,GAAS,KAXC;IAYVwJ,UAAA,GAAa;EAZH,CAAZ,EAaG;IACD,KAAK0B,QAAL,GAAgBA,QAAhB;IACA,KAAKzT,MAAL,GAAcA,MAAd;IACA,KAAKuQ,IAAL,GAAYA,IAAZ;IACA,KAAKD,UAAL,GAAkBA,UAAlB;IACA,KAAK5Q,mBAAL,GAA2BA,mBAA3B;IACA,KAAK8d,eAAL,GAAuB,IAAvB;IACA,KAAK/K,YAAL,GAAoBA,YAApB;IACA,KAAKvC,UAAL,GAAkBF,SAAlB;IACA,KAAKpH,aAAL,GAAqBA,aAArB;IACA,KAAKC,aAAL,GAAqBA,aAArB;IACA,KAAKwH,OAAL,GAAe9H,MAAf;IACA,KAAKwJ,UAAL,GAAkBA,UAAlB;IAEA,KAAK0L,OAAL,GAAe,KAAf;IACA,KAAKC,qBAAL,GAA6B,IAA7B;IACA,KAAKC,aAAL,GAAqB,KAArB;IACA,KAAKC,yBAAL,GACElK,wBAAA,KAA6B,IAA7B,IAAqC,OAAOpI,MAAP,KAAkB,WADzD;IAEA,KAAKuS,SAAL,GAAiB,KAAjB;IACA,KAAKzK,UAAL,GAAkB,IAAI3P,8DAAJ,EAAlB;IACA,KAAK0C,IAAL,GAAY,IAAIiX,UAAJ,CAAe,IAAf,CAAZ;IAEA,KAAKU,YAAL,GAAoB,KAAKvI,MAAL,CAAY/Z,IAAZ,CAAiB,IAAjB,CAApB;IACA,KAAKuiB,cAAL,GAAsB,KAAKC,SAAL,CAAexiB,IAAf,CAAoB,IAApB,CAAtB;IACA,KAAKyiB,kBAAL,GAA0B,KAAKC,aAAL,CAAmB1iB,IAAnB,CAAwB,IAAxB,CAA1B;IACA,KAAK2iB,UAAL,GAAkB,KAAKC,KAAL,CAAW5iB,IAAX,CAAgB,IAAhB,CAAlB;IACA,KAAK6iB,OAAL,GAAere,MAAA,CAAOyR,aAAP,CAAqB/Q,MAApC;EA3BC;EA8BH,IAAI4U,SAAJA,CAAA,EAAgB;IACd,OAAO,KAAKlC,UAAL,CAAgBvJ,OAAhB,CAAwBoB,KAAxB,CAA8B,YAAY,EAA1C,CAAP;EADc;EAOhB6I,mBAAmB;IAAEF,YAAA,GAAe,KAAjB;IAAwBC;EAAxB,CAAnB,EAAoE;IAClE,IAAI,KAAKgK,SAAT,EAAoB;MAClB;IADkB;IAGpB,IAAI,KAAKQ,OAAT,EAAkB;MAChB,IAAI7K,kBAAA,CAAmB,CAAA+J,WAAnB,CAAgCvvB,GAAhC,CAAoC,KAAKqwB,OAAzC,CAAJ,EAAuD;QACrD,MAAM,IAAIpY,KAAJ,CACJ,qEACE,0DADF,GAEE,yBAHE,CAAN;MADqD;MAOvDuN,kBAAA,CAAmB,CAAA+J,WAAnB,CAAgCr2B,GAAhC,CAAoC,KAAKm3B,OAAzC;IARgB;IAWlB,IAAI,KAAKhO,OAAL,IAAgBlI,UAAA,CAAWmW,cAAX,EAA2BjC,OAA/C,EAAwD;MACtD,KAAKkC,OAAL,GAAepW,UAAA,CAAWmW,cAAX,CAA0B78B,MAA1B,CAAiC,KAAKyuB,UAAtC,CAAf;MACA,KAAKqO,OAAL,CAAaC,IAAb,CAAkB,KAAK/L,YAAvB;MACA,KAAK8L,OAAL,CAAaE,cAAb,GAA8B,KAAKF,OAAL,CAAaG,iBAAb,EAA9B;IAHsD;IAKxD,MAAM;MAAEjN,aAAF;MAAiBlrB,QAAjB;MAA2BqrB,SAA3B;MAAsCC;IAAtC,IAAqD,KAAK7R,MAAhE;IAEA,KAAK2e,GAAL,GAAW,IAAI7Z,sDAAJ,CACT2M,aADS,EAET,KAAKnB,UAFI,EAGT,KAAKC,IAHI,EAIT,KAAK3H,aAJI,EAKT,KAAKC,aALI,EAMT;MAAEgL;IAAF,CANS,EAOT,KAAKnU,mBAPI,EAQT,KAAKqS,UARI,CAAX;IAUA,KAAK4M,GAAL,CAASC,YAAT,CAAsB;MACpBhN,SADoB;MAEpBrrB,QAFoB;MAGpBqtB,YAHoB;MAIpB/B;IAJoB,CAAtB;IAMA,KAAK2L,eAAL,GAAuB,CAAvB;IACA,KAAKG,aAAL,GAAqB,IAArB;IACA,KAAKD,qBAAL;EAxCkE;EA2CpEnI,OAAOvC,KAAA,GAAQ,IAAf,EAAqBiD,UAAA,GAAa,CAAlC,EAAqC;IACnC,KAAKwH,OAAL,GAAe,KAAf;IACA,KAAKI,SAAL,GAAiB,IAAjB;IACA,KAAKc,GAAL,EAAUE,UAAV;IACArL,kBAAA,CAAmB,CAAA+J,WAAnB,CAAgC5b,MAAhC,CAAuC,KAAK0c,OAA5C;IAEA,KAAK5K,QAAL,CACET,KAAA,IACE,IAAI1O,0EAAJ,CACG,6BAA4B,KAAK4L,UAAL,GAAkB,CAA/C,EADF,EAEE+F,UAFF,CAFJ;EANmC;EAerClC,oBAAA,EAAsB;IACpB,IAAI,CAAC,KAAK4J,aAAV,EAAyB;MACvB,KAAKD,qBAAL,KAA+B,KAAKK,cAApC;MACA;IAFuB;IAIzB,KAAKQ,OAAL,EAAcO,kBAAd,CAAiC,KAAKrM,YAAtC;IAEA,IAAI,KAAKgL,OAAT,EAAkB;MAChB;IADgB;IAGlB,KAAKO,SAAL;EAVoB;EAatBA,UAAA,EAAY;IACV,KAAKP,OAAL,GAAe,IAAf;IACA,IAAI,KAAKI,SAAT,EAAoB;MAClB;IADkB;IAGpB,IAAI,KAAK1X,IAAL,CAAUkX,UAAd,EAA0B;MACxB,KAAKlX,IAAL,CAAUkX,UAAV,CAAqB,KAAKY,kBAA1B;IADwB,CAA1B,MAEO;MACL,KAAKC,aAAL;IADK;EAPG;EAYZA,cAAA,EAAgB;IACd,IAAI,KAAKN,yBAAT,EAAoC;MAClCtS,MAAA,CAAOyT,qBAAP,CAA6B,MAAM;QACjC,KAAKZ,UAAL,GAAkBlT,KAAlB,CAAwB,KAAK6S,YAA7B;MADiC,CAAnC;IADkC,CAApC,MAIO;MACL3T,OAAA,CAAQC,OAAR,GAAkBN,IAAlB,CAAuB,KAAKqU,UAA5B,EAAwClT,KAAxC,CAA8C,KAAK6S,YAAnD;IADK;EALO;EAUhB,MAAMM,KAANA,CAAA,EAAc;IACZ,IAAI,KAAKP,SAAT,EAAoB;MAClB;IADkB;IAGpB,KAAKL,eAAL,GAAuB,KAAKmB,GAAL,CAASK,mBAAT,CACrB,KAAKvM,YADgB,EAErB,KAAK+K,eAFgB,EAGrB,KAAKO,cAHgB,EAIrB,KAAKQ,OAJgB,CAAvB;IAMA,IAAI,KAAKf,eAAL,KAAyB,KAAK/K,YAAL,CAAkBE,SAAlB,CAA4BxmB,MAAzD,EAAiE;MAC/D,KAAKsxB,OAAL,GAAe,KAAf;MACA,IAAI,KAAKhL,YAAL,CAAkBG,SAAtB,EAAiC;QAC/B,KAAK+L,GAAL,CAASE,UAAT;QACArL,kBAAA,CAAmB,CAAA+J,WAAnB,CAAgC5b,MAAhC,CAAuC,KAAK0c,OAA5C;QAEA,KAAK5K,QAAL;MAJ+B;IAF8B;EAVrD;AAlJS;AAyKzB,MAAMwL,OAAA,GAC8B,SADpC;AAGA,MAAMC,KAAA,GAC8B,WADpC;;;;;;;;;;;;;;;;;;ACpyGA;AAEA,MAAME,iBAAN,CAAwB;EACtBv6B,YAAA,EAAc;IACZ,IAAI,KAAKA,WAAL,KAAqBu6B,iBAAzB,EAA4C;MAC1C7+B,4DAAA,CAAY,sCAAZ;IAD0C;EADhC;EAMd8+B,UAAUC,IAAV,EAAgB;IACd,OAAO,MAAP;EADc;EAIhBC,aAAa30B,OAAb,EAAsBF,OAAtB,EAA+B;IAC7B,OAAO,MAAP;EAD6B;EAI/B80B,sBAAsB50B,OAAtB,EAA+BF,OAA/B,EAAwC+0B,UAAxC,EAAoDC,UAApD,EAAgE;IAC9D,OAAO,MAAP;EAD8D;EAIhE5T,QAAQ6T,OAAA,GAAU,KAAlB,EAAyB;AAnBH;AAsBxB,MAAMC,iBAAN,CAAwB;EACtB/6B,YAAA,EAAc;IACZ,IAAI,KAAKA,WAAL,KAAqB+6B,iBAAzB,EAA4C;MAC1Cr/B,4DAAA,CAAY,sCAAZ;IAD0C;EADhC;EAMdkB,OAAOH,KAAP,EAAcC,MAAd,EAAsB;IACpB,IAAID,KAAA,IAAS,CAAT,IAAcC,MAAA,IAAU,CAA5B,EAA+B;MAC7B,MAAM,IAAI0kB,KAAJ,CAAU,qBAAV,CAAN;IAD6B;IAG/B,MAAMvF,MAAA,GAAS,KAAKmf,aAAL,CAAmBv+B,KAAnB,EAA0BC,MAA1B,CAAf;IACA,OAAO;MACLmf,MADK;MAEL4B,OAAA,EAAS5B,MAAA,CAAOof,UAAP,CAAkB,IAAlB;IAFJ,CAAP;EALoB;EAWtBC,MAAMC,gBAAN,EAAwB1+B,KAAxB,EAA+BC,MAA/B,EAAuC;IACrC,IAAI,CAACy+B,gBAAA,CAAiBtf,MAAtB,EAA8B;MAC5B,MAAM,IAAIuF,KAAJ,CAAU,yBAAV,CAAN;IAD4B;IAG9B,IAAI3kB,KAAA,IAAS,CAAT,IAAcC,MAAA,IAAU,CAA5B,EAA+B;MAC7B,MAAM,IAAI0kB,KAAJ,CAAU,qBAAV,CAAN;IAD6B;IAG/B+Z,gBAAA,CAAiBtf,MAAjB,CAAwBpf,KAAxB,GAAgCA,KAAhC;IACA0+B,gBAAA,CAAiBtf,MAAjB,CAAwBnf,MAAxB,GAAiCA,MAAjC;EARqC;EAWvCuqB,QAAQkU,gBAAR,EAA0B;IACxB,IAAI,CAACA,gBAAA,CAAiBtf,MAAtB,EAA8B;MAC5B,MAAM,IAAIuF,KAAJ,CAAU,yBAAV,CAAN;IAD4B;IAK9B+Z,gBAAA,CAAiBtf,MAAjB,CAAwBpf,KAAxB,GAAgC,CAAhC;IACA0+B,gBAAA,CAAiBtf,MAAjB,CAAwBnf,MAAxB,GAAiC,CAAjC;IACAy+B,gBAAA,CAAiBtf,MAAjB,GAA0B,IAA1B;IACAsf,gBAAA,CAAiB1d,OAAjB,GAA2B,IAA3B;EATwB;EAe1Bud,cAAcv+B,KAAd,EAAqBC,MAArB,EAA6B;IAC3BhB,4DAAA,CAAY,yCAAZ;EAD2B;AA5CP;AAiDxB,MAAM0/B,qBAAN,CAA4B;EAC1Bp7B,YAAY;IAAEokB,OAAA,GAAU,IAAZ;IAAkBC,YAAA,GAAe;EAAjC,CAAZ,EAAqD;IACnD,IAAI,KAAKrkB,WAAL,KAAqBo7B,qBAAzB,EAAgD;MAC9C1/B,4DAAA,CAAY,0CAAZ;IAD8C;IAGhD,KAAK0oB,OAAL,GAAeA,OAAf;IACA,KAAKC,YAAL,GAAoBA,YAApB;EALmD;EAQrD,MAAMyT,KAANA,CAAY;IAAExxB;EAAF,CAAZ,EAAsB;IACpB,IAAI,CAAC,KAAK8d,OAAV,EAAmB;MACjB,MAAM,IAAIhD,KAAJ,CACJ,iEACE,6DAFE,CAAN;IADiB;IAMnB,IAAI,CAAC9a,IAAL,EAAW;MACT,MAAM,IAAI8a,KAAJ,CAAU,8BAAV,CAAN;IADS;IAGX,MAAMxW,GAAA,GAAM,KAAKwZ,OAAL,GAAe9d,IAAf,IAAuB,KAAK+d,YAAL,GAAoB,QAApB,GAA+B,EAA/B,CAAnC;IACA,MAAMgX,eAAA,GAAkB,KAAKhX,YAAL,GACpBiW,gEAAA,CAAoBgB,MADA,GAEpBhB,gEAAA,CAAoBiB,IAFxB;IAIA,OAAO,KAAKC,UAAL,CAAgB5wB,GAAhB,EAAqBywB,eAArB,EAAsCjV,KAAtC,CAA4CqI,MAAA,IAAU;MAC3D,MAAM,IAAIrN,KAAJ,CACH,kBAAiB,KAAKiD,YAAL,GAAoB,SAApB,GAAgC,EAAG,YAAWzZ,GAAhE,EADI,CAAN;IAD2D,CAAtD,CAAP;EAfoB;EAyBtB4wB,WAAW5wB,GAAX,EAAgBywB,eAAhB,EAAiC;IAC/B3/B,4DAAA,CAAY,sCAAZ;EAD+B;AAlCP;AAuC5B,MAAM+/B,2BAAN,CAAkC;EAChCz7B,YAAY;IAAEokB,OAAA,GAAU;EAAZ,CAAZ,EAAgC;IAC9B,IAAI,KAAKpkB,WAAL,KAAqBy7B,2BAAzB,EAAsD;MACpD//B,4DAAA,CAAY,gDAAZ;IADoD;IAGtD,KAAK0oB,OAAL,GAAeA,OAAf;EAJ8B;EAOhC,MAAM0T,KAANA,CAAY;IAAEzrB;EAAF,CAAZ,EAA0B;IACxB,IAAI,CAAC,KAAK+X,OAAV,EAAmB;MACjB,MAAM,IAAIhD,KAAJ,CACJ,0EACE,sDAFE,CAAN;IADiB;IAMnB,IAAI,CAAC/U,QAAL,EAAe;MACb,MAAM,IAAI+U,KAAJ,CAAU,kCAAV,CAAN;IADa;IAGf,MAAMxW,GAAA,GAAM,GAAG,KAAKwZ,OAAR,GAAkB/X,QAAlB,EAAZ;IAEA,OAAO,KAAKmvB,UAAL,CAAgB5wB,GAAhB,EAAqBwb,KAArB,CAA2BqI,MAAA,IAAU;MAC1C,MAAM,IAAIrN,KAAJ,CAAW,gCAA+BxW,GAAhC,EAAV,CAAN;IAD0C,CAArC,CAAP;EAZwB;EAoB1B4wB,WAAW5wB,GAAX,EAAgB;IACdlP,4DAAA,CAAY,sCAAZ;EADc;AA5BgB;AAiClC,MAAMggC,cAAN,CAAqB;EACnB17B,YAAA,EAAc;IACZ,IAAI,KAAKA,WAAL,KAAqB07B,cAAzB,EAAyC;MACvChgC,4DAAA,CAAY,mCAAZ;IADuC;EAD7B;EAMdkB,OAAOH,KAAP,EAAcC,MAAd,EAAsBi/B,cAAA,GAAiB,KAAvC,EAA8C;IAC5C,IAAIl/B,KAAA,IAAS,CAAT,IAAcC,MAAA,IAAU,CAA5B,EAA+B;MAC7B,MAAM,IAAI0kB,KAAJ,CAAU,wBAAV,CAAN;IAD6B;IAG/B,MAAMxZ,GAAA,GAAM,KAAKg0B,UAAL,CAAgB,SAAhB,CAAZ;IACAh0B,GAAA,CAAI/F,YAAJ,CAAiB,SAAjB,EAA4B,KAA5B;IAEA,IAAI,CAAC85B,cAAL,EAAqB;MACnB/zB,GAAA,CAAI/F,YAAJ,CAAiB,OAAjB,EAA0B,GAAGpF,KAAM,IAAnC;MACAmL,GAAA,CAAI/F,YAAJ,CAAiB,QAAjB,EAA2B,GAAGnF,MAAO,IAArC;IAFmB;IAKrBkL,GAAA,CAAI/F,YAAJ,CAAiB,qBAAjB,EAAwC,MAAxC;IACA+F,GAAA,CAAI/F,YAAJ,CAAiB,SAAjB,EAA6B,OAAMpF,KAAM,IAAGC,MAAhB,EAA5B;IAEA,OAAOkL,GAAP;EAf4C;EAkB9ChG,cAAc0L,IAAd,EAAoB;IAClB,IAAI,OAAOA,IAAP,KAAgB,QAApB,EAA8B;MAC5B,MAAM,IAAI8T,KAAJ,CAAU,0BAAV,CAAN;IAD4B;IAG9B,OAAO,KAAKwa,UAAL,CAAgBtuB,IAAhB,CAAP;EAJkB;EAUpBsuB,WAAWtuB,IAAX,EAAiB;IACf5R,4DAAA,CAAY,sCAAZ;EADe;AAnCE;;;;;;;;;;;;;;;;;;;ACjJrB;AACA;AAEA,MAAMqgC,QAAA,GAAW;EACfC,IAAA,EAAM,MADS;EAEfC,MAAA,EAAQ,QAFO;EAGfC,OAAA,EAAS;AAHM,CAAjB;AAMA,SAASC,gBAATA,CAA0BC,GAA1B,EAA+BC,IAA/B,EAAqC;EACnC,IAAI,CAACA,IAAL,EAAW;IACT;EADS;EAGX,MAAM5/B,KAAA,GAAQ4/B,IAAA,CAAK,CAAL,IAAUA,IAAA,CAAK,CAAL,CAAxB;EACA,MAAM3/B,MAAA,GAAS2/B,IAAA,CAAK,CAAL,IAAUA,IAAA,CAAK,CAAL,CAAzB;EACA,MAAMC,MAAA,GAAS,IAAIC,MAAJ,EAAf;EACAD,MAAA,CAAO9/B,IAAP,CAAY6/B,IAAA,CAAK,CAAL,CAAZ,EAAqBA,IAAA,CAAK,CAAL,CAArB,EAA8B5/B,KAA9B,EAAqCC,MAArC;EACA0/B,GAAA,CAAII,IAAJ,CAASF,MAAT;AARmC;AAWrC,MAAMG,kBAAN,CAAyB;EACvBz8B,YAAA,EAAc;IACZ,IAAI,KAAKA,WAAL,KAAqBy8B,kBAAzB,EAA6C;MAC3C/gC,oBAAA,CAAY,uCAAZ;IAD2C;EADjC;EAMdghC,WAAA,EAAa;IACXhhC,oBAAA,CAAY,sCAAZ;EADW;AAPU;AAYzB,MAAMihC,yBAAN,SAAwCF,kBAAxC,CAA2D;EACzDz8B,YAAY48B,EAAZ,EAAgB;IACd;IACA,KAAKxf,KAAL,GAAawf,EAAA,CAAG,CAAH,CAAb;IACA,KAAKC,KAAL,GAAaD,EAAA,CAAG,CAAH,CAAb;IACA,KAAKE,WAAL,GAAmBF,EAAA,CAAG,CAAH,CAAnB;IACA,KAAKG,GAAL,GAAWH,EAAA,CAAG,CAAH,CAAX;IACA,KAAKI,GAAL,GAAWJ,EAAA,CAAG,CAAH,CAAX;IACA,KAAKK,GAAL,GAAWL,EAAA,CAAG,CAAH,CAAX;IACA,KAAKM,GAAL,GAAWN,EAAA,CAAG,CAAH,CAAX;IACA,KAAKO,MAAL,GAAc,IAAd;EATc;EAYhBC,gBAAgBhB,GAAhB,EAAqB;IACnB,IAAIiB,IAAJ;IACA,IAAI,KAAKjgB,KAAL,KAAe,OAAnB,EAA4B;MAC1BigB,IAAA,GAAOjB,GAAA,CAAIkB,oBAAJ,CACL,KAAKP,GAAL,CAAS,CAAT,CADK,EAEL,KAAKA,GAAL,CAAS,CAAT,CAFK,EAGL,KAAKC,GAAL,CAAS,CAAT,CAHK,EAIL,KAAKA,GAAL,CAAS,CAAT,CAJK,CAAP;IAD0B,CAA5B,MAOO,IAAI,KAAK5f,KAAL,KAAe,QAAnB,EAA6B;MAClCigB,IAAA,GAAOjB,GAAA,CAAImB,oBAAJ,CACL,KAAKR,GAAL,CAAS,CAAT,CADK,EAEL,KAAKA,GAAL,CAAS,CAAT,CAFK,EAGL,KAAKE,GAHA,EAIL,KAAKD,GAAL,CAAS,CAAT,CAJK,EAKL,KAAKA,GAAL,CAAS,CAAT,CALK,EAML,KAAKE,GANA,CAAP;IADkC;IAWpC,WAAWM,SAAX,IAAwB,KAAKV,WAA7B,EAA0C;MACxCO,IAAA,CAAKI,YAAL,CAAkBD,SAAA,CAAU,CAAV,CAAlB,EAAgCA,SAAA,CAAU,CAAV,CAAhC;IADwC;IAG1C,OAAOH,IAAP;EAvBmB;EA0BrBX,WAAWN,GAAX,EAAgBsB,KAAhB,EAAuBC,OAAvB,EAAgCC,QAAhC,EAA0C;IACxC,IAAIC,OAAJ;IACA,IAAID,QAAA,KAAa7B,QAAA,CAASE,MAAtB,IAAgC2B,QAAA,KAAa7B,QAAA,CAASC,IAA1D,EAAgE;MAC9D,MAAM8B,SAAA,GAAYJ,KAAA,CAAMK,OAAN,CAAcC,yBAAd,CAChBJ,QADgB,EAEhB9B,qCAAA,CAAoBM,GAApB,CAFgB,KAGb,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,CAHL;MAOA,MAAM3/B,KAAA,GAAQ3D,IAAA,CAAKmlC,IAAL,CAAUH,SAAA,CAAU,CAAV,IAAeA,SAAA,CAAU,CAAV,CAAzB,KAA0C,CAAxD;MACA,MAAMphC,MAAA,GAAS5D,IAAA,CAAKmlC,IAAL,CAAUH,SAAA,CAAU,CAAV,IAAeA,SAAA,CAAU,CAAV,CAAzB,KAA0C,CAAzD;MAEA,MAAMI,SAAA,GAAYR,KAAA,CAAMS,cAAN,CAAqBC,SAArB,CAChB,SADgB,EAEhB3hC,KAFgB,EAGhBC,MAHgB,EAIhB,IAJgB,CAAlB;MAOA,MAAM2hC,MAAA,GAASH,SAAA,CAAUzgB,OAAzB;MACA4gB,MAAA,CAAOC,SAAP,CAAiB,CAAjB,EAAoB,CAApB,EAAuBD,MAAA,CAAOxiB,MAAP,CAAcpf,KAArC,EAA4C4hC,MAAA,CAAOxiB,MAAP,CAAcnf,MAA1D;MACA2hC,MAAA,CAAOE,SAAP;MACAF,MAAA,CAAO7hC,IAAP,CAAY,CAAZ,EAAe,CAAf,EAAkB6hC,MAAA,CAAOxiB,MAAP,CAAcpf,KAAhC,EAAuC4hC,MAAA,CAAOxiB,MAAP,CAAcnf,MAArD;MAIA2hC,MAAA,CAAOG,SAAP,CAAiB,CAACV,SAAA,CAAU,CAAV,CAAlB,EAAgC,CAACA,SAAA,CAAU,CAAV,CAAjC;MACAH,OAAA,GAAUhiC,SAAA,CAAKoxB,SAAL,CAAe4Q,OAAf,EAAwB,CAChC,CADgC,EAEhC,CAFgC,EAGhC,CAHgC,EAIhC,CAJgC,EAKhCG,SAAA,CAAU,CAAV,CALgC,EAMhCA,SAAA,CAAU,CAAV,CANgC,CAAxB,CAAV;MASAO,MAAA,CAAOtR,SAAP,CAAiB,GAAG2Q,KAAA,CAAMe,aAA1B;MACA,IAAI,KAAKtB,MAAT,EAAiB;QACfkB,MAAA,CAAOtR,SAAP,CAAiB,GAAG,KAAKoQ,MAAzB;MADe;MAGjBhB,gBAAA,CAAiBkC,MAAjB,EAAyB,KAAKxB,KAA9B;MAEAwB,MAAA,CAAOK,SAAP,GAAmB,KAAKtB,eAAL,CAAqBiB,MAArB,CAAnB;MACAA,MAAA,CAAOM,IAAP;MAEAd,OAAA,GAAUzB,GAAA,CAAIwC,aAAJ,CAAkBV,SAAA,CAAUriB,MAA5B,EAAoC,WAApC,CAAV;MACA,MAAMgjB,SAAA,GAAY,IAAIC,SAAJ,CAAcnB,OAAd,CAAlB;MACAE,OAAA,CAAQkB,YAAR,CAAqBF,SAArB;IA9C8D,CAAhE,MA+CO;MAIL1C,gBAAA,CAAiBC,GAAjB,EAAsB,KAAKS,KAA3B;MACAgB,OAAA,GAAU,KAAKT,eAAL,CAAqBhB,GAArB,CAAV;IALK;IAOP,OAAOyB,OAAP;EAxDwC;AAvCe;AAmG3D,SAASmB,YAATA,CAAsBjiC,IAAtB,EAA4B0gB,OAA5B,EAAqCwhB,EAArC,EAAyCC,EAAzC,EAA6CC,EAA7C,EAAiDC,EAAjD,EAAqDC,EAArD,EAAyDC,EAAzD,EAA6D;EAE3D,MAAMC,MAAA,GAAS9hB,OAAA,CAAQ8hB,MAAvB;IACEC,MAAA,GAAS/hB,OAAA,CAAQ+hB,MADnB;EAEA,MAAMC,KAAA,GAAQ1iC,IAAA,CAAKA,IAAnB;IACE2iC,OAAA,GAAU3iC,IAAA,CAAKN,KAAL,GAAa,CADzB;EAEA,IAAIkjC,GAAJ;EACA,IAAIJ,MAAA,CAAON,EAAA,GAAK,CAAZ,IAAiBM,MAAA,CAAOL,EAAA,GAAK,CAAZ,CAArB,EAAqC;IACnCS,GAAA,GAAMV,EAAN;IACAA,EAAA,GAAKC,EAAL;IACAA,EAAA,GAAKS,GAAL;IACAA,GAAA,GAAMP,EAAN;IACAA,EAAA,GAAKC,EAAL;IACAA,EAAA,GAAKM,GAAL;EANmC;EAQrC,IAAIJ,MAAA,CAAOL,EAAA,GAAK,CAAZ,IAAiBK,MAAA,CAAOJ,EAAA,GAAK,CAAZ,CAArB,EAAqC;IACnCQ,GAAA,GAAMT,EAAN;IACAA,EAAA,GAAKC,EAAL;IACAA,EAAA,GAAKQ,GAAL;IACAA,GAAA,GAAMN,EAAN;IACAA,EAAA,GAAKC,EAAL;IACAA,EAAA,GAAKK,GAAL;EANmC;EAQrC,IAAIJ,MAAA,CAAON,EAAA,GAAK,CAAZ,IAAiBM,MAAA,CAAOL,EAAA,GAAK,CAAZ,CAArB,EAAqC;IACnCS,GAAA,GAAMV,EAAN;IACAA,EAAA,GAAKC,EAAL;IACAA,EAAA,GAAKS,GAAL;IACAA,GAAA,GAAMP,EAAN;IACAA,EAAA,GAAKC,EAAL;IACAA,EAAA,GAAKM,GAAL;EANmC;EAQrC,MAAMC,EAAA,GAAM,CAAAL,MAAA,CAAON,EAAP,IAAaxhB,OAAA,CAAQyO,OAArB,IAAgCzO,OAAA,CAAQoiB,MAApD;EACA,MAAMC,EAAA,GAAM,CAAAP,MAAA,CAAON,EAAA,GAAK,CAAZ,IAAiBxhB,OAAA,CAAQ0O,OAAzB,IAAoC1O,OAAA,CAAQsiB,MAAxD;EACA,MAAMC,EAAA,GAAM,CAAAT,MAAA,CAAOL,EAAP,IAAazhB,OAAA,CAAQyO,OAArB,IAAgCzO,OAAA,CAAQoiB,MAApD;EACA,MAAMI,EAAA,GAAM,CAAAV,MAAA,CAAOL,EAAA,GAAK,CAAZ,IAAiBzhB,OAAA,CAAQ0O,OAAzB,IAAoC1O,OAAA,CAAQsiB,MAAxD;EACA,MAAMG,EAAA,GAAM,CAAAX,MAAA,CAAOJ,EAAP,IAAa1hB,OAAA,CAAQyO,OAArB,IAAgCzO,OAAA,CAAQoiB,MAApD;EACA,MAAMM,EAAA,GAAM,CAAAZ,MAAA,CAAOJ,EAAA,GAAK,CAAZ,IAAiB1hB,OAAA,CAAQ0O,OAAzB,IAAoC1O,OAAA,CAAQsiB,MAAxD;EACA,IAAID,EAAA,IAAMK,EAAV,EAAc;IACZ;EADY;EAGd,MAAMC,GAAA,GAAMZ,MAAA,CAAOJ,EAAP,CAAZ;IACEiB,GAAA,GAAMb,MAAA,CAAOJ,EAAA,GAAK,CAAZ,CADR;IAEEkB,GAAA,GAAMd,MAAA,CAAOJ,EAAA,GAAK,CAAZ,CAFR;EAGA,MAAMmB,GAAA,GAAMf,MAAA,CAAOH,EAAP,CAAZ;IACEmB,GAAA,GAAMhB,MAAA,CAAOH,EAAA,GAAK,CAAZ,CADR;IAEEoB,GAAA,GAAMjB,MAAA,CAAOH,EAAA,GAAK,CAAZ,CAFR;EAGA,MAAMqB,GAAA,GAAMlB,MAAA,CAAOF,EAAP,CAAZ;IACEqB,GAAA,GAAMnB,MAAA,CAAOF,EAAA,GAAK,CAAZ,CADR;IAEEsB,GAAA,GAAMpB,MAAA,CAAOF,EAAA,GAAK,CAAZ,CAFR;EAIA,MAAMuB,IAAA,GAAO/nC,IAAA,CAAKsX,KAAL,CAAW0vB,EAAX,CAAb;IACEgB,IAAA,GAAOhoC,IAAA,CAAKsX,KAAL,CAAW+vB,EAAX,CADT;EAEA,IAAIY,EAAJ,EAAQC,GAAR,EAAaC,GAAb,EAAkBC,GAAlB;EACA,IAAIC,EAAJ,EAAQC,GAAR,EAAaC,GAAb,EAAkBC,GAAlB;EACA,KAAK,IAAI7nC,CAAA,GAAIonC,IAAR,EAAcpnC,CAAA,IAAKqnC,IAAxB,EAA8BrnC,CAAA,EAA9B,EAAmC;IACjC,IAAIA,CAAA,GAAIwmC,EAAR,EAAY;MACV,MAAMtmC,CAAA,GAAIF,CAAA,GAAIqmC,EAAJ,GAAS,CAAT,GAAc,CAAAA,EAAA,GAAKrmC,CAAL,KAAWqmC,EAAA,GAAKG,EAAL,CAAnC;MACAc,EAAA,GAAKnB,EAAA,GAAM,CAAAA,EAAA,GAAKI,EAAL,IAAWrmC,CAAtB;MACAqnC,GAAA,GAAMZ,GAAA,GAAO,CAAAA,GAAA,GAAMG,GAAN,IAAa5mC,CAA1B;MACAsnC,GAAA,GAAMZ,GAAA,GAAO,CAAAA,GAAA,GAAMG,GAAN,IAAa7mC,CAA1B;MACAunC,GAAA,GAAMZ,GAAA,GAAO,CAAAA,GAAA,GAAMG,GAAN,IAAa9mC,CAA1B;IALU,CAAZ,MAMO;MACL,IAAIA,CAAJ;MACA,IAAIF,CAAA,GAAI0mC,EAAR,EAAY;QACVxmC,CAAA,GAAI,CAAJ;MADU,CAAZ,MAEO,IAAIsmC,EAAA,KAAOE,EAAX,EAAe;QACpBxmC,CAAA,GAAI,CAAJ;MADoB,CAAf,MAEA;QACLA,CAAA,GAAK,CAAAsmC,EAAA,GAAKxmC,CAAL,KAAWwmC,EAAA,GAAKE,EAAL,CAAhB;MADK;MAGPY,EAAA,GAAKf,EAAA,GAAM,CAAAA,EAAA,GAAKE,EAAL,IAAWvmC,CAAtB;MACAqnC,GAAA,GAAMT,GAAA,GAAO,CAAAA,GAAA,GAAMG,GAAN,IAAa/mC,CAA1B;MACAsnC,GAAA,GAAMT,GAAA,GAAO,CAAAA,GAAA,GAAMG,GAAN,IAAahnC,CAA1B;MACAunC,GAAA,GAAMT,GAAA,GAAO,CAAAA,GAAA,GAAMG,GAAN,IAAajnC,CAA1B;IAZK;IAeP,IAAIA,CAAJ;IACA,IAAIF,CAAA,GAAIqmC,EAAR,EAAY;MACVnmC,CAAA,GAAI,CAAJ;IADU,CAAZ,MAEO,IAAIF,CAAA,GAAI0mC,EAAR,EAAY;MACjBxmC,CAAA,GAAI,CAAJ;IADiB,CAAZ,MAEA;MACLA,CAAA,GAAK,CAAAmmC,EAAA,GAAKrmC,CAAL,KAAWqmC,EAAA,GAAKK,EAAL,CAAhB;IADK;IAGPgB,EAAA,GAAKvB,EAAA,GAAM,CAAAA,EAAA,GAAKM,EAAL,IAAWvmC,CAAtB;IACAynC,GAAA,GAAMhB,GAAA,GAAO,CAAAA,GAAA,GAAMM,GAAN,IAAa/mC,CAA1B;IACA0nC,GAAA,GAAMhB,GAAA,GAAO,CAAAA,GAAA,GAAMM,GAAN,IAAahnC,CAA1B;IACA2nC,GAAA,GAAMhB,GAAA,GAAO,CAAAA,GAAA,GAAMM,GAAN,IAAajnC,CAA1B;IACA,MAAM4nC,GAAA,GAAMzoC,IAAA,CAAKsX,KAAL,CAAWtX,IAAA,CAAKG,GAAL,CAAS8nC,EAAT,EAAaI,EAAb,CAAX,CAAZ;IACA,MAAMK,GAAA,GAAM1oC,IAAA,CAAKsX,KAAL,CAAWtX,IAAA,CAAKE,GAAL,CAAS+nC,EAAT,EAAaI,EAAb,CAAX,CAAZ;IACA,IAAIM,CAAA,GAAI/B,OAAA,GAAUjmC,CAAV,GAAc8nC,GAAA,GAAM,CAA5B;IACA,KAAK,IAAIloC,CAAA,GAAIkoC,GAAR,EAAaloC,CAAA,IAAKmoC,GAAvB,EAA4BnoC,CAAA,EAA5B,EAAiC;MAC/BM,CAAA,GAAK,CAAAonC,EAAA,GAAK1nC,CAAL,KAAW0nC,EAAA,GAAKI,EAAL,CAAhB;MACA,IAAIxnC,CAAA,GAAI,CAAR,EAAW;QACTA,CAAA,GAAI,CAAJ;MADS,CAAX,MAEO,IAAIA,CAAA,GAAI,CAAR,EAAW;QAChBA,CAAA,GAAI,CAAJ;MADgB;MAGlB8lC,KAAA,CAAMgC,CAAA,EAAN,IAAcT,GAAA,GAAO,CAAAA,GAAA,GAAMI,GAAN,IAAaznC,CAArB,GAA0B,CAAvC;MACA8lC,KAAA,CAAMgC,CAAA,EAAN,IAAcR,GAAA,GAAO,CAAAA,GAAA,GAAMI,GAAN,IAAa1nC,CAArB,GAA0B,CAAvC;MACA8lC,KAAA,CAAMgC,CAAA,EAAN,IAAcP,GAAA,GAAO,CAAAA,GAAA,GAAMI,GAAN,IAAa3nC,CAArB,GAA0B,CAAvC;MACA8lC,KAAA,CAAMgC,CAAA,EAAN,IAAa,GAAb;IAV+B;EArCA;AAtDwB;AA0G7D,SAASC,UAATA,CAAoB3kC,IAApB,EAA0B4kC,MAA1B,EAAkClkB,OAAlC,EAA2C;EACzC,MAAMmkB,EAAA,GAAKD,MAAA,CAAOpC,MAAlB;EACA,MAAMsC,EAAA,GAAKF,MAAA,CAAOnC,MAAlB;EACA,IAAI9pB,CAAJ,EAAOwD,EAAP;EACA,QAAQyoB,MAAA,CAAOr0B,IAAf;IACE,KAAK,SAAL;MACE,MAAMw0B,cAAA,GAAiBH,MAAA,CAAOG,cAA9B;MACA,MAAMC,IAAA,GAAOjpC,IAAA,CAAKC,KAAL,CAAW6oC,EAAA,CAAGt6B,MAAH,GAAYw6B,cAAvB,IAAyC,CAAtD;MACA,MAAME,IAAA,GAAOF,cAAA,GAAiB,CAA9B;MACA,KAAKpsB,CAAA,GAAI,CAAT,EAAYA,CAAA,GAAIqsB,IAAhB,EAAsBrsB,CAAA,EAAtB,EAA2B;QACzB,IAAIusB,CAAA,GAAIvsB,CAAA,GAAIosB,cAAZ;QACA,KAAK,IAAIL,CAAA,GAAI,CAAR,EAAWA,CAAA,GAAIO,IAApB,EAA0BP,CAAA,IAAKQ,CAAA,EAA/B,EAAoC;UAClCjD,YAAA,CACEjiC,IADF,EAEE0gB,OAFF,EAGEmkB,EAAA,CAAGK,CAAH,CAHF,EAIEL,EAAA,CAAGK,CAAA,GAAI,CAAP,CAJF,EAKEL,EAAA,CAAGK,CAAA,GAAIH,cAAP,CALF,EAMED,EAAA,CAAGI,CAAH,CANF,EAOEJ,EAAA,CAAGI,CAAA,GAAI,CAAP,CAPF,EAQEJ,EAAA,CAAGI,CAAA,GAAIH,cAAP,CARF;UAUA9C,YAAA,CACEjiC,IADF,EAEE0gB,OAFF,EAGEmkB,EAAA,CAAGK,CAAA,GAAIH,cAAJ,GAAqB,CAAxB,CAHF,EAIEF,EAAA,CAAGK,CAAA,GAAI,CAAP,CAJF,EAKEL,EAAA,CAAGK,CAAA,GAAIH,cAAP,CALF,EAMED,EAAA,CAAGI,CAAA,GAAIH,cAAJ,GAAqB,CAAxB,CANF,EAOED,EAAA,CAAGI,CAAA,GAAI,CAAP,CAPF,EAQEJ,EAAA,CAAGI,CAAA,GAAIH,cAAP,CARF;QAXkC;MAFX;MAyB3B;IACF,KAAK,WAAL;MACE,KAAKpsB,CAAA,GAAI,CAAJ,EAAOwD,EAAA,GAAK0oB,EAAA,CAAGt6B,MAApB,EAA4BoO,CAAA,GAAIwD,EAAhC,EAAoCxD,CAAA,IAAK,CAAzC,EAA4C;QAC1CspB,YAAA,CACEjiC,IADF,EAEE0gB,OAFF,EAGEmkB,EAAA,CAAGlsB,CAAH,CAHF,EAIEksB,EAAA,CAAGlsB,CAAA,GAAI,CAAP,CAJF,EAKEksB,EAAA,CAAGlsB,CAAA,GAAI,CAAP,CALF,EAMEmsB,EAAA,CAAGnsB,CAAH,CANF,EAOEmsB,EAAA,CAAGnsB,CAAA,GAAI,CAAP,CAPF,EAQEmsB,EAAA,CAAGnsB,CAAA,GAAI,CAAP,CARF;MAD0C;MAY5C;IACF;MACE,MAAM,IAAI0L,KAAJ,CAAU,gBAAV,CAAN;EA9CJ;AAJyC;AAsD3C,MAAM8gB,kBAAN,SAAiCzF,kBAAjC,CAAoD;EAClDz8B,YAAY48B,EAAZ,EAAgB;IACd;IACA,KAAKuF,OAAL,GAAevF,EAAA,CAAG,CAAH,CAAf;IACA,KAAKwF,OAAL,GAAexF,EAAA,CAAG,CAAH,CAAf;IACA,KAAKyF,QAAL,GAAgBzF,EAAA,CAAG,CAAH,CAAhB;IACA,KAAK0F,OAAL,GAAe1F,EAAA,CAAG,CAAH,CAAf;IACA,KAAKC,KAAL,GAAaD,EAAA,CAAG,CAAH,CAAb;IACA,KAAK2F,WAAL,GAAmB3F,EAAA,CAAG,CAAH,CAAnB;IACA,KAAKO,MAAL,GAAc,IAAd;EARc;EAWhBqF,kBAAkBC,aAAlB,EAAiC9yB,eAAjC,EAAkDwuB,cAAlD,EAAkE;IAGhE,MAAMuE,cAAA,GAAiB,GAAvB;IAEA,MAAMC,gBAAA,GAAmB,IAAzB;IAGA,MAAMzyB,WAAA,GAAc,CAApB;IAEA,MAAMgc,OAAA,GAAUpzB,IAAA,CAAKC,KAAL,CAAW,KAAKupC,OAAL,CAAa,CAAb,CAAX,CAAhB;IACA,MAAMnW,OAAA,GAAUrzB,IAAA,CAAKC,KAAL,CAAW,KAAKupC,OAAL,CAAa,CAAb,CAAX,CAAhB;IACA,MAAMM,WAAA,GAAc9pC,IAAA,CAAKmlC,IAAL,CAAU,KAAKqE,OAAL,CAAa,CAAb,CAAV,IAA6BpW,OAAjD;IACA,MAAM2W,YAAA,GAAe/pC,IAAA,CAAKmlC,IAAL,CAAU,KAAKqE,OAAL,CAAa,CAAb,CAAV,IAA6BnW,OAAlD;IAEA,MAAM1vB,KAAA,GAAQ3D,IAAA,CAAKG,GAAL,CACZH,IAAA,CAAKmlC,IAAL,CAAUnlC,IAAA,CAAKwX,GAAL,CAASsyB,WAAA,GAAcH,aAAA,CAAc,CAAd,CAAd,GAAiCC,cAA1C,CAAV,CADY,EAEZC,gBAFY,CAAd;IAIA,MAAMjmC,MAAA,GAAS5D,IAAA,CAAKG,GAAL,CACbH,IAAA,CAAKmlC,IAAL,CAAUnlC,IAAA,CAAKwX,GAAL,CAASuyB,YAAA,GAAeJ,aAAA,CAAc,CAAd,CAAf,GAAkCC,cAA3C,CAAV,CADa,EAEbC,gBAFa,CAAf;IAIA,MAAM9C,MAAA,GAAS+C,WAAA,GAAcnmC,KAA7B;IACA,MAAMsjC,MAAA,GAAS8C,YAAA,GAAenmC,MAA9B;IAEA,MAAM+gB,OAAA,GAAU;MACd8hB,MAAA,EAAQ,KAAK4C,OADC;MAEd3C,MAAA,EAAQ,KAAK4C,OAFC;MAGdlW,OAAA,EAAS,CAACA,OAHI;MAIdC,OAAA,EAAS,CAACA,OAJI;MAKd0T,MAAA,EAAQ,IAAIA,MALE;MAMdE,MAAA,EAAQ,IAAIA;IANE,CAAhB;IASA,MAAM+C,WAAA,GAAcrmC,KAAA,GAAQyT,WAAA,GAAc,CAA1C;IACA,MAAM6yB,YAAA,GAAermC,MAAA,GAASwT,WAAA,GAAc,CAA5C;IAEA,MAAMguB,SAAA,GAAYC,cAAA,CAAeC,SAAf,CAChB,MADgB,EAEhB0E,WAFgB,EAGhBC,YAHgB,EAIhB,KAJgB,CAAlB;IAMA,MAAM1E,MAAA,GAASH,SAAA,CAAUzgB,OAAzB;IAEA,MAAM1gB,IAAA,GAAOshC,MAAA,CAAO2E,eAAP,CAAuBvmC,KAAvB,EAA8BC,MAA9B,CAAb;IACA,IAAIiT,eAAJ,EAAqB;MACnB,MAAM8vB,KAAA,GAAQ1iC,IAAA,CAAKA,IAAnB;MACA,KAAK,IAAI2Y,CAAA,GAAI,CAAR,EAAWwD,EAAA,GAAKumB,KAAA,CAAMn4B,MAAtB,EAA8BoO,CAAA,GAAIwD,EAAvC,EAA2CxD,CAAA,IAAK,CAAhD,EAAmD;QACjD+pB,KAAA,CAAM/pB,CAAN,IAAW/F,eAAA,CAAgB,CAAhB,CAAX;QACA8vB,KAAA,CAAM/pB,CAAA,GAAI,CAAV,IAAe/F,eAAA,CAAgB,CAAhB,CAAf;QACA8vB,KAAA,CAAM/pB,CAAA,GAAI,CAAV,IAAe/F,eAAA,CAAgB,CAAhB,CAAf;QACA8vB,KAAA,CAAM/pB,CAAA,GAAI,CAAV,IAAe,GAAf;MAJiD;IAFhC;IASrB,WAAWisB,MAAX,IAAqB,KAAKU,QAA1B,EAAoC;MAClCX,UAAA,CAAW3kC,IAAX,EAAiB4kC,MAAjB,EAAyBlkB,OAAzB;IADkC;IAGpC4gB,MAAA,CAAO4E,YAAP,CAAoBlmC,IAApB,EAA0BmT,WAA1B,EAAuCA,WAAvC;IACA,MAAM2L,MAAA,GAASqiB,SAAA,CAAUriB,MAAzB;IAEA,OAAO;MACLA,MADK;MAELqQ,OAAA,EAASA,OAAA,GAAUhc,WAAA,GAAc2vB,MAF5B;MAGL1T,OAAA,EAASA,OAAA,GAAUjc,WAAA,GAAc6vB,MAH5B;MAILF,MAJK;MAKLE;IALK,CAAP;EA9DgE;EAuElErD,WAAWN,GAAX,EAAgBsB,KAAhB,EAAuBC,OAAvB,EAAgCC,QAAhC,EAA0C;IACxCzB,gBAAA,CAAiBC,GAAjB,EAAsB,KAAKS,KAA3B;IACA,IAAI5Q,KAAJ;IACA,IAAI2R,QAAA,KAAa7B,QAAA,CAASG,OAA1B,EAAmC;MACjCjQ,KAAA,GAAQtwB,SAAA,CAAKunC,6BAAL,CAAmCpH,qCAAA,CAAoBM,GAApB,CAAnC,CAAR;IADiC,CAAnC,MAEO;MAELnQ,KAAA,GAAQtwB,SAAA,CAAKunC,6BAAL,CAAmCxF,KAAA,CAAMe,aAAzC,CAAR;MACA,IAAI,KAAKtB,MAAT,EAAiB;QACf,MAAMgG,WAAA,GAAcxnC,SAAA,CAAKunC,6BAAL,CAAmC,KAAK/F,MAAxC,CAApB;QACAlR,KAAA,GAAQ,CAACA,KAAA,CAAM,CAAN,IAAWkX,WAAA,CAAY,CAAZ,CAAZ,EAA4BlX,KAAA,CAAM,CAAN,IAAWkX,WAAA,CAAY,CAAZ,CAAvC,CAAR;MAFe;IAHZ;IAWP,MAAMC,sBAAA,GAAyB,KAAKZ,iBAAL,CAC7BvW,KAD6B,EAE7B2R,QAAA,KAAa7B,QAAA,CAASG,OAAtB,GAAgC,IAAhC,GAAuC,KAAKqG,WAFf,EAG7B7E,KAAA,CAAMS,cAHuB,CAA/B;IAMA,IAAIP,QAAA,KAAa7B,QAAA,CAASG,OAA1B,EAAmC;MACjCE,GAAA,CAAI2C,YAAJ,CAAiB,GAAGrB,KAAA,CAAMe,aAA1B;MACA,IAAI,KAAKtB,MAAT,EAAiB;QACff,GAAA,CAAIrP,SAAJ,CAAc,GAAG,KAAKoQ,MAAtB;MADe;IAFgB;IAOnCf,GAAA,CAAIoC,SAAJ,CACE4E,sBAAA,CAAuBlX,OADzB,EAEEkX,sBAAA,CAAuBjX,OAFzB;IAIAiQ,GAAA,CAAInQ,KAAJ,CAAUmX,sBAAA,CAAuBvD,MAAjC,EAAyCuD,sBAAA,CAAuBrD,MAAhE;IAEA,OAAO3D,GAAA,CAAIwC,aAAJ,CAAkBwE,sBAAA,CAAuBvnB,MAAzC,EAAiD,WAAjD,CAAP;EAnCwC;AAnFQ;AA0HpD,MAAMwnB,mBAAN,SAAkC5G,kBAAlC,CAAqD;EACnDC,WAAA,EAAa;IACX,OAAO,SAAP;EADW;AADsC;AAMrD,SAAS4G,iBAATA,CAA2B1G,EAA3B,EAA+B;EAC7B,QAAQA,EAAA,CAAG,CAAH,CAAR;IACE,KAAK,aAAL;MACE,OAAO,IAAID,yBAAJ,CAA8BC,EAA9B,CAAP;IACF,KAAK,MAAL;MACE,OAAO,IAAIsF,kBAAJ,CAAuBtF,EAAvB,CAAP;IACF,KAAK,OAAL;MACE,OAAO,IAAIyG,mBAAJ,EAAP;EANJ;EAQA,MAAM,IAAIjiB,KAAJ,CAAW,oBAAmBwb,EAAA,CAAG,CAAH,CAApB,EAAV,CAAN;AAT6B;AAY/B,MAAM2G,SAAA,GAAY;EAChBC,OAAA,EAAS,CADO;EAEhBC,SAAA,EAAW;AAFK,CAAlB;AAKA,MAAMC,aAAN,CAAoB;EAElB,OAAOf,gBAAP,GAA0B,IAA1B;EAEA3iC,YAAY48B,EAAZ,EAAgBtiC,KAAhB,EAAuB8hC,GAAvB,EAA4BuH,qBAA5B,EAAmDlF,aAAnD,EAAkE;IAChE,KAAK7Q,YAAL,GAAoBgP,EAAA,CAAG,CAAH,CAApB;IACA,KAAKO,MAAL,GAAcP,EAAA,CAAG,CAAH,KAAS,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,EAAa,CAAb,EAAgB,CAAhB,CAAvB;IACA,KAAKP,IAAL,GAAYO,EAAA,CAAG,CAAH,CAAZ;IACA,KAAKgH,KAAL,GAAahH,EAAA,CAAG,CAAH,CAAb;IACA,KAAKiH,KAAL,GAAajH,EAAA,CAAG,CAAH,CAAb;IACA,KAAKkH,SAAL,GAAiBlH,EAAA,CAAG,CAAH,CAAjB;IACA,KAAKmH,UAAL,GAAkBnH,EAAA,CAAG,CAAH,CAAlB;IACA,KAAKtiC,KAAL,GAAaA,KAAb;IACA,KAAK8hC,GAAL,GAAWA,GAAX;IACA,KAAKuH,qBAAL,GAA6BA,qBAA7B;IACA,KAAKlF,aAAL,GAAqBA,aAArB;EAXgE;EAclEuF,oBAAoBtG,KAApB,EAA2B;IACzB,MAAM9P,YAAA,GAAe,KAAKA,YAA1B;IACA,MAAMyO,IAAA,GAAO,KAAKA,IAAlB;IACA,MAAMuH,KAAA,GAAQ,KAAKA,KAAnB;IACA,MAAMC,KAAA,GAAQ,KAAKA,KAAnB;IACA,MAAMC,SAAA,GAAY,KAAKA,SAAvB;IACA,MAAMC,UAAA,GAAa,KAAKA,UAAxB;IACA,MAAMzpC,KAAA,GAAQ,KAAKA,KAAnB;IACA,MAAMqpC,qBAAA,GAAwB,KAAKA,qBAAnC;IAEAtlB,aAAA,CAAK,iBAAiB0lB,UAAtB;IAsBA,MAAME,EAAA,GAAK5H,IAAA,CAAK,CAAL,CAAX;MACE6H,EAAA,GAAK7H,IAAA,CAAK,CAAL,CADP;MAEEuD,EAAA,GAAKvD,IAAA,CAAK,CAAL,CAFP;MAGEyD,EAAA,GAAKzD,IAAA,CAAK,CAAL,CAHP;IAMA,MAAM8G,WAAA,GAAcxnC,SAAA,CAAKunC,6BAAL,CAAmC,KAAK/F,MAAxC,CAApB;IACA,MAAMgH,cAAA,GAAiBxoC,SAAA,CAAKunC,6BAAL,CACrB,KAAKzE,aADgB,CAAvB;IAGA,MAAMgE,aAAA,GAAgB,CACpBU,WAAA,CAAY,CAAZ,IAAiBgB,cAAA,CAAe,CAAf,CADG,EAEpBhB,WAAA,CAAY,CAAZ,IAAiBgB,cAAA,CAAe,CAAf,CAFG,CAAtB;IAQA,MAAMC,IAAA,GAAO,KAAKC,eAAL,CACXT,KADW,EAEX,KAAKxH,GAAL,CAASvgB,MAAT,CAAgBpf,KAFL,EAGXgmC,aAAA,CAAc,CAAd,CAHW,CAAb;IAKA,MAAM6B,IAAA,GAAO,KAAKD,eAAL,CACXR,KADW,EAEX,KAAKzH,GAAL,CAASvgB,MAAT,CAAgBnf,MAFL,EAGX+lC,aAAA,CAAc,CAAd,CAHW,CAAb;IAMA,MAAMvE,SAAA,GAAYR,KAAA,CAAMS,cAAN,CAAqBC,SAArB,CAChB,SADgB,EAEhBgG,IAAA,CAAK/vB,IAFW,EAGhBiwB,IAAA,CAAKjwB,IAHW,EAIhB,IAJgB,CAAlB;IAMA,MAAMgqB,MAAA,GAASH,SAAA,CAAUzgB,OAAzB;IACA,MAAM8mB,QAAA,GAAWZ,qBAAA,CAAsBa,oBAAtB,CAA2CnG,MAA3C,CAAjB;IACAkG,QAAA,CAASE,UAAT,GAAsB/G,KAAA,CAAM+G,UAA5B;IAEA,KAAKC,8BAAL,CAAoCH,QAApC,EAA8CT,SAA9C,EAAyDxpC,KAAzD;IAEA,IAAIqqC,UAAA,GAAaV,EAAjB;IACA,IAAIW,UAAA,GAAaV,EAAjB;IACA,IAAIW,UAAA,GAAajF,EAAjB;IACA,IAAIkF,UAAA,GAAahF,EAAjB;IAIA,IAAImE,EAAA,GAAK,CAAT,EAAY;MACVU,UAAA,GAAa,CAAb;MACAE,UAAA,IAAc/rC,IAAA,CAAKwX,GAAL,CAAS2zB,EAAT,CAAd;IAFU;IAIZ,IAAIC,EAAA,GAAK,CAAT,EAAY;MACVU,UAAA,GAAa,CAAb;MACAE,UAAA,IAAchsC,IAAA,CAAKwX,GAAL,CAAS4zB,EAAT,CAAd;IAFU;IAIZ7F,MAAA,CAAOG,SAAP,CAAiB,EAAE4F,IAAA,CAAKnY,KAAL,GAAa0Y,UAAb,CAAnB,EAA6C,EAAEL,IAAA,CAAKrY,KAAL,GAAa2Y,UAAb,CAA/C;IACAL,QAAA,CAASxX,SAAT,CAAmBqX,IAAA,CAAKnY,KAAxB,EAA+B,CAA/B,EAAkC,CAAlC,EAAqCqY,IAAA,CAAKrY,KAA1C,EAAiD,CAAjD,EAAoD,CAApD;IAIAoS,MAAA,CAAO0G,IAAP;IAEA,KAAKC,QAAL,CAAcT,QAAd,EAAwBI,UAAxB,EAAoCC,UAApC,EAAgDC,UAAhD,EAA4DC,UAA5D;IAEAP,QAAA,CAAS9F,aAAT,GAAyB3C,qCAAA,CAAoByI,QAAA,CAASnI,GAA7B,CAAzB;IAEAmI,QAAA,CAASpK,mBAAT,CAA6BvM,YAA7B;IAEA2W,QAAA,CAASvK,UAAT;IAEA,OAAO;MACLne,MAAA,EAAQqiB,SAAA,CAAUriB,MADb;MAELgkB,MAAA,EAAQuE,IAAA,CAAKnY,KAFR;MAGL8T,MAAA,EAAQuE,IAAA,CAAKrY,KAHR;MAILC,OAAA,EAASyY,UAJJ;MAKLxY,OAAA,EAASyY;IALJ,CAAP;EAvGyB;EAgH3BP,gBAAgBY,IAAhB,EAAsBC,cAAtB,EAAsCjZ,KAAtC,EAA6C;IAE3CgZ,IAAA,GAAOnsC,IAAA,CAAKwX,GAAL,CAAS20B,IAAT,CAAP;IAKA,MAAME,OAAA,GAAUrsC,IAAA,CAAKE,GAAL,CAAS0qC,aAAA,CAAcf,gBAAvB,EAAyCuC,cAAzC,CAAhB;IACA,IAAI7wB,IAAA,GAAOvb,IAAA,CAAKmlC,IAAL,CAAUgH,IAAA,GAAOhZ,KAAjB,CAAX;IACA,IAAI5X,IAAA,IAAQ8wB,OAAZ,EAAqB;MACnB9wB,IAAA,GAAO8wB,OAAP;IADmB,CAArB,MAEO;MACLlZ,KAAA,GAAQ5X,IAAA,GAAO4wB,IAAf;IADK;IAGP,OAAO;MAAEhZ,KAAF;MAAS5X;IAAT,CAAP;EAd2C;EAiB7C2wB,SAAST,QAAT,EAAmBN,EAAnB,EAAuBC,EAAvB,EAA2BtE,EAA3B,EAA+BE,EAA/B,EAAmC;IACjC,MAAMsF,SAAA,GAAYxF,EAAA,GAAKqE,EAAvB;IACA,MAAMoB,UAAA,GAAavF,EAAA,GAAKoE,EAAxB;IACAK,QAAA,CAASnI,GAAT,CAAa5/B,IAAb,CAAkBynC,EAAlB,EAAsBC,EAAtB,EAA0BkB,SAA1B,EAAqCC,UAArC;IACAd,QAAA,CAASxG,OAAT,CAAiBuH,gBAAjB,CAAkCxJ,qCAAA,CAAoByI,QAAA,CAASnI,GAA7B,CAAlC,EAAqE,CACnE6H,EADmE,EAEnEC,EAFmE,EAGnEtE,EAHmE,EAInEE,EAJmE,CAArE;IAMAyE,QAAA,CAAS/H,IAAT;IACA+H,QAAA,CAASgB,OAAT;EAXiC;EAcnCb,+BAA+BH,QAA/B,EAAyCT,SAAzC,EAAoDxpC,KAApD,EAA2D;IACzD,MAAMmjB,OAAA,GAAU8mB,QAAA,CAASnI,GAAzB;MACE2B,OAAA,GAAUwG,QAAA,CAASxG,OADrB;IAEA,QAAQ+F,SAAR;MACE,KAAKP,SAAA,CAAUC,OAAf;QACE,MAAMpH,GAAA,GAAM,KAAKA,GAAjB;QACA3e,OAAA,CAAQihB,SAAR,GAAoBtC,GAAA,CAAIsC,SAAxB;QACAjhB,OAAA,CAAQ+nB,WAAR,GAAsBpJ,GAAA,CAAIoJ,WAA1B;QACAzH,OAAA,CAAQj4B,SAAR,GAAoBs2B,GAAA,CAAIsC,SAAxB;QACAX,OAAA,CAAQ93B,WAAR,GAAsBm2B,GAAA,CAAIoJ,WAA1B;QACA;MACF,KAAKjC,SAAA,CAAUE,SAAf;QACE,MAAMgC,QAAA,GAAW9pC,SAAA,CAAKmI,YAAL,CAAkBxJ,KAAA,CAAM,CAAN,CAAlB,EAA4BA,KAAA,CAAM,CAAN,CAA5B,EAAsCA,KAAA,CAAM,CAAN,CAAtC,CAAjB;QACAmjB,OAAA,CAAQihB,SAAR,GAAoB+G,QAApB;QACAhoB,OAAA,CAAQ+nB,WAAR,GAAsBC,QAAtB;QAEA1H,OAAA,CAAQj4B,SAAR,GAAoB2/B,QAApB;QACA1H,OAAA,CAAQ93B,WAAR,GAAsBw/B,QAAtB;QACA;MACF;QACE,MAAM,IAAI5J,gBAAJ,CAAiB,2BAA0BiI,SAA3B,EAAhB,CAAN;IAjBJ;EAHyD;EAwB3DpH,WAAWN,GAAX,EAAgBsB,KAAhB,EAAuBC,OAAvB,EAAgCC,QAAhC,EAA0C;IAExC,IAAIT,MAAA,GAASQ,OAAb;IACA,IAAIC,QAAA,KAAa7B,QAAA,CAASG,OAA1B,EAAmC;MACjCiB,MAAA,GAASxhC,SAAA,CAAKoxB,SAAL,CAAeoQ,MAAf,EAAuBO,KAAA,CAAMe,aAA7B,CAAT;MACA,IAAI,KAAKtB,MAAT,EAAiB;QACfA,MAAA,GAASxhC,SAAA,CAAKoxB,SAAL,CAAeoQ,MAAf,EAAuB,KAAKA,MAA5B,CAAT;MADe;IAFgB;IAOnC,MAAMiG,sBAAA,GAAyB,KAAKY,mBAAL,CAAyBtG,KAAzB,CAA/B;IAEA,IAAImB,SAAA,GAAY,IAAIC,SAAJ,CAAc3B,MAAd,CAAhB;IAGA0B,SAAA,GAAYA,SAAA,CAAUL,SAAV,CACV4E,sBAAA,CAAuBlX,OADb,EAEVkX,sBAAA,CAAuBjX,OAFb,CAAZ;IAIA0S,SAAA,GAAYA,SAAA,CAAU5S,KAAV,CACV,IAAImX,sBAAA,CAAuBvD,MADjB,EAEV,IAAIuD,sBAAA,CAAuBrD,MAFjB,CAAZ;IAKA,MAAMlC,OAAA,GAAUzB,GAAA,CAAIwC,aAAJ,CAAkBwE,sBAAA,CAAuBvnB,MAAzC,EAAiD,QAAjD,CAAhB;IACAgiB,OAAA,CAAQkB,YAAR,CAAqBF,SAArB;IAEA,OAAOhB,OAAP;EA3BwC;AAzLxB;;;ACpbpB;AAEA,SAAS8H,aAATA,CAAuBxqB,MAAvB,EAA+B;EAC7B,QAAQA,MAAA,CAAOyqB,IAAf;IACE,KAAKF,SAAA,CAAUG,cAAf;MACE,OAAOC,0BAAA,CAA2B3qB,MAA3B,CAAP;IACF,KAAKuqB,SAAA,CAAUK,SAAf;MACE,OAAOC,gBAAA,CAAiB7qB,MAAjB,CAAP;EAJJ;EAOA,OAAO,IAAP;AAR6B;AAW/B,SAAS2qB,0BAATA,CAAoC;EAClCj4B,GADkC;EAElCo4B,MAAA,GAAS,CAFyB;EAGlC56B,IAHkC;EAIlC5O,KAJkC;EAKlCC,MALkC;EAMlCwpC,aAAA,GAAgB,UANkB;EAOlCC,aAAA,GAAgB;AAPkB,CAApC,EAQG;EACD,MAAMC,KAAA,GAAQ7qC,gBAAA,CAAY8qC,cAAZ,GAA6B,UAA7B,GAA0C,UAAxD;EACA,MAAM,CAACC,WAAD,EAAcC,UAAd,IAA4BJ,aAAA,GAC9B,CAACD,aAAD,EAAgBE,KAAhB,CAD8B,GAE9B,CAACA,KAAD,EAAQF,aAAR,CAFJ;EAGA,MAAMM,aAAA,GAAgB/pC,KAAA,IAAS,CAA/B;EACA,MAAMgqC,cAAA,GAAiBhqC,KAAA,GAAQ,CAA/B;EACA,MAAMiqC,SAAA,GAAY74B,GAAA,CAAIvG,MAAtB;EACA+D,IAAA,GAAO,IAAIs7B,WAAJ,CAAgBt7B,IAAA,CAAKmb,MAArB,CAAP;EACA,IAAIogB,OAAA,GAAU,CAAd;EAEA,KAAK,IAAIlxB,CAAA,GAAI,CAAR,EAAWA,CAAA,GAAIhZ,MAApB,EAA4BgZ,CAAA,EAA5B,EAAiC;IAC/B,KAAK,MAAM1c,GAAA,GAAMitC,MAAA,GAASO,aAArB,EAAoCP,MAAA,GAASjtC,GAAlD,EAAuDitC,MAAA,EAAvD,EAAiE;MAC/D,MAAMY,IAAA,GAAOZ,MAAA,GAASS,SAAT,GAAqB74B,GAAA,CAAIo4B,MAAJ,CAArB,GAAmC,GAAhD;MACA56B,IAAA,CAAKu7B,OAAA,EAAL,IAAkBC,IAAA,GAAO,UAAP,GAAoBN,UAApB,GAAiCD,WAAnD;MACAj7B,IAAA,CAAKu7B,OAAA,EAAL,IAAkBC,IAAA,GAAO,SAAP,GAAmBN,UAAnB,GAAgCD,WAAlD;MACAj7B,IAAA,CAAKu7B,OAAA,EAAL,IAAkBC,IAAA,GAAO,QAAP,GAAkBN,UAAlB,GAA+BD,WAAjD;MACAj7B,IAAA,CAAKu7B,OAAA,EAAL,IAAkBC,IAAA,GAAO,OAAP,GAAiBN,UAAjB,GAA8BD,WAAhD;MACAj7B,IAAA,CAAKu7B,OAAA,EAAL,IAAkBC,IAAA,GAAO,MAAP,GAAgBN,UAAhB,GAA6BD,WAA/C;MACAj7B,IAAA,CAAKu7B,OAAA,EAAL,IAAkBC,IAAA,GAAO,KAAP,GAAeN,UAAf,GAA4BD,WAA9C;MACAj7B,IAAA,CAAKu7B,OAAA,EAAL,IAAkBC,IAAA,GAAO,IAAP,GAAcN,UAAd,GAA2BD,WAA7C;MACAj7B,IAAA,CAAKu7B,OAAA,EAAL,IAAkBC,IAAA,GAAO,GAAP,GAAaN,UAAb,GAA0BD,WAA5C;IAT+D;IAWjE,IAAIG,cAAA,KAAmB,CAAvB,EAA0B;MACxB;IADwB;IAG1B,MAAMI,IAAA,GAAOZ,MAAA,GAASS,SAAT,GAAqB74B,GAAA,CAAIo4B,MAAA,EAAJ,CAArB,GAAqC,GAAlD;IACA,KAAK,IAAIxE,CAAA,GAAI,CAAR,EAAWA,CAAA,GAAIgF,cAApB,EAAoChF,CAAA,EAApC,EAAyC;MACvCp2B,IAAA,CAAKu7B,OAAA,EAAL,IAAkBC,IAAA,GAAQ,KAAM,IAAIpF,CAAlB,GAAwB8E,UAAxB,GAAqCD,WAAvD;IADuC;EAhBV;EAoBjC,OAAO;IAAEL,MAAF;IAAUW;EAAV,CAAP;AA/BC;AAkCH,SAASZ,gBAATA,CAA0B;EACxBn4B,GADwB;EAExBo4B,MAAA,GAAS,CAFe;EAGxB56B,IAHwB;EAIxBu7B,OAAA,GAAU,CAJc;EAKxBnqC,KALwB;EAMxBC;AANwB,CAA1B,EAOG;EACD,IAAIgZ,CAAA,GAAI,CAAR;EACA,MAAMoxB,KAAA,GAAQj5B,GAAA,CAAIvG,MAAJ,IAAc,CAA5B;EACA,MAAMy/B,KAAA,GAAQ,IAAIJ,WAAJ,CAAgB94B,GAAA,CAAI2Y,MAApB,EAA4Byf,MAA5B,EAAoCa,KAApC,CAAd;EAEA,IAAIvrC,WAAA,CAAY8qC,cAAhB,EAAgC;IAG9B,OAAO3wB,CAAA,GAAIoxB,KAAA,GAAQ,CAAnB,EAAsBpxB,CAAA,IAAK,CAAL,EAAQkxB,OAAA,IAAW,CAAzC,EAA4C;MAC1C,MAAMI,EAAA,GAAKD,KAAA,CAAMrxB,CAAN,CAAX;MACA,MAAMuxB,EAAA,GAAKF,KAAA,CAAMrxB,CAAA,GAAI,CAAV,CAAX;MACA,MAAMwxB,EAAA,GAAKH,KAAA,CAAMrxB,CAAA,GAAI,CAAV,CAAX;MAEArK,IAAA,CAAKu7B,OAAL,IAAgBI,EAAA,GAAK,UAArB;MACA37B,IAAA,CAAKu7B,OAAA,GAAU,CAAf,IAAqBI,EAAA,KAAO,EAAR,GAAeC,EAAA,IAAM,CAArB,GAA0B,UAA9C;MACA57B,IAAA,CAAKu7B,OAAA,GAAU,CAAf,IAAqBK,EAAA,KAAO,EAAR,GAAeC,EAAA,IAAM,EAArB,GAA2B,UAA/C;MACA77B,IAAA,CAAKu7B,OAAA,GAAU,CAAf,IAAqBM,EAAA,KAAO,CAAR,GAAa,UAAjC;IAR0C;IAW5C,KAAK,IAAIzF,CAAA,GAAI/rB,CAAA,GAAI,CAAZ,EAAeyxB,EAAA,GAAKt5B,GAAA,CAAIvG,MAAxB,EAAgCm6B,CAAA,GAAI0F,EAAzC,EAA6C1F,CAAA,IAAK,CAAlD,EAAqD;MACnDp2B,IAAA,CAAKu7B,OAAA,EAAL,IACE/4B,GAAA,CAAI4zB,CAAJ,IAAU5zB,GAAA,CAAI4zB,CAAA,GAAI,CAAR,KAAc,CAAxB,GAA8B5zB,GAAA,CAAI4zB,CAAA,GAAI,CAAR,KAAc,EAA5C,GAAkD,UADpD;IADmD;EAdvB,CAAhC,MAkBO;IACL,OAAO/rB,CAAA,GAAIoxB,KAAA,GAAQ,CAAnB,EAAsBpxB,CAAA,IAAK,CAAL,EAAQkxB,OAAA,IAAW,CAAzC,EAA4C;MAC1C,MAAMI,EAAA,GAAKD,KAAA,CAAMrxB,CAAN,CAAX;MACA,MAAMuxB,EAAA,GAAKF,KAAA,CAAMrxB,CAAA,GAAI,CAAV,CAAX;MACA,MAAMwxB,EAAA,GAAKH,KAAA,CAAMrxB,CAAA,GAAI,CAAV,CAAX;MAEArK,IAAA,CAAKu7B,OAAL,IAAgBI,EAAA,GAAK,IAArB;MACA37B,IAAA,CAAKu7B,OAAA,GAAU,CAAf,IAAqBI,EAAA,IAAM,EAAP,GAAcC,EAAA,KAAO,CAArB,GAA0B,IAA9C;MACA57B,IAAA,CAAKu7B,OAAA,GAAU,CAAf,IAAqBK,EAAA,IAAM,EAAP,GAAcC,EAAA,KAAO,EAArB,GAA2B,IAA/C;MACA77B,IAAA,CAAKu7B,OAAA,GAAU,CAAf,IAAqBM,EAAA,IAAM,CAAP,GAAY,IAAhC;IAR0C;IAW5C,KAAK,IAAIzF,CAAA,GAAI/rB,CAAA,GAAI,CAAZ,EAAeyxB,EAAA,GAAKt5B,GAAA,CAAIvG,MAAxB,EAAgCm6B,CAAA,GAAI0F,EAAzC,EAA6C1F,CAAA,IAAK,CAAlD,EAAqD;MACnDp2B,IAAA,CAAKu7B,OAAA,EAAL,IACG/4B,GAAA,CAAI4zB,CAAJ,KAAU,EAAX,GAAkB5zB,GAAA,CAAI4zB,CAAA,GAAI,CAAR,KAAc,EAAhC,GAAuC5zB,GAAA,CAAI4zB,CAAA,GAAI,CAAR,KAAc,CAArD,GAA0D,IAD5D;IADmD;EAZhD;EAkBP,OAAO;IAAEwE,MAAF;IAAUW;EAAV,CAAP;AAzCC;AA4CH,SAASQ,UAATA,CAAoBv5B,GAApB,EAAyBxC,IAAzB,EAA+B;EAC7B,IAAI9P,WAAA,CAAY8qC,cAAhB,EAAgC;IAC9B,KAAK,IAAI3wB,CAAA,GAAI,CAAR,EAAWwD,EAAA,GAAKrL,GAAA,CAAIvG,MAApB,EAA4BoO,CAAA,GAAIwD,EAArC,EAAyCxD,CAAA,EAAzC,EAA8C;MAC5CrK,IAAA,CAAKqK,CAAL,IAAW7H,GAAA,CAAI6H,CAAJ,IAAS,OAAV,GAAqB,UAA/B;IAD4C;EADhB,CAAhC,MAIO;IACL,KAAK,IAAIA,CAAA,GAAI,CAAR,EAAWwD,EAAA,GAAKrL,GAAA,CAAIvG,MAApB,EAA4BoO,CAAA,GAAIwD,EAArC,EAAyCxD,CAAA,EAAzC,EAA8C;MAC5CrK,IAAA,CAAKqK,CAAL,IAAW7H,GAAA,CAAI6H,CAAJ,IAAS,SAAV,GAAuB,UAAjC;IAD4C;EADzC;AALsB;;;AC1G/B;AAcA;AAKA;AAKA;AAKA,MAAMiyB,aAAA,GAAgB,EAAtB;AAEA,MAAMC,aAAA,GAAgB,GAAtB;AACA,MAAMC,cAAA,GAAiB,IAAvB;AAIA,MAAMC,cAAA,GAAiB,EAAvB;AAEA,MAAMC,eAAA,GAAkB,EAAxB;AAGA,MAAMC,mBAAA,GAAsB,IAA5B;AAEA,MAAMC,iBAAA,GAAoB,EAA1B;AAgBA,SAASC,uBAATA,CAAiC9L,GAAjC,EAAsC+L,OAAtC,EAA+C;EAC7C,IAAI/L,GAAA,CAAIgM,gBAAR,EAA0B;IACxB,MAAM,IAAIhnB,KAAJ,CAAU,2CAAV,CAAN;EADwB;EAG1Bgb,GAAA,CAAIiM,cAAJ,GAAqBjM,GAAA,CAAI2I,IAAzB;EACA3I,GAAA,CAAIkM,iBAAJ,GAAwBlM,GAAA,CAAImM,OAA5B;EACAnM,GAAA,CAAIoM,gBAAJ,GAAuBpM,GAAA,CAAItQ,MAA3B;EACAsQ,GAAA,CAAIqM,eAAJ,GAAsBrM,GAAA,CAAInQ,KAA1B;EACAmQ,GAAA,CAAIsM,mBAAJ,GAA0BtM,GAAA,CAAIoC,SAA9B;EACApC,GAAA,CAAIuM,mBAAJ,GAA0BvM,GAAA,CAAIrP,SAA9B;EACAqP,GAAA,CAAIwM,sBAAJ,GAA6BxM,GAAA,CAAI2C,YAAjC;EACA3C,GAAA,CAAIyM,wBAAJ,GAA+BzM,GAAA,CAAI0M,cAAnC;EACA1M,GAAA,CAAI2M,cAAJ,GAAqB3M,GAAA,CAAII,IAAzB;EACAJ,GAAA,CAAI4M,gBAAJ,GAAuB5M,GAAA,CAAI6M,MAA3B;EACA7M,GAAA,CAAI8M,gBAAJ,GAAuB9M,GAAA,CAAI+M,MAA3B;EACA/M,GAAA,CAAIgN,uBAAJ,GAA8BhN,GAAA,CAAIiN,aAAlC;EACAjN,GAAA,CAAIkN,cAAJ,GAAqBlN,GAAA,CAAI5/B,IAAzB;EACA4/B,GAAA,CAAImN,mBAAJ,GAA0BnN,GAAA,CAAIoN,SAA9B;EACApN,GAAA,CAAIqN,mBAAJ,GAA0BrN,GAAA,CAAImC,SAA9B;EAEAnC,GAAA,CAAIgM,gBAAJ,GAAuB,MAAM;IAC3BhM,GAAA,CAAI2I,IAAJ,GAAW3I,GAAA,CAAIiM,cAAf;IACAjM,GAAA,CAAImM,OAAJ,GAAcnM,GAAA,CAAIkM,iBAAlB;IACAlM,GAAA,CAAItQ,MAAJ,GAAasQ,GAAA,CAAIoM,gBAAjB;IACApM,GAAA,CAAInQ,KAAJ,GAAYmQ,GAAA,CAAIqM,eAAhB;IACArM,GAAA,CAAIoC,SAAJ,GAAgBpC,GAAA,CAAIsM,mBAApB;IACAtM,GAAA,CAAIrP,SAAJ,GAAgBqP,GAAA,CAAIuM,mBAApB;IACAvM,GAAA,CAAI2C,YAAJ,GAAmB3C,GAAA,CAAIwM,sBAAvB;IACAxM,GAAA,CAAI0M,cAAJ,GAAqB1M,GAAA,CAAIyM,wBAAzB;IAEAzM,GAAA,CAAII,IAAJ,GAAWJ,GAAA,CAAI2M,cAAf;IACA3M,GAAA,CAAI6M,MAAJ,GAAa7M,GAAA,CAAI4M,gBAAjB;IACA5M,GAAA,CAAI+M,MAAJ,GAAa/M,GAAA,CAAI8M,gBAAjB;IACA9M,GAAA,CAAIiN,aAAJ,GAAoBjN,GAAA,CAAIgN,uBAAxB;IACAhN,GAAA,CAAI5/B,IAAJ,GAAW4/B,GAAA,CAAIkN,cAAf;IACAlN,GAAA,CAAIoN,SAAJ,GAAgBpN,GAAA,CAAImN,mBAApB;IACAnN,GAAA,CAAImC,SAAJ,GAAgBnC,GAAA,CAAIqN,mBAApB;IACA,OAAOrN,GAAA,CAAIgM,gBAAX;EAjB2B,CAA7B;EAoBAhM,GAAA,CAAI2I,IAAJ,GAAW,SAAS2E,OAATA,CAAA,EAAmB;IAC5BvB,OAAA,CAAQpD,IAAR;IACA,KAAKsD,cAAL;EAF4B,CAA9B;EAKAjM,GAAA,CAAImM,OAAJ,GAAc,SAASoB,UAATA,CAAA,EAAsB;IAClCxB,OAAA,CAAQI,OAAR;IACA,KAAKD,iBAAL;EAFkC,CAApC;EAKAlM,GAAA,CAAIoC,SAAJ,GAAgB,SAASoL,YAATA,CAAsBvwC,CAAtB,EAAyBI,CAAzB,EAA4B;IAC1C0uC,OAAA,CAAQ3J,SAAR,CAAkBnlC,CAAlB,EAAqBI,CAArB;IACA,KAAKivC,mBAAL,CAAyBrvC,CAAzB,EAA4BI,CAA5B;EAF0C,CAA5C;EAKA2iC,GAAA,CAAInQ,KAAJ,GAAY,SAAS4d,QAATA,CAAkBxwC,CAAlB,EAAqBI,CAArB,EAAwB;IAClC0uC,OAAA,CAAQlc,KAAR,CAAc5yB,CAAd,EAAiBI,CAAjB;IACA,KAAKgvC,eAAL,CAAqBpvC,CAArB,EAAwBI,CAAxB;EAFkC,CAApC;EAKA2iC,GAAA,CAAIrP,SAAJ,GAAgB,SAAS+c,YAATA,CAAsBC,CAAtB,EAAyB3vC,CAAzB,EAA4BZ,CAA5B,EAA+BwwC,CAA/B,EAAkC1yB,CAAlC,EAAqC2yB,CAArC,EAAwC;IACtD9B,OAAA,CAAQpb,SAAR,CAAkBgd,CAAlB,EAAqB3vC,CAArB,EAAwBZ,CAAxB,EAA2BwwC,CAA3B,EAA8B1yB,CAA9B,EAAiC2yB,CAAjC;IACA,KAAKtB,mBAAL,CAAyBoB,CAAzB,EAA4B3vC,CAA5B,EAA+BZ,CAA/B,EAAkCwwC,CAAlC,EAAqC1yB,CAArC,EAAwC2yB,CAAxC;EAFsD,CAAxD;EAKA7N,GAAA,CAAI2C,YAAJ,GAAmB,SAASmL,eAATA,CAAyBH,CAAzB,EAA4B3vC,CAA5B,EAA+BZ,CAA/B,EAAkCwwC,CAAlC,EAAqC1yB,CAArC,EAAwC2yB,CAAxC,EAA2C;IAC5D9B,OAAA,CAAQpJ,YAAR,CAAqBgL,CAArB,EAAwB3vC,CAAxB,EAA2BZ,CAA3B,EAA8BwwC,CAA9B,EAAiC1yB,CAAjC,EAAoC2yB,CAApC;IACA,KAAKrB,sBAAL,CAA4BmB,CAA5B,EAA+B3vC,CAA/B,EAAkCZ,CAAlC,EAAqCwwC,CAArC,EAAwC1yB,CAAxC,EAA2C2yB,CAA3C;EAF4D,CAA9D;EAKA7N,GAAA,CAAI0M,cAAJ,GAAqB,SAASqB,iBAATA,CAAA,EAA6B;IAChDhC,OAAA,CAAQW,cAAR;IACA,KAAKD,wBAAL;EAFgD,CAAlD;EAKAzM,GAAA,CAAItQ,MAAJ,GAAa,SAASse,SAATA,CAAmBnmC,KAAnB,EAA0B;IACrCkkC,OAAA,CAAQrc,MAAR,CAAe7nB,KAAf;IACA,KAAKukC,gBAAL,CAAsBvkC,KAAtB;EAFqC,CAAvC;EAKAm4B,GAAA,CAAII,IAAJ,GAAW,SAAS4N,SAATA,CAAmBC,IAAnB,EAAyB;IAClClC,OAAA,CAAQ3L,IAAR,CAAa6N,IAAb;IACA,KAAKtB,cAAL,CAAoBsB,IAApB;EAFkC,CAApC;EAKAjO,GAAA,CAAI6M,MAAJ,GAAa,UAAU5vC,CAAV,EAAaI,CAAb,EAAgB;IAC3B0uC,OAAA,CAAQc,MAAR,CAAe5vC,CAAf,EAAkBI,CAAlB;IACA,KAAKuvC,gBAAL,CAAsB3vC,CAAtB,EAAyBI,CAAzB;EAF2B,CAA7B;EAKA2iC,GAAA,CAAI+M,MAAJ,GAAa,UAAU9vC,CAAV,EAAaI,CAAb,EAAgB;IAC3B0uC,OAAA,CAAQgB,MAAR,CAAe9vC,CAAf,EAAkBI,CAAlB;IACA,KAAKyvC,gBAAL,CAAsB7vC,CAAtB,EAAyBI,CAAzB;EAF2B,CAA7B;EAKA2iC,GAAA,CAAIiN,aAAJ,GAAoB,UAAUiB,IAAV,EAAgBC,IAAhB,EAAsBC,IAAtB,EAA4BC,IAA5B,EAAkCpxC,CAAlC,EAAqCI,CAArC,EAAwC;IAC1D0uC,OAAA,CAAQkB,aAAR,CAAsBiB,IAAtB,EAA4BC,IAA5B,EAAkCC,IAAlC,EAAwCC,IAAxC,EAA8CpxC,CAA9C,EAAiDI,CAAjD;IACA,KAAK2vC,uBAAL,CAA6BkB,IAA7B,EAAmCC,IAAnC,EAAyCC,IAAzC,EAA+CC,IAA/C,EAAqDpxC,CAArD,EAAwDI,CAAxD;EAF0D,CAA5D;EAKA2iC,GAAA,CAAI5/B,IAAJ,GAAW,UAAUnD,CAAV,EAAaI,CAAb,EAAgBgD,KAAhB,EAAuBC,MAAvB,EAA+B;IACxCyrC,OAAA,CAAQ3rC,IAAR,CAAanD,CAAb,EAAgBI,CAAhB,EAAmBgD,KAAnB,EAA0BC,MAA1B;IACA,KAAK4sC,cAAL,CAAoBjwC,CAApB,EAAuBI,CAAvB,EAA0BgD,KAA1B,EAAiCC,MAAjC;EAFwC,CAA1C;EAKA0/B,GAAA,CAAIoN,SAAJ,GAAgB,YAAY;IAC1BrB,OAAA,CAAQqB,SAAR;IACA,KAAKD,mBAAL;EAF0B,CAA5B;EAKAnN,GAAA,CAAImC,SAAJ,GAAgB,YAAY;IAC1B4J,OAAA,CAAQ5J,SAAR;IACA,KAAKkL,mBAAL;EAF0B,CAA5B;AA9G6C;AAoH/C,MAAMiB,cAAN,CAAqB;EACnB1qC,YAAY+jB,aAAZ,EAA2B;IACzB,KAAKA,aAAL,GAAqBA,aAArB;IACA,KAAK4mB,KAAL,GAAapkC,MAAA,CAAO3J,MAAP,CAAc,IAAd,CAAb;EAFyB;EAK3BwhC,UAAUt8B,EAAV,EAAcrF,KAAd,EAAqBC,MAArB,EAA6B;IAC3B,IAAIkuC,WAAJ;IACA,IAAI,KAAKD,KAAL,CAAW7oC,EAAX,MAAmBuQ,SAAvB,EAAkC;MAChCu4B,WAAA,GAAc,KAAKD,KAAL,CAAW7oC,EAAX,CAAd;MACA,KAAKiiB,aAAL,CAAmBmX,KAAnB,CAAyB0P,WAAzB,EAAsCnuC,KAAtC,EAA6CC,MAA7C;IAFgC,CAAlC,MAGO;MACLkuC,WAAA,GAAc,KAAK7mB,aAAL,CAAmBnnB,MAAnB,CAA0BH,KAA1B,EAAiCC,MAAjC,CAAd;MACA,KAAKiuC,KAAL,CAAW7oC,EAAX,IAAiB8oC,WAAjB;IAFK;IAIP,OAAOA,WAAP;EAT2B;EAY7B9tB,OAAOhb,EAAP,EAAW;IACT,OAAO,KAAK6oC,KAAL,CAAW7oC,EAAX,CAAP;EADS;EAIX+T,MAAA,EAAQ;IACN,WAAW/T,EAAX,IAAiB,KAAK6oC,KAAtB,EAA6B;MAC3B,MAAMC,WAAA,GAAc,KAAKD,KAAL,CAAW7oC,EAAX,CAApB;MACA,KAAKiiB,aAAL,CAAmBkD,OAAnB,CAA2B2jB,WAA3B;MACA,OAAO,KAAKD,KAAL,CAAW7oC,EAAX,CAAP;IAH2B;EADvB;AAtBW;AA+BrB,SAAS+oC,wBAATA,CACEzO,GADF,EAEE0O,MAFF,EAGEC,IAHF,EAIEC,IAJF,EAKEC,IALF,EAMEC,IANF,EAOEC,KAPF,EAQEC,KARF,EASEC,KATF,EAUEC,KAVF,EAWE;EACA,MAAM,CAACvB,CAAD,EAAI3vC,CAAJ,EAAOZ,CAAP,EAAUwwC,CAAV,EAAauB,EAAb,EAAiBC,EAAjB,IAAuB1P,qCAAA,CAAoBM,GAApB,CAA7B;EACA,IAAIhiC,CAAA,KAAM,CAAN,IAAWZ,CAAA,KAAM,CAArB,EAAwB;IAWtB,MAAMiyC,GAAA,GAAMN,KAAA,GAAQpB,CAAR,GAAYwB,EAAxB;IACA,MAAMG,IAAA,GAAO5yC,IAAA,CAAKsX,KAAL,CAAWq7B,GAAX,CAAb;IACA,MAAME,GAAA,GAAMP,KAAA,GAAQpB,CAAR,GAAYwB,EAAxB;IACA,MAAMI,IAAA,GAAO9yC,IAAA,CAAKsX,KAAL,CAAWu7B,GAAX,CAAb;IACA,MAAME,GAAA,GAAO,CAAAV,KAAA,GAAQE,KAAR,IAAiBtB,CAAlB,GAAsBwB,EAAlC;IAIA,MAAMO,MAAA,GAAShzC,IAAA,CAAKwX,GAAL,CAASxX,IAAA,CAAKsX,KAAL,CAAWy7B,GAAX,IAAkBH,IAA3B,KAAoC,CAAnD;IACA,MAAMK,GAAA,GAAO,CAAAX,KAAA,GAAQE,KAAR,IAAiBtB,CAAlB,GAAsBwB,EAAlC;IACA,MAAMQ,OAAA,GAAUlzC,IAAA,CAAKwX,GAAL,CAASxX,IAAA,CAAKsX,KAAL,CAAW27B,GAAX,IAAkBH,IAA3B,KAAoC,CAApD;IAKAxP,GAAA,CAAI2C,YAAJ,CAAiBjmC,IAAA,CAAKmzC,IAAL,CAAUlC,CAAV,CAAjB,EAA+B,CAA/B,EAAkC,CAAlC,EAAqCjxC,IAAA,CAAKmzC,IAAL,CAAUjC,CAAV,CAArC,EAAmD0B,IAAnD,EAAyDE,IAAzD;IACAxP,GAAA,CAAI8P,SAAJ,CAAcpB,MAAd,EAAsBC,IAAtB,EAA4BC,IAA5B,EAAkCC,IAAlC,EAAwCC,IAAxC,EAA8C,CAA9C,EAAiD,CAAjD,EAAoDY,MAApD,EAA4DE,OAA5D;IACA5P,GAAA,CAAI2C,YAAJ,CAAiBgL,CAAjB,EAAoB3vC,CAApB,EAAuBZ,CAAvB,EAA0BwwC,CAA1B,EAA6BuB,EAA7B,EAAiCC,EAAjC;IAEA,OAAO,CAACM,MAAD,EAASE,OAAT,CAAP;EA9BsB;EAiCxB,IAAIjC,CAAA,KAAM,CAAN,IAAWC,CAAA,KAAM,CAArB,EAAwB;IAEtB,MAAMyB,GAAA,GAAML,KAAA,GAAQ5xC,CAAR,GAAY+xC,EAAxB;IACA,MAAMG,IAAA,GAAO5yC,IAAA,CAAKsX,KAAL,CAAWq7B,GAAX,CAAb;IACA,MAAME,GAAA,GAAMR,KAAA,GAAQ/wC,CAAR,GAAYoxC,EAAxB;IACA,MAAMI,IAAA,GAAO9yC,IAAA,CAAKsX,KAAL,CAAWu7B,GAAX,CAAb;IACA,MAAME,GAAA,GAAO,CAAAT,KAAA,GAAQE,KAAR,IAAiB9xC,CAAlB,GAAsB+xC,EAAlC;IACA,MAAMO,MAAA,GAAShzC,IAAA,CAAKwX,GAAL,CAASxX,IAAA,CAAKsX,KAAL,CAAWy7B,GAAX,IAAkBH,IAA3B,KAAoC,CAAnD;IACA,MAAMK,GAAA,GAAO,CAAAZ,KAAA,GAAQE,KAAR,IAAiBjxC,CAAlB,GAAsBoxC,EAAlC;IACA,MAAMQ,OAAA,GAAUlzC,IAAA,CAAKwX,GAAL,CAASxX,IAAA,CAAKsX,KAAL,CAAW27B,GAAX,IAAkBH,IAA3B,KAAoC,CAApD;IAEAxP,GAAA,CAAI2C,YAAJ,CAAiB,CAAjB,EAAoBjmC,IAAA,CAAKmzC,IAAL,CAAU7xC,CAAV,CAApB,EAAkCtB,IAAA,CAAKmzC,IAAL,CAAUzyC,CAAV,CAAlC,EAAgD,CAAhD,EAAmDkyC,IAAnD,EAAyDE,IAAzD;IACAxP,GAAA,CAAI8P,SAAJ,CAAcpB,MAAd,EAAsBC,IAAtB,EAA4BC,IAA5B,EAAkCC,IAAlC,EAAwCC,IAAxC,EAA8C,CAA9C,EAAiD,CAAjD,EAAoDc,OAApD,EAA6DF,MAA7D;IACA1P,GAAA,CAAI2C,YAAJ,CAAiBgL,CAAjB,EAAoB3vC,CAApB,EAAuBZ,CAAvB,EAA0BwwC,CAA1B,EAA6BuB,EAA7B,EAAiCC,EAAjC;IAEA,OAAO,CAACQ,OAAD,EAAUF,MAAV,CAAP;EAfsB;EAmBxB1P,GAAA,CAAI8P,SAAJ,CAAcpB,MAAd,EAAsBC,IAAtB,EAA4BC,IAA5B,EAAkCC,IAAlC,EAAwCC,IAAxC,EAA8CC,KAA9C,EAAqDC,KAArD,EAA4DC,KAA5D,EAAmEC,KAAnE;EAEA,MAAMzL,MAAA,GAAS/mC,IAAA,CAAKqzC,KAAL,CAAWpC,CAAX,EAAc3vC,CAAd,CAAf;EACA,MAAM2lC,MAAA,GAASjnC,IAAA,CAAKqzC,KAAL,CAAW3yC,CAAX,EAAcwwC,CAAd,CAAf;EACA,OAAO,CAACnK,MAAA,GAASwL,KAAV,EAAiBtL,MAAA,GAASuL,KAA1B,CAAP;AA1DA;AA6DF,SAASc,iBAATA,CAA2BC,OAA3B,EAAoC;EAClC,MAAM;IAAE5vC,KAAF;IAASC;EAAT,IAAoB2vC,OAA1B;EACA,IAAI5vC,KAAA,GAAQurC,mBAAR,IAA+BtrC,MAAA,GAASsrC,mBAA5C,EAAiE;IAC/D,OAAO,IAAP;EAD+D;EAIjE,MAAMsE,sBAAA,GAAyB,IAA/B;EACA,MAAMC,WAAA,GAAc,IAAI3lB,UAAJ,CAAe,CACjC,CADiC,EAC9B,CAD8B,EAC3B,CAD2B,EACxB,CADwB,EACrB,CADqB,EAClB,CADkB,EACf,CADe,EACZ,CADY,EACT,CADS,EACN,EADM,EACF,CADE,EACC,CADD,EACI,CADJ,EACO,CADP,EACU,CADV,EACa,CADb,CAAf,CAApB;EAIA,MAAM4lB,MAAA,GAAS/vC,KAAA,GAAQ,CAAvB;EACA,IAAIud,MAAA,GAAS,IAAI4M,UAAJ,CAAe4lB,MAAA,IAAU9vC,MAAA,GAAS,CAAT,CAAzB,CAAb;EACA,IAAIgZ,CAAJ,EAAO+rB,CAAP,EAAUgL,EAAV;EAGA,MAAMC,QAAA,GAAYjwC,KAAA,GAAQ,CAAT,GAAc,CAAC,CAAhC;EACA,IAAIM,IAAA,GAAO,IAAI6pB,UAAJ,CAAe8lB,QAAA,GAAWhwC,MAA1B,CAAX;IACEiwC,GAAA,GAAM,CADR;EAEA,WAAW9F,IAAX,IAAmBwF,OAAA,CAAQtvC,IAA3B,EAAiC;IAC/B,IAAI6vC,IAAA,GAAO,GAAX;IACA,OAAOA,IAAA,GAAO,CAAd,EAAiB;MACf7vC,IAAA,CAAK4vC,GAAA,EAAL,IAAc9F,IAAA,GAAO+F,IAAP,GAAc,CAAd,GAAkB,GAAhC;MACAA,IAAA,KAAS,CAAT;IAFe;EAFc;EAkBjC,IAAIC,KAAA,GAAQ,CAAZ;EACAF,GAAA,GAAM,CAAN;EACA,IAAI5vC,IAAA,CAAK4vC,GAAL,MAAc,CAAlB,EAAqB;IACnB3yB,MAAA,CAAO,CAAP,IAAY,CAAZ;IACA,EAAE6yB,KAAF;EAFmB;EAIrB,KAAKpL,CAAA,GAAI,CAAT,EAAYA,CAAA,GAAIhlC,KAAhB,EAAuBglC,CAAA,EAAvB,EAA4B;IAC1B,IAAI1kC,IAAA,CAAK4vC,GAAL,MAAc5vC,IAAA,CAAK4vC,GAAA,GAAM,CAAX,CAAlB,EAAiC;MAC/B3yB,MAAA,CAAOynB,CAAP,IAAY1kC,IAAA,CAAK4vC,GAAL,IAAY,CAAZ,GAAgB,CAA5B;MACA,EAAEE,KAAF;IAF+B;IAIjCF,GAAA;EAL0B;EAO5B,IAAI5vC,IAAA,CAAK4vC,GAAL,MAAc,CAAlB,EAAqB;IACnB3yB,MAAA,CAAOynB,CAAP,IAAY,CAAZ;IACA,EAAEoL,KAAF;EAFmB;EAIrB,KAAKn3B,CAAA,GAAI,CAAT,EAAYA,CAAA,GAAIhZ,MAAhB,EAAwBgZ,CAAA,EAAxB,EAA6B;IAC3Bi3B,GAAA,GAAMj3B,CAAA,GAAIg3B,QAAV;IACAD,EAAA,GAAK/2B,CAAA,GAAI82B,MAAT;IACA,IAAIzvC,IAAA,CAAK4vC,GAAA,GAAMD,QAAX,MAAyB3vC,IAAA,CAAK4vC,GAAL,CAA7B,EAAwC;MACtC3yB,MAAA,CAAOyyB,EAAP,IAAa1vC,IAAA,CAAK4vC,GAAL,IAAY,CAAZ,GAAgB,CAA7B;MACA,EAAEE,KAAF;IAFsC;IAMxC,IAAIC,GAAA,GAAO,CAAA/vC,IAAA,CAAK4vC,GAAL,IAAY,CAAZ,GAAgB,CAAhB,KAAsB5vC,IAAA,CAAK4vC,GAAA,GAAMD,QAAX,IAAuB,CAAvB,GAA2B,CAA3B,CAAjC;IACA,KAAKjL,CAAA,GAAI,CAAT,EAAYA,CAAA,GAAIhlC,KAAhB,EAAuBglC,CAAA,EAAvB,EAA4B;MAC1BqL,GAAA,GACG,CAAAA,GAAA,IAAO,CAAP,KACA/vC,IAAA,CAAK4vC,GAAA,GAAM,CAAX,IAAgB,CAAhB,GAAoB,CAApB,CADD,IAEC5vC,IAAA,CAAK4vC,GAAA,GAAMD,QAAN,GAAiB,CAAtB,IAA2B,CAA3B,GAA+B,CAA/B,CAHH;MAIA,IAAIH,WAAA,CAAYO,GAAZ,CAAJ,EAAsB;QACpB9yB,MAAA,CAAOyyB,EAAA,GAAKhL,CAAZ,IAAiB8K,WAAA,CAAYO,GAAZ,CAAjB;QACA,EAAED,KAAF;MAFoB;MAItBF,GAAA;IAT0B;IAW5B,IAAI5vC,IAAA,CAAK4vC,GAAA,GAAMD,QAAX,MAAyB3vC,IAAA,CAAK4vC,GAAL,CAA7B,EAAwC;MACtC3yB,MAAA,CAAOyyB,EAAA,GAAKhL,CAAZ,IAAiB1kC,IAAA,CAAK4vC,GAAL,IAAY,CAAZ,GAAgB,CAAjC;MACA,EAAEE,KAAF;IAFsC;IAKxC,IAAIA,KAAA,GAAQP,sBAAZ,EAAoC;MAClC,OAAO,IAAP;IADkC;EA1BT;EA+B7BK,GAAA,GAAMD,QAAA,IAAYhwC,MAAA,GAAS,CAAT,CAAlB;EACA+vC,EAAA,GAAK/2B,CAAA,GAAI82B,MAAT;EACA,IAAIzvC,IAAA,CAAK4vC,GAAL,MAAc,CAAlB,EAAqB;IACnB3yB,MAAA,CAAOyyB,EAAP,IAAa,CAAb;IACA,EAAEI,KAAF;EAFmB;EAIrB,KAAKpL,CAAA,GAAI,CAAT,EAAYA,CAAA,GAAIhlC,KAAhB,EAAuBglC,CAAA,EAAvB,EAA4B;IAC1B,IAAI1kC,IAAA,CAAK4vC,GAAL,MAAc5vC,IAAA,CAAK4vC,GAAA,GAAM,CAAX,CAAlB,EAAiC;MAC/B3yB,MAAA,CAAOyyB,EAAA,GAAKhL,CAAZ,IAAiB1kC,IAAA,CAAK4vC,GAAL,IAAY,CAAZ,GAAgB,CAAjC;MACA,EAAEE,KAAF;IAF+B;IAIjCF,GAAA;EAL0B;EAO5B,IAAI5vC,IAAA,CAAK4vC,GAAL,MAAc,CAAlB,EAAqB;IACnB3yB,MAAA,CAAOyyB,EAAA,GAAKhL,CAAZ,IAAiB,CAAjB;IACA,EAAEoL,KAAF;EAFmB;EAIrB,IAAIA,KAAA,GAAQP,sBAAZ,EAAoC;IAClC,OAAO,IAAP;EADkC;EAKpC,MAAMS,KAAA,GAAQ,IAAIC,UAAJ,CAAe,CAAC,CAAD,EAAIR,MAAJ,EAAY,CAAC,CAAb,EAAgB,CAAhB,EAAmB,CAACA,MAApB,EAA4B,CAA5B,EAA+B,CAA/B,EAAkC,CAAlC,EAAqC,CAArC,CAAf,CAAd;EACA,MAAMS,IAAA,GAAO,IAAI1Q,MAAJ,EAAb;EAEA,KAAK7mB,CAAA,GAAI,CAAT,EAAYm3B,KAAA,IAASn3B,CAAA,IAAKhZ,MAA1B,EAAkCgZ,CAAA,EAAlC,EAAuC;IACrC,IAAIqD,CAAA,GAAIrD,CAAA,GAAI82B,MAAZ;IACA,MAAMhkB,GAAA,GAAMzP,CAAA,GAAItc,KAAhB;IACA,OAAOsc,CAAA,GAAIyP,GAAJ,IAAW,CAACxO,MAAA,CAAOjB,CAAP,CAAnB,EAA8B;MAC5BA,CAAA;IAD4B;IAG9B,IAAIA,CAAA,KAAMyP,GAAV,EAAe;MACb;IADa;IAGfykB,IAAA,CAAKhE,MAAL,CAAYlwB,CAAA,GAAIyzB,MAAhB,EAAwB92B,CAAxB;IAEA,MAAMw3B,EAAA,GAAKn0B,CAAX;IACA,IAAIzL,IAAA,GAAO0M,MAAA,CAAOjB,CAAP,CAAX;IACA,GAAG;MACD,MAAMksB,IAAA,GAAO8H,KAAA,CAAMz/B,IAAN,CAAb;MACA,GAAG;QACDyL,CAAA,IAAKksB,IAAL;MADC,CAAH,QAES,CAACjrB,MAAA,CAAOjB,CAAP,CAFV;MAIA,MAAMo0B,EAAA,GAAKnzB,MAAA,CAAOjB,CAAP,CAAX;MACA,IAAIo0B,EAAA,KAAO,CAAP,IAAYA,EAAA,KAAO,EAAvB,EAA2B;QAEzB7/B,IAAA,GAAO6/B,EAAP;QAEAnzB,MAAA,CAAOjB,CAAP,IAAY,CAAZ;MAJyB,CAA3B,MAKO;QAGLzL,IAAA,GAAO6/B,EAAA,GAAO,OAAO7/B,IAAR,IAAiB,CAA9B;QAEA0M,MAAA,CAAOjB,CAAP,KAAczL,IAAA,IAAQ,CAAT,GAAeA,IAAA,IAAQ,CAApC;MALK;MAOP2/B,IAAA,CAAK9D,MAAL,CAAYpwB,CAAA,GAAIyzB,MAAhB,EAAyBzzB,CAAA,GAAIyzB,MAAL,GAAe,CAAvC;MAEA,IAAI,CAACxyB,MAAA,CAAOjB,CAAP,CAAL,EAAgB;QACd,EAAE8zB,KAAF;MADc;IArBf,CAAH,QAwBSK,EAAA,KAAOn0B,CAxBhB;IAyBA,EAAErD,CAAF;EAtCqC;EA0CvC3Y,IAAA,GAAO,IAAP;EACAid,MAAA,GAAS,IAAT;EAEA,MAAMozB,WAAA,GAAc,SAAAA,CAAU5zC,CAAV,EAAa;IAC/BA,CAAA,CAAEurC,IAAF;IAEAvrC,CAAA,CAAEyyB,KAAF,CAAQ,IAAIxvB,KAAZ,EAAmB,CAAC,CAAD,GAAKC,MAAxB;IACAlD,CAAA,CAAEglC,SAAF,CAAY,CAAZ,EAAe,CAAC9hC,MAAhB;IACAlD,CAAA,CAAEmlC,IAAF,CAAOsO,IAAP;IACAzzC,CAAA,CAAE+kC,SAAF;IACA/kC,CAAA,CAAE+uC,OAAF;EAP+B,CAAjC;EAUA,OAAO6E,WAAP;AArKkC;AAwKpC,MAAMC,gBAAN,CAAuB;EACrBrtC,YAAYvD,KAAZ,EAAmBC,MAAnB,EAA2B;IAEzB,KAAK4wC,YAAL,GAAoB,KAApB;IACA,KAAKt9B,QAAL,GAAgB,CAAhB;IACA,KAAKu9B,aAAL,GAAqB,CAArB;IACA,KAAKC,UAAL,GAAkBlG,oBAAlB;IACA,KAAKmG,eAAL,GAAuB,CAAvB;IACA,KAAKC,UAAL,GAAkBrG,yBAAlB;IACA,KAAKsG,OAAL,GAAe,CAAf;IAEA,KAAKt0C,CAAL,GAAS,CAAT;IACA,KAAKI,CAAL,GAAS,CAAT;IAEA,KAAKm0C,KAAL,GAAa,CAAb;IACA,KAAKC,KAAL,GAAa,CAAb;IAEA,KAAKC,WAAL,GAAmB,CAAnB;IACA,KAAKC,WAAL,GAAmB,CAAnB;IACA,KAAKC,UAAL,GAAkB,CAAlB;IACA,KAAKC,iBAAL,GAAyBzG,sBAAA,CAAkBxL,IAA3C;IACA,KAAKkS,QAAL,GAAgB,CAAhB;IAEA,KAAKpoC,SAAL,GAAiB,SAAjB;IACA,KAAKG,WAAL,GAAmB,SAAnB;IACA,KAAKkoC,WAAL,GAAmB,KAAnB;IAEA,KAAK5zB,SAAL,GAAiB,CAAjB;IACA,KAAK6zB,WAAL,GAAmB,CAAnB;IACA,KAAKC,SAAL,GAAiB,CAAjB;IACA,KAAKC,WAAL,GAAmB,IAAnB;IACA,KAAKC,YAAL,GAAoB,MAApB;IAEA,KAAKC,sBAAL,CAA4B,CAAC,CAAD,EAAI,CAAJ,EAAO/xC,KAAP,EAAcC,MAAd,CAA5B;EAhCyB;EAmC3BqhB,MAAA,EAAQ;IACN,MAAMA,KAAA,GAAQxX,MAAA,CAAO3J,MAAP,CAAc,IAAd,CAAd;IACAmhB,KAAA,CAAM0wB,OAAN,GAAgB,KAAKA,OAAL,CAAaxzC,KAAb,EAAhB;IACA,OAAO8iB,KAAP;EAHM;EAMR2wB,gBAAgBr1C,CAAhB,EAAmBI,CAAnB,EAAsB;IACpB,KAAKJ,CAAL,GAASA,CAAT;IACA,KAAKI,CAAL,GAASA,CAAT;EAFoB;EAKtBk1C,iBAAiB5hB,SAAjB,EAA4B1zB,CAA5B,EAA+BI,CAA/B,EAAkC;IAChC,CAACJ,CAAD,EAAII,CAAJ,IAASkC,SAAA,CAAKizC,cAAL,CAAoB,CAACv1C,CAAD,EAAII,CAAJ,CAApB,EAA4BszB,SAA5B,CAAT;IACA,KAAK8hB,IAAL,GAAY/1C,IAAA,CAAKG,GAAL,CAAS,KAAK41C,IAAd,EAAoBx1C,CAApB,CAAZ;IACA,KAAKwnC,IAAL,GAAY/nC,IAAA,CAAKG,GAAL,CAAS,KAAK4nC,IAAd,EAAoBpnC,CAApB,CAAZ;IACA,KAAKq1C,IAAL,GAAYh2C,IAAA,CAAKE,GAAL,CAAS,KAAK81C,IAAd,EAAoBz1C,CAApB,CAAZ;IACA,KAAKynC,IAAL,GAAYhoC,IAAA,CAAKE,GAAL,CAAS,KAAK8nC,IAAd,EAAoBrnC,CAApB,CAAZ;EALgC;EAQlC6rC,iBAAiBvY,SAAjB,EAA4BvwB,IAA5B,EAAkC;IAChC,MAAMyiC,EAAA,GAAKtjC,SAAA,CAAKizC,cAAL,CAAoBpyC,IAApB,EAA0BuwB,SAA1B,CAAX;IACA,MAAMmS,EAAA,GAAKvjC,SAAA,CAAKizC,cAAL,CAAoBpyC,IAAA,CAAKvB,KAAL,CAAW,CAAX,CAApB,EAAmC8xB,SAAnC,CAAX;IACA,MAAMoS,EAAA,GAAKxjC,SAAA,CAAKizC,cAAL,CAAoB,CAACpyC,IAAA,CAAK,CAAL,CAAD,EAAUA,IAAA,CAAK,CAAL,CAAV,CAApB,EAAwCuwB,SAAxC,CAAX;IACA,MAAMgiB,EAAA,GAAKpzC,SAAA,CAAKizC,cAAL,CAAoB,CAACpyC,IAAA,CAAK,CAAL,CAAD,EAAUA,IAAA,CAAK,CAAL,CAAV,CAApB,EAAwCuwB,SAAxC,CAAX;IAEA,KAAK8hB,IAAL,GAAY/1C,IAAA,CAAKG,GAAL,CAAS,KAAK41C,IAAd,EAAoB5P,EAAA,CAAG,CAAH,CAApB,EAA2BC,EAAA,CAAG,CAAH,CAA3B,EAAkCC,EAAA,CAAG,CAAH,CAAlC,EAAyC4P,EAAA,CAAG,CAAH,CAAzC,CAAZ;IACA,KAAKlO,IAAL,GAAY/nC,IAAA,CAAKG,GAAL,CAAS,KAAK4nC,IAAd,EAAoB5B,EAAA,CAAG,CAAH,CAApB,EAA2BC,EAAA,CAAG,CAAH,CAA3B,EAAkCC,EAAA,CAAG,CAAH,CAAlC,EAAyC4P,EAAA,CAAG,CAAH,CAAzC,CAAZ;IACA,KAAKD,IAAL,GAAYh2C,IAAA,CAAKE,GAAL,CAAS,KAAK81C,IAAd,EAAoB7P,EAAA,CAAG,CAAH,CAApB,EAA2BC,EAAA,CAAG,CAAH,CAA3B,EAAkCC,EAAA,CAAG,CAAH,CAAlC,EAAyC4P,EAAA,CAAG,CAAH,CAAzC,CAAZ;IACA,KAAKjO,IAAL,GAAYhoC,IAAA,CAAKE,GAAL,CAAS,KAAK8nC,IAAd,EAAoB7B,EAAA,CAAG,CAAH,CAApB,EAA2BC,EAAA,CAAG,CAAH,CAA3B,EAAkCC,EAAA,CAAG,CAAH,CAAlC,EAAyC4P,EAAA,CAAG,CAAH,CAAzC,CAAZ;EATgC;EAYlCC,wBAAwBjiB,SAAxB,EAAmCkiB,MAAnC,EAA2C;IACzCtzC,SAAA,CAAKuzC,WAAL,CAAiBniB,SAAjB,EAA4BkiB,MAA5B;IACA,KAAKJ,IAAL,GAAY/1C,IAAA,CAAKG,GAAL,CAAS,KAAK41C,IAAd,EAAoBI,MAAA,CAAO,CAAP,CAApB,CAAZ;IACA,KAAKH,IAAL,GAAYh2C,IAAA,CAAKE,GAAL,CAAS,KAAK81C,IAAd,EAAoBG,MAAA,CAAO,CAAP,CAApB,CAAZ;IACA,KAAKpO,IAAL,GAAY/nC,IAAA,CAAKG,GAAL,CAAS,KAAK4nC,IAAd,EAAoBoO,MAAA,CAAO,CAAP,CAApB,CAAZ;IACA,KAAKnO,IAAL,GAAYhoC,IAAA,CAAKE,GAAL,CAAS,KAAK8nC,IAAd,EAAoBmO,MAAA,CAAO,CAAP,CAApB,CAAZ;EALyC;EAQ3CE,sBAAsBpiB,SAAtB,EAAiCkX,EAAjC,EAAqCC,EAArC,EAAyCtE,EAAzC,EAA6CE,EAA7C,EAAiDE,EAAjD,EAAqDC,EAArD,EAAyDC,EAAzD,EAA6DC,EAA7D,EAAiE8O,MAAjE,EAAyE;IACvE,MAAMG,GAAA,GAAMzzC,SAAA,CAAK0zC,iBAAL,CAAuBpL,EAAvB,EAA2BC,EAA3B,EAA+BtE,EAA/B,EAAmCE,EAAnC,EAAuCE,EAAvC,EAA2CC,EAA3C,EAA+CC,EAA/C,EAAmDC,EAAnD,CAAZ;IACA,IAAI8O,MAAJ,EAAY;MACVA,MAAA,CAAO,CAAP,IAAYn2C,IAAA,CAAKG,GAAL,CAASg2C,MAAA,CAAO,CAAP,CAAT,EAAoBG,GAAA,CAAI,CAAJ,CAApB,EAA4BA,GAAA,CAAI,CAAJ,CAA5B,CAAZ;MACAH,MAAA,CAAO,CAAP,IAAYn2C,IAAA,CAAKE,GAAL,CAASi2C,MAAA,CAAO,CAAP,CAAT,EAAoBG,GAAA,CAAI,CAAJ,CAApB,EAA4BA,GAAA,CAAI,CAAJ,CAA5B,CAAZ;MACAH,MAAA,CAAO,CAAP,IAAYn2C,IAAA,CAAKG,GAAL,CAASg2C,MAAA,CAAO,CAAP,CAAT,EAAoBG,GAAA,CAAI,CAAJ,CAApB,EAA4BA,GAAA,CAAI,CAAJ,CAA5B,CAAZ;MACAH,MAAA,CAAO,CAAP,IAAYn2C,IAAA,CAAKE,GAAL,CAASi2C,MAAA,CAAO,CAAP,CAAT,EAAoBG,GAAA,CAAI,CAAJ,CAApB,EAA4BA,GAAA,CAAI,CAAJ,CAA5B,CAAZ;MACA;IALU;IAOZ,KAAK9J,gBAAL,CAAsBvY,SAAtB,EAAiCqiB,GAAjC;EATuE;EAYzEE,mBAAmB1R,QAAA,GAAW7B,QAAA,CAASC,IAAvC,EAA6CjP,SAAA,GAAY,IAAzD,EAA+D;IAC7D,MAAMqiB,GAAA,GAAM,CAAC,KAAKP,IAAN,EAAY,KAAKhO,IAAjB,EAAuB,KAAKiO,IAA5B,EAAkC,KAAKhO,IAAvC,CAAZ;IACA,IAAIlD,QAAA,KAAa7B,QAAA,CAASE,MAA1B,EAAkC;MAChC,IAAI,CAAClP,SAAL,EAAgB;QACdrxB,oBAAA,CAAY,6CAAZ;MADc;MAKhB,MAAMuwB,KAAA,GAAQtwB,SAAA,CAAKunC,6BAAL,CAAmCnW,SAAnC,CAAd;MACA,MAAMwiB,UAAA,GAActjB,KAAA,CAAM,CAAN,IAAW,KAAKoiB,SAAjB,GAA8B,CAAjD;MACA,MAAMmB,UAAA,GAAcvjB,KAAA,CAAM,CAAN,IAAW,KAAKoiB,SAAjB,GAA8B,CAAjD;MACAe,GAAA,CAAI,CAAJ,KAAUG,UAAV;MACAH,GAAA,CAAI,CAAJ,KAAUI,UAAV;MACAJ,GAAA,CAAI,CAAJ,KAAUG,UAAV;MACAH,GAAA,CAAI,CAAJ,KAAUI,UAAV;IAZgC;IAclC,OAAOJ,GAAP;EAhB6D;EAmB/DK,mBAAA,EAAqB;IACnB,MAAMh3B,SAAA,GAAY9c,SAAA,CAAK8c,SAAL,CAAe,KAAKg2B,OAApB,EAA6B,KAAKa,kBAAL,EAA7B,CAAlB;IACA,KAAKd,sBAAL,CAA4B/1B,SAAA,IAAa,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,CAAzC;EAFmB;EAKrBi3B,YAAA,EAAc;IACZ,OAAO,KAAKb,IAAL,KAAcc,QAArB;EADY;EAIdnB,uBAAuBY,GAAvB,EAA4B;IAC1B,KAAKX,OAAL,GAAeW,GAAf;IACA,KAAKP,IAAL,GAAYc,QAAZ;IACA,KAAK9O,IAAL,GAAY8O,QAAZ;IACA,KAAKb,IAAL,GAAY,CAAZ;IACA,KAAKhO,IAAL,GAAY,CAAZ;EAL0B;EAQ5B9C,0BAA0BJ,QAAA,GAAW7B,QAAA,CAASC,IAA9C,EAAoDjP,SAAA,GAAY,IAAhE,EAAsE;IACpE,OAAOpxB,SAAA,CAAK8c,SAAL,CACL,KAAKg2B,OADA,EAEL,KAAKa,kBAAL,CAAwB1R,QAAxB,EAAkC7Q,SAAlC,CAFK,CAAP;EADoE;AA3HjD;AAmIvB,SAAS6iB,kBAATA,CAA4BxT,GAA5B,EAAiCiQ,OAAjC,EAA0C;EACxC,IAAI,OAAOwD,SAAP,KAAqB,WAArB,IAAoCxD,OAAA,YAAmBwD,SAA3D,EAAsE;IACpEzT,GAAA,CAAI6G,YAAJ,CAAiBoJ,OAAjB,EAA0B,CAA1B,EAA6B,CAA7B;IACA;EAFoE;EAgBtE,MAAM3vC,MAAA,GAAS2vC,OAAA,CAAQ3vC,MAAvB;IACED,KAAA,GAAQ4vC,OAAA,CAAQ5vC,KADlB;EAEA,MAAMqzC,kBAAA,GAAqBpzC,MAAA,GAASurC,iBAApC;EACA,MAAM8H,UAAA,GAAc,CAAArzC,MAAA,GAASozC,kBAAT,IAA+B7H,iBAAnD;EACA,MAAM+H,WAAA,GAAcF,kBAAA,KAAuB,CAAvB,GAA2BC,UAA3B,GAAwCA,UAAA,GAAa,CAAzE;EAEA,MAAME,YAAA,GAAe7T,GAAA,CAAI4G,eAAJ,CAAoBvmC,KAApB,EAA2BwrC,iBAA3B,CAArB;EACA,IAAIhC,MAAA,GAAS,CAAb;IACEW,OADF;EAEA,MAAM/4B,GAAA,GAAMw+B,OAAA,CAAQtvC,IAApB;EACA,MAAMsO,IAAA,GAAO4kC,YAAA,CAAalzC,IAA1B;EACA,IAAI2Y,CAAJ,EAAO+rB,CAAP,EAAUyO,eAAV,EAA2BC,gBAA3B;EAIA,IAAI9D,OAAA,CAAQzG,IAAR,KAAiBF,cAAA,CAAUG,cAA/B,EAA+C;IAE7C,MAAMa,SAAA,GAAY74B,GAAA,CAAIgZ,UAAtB;IACA,MAAMupB,MAAA,GAAS,IAAIzJ,WAAJ,CAAgBt7B,IAAA,CAAKmb,MAArB,EAA6B,CAA7B,EAAgCnb,IAAA,CAAKwb,UAAL,IAAmB,CAAnD,CAAf;IACA,MAAMwpB,gBAAA,GAAmBD,MAAA,CAAO9oC,MAAhC;IACA,MAAMgpC,WAAA,GAAe7zC,KAAA,GAAQ,CAAT,IAAe,CAAnC;IACA,MAAM8zC,KAAA,GAAQ,UAAd;IACA,MAAMnK,KAAA,GAAQ7qC,gBAAA,CAAY8qC,cAAZ,GAA6B,UAA7B,GAA0C,UAAxD;IAEA,KAAK3wB,CAAA,GAAI,CAAT,EAAYA,CAAA,GAAIs6B,WAAhB,EAA6Bt6B,CAAA,EAA7B,EAAkC;MAChCw6B,eAAA,GAAkBx6B,CAAA,GAAIq6B,UAAJ,GAAiB9H,iBAAjB,GAAqC6H,kBAAvD;MACAlJ,OAAA,GAAU,CAAV;MACA,KAAKnF,CAAA,GAAI,CAAT,EAAYA,CAAA,GAAIyO,eAAhB,EAAiCzO,CAAA,EAAjC,EAAsC;QACpC,MAAM+O,OAAA,GAAU9J,SAAA,GAAYT,MAA5B;QACA,IAAItsC,CAAA,GAAI,CAAR;QACA,MAAM82C,IAAA,GAAOD,OAAA,GAAUF,WAAV,GAAwB7zC,KAAxB,GAAgC+zC,OAAA,GAAU,CAAV,GAAc,CAA3D;QACA,MAAME,YAAA,GAAeD,IAAA,GAAO,CAAC,CAA7B;QACA,IAAI7D,IAAA,GAAO,CAAX;QACA,IAAI+D,OAAA,GAAU,CAAd;QACA,OAAOh3C,CAAA,GAAI+2C,YAAX,EAAyB/2C,CAAA,IAAK,CAA9B,EAAiC;UAC/Bg3C,OAAA,GAAU9iC,GAAA,CAAIo4B,MAAA,EAAJ,CAAV;UACAmK,MAAA,CAAOxJ,OAAA,EAAP,IAAoB+J,OAAA,GAAU,GAAV,GAAgBJ,KAAhB,GAAwBnK,KAA5C;UACAgK,MAAA,CAAOxJ,OAAA,EAAP,IAAoB+J,OAAA,GAAU,EAAV,GAAeJ,KAAf,GAAuBnK,KAA3C;UACAgK,MAAA,CAAOxJ,OAAA,EAAP,IAAoB+J,OAAA,GAAU,EAAV,GAAeJ,KAAf,GAAuBnK,KAA3C;UACAgK,MAAA,CAAOxJ,OAAA,EAAP,IAAoB+J,OAAA,GAAU,EAAV,GAAeJ,KAAf,GAAuBnK,KAA3C;UACAgK,MAAA,CAAOxJ,OAAA,EAAP,IAAoB+J,OAAA,GAAU,CAAV,GAAcJ,KAAd,GAAsBnK,KAA1C;UACAgK,MAAA,CAAOxJ,OAAA,EAAP,IAAoB+J,OAAA,GAAU,CAAV,GAAcJ,KAAd,GAAsBnK,KAA1C;UACAgK,MAAA,CAAOxJ,OAAA,EAAP,IAAoB+J,OAAA,GAAU,CAAV,GAAcJ,KAAd,GAAsBnK,KAA1C;UACAgK,MAAA,CAAOxJ,OAAA,EAAP,IAAoB+J,OAAA,GAAU,CAAV,GAAcJ,KAAd,GAAsBnK,KAA1C;QAT+B;QAWjC,OAAOzsC,CAAA,GAAI82C,IAAX,EAAiB92C,CAAA,EAAjB,EAAsB;UACpB,IAAIizC,IAAA,KAAS,CAAb,EAAgB;YACd+D,OAAA,GAAU9iC,GAAA,CAAIo4B,MAAA,EAAJ,CAAV;YACA2G,IAAA,GAAO,GAAP;UAFc;UAKhBwD,MAAA,CAAOxJ,OAAA,EAAP,IAAoB+J,OAAA,GAAU/D,IAAV,GAAiB2D,KAAjB,GAAyBnK,KAA7C;UACAwG,IAAA,KAAS,CAAT;QAPoB;MAlBc;MA6BtC,OAAOhG,OAAA,GAAUyJ,gBAAjB,EAAmC;QACjCD,MAAA,CAAOxJ,OAAA,EAAP,IAAoB,CAApB;MADiC;MAInCxK,GAAA,CAAI6G,YAAJ,CAAiBgN,YAAjB,EAA+B,CAA/B,EAAkCv6B,CAAA,GAAIuyB,iBAAtC;IApCgC;EATW,CAA/C,MA+CO,IAAIoE,OAAA,CAAQzG,IAAR,KAAiBF,cAAA,CAAUkL,UAA/B,EAA2C;IAEhDnP,CAAA,GAAI,CAAJ;IACA0O,gBAAA,GAAmB1zC,KAAA,GAAQwrC,iBAAR,GAA4B,CAA/C;IACA,KAAKvyB,CAAA,GAAI,CAAT,EAAYA,CAAA,GAAIq6B,UAAhB,EAA4Br6B,CAAA,EAA5B,EAAiC;MAC/BrK,IAAA,CAAKoQ,GAAL,CAAS5N,GAAA,CAAIgjC,QAAJ,CAAa5K,MAAb,EAAqBA,MAAA,GAASkK,gBAA9B,CAAT;MACAlK,MAAA,IAAUkK,gBAAV;MAEA/T,GAAA,CAAI6G,YAAJ,CAAiBgN,YAAjB,EAA+B,CAA/B,EAAkCxO,CAAlC;MACAA,CAAA,IAAKwG,iBAAL;IAL+B;IAOjC,IAAIvyB,CAAA,GAAIs6B,WAAR,EAAqB;MACnBG,gBAAA,GAAmB1zC,KAAA,GAAQqzC,kBAAR,GAA6B,CAAhD;MACAzkC,IAAA,CAAKoQ,GAAL,CAAS5N,GAAA,CAAIgjC,QAAJ,CAAa5K,MAAb,EAAqBA,MAAA,GAASkK,gBAA9B,CAAT;MAEA/T,GAAA,CAAI6G,YAAJ,CAAiBgN,YAAjB,EAA+B,CAA/B,EAAkCxO,CAAlC;IAJmB;EAX2B,CAA3C,MAiBA,IAAI4K,OAAA,CAAQzG,IAAR,KAAiBF,cAAA,CAAUK,SAA/B,EAA0C;IAE/CmK,eAAA,GAAkBjI,iBAAlB;IACAkI,gBAAA,GAAmB1zC,KAAA,GAAQyzC,eAA3B;IACA,KAAKx6B,CAAA,GAAI,CAAT,EAAYA,CAAA,GAAIs6B,WAAhB,EAA6Bt6B,CAAA,EAA7B,EAAkC;MAChC,IAAIA,CAAA,IAAKq6B,UAAT,EAAqB;QACnBG,eAAA,GAAkBJ,kBAAlB;QACAK,gBAAA,GAAmB1zC,KAAA,GAAQyzC,eAA3B;MAFmB;MAKrBtJ,OAAA,GAAU,CAAV;MACA,KAAKnF,CAAA,GAAI0O,gBAAT,EAA2B1O,CAAA,EAA3B,GAAkC;QAChCp2B,IAAA,CAAKu7B,OAAA,EAAL,IAAkB/4B,GAAA,CAAIo4B,MAAA,EAAJ,CAAlB;QACA56B,IAAA,CAAKu7B,OAAA,EAAL,IAAkB/4B,GAAA,CAAIo4B,MAAA,EAAJ,CAAlB;QACA56B,IAAA,CAAKu7B,OAAA,EAAL,IAAkB/4B,GAAA,CAAIo4B,MAAA,EAAJ,CAAlB;QACA56B,IAAA,CAAKu7B,OAAA,EAAL,IAAkB,GAAlB;MAJgC;MAOlCxK,GAAA,CAAI6G,YAAJ,CAAiBgN,YAAjB,EAA+B,CAA/B,EAAkCv6B,CAAA,GAAIuyB,iBAAtC;IAdgC;EAJa,CAA1C,MAoBA;IACL,MAAM,IAAI7mB,KAAJ,CAAW,mBAAkBirB,OAAA,CAAQzG,IAA3B,EAAV,CAAN;EADK;AApHiC;AAyH1C,SAASkL,kBAATA,CAA4B1U,GAA5B,EAAiCiQ,OAAjC,EAA0C;EACxC,IAAIA,OAAA,CAAQxuB,MAAZ,EAAoB;IAElBue,GAAA,CAAI8P,SAAJ,CAAcG,OAAA,CAAQxuB,MAAtB,EAA8B,CAA9B,EAAiC,CAAjC;IACA;EAHkB;EAOpB,MAAMnhB,MAAA,GAAS2vC,OAAA,CAAQ3vC,MAAvB;IACED,KAAA,GAAQ4vC,OAAA,CAAQ5vC,KADlB;EAEA,MAAMqzC,kBAAA,GAAqBpzC,MAAA,GAASurC,iBAApC;EACA,MAAM8H,UAAA,GAAc,CAAArzC,MAAA,GAASozC,kBAAT,IAA+B7H,iBAAnD;EACA,MAAM+H,WAAA,GAAcF,kBAAA,KAAuB,CAAvB,GAA2BC,UAA3B,GAAwCA,UAAA,GAAa,CAAzE;EAEA,MAAME,YAAA,GAAe7T,GAAA,CAAI4G,eAAJ,CAAoBvmC,KAApB,EAA2BwrC,iBAA3B,CAArB;EACA,IAAIhC,MAAA,GAAS,CAAb;EACA,MAAMp4B,GAAA,GAAMw+B,OAAA,CAAQtvC,IAApB;EACA,MAAMsO,IAAA,GAAO4kC,YAAA,CAAalzC,IAA1B;EAEA,KAAK,IAAI2Y,CAAA,GAAI,CAAR,EAAWA,CAAA,GAAIs6B,WAApB,EAAiCt6B,CAAA,EAAjC,EAAsC;IACpC,MAAMw6B,eAAA,GACJx6B,CAAA,GAAIq6B,UAAJ,GAAiB9H,iBAAjB,GAAqC6H,kBADvC;IAMA,CAAC;MAAE7J;IAAF,IAAaH,0BAAA,CAA2B;MACvCj4B,GADuC;MAEvCo4B,MAFuC;MAGvC56B,IAHuC;MAIvC5O,KAJuC;MAKvCC,MAAA,EAAQwzC,eAL+B;MAMvChK,aAAA,EAAe;IANwB,CAA3B,CAAd;IASA9J,GAAA,CAAI6G,YAAJ,CAAiBgN,YAAjB,EAA+B,CAA/B,EAAkCv6B,CAAA,GAAIuyB,iBAAtC;EAhBoC;AAnBE;AAuC1C,SAAS8I,YAATA,CAAsBC,SAAtB,EAAiC7I,OAAjC,EAA0C;EACxC,MAAM8I,UAAA,GAAa,CACjB,aADiB,EAEjB,WAFiB,EAGjB,UAHiB,EAIjB,aAJiB,EAKjB,WALiB,EAMjB,SANiB,EAOjB,UAPiB,EAQjB,YARiB,EASjB,0BATiB,EAUjB,MAViB,EAWjB,QAXiB,CAAnB;EAaA,WAAWC,QAAX,IAAuBD,UAAvB,EAAmC;IACjC,IAAID,SAAA,CAAUE,QAAV,MAAwB7+B,SAA5B,EAAuC;MACrC81B,OAAA,CAAQ+I,QAAR,IAAoBF,SAAA,CAAUE,QAAV,CAApB;IADqC;EADN;EAKnC,IAAIF,SAAA,CAAUG,WAAV,KAA0B9+B,SAA9B,EAAyC;IACvC81B,OAAA,CAAQgJ,WAAR,CAAoBH,SAAA,CAAUI,WAAV,EAApB;IACAjJ,OAAA,CAAQkJ,cAAR,GAAyBL,SAAA,CAAUK,cAAnC;EAFuC;AAnBD;AAyB1C,SAASC,iBAATA,CAA2BlV,GAA3B,EAAgC;EAC9BA,GAAA,CAAIoJ,WAAJ,GAAkBpJ,GAAA,CAAIsC,SAAJ,GAAgB,SAAlC;EACAtC,GAAA,CAAImV,QAAJ,GAAe,SAAf;EACAnV,GAAA,CAAIoV,WAAJ,GAAkB,CAAlB;EACApV,GAAA,CAAIiS,SAAJ,GAAgB,CAAhB;EACAjS,GAAA,CAAIqV,OAAJ,GAAc,MAAd;EACArV,GAAA,CAAIsV,QAAJ,GAAe,OAAf;EACAtV,GAAA,CAAIuV,UAAJ,GAAiB,EAAjB;EACAvV,GAAA,CAAIwV,wBAAJ,GAA+B,aAA/B;EACAxV,GAAA,CAAI3E,IAAJ,GAAW,iBAAX;EACA,IAAI2E,GAAA,CAAI+U,WAAJ,KAAoB9+B,SAAxB,EAAmC;IACjC+pB,GAAA,CAAI+U,WAAJ,CAAgB,EAAhB;IACA/U,GAAA,CAAIiV,cAAJ,GAAqB,CAArB;EAFiC;EAInC,IAEE,CAAC7yB,aAFH,EAGE;IACA,MAAM;MAAEpJ;IAAF,IAAagnB,GAAnB;IACA,IAAIhnB,MAAA,KAAW,MAAX,IAAqBA,MAAA,KAAW,EAApC,EAAwC;MACtCgnB,GAAA,CAAIhnB,MAAJ,GAAa,MAAb;IADsC;EAFxC;AAjB4B;AAyBhC,SAASy8B,oBAATA,CAA8BpS,KAA9B,EAAqCqS,EAArC,EAAyCC,EAAzC,EAA6CC,EAA7C,EAAiD;EAC/C,MAAM1qC,MAAA,GAASm4B,KAAA,CAAMn4B,MAArB;EACA,KAAK,IAAIoO,CAAA,GAAI,CAAR,EAAWA,CAAA,GAAIpO,MAApB,EAA4BoO,CAAA,IAAK,CAAjC,EAAoC;IAClC,MAAMu8B,KAAA,GAAQxS,KAAA,CAAM/pB,CAAN,CAAd;IACA,IAAIu8B,KAAA,KAAU,CAAd,EAAiB;MACfxS,KAAA,CAAM/pB,CAAA,GAAI,CAAV,IAAeo8B,EAAf;MACArS,KAAA,CAAM/pB,CAAA,GAAI,CAAV,IAAeq8B,EAAf;MACAtS,KAAA,CAAM/pB,CAAA,GAAI,CAAV,IAAes8B,EAAf;IAHe,CAAjB,MAIO,IAAIC,KAAA,GAAQ,GAAZ,EAAiB;MACtB,MAAMC,MAAA,GAAS,MAAMD,KAArB;MACAxS,KAAA,CAAM/pB,CAAA,GAAI,CAAV,IAAgB+pB,KAAA,CAAM/pB,CAAA,GAAI,CAAV,IAAeu8B,KAAf,GAAuBH,EAAA,GAAKI,MAA7B,IAAwC,CAAvD;MACAzS,KAAA,CAAM/pB,CAAA,GAAI,CAAV,IAAgB+pB,KAAA,CAAM/pB,CAAA,GAAI,CAAV,IAAeu8B,KAAf,GAAuBF,EAAA,GAAKG,MAA7B,IAAwC,CAAvD;MACAzS,KAAA,CAAM/pB,CAAA,GAAI,CAAV,IAAgB+pB,KAAA,CAAM/pB,CAAA,GAAI,CAAV,IAAeu8B,KAAf,GAAuBD,EAAA,GAAKE,MAA7B,IAAwC,CAAvD;IAJsB;EANU;AAFW;AAiBjD,SAASC,iBAATA,CAA2BC,QAA3B,EAAqCC,SAArC,EAAgDC,WAAhD,EAA6D;EAC3D,MAAMhrC,MAAA,GAAS8qC,QAAA,CAAS9qC,MAAxB;EACA,MAAM2kB,KAAA,GAAQ,IAAI,GAAlB;EACA,KAAK,IAAIvW,CAAA,GAAI,CAAR,EAAWA,CAAA,GAAIpO,MAApB,EAA4BoO,CAAA,IAAK,CAAjC,EAAoC;IAClC,MAAMu8B,KAAA,GAAQK,WAAA,GAAcA,WAAA,CAAYF,QAAA,CAAS18B,CAAT,CAAZ,CAAd,GAAyC08B,QAAA,CAAS18B,CAAT,CAAvD;IACA28B,SAAA,CAAU38B,CAAV,IAAgB28B,SAAA,CAAU38B,CAAV,IAAeu8B,KAAf,GAAuBhmB,KAAxB,GAAiC,CAAhD;EAFkC;AAHuB;AAS7D,SAASsmB,sBAATA,CAAgCH,QAAhC,EAA0CC,SAA1C,EAAqDC,WAArD,EAAkE;EAChE,MAAMhrC,MAAA,GAAS8qC,QAAA,CAAS9qC,MAAxB;EACA,KAAK,IAAIoO,CAAA,GAAI,CAAR,EAAWA,CAAA,GAAIpO,MAApB,EAA4BoO,CAAA,IAAK,CAAjC,EAAoC;IAClC,MAAMjc,CAAA,GACJ24C,QAAA,CAAS18B,CAAA,GAAI,CAAb,IAAkB,EAAlB,GACA08B,QAAA,CAAS18B,CAAA,GAAI,CAAb,IAAkB,GADlB,GAEA08B,QAAA,CAAS18B,CAAA,GAAI,CAAb,IAAkB,EAHpB;IAIA28B,SAAA,CAAU38B,CAAV,IAAe48B,WAAA,GACVD,SAAA,CAAU38B,CAAV,IAAe48B,WAAA,CAAY74C,CAAA,IAAK,CAAjB,CAAhB,IAAwC,CAD7B,GAEV44C,SAAA,CAAU38B,CAAV,IAAejc,CAAhB,IAAsB,EAF1B;EALkC;AAF4B;AAalE,SAAS+4C,mBAATA,CACEC,OADF,EAEEC,QAFF,EAGEj2C,KAHF,EAIEC,MAJF,EAKEI,OALF,EAME61C,QANF,EAOEL,WAPF,EAQEM,YARF,EASEC,YATF,EAUEC,WAVF,EAWEC,WAXF,EAYE;EACA,MAAMC,WAAA,GAAc,CAAC,CAACL,QAAtB;EACA,MAAMb,EAAA,GAAKkB,WAAA,GAAcL,QAAA,CAAS,CAAT,CAAd,GAA4B,CAAvC;EACA,MAAMZ,EAAA,GAAKiB,WAAA,GAAcL,QAAA,CAAS,CAAT,CAAd,GAA4B,CAAvC;EACA,MAAMX,EAAA,GAAKgB,WAAA,GAAcL,QAAA,CAAS,CAAT,CAAd,GAA4B,CAAvC;EAEA,MAAMM,SAAA,GACJn2C,OAAA,KAAY,YAAZ,GAA2By1C,sBAA3B,GAAoDJ,iBADtD;EAIA,MAAMe,iBAAA,GAAoB,OAA1B;EACA,MAAMC,SAAA,GAAYr6C,IAAA,CAAKG,GAAL,CAASyD,MAAT,EAAiB5D,IAAA,CAAKmlC,IAAL,CAAUiV,iBAAA,GAAoBz2C,KAA9B,CAAjB,CAAlB;EACA,KAAK,IAAI22C,GAAA,GAAM,CAAV,EAAaA,GAAA,GAAM12C,MAAxB,EAAgC02C,GAAA,IAAOD,SAAvC,EAAkD;IAChD,MAAME,WAAA,GAAcv6C,IAAA,CAAKG,GAAL,CAASk6C,SAAT,EAAoBz2C,MAAA,GAAS02C,GAA7B,CAApB;IACA,MAAMhB,QAAA,GAAWK,OAAA,CAAQa,YAAR,CACfV,YAAA,GAAeE,WADA,EAEfM,GAAA,IAAOP,YAAA,GAAeE,WAAf,CAFQ,EAGft2C,KAHe,EAIf42C,WAJe,CAAjB;IAMA,MAAMhB,SAAA,GAAYK,QAAA,CAASY,YAAT,CAChBV,YADgB,EAEhBQ,GAAA,GAAMP,YAFU,EAGhBp2C,KAHgB,EAIhB42C,WAJgB,CAAlB;IAOA,IAAIL,WAAJ,EAAiB;MACfnB,oBAAA,CAAqBO,QAAA,CAASr1C,IAA9B,EAAoC+0C,EAApC,EAAwCC,EAAxC,EAA4CC,EAA5C;IADe;IAGjBiB,SAAA,CAAUb,QAAA,CAASr1C,IAAnB,EAAyBs1C,SAAA,CAAUt1C,IAAnC,EAAyCu1C,WAAzC;IAEAI,QAAA,CAASzP,YAAT,CAAsBoP,SAAtB,EAAiCO,YAAjC,EAA+CQ,GAAA,GAAMP,YAArD;EApBgD;AAZlD;AAoCF,SAASU,YAATA,CAAsBnX,GAAtB,EAA2BoX,KAA3B,EAAkCd,QAAlC,EAA4Ce,QAA5C,EAAsD;EACpD,MAAMb,YAAA,GAAea,QAAA,CAAS,CAAT,CAArB;EACA,MAAMZ,YAAA,GAAeY,QAAA,CAAS,CAAT,CAArB;EACA,MAAMC,UAAA,GAAaD,QAAA,CAAS,CAAT,IAAcb,YAAjC;EACA,MAAMe,WAAA,GAAcF,QAAA,CAAS,CAAT,IAAcZ,YAAlC;EACA,IAAIa,UAAA,KAAe,CAAf,IAAoBC,WAAA,KAAgB,CAAxC,EAA2C;IACzC;EADyC;EAG3CnB,mBAAA,CACEgB,KAAA,CAAM/1B,OADR,EAEEi1B,QAFF,EAGEgB,UAHF,EAIEC,WAJF,EAKEH,KAAA,CAAM12C,OALR,EAME02C,KAAA,CAAMb,QANR,EAOEa,KAAA,CAAMlB,WAPR,EAQEM,YARF,EASEC,YATF,EAUEW,KAAA,CAAMtnB,OAVR,EAWEsnB,KAAA,CAAMrnB,OAXR;EAaAiQ,GAAA,CAAI2I,IAAJ;EACA3I,GAAA,CAAIoV,WAAJ,GAAkB,CAAlB;EACApV,GAAA,CAAIwV,wBAAJ,GAA+B,aAA/B;EACAxV,GAAA,CAAI2C,YAAJ,CAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAvB,EAA0B,CAA1B,EAA6B,CAA7B,EAAgC,CAAhC;EACA3C,GAAA,CAAI8P,SAAJ,CAAcwG,QAAA,CAAS72B,MAAvB,EAA+B,CAA/B,EAAkC,CAAlC;EACAugB,GAAA,CAAImM,OAAJ;AA1BoD;AA6BtD,SAASqL,wBAATA,CAAkC7mB,SAAlC,EAA6C8mB,WAA7C,EAA0D;EACxD,MAAM5nB,KAAA,GAAQtwB,SAAA,CAAKunC,6BAAL,CAAmCnW,SAAnC,CAAd;EAGAd,KAAA,CAAM,CAAN,IAAWnzB,IAAA,CAAKg7C,MAAL,CAAY7nB,KAAA,CAAM,CAAN,CAAZ,CAAX;EACAA,KAAA,CAAM,CAAN,IAAWnzB,IAAA,CAAKg7C,MAAL,CAAY7nB,KAAA,CAAM,CAAN,CAAZ,CAAX;EACA,MAAM8nB,WAAA,GAAcj7C,IAAA,CAAKg7C,MAAL,CACjB,CAAAxwB,UAAA,CAAW0wB,gBAAX,IAA+B,CAA/B,IAAoCtM,2BAAA,CAAcuM,gBADjC,CAApB;EAGA,IAAIJ,WAAA,KAAgBxhC,SAApB,EAA+B;IAE7B,OAAOwhC,WAAP;EAF6B,CAA/B,MAGO,IAAI5nB,KAAA,CAAM,CAAN,KAAY8nB,WAAZ,IAA2B9nB,KAAA,CAAM,CAAN,KAAY8nB,WAA3C,EAAwD;IAE7D,OAAO,IAAP;EAF6D;EAK/D,OAAO,KAAP;AAjBwD;AAoB1D,MAAMG,eAAA,GAAkB,CAAC,MAAD,EAAS,OAAT,EAAkB,QAAlB,CAAxB;AACA,MAAMC,gBAAA,GAAmB,CAAC,OAAD,EAAU,OAAV,EAAmB,OAAnB,CAAzB;AACA,MAAMC,WAAA,GAAc,EAApB;AACA,MAAMC,OAAA,GAAU,EAAhB;AAEA,MAAMp0B,cAAN,CAAqB;EACnBjgB,YACEs0C,SADF,EAEE7oB,UAFF,EAGEC,IAHF,EAIE3H,aAJF,EAKEC,aALF,EAME;IAAEgL,qBAAF;IAAyBulB,kBAAA,GAAqB;EAA9C,CANF,EAOE15B,mBAPF,EAQEqS,UARF,EASE;IACA,KAAKkP,GAAL,GAAWkY,SAAX;IACA,KAAKvW,OAAL,GAAe,IAAIsP,gBAAJ,CACb,KAAKjR,GAAL,CAASvgB,MAAT,CAAgBpf,KADH,EAEb,KAAK2/B,GAAL,CAASvgB,MAAT,CAAgBnf,MAFH,CAAf;IAIA,KAAK83C,UAAL,GAAkB,EAAlB;IACA,KAAKC,WAAL,GAAmB,IAAnB;IACA,KAAKC,aAAL,GAAqB,KAArB;IACA,KAAKC,GAAL,GAAW,IAAX;IACA,KAAKC,KAAL,GAAa,IAAb;IACA,KAAKnpB,UAAL,GAAkBA,UAAlB;IACA,KAAKC,IAAL,GAAYA,IAAZ;IACA,KAAK3H,aAAL,GAAqBA,aAArB;IACA,KAAKC,aAAL,GAAqBA,aAArB;IACA,KAAK6wB,UAAL,GAAkB,EAAlB;IACA,KAAKC,eAAL,GAAuB,IAAvB;IAGA,KAAKrW,aAAL,GAAqB,IAArB;IACA,KAAKsW,kBAAL,GAA0B,EAA1B;IACA,KAAKtQ,UAAL,GAAkB,CAAlB;IACA,KAAKuQ,UAAL,GAAkB,EAAlB;IACA,KAAKC,YAAL,GAAoB,CAApB;IACA,KAAKC,SAAL,GAAiB,IAAjB;IACA,KAAKC,YAAL,GAAoB,IAApB;IACA,KAAKC,cAAL,GAAsB,IAAtB;IACA,KAAKb,kBAAL,GAA0BA,kBAAA,IAAsB,EAAhD;IACA,KAAKvlB,qBAAL,GAA6BA,qBAA7B;IACA,KAAKmP,cAAL,GAAsB,IAAIuM,cAAJ,CAAmB,KAAK3mB,aAAxB,CAAtB;IACA,KAAKsxB,cAAL,GAAsB,IAAI9oC,GAAJ,EAAtB;IACA,KAAKsO,mBAAL,GAA2BA,mBAA3B;IACA,KAAKy6B,aAAL,GAAqB,CAArB;IACA,KAAKC,YAAL,GAAoB,CAApB;IACA,KAAKC,YAAL,GAAoB,CAApB;IACA,KAAKtoB,UAAL,GAAkBA,UAAlB;IAEA,KAAKuoB,uBAAL,GAA+B,CAAC,CAAC,CAAF,EAAK,CAAL,CAA/B;IACA,KAAKC,0BAAL,GAAkC,IAAlC;IACA,KAAKC,iBAAL,GAAyB,IAAIppC,GAAJ,EAAzB;EAvCA;EA0CFqpC,UAAU74C,IAAV,EAAgB84C,QAAA,GAAW,IAA3B,EAAiC;IAC/B,IAAI,OAAO94C,IAAP,KAAgB,QAApB,EAA8B;MAC5B,OAAOA,IAAA,CAAK+4C,UAAL,CAAgB,IAAhB,IACH,KAAKrqB,UAAL,CAAgBjf,GAAhB,CAAoBzP,IAApB,CADG,GAEH,KAAK2uB,IAAL,CAAUlf,GAAV,CAAczP,IAAd,CAFJ;IAD4B;IAK9B,OAAO84C,QAAP;EAN+B;EASjC9b,aAAa;IACXhN,SADW;IAEXrrB,QAFW;IAGXqtB,YAAA,GAAe,KAHJ;IAIX/B,UAAA,GAAa;EAJF,CAAb,EAKG;IAMD,MAAMvwB,KAAA,GAAQ,KAAK2/B,GAAL,CAASvgB,MAAT,CAAgBpf,KAA9B;IACA,MAAMC,MAAA,GAAS,KAAK0/B,GAAL,CAASvgB,MAAT,CAAgBnf,MAA/B;IAEA,MAAMq5C,cAAA,GAAiB,KAAK3Z,GAAL,CAASsC,SAAhC;IACA,KAAKtC,GAAL,CAASsC,SAAT,GAAqB1R,UAAA,IAAc,SAAnC;IACA,KAAKoP,GAAL,CAAS4Z,QAAT,CAAkB,CAAlB,EAAqB,CAArB,EAAwBv5C,KAAxB,EAA+BC,MAA/B;IACA,KAAK0/B,GAAL,CAASsC,SAAT,GAAqBqX,cAArB;IAEA,IAAIhnB,YAAJ,EAAkB;MAChB,MAAMknB,iBAAA,GAAoB,KAAK9X,cAAL,CAAoBC,SAApB,CACxB,aADwB,EAExB3hC,KAFwB,EAGxBC,MAHwB,CAA1B;MAKA,KAAKw5C,YAAL,GAAoB,KAAK9Z,GAAzB;MACA,KAAK6Z,iBAAL,GAAyBA,iBAAA,CAAkBp6B,MAA3C;MACA,KAAKugB,GAAL,GAAW6Z,iBAAA,CAAkBx4B,OAA7B;MACA,KAAK2e,GAAL,CAAS2I,IAAT;MAGA,KAAK3I,GAAL,CAASrP,SAAT,CAAmB,GAAG+O,qCAAA,CAAoB,KAAKoa,YAAzB,CAAtB;IAZgB;IAelB,KAAK9Z,GAAL,CAAS2I,IAAT;IACAuM,iBAAA,CAAkB,KAAKlV,GAAvB;IACA,IAAIrP,SAAJ,EAAe;MACb,KAAKqP,GAAL,CAASrP,SAAT,CAAmB,GAAGA,SAAtB;MACA,KAAKwoB,YAAL,GAAoBxoB,SAAA,CAAU,CAAV,CAApB;MACA,KAAKyoB,YAAL,GAAoBzoB,SAAA,CAAU,CAAV,CAApB;IAHa;IAKf,KAAKqP,GAAL,CAASrP,SAAT,CAAmB,GAAGrrB,QAAA,CAASqrB,SAA/B;IACA,KAAKuoB,aAAL,GAAqB5zC,QAAA,CAASuqB,KAA9B;IAEA,KAAKwS,aAAL,GAAqB3C,qCAAA,CAAoB,KAAKM,GAAzB,CAArB;EAvCC;EA0CHjC,oBACEvM,YADF,EAEEuoB,iBAFF,EAGEC,gBAHF,EAIE1c,OAJF,EAKE;IACA,MAAM5L,SAAA,GAAYF,YAAA,CAAaE,SAA/B;IACA,MAAMD,OAAA,GAAUD,YAAA,CAAaC,OAA7B;IACA,IAAInY,CAAA,GAAIygC,iBAAA,IAAqB,CAA7B;IACA,MAAME,YAAA,GAAevoB,SAAA,CAAUxmB,MAA/B;IAGA,IAAI+uC,YAAA,KAAiB3gC,CAArB,EAAwB;MACtB,OAAOA,CAAP;IADsB;IAIxB,MAAM4gC,eAAA,GACJD,YAAA,GAAe3gC,CAAf,GAAmBqyB,eAAnB,IACA,OAAOqO,gBAAP,KAA4B,UAF9B;IAGA,MAAMG,OAAA,GAAUD,eAAA,GAAkBE,IAAA,CAAKC,GAAL,KAAa3O,cAA/B,GAAgD,CAAhE;IACA,IAAIiF,KAAA,GAAQ,CAAZ;IAEA,MAAMthB,UAAA,GAAa,KAAKA,UAAxB;IACA,MAAMC,IAAA,GAAO,KAAKA,IAAlB;IACA,IAAIgrB,IAAJ;IAEA,OAAO,IAAP,EAAa;MACX,IAAIhd,OAAA,KAAYrnB,SAAZ,IAAyBqD,CAAA,KAAMgkB,OAAA,CAAQE,cAA3C,EAA2D;QACzDF,OAAA,CAAQid,OAAR,CAAgBjhC,CAAhB,EAAmB0gC,gBAAnB;QACA,OAAO1gC,CAAP;MAFyD;MAK3DghC,IAAA,GAAO7oB,OAAA,CAAQnY,CAAR,CAAP;MAEA,IAAIghC,IAAA,KAASnP,QAAA,CAAIqP,UAAjB,EAA6B;QAE3B,KAAKF,IAAL,EAAWG,KAAX,CAAiB,IAAjB,EAAuB/oB,SAAA,CAAUpY,CAAV,CAAvB;MAF2B,CAA7B,MAGO;QACL,WAAWohC,QAAX,IAAuBhpB,SAAA,CAAUpY,CAAV,CAAvB,EAAqC;UACnC,MAAMqhC,QAAA,GAAWD,QAAA,CAAShB,UAAT,CAAoB,IAApB,IAA4BrqB,UAA5B,GAAyCC,IAA1D;UAIA,IAAI,CAACqrB,QAAA,CAAS5tC,GAAT,CAAa2tC,QAAb,CAAL,EAA6B;YAC3BC,QAAA,CAASvqC,GAAT,CAAasqC,QAAb,EAAuBV,gBAAvB;YACA,OAAO1gC,CAAP;UAF2B;QALM;MADhC;MAaPA,CAAA;MAGA,IAAIA,CAAA,KAAM2gC,YAAV,EAAwB;QACtB,OAAO3gC,CAAP;MADsB;MAMxB,IAAI4gC,eAAA,IAAmB,EAAEvJ,KAAF,GAAUhF,eAAjC,EAAkD;QAChD,IAAIyO,IAAA,CAAKC,GAAL,KAAaF,OAAjB,EAA0B;UACxBH,gBAAA;UACA,OAAO1gC,CAAP;QAFwB;QAI1Bq3B,KAAA,GAAQ,CAAR;MALgD;IAjCvC;EArBb;EAmEF,CAAAiK,oBAAA,EAAuB;IAErB,OAAO,KAAKxC,UAAL,CAAgBltC,MAAhB,IAA0B,KAAK2vC,WAAtC,EAAmD;MACjD,KAAK1O,OAAL;IADiD;IAInD,KAAKnM,GAAL,CAASmM,OAAT;IAEA,IAAI,KAAK0N,iBAAT,EAA4B;MAC1B,KAAK7Z,GAAL,GAAW,KAAK8Z,YAAhB;MACA,KAAK9Z,GAAL,CAAS2I,IAAT;MACA,KAAK3I,GAAL,CAAS2C,YAAT,CAAsB,CAAtB,EAAyB,CAAzB,EAA4B,CAA5B,EAA+B,CAA/B,EAAkC,CAAlC,EAAqC,CAArC;MACA,KAAK3C,GAAL,CAAS8P,SAAT,CAAmB,KAAK+J,iBAAxB,EAA2C,CAA3C,EAA8C,CAA9C;MACA,KAAK7Z,GAAL,CAASmM,OAAT;MACA,KAAK0N,iBAAL,GAAyB,IAAzB;IAN0B;EARP;EAkBvBjc,WAAA,EAAa;IACX,KAAK,CAAAgd,mBAAL;IAEA,KAAK7Y,cAAL,CAAoBtoB,KAApB;IACA,KAAKw/B,cAAL,CAAoBx/B,KAApB;IAEA,WAAW80B,KAAX,IAAoB,KAAKgL,iBAAL,CAAuBzoC,MAAvB,EAApB,EAAqD;MACnD,WAAW2O,MAAX,IAAqB8uB,KAAA,CAAMz9B,MAAN,EAArB,EAAqC;QACnC,IACE,OAAOgqC,iBAAP,KAA6B,WAA7B,IACAr7B,MAAA,YAAkBq7B,iBAFpB,EAGE;UACAr7B,MAAA,CAAOpf,KAAP,GAAeof,MAAA,CAAOnf,MAAP,GAAgB,CAA/B;QADA;MAJiC;MAQrCiuC,KAAA,CAAM90B,KAAN;IATmD;IAWrD,KAAK8/B,iBAAL,CAAuB9/B,KAAvB;IACA,KAAK,CAAAshC,UAAL;EAlBW;EAqBb,CAAAA,WAAA,EAAc;IACZ,IAAI,KAAKjqB,UAAT,EAAqB;MACnB,MAAMkqB,WAAA,GAAc,KAAKpzB,aAAL,CAAmB0W,YAAnB,CAClB,KAAKxN,UAAL,CAAgBmqB,UADE,EAElB,KAAKnqB,UAAL,CAAgBF,UAFE,CAApB;MAIA,IAAIoqB,WAAA,KAAgB,MAApB,EAA4B;QAC1B,MAAME,WAAA,GAAc,KAAKlb,GAAL,CAAShnB,MAA7B;QACA,KAAKgnB,GAAL,CAAShnB,MAAT,GAAkBgiC,WAAlB;QACA,KAAKhb,GAAL,CAAS8P,SAAT,CAAmB,KAAK9P,GAAL,CAASvgB,MAA5B,EAAoC,CAApC,EAAuC,CAAvC;QACA,KAAKugB,GAAL,CAAShnB,MAAT,GAAkBkiC,WAAlB;MAJ0B;IALT;EADT;EAedC,YAAYC,GAAZ,EAAiBC,gBAAjB,EAAmC;IAIjC,MAAMh7C,KAAA,GAAQ+6C,GAAA,CAAI/6C,KAAlB;IACA,MAAMC,MAAA,GAAS86C,GAAA,CAAI96C,MAAnB;IACA,IAAIg7C,UAAA,GAAa5+C,IAAA,CAAKE,GAAL,CACfF,IAAA,CAAKqzC,KAAL,CAAWsL,gBAAA,CAAiB,CAAjB,CAAX,EAAgCA,gBAAA,CAAiB,CAAjB,CAAhC,CADe,EAEf,CAFe,CAAjB;IAIA,IAAIE,WAAA,GAAc7+C,IAAA,CAAKE,GAAL,CAChBF,IAAA,CAAKqzC,KAAL,CAAWsL,gBAAA,CAAiB,CAAjB,CAAX,EAAgCA,gBAAA,CAAiB,CAAjB,CAAhC,CADgB,EAEhB,CAFgB,CAAlB;IAKA,IAAIG,UAAA,GAAan7C,KAAjB;MACEo7C,WAAA,GAAcn7C,MADhB;IAEA,IAAIo7C,WAAA,GAAc,WAAlB;IACA,IAAI5Z,SAAJ,EAAeG,MAAf;IACA,OACGqZ,UAAA,GAAa,CAAb,IAAkBE,UAAA,GAAa,CAAhC,IACCD,WAAA,GAAc,CAAd,IAAmBE,WAAA,GAAc,CAFpC,EAGE;MACA,IAAIE,QAAA,GAAWH,UAAf;QACEI,SAAA,GAAYH,WADd;MAEA,IAAIH,UAAA,GAAa,CAAb,IAAkBE,UAAA,GAAa,CAAnC,EAAsC;QAIpCG,QAAA,GACEH,UAAA,IAAc,KAAd,GACI9+C,IAAA,CAAKC,KAAL,CAAW6+C,UAAA,GAAa,CAAxB,IAA6B,CAA7B,IAAkC,CADtC,GAEI9+C,IAAA,CAAKmlC,IAAL,CAAU2Z,UAAA,GAAa,CAAvB,CAHN;QAIAF,UAAA,IAAcE,UAAA,GAAaG,QAA3B;MARoC;MAUtC,IAAIJ,WAAA,GAAc,CAAd,IAAmBE,WAAA,GAAc,CAArC,EAAwC;QAEtCG,SAAA,GACEH,WAAA,IAAe,KAAf,GACI/+C,IAAA,CAAKC,KAAL,CAAW8+C,WAAA,GAAc,CAAzB,IAA8B,CAA9B,IAAmC,CADvC,GAEI/+C,IAAA,CAAKmlC,IAAL,CAAU4Z,WAAV,IAAyB,CAH/B;QAIAF,WAAA,IAAeE,WAAA,GAAcG,SAA7B;MANsC;MAQxC9Z,SAAA,GAAY,KAAKC,cAAL,CAAoBC,SAApB,CACV0Z,WADU,EAEVC,QAFU,EAGVC,SAHU,CAAZ;MAKA3Z,MAAA,GAASH,SAAA,CAAUzgB,OAAnB;MACA4gB,MAAA,CAAOC,SAAP,CAAiB,CAAjB,EAAoB,CAApB,EAAuByZ,QAAvB,EAAiCC,SAAjC;MACA3Z,MAAA,CAAO6N,SAAP,CACEsL,GADF,EAEE,CAFF,EAGE,CAHF,EAIEI,UAJF,EAKEC,WALF,EAME,CANF,EAOE,CAPF,EAQEE,QARF,EASEC,SATF;MAWAR,GAAA,GAAMtZ,SAAA,CAAUriB,MAAhB;MACA+7B,UAAA,GAAaG,QAAb;MACAF,WAAA,GAAcG,SAAd;MACAF,WAAA,GAAcA,WAAA,KAAgB,WAAhB,GAA8B,WAA9B,GAA4C,WAA1D;IA1CA;IA4CF,OAAO;MACLN,GADK;MAELI,UAFK;MAGLC;IAHK,CAAP;EAlEiC;EAyEnCI,kBAAkBT,GAAlB,EAAuB;IACrB,MAAMpb,GAAA,GAAM,KAAKA,GAAjB;IACA,MAAM;MAAE3/B,KAAF;MAASC;IAAT,IAAoB86C,GAA1B;IACA,MAAM1xC,SAAA,GAAY,KAAKi4B,OAAL,CAAaj4B,SAA/B;IACA,MAAMoyC,aAAA,GAAgB,KAAKna,OAAL,CAAaoQ,WAAnC;IACA,MAAMgK,gBAAA,GAAmBrc,qCAAA,CAAoBM,GAApB,CAAzB;IAEA,IAAIuO,KAAJ,EAAWrd,QAAX,EAAqB8qB,MAArB,EAA6BC,UAA7B;IACA,IAAK,CAAAb,GAAA,CAAI35B,MAAJ,IAAc25B,GAAA,CAAIz6C,IAAlB,KAA2By6C,GAAA,CAAI3K,KAAJ,GAAY,CAA5C,EAA+C;MAC7C,MAAMyL,OAAA,GAAUd,GAAA,CAAI35B,MAAJ,IAAc25B,GAAA,CAAIz6C,IAAJ,CAASypB,MAAvC;MAOA8G,QAAA,GAAWvf,IAAA,CAAKC,SAAL,CACTkqC,aAAA,GACIC,gBADJ,GAEI,CAACA,gBAAA,CAAiBl9C,KAAjB,CAAuB,CAAvB,EAA0B,CAA1B,CAAD,EAA+B6K,SAA/B,CAHK,CAAX;MAMA6kC,KAAA,GAAQ,KAAKgL,iBAAL,CAAuBnpC,GAAvB,CAA2B8rC,OAA3B,CAAR;MACA,IAAI,CAAC3N,KAAL,EAAY;QACVA,KAAA,GAAQ,IAAIp+B,GAAJ,EAAR;QACA,KAAKopC,iBAAL,CAAuBl6B,GAAvB,CAA2B68B,OAA3B,EAAoC3N,KAApC;MAFU;MAIZ,MAAM4N,WAAA,GAAc5N,KAAA,CAAMn+B,GAAN,CAAU8gB,QAAV,CAApB;MACA,IAAIirB,WAAA,IAAe,CAACL,aAApB,EAAmC;QACjC,MAAMhsB,OAAA,GAAUpzB,IAAA,CAAKsX,KAAL,CACdtX,IAAA,CAAKG,GAAL,CAASk/C,gBAAA,CAAiB,CAAjB,CAAT,EAA8BA,gBAAA,CAAiB,CAAjB,CAA9B,IACEA,gBAAA,CAAiB,CAAjB,CAFY,CAAhB;QAIA,MAAMhsB,OAAA,GAAUrzB,IAAA,CAAKsX,KAAL,CACdtX,IAAA,CAAKG,GAAL,CAASk/C,gBAAA,CAAiB,CAAjB,CAAT,EAA8BA,gBAAA,CAAiB,CAAjB,CAA9B,IACEA,gBAAA,CAAiB,CAAjB,CAFY,CAAhB;QAIA,OAAO;UACLt8B,MAAA,EAAQ08B,WADH;UAELrsB,OAFK;UAGLC;QAHK,CAAP;MATiC;MAenCisB,MAAA,GAASG,WAAT;IAnC6C;IAsC/C,IAAI,CAACH,MAAL,EAAa;MACXC,UAAA,GAAa,KAAKla,cAAL,CAAoBC,SAApB,CAA8B,YAA9B,EAA4C3hC,KAA5C,EAAmDC,MAAnD,CAAb;MACAo0C,kBAAA,CAAmBuH,UAAA,CAAW56B,OAA9B,EAAuC+5B,GAAvC;IAFW;IAUb,IAAIgB,YAAA,GAAe78C,SAAA,CAAKoxB,SAAL,CAAeorB,gBAAf,EAAiC,CAClD,IAAI17C,KAD8C,EAElD,CAFkD,EAGlD,CAHkD,EAIlD,CAAC,CAAD,GAAKC,MAJ6C,EAKlD,CALkD,EAMlD,CANkD,CAAjC,CAAnB;IAQA87C,YAAA,GAAe78C,SAAA,CAAKoxB,SAAL,CAAeyrB,YAAf,EAA6B,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,EAAa,CAAb,EAAgB,CAAC97C,MAAjB,CAA7B,CAAf;IACA,MAAM,CAACmyC,IAAD,EAAOhO,IAAP,EAAaiO,IAAb,EAAmBhO,IAAnB,IAA2BnlC,SAAA,CAAK88C,0BAAL,CAC/B,CAAC,CAAD,EAAI,CAAJ,EAAOh8C,KAAP,EAAcC,MAAd,CAD+B,EAE/B87C,YAF+B,CAAjC;IAIA,MAAME,UAAA,GAAa5/C,IAAA,CAAKsX,KAAL,CAAW0+B,IAAA,GAAOD,IAAlB,KAA2B,CAA9C;IACA,MAAM8J,WAAA,GAAc7/C,IAAA,CAAKsX,KAAL,CAAW0wB,IAAA,GAAOD,IAAlB,KAA2B,CAA/C;IACA,MAAM+X,UAAA,GAAa,KAAKza,cAAL,CAAoBC,SAApB,CACjB,YADiB,EAEjBsa,UAFiB,EAGjBC,WAHiB,CAAnB;IAKA,MAAME,OAAA,GAAUD,UAAA,CAAWn7B,OAA3B;IAMA,MAAMyO,OAAA,GAAU2iB,IAAhB;IACA,MAAM1iB,OAAA,GAAU0U,IAAhB;IACAgY,OAAA,CAAQra,SAAR,CAAkB,CAACtS,OAAnB,EAA4B,CAACC,OAA7B;IACA0sB,OAAA,CAAQ9rB,SAAR,CAAkB,GAAGyrB,YAArB;IAEA,IAAI,CAACJ,MAAL,EAAa;MAEXA,MAAA,GAAS,KAAKb,WAAL,CACPc,UAAA,CAAWx8B,MADJ,EAEP4rB,4CAAA,CAA2BoR,OAA3B,CAFO,CAAT;MAIAT,MAAA,GAASA,MAAA,CAAOZ,GAAhB;MACA,IAAI7M,KAAA,IAASuN,aAAb,EAA4B;QAC1BvN,KAAA,CAAMlvB,GAAN,CAAU6R,QAAV,EAAoB8qB,MAApB;MAD0B;IAPjB;IAYbS,OAAA,CAAQC,qBAAR,GAAgClF,wBAAA,CAC9B9X,qCAAA,CAAoB+c,OAApB,CAD8B,EAE9BrB,GAAA,CAAI3D,WAF0B,CAAhC;IAKAhJ,wBAAA,CACEgO,OADF,EAEET,MAFF,EAGE,CAHF,EAIE,CAJF,EAKEA,MAAA,CAAO37C,KALT,EAME27C,MAAA,CAAO17C,MANT,EAOE,CAPF,EAQE,CARF,EASED,KATF,EAUEC,MAVF;IAYAm8C,OAAA,CAAQjH,wBAAR,GAAmC,WAAnC;IAEA,MAAMjU,OAAA,GAAUhiC,SAAA,CAAKoxB,SAAL,CAAe0a,4CAAA,CAA2BoR,OAA3B,CAAf,EAAoD,CAClE,CADkE,EAElE,CAFkE,EAGlE,CAHkE,EAIlE,CAJkE,EAKlE,CAAC3sB,OALiE,EAMlE,CAACC,OANiE,CAApD,CAAhB;IAQA0sB,OAAA,CAAQna,SAAR,GAAoBwZ,aAAA,GAChBpyC,SAAA,CAAU42B,UAAV,CAAqBN,GAArB,EAA0B,IAA1B,EAAgCuB,OAAhC,EAAyC5B,QAAA,CAASC,IAAlD,CADgB,GAEhBl2B,SAFJ;IAIA+yC,OAAA,CAAQ7C,QAAR,CAAiB,CAAjB,EAAoB,CAApB,EAAuBv5C,KAAvB,EAA8BC,MAA9B;IAEA,IAAIiuC,KAAA,IAAS,CAACuN,aAAd,EAA6B;MAG3B,KAAK/Z,cAAL,CAAoBrhB,MAApB,CAA2B,YAA3B;MACA6tB,KAAA,CAAMlvB,GAAN,CAAU6R,QAAV,EAAoBsrB,UAAA,CAAW/8B,MAA/B;IAJ2B;IAQ7B,OAAO;MACLA,MAAA,EAAQ+8B,UAAA,CAAW/8B,MADd;MAELqQ,OAAA,EAASpzB,IAAA,CAAKsX,KAAL,CAAW8b,OAAX,CAFJ;MAGLC,OAAA,EAASrzB,IAAA,CAAKsX,KAAL,CAAW+b,OAAX;IAHJ,CAAP;EA5IqB;EAoJvB4sB,aAAat8C,KAAb,EAAoB;IAClB,IAAIA,KAAA,KAAU,KAAKshC,OAAL,CAAasQ,SAA3B,EAAsC;MACpC,KAAKoH,uBAAL,CAA6B,CAA7B,IAAkC,CAAC,CAAnC;IADoC;IAGtC,KAAK1X,OAAL,CAAasQ,SAAb,GAAyB5xC,KAAzB;IACA,KAAK2/B,GAAL,CAASiS,SAAT,GAAqB5xC,KAArB;EALkB;EAQpBu8C,WAAWh3C,KAAX,EAAkB;IAChB,KAAKo6B,GAAL,CAASqV,OAAT,GAAmByC,eAAA,CAAgBlyC,KAAhB,CAAnB;EADgB;EAIlBi3C,YAAYj3C,KAAZ,EAAmB;IACjB,KAAKo6B,GAAL,CAASsV,QAAT,GAAoByC,gBAAA,CAAiBnyC,KAAjB,CAApB;EADiB;EAInBk3C,cAAcC,KAAd,EAAqB;IACnB,KAAK/c,GAAL,CAASuV,UAAT,GAAsBwH,KAAtB;EADmB;EAIrBC,QAAQC,SAAR,EAAmBC,SAAnB,EAA8B;IAC5B,MAAMld,GAAA,GAAM,KAAKA,GAAjB;IACA,IAAIA,GAAA,CAAI+U,WAAJ,KAAoB9+B,SAAxB,EAAmC;MACjC+pB,GAAA,CAAI+U,WAAJ,CAAgBkI,SAAhB;MACAjd,GAAA,CAAIiV,cAAJ,GAAqBiI,SAArB;IAFiC;EAFP;EAQ9BC,mBAAmBlhC,MAAnB,EAA2B;EAI3BmhC,YAAYC,QAAZ,EAAsB;EAItBC,UAAUC,MAAV,EAAkB;IAChB,WAAW,CAAC1oC,GAAD,EAAM1D,KAAN,CAAX,IAA2BosC,MAA3B,EAAmC;MACjC,QAAQ1oC,GAAR;QACE,KAAK,IAAL;UACE,KAAK8nC,YAAL,CAAkBxrC,KAAlB;UACA;QACF,KAAK,IAAL;UACE,KAAKyrC,UAAL,CAAgBzrC,KAAhB;UACA;QACF,KAAK,IAAL;UACE,KAAK0rC,WAAL,CAAiB1rC,KAAjB;UACA;QACF,KAAK,IAAL;UACE,KAAK2rC,aAAL,CAAmB3rC,KAAnB;UACA;QACF,KAAK,GAAL;UACE,KAAK6rC,OAAL,CAAa7rC,KAAA,CAAM,CAAN,CAAb,EAAuBA,KAAA,CAAM,CAAN,CAAvB;UACA;QACF,KAAK,IAAL;UACE,KAAKgsC,kBAAL,CAAwBhsC,KAAxB;UACA;QACF,KAAK,IAAL;UACE,KAAKisC,WAAL,CAAiBjsC,KAAjB;UACA;QACF,KAAK,MAAL;UACE,KAAKqsC,OAAL,CAAarsC,KAAA,CAAM,CAAN,CAAb,EAAuBA,KAAA,CAAM,CAAN,CAAvB;UACA;QACF,KAAK,IAAL;UACE,KAAKwwB,OAAL,CAAaqQ,WAAb,GAA2B7gC,KAA3B;UACA;QACF,KAAK,IAAL;UACE,KAAKwwB,OAAL,CAAaxjB,SAAb,GAAyBhN,KAAzB;UACA,KAAK6uB,GAAL,CAASoV,WAAT,GAAuBjkC,KAAvB;UACA;QACF,KAAK,IAAL;UACE,KAAK6uB,GAAL,CAASwV,wBAAT,GAAoCrkC,KAApC;UACA;QACF,KAAK,OAAL;UACE,KAAKwwB,OAAL,CAAauQ,WAAb,GAA2B/gC,KAAA,GAAQ,KAAK2nC,SAAb,GAAyB,IAApD;UACA,KAAKA,SAAL,GAAiB,IAAjB;UACA,KAAK2E,eAAL;UACA;QACF,KAAK,IAAL;UACE,KAAKzd,GAAL,CAAShnB,MAAT,GAAkB,KAAK2oB,OAAL,CAAawQ,YAAb,GAChB,KAAKvqB,aAAL,CAAmBwW,SAAnB,CAA6BjtB,KAA7B,CADF;UAEA;MA3CJ;IADiC;EADnB;EAkDlB,IAAI0pC,WAAJA,CAAA,EAAkB;IAChB,OAAO,CAAC,CAAC,KAAK9B,YAAd;EADgB;EAIlB0E,gBAAA,EAAkB;IAChB,MAAM5C,WAAA,GAAc,KAAKA,WAAzB;IACA,IAAI,KAAKlZ,OAAL,CAAauQ,WAAb,IAA4B,CAAC2I,WAAjC,EAA8C;MAC5C,KAAK6C,cAAL;IAD4C,CAA9C,MAEO,IAAI,CAAC,KAAK/b,OAAL,CAAauQ,WAAd,IAA6B2I,WAAjC,EAA8C;MACnD,KAAK8C,YAAL;IADmD;EAJrC;EAmBlBD,eAAA,EAAiB;IACf,IAAI,KAAK7C,WAAT,EAAsB;MACpB,MAAM,IAAI71B,KAAJ,CAAU,mDAAV,CAAN;IADoB;IAGtB,MAAMs3B,UAAA,GAAa,KAAKtc,GAAL,CAASvgB,MAAT,CAAgBpf,KAAnC;IACA,MAAMk8C,WAAA,GAAc,KAAKvc,GAAL,CAASvgB,MAAT,CAAgBnf,MAApC;IACA,MAAMs9C,OAAA,GAAU,iBAAiB,KAAKvV,UAAtC;IACA,MAAMwV,aAAA,GAAgB,KAAK9b,cAAL,CAAoBC,SAApB,CACpB4b,OADoB,EAEpBtB,UAFoB,EAGpBC,WAHoB,CAAtB;IAKA,KAAKxD,YAAL,GAAoB,KAAK/Y,GAAzB;IACA,KAAKA,GAAL,GAAW6d,aAAA,CAAcx8B,OAAzB;IACA,MAAM2e,GAAA,GAAM,KAAKA,GAAjB;IACAA,GAAA,CAAI2C,YAAJ,CAAiB,GAAGjD,qCAAA,CAAoB,KAAKqZ,YAAzB,CAApB;IACApE,YAAA,CAAa,KAAKoE,YAAlB,EAAgC/Y,GAAhC;IACA8L,uBAAA,CAAwB9L,GAAxB,EAA6B,KAAK+Y,YAAlC;IAEA,KAAKuE,SAAL,CAAe,CACb,CAAC,IAAD,EAAO,aAAP,CADa,EAEb,CAAC,IAAD,EAAO,CAAP,CAFa,EAGb,CAAC,IAAD,EAAO,CAAP,CAHa,CAAf;EAnBe;EA0BjBK,aAAA,EAAe;IACb,IAAI,CAAC,KAAK9C,WAAV,EAAuB;MACrB,MAAM,IAAI71B,KAAJ,CAAU,6CAAV,CAAN;IADqB;IAKvB,KAAKgb,GAAL,CAASgM,gBAAT;IACA2I,YAAA,CAAa,KAAK3U,GAAlB,EAAuB,KAAK+Y,YAA5B;IACA,KAAK/Y,GAAL,GAAW,KAAK+Y,YAAhB;IAEA,KAAKA,YAAL,GAAoB,IAApB;EAVa;EAaf+E,QAAQC,QAAR,EAAkB;IAChB,IAAI,CAAC,KAAKpc,OAAL,CAAauQ,WAAlB,EAA+B;MAC7B;IAD6B;IAI/B,IAAI,CAAC6L,QAAL,EAAe;MACbA,QAAA,GAAW,CAAC,CAAD,EAAI,CAAJ,EAAO,KAAK/d,GAAL,CAASvgB,MAAT,CAAgBpf,KAAvB,EAA8B,KAAK2/B,GAAL,CAASvgB,MAAT,CAAgBnf,MAA9C,CAAX;IADa,CAAf,MAEO;MACLy9C,QAAA,CAAS,CAAT,IAAcrhD,IAAA,CAAKC,KAAL,CAAWohD,QAAA,CAAS,CAAT,CAAX,CAAd;MACAA,QAAA,CAAS,CAAT,IAAcrhD,IAAA,CAAKC,KAAL,CAAWohD,QAAA,CAAS,CAAT,CAAX,CAAd;MACAA,QAAA,CAAS,CAAT,IAAcrhD,IAAA,CAAKmlC,IAAL,CAAUkc,QAAA,CAAS,CAAT,CAAV,CAAd;MACAA,QAAA,CAAS,CAAT,IAAcrhD,IAAA,CAAKmlC,IAAL,CAAUkc,QAAA,CAAS,CAAT,CAAV,CAAd;IAJK;IAMP,MAAM3G,KAAA,GAAQ,KAAKzV,OAAL,CAAauQ,WAA3B;IACA,MAAM6G,YAAA,GAAe,KAAKA,YAA1B;IAEA5B,YAAA,CAAa4B,YAAb,EAA2B3B,KAA3B,EAAkC,KAAKpX,GAAvC,EAA4C+d,QAA5C;IAGA,KAAK/d,GAAL,CAAS2I,IAAT;IACA,KAAK3I,GAAL,CAAS2C,YAAT,CAAsB,CAAtB,EAAyB,CAAzB,EAA4B,CAA5B,EAA+B,CAA/B,EAAkC,CAAlC,EAAqC,CAArC;IACA,KAAK3C,GAAL,CAASkC,SAAT,CAAmB,CAAnB,EAAsB,CAAtB,EAAyB,KAAKlC,GAAL,CAASvgB,MAAT,CAAgBpf,KAAzC,EAAgD,KAAK2/B,GAAL,CAASvgB,MAAT,CAAgBnf,MAAhE;IACA,KAAK0/B,GAAL,CAASmM,OAAT;EAtBgB;EAyBlBxD,KAAA,EAAO;IACL,IAAI,KAAKkS,WAAT,EAAsB;MAIpBlG,YAAA,CAAa,KAAK3U,GAAlB,EAAuB,KAAK+Y,YAA5B;MAGA,KAAKA,YAAL,CAAkBpQ,IAAlB;IAPoB,CAAtB,MAQO;MACL,KAAK3I,GAAL,CAAS2I,IAAT;IADK;IAGP,MAAMqV,GAAA,GAAM,KAAKrc,OAAjB;IACA,KAAKyW,UAAL,CAAgBtsC,IAAhB,CAAqBkyC,GAArB;IACA,KAAKrc,OAAL,GAAeqc,GAAA,CAAIr8B,KAAJ,EAAf;EAdK;EAiBPwqB,QAAA,EAAU;IACR,IAAI,KAAKiM,UAAL,CAAgBltC,MAAhB,KAA2B,CAA3B,IAAgC,KAAK2vC,WAAzC,EAAsD;MACpD,KAAK8C,YAAL;IADoD;IAGtD,IAAI,KAAKvF,UAAL,CAAgBltC,MAAhB,KAA2B,CAA/B,EAAkC;MAChC,KAAKy2B,OAAL,GAAe,KAAKyW,UAAL,CAAgB6F,GAAhB,EAAf;MACA,IAAI,KAAKpD,WAAT,EAAsB;QAGpB,KAAK9B,YAAL,CAAkB5M,OAAlB;QACAwI,YAAA,CAAa,KAAKoE,YAAlB,EAAgC,KAAK/Y,GAArC;MAJoB,CAAtB,MAKO;QACL,KAAKA,GAAL,CAASmM,OAAT;MADK;MAGP,KAAKsR,eAAL;MAGA,KAAKpF,WAAL,GAAmB,IAAnB;MAEA,KAAKgB,uBAAL,CAA6B,CAA7B,IAAkC,CAAC,CAAnC;MACA,KAAKC,0BAAL,GAAkC,IAAlC;IAhBgC;EAJ1B;EAwBV3oB,UAAUgd,CAAV,EAAa3vC,CAAb,EAAgBZ,CAAhB,EAAmBwwC,CAAnB,EAAsB1yB,CAAtB,EAAyB2yB,CAAzB,EAA4B;IAC1B,KAAK7N,GAAL,CAASrP,SAAT,CAAmBgd,CAAnB,EAAsB3vC,CAAtB,EAAyBZ,CAAzB,EAA4BwwC,CAA5B,EAA+B1yB,CAA/B,EAAkC2yB,CAAlC;IAEA,KAAKwL,uBAAL,CAA6B,CAA7B,IAAkC,CAAC,CAAnC;IACA,KAAKC,0BAAL,GAAkC,IAAlC;EAJ0B;EAQ5B4E,cAAcC,GAAd,EAAmBC,IAAnB,EAAyBvL,MAAzB,EAAiC;IAC/B,MAAM7S,GAAA,GAAM,KAAKA,GAAjB;IACA,MAAM2B,OAAA,GAAU,KAAKA,OAArB;IACA,IAAI1kC,CAAA,GAAI0kC,OAAA,CAAQ1kC,CAAhB;MACEI,CAAA,GAAIskC,OAAA,CAAQtkC,CADd;IAEA,IAAIghD,MAAJ,EAAYC,MAAZ;IACA,MAAMvC,gBAAA,GAAmBrc,qCAAA,CAAoBM,GAApB,CAAzB;IAQA,MAAMue,eAAA,GACHxC,gBAAA,CAAiB,CAAjB,MAAwB,CAAxB,IAA6BA,gBAAA,CAAiB,CAAjB,MAAwB,CAAtD,IACCA,gBAAA,CAAiB,CAAjB,MAAwB,CAAxB,IAA6BA,gBAAA,CAAiB,CAAjB,MAAwB,CAFxD;IAGA,MAAMyC,eAAA,GAAkBD,eAAA,GAAkB1L,MAAA,CAAOh0C,KAAP,CAAa,CAAb,CAAlB,GAAoC,IAA5D;IAEA,KAAK,IAAIya,CAAA,GAAI,CAAR,EAAW+rB,CAAA,GAAI,CAAf,EAAkBvoB,EAAA,GAAKqhC,GAAA,CAAIjzC,MAA3B,EAAmCoO,CAAA,GAAIwD,EAA5C,EAAgDxD,CAAA,EAAhD,EAAqD;MACnD,QAAQ6kC,GAAA,CAAI7kC,CAAJ,IAAS,CAAjB;QACE,KAAK6xB,QAAA,CAAIsT,SAAT;UACExhD,CAAA,GAAImhD,IAAA,CAAK/Y,CAAA,EAAL,CAAJ;UACAhoC,CAAA,GAAI+gD,IAAA,CAAK/Y,CAAA,EAAL,CAAJ;UACA,MAAMhlC,KAAA,GAAQ+9C,IAAA,CAAK/Y,CAAA,EAAL,CAAd;UACA,MAAM/kC,MAAA,GAAS89C,IAAA,CAAK/Y,CAAA,EAAL,CAAf;UAEA,MAAMqZ,EAAA,GAAKzhD,CAAA,GAAIoD,KAAf;UACA,MAAMs+C,EAAA,GAAKthD,CAAA,GAAIiD,MAAf;UACA0/B,GAAA,CAAI6M,MAAJ,CAAW5vC,CAAX,EAAcI,CAAd;UACA,IAAIgD,KAAA,KAAU,CAAV,IAAeC,MAAA,KAAW,CAA9B,EAAiC;YAC/B0/B,GAAA,CAAI+M,MAAJ,CAAW2R,EAAX,EAAeC,EAAf;UAD+B,CAAjC,MAEO;YACL3e,GAAA,CAAI+M,MAAJ,CAAW2R,EAAX,EAAerhD,CAAf;YACA2iC,GAAA,CAAI+M,MAAJ,CAAW2R,EAAX,EAAeC,EAAf;YACA3e,GAAA,CAAI+M,MAAJ,CAAW9vC,CAAX,EAAc0hD,EAAd;UAHK;UAKP,IAAI,CAACJ,eAAL,EAAsB;YACpB5c,OAAA,CAAQuH,gBAAR,CAAyB6S,gBAAzB,EAA2C,CAAC9+C,CAAD,EAAII,CAAJ,EAAOqhD,EAAP,EAAWC,EAAX,CAA3C;UADoB;UAGtB3e,GAAA,CAAIoN,SAAJ;UACA;QACF,KAAKjC,QAAA,CAAI0B,MAAT;UACE5vC,CAAA,GAAImhD,IAAA,CAAK/Y,CAAA,EAAL,CAAJ;UACAhoC,CAAA,GAAI+gD,IAAA,CAAK/Y,CAAA,EAAL,CAAJ;UACArF,GAAA,CAAI6M,MAAJ,CAAW5vC,CAAX,EAAcI,CAAd;UACA,IAAI,CAACkhD,eAAL,EAAsB;YACpB5c,OAAA,CAAQ4Q,gBAAR,CAAyBwJ,gBAAzB,EAA2C9+C,CAA3C,EAA8CI,CAA9C;UADoB;UAGtB;QACF,KAAK8tC,QAAA,CAAI4B,MAAT;UACE9vC,CAAA,GAAImhD,IAAA,CAAK/Y,CAAA,EAAL,CAAJ;UACAhoC,CAAA,GAAI+gD,IAAA,CAAK/Y,CAAA,EAAL,CAAJ;UACArF,GAAA,CAAI+M,MAAJ,CAAW9vC,CAAX,EAAcI,CAAd;UACA,IAAI,CAACkhD,eAAL,EAAsB;YACpB5c,OAAA,CAAQ4Q,gBAAR,CAAyBwJ,gBAAzB,EAA2C9+C,CAA3C,EAA8CI,CAA9C;UADoB;UAGtB;QACF,KAAK8tC,QAAA,CAAIyT,OAAT;UACEP,MAAA,GAASphD,CAAT;UACAqhD,MAAA,GAASjhD,CAAT;UACAJ,CAAA,GAAImhD,IAAA,CAAK/Y,CAAA,GAAI,CAAT,CAAJ;UACAhoC,CAAA,GAAI+gD,IAAA,CAAK/Y,CAAA,GAAI,CAAT,CAAJ;UACArF,GAAA,CAAIiN,aAAJ,CACEmR,IAAA,CAAK/Y,CAAL,CADF,EAEE+Y,IAAA,CAAK/Y,CAAA,GAAI,CAAT,CAFF,EAGE+Y,IAAA,CAAK/Y,CAAA,GAAI,CAAT,CAHF,EAIE+Y,IAAA,CAAK/Y,CAAA,GAAI,CAAT,CAJF,EAKEpoC,CALF,EAMEI,CANF;UAQAskC,OAAA,CAAQoR,qBAAR,CACEgJ,gBADF,EAEEsC,MAFF,EAGEC,MAHF,EAIEF,IAAA,CAAK/Y,CAAL,CAJF,EAKE+Y,IAAA,CAAK/Y,CAAA,GAAI,CAAT,CALF,EAME+Y,IAAA,CAAK/Y,CAAA,GAAI,CAAT,CANF,EAOE+Y,IAAA,CAAK/Y,CAAA,GAAI,CAAT,CAPF,EAQEpoC,CARF,EASEI,CATF,EAUEmhD,eAVF;UAYAnZ,CAAA,IAAK,CAAL;UACA;QACF,KAAK8F,QAAA,CAAI0T,QAAT;UACER,MAAA,GAASphD,CAAT;UACAqhD,MAAA,GAASjhD,CAAT;UACA2iC,GAAA,CAAIiN,aAAJ,CACEhwC,CADF,EAEEI,CAFF,EAGE+gD,IAAA,CAAK/Y,CAAL,CAHF,EAIE+Y,IAAA,CAAK/Y,CAAA,GAAI,CAAT,CAJF,EAKE+Y,IAAA,CAAK/Y,CAAA,GAAI,CAAT,CALF,EAME+Y,IAAA,CAAK/Y,CAAA,GAAI,CAAT,CANF;UAQA1D,OAAA,CAAQoR,qBAAR,CACEgJ,gBADF,EAEEsC,MAFF,EAGEC,MAHF,EAIErhD,CAJF,EAKEI,CALF,EAME+gD,IAAA,CAAK/Y,CAAL,CANF,EAOE+Y,IAAA,CAAK/Y,CAAA,GAAI,CAAT,CAPF,EAQE+Y,IAAA,CAAK/Y,CAAA,GAAI,CAAT,CARF,EASE+Y,IAAA,CAAK/Y,CAAA,GAAI,CAAT,CATF,EAUEmZ,eAVF;UAYAvhD,CAAA,GAAImhD,IAAA,CAAK/Y,CAAA,GAAI,CAAT,CAAJ;UACAhoC,CAAA,GAAI+gD,IAAA,CAAK/Y,CAAA,GAAI,CAAT,CAAJ;UACAA,CAAA,IAAK,CAAL;UACA;QACF,KAAK8F,QAAA,CAAI2T,QAAT;UACET,MAAA,GAASphD,CAAT;UACAqhD,MAAA,GAASjhD,CAAT;UACAJ,CAAA,GAAImhD,IAAA,CAAK/Y,CAAA,GAAI,CAAT,CAAJ;UACAhoC,CAAA,GAAI+gD,IAAA,CAAK/Y,CAAA,GAAI,CAAT,CAAJ;UACArF,GAAA,CAAIiN,aAAJ,CAAkBmR,IAAA,CAAK/Y,CAAL,CAAlB,EAA2B+Y,IAAA,CAAK/Y,CAAA,GAAI,CAAT,CAA3B,EAAwCpoC,CAAxC,EAA2CI,CAA3C,EAA8CJ,CAA9C,EAAiDI,CAAjD;UACAskC,OAAA,CAAQoR,qBAAR,CACEgJ,gBADF,EAEEsC,MAFF,EAGEC,MAHF,EAIEF,IAAA,CAAK/Y,CAAL,CAJF,EAKE+Y,IAAA,CAAK/Y,CAAA,GAAI,CAAT,CALF,EAMEpoC,CANF,EAOEI,CAPF,EAQEJ,CARF,EASEI,CATF,EAUEmhD,eAVF;UAYAnZ,CAAA,IAAK,CAAL;UACA;QACF,KAAK8F,QAAA,CAAIiC,SAAT;UACEpN,GAAA,CAAIoN,SAAJ;UACA;MAlHJ;IADmD;IAuHrD,IAAImR,eAAJ,EAAqB;MACnB5c,OAAA,CAAQiR,uBAAR,CAAgCmJ,gBAAhC,EAAkDyC,eAAlD;IADmB;IAIrB7c,OAAA,CAAQ2Q,eAAR,CAAwBr1C,CAAxB,EAA2BI,CAA3B;EA9I+B;EAiJjC+vC,UAAA,EAAY;IACV,KAAKpN,GAAL,CAASoN,SAAT;EADU;EAIZ2R,OAAOC,WAAA,GAAc,IAArB,EAA2B;IACzB,MAAMhf,GAAA,GAAM,KAAKA,GAAjB;IACA,MAAMn2B,WAAA,GAAc,KAAK83B,OAAL,CAAa93B,WAAjC;IAGAm2B,GAAA,CAAIoV,WAAJ,GAAkB,KAAKzT,OAAL,CAAaqQ,WAA/B;IACA,IAAI,KAAKgH,cAAT,EAAyB;MACvB,IAAI,OAAOnvC,WAAP,KAAuB,QAAvB,IAAmCA,WAAA,EAAay2B,UAApD,EAAgE;QAC9DN,GAAA,CAAI2I,IAAJ;QACA3I,GAAA,CAAIoJ,WAAJ,GAAkBv/B,WAAA,CAAYy2B,UAAZ,CAChBN,GADgB,EAEhB,IAFgB,EAGhBqL,4CAAA,CAA2BrL,GAA3B,CAHgB,EAIhBL,QAAA,CAASE,MAJO,CAAlB;QAMA,KAAKof,gBAAL,CAAwC,KAAxC;QACAjf,GAAA,CAAImM,OAAJ;MAT8D,CAAhE,MAUO;QACL,KAAK8S,gBAAL,CAAwC,IAAxC;MADK;IAXgB;IAezB,IAAID,WAAJ,EAAiB;MACf,KAAKA,WAAL,CAAiB,KAAKrd,OAAL,CAAaC,yBAAb,EAAjB;IADe;IAIjB5B,GAAA,CAAIoV,WAAJ,GAAkB,KAAKzT,OAAL,CAAaxjB,SAA/B;EAzByB;EA4B3B+gC,YAAA,EAAc;IACZ,KAAK9R,SAAL;IACA,KAAK2R,MAAL;EAFY;EAKdxc,KAAKyc,WAAA,GAAc,IAAnB,EAAyB;IACvB,MAAMhf,GAAA,GAAM,KAAKA,GAAjB;IACA,MAAMt2B,SAAA,GAAY,KAAKi4B,OAAL,CAAaj4B,SAA/B;IACA,MAAMoyC,aAAA,GAAgB,KAAKna,OAAL,CAAaoQ,WAAnC;IACA,IAAIoN,WAAA,GAAc,KAAlB;IAEA,IAAIrD,aAAJ,EAAmB;MACjB9b,GAAA,CAAI2I,IAAJ;MACA3I,GAAA,CAAIsC,SAAJ,GAAgB54B,SAAA,CAAU42B,UAAV,CACdN,GADc,EAEd,IAFc,EAGdqL,4CAAA,CAA2BrL,GAA3B,CAHc,EAIdL,QAAA,CAASC,IAJK,CAAhB;MAMAuf,WAAA,GAAc,IAAd;IARiB;IAWnB,MAAM9iC,SAAA,GAAY,KAAKslB,OAAL,CAAaC,yBAAb,EAAlB;IACA,IAAI,KAAKoX,cAAL,IAAuB38B,SAAA,KAAc,IAAzC,EAA+C;MAC7C,IAAI,KAAKi8B,aAAT,EAAwB;QACtBtY,GAAA,CAAIuC,IAAJ,CAAS,SAAT;QACA,KAAK+V,aAAL,GAAqB,KAArB;MAFsB,CAAxB,MAGO;QACLtY,GAAA,CAAIuC,IAAJ;MADK;IAJsC;IAS/C,IAAI4c,WAAJ,EAAiB;MACfnf,GAAA,CAAImM,OAAJ;IADe;IAGjB,IAAI6S,WAAJ,EAAiB;MACf,KAAKA,WAAL,CAAiB3iC,SAAjB;IADe;EA9BM;EAmCzB+iC,OAAA,EAAS;IACP,KAAK9G,aAAL,GAAqB,IAArB;IACA,KAAK/V,IAAL;EAFO;EAKT8c,WAAA,EAAa;IACX,KAAK9c,IAAL,CAAU,KAAV;IACA,KAAKwc,MAAL,CAAY,KAAZ;IAEA,KAAKC,WAAL;EAJW;EAObM,aAAA,EAAe;IACb,KAAKhH,aAAL,GAAqB,IAArB;IACA,KAAK+G,UAAL;EAFa;EAKfE,gBAAA,EAAkB;IAChB,KAAKnS,SAAL;IACA,KAAKiS,UAAL;EAFgB;EAKlBG,kBAAA,EAAoB;IAClB,KAAKlH,aAAL,GAAqB,IAArB;IACA,KAAKlL,SAAL;IACA,KAAKiS,UAAL;EAHkB;EAMpBlW,QAAA,EAAU;IACR,KAAK6V,WAAL;EADQ;EAKV5e,KAAA,EAAO;IACL,KAAKiY,WAAL,GAAmBL,WAAnB;EADK;EAIPyH,OAAA,EAAS;IACP,KAAKpH,WAAL,GAAmBJ,OAAnB;EADO;EAKTyH,UAAA,EAAY;IACV,KAAK/d,OAAL,CAAayP,UAAb,GAA0BlG,oBAA1B;IACA,KAAKvJ,OAAL,CAAa0P,eAAb,GAA+B,CAA/B;IACA,KAAK1P,OAAL,CAAa1kC,CAAb,GAAiB,KAAK0kC,OAAL,CAAa6P,KAAb,GAAqB,CAAtC;IACA,KAAK7P,OAAL,CAAatkC,CAAb,GAAiB,KAAKskC,OAAL,CAAa8P,KAAb,GAAqB,CAAtC;EAJU;EAOZkO,QAAA,EAAU;IACR,MAAMC,KAAA,GAAQ,KAAKC,gBAAnB;IACA,MAAM7f,GAAA,GAAM,KAAKA,GAAjB;IACA,IAAI4f,KAAA,KAAU3pC,SAAd,EAAyB;MACvB+pB,GAAA,CAAImC,SAAJ;MACA;IAFuB;IAKzBnC,GAAA,CAAI2I,IAAJ;IACA3I,GAAA,CAAImC,SAAJ;IACA,WAAW0O,IAAX,IAAmB+O,KAAnB,EAA0B;MACxB5f,GAAA,CAAI2C,YAAJ,CAAiB,GAAGkO,IAAA,CAAKlgB,SAAzB;MACAqP,GAAA,CAAIoC,SAAJ,CAAcyO,IAAA,CAAK5zC,CAAnB,EAAsB4zC,IAAA,CAAKxzC,CAA3B;MACAwzC,IAAA,CAAKiP,SAAL,CAAe9f,GAAf,EAAoB6Q,IAAA,CAAKj9B,QAAzB;IAHwB;IAK1BosB,GAAA,CAAImM,OAAJ;IACAnM,GAAA,CAAII,IAAJ;IACAJ,GAAA,CAAImC,SAAJ;IACA,OAAO,KAAK0d,gBAAZ;EAlBQ;EAqBVE,eAAeC,OAAf,EAAwB;IACtB,KAAKre,OAAL,CAAa+P,WAAb,GAA2BsO,OAA3B;EADsB;EAIxBC,eAAeD,OAAf,EAAwB;IACtB,KAAKre,OAAL,CAAagQ,WAAb,GAA2BqO,OAA3B;EADsB;EAIxBE,UAAUrwB,KAAV,EAAiB;IACf,KAAK8R,OAAL,CAAaiQ,UAAb,GAA0B/hB,KAAA,GAAQ,GAAlC;EADe;EAIjBswB,WAAW5O,OAAX,EAAoB;IAClB,KAAK5P,OAAL,CAAa4P,OAAb,GAAuB,CAACA,OAAxB;EADkB;EAIpBiM,QAAQ4C,WAAR,EAAqBnoC,IAArB,EAA2B;IACzB,MAAMooC,OAAA,GAAU,KAAKhxB,UAAL,CAAgBjf,GAAhB,CAAoBgwC,WAApB,CAAhB;IACA,MAAMze,OAAA,GAAU,KAAKA,OAArB;IAEA,IAAI,CAAC0e,OAAL,EAAc;MACZ,MAAM,IAAIr7B,KAAJ,CAAW,uBAAsBo7B,WAAvB,EAAV,CAAN;IADY;IAGdze,OAAA,CAAQ2P,UAAR,GAAqB+O,OAAA,CAAQ/O,UAAR,IAAsBrG,yBAA3C;IAIA,IAAItJ,OAAA,CAAQ2P,UAAR,CAAmB,CAAnB,MAA0B,CAA1B,IAA+B3P,OAAA,CAAQ2P,UAAR,CAAmB,CAAnB,MAA0B,CAA7D,EAAgE;MAC9D9xC,aAAA,CAAK,kCAAkC4gD,WAAvC;IAD8D;IAMhE,IAAInoC,IAAA,GAAO,CAAX,EAAc;MACZA,IAAA,GAAO,CAACA,IAAR;MACA0pB,OAAA,CAAQ2e,aAAR,GAAwB,CAAC,CAAzB;IAFY,CAAd,MAGO;MACL3e,OAAA,CAAQ2e,aAAR,GAAwB,CAAxB;IADK;IAIP,KAAK3e,OAAL,CAAatG,IAAb,GAAoBglB,OAApB;IACA,KAAK1e,OAAL,CAAa/tB,QAAb,GAAwBqE,IAAxB;IAEA,IAAIooC,OAAA,CAAQE,WAAZ,EAAyB;MACvB;IADuB;IAIzB,MAAMr2C,IAAA,GAAOm2C,OAAA,CAAQG,UAAR,IAAsB,YAAnC;IACA,MAAMC,QAAA,GACJJ,OAAA,CAAQK,cAAR,EAAwBC,GAAxB,IAAgC,IAAGz2C,IAAK,MAAKm2C,OAAA,CAAQO,YAAtB,EADjC;IAGA,IAAIC,IAAA,GAAO,QAAX;IACA,IAAIR,OAAA,CAAQrW,KAAZ,EAAmB;MACjB6W,IAAA,GAAO,KAAP;IADiB,CAAnB,MAEO,IAAIR,OAAA,CAAQQ,IAAZ,EAAkB;MACvBA,IAAA,GAAO,MAAP;IADuB;IAGzB,MAAMC,MAAA,GAAST,OAAA,CAAQS,MAAR,GAAiB,QAAjB,GAA4B,QAA3C;IAMA,IAAIC,eAAA,GAAkB9oC,IAAtB;IACA,IAAIA,IAAA,GAAOszB,aAAX,EAA0B;MACxBwV,eAAA,GAAkBxV,aAAlB;IADwB,CAA1B,MAEO,IAAItzB,IAAA,GAAOuzB,aAAX,EAA0B;MAC/BuV,eAAA,GAAkBvV,aAAlB;IAD+B;IAGjC,KAAK7J,OAAL,CAAawP,aAAb,GAA6Bl5B,IAAA,GAAO8oC,eAApC;IAEA,KAAK/gB,GAAL,CAAS3E,IAAT,GAAgB,GAAGylB,MAAO,IAAGD,IAAK,IAAGE,eAAgB,MAAKN,QAA1C,EAAhB;EAvDyB;EA0D3BO,qBAAqBlzC,IAArB,EAA2B;IACzB,KAAK6zB,OAAL,CAAakQ,iBAAb,GAAiC/jC,IAAjC;EADyB;EAI3BmzC,YAAYC,IAAZ,EAAkB;IAChB,KAAKvf,OAAL,CAAamQ,QAAb,GAAwBoP,IAAxB;EADgB;EAIlBC,SAASlkD,CAAT,EAAYI,CAAZ,EAAe;IACb,KAAKskC,OAAL,CAAa1kC,CAAb,GAAiB,KAAK0kC,OAAL,CAAa6P,KAAb,IAAsBv0C,CAAvC;IACA,KAAK0kC,OAAL,CAAatkC,CAAb,GAAiB,KAAKskC,OAAL,CAAa8P,KAAb,IAAsBp0C,CAAvC;EAFa;EAKf+jD,mBAAmBnkD,CAAnB,EAAsBI,CAAtB,EAAyB;IACvB,KAAK8iD,UAAL,CAAgB,CAAC9iD,CAAjB;IACA,KAAK8jD,QAAL,CAAclkD,CAAd,EAAiBI,CAAjB;EAFuB;EAKzBgkD,cAAc1T,CAAd,EAAiB3vC,CAAjB,EAAoBZ,CAApB,EAAuBwwC,CAAvB,EAA0B1yB,CAA1B,EAA6B2yB,CAA7B,EAAgC;IAC9B,KAAKlM,OAAL,CAAayP,UAAb,GAA0B,CAACzD,CAAD,EAAI3vC,CAAJ,EAAOZ,CAAP,EAAUwwC,CAAV,EAAa1yB,CAAb,EAAgB2yB,CAAhB,CAA1B;IACA,KAAKlM,OAAL,CAAa0P,eAAb,GAA+B30C,IAAA,CAAKqzC,KAAL,CAAWpC,CAAX,EAAc3vC,CAAd,CAA/B;IAEA,KAAK2jC,OAAL,CAAa1kC,CAAb,GAAiB,KAAK0kC,OAAL,CAAa6P,KAAb,GAAqB,CAAtC;IACA,KAAK7P,OAAL,CAAatkC,CAAb,GAAiB,KAAKskC,OAAL,CAAa8P,KAAb,GAAqB,CAAtC;EAL8B;EAQhC6P,SAAA,EAAW;IACT,KAAKH,QAAL,CAAc,CAAd,EAAiB,KAAKxf,OAAL,CAAa4P,OAA9B;EADS;EAIXgQ,UAAUC,SAAV,EAAqBvkD,CAArB,EAAwBI,CAAxB,EAA2BokD,gBAA3B,EAA6C;IAC3C,MAAMzhB,GAAA,GAAM,KAAKA,GAAjB;IACA,MAAM2B,OAAA,GAAU,KAAKA,OAArB;IACA,MAAMtG,IAAA,GAAOsG,OAAA,CAAQtG,IAArB;IACA,MAAMwW,iBAAA,GAAoBlQ,OAAA,CAAQkQ,iBAAlC;IACA,MAAMj+B,QAAA,GAAW+tB,OAAA,CAAQ/tB,QAAR,GAAmB+tB,OAAA,CAAQwP,aAA5C;IACA,MAAMuQ,cAAA,GACJ7P,iBAAA,GAAoBzG,sBAAA,CAAkBuW,gBADxC;IAEA,MAAMC,cAAA,GAAiB,CAAC,EACtB/P,iBAAA,GAAoBzG,sBAAA,CAAkByW,gBAAtC,CADF;IAGA,MAAM9P,WAAA,GAAcpQ,OAAA,CAAQoQ,WAAR,IAAuB,CAAC1W,IAAA,CAAKymB,WAAjD;IAEA,IAAIhC,SAAJ;IACA,IAAIzkB,IAAA,CAAKvU,eAAL,IAAwB86B,cAAxB,IAA0C7P,WAA9C,EAA2D;MACzD+N,SAAA,GAAYzkB,IAAA,CAAK0mB,gBAAL,CAAsB,KAAK1yB,UAA3B,EAAuCmyB,SAAvC,CAAZ;IADyD;IAI3D,IAAInmB,IAAA,CAAKvU,eAAL,IAAwBirB,WAA5B,EAAyC;MACvC/R,GAAA,CAAI2I,IAAJ;MACA3I,GAAA,CAAIoC,SAAJ,CAAcnlC,CAAd,EAAiBI,CAAjB;MACA2iC,GAAA,CAAImC,SAAJ;MACA2d,SAAA,CAAU9f,GAAV,EAAepsB,QAAf;MACA,IAAI6tC,gBAAJ,EAAsB;QACpBzhB,GAAA,CAAI2C,YAAJ,CAAiB,GAAG8e,gBAApB;MADoB;MAGtB,IACEC,cAAA,KAAmBtW,sBAAA,CAAkBxL,IAArC,IACA8hB,cAAA,KAAmBtW,sBAAA,CAAkB4W,WAFvC,EAGE;QACAhiB,GAAA,CAAIuC,IAAJ;MADA;MAGF,IACEmf,cAAA,KAAmBtW,sBAAA,CAAkBvL,MAArC,IACA6hB,cAAA,KAAmBtW,sBAAA,CAAkB4W,WAFvC,EAGE;QACAhiB,GAAA,CAAI+e,MAAJ;MADA;MAGF/e,GAAA,CAAImM,OAAJ;IApBuC,CAAzC,MAqBO;MACL,IACEuV,cAAA,KAAmBtW,sBAAA,CAAkBxL,IAArC,IACA8hB,cAAA,KAAmBtW,sBAAA,CAAkB4W,WAFvC,EAGE;QACAhiB,GAAA,CAAIiiB,QAAJ,CAAaT,SAAb,EAAwBvkD,CAAxB,EAA2BI,CAA3B;MADA;MAGF,IACEqkD,cAAA,KAAmBtW,sBAAA,CAAkBvL,MAArC,IACA6hB,cAAA,KAAmBtW,sBAAA,CAAkB4W,WAFvC,EAGE;QACAhiB,GAAA,CAAIkiB,UAAJ,CAAeV,SAAf,EAA0BvkD,CAA1B,EAA6BI,CAA7B;MADA;IAVG;IAeP,IAAIukD,cAAJ,EAAoB;MAClB,MAAMhC,KAAA,GAAS,KAAKC,gBAAL,KAA0B,EAAzC;MACAD,KAAA,CAAM9zC,IAAN,CAAW;QACT6kB,SAAA,EAAW+O,qCAAA,CAAoBM,GAApB,CADF;QAET/iC,CAFS;QAGTI,CAHS;QAITuW,QAJS;QAKTksC;MALS,CAAX;IAFkB;EAtDuB;EAkE7C,IAAIqC,uBAAJA,CAAA,EAA8B;IAG5B,MAAM;MAAE9gC,OAAA,EAAS2e;IAAX,IAAmB,KAAK+B,cAAL,CAAoBC,SAApB,CACvB,yBADuB,EAEvB,EAFuB,EAGvB,EAHuB,CAAzB;IAKAhC,GAAA,CAAInQ,KAAJ,CAAU,GAAV,EAAe,CAAf;IACAmQ,GAAA,CAAIiiB,QAAJ,CAAa,GAAb,EAAkB,CAAlB,EAAqB,EAArB;IACA,MAAMthD,IAAA,GAAOq/B,GAAA,CAAIkX,YAAJ,CAAiB,CAAjB,EAAoB,CAApB,EAAuB,EAAvB,EAA2B,EAA3B,EAA+Bv2C,IAA5C;IACA,IAAIy6B,OAAA,GAAU,KAAd;IACA,KAAK,IAAI9hB,CAAA,GAAI,CAAR,EAAWA,CAAA,GAAI3Y,IAAA,CAAKuK,MAAzB,EAAiCoO,CAAA,IAAK,CAAtC,EAAyC;MACvC,IAAI3Y,IAAA,CAAK2Y,CAAL,IAAU,CAAV,IAAe3Y,IAAA,CAAK2Y,CAAL,IAAU,GAA7B,EAAkC;QAChC8hB,OAAA,GAAU,IAAV;QACA;MAFgC;IADK;IAMzC,OAAO/7B,eAAA,CAAO,IAAP,EAAa,yBAAb,EAAwC+7B,OAAxC,CAAP;EAlB4B;EAqB9BgnB,SAASC,MAAT,EAAiB;IACf,MAAM1gB,OAAA,GAAU,KAAKA,OAArB;IACA,MAAMtG,IAAA,GAAOsG,OAAA,CAAQtG,IAArB;IACA,IAAIA,IAAA,CAAKklB,WAAT,EAAsB;MACpB,OAAO,KAAK+B,aAAL,CAAmBD,MAAnB,CAAP;IADoB;IAItB,MAAMzuC,QAAA,GAAW+tB,OAAA,CAAQ/tB,QAAzB;IACA,IAAIA,QAAA,KAAa,CAAjB,EAAoB;MAClB,OAAOqC,SAAP;IADkB;IAIpB,MAAM+pB,GAAA,GAAM,KAAKA,GAAjB;IACA,MAAMmR,aAAA,GAAgBxP,OAAA,CAAQwP,aAA9B;IACA,MAAMO,WAAA,GAAc/P,OAAA,CAAQ+P,WAA5B;IACA,MAAMC,WAAA,GAAchQ,OAAA,CAAQgQ,WAA5B;IACA,MAAM2O,aAAA,GAAgB3e,OAAA,CAAQ2e,aAA9B;IACA,MAAM1O,UAAA,GAAajQ,OAAA,CAAQiQ,UAAR,GAAqB0O,aAAxC;IACA,MAAMiC,YAAA,GAAeF,MAAA,CAAOn3C,MAA5B;IACA,MAAMs3C,QAAA,GAAWnnB,IAAA,CAAKmnB,QAAtB;IACA,MAAMC,UAAA,GAAaD,QAAA,GAAW,CAAX,GAAe,CAAC,CAAnC;IACA,MAAME,eAAA,GAAkBrnB,IAAA,CAAKqnB,eAA7B;IACA,MAAMC,iBAAA,GAAoB/uC,QAAA,GAAW+tB,OAAA,CAAQ2P,UAAR,CAAmB,CAAnB,CAArC;IAEA,MAAMsR,cAAA,GACJjhB,OAAA,CAAQkQ,iBAAR,KAA8BzG,sBAAA,CAAkBxL,IAAhD,IACA,CAACvE,IAAA,CAAKvU,eADN,IAEA,CAAC6a,OAAA,CAAQoQ,WAHX;IAKA/R,GAAA,CAAI2I,IAAJ;IACA3I,GAAA,CAAIrP,SAAJ,CAAc,GAAGgR,OAAA,CAAQyP,UAAzB;IACApR,GAAA,CAAIoC,SAAJ,CAAcT,OAAA,CAAQ1kC,CAAtB,EAAyB0kC,OAAA,CAAQtkC,CAAR,GAAYskC,OAAA,CAAQmQ,QAA7C;IAEA,IAAIwO,aAAA,GAAgB,CAApB,EAAuB;MACrBtgB,GAAA,CAAInQ,KAAJ,CAAU+hB,UAAV,EAAsB,CAAC,CAAvB;IADqB,CAAvB,MAEO;MACL5R,GAAA,CAAInQ,KAAJ,CAAU+hB,UAAV,EAAsB,CAAtB;IADK;IAIP,IAAI6P,gBAAJ;IACA,IAAI9f,OAAA,CAAQoQ,WAAZ,EAAyB;MACvB/R,GAAA,CAAI2I,IAAJ;MACA,MAAMlH,OAAA,GAAUE,OAAA,CAAQj4B,SAAR,CAAkB42B,UAAlB,CACdN,GADc,EAEd,IAFc,EAGdqL,4CAAA,CAA2BrL,GAA3B,CAHc,EAIdL,QAAA,CAASC,IAJK,CAAhB;MAMA6hB,gBAAA,GAAmB/hB,qCAAA,CAAoBM,GAApB,CAAnB;MACAA,GAAA,CAAImM,OAAJ;MACAnM,GAAA,CAAIsC,SAAJ,GAAgBb,OAAhB;IAVuB;IAazB,IAAIwQ,SAAA,GAAYtQ,OAAA,CAAQsQ,SAAxB;IACA,MAAMpiB,KAAA,GAAQ8R,OAAA,CAAQ0P,eAAtB;IACA,IAAIxhB,KAAA,KAAU,CAAV,IAAeoiB,SAAA,KAAc,CAAjC,EAAoC;MAClC,MAAMyP,cAAA,GACJ/f,OAAA,CAAQkQ,iBAAR,GAA4BzG,sBAAA,CAAkBuW,gBADhD;MAEA,IACED,cAAA,KAAmBtW,sBAAA,CAAkBvL,MAArC,IACA6hB,cAAA,KAAmBtW,sBAAA,CAAkB4W,WAFvC,EAGE;QACA/P,SAAA,GAAY,KAAK4Q,mBAAL,EAAZ;MADA;IANgC,CAApC,MASO;MACL5Q,SAAA,IAAapiB,KAAb;IADK;IAIP,IAAIshB,aAAA,KAAkB,GAAtB,EAA2B;MACzBnR,GAAA,CAAInQ,KAAJ,CAAUshB,aAAV,EAAyBA,aAAzB;MACAc,SAAA,IAAad,aAAb;IAFyB;IAK3BnR,GAAA,CAAIiS,SAAJ,GAAgBA,SAAhB;IAEA,IAAI5W,IAAA,CAAKynB,kBAAT,EAA6B;MAC3B,MAAMC,KAAA,GAAQ,EAAd;MACA,IAAI1iD,KAAA,GAAQ,CAAZ;MACA,WAAW2iD,KAAX,IAAoBX,MAApB,EAA4B;QAC1BU,KAAA,CAAMj3C,IAAN,CAAWk3C,KAAA,CAAMC,OAAjB;QACA5iD,KAAA,IAAS2iD,KAAA,CAAM3iD,KAAf;MAF0B;MAI5B2/B,GAAA,CAAIiiB,QAAJ,CAAac,KAAA,CAAM1kD,IAAN,CAAW,EAAX,CAAb,EAA6B,CAA7B,EAAgC,CAAhC;MACAsjC,OAAA,CAAQ1kC,CAAR,IAAaoD,KAAA,GAAQsiD,iBAAR,GAA4B/Q,UAAzC;MACA5R,GAAA,CAAImM,OAAJ;MACA,KAAK2R,OAAL;MAEA,OAAO7nC,SAAP;IAZ2B;IAe7B,IAAIhZ,CAAA,GAAI,CAAR;MACEqc,CADF;IAEA,KAAKA,CAAA,GAAI,CAAT,EAAYA,CAAA,GAAIipC,YAAhB,EAA8B,EAAEjpC,CAAhC,EAAmC;MACjC,MAAM0pC,KAAA,GAAQX,MAAA,CAAO/oC,CAAP,CAAd;MACA,IAAI,OAAO0pC,KAAP,KAAiB,QAArB,EAA+B;QAC7B/lD,CAAA,IAAMwlD,UAAA,GAAaO,KAAb,GAAqBpvC,QAAtB,GAAkC,IAAvC;QACA;MAF6B;MAK/B,IAAIsvC,aAAA,GAAgB,KAApB;MACA,MAAMlD,OAAA,GAAW,CAAAgD,KAAA,CAAMG,OAAN,GAAgBxR,WAAhB,GAA8B,CAA9B,IAAmCD,WAApD;MACA,MAAM8P,SAAA,GAAYwB,KAAA,CAAMI,QAAxB;MACA,MAAMC,MAAA,GAASL,KAAA,CAAMK,MAArB;MACA,IAAIC,OAAJ,EAAaC,OAAb;MACA,IAAIljD,KAAA,GAAQ2iD,KAAA,CAAM3iD,KAAlB;MACA,IAAImiD,QAAJ,EAAc;QACZ,MAAMgB,OAAA,GAAUR,KAAA,CAAMQ,OAAN,IAAiBd,eAAjC;QACA,MAAMe,EAAA,GACJ,EAAET,KAAA,CAAMQ,OAAN,GAAgBA,OAAA,CAAQ,CAAR,CAAhB,GAA6BnjD,KAAA,GAAQ,GAArC,CAAF,GAA8CsiD,iBADhD;QAEA,MAAMe,EAAA,GAAKF,OAAA,CAAQ,CAAR,IAAab,iBAAxB;QAEAtiD,KAAA,GAAQmjD,OAAA,GAAU,CAACA,OAAA,CAAQ,CAAR,CAAX,GAAwBnjD,KAAhC;QACAijD,OAAA,GAAUG,EAAA,GAAKtS,aAAf;QACAoS,OAAA,GAAW,CAAAtmD,CAAA,GAAIymD,EAAJ,IAAUvS,aAArB;MARY,CAAd,MASO;QACLmS,OAAA,GAAUrmD,CAAA,GAAIk0C,aAAd;QACAoS,OAAA,GAAU,CAAV;MAFK;MAKP,IAAIloB,IAAA,CAAKsoB,SAAL,IAAkBtjD,KAAA,GAAQ,CAA9B,EAAiC;QAI/B,MAAMujD,aAAA,GACF5jB,GAAA,CAAI6jB,WAAJ,CAAgBrC,SAAhB,EAA2BnhD,KAA3B,GAAmC,IAApC,GAA4CuT,QAA7C,GACAu9B,aAFF;QAGA,IAAI9wC,KAAA,GAAQujD,aAAR,IAAyB,KAAKzB,uBAAlC,EAA2D;UACzD,MAAM2B,eAAA,GAAkBzjD,KAAA,GAAQujD,aAAhC;UACAV,aAAA,GAAgB,IAAhB;UACAljB,GAAA,CAAI2I,IAAJ;UACA3I,GAAA,CAAInQ,KAAJ,CAAUi0B,eAAV,EAA2B,CAA3B;UACAR,OAAA,IAAWQ,eAAX;QALyD,CAA3D,MAMO,IAAIzjD,KAAA,KAAUujD,aAAd,EAA6B;UAClCN,OAAA,IACK,CAAAjjD,KAAA,GAAQujD,aAAR,IAAyB,IAA3B,GAAmChwC,QAApC,GAAgDu9B,aADlD;QADkC;MAbL;MAqBjC,IAAI,KAAK6H,cAAL,KAAwBgK,KAAA,CAAMe,QAAN,IAAkB1oB,IAAA,CAAKymB,WAAvB,CAA5B,EAAiE;QAC/D,IAAIc,cAAA,IAAkB,CAACS,MAAvB,EAA+B;UAE7BrjB,GAAA,CAAIiiB,QAAJ,CAAaT,SAAb,EAAwB8B,OAAxB,EAAiCC,OAAjC;QAF6B,CAA/B,MAGO;UACL,KAAKhC,SAAL,CAAeC,SAAf,EAA0B8B,OAA1B,EAAmCC,OAAnC,EAA4C9B,gBAA5C;UACA,IAAI4B,MAAJ,EAAY;YACV,MAAMW,aAAA,GACJV,OAAA,GAAW1vC,QAAA,GAAWyvC,MAAA,CAAOY,MAAP,CAAchnD,CAA1B,GAA+Bk0C,aAD3C;YAEA,MAAM+S,aAAA,GACJX,OAAA,GAAW3vC,QAAA,GAAWyvC,MAAA,CAAOY,MAAP,CAAc5mD,CAA1B,GAA+B8zC,aAD3C;YAEA,KAAKoQ,SAAL,CACE8B,MAAA,CAAOD,QADT,EAEEY,aAFF,EAGEE,aAHF,EAIEzC,gBAJF;UALU;QAFP;MAJwD;MAqBjE,MAAM0C,SAAA,GAAY3B,QAAA,GACdniD,KAAA,GAAQsiD,iBAAR,GAA4B3C,OAAA,GAAUM,aADxB,GAEdjgD,KAAA,GAAQsiD,iBAAR,GAA4B3C,OAAA,GAAUM,aAF1C;MAGArjD,CAAA,IAAKknD,SAAL;MAEA,IAAIjB,aAAJ,EAAmB;QACjBljB,GAAA,CAAImM,OAAJ;MADiB;IA1Ec;IA8EnC,IAAIqW,QAAJ,EAAc;MACZ7gB,OAAA,CAAQtkC,CAAR,IAAaJ,CAAb;IADY,CAAd,MAEO;MACL0kC,OAAA,CAAQ1kC,CAAR,IAAaA,CAAA,GAAI20C,UAAjB;IADK;IAGP5R,GAAA,CAAImM,OAAJ;IACA,KAAK2R,OAAL;IAEA,OAAO7nC,SAAP;EAlLe;EAqLjBqsC,cAAcD,MAAd,EAAsB;IAEpB,MAAMriB,GAAA,GAAM,KAAKA,GAAjB;IACA,MAAM2B,OAAA,GAAU,KAAKA,OAArB;IACA,MAAMtG,IAAA,GAAOsG,OAAA,CAAQtG,IAArB;IACA,MAAMznB,QAAA,GAAW+tB,OAAA,CAAQ/tB,QAAzB;IACA,MAAM0sC,aAAA,GAAgB3e,OAAA,CAAQ2e,aAA9B;IACA,MAAMmC,UAAA,GAAapnB,IAAA,CAAKmnB,QAAL,GAAgB,CAAhB,GAAoB,CAAC,CAAxC;IACA,MAAM9Q,WAAA,GAAc/P,OAAA,CAAQ+P,WAA5B;IACA,MAAMC,WAAA,GAAchQ,OAAA,CAAQgQ,WAA5B;IACA,MAAMC,UAAA,GAAajQ,OAAA,CAAQiQ,UAAR,GAAqB0O,aAAxC;IACA,MAAMhP,UAAA,GAAa3P,OAAA,CAAQ2P,UAAR,IAAsBrG,yBAAzC;IACA,MAAMsX,YAAA,GAAeF,MAAA,CAAOn3C,MAA5B;IACA,MAAMk5C,eAAA,GACJziB,OAAA,CAAQkQ,iBAAR,KAA8BzG,sBAAA,CAAkBiZ,SADlD;IAEA,IAAI/qC,CAAJ,EAAO0pC,KAAP,EAAc3iD,KAAd,EAAqBikD,aAArB;IAEA,IAAIF,eAAA,IAAmBxwC,QAAA,KAAa,CAApC,EAAuC;MACrC;IADqC;IAGvC,KAAKylC,uBAAL,CAA6B,CAA7B,IAAkC,CAAC,CAAnC;IACA,KAAKC,0BAAL,GAAkC,IAAlC;IAEAtZ,GAAA,CAAI2I,IAAJ;IACA3I,GAAA,CAAIrP,SAAJ,CAAc,GAAGgR,OAAA,CAAQyP,UAAzB;IACApR,GAAA,CAAIoC,SAAJ,CAAcT,OAAA,CAAQ1kC,CAAtB,EAAyB0kC,OAAA,CAAQtkC,CAAjC;IAEA2iC,GAAA,CAAInQ,KAAJ,CAAU+hB,UAAV,EAAsB0O,aAAtB;IAEA,KAAKhnC,CAAA,GAAI,CAAT,EAAYA,CAAA,GAAIipC,YAAhB,EAA8B,EAAEjpC,CAAhC,EAAmC;MACjC0pC,KAAA,GAAQX,MAAA,CAAO/oC,CAAP,CAAR;MACA,IAAI,OAAO0pC,KAAP,KAAiB,QAArB,EAA+B;QAC7BsB,aAAA,GAAiB7B,UAAA,GAAaO,KAAb,GAAqBpvC,QAAtB,GAAkC,IAAlD;QACA,KAAKosB,GAAL,CAASoC,SAAT,CAAmBkiB,aAAnB,EAAkC,CAAlC;QACA3iB,OAAA,CAAQ1kC,CAAR,IAAaqnD,aAAA,GAAgB1S,UAA7B;QACA;MAJ6B;MAO/B,MAAMoO,OAAA,GAAW,CAAAgD,KAAA,CAAMG,OAAN,GAAgBxR,WAAhB,GAA8B,CAA9B,IAAmCD,WAApD;MACA,MAAMlgB,YAAA,GAAe6J,IAAA,CAAKkpB,oBAAL,CAA0BvB,KAAA,CAAMwB,cAAhC,CAArB;MACA,IAAI,CAAChzB,YAAL,EAAmB;QACjBhyB,aAAA,CAAM,oBAAmBwjD,KAAA,CAAMwB,cAAe,qBAA9C;QACA;MAFiB;MAInB,IAAI,KAAKxL,cAAT,EAAyB;QACvB,KAAKN,eAAL,GAAuBsK,KAAvB;QACA,KAAKra,IAAL;QACA3I,GAAA,CAAInQ,KAAJ,CAAUjc,QAAV,EAAoBA,QAApB;QACAosB,GAAA,CAAIrP,SAAJ,CAAc,GAAG2gB,UAAjB;QACA,KAAKvT,mBAAL,CAAyBvM,YAAzB;QACA,KAAK2a,OAAL;MANuB;MASzB,MAAMsY,WAAA,GAAcllD,SAAA,CAAKizC,cAAL,CAAoB,CAACwQ,KAAA,CAAM3iD,KAAP,EAAc,CAAd,CAApB,EAAsCixC,UAAtC,CAApB;MACAjxC,KAAA,GAAQokD,WAAA,CAAY,CAAZ,IAAiB7wC,QAAjB,GAA4BosC,OAApC;MAEAhgB,GAAA,CAAIoC,SAAJ,CAAc/hC,KAAd,EAAqB,CAArB;MACAshC,OAAA,CAAQ1kC,CAAR,IAAaoD,KAAA,GAAQuxC,UAArB;IA5BiC;IA8BnC5R,GAAA,CAAImM,OAAJ;IACA,KAAKuM,eAAL,GAAuB,IAAvB;EA5DoB;EAgEtBgM,aAAaC,MAAb,EAAqBC,MAArB,EAA6B;EAK7BC,sBAAsBF,MAAtB,EAA8BC,MAA9B,EAAsCE,GAAtC,EAA2CC,GAA3C,EAAgDC,GAAhD,EAAqDC,GAArD,EAA0D;IACxD,KAAKjlB,GAAL,CAAS5/B,IAAT,CAAc0kD,GAAd,EAAmBC,GAAnB,EAAwBC,GAAA,GAAMF,GAA9B,EAAmCG,GAAA,GAAMF,GAAzC;IACA,KAAK/kB,GAAL,CAASI,IAAT;IACA,KAAK+I,OAAL;EAHwD;EAO1D+b,kBAAkB1kB,EAAlB,EAAsB;IACpB,IAAIiB,OAAJ;IACA,IAAIjB,EAAA,CAAG,CAAH,MAAU,eAAd,EAA+B;MAC7B,MAAMtiC,KAAA,GAAQsiC,EAAA,CAAG,CAAH,CAAd;MACA,MAAM6B,aAAA,GAAgB,KAAKA,aAAL,IAAsB3C,qCAAA,CAAoB,KAAKM,GAAzB,CAA5C;MACA,MAAMuH,qBAAA,GAAwB;QAC5Ba,oBAAA,EAAsBpI,GAAA,IAAO;UAC3B,OAAO,IAAInc,cAAJ,CACLmc,GADK,EAEL,KAAK3Q,UAFA,EAGL,KAAKC,IAHA,EAIL,KAAK3H,aAJA,EAKL,KAAKC,aALA,EAML;YACEgL,qBAAA,EAAuB,KAAKA,qBAD9B;YAEEulB,kBAAA,EAAoB,KAAKA;UAF3B,CANK,CAAP;QAD2B;MADD,CAA9B;MAeA1W,OAAA,GAAU,IAAI6F,aAAJ,CACR9G,EADQ,EAERtiC,KAFQ,EAGR,KAAK8hC,GAHG,EAIRuH,qBAJQ,EAKRlF,aALQ,CAAV;IAlB6B,CAA/B,MAyBO;MACLZ,OAAA,GAAU,KAAK0jB,WAAL,CAAiB3kB,EAAA,CAAG,CAAH,CAAjB,EAAwBA,EAAA,CAAG,CAAH,CAAxB,CAAV;IADK;IAGP,OAAOiB,OAAP;EA9BoB;EAiCtB2jB,gBAAA,EAAkB;IAChB,KAAKzjB,OAAL,CAAa93B,WAAb,GAA2B,KAAKq7C,iBAAL,CAAuBG,SAAvB,CAA3B;EADgB;EAIlBC,cAAA,EAAgB;IACd,KAAK3jB,OAAL,CAAaj4B,SAAb,GAAyB,KAAKw7C,iBAAL,CAAuBG,SAAvB,CAAzB;IACA,KAAK1jB,OAAL,CAAaoQ,WAAb,GAA2B,IAA3B;EAFc;EAKhBwT,kBAAkBxnD,CAAlB,EAAqBN,CAArB,EAAwBO,CAAxB,EAA2B;IACzB,MAAME,KAAA,GAAQqB,SAAA,CAAKmI,YAAL,CAAkB3J,CAAlB,EAAqBN,CAArB,EAAwBO,CAAxB,CAAd;IACA,KAAKgiC,GAAL,CAASoJ,WAAT,GAAuBlrC,KAAvB;IACA,KAAKyjC,OAAL,CAAa93B,WAAb,GAA2B3L,KAA3B;EAHyB;EAM3BsnD,gBAAgBznD,CAAhB,EAAmBN,CAAnB,EAAsBO,CAAtB,EAAyB;IACvB,MAAME,KAAA,GAAQqB,SAAA,CAAKmI,YAAL,CAAkB3J,CAAlB,EAAqBN,CAArB,EAAwBO,CAAxB,CAAd;IACA,KAAKgiC,GAAL,CAASsC,SAAT,GAAqBpkC,KAArB;IACA,KAAKyjC,OAAL,CAAaj4B,SAAb,GAAyBxL,KAAzB;IACA,KAAKyjC,OAAL,CAAaoQ,WAAb,GAA2B,KAA3B;EAJuB;EAOzBoT,YAAYlpB,KAAZ,EAAmB8E,MAAA,GAAS,IAA5B,EAAkC;IAChC,IAAIU,OAAJ;IACA,IAAI,KAAKwX,cAAL,CAAoBlsC,GAApB,CAAwBkvB,KAAxB,CAAJ,EAAoC;MAClCwF,OAAA,GAAU,KAAKwX,cAAL,CAAoB7oC,GAApB,CAAwB6rB,KAAxB,CAAV;IADkC,CAApC,MAEO;MACLwF,OAAA,GAAUyF,iBAAA,CAAkB,KAAKsS,SAAL,CAAevd,KAAf,CAAlB,CAAV;MACA,KAAKgd,cAAL,CAAoB55B,GAApB,CAAwB4c,KAAxB,EAA+BwF,OAA/B;IAFK;IAIP,IAAIV,MAAJ,EAAY;MACVU,OAAA,CAAQV,MAAR,GAAiBA,MAAjB;IADU;IAGZ,OAAOU,OAAP;EAXgC;EAclCgkB,YAAYxpB,KAAZ,EAAmB;IACjB,IAAI,CAAC,KAAK+c,cAAV,EAA0B;MACxB;IADwB;IAG1B,MAAMhZ,GAAA,GAAM,KAAKA,GAAjB;IAEA,KAAK2I,IAAL;IACA,MAAMlH,OAAA,GAAU,KAAK0jB,WAAL,CAAiBlpB,KAAjB,CAAhB;IACA+D,GAAA,CAAIsC,SAAJ,GAAgBb,OAAA,CAAQnB,UAAR,CACdN,GADc,EAEd,IAFc,EAGdqL,4CAAA,CAA2BrL,GAA3B,CAHc,EAIdL,QAAA,CAASG,OAJK,CAAhB;IAOA,MAAM4lB,GAAA,GAAMra,4CAAA,CAA2BrL,GAA3B,CAAZ;IACA,IAAI0lB,GAAJ,EAAS;MACP,MAAM;QAAErlD,KAAF;QAASC;MAAT,IAAoB0/B,GAAA,CAAIvgB,MAA9B;MACA,MAAM,CAACooB,EAAD,EAAKC,EAAL,EAAStE,EAAT,EAAaE,EAAb,IAAmBnkC,SAAA,CAAK88C,0BAAL,CACvB,CAAC,CAAD,EAAI,CAAJ,EAAOh8C,KAAP,EAAcC,MAAd,CADuB,EAEvBolD,GAFuB,CAAzB;MAKA,KAAK1lB,GAAL,CAAS4Z,QAAT,CAAkB/R,EAAlB,EAAsBC,EAAtB,EAA0BtE,EAAA,GAAKqE,EAA/B,EAAmCnE,EAAA,GAAKoE,EAAxC;IAPO,CAAT,MAQO;MAOL,KAAK9H,GAAL,CAAS4Z,QAAT,CAAkB,CAAC,IAAnB,EAAyB,CAAC,IAA1B,EAAgC,IAAhC,EAAsC,IAAtC;IAPK;IAUP,KAAKkE,OAAL,CAAa,KAAKnc,OAAL,CAAaC,yBAAb,EAAb;IACA,KAAKuK,OAAL;EAnCiB;EAuCnBwZ,iBAAA,EAAmB;IACjBrmD,oBAAA,CAAY,kCAAZ;EADiB;EAInBsmD,eAAA,EAAiB;IACftmD,oBAAA,CAAY,gCAAZ;EADe;EAIjBumD,sBAAsB9kB,MAAtB,EAA8Bd,IAA9B,EAAoC;IAClC,IAAI,CAAC,KAAK+Y,cAAV,EAA0B;MACxB;IADwB;IAG1B,KAAKrQ,IAAL;IACA,KAAKgQ,kBAAL,CAAwB7sC,IAAxB,CAA6B,KAAKu2B,aAAlC;IAEA,IAAI50B,KAAA,CAAMC,OAAN,CAAcqzB,MAAd,KAAyBA,MAAA,CAAO71B,MAAP,KAAkB,CAA/C,EAAkD;MAChD,KAAKylB,SAAL,CAAe,GAAGoQ,MAAlB;IADgD;IAIlD,KAAKsB,aAAL,GAAqB3C,qCAAA,CAAoB,KAAKM,GAAzB,CAArB;IAEA,IAAIC,IAAJ,EAAU;MACR,MAAM5/B,KAAA,GAAQ4/B,IAAA,CAAK,CAAL,IAAUA,IAAA,CAAK,CAAL,CAAxB;MACA,MAAM3/B,MAAA,GAAS2/B,IAAA,CAAK,CAAL,IAAUA,IAAA,CAAK,CAAL,CAAzB;MACA,KAAKD,GAAL,CAAS5/B,IAAT,CAAc6/B,IAAA,CAAK,CAAL,CAAd,EAAuBA,IAAA,CAAK,CAAL,CAAvB,EAAgC5/B,KAAhC,EAAuCC,MAAvC;MACA,KAAKqhC,OAAL,CAAauH,gBAAb,CAA8BxJ,qCAAA,CAAoB,KAAKM,GAAzB,CAA9B,EAA6DC,IAA7D;MACA,KAAKG,IAAL;MACA,KAAK+I,OAAL;IANQ;EAbwB;EAuBpC2c,oBAAA,EAAsB;IACpB,IAAI,CAAC,KAAK9M,cAAV,EAA0B;MACxB;IADwB;IAG1B,KAAK7M,OAAL;IACA,KAAK9J,aAAL,GAAqB,KAAKsW,kBAAL,CAAwBsF,GAAxB,EAArB;EALoB;EAQtB8H,WAAWC,KAAX,EAAkB;IAChB,IAAI,CAAC,KAAKhN,cAAV,EAA0B;MACxB;IADwB;IAI1B,KAAKrQ,IAAL;IAGA,IAAI,KAAKkS,WAAT,EAAsB;MACpB,KAAK8C,YAAL;MACA,KAAKhc,OAAL,CAAauQ,WAAb,GAA2B,IAA3B;IAFoB;IAKtB,MAAM+T,UAAA,GAAa,KAAKjmB,GAAxB;IAcA,IAAI,CAACgmB,KAAA,CAAME,QAAX,EAAqB;MACnBjkC,aAAA,CAAK,oCAAL;IADmB;IAMrB,IAAI+jC,KAAA,CAAMG,QAAV,EAAoB;MAClB3mD,aAAA,CAAK,gCAAL;IADkB;IAIpB,MAAMu8C,gBAAA,GAAmBrc,qCAAA,CAAoBumB,UAApB,CAAzB;IACA,IAAID,KAAA,CAAMjlB,MAAV,EAAkB;MAChBklB,UAAA,CAAWt1B,SAAX,CAAqB,GAAGq1B,KAAA,CAAMjlB,MAA9B;IADgB;IAGlB,IAAI,CAACilB,KAAA,CAAM/lB,IAAX,EAAiB;MACf,MAAM,IAAIjb,KAAJ,CAAU,2BAAV,CAAN;IADe;IAMjB,IAAIohC,MAAA,GAAS7mD,SAAA,CAAK88C,0BAAL,CACX2J,KAAA,CAAM/lB,IADK,EAEXP,qCAAA,CAAoBumB,UAApB,CAFW,CAAb;IAKA,MAAMI,YAAA,GAAe,CACnB,CADmB,EAEnB,CAFmB,EAGnBJ,UAAA,CAAWxmC,MAAX,CAAkBpf,KAHC,EAInB4lD,UAAA,CAAWxmC,MAAX,CAAkBnf,MAJC,CAArB;IAMA8lD,MAAA,GAAS7mD,SAAA,CAAK8c,SAAL,CAAe+pC,MAAf,EAAuBC,YAAvB,KAAwC,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,CAAjD;IAGA,MAAMv2B,OAAA,GAAUpzB,IAAA,CAAKC,KAAL,CAAWypD,MAAA,CAAO,CAAP,CAAX,CAAhB;IACA,MAAMr2B,OAAA,GAAUrzB,IAAA,CAAKC,KAAL,CAAWypD,MAAA,CAAO,CAAP,CAAX,CAAhB;IACA,IAAI9J,UAAA,GAAa5/C,IAAA,CAAKE,GAAL,CAASF,IAAA,CAAKmlC,IAAL,CAAUukB,MAAA,CAAO,CAAP,CAAV,IAAuBt2B,OAAhC,EAAyC,CAAzC,CAAjB;IACA,IAAIysB,WAAA,GAAc7/C,IAAA,CAAKE,GAAL,CAASF,IAAA,CAAKmlC,IAAL,CAAUukB,MAAA,CAAO,CAAP,CAAV,IAAuBr2B,OAAhC,EAAyC,CAAzC,CAAlB;IACA,IAAI0T,MAAA,GAAS,CAAb;MACEE,MAAA,GAAS,CADX;IAEA,IAAI2Y,UAAA,GAAa7Q,cAAjB,EAAiC;MAC/BhI,MAAA,GAAS6Y,UAAA,GAAa7Q,cAAtB;MACA6Q,UAAA,GAAa7Q,cAAb;IAF+B;IAIjC,IAAI8Q,WAAA,GAAc9Q,cAAlB,EAAkC;MAChC9H,MAAA,GAAS4Y,WAAA,GAAc9Q,cAAvB;MACA8Q,WAAA,GAAc9Q,cAAd;IAFgC;IAKlC,KAAK9J,OAAL,CAAayQ,sBAAb,CAAoC,CAAC,CAAD,EAAI,CAAJ,EAAOkK,UAAP,EAAmBC,WAAnB,CAApC;IAEA,IAAIqB,OAAA,GAAU,YAAY,KAAKvV,UAA/B;IACA,IAAI2d,KAAA,CAAM5O,KAAV,EAAiB;MAEfwG,OAAA,IAAW,YAAa,KAAK/E,YAAL,KAAsB,CAA9C;IAFe;IAIjB,MAAMgF,aAAA,GAAgB,KAAK9b,cAAL,CAAoBC,SAApB,CACpB4b,OADoB,EAEpBtB,UAFoB,EAGpBC,WAHoB,CAAtB;IAKA,MAAM+J,QAAA,GAAWzI,aAAA,CAAcx8B,OAA/B;IAIAilC,QAAA,CAASz2B,KAAT,CAAe,IAAI4T,MAAnB,EAA2B,IAAIE,MAA/B;IACA2iB,QAAA,CAASlkB,SAAT,CAAmB,CAACtS,OAApB,EAA6B,CAACC,OAA9B;IACAu2B,QAAA,CAAS31B,SAAT,CAAmB,GAAGorB,gBAAtB;IAEA,IAAIiK,KAAA,CAAM5O,KAAV,EAAiB;MAEf,KAAKwB,UAAL,CAAgB9sC,IAAhB,CAAqB;QACnB2T,MAAA,EAAQo+B,aAAA,CAAcp+B,MADH;QAEnB4B,OAAA,EAASilC,QAFU;QAGnBx2B,OAHmB;QAInBC,OAJmB;QAKnB0T,MALmB;QAMnBE,MANmB;QAOnBjjC,OAAA,EAASslD,KAAA,CAAM5O,KAAN,CAAY12C,OAPF;QAQnB61C,QAAA,EAAUyP,KAAA,CAAM5O,KAAN,CAAYb,QARH;QASnBL,WAAA,EAAa8P,KAAA,CAAM5O,KAAN,CAAYlB,WAAZ,IAA2B,IATrB;QAUnBqQ,qBAAA,EAAuB;MAVJ,CAArB;IAFe,CAAjB,MAcO;MAGLN,UAAA,CAAWtjB,YAAX,CAAwB,CAAxB,EAA2B,CAA3B,EAA8B,CAA9B,EAAiC,CAAjC,EAAoC,CAApC,EAAuC,CAAvC;MACAsjB,UAAA,CAAW7jB,SAAX,CAAqBtS,OAArB,EAA8BC,OAA9B;MACAk2B,UAAA,CAAWp2B,KAAX,CAAiB4T,MAAjB,EAAyBE,MAAzB;MACAsiB,UAAA,CAAWtd,IAAX;IANK;IAUPgM,YAAA,CAAasR,UAAb,EAAyBK,QAAzB;IACA,KAAKtmB,GAAL,GAAWsmB,QAAX;IACA,KAAKhJ,SAAL,CAAe,CACb,CAAC,IAAD,EAAO,aAAP,CADa,EAEb,CAAC,IAAD,EAAO,CAAP,CAFa,EAGb,CAAC,IAAD,EAAO,CAAP,CAHa,CAAf;IAKA,KAAK7E,UAAL,CAAgB3sC,IAAhB,CAAqBm6C,UAArB;IACA,KAAK5d,UAAL;EAhIgB;EAmIlBme,SAASR,KAAT,EAAgB;IACd,IAAI,CAAC,KAAKhN,cAAV,EAA0B;MACxB;IADwB;IAG1B,KAAK3Q,UAAL;IACA,MAAMie,QAAA,GAAW,KAAKtmB,GAAtB;IACA,MAAMA,GAAA,GAAM,KAAKyY,UAAL,CAAgBwF,GAAhB,EAAZ;IACA,KAAKje,GAAL,GAAWA,GAAX;IAGA,KAAKA,GAAL,CAAS0c,qBAAT,GAAiC,KAAjC;IAEA,IAAIsJ,KAAA,CAAM5O,KAAV,EAAiB;MACf,KAAK0B,SAAL,GAAiB,KAAKF,UAAL,CAAgBqF,GAAhB,EAAjB;MACA,KAAK9R,OAAL;IAFe,CAAjB,MAGO;MACL,KAAKnM,GAAL,CAASmM,OAAT;MACA,MAAMsa,UAAA,GAAa/mB,qCAAA,CAAoB,KAAKM,GAAzB,CAAnB;MACA,KAAKmM,OAAL;MACA,KAAKnM,GAAL,CAAS2I,IAAT;MACA,KAAK3I,GAAL,CAAS2C,YAAT,CAAsB,GAAG8jB,UAAzB;MACA,MAAM1I,QAAA,GAAWx+C,SAAA,CAAK88C,0BAAL,CACf,CAAC,CAAD,EAAI,CAAJ,EAAOiK,QAAA,CAAS7mC,MAAT,CAAgBpf,KAAvB,EAA8BimD,QAAA,CAAS7mC,MAAT,CAAgBnf,MAA9C,CADe,EAEfmmD,UAFe,CAAjB;MAIA,KAAKzmB,GAAL,CAAS8P,SAAT,CAAmBwW,QAAA,CAAS7mC,MAA5B,EAAoC,CAApC,EAAuC,CAAvC;MACA,KAAKugB,GAAL,CAASmM,OAAT;MACA,KAAK2R,OAAL,CAAaC,QAAb;IAZK;EAfO;EA+BhB2I,gBAAgBhhD,EAAhB,EAAoBtF,IAApB,EAA0BuwB,SAA1B,EAAqCoQ,MAArC,EAA6Cv6B,YAA7C,EAA2D;IAKzD,KAAK,CAAAo0C,mBAAL;IACA1F,iBAAA,CAAkB,KAAKlV,GAAvB;IAEA,KAAKA,GAAL,CAAS2I,IAAT;IACA,KAAKA,IAAL;IAEA,IAAI,KAAKtG,aAAT,EAAwB;MACtB,KAAKrC,GAAL,CAAS2C,YAAT,CAAsB,GAAG,KAAKN,aAA9B;IADsB;IAIxB,IAAI50B,KAAA,CAAMC,OAAN,CAActN,IAAd,KAAuBA,IAAA,CAAK8K,MAAL,KAAgB,CAA3C,EAA8C;MAC5C,MAAM7K,KAAA,GAAQD,IAAA,CAAK,CAAL,IAAUA,IAAA,CAAK,CAAL,CAAxB;MACA,MAAME,MAAA,GAASF,IAAA,CAAK,CAAL,IAAUA,IAAA,CAAK,CAAL,CAAzB;MAEA,IAAIoG,YAAA,IAAgB,KAAKiY,mBAAzB,EAA8C;QAC5CkS,SAAA,GAAYA,SAAA,CAAU9xB,KAAV,EAAZ;QACA8xB,SAAA,CAAU,CAAV,KAAgBvwB,IAAA,CAAK,CAAL,CAAhB;QACAuwB,SAAA,CAAU,CAAV,KAAgBvwB,IAAA,CAAK,CAAL,CAAhB;QAEAA,IAAA,GAAOA,IAAA,CAAKvB,KAAL,EAAP;QACAuB,IAAA,CAAK,CAAL,IAAUA,IAAA,CAAK,CAAL,IAAU,CAApB;QACAA,IAAA,CAAK,CAAL,IAAUC,KAAV;QACAD,IAAA,CAAK,CAAL,IAAUE,MAAV;QAEA,MAAM,CAACmjC,MAAD,EAASE,MAAT,IAAmBpkC,SAAA,CAAKunC,6BAAL,CACvBpH,qCAAA,CAAoB,KAAKM,GAAzB,CADuB,CAAzB;QAGA,MAAM;UAAEkZ;QAAF,IAAoB,IAA1B;QACA,MAAMyN,WAAA,GAAcjqD,IAAA,CAAKmlC,IAAL,CAClBxhC,KAAA,GAAQ,KAAK84C,YAAb,GAA4BD,aADV,CAApB;QAGA,MAAM0N,YAAA,GAAelqD,IAAA,CAAKmlC,IAAL,CACnBvhC,MAAA,GAAS,KAAK84C,YAAd,GAA6BF,aADV,CAArB;QAIA,KAAK2N,gBAAL,GAAwB,KAAKl/B,aAAL,CAAmBnnB,MAAnB,CACtBmmD,WADsB,EAEtBC,YAFsB,CAAxB;QAIA,MAAM;UAAEnnC,MAAF;UAAU4B;QAAV,IAAsB,KAAKwlC,gBAAjC;QACA,KAAKpoC,mBAAL,CAAyBY,GAAzB,CAA6B3Z,EAA7B,EAAiC+Z,MAAjC;QACA,KAAKonC,gBAAL,CAAsBC,QAAtB,GAAiC,KAAK9mB,GAAtC;QACA,KAAKA,GAAL,GAAW3e,OAAX;QACA,KAAK2e,GAAL,CAAS2I,IAAT;QACA,KAAK3I,GAAL,CAAS2C,YAAT,CAAsBc,MAAtB,EAA8B,CAA9B,EAAiC,CAAjC,EAAoC,CAACE,MAArC,EAA6C,CAA7C,EAAgDrjC,MAAA,GAASqjC,MAAzD;QAEAuR,iBAAA,CAAkB,KAAKlV,GAAvB;MAhC4C,CAA9C,MAiCO;QACLkV,iBAAA,CAAkB,KAAKlV,GAAvB;QAEA,KAAKA,GAAL,CAAS5/B,IAAT,CAAcA,IAAA,CAAK,CAAL,CAAd,EAAuBA,IAAA,CAAK,CAAL,CAAvB,EAAgCC,KAAhC,EAAuCC,MAAvC;QACA,KAAK0/B,GAAL,CAASI,IAAT;QACA,KAAK+I,OAAL;MALK;IArCqC;IA8C9C,KAAKxH,OAAL,GAAe,IAAIsP,gBAAJ,CACb,KAAKjR,GAAL,CAASvgB,MAAT,CAAgBpf,KADH,EAEb,KAAK2/B,GAAL,CAASvgB,MAAT,CAAgBnf,MAFH,CAAf;IAKA,KAAKqwB,SAAL,CAAe,GAAGA,SAAlB;IACA,KAAKA,SAAL,CAAe,GAAGoQ,MAAlB;EAnEyD;EAsE3DgmB,cAAA,EAAgB;IACd,IAAI,KAAKF,gBAAT,EAA2B;MACzB,KAAK7mB,GAAL,CAASmM,OAAT;MACA,KAAK,CAAA4O,UAAL;MAEA,KAAK/a,GAAL,GAAW,KAAK6mB,gBAAL,CAAsBC,QAAjC;MACA,OAAO,KAAKD,gBAAL,CAAsBC,QAA7B;MACA,OAAO,KAAKD,gBAAZ;IANyB;EADb;EAWhBG,sBAAsB5L,GAAtB,EAA2B;IACzB,IAAI,CAAC,KAAKpC,cAAV,EAA0B;MACxB;IADwB;IAG1B,MAAMvI,KAAA,GAAQ2K,GAAA,CAAI3K,KAAlB;IACA2K,GAAA,GAAM,KAAK5B,SAAL,CAAe4B,GAAA,CAAIz6C,IAAnB,EAAyBy6C,GAAzB,CAAN;IACAA,GAAA,CAAI3K,KAAJ,GAAYA,KAAZ;IAEA,MAAMzQ,GAAA,GAAM,KAAKA,GAAjB;IACA,MAAMgjB,KAAA,GAAQ,KAAKtK,eAAnB;IAEA,IAAIsK,KAAJ,EAAW;MACT,IAAIA,KAAA,CAAMiE,QAAN,KAAmBhxC,SAAvB,EAAkC;QAChC+sC,KAAA,CAAMiE,QAAN,GAAiBjX,iBAAA,CAAkBoL,GAAlB,CAAjB;MADgC;MAIlC,IAAI4H,KAAA,CAAMiE,QAAV,EAAoB;QAClBjE,KAAA,CAAMiE,QAAN,CAAejnB,GAAf;QACA;MAFkB;IALX;IAUX,MAAMwQ,IAAA,GAAO,KAAKqL,iBAAL,CAAuBT,GAAvB,CAAb;IACA,MAAMa,UAAA,GAAazL,IAAA,CAAK/wB,MAAxB;IAEAugB,GAAA,CAAI2I,IAAJ;IAGA3I,GAAA,CAAI2C,YAAJ,CAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAvB,EAA0B,CAA1B,EAA6B,CAA7B,EAAgC,CAAhC;IACA3C,GAAA,CAAI8P,SAAJ,CAAcmM,UAAd,EAA0BzL,IAAA,CAAK1gB,OAA/B,EAAwC0gB,IAAA,CAAKzgB,OAA7C;IACAiQ,GAAA,CAAImM,OAAJ;IACA,KAAK2R,OAAL;EA9ByB;EAiC3BoJ,4BACE9L,GADF,EAEE3X,MAFF,EAGE0jB,KAAA,GAAQ,CAHV,EAIEC,KAAA,GAAQ,CAJV,EAKEzjB,MALF,EAME0jB,SANF,EAOE;IACA,IAAI,CAAC,KAAKrO,cAAV,EAA0B;MACxB;IADwB;IAI1BoC,GAAA,GAAM,KAAK5B,SAAL,CAAe4B,GAAA,CAAIz6C,IAAnB,EAAyBy6C,GAAzB,CAAN;IAEA,MAAMpb,GAAA,GAAM,KAAKA,GAAjB;IACAA,GAAA,CAAI2I,IAAJ;IACA,MAAMoT,gBAAA,GAAmBrc,qCAAA,CAAoBM,GAApB,CAAzB;IACAA,GAAA,CAAIrP,SAAJ,CAAc8S,MAAd,EAAsB0jB,KAAtB,EAA6BC,KAA7B,EAAoCzjB,MAApC,EAA4C,CAA5C,EAA+C,CAA/C;IACA,MAAM6M,IAAA,GAAO,KAAKqL,iBAAL,CAAuBT,GAAvB,CAAb;IAEApb,GAAA,CAAI2C,YAAJ,CACE,CADF,EAEE,CAFF,EAGE,CAHF,EAIE,CAJF,EAKE6N,IAAA,CAAK1gB,OAAL,GAAeisB,gBAAA,CAAiB,CAAjB,CALjB,EAMEvL,IAAA,CAAKzgB,OAAL,GAAegsB,gBAAA,CAAiB,CAAjB,CANjB;IAQA,KAAK,IAAIziC,CAAA,GAAI,CAAR,EAAWwD,EAAA,GAAKuqC,SAAA,CAAUn8C,MAA1B,EAAkCoO,CAAA,GAAIwD,EAA3C,EAA+CxD,CAAA,IAAK,CAApD,EAAuD;MACrD,MAAMguC,KAAA,GAAQ/nD,SAAA,CAAKoxB,SAAL,CAAeorB,gBAAf,EAAiC,CAC7CtY,MAD6C,EAE7C0jB,KAF6C,EAG7CC,KAH6C,EAI7CzjB,MAJ6C,EAK7C0jB,SAAA,CAAU/tC,CAAV,CAL6C,EAM7C+tC,SAAA,CAAU/tC,CAAA,GAAI,CAAd,CAN6C,CAAjC,CAAd;MASA,MAAM,CAACrc,CAAD,EAAII,CAAJ,IAASkC,SAAA,CAAKizC,cAAL,CAAoB,CAAC,CAAD,EAAI,CAAJ,CAApB,EAA4B8U,KAA5B,CAAf;MACAtnB,GAAA,CAAI8P,SAAJ,CAAcU,IAAA,CAAK/wB,MAAnB,EAA2BxiB,CAA3B,EAA8BI,CAA9B;IAXqD;IAavD2iC,GAAA,CAAImM,OAAJ;IACA,KAAK2R,OAAL;EAnCA;EAsCFyJ,2BAA2BC,MAA3B,EAAmC;IACjC,IAAI,CAAC,KAAKxO,cAAV,EAA0B;MACxB;IADwB;IAG1B,MAAMhZ,GAAA,GAAM,KAAKA,GAAjB;IAEA,MAAMt2B,SAAA,GAAY,KAAKi4B,OAAL,CAAaj4B,SAA/B;IACA,MAAMoyC,aAAA,GAAgB,KAAKna,OAAL,CAAaoQ,WAAnC;IAEA,WAAWvgC,KAAX,IAAoBg2C,MAApB,EAA4B;MAC1B,MAAM;QAAE7mD,IAAF;QAAQN,KAAR;QAAeC,MAAf;QAAuBqwB;MAAvB,IAAqCnf,KAA3C;MAEA,MAAMyqC,UAAA,GAAa,KAAKla,cAAL,CAAoBC,SAApB,CACjB,YADiB,EAEjB3hC,KAFiB,EAGjBC,MAHiB,CAAnB;MAKA,MAAM+1C,OAAA,GAAU4F,UAAA,CAAW56B,OAA3B;MACAg1B,OAAA,CAAQ1N,IAAR;MAEA,MAAMyS,GAAA,GAAM,KAAK5B,SAAL,CAAe74C,IAAf,EAAqB6Q,KAArB,CAAZ;MACAkjC,kBAAA,CAAmB2B,OAAnB,EAA4B+E,GAA5B;MAEA/E,OAAA,CAAQb,wBAAR,GAAmC,WAAnC;MAEAa,OAAA,CAAQ/T,SAAR,GAAoBwZ,aAAA,GAChBpyC,SAAA,CAAU42B,UAAV,CACE+V,OADF,EAEE,IAFF,EAGEhL,4CAAA,CAA2BrL,GAA3B,CAHF,EAIEL,QAAA,CAASC,IAJX,CADgB,GAOhBl2B,SAPJ;MAQA2sC,OAAA,CAAQuD,QAAR,CAAiB,CAAjB,EAAoB,CAApB,EAAuBv5C,KAAvB,EAA8BC,MAA9B;MAEA+1C,OAAA,CAAQlK,OAAR;MAEAnM,GAAA,CAAI2I,IAAJ;MACA3I,GAAA,CAAIrP,SAAJ,CAAc,GAAGA,SAAjB;MACAqP,GAAA,CAAInQ,KAAJ,CAAU,CAAV,EAAa,CAAC,CAAd;MACA4e,wBAAA,CACEzO,GADF,EAEEic,UAAA,CAAWx8B,MAFb,EAGE,CAHF,EAIE,CAJF,EAKEpf,KALF,EAMEC,MANF,EAOE,CAPF,EAQE,CAAC,CARH,EASE,CATF,EAUE,CAVF;MAYA0/B,GAAA,CAAImM,OAAJ;IA3C0B;IA6C5B,KAAK2R,OAAL;EAtDiC;EAyDnC2J,kBAAkBxrB,KAAlB,EAAyB;IACvB,IAAI,CAAC,KAAK+c,cAAV,EAA0B;MACxB;IADwB;IAG1B,MAAM/I,OAAA,GAAU,KAAKuJ,SAAL,CAAevd,KAAf,CAAhB;IACA,IAAI,CAACgU,OAAL,EAAc;MACZzwC,aAAA,CAAK,iCAAL;MACA;IAFY;IAKd,KAAKkoD,uBAAL,CAA6BzX,OAA7B;EAVuB;EAazB0X,wBAAwB1rB,KAAxB,EAA+BwH,MAA/B,EAAuCE,MAAvC,EAA+C0jB,SAA/C,EAA0D;IACxD,IAAI,CAAC,KAAKrO,cAAV,EAA0B;MACxB;IADwB;IAG1B,MAAM/I,OAAA,GAAU,KAAKuJ,SAAL,CAAevd,KAAf,CAAhB;IACA,IAAI,CAACgU,OAAL,EAAc;MACZzwC,aAAA,CAAK,iCAAL;MACA;IAFY;IAKd,MAAMa,KAAA,GAAQ4vC,OAAA,CAAQ5vC,KAAtB;IACA,MAAMC,MAAA,GAAS2vC,OAAA,CAAQ3vC,MAAvB;IACA,MAAMnC,GAAA,GAAM,EAAZ;IACA,KAAK,IAAImb,CAAA,GAAI,CAAR,EAAWwD,EAAA,GAAKuqC,SAAA,CAAUn8C,MAA1B,EAAkCoO,CAAA,GAAIwD,EAA3C,EAA+CxD,CAAA,IAAK,CAApD,EAAuD;MACrDnb,GAAA,CAAI2N,IAAJ,CAAS;QACP6kB,SAAA,EAAW,CAAC8S,MAAD,EAAS,CAAT,EAAY,CAAZ,EAAeE,MAAf,EAAuB0jB,SAAA,CAAU/tC,CAAV,CAAvB,EAAqC+tC,SAAA,CAAU/tC,CAAA,GAAI,CAAd,CAArC,CADJ;QAEPrc,CAAA,EAAG,CAFI;QAGPI,CAAA,EAAG,CAHI;QAIPuqD,CAAA,EAAGvnD,KAJI;QAKPwnD,CAAA,EAAGvnD;MALI,CAAT;IADqD;IASvD,KAAKwnD,4BAAL,CAAkC7X,OAAlC,EAA2C9xC,GAA3C;EAtBwD;EAyB1D4pD,0BAA0B/nB,GAA1B,EAA+B;IAC7B,IAAI,KAAK2B,OAAL,CAAawQ,YAAb,KAA8B,MAAlC,EAA0C;MACxCnS,GAAA,CAAIhnB,MAAJ,GAAa,KAAK2oB,OAAL,CAAawQ,YAA1B;MACAnS,GAAA,CAAI8P,SAAJ,CAAc9P,GAAA,CAAIvgB,MAAlB,EAA0B,CAA1B,EAA6B,CAA7B;MACAugB,GAAA,CAAIhnB,MAAJ,GAAa,MAAb;IAHwC;IAK1C,OAAOgnB,GAAA,CAAIvgB,MAAX;EAN6B;EAS/BuoC,0BAA0B/X,OAA1B,EAAmC;IACjC,IAAI,KAAKtO,OAAL,CAAawQ,YAAb,KAA8B,MAAlC,EAA0C;MACxC,OAAOlC,OAAA,CAAQxuB,MAAf;IADwC;IAG1C,MAAM;MAAEA,MAAF;MAAUphB,KAAV;MAAiBC;IAAjB,IAA4B2vC,OAAlC;IACA,MAAMnO,SAAA,GAAY,KAAKC,cAAL,CAAoBC,SAApB,CAChB,aADgB,EAEhB3hC,KAFgB,EAGhBC,MAHgB,CAAlB;IAKA,MAAM2hC,MAAA,GAASH,SAAA,CAAUzgB,OAAzB;IACA4gB,MAAA,CAAOjpB,MAAP,GAAgB,KAAK2oB,OAAL,CAAawQ,YAA7B;IACAlQ,MAAA,CAAO6N,SAAP,CAAiBruB,MAAjB,EAAyB,CAAzB,EAA4B,CAA5B;IACAwgB,MAAA,CAAOjpB,MAAP,GAAgB,MAAhB;IAEA,OAAO8oB,SAAA,CAAUriB,MAAjB;EAfiC;EAkBnCioC,wBAAwBzX,OAAxB,EAAiC;IAC/B,IAAI,CAAC,KAAK+I,cAAV,EAA0B;MACxB;IADwB;IAG1B,MAAM34C,KAAA,GAAQ4vC,OAAA,CAAQ5vC,KAAtB;IACA,MAAMC,MAAA,GAAS2vC,OAAA,CAAQ3vC,MAAvB;IACA,MAAM0/B,GAAA,GAAM,KAAKA,GAAjB;IAEA,KAAK2I,IAAL;IAEA,IAEE,CAACvmB,aAFH,EAGE;MAKA,MAAM;QAAEpJ;MAAF,IAAagnB,GAAnB;MACA,IAAIhnB,MAAA,KAAW,MAAX,IAAqBA,MAAA,KAAW,EAApC,EAAwC;QACtCgnB,GAAA,CAAIhnB,MAAJ,GAAa,MAAb;MADsC;IANxC;IAYFgnB,GAAA,CAAInQ,KAAJ,CAAU,IAAIxvB,KAAd,EAAqB,CAAC,CAAD,GAAKC,MAA1B;IAEA,IAAI2nD,UAAJ;IACA,IAAIhY,OAAA,CAAQxuB,MAAZ,EAAoB;MAClBwmC,UAAA,GAAa,KAAKD,yBAAL,CAA+B/X,OAA/B,CAAb;IADkB,CAApB,MAEO,IACJ,OAAOiY,WAAP,KAAuB,UAAvB,IAAqCjY,OAAA,YAAmBiY,WAAzD,IACA,CAACjY,OAAA,CAAQtvC,IAFJ,EAGL;MAEAsnD,UAAA,GAAahY,OAAb;IAFA,CAHK,MAMA;MACL,MAAMnO,SAAA,GAAY,KAAKC,cAAL,CAAoBC,SAApB,CAChB,aADgB,EAEhB3hC,KAFgB,EAGhBC,MAHgB,CAAlB;MAKA,MAAM2hC,MAAA,GAASH,SAAA,CAAUzgB,OAAzB;MACAmyB,kBAAA,CAAmBvR,MAAnB,EAA2BgO,OAA3B;MACAgY,UAAA,GAAa,KAAKF,yBAAL,CAA+B9lB,MAA/B,CAAb;IARK;IAWP,MAAM+Z,MAAA,GAAS,KAAKb,WAAL,CACb8M,UADa,EAEb5c,4CAAA,CAA2BrL,GAA3B,CAFa,CAAf;IAIAA,GAAA,CAAI0c,qBAAJ,GAA4BlF,wBAAA,CAC1B9X,qCAAA,CAAoBM,GAApB,CAD0B,EAE1BiQ,OAAA,CAAQwH,WAFkB,CAA5B;IAKAhJ,wBAAA,CACEzO,GADF,EAEEgc,MAAA,CAAOZ,GAFT,EAGE,CAHF,EAIE,CAJF,EAKEY,MAAA,CAAOR,UALT,EAMEQ,MAAA,CAAOP,WANT,EAOE,CAPF,EAQE,CAACn7C,MARH,EASED,KATF,EAUEC,MAVF;IAYA,KAAKw9C,OAAL;IACA,KAAK3R,OAAL;EArE+B;EAwEjC2b,6BAA6B7X,OAA7B,EAAsC9xC,GAAtC,EAA2C;IACzC,IAAI,CAAC,KAAK66C,cAAV,EAA0B;MACxB;IADwB;IAG1B,MAAMhZ,GAAA,GAAM,KAAKA,GAAjB;IACA,IAAIioB,UAAJ;IACA,IAAIhY,OAAA,CAAQxuB,MAAZ,EAAoB;MAClBwmC,UAAA,GAAahY,OAAA,CAAQxuB,MAArB;IADkB,CAApB,MAEO;MACL,MAAMmmC,CAAA,GAAI3X,OAAA,CAAQ5vC,KAAlB;MACA,MAAMwnD,CAAA,GAAI5X,OAAA,CAAQ3vC,MAAlB;MAEA,MAAMwhC,SAAA,GAAY,KAAKC,cAAL,CAAoBC,SAApB,CAA8B,aAA9B,EAA6C4lB,CAA7C,EAAgDC,CAAhD,CAAlB;MACA,MAAM5lB,MAAA,GAASH,SAAA,CAAUzgB,OAAzB;MACAmyB,kBAAA,CAAmBvR,MAAnB,EAA2BgO,OAA3B;MACAgY,UAAA,GAAa,KAAKF,yBAAL,CAA+B9lB,MAA/B,CAAb;IAPK;IAUP,WAAWphB,KAAX,IAAoB1iB,GAApB,EAAyB;MACvB6hC,GAAA,CAAI2I,IAAJ;MACA3I,GAAA,CAAIrP,SAAJ,CAAc,GAAG9P,KAAA,CAAM8P,SAAvB;MACAqP,GAAA,CAAInQ,KAAJ,CAAU,CAAV,EAAa,CAAC,CAAd;MACA4e,wBAAA,CACEzO,GADF,EAEEioB,UAFF,EAGEpnC,KAAA,CAAM5jB,CAHR,EAIE4jB,KAAA,CAAMxjB,CAJR,EAKEwjB,KAAA,CAAM+mC,CALR,EAME/mC,KAAA,CAAMgnC,CANR,EAOE,CAPF,EAQE,CAAC,CARH,EASE,CATF,EAUE,CAVF;MAYA7nB,GAAA,CAAImM,OAAJ;IAhBuB;IAkBzB,KAAK2R,OAAL;EApCyC;EAuC3CqK,yBAAA,EAA2B;IACzB,IAAI,CAAC,KAAKnP,cAAV,EAA0B;MACxB;IADwB;IAG1B,KAAKhZ,GAAL,CAAS4Z,QAAT,CAAkB,CAAlB,EAAqB,CAArB,EAAwB,CAAxB,EAA2B,CAA3B;IACA,KAAKkE,OAAL;EALyB;EAU3BsK,UAAUC,GAAV,EAAe;EAIfC,eAAeD,GAAf,EAAoBxT,UAApB,EAAgC;EAIhC0T,mBAAmBF,GAAnB,EAAwB;IACtB,KAAKlQ,kBAAL,CAAwBrsC,IAAxB,CAA6B;MAC3B08C,OAAA,EAAS;IADkB,CAA7B;EADsB;EAMxBC,wBAAwBJ,GAAxB,EAA6BxT,UAA7B,EAAyC;IACvC,IAAIwT,GAAA,KAAQ,IAAZ,EAAkB;MAChB,KAAKlQ,kBAAL,CAAwBrsC,IAAxB,CAA6B;QAC3B08C,OAAA,EAAS,KAAK51B,qBAAL,CAA2B1V,SAA3B,CAAqC23B,UAArC;MADkB,CAA7B;IADgB,CAAlB,MAIO;MACL,KAAKsD,kBAAL,CAAwBrsC,IAAxB,CAA6B;QAC3B08C,OAAA,EAAS;MADkB,CAA7B;IADK;IAKP,KAAKxP,cAAL,GAAsB,KAAK0P,gBAAL,EAAtB;EAVuC;EAazCC,iBAAA,EAAmB;IACjB,KAAKxQ,kBAAL,CAAwB8F,GAAxB;IACA,KAAKjF,cAAL,GAAsB,KAAK0P,gBAAL,EAAtB;EAFiB;EAOnBE,YAAA,EAAc;EAIdC,UAAA,EAAY;EAMZ7J,YAAY3M,OAAZ,EAAqB;IACnB,MAAMyW,OAAA,GAAU,KAAKnnB,OAAL,CAAa2R,WAAb,EAAhB;IACA,IAAI,KAAK+E,WAAT,EAAsB;MACpB,KAAK1W,OAAL,CAAa0R,kBAAb;IADoB;IAGtB,IAAI,CAAC,KAAKgF,WAAV,EAAuB;MACrB,KAAKyF,OAAL,CAAazL,OAAb;IADqB;IAGvB,MAAMrS,GAAA,GAAM,KAAKA,GAAjB;IACA,IAAI,KAAKqY,WAAT,EAAsB;MACpB,IAAI,CAACyQ,OAAL,EAAc;QACZ,IAAI,KAAKzQ,WAAL,KAAqBJ,OAAzB,EAAkC;UAChCjY,GAAA,CAAII,IAAJ,CAAS,SAAT;QADgC,CAAlC,MAEO;UACLJ,GAAA,CAAII,IAAJ;QADK;MAHK;MAOd,KAAKiY,WAAL,GAAmB,IAAnB;IARoB;IAUtB,KAAK1W,OAAL,CAAayQ,sBAAb,CAAoC,KAAKzQ,OAAL,CAAa0Q,OAAjD;IACArS,GAAA,CAAImC,SAAJ;EApBmB;EAuBrB0gB,oBAAA,EAAsB;IACpB,IAAI,CAAC,KAAKvJ,0BAAV,EAAsC;MACpC,MAAMh8C,CAAA,GAAIoiC,qCAAA,CAAoB,KAAKM,GAAzB,CAAV;MACA,IAAI1iC,CAAA,CAAE,CAAF,MAAS,CAAT,IAAcA,CAAA,CAAE,CAAF,MAAS,CAA3B,EAA8B;QAE5B,KAAKg8C,0BAAL,GACE,IAAI58C,IAAA,CAAKG,GAAL,CAASH,IAAA,CAAKwX,GAAL,CAAS5W,CAAA,CAAE,CAAF,CAAT,CAAT,EAAyBZ,IAAA,CAAKwX,GAAL,CAAS5W,CAAA,CAAE,CAAF,CAAT,CAAzB,CADN;MAF4B,CAA9B,MAIO;QACL,MAAMyrD,MAAA,GAASrsD,IAAA,CAAKwX,GAAL,CAAS5W,CAAA,CAAE,CAAF,IAAOA,CAAA,CAAE,CAAF,CAAP,GAAcA,CAAA,CAAE,CAAF,IAAOA,CAAA,CAAE,CAAF,CAA9B,CAAf;QACA,MAAM0rD,KAAA,GAAQtsD,IAAA,CAAKqzC,KAAL,CAAWzyC,CAAA,CAAE,CAAF,CAAX,EAAiBA,CAAA,CAAE,CAAF,CAAjB,CAAd;QACA,MAAM2rD,KAAA,GAAQvsD,IAAA,CAAKqzC,KAAL,CAAWzyC,CAAA,CAAE,CAAF,CAAX,EAAiBA,CAAA,CAAE,CAAF,CAAjB,CAAd;QACA,KAAKg8C,0BAAL,GAAkC58C,IAAA,CAAKE,GAAL,CAASosD,KAAT,EAAgBC,KAAhB,IAAyBF,MAA3D;MAJK;IAN6B;IAatC,OAAO,KAAKzP,0BAAZ;EAdoB;EAiBtB4P,oBAAA,EAAsB;IAOpB,IAAI,KAAK7P,uBAAL,CAA6B,CAA7B,MAAoC,CAAC,CAAzC,EAA4C;MAC1C,MAAM;QAAEpH;MAAF,IAAgB,KAAKtQ,OAA3B;MACA,MAAM;QAAEgM,CAAF;QAAK3vC,CAAL;QAAQZ,CAAR;QAAWwwC;MAAX,IAAiB,KAAK5N,GAAL,CAASmpB,YAAT,EAAvB;MACA,IAAI1lB,MAAJ,EAAYE,MAAZ;MAEA,IAAI3lC,CAAA,KAAM,CAAN,IAAWZ,CAAA,KAAM,CAArB,EAAwB;QAEtB,MAAM4rD,KAAA,GAAQtsD,IAAA,CAAKwX,GAAL,CAASy5B,CAAT,CAAd;QACA,MAAMsb,KAAA,GAAQvsD,IAAA,CAAKwX,GAAL,CAAS05B,CAAT,CAAd;QACA,IAAIob,KAAA,KAAUC,KAAd,EAAqB;UACnB,IAAIhX,SAAA,KAAc,CAAlB,EAAqB;YACnBxO,MAAA,GAASE,MAAA,GAAS,IAAIqlB,KAAtB;UADmB,CAArB,MAEO;YACL,MAAMI,eAAA,GAAkBJ,KAAA,GAAQ/W,SAAhC;YACAxO,MAAA,GAASE,MAAA,GAASylB,eAAA,GAAkB,CAAlB,GAAsB,IAAIA,eAA1B,GAA4C,CAA9D;UAFK;QAHY,CAArB,MAOO,IAAInX,SAAA,KAAc,CAAlB,EAAqB;UAC1BxO,MAAA,GAAS,IAAIulB,KAAb;UACArlB,MAAA,GAAS,IAAIslB,KAAb;QAF0B,CAArB,MAGA;UACL,MAAMI,gBAAA,GAAmBL,KAAA,GAAQ/W,SAAjC;UACA,MAAMqX,gBAAA,GAAmBL,KAAA,GAAQhX,SAAjC;UACAxO,MAAA,GAAS4lB,gBAAA,GAAmB,CAAnB,GAAuB,IAAIA,gBAA3B,GAA8C,CAAvD;UACA1lB,MAAA,GAAS2lB,gBAAA,GAAmB,CAAnB,GAAuB,IAAIA,gBAA3B,GAA8C,CAAvD;QAJK;MAde,CAAxB,MAoBO;QAOL,MAAMP,MAAA,GAASrsD,IAAA,CAAKwX,GAAL,CAASy5B,CAAA,GAAIC,CAAJ,GAAQ5vC,CAAA,GAAIZ,CAArB,CAAf;QACA,MAAM4rD,KAAA,GAAQtsD,IAAA,CAAKqzC,KAAL,CAAWpC,CAAX,EAAc3vC,CAAd,CAAd;QACA,MAAMirD,KAAA,GAAQvsD,IAAA,CAAKqzC,KAAL,CAAW3yC,CAAX,EAAcwwC,CAAd,CAAd;QACA,IAAIqE,SAAA,KAAc,CAAlB,EAAqB;UACnBxO,MAAA,GAASwlB,KAAA,GAAQF,MAAjB;UACAplB,MAAA,GAASqlB,KAAA,GAAQD,MAAjB;QAFmB,CAArB,MAGO;UACL,MAAMQ,QAAA,GAAWtX,SAAA,GAAY8W,MAA7B;UACAtlB,MAAA,GAASwlB,KAAA,GAAQM,QAAR,GAAmBN,KAAA,GAAQM,QAA3B,GAAsC,CAA/C;UACA5lB,MAAA,GAASqlB,KAAA,GAAQO,QAAR,GAAmBP,KAAA,GAAQO,QAA3B,GAAsC,CAA/C;QAHK;MAbF;MAmBP,KAAKlQ,uBAAL,CAA6B,CAA7B,IAAkC5V,MAAlC;MACA,KAAK4V,uBAAL,CAA6B,CAA7B,IAAkC1V,MAAlC;IA7C0C;IA+C5C,OAAO,KAAK0V,uBAAZ;EAtDoB;EA2DtB4F,iBAAiBuK,WAAjB,EAA8B;IAC5B,MAAM;MAAExpB;IAAF,IAAU,IAAhB;IACA,MAAM;MAAEiS;IAAF,IAAgB,KAAKtQ,OAA3B;IACA,MAAM,CAAC8B,MAAD,EAASE,MAAT,IAAmB,KAAKulB,mBAAL,EAAzB;IAEAlpB,GAAA,CAAIiS,SAAJ,GAAgBA,SAAA,IAAa,CAA7B;IAEA,IAAIxO,MAAA,KAAW,CAAX,IAAgBE,MAAA,KAAW,CAA/B,EAAkC;MAChC3D,GAAA,CAAI+e,MAAJ;MACA;IAFgC;IAKlC,MAAM0K,MAAA,GAASzpB,GAAA,CAAIgV,WAAJ,EAAf;IACA,IAAIwU,WAAJ,EAAiB;MACfxpB,GAAA,CAAI2I,IAAJ;IADe;IAIjB3I,GAAA,CAAInQ,KAAJ,CAAU4T,MAAV,EAAkBE,MAAlB;IASA,IAAI8lB,MAAA,CAAOv+C,MAAP,GAAgB,CAApB,EAAuB;MACrB,MAAM2kB,KAAA,GAAQnzB,IAAA,CAAKE,GAAL,CAAS6mC,MAAT,EAAiBE,MAAjB,CAAd;MACA3D,GAAA,CAAI+U,WAAJ,CAAgB0U,MAAA,CAAOtrD,GAAP,CAAWlB,CAAA,IAAKA,CAAA,GAAI4yB,KAApB,CAAhB;MACAmQ,GAAA,CAAIiV,cAAJ,IAAsBplB,KAAtB;IAHqB;IAMvBmQ,GAAA,CAAI+e,MAAJ;IAEA,IAAIyK,WAAJ,EAAiB;MACfxpB,GAAA,CAAImM,OAAJ;IADe;EAlCW;EAuC9Buc,iBAAA,EAAmB;IACjB,KAAK,IAAIpvC,CAAA,GAAI,KAAK6+B,kBAAL,CAAwBjtC,MAAxB,GAAiC,CAAzC,EAA4CoO,CAAA,IAAK,CAAtD,EAAyDA,CAAA,EAAzD,EAA8D;MAC5D,IAAI,CAAC,KAAK6+B,kBAAL,CAAwB7+B,CAAxB,EAA2BkvC,OAAhC,EAAyC;QACvC,OAAO,KAAP;MADuC;IADmB;IAK9D,OAAO,IAAP;EANiB;AAjwEA;AA2wErB,WAAWkB,EAAX,IAAiBve,QAAjB,EAAsB;EACpB,IAAItnB,cAAA,CAAe9K,SAAf,CAAyB2wC,EAAzB,MAAiCzzC,SAArC,EAAgD;IAC9C4N,cAAA,CAAe9K,SAAf,CAAyBoyB,QAAA,CAAIue,EAAJ,CAAzB,IAAoC7lC,cAAA,CAAe9K,SAAf,CAAyB2wC,EAAzB,CAApC;EAD8C;AAD5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3qGtB;AAOA;AASA,MAAME,MAAA,GAAS,4BAAf;AAEA,MAAMte,aAAN,CAAoB;EAClB,OAAOhwB,GAAP,GAAa,IAAb;EAEA,OAAOuuC,GAAP,GAAa,IAAb;EAEA,OAAOhS,gBAAP,GAA0B,KAAKv8B,GAAL,GAAW,KAAKuuC,GAA1C;AALkB;AAiBpB,MAAM7mC,gBAAN,SAA+Bmb,+DAA/B,CAAiD;EAC/C,CAAA2rB,MAAA;EAEA,CAAAC,KAAA;EAEA,CAAA3kC,KAAA;EAEA,CAAA7f,QAAA;EAEA,CAAAykD,SAAA;EAEA,CAAAC,MAAA;EAEA,CAAAC,MAAA;EAEA,CAAAC,kBAAA;EAEA,CAAAC,eAAA;EAEA,CAAAC,eAAA;EAEA,CAAA3kD,EAAA,GAAM,CAAN;EAEA9B,YAAY;IAAEwhB,KAAF;IAAS6B,aAAA,GAAgBC,UAAA,CAAW3hB;EAApC,IAAiD,EAA7D,EAAiE;IAC/D;IACA,KAAK,CAAA6f,KAAL,GAAcA,KAAd;IACA,KAAK,CAAA7f,QAAL,GAAiB0hB,aAAjB;EAH+D;EAMjE,IAAI,CAAAsnB,KAAJA,CAAA,EAAa;IACX,OAAQ,KAAK,CAAAub,MAAL,KAAiB,IAAI35C,GAAJ,EAAzB;EADW;EAIb,IAAI,CAAA1E,IAAJA,CAAA,EAAY;IACV,IAAI,CAAC,KAAK,CAAAs+C,KAAV,EAAkB;MAChB,MAAM19C,GAAA,GAAM,KAAK,CAAA9G,QAAL,CAAeC,aAAf,CAA6B,KAA7B,CAAZ;MACA,MAAM;QAAEI;MAAF,IAAYyG,GAAlB;MACAzG,KAAA,CAAMgD,UAAN,GAAmB,QAAnB;MACAhD,KAAA,CAAM0kD,OAAN,GAAgB,QAAhB;MACA1kD,KAAA,CAAMvF,KAAN,GAAcuF,KAAA,CAAMtF,MAAN,GAAe,CAA7B;MACAsF,KAAA,CAAM2kD,QAAN,GAAiB,UAAjB;MACA3kD,KAAA,CAAMgC,GAAN,GAAYhC,KAAA,CAAM+B,IAAN,GAAa,CAAzB;MACA/B,KAAA,CAAMC,MAAN,GAAe,CAAC,CAAhB;MAEA,MAAM2F,GAAA,GAAM,KAAK,CAAAjG,QAAL,CAAeilD,eAAf,CAA+BZ,MAA/B,EAAuC,KAAvC,CAAZ;MACAp+C,GAAA,CAAI/F,YAAJ,CAAiB,OAAjB,EAA0B,CAA1B;MACA+F,GAAA,CAAI/F,YAAJ,CAAiB,QAAjB,EAA2B,CAA3B;MACA,KAAK,CAAAskD,KAAL,GAAc,KAAK,CAAAxkD,QAAL,CAAeilD,eAAf,CAA+BZ,MAA/B,EAAuC,MAAvC,CAAd;MACAv9C,GAAA,CAAIX,MAAJ,CAAWF,GAAX;MACAA,GAAA,CAAIE,MAAJ,CAAW,KAAK,CAAAq+C,KAAhB;MACA,KAAK,CAAAxkD,QAAL,CAAeklD,IAAf,CAAoB/+C,MAApB,CAA2BW,GAA3B;IAhBgB;IAkBlB,OAAO,KAAK,CAAA09C,KAAZ;EAnBU;EAsBZ3rB,UAAUC,IAAV,EAAgB;IACd,IAAI,CAACA,IAAL,EAAW;MACT,OAAO,MAAP;IADS;IAMX,IAAIltB,KAAA,GAAQ,KAAK,CAAAo9B,KAAL,CAAYn+B,GAAZ,CAAgBiuB,IAAhB,CAAZ;IACA,IAAIltB,KAAJ,EAAW;MACT,OAAOA,KAAP;IADS;IAIX,IAAIu5C,MAAJ,EAAYC,MAAZ,EAAoBC,MAApB,EAA4B/1C,GAA5B;IACA,IAAIwpB,IAAA,CAAKnzB,MAAL,KAAgB,CAApB,EAAuB;MACrB,MAAM2/C,IAAA,GAAOxsB,IAAA,CAAK,CAAL,CAAb;MACA,MAAMjU,MAAA,GAAS,IAAI3c,KAAJ,CAAU,GAAV,CAAf;MACA,KAAK,IAAI6L,CAAA,GAAI,CAAR,EAAWA,CAAA,GAAI,GAApB,EAAyBA,CAAA,EAAzB,EAA8B;QAC5B8Q,MAAA,CAAO9Q,CAAP,IAAYuxC,IAAA,CAAKvxC,CAAL,IAAU,GAAtB;MAD4B;MAG9BzE,GAAA,GAAM61C,MAAA,GAASC,MAAA,GAASC,MAAA,GAASxgC,MAAA,CAAO/rB,IAAP,CAAY,GAAZ,CAAjC;IANqB,CAAvB,MAOO;MACL,MAAM,CAACwsD,IAAD,EAAOC,IAAP,EAAaC,IAAb,IAAqB1sB,IAA3B;MACA,MAAM2sB,OAAA,GAAU,IAAIv9C,KAAJ,CAAU,GAAV,CAAhB;MACA,MAAMw9C,OAAA,GAAU,IAAIx9C,KAAJ,CAAU,GAAV,CAAhB;MACA,MAAMy9C,OAAA,GAAU,IAAIz9C,KAAJ,CAAU,GAAV,CAAhB;MACA,KAAK,IAAI6L,CAAA,GAAI,CAAR,EAAWA,CAAA,GAAI,GAApB,EAAyBA,CAAA,EAAzB,EAA8B;QAC5B0xC,OAAA,CAAQ1xC,CAAR,IAAauxC,IAAA,CAAKvxC,CAAL,IAAU,GAAvB;QACA2xC,OAAA,CAAQ3xC,CAAR,IAAawxC,IAAA,CAAKxxC,CAAL,IAAU,GAAvB;QACA4xC,OAAA,CAAQ5xC,CAAR,IAAayxC,IAAA,CAAKzxC,CAAL,IAAU,GAAvB;MAH4B;MAK9BoxC,MAAA,GAASM,OAAA,CAAQ3sD,IAAR,CAAa,GAAb,CAAT;MACAssD,MAAA,GAASM,OAAA,CAAQ5sD,IAAR,CAAa,GAAb,CAAT;MACAusD,MAAA,GAASM,OAAA,CAAQ7sD,IAAR,CAAa,GAAb,CAAT;MACAwW,GAAA,GAAM,GAAG61C,MAAH,GAAYC,MAAZ,GAAqBC,MAArB,EAAN;IAbK;IAgBPz5C,KAAA,GAAQ,KAAK,CAAAo9B,KAAL,CAAYn+B,GAAZ,CAAgByE,GAAhB,CAAR;IACA,IAAI1D,KAAJ,EAAW;MACT,KAAK,CAAAo9B,KAAL,CAAYlvB,GAAZ,CAAgBgf,IAAhB,EAAsBltB,KAAtB;MACA,OAAOA,KAAP;IAFS;IAQX,MAAMzL,EAAA,GAAM,KAAI,KAAK,CAAA0f,KAAO,iBAAgB,KAAK,CAAA1f,EAAL,EAAjC,EAAX;IACA,MAAM8I,GAAA,GAAO,QAAO9I,EAAG,GAAvB;IACA,KAAK,CAAA6oC,KAAL,CAAYlvB,GAAZ,CAAgBgf,IAAhB,EAAsB7vB,GAAtB;IACA,KAAK,CAAA+/B,KAAL,CAAYlvB,GAAZ,CAAgBxK,GAAhB,EAAqBrG,GAArB;IAEA,MAAMwK,MAAA,GAAS,KAAK,CAAAmyC,YAAL,CAAmBzlD,EAAnB,CAAf;IACA,KAAK,CAAA0lD,wBAAL,CAA+BV,MAA/B,EAAuCC,MAAvC,EAA+CC,MAA/C,EAAuD5xC,MAAvD;IAEA,OAAOxK,GAAP;EArDc;EAwDhB8vB,aAAa30B,OAAb,EAAsBF,OAAtB,EAA+B;IAC7B,MAAMoL,GAAA,GAAM,GAAGlL,OAAQ,IAAGF,OAAd,EAAZ;IACA,IAAI,KAAK,CAAAwgD,MAAL,KAAiBp1C,GAArB,EAA0B;MACxB,OAAO,KAAK,CAAAq1C,MAAZ;IADwB;IAI1B,KAAK,CAAAD,MAAL,GAAep1C,GAAf;IACA,KAAK,CAAAq1C,MAAL,GAAe,MAAf;IACA,KAAK,CAAAF,SAAL,EAAiBrxC,MAAjB;IAEA,IAAI,CAAChP,OAAD,IAAY,CAACF,OAAjB,EAA0B;MACxB,OAAO,KAAK,CAAAygD,MAAZ;IADwB;IAI1B,MAAMmB,KAAA,GAAQ,KAAK,CAAAC,MAAL,CAAa3hD,OAAb,CAAd;IACAA,OAAA,GAAUpK,iDAAA,CAAKmI,YAAL,CAAkB,GAAG2jD,KAArB,CAAV;IACA,MAAME,KAAA,GAAQ,KAAK,CAAAD,MAAL,CAAa7hD,OAAb,CAAd;IACAA,OAAA,GAAUlK,iDAAA,CAAKmI,YAAL,CAAkB,GAAG6jD,KAArB,CAAV;IACA,KAAK,CAAA9/C,IAAL,CAAW7F,KAAX,CAAiB1H,KAAjB,GAAyB,EAAzB;IAEA,IACGyL,OAAA,KAAY,SAAZ,IAAyBF,OAAA,KAAY,SAAtC,IACAE,OAAA,KAAYF,OAFd,EAGE;MACA,OAAO,KAAK,CAAAygD,MAAZ;IADA;IAaF,MAAM/rD,GAAA,GAAM,IAAIsP,KAAJ,CAAU,GAAV,CAAZ;IACA,KAAK,IAAI6L,CAAA,GAAI,CAAR,EAAWA,CAAA,IAAK,GAArB,EAA0BA,CAAA,EAA1B,EAA+B;MAC7B,MAAMrc,CAAA,GAAIqc,CAAA,GAAI,GAAd;MACAnb,GAAA,CAAImb,CAAJ,IAASrc,CAAA,IAAK,OAAL,GAAeA,CAAA,GAAI,KAAnB,GAA4B,CAAC,CAAAA,CAAA,GAAI,KAAJ,IAAa,KAAd,KAAwB,GAA7D;IAF6B;IAI/B,MAAMuuD,KAAA,GAAQrtD,GAAA,CAAIE,IAAJ,CAAS,GAAT,CAAd;IAEA,MAAMqH,EAAA,GAAM,KAAI,KAAK,CAAA0f,KAAO,aAA5B;IACA,MAAMpM,MAAA,GAAU,KAAK,CAAAmxC,kBAAL,GAA2B,KAAK,CAAAgB,YAAL,CAAmBzlD,EAAnB,CAA3C;IACA,KAAK,CAAA0lD,wBAAL,CAA+BI,KAA/B,EAAsCA,KAAtC,EAA6CA,KAA7C,EAAoDxyC,MAApD;IACA,KAAK,CAAAyyC,iBAAL,CAAwBzyC,MAAxB;IAEA,MAAM0yC,QAAA,GAAWA,CAACtuD,CAAD,EAAIX,CAAJ,KAAU;MACzB,MAAMkvD,KAAA,GAAQN,KAAA,CAAMjuD,CAAN,IAAW,GAAzB;MACA,MAAMgvB,GAAA,GAAMm/B,KAAA,CAAMnuD,CAAN,IAAW,GAAvB;MACA,MAAMwuD,GAAA,GAAM,IAAIn+C,KAAJ,CAAUhR,CAAA,GAAI,CAAd,CAAZ;MACA,KAAK,IAAI6c,CAAA,GAAI,CAAR,EAAWA,CAAA,IAAK7c,CAArB,EAAwB6c,CAAA,EAAxB,EAA6B;QAC3BsyC,GAAA,CAAItyC,CAAJ,IAASqyC,KAAA,GAASryC,CAAA,GAAI7c,CAAL,IAAW2vB,GAAA,GAAMu/B,KAAN,CAA5B;MAD2B;MAG7B,OAAOC,GAAA,CAAIvtD,IAAJ,CAAS,GAAT,CAAP;IAPyB,CAA3B;IASA,KAAK,CAAA+sD,wBAAL,CACEM,QAAA,CAAS,CAAT,EAAY,CAAZ,CADF,EAEEA,QAAA,CAAS,CAAT,EAAY,CAAZ,CAFF,EAGEA,QAAA,CAAS,CAAT,EAAY,CAAZ,CAHF,EAIE1yC,MAJF;IAOA,KAAK,CAAAkxC,MAAL,GAAgB,QAAOxkD,EAAG,GAA1B;IACA,OAAO,KAAK,CAAAwkD,MAAZ;EAjE6B;EAoE/B3rB,sBAAsB50B,OAAtB,EAA+BF,OAA/B,EAAwC+0B,UAAxC,EAAoDC,UAApD,EAAgE;IAC9D,MAAM5pB,GAAA,GAAM,GAAGlL,OAAQ,IAAGF,OAAQ,IAAG+0B,UAAW,IAAGC,UAAvC,EAAZ;IACA,IAAI,KAAK,CAAA2rB,eAAL,KAA0Bv1C,GAA9B,EAAmC;MACjC,OAAO,KAAK,CAAAw1C,eAAZ;IADiC;IAInC,KAAK,CAAAD,eAAL,GAAwBv1C,GAAxB;IACA,KAAK,CAAAw1C,eAAL,GAAwB,MAAxB;IACA,KAAK,CAAAF,kBAAL,EAA0BxxC,MAA1B;IAEA,IAAI,CAAChP,OAAD,IAAY,CAACF,OAAjB,EAA0B;MACxB,OAAO,KAAK,CAAA4gD,eAAZ;IADwB;IAI1B,MAAM,CAACgB,KAAD,EAAQE,KAAR,IAAiB,CAAC5hD,OAAD,EAAUF,OAAV,EAAmBtL,GAAnB,CAAuB,KAAK,CAAAmtD,MAAL,CAAa/wC,IAAb,CAAkB,IAAlB,CAAvB,CAAvB;IACA,IAAIsxC,MAAA,GAASnvD,IAAA,CAAKsX,KAAL,CACX,SAASq3C,KAAA,CAAM,CAAN,CAAT,GAAoB,SAASA,KAAA,CAAM,CAAN,CAA7B,GAAwC,SAASA,KAAA,CAAM,CAAN,CADtC,CAAb;IAGA,IAAIS,MAAA,GAASpvD,IAAA,CAAKsX,KAAL,CACX,SAASu3C,KAAA,CAAM,CAAN,CAAT,GAAoB,SAASA,KAAA,CAAM,CAAN,CAA7B,GAAwC,SAASA,KAAA,CAAM,CAAN,CADtC,CAAb;IAGA,IAAI,CAACQ,QAAD,EAAWC,QAAX,IAAuB,CAACxtB,UAAD,EAAaC,UAAb,EAAyBtgC,GAAzB,CACzB,KAAK,CAAAmtD,MAAL,CAAa/wC,IAAb,CAAkB,IAAlB,CADyB,CAA3B;IAGA,IAAIuxC,MAAA,GAASD,MAAb,EAAqB;MACnB,CAACA,MAAD,EAASC,MAAT,EAAiBC,QAAjB,EAA2BC,QAA3B,IAAuC,CACrCF,MADqC,EAErCD,MAFqC,EAGrCG,QAHqC,EAIrCD,QAJqC,CAAvC;IADmB;IAQrB,KAAK,CAAAtgD,IAAL,CAAW7F,KAAX,CAAiB1H,KAAjB,GAAyB,EAAzB;IAeA,MAAMwtD,QAAA,GAAWA,CAACO,EAAD,EAAKC,EAAL,EAASzvD,CAAT,KAAe;MAC9B,MAAMmvD,GAAA,GAAM,IAAIn+C,KAAJ,CAAU,GAAV,CAAZ;MACA,MAAMo7B,IAAA,GAAQ,CAAAijB,MAAA,GAASD,MAAT,IAAmBpvD,CAAjC;MACA,MAAM0vD,QAAA,GAAWF,EAAA,GAAK,GAAtB;MACA,MAAMG,OAAA,GAAW,CAAAF,EAAA,GAAKD,EAAL,KAAY,MAAMxvD,CAAN,CAA7B;MACA,IAAI4vD,IAAA,GAAO,CAAX;MACA,KAAK,IAAI/yC,CAAA,GAAI,CAAR,EAAWA,CAAA,IAAK7c,CAArB,EAAwB6c,CAAA,EAAxB,EAA6B;QAC3B,MAAM/b,CAAA,GAAIb,IAAA,CAAKsX,KAAL,CAAW63C,MAAA,GAASvyC,CAAA,GAAIuvB,IAAxB,CAAV;QACA,MAAM13B,KAAA,GAAQg7C,QAAA,GAAW7yC,CAAA,GAAI8yC,OAA7B;QACA,KAAK,IAAI/mB,CAAA,GAAIgnB,IAAR,EAAchnB,CAAA,IAAK9nC,CAAxB,EAA2B8nC,CAAA,EAA3B,EAAgC;UAC9BumB,GAAA,CAAIvmB,CAAJ,IAASl0B,KAAT;QAD8B;QAGhCk7C,IAAA,GAAO9uD,CAAA,GAAI,CAAX;MAN2B;MAQ7B,KAAK,IAAI+b,CAAA,GAAI+yC,IAAR,EAAc/yC,CAAA,GAAI,GAAvB,EAA4BA,CAAA,EAA5B,EAAiC;QAC/BsyC,GAAA,CAAItyC,CAAJ,IAASsyC,GAAA,CAAIS,IAAA,GAAO,CAAX,CAAT;MAD+B;MAGjC,OAAOT,GAAA,CAAIvtD,IAAJ,CAAS,GAAT,CAAP;IAjB8B,CAAhC;IAoBA,MAAMqH,EAAA,GAAM,KAAI,KAAK,CAAA0f,KAAO,uBAA5B;IACA,MAAMpM,MAAA,GAAU,KAAK,CAAAmxC,kBAAL,GAA2B,KAAK,CAAAgB,YAAL,CAAmBzlD,EAAnB,CAA3C;IAEA,KAAK,CAAA+lD,iBAAL,CAAwBzyC,MAAxB;IACA,KAAK,CAAAoyC,wBAAL,CACEM,QAAA,CAASK,QAAA,CAAS,CAAT,CAAT,EAAsBC,QAAA,CAAS,CAAT,CAAtB,EAAmC,CAAnC,CADF,EAEEN,QAAA,CAASK,QAAA,CAAS,CAAT,CAAT,EAAsBC,QAAA,CAAS,CAAT,CAAtB,EAAmC,CAAnC,CAFF,EAGEN,QAAA,CAASK,QAAA,CAAS,CAAT,CAAT,EAAsBC,QAAA,CAAS,CAAT,CAAtB,EAAmC,CAAnC,CAHF,EAIEhzC,MAJF;IAOA,KAAK,CAAAqxC,eAAL,GAAyB,QAAO3kD,EAAG,GAAnC;IACA,OAAO,KAAK,CAAA2kD,eAAZ;EA/E8D;EAkFhEx/B,QAAQ6T,OAAA,GAAU,KAAlB,EAAyB;IACvB,IAAIA,OAAA,KAAY,KAAK,CAAAwrB,MAAL,IAAgB,KAAK,CAAAG,eAArB,CAAhB,EAAwD;MACtD;IADsD;IAGxD,IAAI,KAAK,CAAAN,KAAT,EAAiB;MACf,KAAK,CAAAA,KAAL,CAAYuC,UAAZ,CAAuBA,UAAvB,CAAkC3zC,MAAlC;MACA,KAAK,CAAAoxC,KAAL,GAAc,IAAd;IAFe;IAIjB,IAAI,KAAK,CAAAD,MAAT,EAAkB;MAChB,KAAK,CAAAA,MAAL,CAAarwC,KAAb;MACA,KAAK,CAAAqwC,MAAL,GAAe,IAAf;IAFgB;IAIlB,KAAK,CAAApkD,EAAL,GAAW,CAAX;EAZuB;EAezB,CAAA+lD,kBAAmBzyC,MAAnB,EAA2B;IACzB,MAAMuzC,aAAA,GAAgB,KAAK,CAAAhnD,QAAL,CAAeilD,eAAf,CACpBZ,MADoB,EAEpB,eAFoB,CAAtB;IAIA2C,aAAA,CAAc9mD,YAAd,CAA2B,MAA3B,EAAmC,QAAnC;IACA8mD,aAAA,CAAc9mD,YAAd,CACE,QADF,EAEE,sFAFF;IAIAuT,MAAA,CAAOtN,MAAP,CAAc6gD,aAAd;EAVyB;EAa3B,CAAApB,aAAczlD,EAAd,EAAkB;IAChB,MAAMsT,MAAA,GAAS,KAAK,CAAAzT,QAAL,CAAeilD,eAAf,CAA+BZ,MAA/B,EAAuC,QAAvC,CAAf;IACA5wC,MAAA,CAAOvT,YAAP,CAAoB,6BAApB,EAAmD,MAAnD;IACAuT,MAAA,CAAOvT,YAAP,CAAoB,IAApB,EAA0BC,EAA1B;IACA,KAAK,CAAA+F,IAAL,CAAWC,MAAX,CAAkBsN,MAAlB;IAEA,OAAOA,MAAP;EANgB;EASlB,CAAAwzC,aAAcC,mBAAd,EAAmCC,IAAnC,EAAyClB,KAAzC,EAAgD;IAC9C,MAAMmB,MAAA,GAAS,KAAK,CAAApnD,QAAL,CAAeilD,eAAf,CAA+BZ,MAA/B,EAAuC8C,IAAvC,CAAf;IACAC,MAAA,CAAOlnD,YAAP,CAAoB,MAApB,EAA4B,UAA5B;IACAknD,MAAA,CAAOlnD,YAAP,CAAoB,aAApB,EAAmC+lD,KAAnC;IACAiB,mBAAA,CAAoB/gD,MAApB,CAA2BihD,MAA3B;EAJ8C;EAOhD,CAAAvB,yBAA0BwB,MAA1B,EAAkCC,MAAlC,EAA0CC,MAA1C,EAAkD9zC,MAAlD,EAA0D;IACxD,MAAMyzC,mBAAA,GAAsB,KAAK,CAAAlnD,QAAL,CAAeilD,eAAf,CAC1BZ,MAD0B,EAE1B,qBAF0B,CAA5B;IAIA5wC,MAAA,CAAOtN,MAAP,CAAc+gD,mBAAd;IACA,KAAK,CAAAD,YAAL,CAAmBC,mBAAnB,EAAwC,SAAxC,EAAmDG,MAAnD;IACA,KAAK,CAAAJ,YAAL,CAAmBC,mBAAnB,EAAwC,SAAxC,EAAmDI,MAAnD;IACA,KAAK,CAAAL,YAAL,CAAmBC,mBAAnB,EAAwC,SAAxC,EAAmDK,MAAnD;EARwD;EAW1D,CAAAxB,OAAQptD,KAAR,EAAe;IACb,KAAK,CAAAuN,IAAL,CAAW7F,KAAX,CAAiB1H,KAAjB,GAAyBA,KAAzB;IACA,OAAOotD,MAAA,CAAOyB,gBAAA,CAAiB,KAAK,CAAAthD,IAAtB,EAA6BuhD,gBAA7B,CAA8C,OAA9C,CAAP,CAAP;EAFa;AA5TgC;AAkUjD,MAAMlqC,gBAAN,SAA+B6b,+DAA/B,CAAiD;EAC/C/6B,YAAY;IAAEqjB,aAAA,GAAgBC,UAAA,CAAW3hB;EAA7B,IAA0C,EAAtD,EAA0D;IACxD;IACA,KAAK0nD,SAAL,GAAiBhmC,aAAjB;EAFwD;EAQ1D2X,cAAcv+B,KAAd,EAAqBC,MAArB,EAA6B;IAC3B,MAAMmf,MAAA,GAAS,KAAKwtC,SAAL,CAAeznD,aAAf,CAA6B,QAA7B,CAAf;IACAia,MAAA,CAAOpf,KAAP,GAAeA,KAAf;IACAof,MAAA,CAAOnf,MAAP,GAAgBA,MAAhB;IACA,OAAOmf,MAAP;EAJ2B;AATkB;AAiBjD,eAAeytC,SAAfA,CAAyB1+C,GAAzB,EAA8B2+C,YAAA,GAAe,KAA7C,EAAoD;EAClD,IAEEhqC,eAAA,CAAgB3U,GAAhB,EAAqBjJ,QAAA,CAASmiB,OAA9B,CAFF,EAGE;IACA,MAAM0lC,QAAA,GAAW,MAAM1xB,KAAA,CAAMltB,GAAN,CAAvB;IACA,IAAI,CAAC4+C,QAAA,CAASC,EAAd,EAAkB;MAChB,MAAM,IAAIroC,KAAJ,CAAUooC,QAAA,CAASE,UAAnB,CAAN;IADgB;IAGlB,OAAOH,YAAA,GACH,IAAI3iC,UAAJ,CAAe,MAAM4iC,QAAA,CAASG,WAAT,EAArB,CADG,GAEH5qC,8DAAA,CAAc,MAAMyqC,QAAA,CAASI,IAAT,EAApB,CAFJ;EALA;EAWF,OAAO,IAAItkC,OAAJ,CAAY,CAACC,OAAD,EAAUe,MAAV,KAAqB;IACtC,MAAMujC,OAAA,GAAU,IAAIC,cAAJ,EAAhB;IACAD,OAAA,CAAQrzC,IAAR,CAAa,KAAb,EAAoB5L,GAApB,EAA8C,IAA9C;IAEA,IAAI2+C,YAAJ,EAAkB;MAChBM,OAAA,CAAQE,YAAR,GAAuB,aAAvB;IADgB;IAGlBF,OAAA,CAAQG,kBAAR,GAA6B,MAAM;MACjC,IAAIH,OAAA,CAAQI,UAAR,KAAuBH,cAAA,CAAeI,IAA1C,EAAgD;QAC9C;MAD8C;MAGhD,IAAIL,OAAA,CAAQ7yB,MAAR,KAAmB,GAAnB,IAA0B6yB,OAAA,CAAQ7yB,MAAR,KAAmB,CAAjD,EAAoD;QAClD,IAAIj6B,IAAJ;QACA,IAAIwsD,YAAA,IAAgBM,OAAA,CAAQL,QAA5B,EAAsC;UACpCzsD,IAAA,GAAO,IAAI6pB,UAAJ,CAAeijC,OAAA,CAAQL,QAAvB,CAAP;QADoC,CAAtC,MAEO,IAAI,CAACD,YAAD,IAAiBM,OAAA,CAAQM,YAA7B,EAA2C;UAChDptD,IAAA,GAAOgiB,8DAAA,CAAc8qC,OAAA,CAAQM,YAAtB,CAAP;QADgD;QAGlD,IAAIptD,IAAJ,EAAU;UACRwoB,OAAA,CAAQxoB,IAAR;UACA;QAFQ;MAPwC;MAYpDupB,MAAA,CAAO,IAAIlF,KAAJ,CAAUyoC,OAAA,CAAQH,UAAlB,CAAP;IAhBiC,CAAnC;IAmBAG,OAAA,CAAQ1jC,IAAR,CAAa,IAAb;EA1BsC,CAAjC,CAAP;AAfkD;AA6CpD,MAAMhH,oBAAN,SAAmCic,mEAAnC,CAAyD;EAIvDI,WAAW5wB,GAAX,EAAgBywB,eAAhB,EAAiC;IAC/B,OAAOiuB,SAAA,CAAU1+C,GAAV,EAAoC,KAAKyZ,YAAzC,EAAuDY,IAAvD,CAA4DloB,IAAA,IAAQ;MACzE,OAAO;QAAEqtD,QAAA,EAAUrtD,IAAZ;QAAkBs+B;MAAlB,CAAP;IADyE,CAApE,CAAP;EAD+B;AAJsB;AAWzD,MAAMhc,0BAAN,SAAyCoc,yEAAzC,CAAqE;EAInED,WAAW5wB,GAAX,EAAgB;IACd,OAAO0+C,SAAA,CAAU1+C,GAAV,EAAoC,IAApC,CAAP;EADc;AAJmD;AASrE,MAAM/O,aAAN,SAA4B6/B,4DAA5B,CAA2C;EAIzCE,WAAWtuB,IAAX,EAAiB;IACf,OAAO3L,QAAA,CAASilD,eAAT,CAAyBZ,MAAzB,EAAiC14C,IAAjC,CAAP;EADe;AAJwB;AAwC3C,MAAMkS,YAAN,CAAmB;EAIjBxf,YAAY;IACVqsB,OADU;IAEVJ,KAFU;IAGVtpB,QAHU;IAIVupB,OAAA,GAAU,CAJA;IAKVC,OAAA,GAAU,CALA;IAMVC,QAAA,GAAW;EAND,CAAZ,EAOG;IACD,KAAKC,OAAL,GAAeA,OAAf;IACA,KAAKJ,KAAL,GAAaA,KAAb;IACA,KAAKtpB,QAAL,GAAgBA,QAAhB;IACA,KAAKupB,OAAL,GAAeA,OAAf;IACA,KAAKC,OAAL,GAAeA,OAAf;IAIA,MAAMk+B,OAAA,GAAW,CAAAh+B,OAAA,CAAQ,CAAR,IAAaA,OAAA,CAAQ,CAAR,CAAb,IAA2B,CAA5C;IACA,MAAMi+B,OAAA,GAAW,CAAAj+B,OAAA,CAAQ,CAAR,IAAaA,OAAA,CAAQ,CAAR,CAAb,IAA2B,CAA5C;IACA,IAAIk+B,OAAJ,EAAaC,OAAb,EAAsBC,OAAtB,EAA+BC,OAA/B;IAEA/nD,QAAA,IAAY,GAAZ;IACA,IAAIA,QAAA,GAAW,CAAf,EAAkB;MAChBA,QAAA,IAAY,GAAZ;IADgB;IAGlB,QAAQA,QAAR;MACE,KAAK,GAAL;QACE4nD,OAAA,GAAU,CAAC,CAAX;QACAC,OAAA,GAAU,CAAV;QACAC,OAAA,GAAU,CAAV;QACAC,OAAA,GAAU,CAAV;QACA;MACF,KAAK,EAAL;QACEH,OAAA,GAAU,CAAV;QACAC,OAAA,GAAU,CAAV;QACAC,OAAA,GAAU,CAAV;QACAC,OAAA,GAAU,CAAV;QACA;MACF,KAAK,GAAL;QACEH,OAAA,GAAU,CAAV;QACAC,OAAA,GAAU,CAAC,CAAX;QACAC,OAAA,GAAU,CAAC,CAAX;QACAC,OAAA,GAAU,CAAV;QACA;MACF,KAAK,CAAL;QACEH,OAAA,GAAU,CAAV;QACAC,OAAA,GAAU,CAAV;QACAC,OAAA,GAAU,CAAV;QACAC,OAAA,GAAU,CAAC,CAAX;QACA;MACF;QACE,MAAM,IAAItpC,KAAJ,CACJ,mEADI,CAAN;IA1BJ;IA+BA,IAAIgL,QAAJ,EAAc;MACZq+B,OAAA,GAAU,CAACA,OAAX;MACAC,OAAA,GAAU,CAACA,OAAX;IAFY;IAKd,IAAIC,aAAJ,EAAmBC,aAAnB;IACA,IAAInuD,KAAJ,EAAWC,MAAX;IACA,IAAI6tD,OAAA,KAAY,CAAhB,EAAmB;MACjBI,aAAA,GAAgB7xD,IAAA,CAAKwX,GAAL,CAASg6C,OAAA,GAAUj+B,OAAA,CAAQ,CAAR,CAAnB,IAAiCJ,KAAjC,GAAyCC,OAAzD;MACA0+B,aAAA,GAAgB9xD,IAAA,CAAKwX,GAAL,CAAS+5C,OAAA,GAAUh+B,OAAA,CAAQ,CAAR,CAAnB,IAAiCJ,KAAjC,GAAyCE,OAAzD;MACA1vB,KAAA,GAAS,CAAA4vB,OAAA,CAAQ,CAAR,IAAaA,OAAA,CAAQ,CAAR,CAAb,IAA2BJ,KAApC;MACAvvB,MAAA,GAAU,CAAA2vB,OAAA,CAAQ,CAAR,IAAaA,OAAA,CAAQ,CAAR,CAAb,IAA2BJ,KAArC;IAJiB,CAAnB,MAKO;MACL0+B,aAAA,GAAgB7xD,IAAA,CAAKwX,GAAL,CAAS+5C,OAAA,GAAUh+B,OAAA,CAAQ,CAAR,CAAnB,IAAiCJ,KAAjC,GAAyCC,OAAzD;MACA0+B,aAAA,GAAgB9xD,IAAA,CAAKwX,GAAL,CAASg6C,OAAA,GAAUj+B,OAAA,CAAQ,CAAR,CAAnB,IAAiCJ,KAAjC,GAAyCE,OAAzD;MACA1vB,KAAA,GAAS,CAAA4vB,OAAA,CAAQ,CAAR,IAAaA,OAAA,CAAQ,CAAR,CAAb,IAA2BJ,KAApC;MACAvvB,MAAA,GAAU,CAAA2vB,OAAA,CAAQ,CAAR,IAAaA,OAAA,CAAQ,CAAR,CAAb,IAA2BJ,KAArC;IAJK;IASP,KAAKc,SAAL,GAAiB,CACfw9B,OAAA,GAAUt+B,KADK,EAEfu+B,OAAA,GAAUv+B,KAFK,EAGfw+B,OAAA,GAAUx+B,KAHK,EAIfy+B,OAAA,GAAUz+B,KAJK,EAKf0+B,aAAA,GAAgBJ,OAAA,GAAUt+B,KAAV,GAAkBo+B,OAAlC,GAA4CI,OAAA,GAAUx+B,KAAV,GAAkBq+B,OAL/C,EAMfM,aAAA,GAAgBJ,OAAA,GAAUv+B,KAAV,GAAkBo+B,OAAlC,GAA4CK,OAAA,GAAUz+B,KAAV,GAAkBq+B,OAN/C,CAAjB;IASA,KAAK7tD,KAAL,GAAaA,KAAb;IACA,KAAKC,MAAL,GAAcA,MAAd;EA/EC;EAsFH,IAAIgG,OAAJA,CAAA,EAAc;IACZ,MAAM;MAAE2pB;IAAF,IAAc,IAApB;IACA,OAAO5wB,uDAAA,CAAO,IAAP,EAAa,SAAb,EAAwB;MAC7B6G,SAAA,EAAW+pB,OAAA,CAAQ,CAAR,IAAaA,OAAA,CAAQ,CAAR,CADK;MAE7B9pB,UAAA,EAAY8pB,OAAA,CAAQ,CAAR,IAAaA,OAAA,CAAQ,CAAR,CAFI;MAG7B7pB,KAAA,EAAO6pB,OAAA,CAAQ,CAAR,CAHsB;MAI7B5pB,KAAA,EAAO4pB,OAAA,CAAQ,CAAR;IAJsB,CAAxB,CAAP;EAFY;EAedtO,MAAM;IACJkO,KAAA,GAAQ,KAAKA,KADT;IAEJtpB,QAAA,GAAW,KAAKA,QAFZ;IAGJupB,OAAA,GAAU,KAAKA,OAHX;IAIJC,OAAA,GAAU,KAAKA,OAJX;IAKJC,QAAA,GAAW;EALP,IAMF,EANJ,EAMQ;IACN,OAAO,IAAI5M,YAAJ,CAAiB;MACtB6M,OAAA,EAAS,KAAKA,OAAL,CAAapxB,KAAb,EADa;MAEtBgxB,KAFsB;MAGtBtpB,QAHsB;MAItBupB,OAJsB;MAKtBC,OALsB;MAMtBC;IANsB,CAAjB,CAAP;EADM;EAqBRy+B,uBAAuBxxD,CAAvB,EAA0BI,CAA1B,EAA6B;IAC3B,OAAOkC,iDAAA,CAAKizC,cAAL,CAAoB,CAACv1C,CAAD,EAAII,CAAJ,CAApB,EAA4B,KAAKszB,SAAjC,CAAP;EAD2B;EAW7B+9B,2BAA2BtuD,IAA3B,EAAiC;IAC/B,MAAMuuD,OAAA,GAAUpvD,iDAAA,CAAKizC,cAAL,CAAoB,CAACpyC,IAAA,CAAK,CAAL,CAAD,EAAUA,IAAA,CAAK,CAAL,CAAV,CAApB,EAAwC,KAAKuwB,SAA7C,CAAhB;IACA,MAAMi+B,WAAA,GAAcrvD,iDAAA,CAAKizC,cAAL,CAAoB,CAACpyC,IAAA,CAAK,CAAL,CAAD,EAAUA,IAAA,CAAK,CAAL,CAAV,CAApB,EAAwC,KAAKuwB,SAA7C,CAApB;IACA,OAAO,CAACg+B,OAAA,CAAQ,CAAR,CAAD,EAAaA,OAAA,CAAQ,CAAR,CAAb,EAAyBC,WAAA,CAAY,CAAZ,CAAzB,EAAyCA,WAAA,CAAY,CAAZ,CAAzC,CAAP;EAH+B;EAejCC,kBAAkB5xD,CAAlB,EAAqBI,CAArB,EAAwB;IACtB,OAAOkC,iDAAA,CAAKuvD,qBAAL,CAA2B,CAAC7xD,CAAD,EAAII,CAAJ,CAA3B,EAAmC,KAAKszB,SAAxC,CAAP;EADsB;AArKP;AA0KnB,MAAMtN,2BAAN,SAA0CsmC,0DAA1C,CAAwD;EACtD/lD,YAAYmrD,GAAZ,EAAiB/5B,UAAA,GAAa,CAA9B,EAAiC;IAC/B,MAAM+5B,GAAN,EAAW,6BAAX;IACA,KAAK/5B,UAAL,GAAkBA,UAAlB;EAF+B;AADqB;AAOxD,SAAS9R,YAATA,CAAsB1U,GAAtB,EAA2B;EACzB,MAAMsO,EAAA,GAAKtO,GAAA,CAAItD,MAAf;EACA,IAAIoO,CAAA,GAAI,CAAR;EACA,OAAOA,CAAA,GAAIwD,EAAJ,IAAUtO,GAAA,CAAI8K,CAAJ,EAAO01C,IAAP,OAAkB,EAAnC,EAAuC;IACrC11C,CAAA;EADqC;EAGvC,OAAO9K,GAAA,CAAIuI,SAAJ,CAAcuC,CAAd,EAAiBA,CAAA,GAAI,CAArB,EAAwB5H,WAAxB,OAA0C,OAAjD;AANyB;AAS3B,SAASu9C,SAATA,CAAmBh/C,QAAnB,EAA6B;EAC3B,OAAO,OAAOA,QAAP,KAAoB,QAApB,IAAgC,UAAUmO,IAAV,CAAenO,QAAf,CAAvC;AAD2B;AAU7B,SAASvQ,kBAATA,CAA4B8O,GAA5B,EAAiC0gD,aAAA,GAAgB,KAAjD,EAAwD;EACtD,IAAI,CAACA,aAAL,EAAoB;IAClB,CAAC1gD,GAAD,IAAQA,GAAA,CAAIqO,KAAJ,CAAU,MAAV,EAAkB,CAAlB,CAAR;EADkB;EAGpB,OAAOrO,GAAA,CAAIuI,SAAJ,CAAcvI,GAAA,CAAI2gD,WAAJ,CAAgB,GAAhB,IAAuB,CAArC,CAAP;AAJsD;AAcxD,SAASC,qBAATA,CAA+B5gD,GAA/B,EAAoC6gD,eAAA,GAAkB,cAAtD,EAAsE;EACpE,IAAI,OAAO7gD,GAAP,KAAe,QAAnB,EAA6B;IAC3B,OAAO6gD,eAAP;EAD2B;EAG7B,IAAInsC,YAAA,CAAa1U,GAAb,CAAJ,EAAuB;IACrBhP,qDAAA,CAAK,oEAAL;IACA,OAAO6vD,eAAP;EAFqB;EAIvB,MAAMC,KAAA,GAAQ,qDAAd;EAGA,MAAMC,UAAA,GAAa,+BAAnB;EACA,MAAMC,QAAA,GAAWF,KAAA,CAAMG,IAAN,CAAWjhD,GAAX,CAAjB;EACA,IAAIkhD,iBAAA,GACFH,UAAA,CAAWE,IAAX,CAAgBD,QAAA,CAAS,CAAT,CAAhB,KACAD,UAAA,CAAWE,IAAX,CAAgBD,QAAA,CAAS,CAAT,CAAhB,CADA,IAEAD,UAAA,CAAWE,IAAX,CAAgBD,QAAA,CAAS,CAAT,CAAhB,CAHF;EAIA,IAAIE,iBAAJ,EAAuB;IACrBA,iBAAA,GAAoBA,iBAAA,CAAkB,CAAlB,CAApB;IACA,IAAIA,iBAAA,CAAkB/8C,QAAlB,CAA2B,GAA3B,CAAJ,EAAqC;MAEnC,IAAI;QACF+8C,iBAAA,GAAoBH,UAAA,CAAWE,IAAX,CAClBE,kBAAA,CAAmBD,iBAAnB,CADkB,EAElB,CAFkB,CAApB;MADE,CAAJ,CAIE,MAAM;IAN2B;EAFhB;EAevB,OAAOA,iBAAA,IAAqBL,eAA5B;AAhCoE;AAmCtE,MAAM/rC,SAAN,CAAgB;EACdssC,OAAA,GAAUzlD,MAAA,CAAO3J,MAAP,CAAc,IAAd,CAAV;EAEAqvD,KAAA,GAAQ,EAAR;EAEAh0C,KAAK3R,IAAL,EAAW;IACT,IAAIA,IAAA,IAAQ,KAAK0lD,OAAjB,EAA0B;MACxBpwD,qDAAA,CAAM,gCAA+B0K,IAAhC,EAAL;IADwB;IAG1B,KAAK0lD,OAAL,CAAa1lD,IAAb,IAAqBkwC,IAAA,CAAKC,GAAL,EAArB;EAJS;EAOX/nB,QAAQpoB,IAAR,EAAc;IACZ,IAAI,EAAEA,IAAA,IAAQ,KAAK0lD,OAAb,CAAN,EAA6B;MAC3BpwD,qDAAA,CAAM,kCAAiC0K,IAAlC,EAAL;IAD2B;IAG7B,KAAK2lD,KAAL,CAAW/jD,IAAX,CAAgB;MACd5B,IADc;MAEdyhD,KAAA,EAAO,KAAKiE,OAAL,CAAa1lD,IAAb,CAFO;MAGdkiB,GAAA,EAAKguB,IAAA,CAAKC,GAAL;IAHS,CAAhB;IAMA,OAAO,KAAKuV,OAAL,CAAa1lD,IAAb,CAAP;EAVY;EAadpN,SAAA,EAAW;IAET,MAAMgzD,MAAA,GAAS,EAAf;IACA,IAAIC,OAAA,GAAU,CAAd;IACA,WAAW;MAAE7lD;IAAF,CAAX,IAAuB,KAAK2lD,KAA5B,EAAmC;MACjCE,OAAA,GAAUrzD,IAAA,CAAKE,GAAL,CAASsN,IAAA,CAAKgB,MAAd,EAAsB6kD,OAAtB,CAAV;IADiC;IAGnC,WAAW;MAAE7lD,IAAF;MAAQyhD,KAAR;MAAev/B;IAAf,CAAX,IAAmC,KAAKyjC,KAAxC,EAA+C;MAC7CC,MAAA,CAAOhkD,IAAP,CAAY,GAAG5B,IAAA,CAAK8lD,MAAL,CAAYD,OAAZ,CAAqB,IAAG3jC,GAAA,GAAMu/B,KAAM,MAAnD;IAD6C;IAG/C,OAAOmE,MAAA,CAAOzxD,IAAP,CAAY,EAAZ,CAAP;EAVS;AAzBG;AAuChB,SAAS8kB,eAATA,CAAyB3U,GAAzB,EAA8BwZ,OAA9B,EAAuC;EAIrC,IAAI;IACF,MAAM;MAAEioC;IAAF,IAAejoC,OAAA,GAAU,IAAIjD,GAAJ,CAAQvW,GAAR,EAAawZ,OAAb,CAAV,GAAkC,IAAIjD,GAAJ,CAAQvW,GAAR,CAAvD;IAEA,OAAOyhD,QAAA,KAAa,OAAb,IAAwBA,QAAA,KAAa,QAA5C;EAHE,CAAJ,CAIE,MAAM;IACN,OAAO,KAAP;EADM;AAR6B;AAgBvC,SAASC,aAATA,CAAuBh1C,CAAvB,EAA0B;EACxBA,CAAA,CAAElE,cAAF;AADwB;AAK1B,SAASm5C,UAATA,CAAoBt1B,OAApB,EAA6B;EAC3Bu1B,OAAA,CAAQC,GAAR,CAAY,2BAA2Bx1B,OAAvC;AAD2B;AAI7B,IAAIy1B,kBAAJ;AAEA,MAAM3wD,aAAN,CAAoB;EAiBlB,OAAOob,YAAPA,CAAoBw1C,KAApB,EAA2B;IACzB,IAAI,CAACA,KAAD,IAAU,OAAOA,KAAP,KAAiB,QAA/B,EAAyC;MACvC,OAAO,IAAP;IADuC;IAKzCD,kBAAA,KAAuB,IAAIE,MAAJ,CACrB,QACE,UADF,GAEE,WAFF,GAGE,WAHF,GAIE,WAJF,GAKE,WALF,GAME,WANF,GAOE,YAPF,GAQE,WARF,GASE,IATF,GAUE,WAVF,GAWE,IAZmB,CAAvB;IAkBA,MAAMC,OAAA,GAAUH,kBAAA,CAAmBb,IAAnB,CAAwBc,KAAxB,CAAhB;IACA,IAAI,CAACE,OAAL,EAAc;MACZ,OAAO,IAAP;IADY;IAMd,MAAMC,IAAA,GAAOvzC,QAAA,CAASszC,OAAA,CAAQ,CAAR,CAAT,EAAqB,EAArB,CAAb;IACA,IAAIE,KAAA,GAAQxzC,QAAA,CAASszC,OAAA,CAAQ,CAAR,CAAT,EAAqB,EAArB,CAAZ;IACAE,KAAA,GAAQA,KAAA,IAAS,CAAT,IAAcA,KAAA,IAAS,EAAvB,GAA4BA,KAAA,GAAQ,CAApC,GAAwC,CAAhD;IACA,IAAIC,GAAA,GAAMzzC,QAAA,CAASszC,OAAA,CAAQ,CAAR,CAAT,EAAqB,EAArB,CAAV;IACAG,GAAA,GAAMA,GAAA,IAAO,CAAP,IAAYA,GAAA,IAAO,EAAnB,GAAwBA,GAAxB,GAA8B,CAApC;IACA,IAAIC,IAAA,GAAO1zC,QAAA,CAASszC,OAAA,CAAQ,CAAR,CAAT,EAAqB,EAArB,CAAX;IACAI,IAAA,GAAOA,IAAA,IAAQ,CAAR,IAAaA,IAAA,IAAQ,EAArB,GAA0BA,IAA1B,GAAiC,CAAxC;IACA,IAAIC,MAAA,GAAS3zC,QAAA,CAASszC,OAAA,CAAQ,CAAR,CAAT,EAAqB,EAArB,CAAb;IACAK,MAAA,GAASA,MAAA,IAAU,CAAV,IAAeA,MAAA,IAAU,EAAzB,GAA8BA,MAA9B,GAAuC,CAAhD;IACA,IAAIC,MAAA,GAAS5zC,QAAA,CAASszC,OAAA,CAAQ,CAAR,CAAT,EAAqB,EAArB,CAAb;IACAM,MAAA,GAASA,MAAA,IAAU,CAAV,IAAeA,MAAA,IAAU,EAAzB,GAA8BA,MAA9B,GAAuC,CAAhD;IACA,MAAMC,qBAAA,GAAwBP,OAAA,CAAQ,CAAR,KAAc,GAA5C;IACA,IAAIQ,UAAA,GAAa9zC,QAAA,CAASszC,OAAA,CAAQ,CAAR,CAAT,EAAqB,EAArB,CAAjB;IACAQ,UAAA,GAAaA,UAAA,IAAc,CAAd,IAAmBA,UAAA,IAAc,EAAjC,GAAsCA,UAAtC,GAAmD,CAAhE;IACA,IAAIC,YAAA,GAAe/zC,QAAA,CAASszC,OAAA,CAAQ,CAAR,CAAT,EAAqB,EAArB,KAA4B,CAA/C;IACAS,YAAA,GAAeA,YAAA,IAAgB,CAAhB,IAAqBA,YAAA,IAAgB,EAArC,GAA0CA,YAA1C,GAAyD,CAAxE;IAMA,IAAIF,qBAAA,KAA0B,GAA9B,EAAmC;MACjCH,IAAA,IAAQI,UAAR;MACAH,MAAA,IAAUI,YAAV;IAFiC,CAAnC,MAGO,IAAIF,qBAAA,KAA0B,GAA9B,EAAmC;MACxCH,IAAA,IAAQI,UAAR;MACAH,MAAA,IAAUI,YAAV;IAFwC;IAK1C,OAAO,IAAI9W,IAAJ,CAASA,IAAA,CAAK+W,GAAL,CAAST,IAAT,EAAeC,KAAf,EAAsBC,GAAtB,EAA2BC,IAA3B,EAAiCC,MAAjC,EAAyCC,MAAzC,CAAT,CAAP;EA5DyB;AAjBT;AAoFpB,SAASK,kBAATA,CAA4BC,OAA5B,EAAqC;EAAExhC,KAAA,GAAQ,CAAV;EAAatpB,QAAA,GAAW;AAAxB,CAArC,EAAkE;EAChE,MAAM;IAAElG,KAAF;IAASC;EAAT,IAAoB+wD,OAAA,CAAQC,UAAR,CAAmB1rD,KAA7C;EACA,MAAMqqB,OAAA,GAAU,CAAC,CAAD,EAAI,CAAJ,EAAO9S,QAAA,CAAS9c,KAAT,CAAP,EAAwB8c,QAAA,CAAS7c,MAAT,CAAxB,CAAhB;EAEA,OAAO,IAAI8iB,YAAJ,CAAiB;IACtB6M,OADsB;IAEtBJ,KAFsB;IAGtBtpB;EAHsB,CAAjB,CAAP;AAJgE;AAWlE,SAAS+kD,MAATA,CAAgBptD,KAAhB,EAAuB;EACrB,IAAIA,KAAA,CAAMw7C,UAAN,CAAiB,GAAjB,CAAJ,EAA2B;IACzB,MAAM6X,QAAA,GAAWp0C,QAAA,CAASjf,KAAA,CAAMW,KAAN,CAAY,CAAZ,CAAT,EAAyB,EAAzB,CAAjB;IACA,OAAO,CACJ,CAAA0yD,QAAA,GAAW,QAAX,KAAwB,EADpB,EAEJ,CAAAA,QAAA,GAAW,QAAX,KAAwB,CAFpB,EAGLA,QAAA,GAAW,QAHN,CAAP;EAFyB;EAS3B,IAAIrzD,KAAA,CAAMw7C,UAAN,CAAiB,MAAjB,CAAJ,EAA8B;IAE5B,OAAOx7C,KAAA,CACJW,KADI,CACsB,CADtB,EACyB,CAAC,CAD1B,EAEJge,KAFI,CAEE,GAFF,EAGJ1e,GAHI,CAGAlB,CAAA,IAAKkgB,QAAA,CAASlgB,CAAT,CAHL,CAAP;EAF4B;EAQ9B,IAAIiB,KAAA,CAAMw7C,UAAN,CAAiB,OAAjB,CAAJ,EAA+B;IAC7B,OAAOx7C,KAAA,CACJW,KADI,CACuB,CADvB,EAC0B,CAAC,CAD3B,EAEJge,KAFI,CAEE,GAFF,EAGJ1e,GAHI,CAGAlB,CAAA,IAAKkgB,QAAA,CAASlgB,CAAT,CAHL,EAIJ4B,KAJI,CAIE,CAJF,EAIK,CAJL,CAAP;EAD6B;EAQ/BW,qDAAA,CAAM,8BAA6BtB,KAAM,GAAzC;EACA,OAAO,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,CAAP;AA3BqB;AA8BvB,SAASszD,cAATA,CAAwBpuB,MAAxB,EAAgC;EAC9B,MAAMquB,IAAA,GAAOlsD,QAAA,CAASC,aAAT,CAAuB,MAAvB,CAAb;EACAisD,IAAA,CAAK7rD,KAAL,CAAWgD,UAAX,GAAwB,QAAxB;EACArD,QAAA,CAASklD,IAAT,CAAc/+C,MAAd,CAAqB+lD,IAArB;EACA,WAAWvnD,IAAX,IAAmBk5B,MAAA,CAAOh5B,IAAP,EAAnB,EAAkC;IAChCqnD,IAAA,CAAK7rD,KAAL,CAAW1H,KAAX,GAAmBgM,IAAnB;IACA,MAAMwnD,aAAA,GAAgBrnC,MAAA,CAAO0iC,gBAAP,CAAwB0E,IAAxB,EAA8BvzD,KAApD;IACAklC,MAAA,CAAO/jB,GAAP,CAAWnV,IAAX,EAAiBohD,MAAA,CAAOoG,aAAP,CAAjB;EAHgC;EAKlCD,IAAA,CAAK94C,MAAL;AAT8B;AAYhC,SAAS+mB,mBAATA,CAA6BM,GAA7B,EAAkC;EAChC,MAAM;IAAE2N,CAAF;IAAK3vC,CAAL;IAAQZ,CAAR;IAAWwwC,CAAX;IAAc1yB,CAAd;IAAiB2yB;EAAjB,IAAuB7N,GAAA,CAAImpB,YAAJ,EAA7B;EACA,OAAO,CAACxb,CAAD,EAAI3vC,CAAJ,EAAOZ,CAAP,EAAUwwC,CAAV,EAAa1yB,CAAb,EAAgB2yB,CAAhB,CAAP;AAFgC;AAKlC,SAASxC,0BAATA,CAAoCrL,GAApC,EAAyC;EACvC,MAAM;IAAE2N,CAAF;IAAK3vC,CAAL;IAAQZ,CAAR;IAAWwwC,CAAX;IAAc1yB,CAAd;IAAiB2yB;EAAjB,IAAuB7N,GAAA,CAAImpB,YAAJ,GAAmBwI,UAAnB,EAA7B;EACA,OAAO,CAAChkB,CAAD,EAAI3vC,CAAJ,EAAOZ,CAAP,EAAUwwC,CAAV,EAAa1yB,CAAb,EAAgB2yB,CAAhB,CAAP;AAFuC;AAWzC,SAASjuC,kBAATA,CACEyM,GADF,EAEE/G,QAFF,EAGEssD,QAAA,GAAW,KAHb,EAIEC,UAAA,GAAa,IAJf,EAKE;EACA,IAAIvsD,QAAA,YAAoB8d,YAAxB,EAAsC;IACpC,MAAM;MAAEld,SAAF;MAAaC;IAAb,IAA4Bb,QAAA,CAASgB,OAA3C;IACA,MAAM;MAAEV;IAAF,IAAYyG,GAAlB;IACA,MAAMylD,QAAA,GAAW3yD,wDAAA,CAAY4yD,mBAA7B;IAEA,MAAMnK,CAAA,GAAK,yBAAwB1hD,SAAU,IAA7C;MACE2hD,CAAA,GAAK,yBAAwB1hD,UAAW,IAD1C;IAEA,MAAM6rD,QAAA,GAAWF,QAAA,GAAY,SAAQlK,CAAE,QAAtB,GAAiC,QAAOA,CAAE,GAA3D;MACEqK,SAAA,GAAYH,QAAA,GAAY,SAAQjK,CAAE,QAAtB,GAAiC,QAAOA,CAAE,GADxD;IAGA,IAAI,CAAC+J,QAAD,IAAatsD,QAAA,CAASiB,QAAT,GAAoB,GAApB,KAA4B,CAA7C,EAAgD;MAC9CX,KAAA,CAAMvF,KAAN,GAAc2xD,QAAd;MACApsD,KAAA,CAAMtF,MAAN,GAAe2xD,SAAf;IAF8C,CAAhD,MAGO;MACLrsD,KAAA,CAAMvF,KAAN,GAAc4xD,SAAd;MACArsD,KAAA,CAAMtF,MAAN,GAAe0xD,QAAf;IAFK;EAb6B;EAmBtC,IAAIH,UAAJ,EAAgB;IACdxlD,GAAA,CAAI5G,YAAJ,CAAiB,oBAAjB,EAAuCH,QAAA,CAASiB,QAAhD;EADc;AApBhB;;;;;;;;;;;;;;;;;;;;;;;ACj7BF;AAQA;AAKA;AACA;AAKA,MAAM+rD,cAAN,SAA6BvyC,8BAA7B,CAA8C;EAC5C,CAAAwyC,kBAAA,GAAsB,KAAKC,aAAL,CAAmBj4C,IAAnB,CAAwB,IAAxB,CAAtB;EAEA,CAAAk4C,mBAAA,GAAuB,KAAKC,cAAL,CAAoBn4C,IAApB,CAAyB,IAAzB,CAAvB;EAEA,CAAAo4C,mBAAA,GAAuB,KAAKC,cAAL,CAAoBr4C,IAApB,CAAyB,IAAzB,CAAvB;EAEA,CAAAs4C,qBAAA,GAAyB,KAAKC,gBAAL,CAAsBv4C,IAAtB,CAA2B,IAA3B,CAAzB;EAEA,CAAArc,KAAA;EAEA,CAAA8R,OAAA,GAAW,EAAX;EAEA,CAAA+iD,WAAA,GAAe,GAAG,KAAKrtD,EAAG,SAA1B;EAEA,CAAAkO,QAAA;EAEA,CAAAyV,WAAA,GAAe,IAAf;EAEA,OAAO2pC,uBAAP,GAAiC,EAAjC;EAEA,OAAOC,gBAAP,GAA0B,CAA1B;EAEA,OAAOC,aAAP,GAAuB,IAAvB;EAEA,OAAOC,gBAAP,GAA0B,EAA1B;EAEA,WAAWC,gBAAXA,CAAA,EAA8B;IAC5B,MAAMC,KAAA,GAAQf,cAAA,CAAev5C,SAA7B;IAEA,MAAMu6C,YAAA,GAAeC,IAAA,IAAQA,IAAA,CAAKzK,OAAL,EAA7B;IAEA,MAAM0K,KAAA,GAAQrB,+BAAA,CAA0BsB,eAAxC;IACA,MAAMC,GAAA,GAAMvB,+BAAA,CAA0BwB,aAAtC;IAEA,OAAOt0D,eAAA,CACL,IADK,EAEL,kBAFK,EAGL,IAAIgzD,qBAAJ,CAAoB,CAClB,CAIE,CAAC,QAAD,EAAW,YAAX,EAAyB,QAAzB,EAAmC,YAAnC,CAJF,EAKEgB,KAAA,CAAMO,cALR,EAME;MAAEC,OAAA,EAAS;IAAX,CANF,CADkB,EASlB,CACE,CAAC,YAAD,EAAe,gBAAf,EAAiC,QAAjC,EAA2C,YAA3C,CADF,EAEER,KAAA,CAAMO,cAFR,CATkB,EAalB,CACE,CAAC,WAAD,EAAc,eAAd,CADF,EAEEP,KAAA,CAAMS,eAFR,EAGE;MAAE1V,IAAA,EAAM,CAAC,CAACoV,KAAF,EAAS,CAAT,CAAR;MAAqBO,OAAA,EAAST;IAA9B,CAHF,CAbkB,EAkBlB,CACE,CAAC,gBAAD,EAAmB,qBAAnB,CADF,EAEED,KAAA,CAAMS,eAFR,EAGE;MAAE1V,IAAA,EAAM,CAAC,CAACsV,GAAF,EAAO,CAAP,CAAR;MAAmBK,OAAA,EAAST;IAA5B,CAHF,CAlBkB,EAuBlB,CACE,CAAC,YAAD,EAAe,gBAAf,CADF,EAEED,KAAA,CAAMS,eAFR,EAGE;MAAE1V,IAAA,EAAM,CAACoV,KAAD,EAAQ,CAAR,CAAR;MAAoBO,OAAA,EAAST;IAA7B,CAHF,CAvBkB,EA4BlB,CACE,CAAC,iBAAD,EAAoB,sBAApB,CADF,EAEED,KAAA,CAAMS,eAFR,EAGE;MAAE1V,IAAA,EAAM,CAACsV,GAAD,EAAM,CAAN,CAAR;MAAkBK,OAAA,EAAST;IAA3B,CAHF,CA5BkB,EAiClB,CACE,CAAC,SAAD,EAAY,aAAZ,CADF,EAEED,KAAA,CAAMS,eAFR,EAGE;MAAE1V,IAAA,EAAM,CAAC,CAAD,EAAI,CAACoV,KAAL,CAAR;MAAqBO,OAAA,EAAST;IAA9B,CAHF,CAjCkB,EAsClB,CACE,CAAC,cAAD,EAAiB,mBAAjB,CADF,EAEED,KAAA,CAAMS,eAFR,EAGE;MAAE1V,IAAA,EAAM,CAAC,CAAD,EAAI,CAACsV,GAAL,CAAR;MAAmBK,OAAA,EAAST;IAA5B,CAHF,CAtCkB,EA2ClB,CACE,CAAC,WAAD,EAAc,eAAd,CADF,EAEED,KAAA,CAAMS,eAFR,EAGE;MAAE1V,IAAA,EAAM,CAAC,CAAD,EAAIoV,KAAJ,CAAR;MAAoBO,OAAA,EAAST;IAA7B,CAHF,CA3CkB,EAgDlB,CACE,CAAC,gBAAD,EAAmB,qBAAnB,CADF,EAEED,KAAA,CAAMS,eAFR,EAGE;MAAE1V,IAAA,EAAM,CAAC,CAAD,EAAIsV,GAAJ,CAAR;MAAkBK,OAAA,EAAST;IAA3B,CAHF,CAhDkB,CAApB,CAHK,CAAP;EAR4B;EAoE9B,OAAOtyC,KAAP,GAAe,UAAf;EAEA,OAAOgzC,WAAP,GAAqBh1D,yBAAA,CAAqB8C,QAA1C;EAEA8B,YAAYmb,MAAZ,EAAoB;IAClB,MAAM;MAAE,GAAGA,MAAL;MAAa7U,IAAA,EAAM;IAAnB,CAAN;IACA,KAAK,CAAAhM,KAAL,GACE6gB,MAAA,CAAO7gB,KAAP,IACAo0D,cAAA,CAAeY,aADf,IAEAnzC,8BAAA,CAAiBk0C,iBAHnB;IAIA,KAAK,CAAArgD,QAAL,GAAiBmL,MAAA,CAAOnL,QAAP,IAAmB0+C,cAAA,CAAea,gBAAnD;EANkB;EAUpB,OAAOe,UAAPA,CAAkBC,IAAlB,EAAwB;IACtBp0C,8BAAA,CAAiBm0C,UAAjB,CAA4BC,IAA5B,EAAkC;MAChCC,OAAA,EAAS,CAAC,iCAAD;IADuB,CAAlC;IAGA,MAAMxuD,KAAA,GAAQmnD,gBAAA,CAAiBxnD,QAAA,CAAS8uD,eAA1B,CAAd;IAYA,KAAKpB,gBAAL,GAAwBqB,UAAA,CACtB1uD,KAAA,CAAMonD,gBAAN,CAAuB,oBAAvB,CADsB,CAAxB;EAhBsB;EAsBxB,OAAOuH,mBAAPA,CAA2BrjD,IAA3B,EAAiCC,KAAjC,EAAwC;IACtC,QAAQD,IAAR;MACE,KAAKghD,+BAAA,CAA2BsC,aAAhC;QACElC,cAAA,CAAea,gBAAf,GAAkChiD,KAAlC;QACA;MACF,KAAK+gD,+BAAA,CAA2BuC,cAAhC;QACEnC,cAAA,CAAeY,aAAf,GAA+B/hD,KAA/B;QACA;IANJ;EADsC;EAYxCujD,aAAaxjD,IAAb,EAAmBC,KAAnB,EAA0B;IACxB,QAAQD,IAAR;MACE,KAAKghD,+BAAA,CAA2BsC,aAAhC;QACE,KAAK,CAAAG,cAAL,CAAqBxjD,KAArB;QACA;MACF,KAAK+gD,+BAAA,CAA2BuC,cAAhC;QACE,KAAK,CAAAG,WAAL,CAAkBzjD,KAAlB;QACA;IANJ;EADwB;EAY1B,WAAW0jD,yBAAXA,CAAA,EAAuC;IACrC,OAAO,CACL,CACE3C,+BAAA,CAA2BsC,aAD7B,EAEElC,cAAA,CAAea,gBAFjB,CADK,EAKL,CACEjB,+BAAA,CAA2BuC,cAD7B,EAEEnC,cAAA,CAAeY,aAAf,IAAgCnzC,8BAAA,CAAiBk0C,iBAFnD,CALK,CAAP;EADqC;EAcvC,IAAIa,kBAAJA,CAAA,EAAyB;IACvB,OAAO,CACL,CAAC5C,+BAAA,CAA2BsC,aAA5B,EAA2C,KAAK,CAAA5gD,QAAhD,CADK,EAEL,CAACs+C,+BAAA,CAA2BuC,cAA5B,EAA4C,KAAK,CAAAv2D,KAAjD,CAFK,CAAP;EADuB;EAWzB,CAAAy2D,eAAgB/gD,QAAhB,EAA0B;IACxB,MAAMmhD,WAAA,GAAc98C,IAAA,IAAQ;MAC1B,KAAK+8C,SAAL,CAAepvD,KAAf,CAAqBgO,QAArB,GAAiC,QAAOqE,IAAK,2BAA7C;MACA,KAAKmqB,SAAL,CAAe,CAAf,EAAkB,EAAEnqB,IAAA,GAAO,KAAK,CAAArE,QAAZ,CAAF,GAA2B,KAAKqhD,WAAlD;MACA,KAAK,CAAArhD,QAAL,GAAiBqE,IAAjB;MACA,KAAK,CAAAi9C,mBAAL;IAJ0B,CAA5B;IAMA,MAAMC,aAAA,GAAgB,KAAK,CAAAvhD,QAA3B;IACA,KAAKwhD,WAAL,CAAiB;MACfC,GAAA,EAAKA,CAAA,KAAM;QACTN,WAAA,CAAYnhD,QAAZ;MADS,CADI;MAIf0hD,IAAA,EAAMA,CAAA,KAAM;QACVP,WAAA,CAAYI,aAAZ;MADU,CAJG;MAOfI,QAAA,EAAU,IAPK;MAQfrkD,IAAA,EAAMghD,+BAAA,CAA2BsC,aARlB;MASfgB,mBAAA,EAAqB,IATN;MAUfC,QAAA,EAAU;IAVK,CAAjB;EARwB;EA0B1B,CAAAb,YAAa12D,KAAb,EAAoB;IAClB,MAAMw3D,UAAA,GAAa,KAAK,CAAAx3D,KAAxB;IACA,KAAKk3D,WAAL,CAAiB;MACfC,GAAA,EAAKA,CAAA,KAAM;QACT,KAAK,CAAAn3D,KAAL,GAAc,KAAK82D,SAAL,CAAepvD,KAAf,CAAqB1H,KAArB,GAA6BA,KAA3C;MADS,CADI;MAIfo3D,IAAA,EAAMA,CAAA,KAAM;QACV,KAAK,CAAAp3D,KAAL,GAAc,KAAK82D,SAAL,CAAepvD,KAAf,CAAqB1H,KAArB,GAA6Bw3D,UAA3C;MADU,CAJG;MAOfH,QAAA,EAAU,IAPK;MAQfrkD,IAAA,EAAMghD,+BAAA,CAA2BuC,cARlB;MASfe,mBAAA,EAAqB,IATN;MAUfC,QAAA,EAAU;IAVK,CAAjB;EAFkB;EAqBpB3B,gBAAgB72D,CAAhB,EAAmBI,CAAnB,EAAsB;IACpB,KAAKs4D,UAAL,CAAgBC,wBAAhB,CAAyC34D,CAAzC,EAA4CI,CAA5C,EAAgE,IAAhE;EADoB;EAKtBw4D,sBAAA,EAAwB;IAEtB,MAAMhmC,KAAA,GAAQ,KAAKolC,WAAnB;IACA,OAAO,CACL,CAAC3C,cAAA,CAAeW,gBAAhB,GAAmCpjC,KAD9B,EAEL,EAAEyiC,cAAA,CAAeW,gBAAf,GAAkC,KAAK,CAAAr/C,QAAvC,CAAF,GAAsDic,KAFjD,CAAP;EAHsB;EAUxBimC,QAAA,EAAU;IACR,IAAI,CAAC,KAAKnxD,MAAV,EAAkB;MAChB;IADgB;IAGlB,MAAMmxD,OAAN;IACA,IAAI,KAAKzpD,GAAL,KAAa,IAAjB,EAAuB;MACrB;IADqB;IAIvB,IAAI,CAAC,KAAK0pD,eAAV,EAA2B;MAGzB,KAAKpxD,MAAL,CAAYsB,GAAZ,CAAgB,IAAhB;IAHyB;EATnB;EAiBV+vD,eAAA,EAAiB;IACf,IAAI,KAAKC,YAAL,EAAJ,EAAyB;MACvB;IADuB;IAIzB,KAAKtxD,MAAL,CAAYuxD,eAAZ,CAA4B,KAA5B;IACA,KAAKvxD,MAAL,CAAYwxD,aAAZ,CAA0Bn3D,yBAAA,CAAqB8C,QAA/C;IACA,MAAMk0D,cAAN;IACA,KAAKI,UAAL,CAAgBpwD,SAAhB,CAA0B2S,MAA1B,CAAiC,SAAjC;IACA,KAAKq8C,SAAL,CAAeqB,eAAf,GAAiC,IAAjC;IACA,KAAKC,YAAL,GAAoB,KAApB;IACA,KAAKjqD,GAAL,CAASmI,eAAT,CAAyB,uBAAzB;IACA,KAAKwgD,SAAL,CAAehnD,gBAAf,CAAgC,SAAhC,EAA2C,KAAK,CAAA6kD,qBAAhD;IACA,KAAKmC,SAAL,CAAehnD,gBAAf,CAAgC,OAAhC,EAAyC,KAAK,CAAAykD,mBAA9C;IACA,KAAKuC,SAAL,CAAehnD,gBAAf,CAAgC,MAAhC,EAAwC,KAAK,CAAAukD,kBAA7C;IACA,KAAKyC,SAAL,CAAehnD,gBAAf,CAAgC,OAAhC,EAAyC,KAAK,CAAA2kD,mBAA9C;EAfe;EAmBjB4D,gBAAA,EAAkB;IAChB,IAAI,CAAC,KAAKN,YAAL,EAAL,EAA0B;MACxB;IADwB;IAI1B,KAAKtxD,MAAL,CAAYuxD,eAAZ,CAA4B,IAA5B;IACA,MAAMK,eAAN;IACA,KAAKH,UAAL,CAAgBpwD,SAAhB,CAA0BC,GAA1B,CAA8B,SAA9B;IACA,KAAK+uD,SAAL,CAAeqB,eAAf,GAAiC,KAAjC;IACA,KAAKhqD,GAAL,CAAS5G,YAAT,CAAsB,uBAAtB,EAA+C,KAAK,CAAAstD,WAApD;IACA,KAAKuD,YAAL,GAAoB,IAApB;IACA,KAAKtB,SAAL,CAAep8C,mBAAf,CAAmC,SAAnC,EAA8C,KAAK,CAAAi6C,qBAAnD;IACA,KAAKmC,SAAL,CAAep8C,mBAAf,CAAmC,OAAnC,EAA4C,KAAK,CAAA65C,mBAAjD;IACA,KAAKuC,SAAL,CAAep8C,mBAAf,CAAmC,MAAnC,EAA2C,KAAK,CAAA25C,kBAAhD;IACA,KAAKyC,SAAL,CAAep8C,mBAAf,CAAmC,OAAnC,EAA4C,KAAK,CAAA+5C,mBAAjD;IAIA,KAAKtmD,GAAL,CAASrD,KAAT,CAAe;MACbE,aAAA,EAAe;IADF,CAAf;IAKA,KAAKstD,SAAL,GAAiB,KAAjB;IACA,KAAK7xD,MAAL,CAAY0H,GAAZ,CAAgBrG,SAAhB,CAA0BC,GAA1B,CAA8B,iBAA9B;EAxBgB;EA4BlBwwD,QAAQruD,KAAR,EAAe;IACb,IAAI,CAAC,KAAKsuD,mBAAV,EAA+B;MAC7B;IAD6B;IAG/B,MAAMD,OAAN,CAAcruD,KAAd;IACA,IAAIA,KAAA,CAAMI,MAAN,KAAiB,KAAKwsD,SAA1B,EAAqC;MACnC,KAAKA,SAAL,CAAehsD,KAAf;IADmC;EALxB;EAWf2tD,UAAA,EAAY;IACV,IAAI,KAAKt2D,KAAT,EAAgB;MACd,KAAK,CAAAu2D,gBAAL;MAEA;IAHc;IAKhB,KAAKZ,cAAL;IACA,KAAKhB,SAAL,CAAehsD,KAAf;IACA,IAAI,KAAK6tD,eAAL,EAAsBC,UAA1B,EAAsC;MACpC,KAAKC,MAAL;IADoC;IAGtC,KAAKF,eAAL,GAAuB,IAAvB;EAXU;EAeZ/N,QAAA,EAAU;IACR,OAAO,CAAC,KAAKkM,SAAN,IAAmB,KAAKA,SAAL,CAAegC,SAAf,CAAyBhI,IAAzB,OAAoC,EAA9D;EADQ;EAKVr2C,OAAA,EAAS;IACP,KAAK69C,SAAL,GAAiB,KAAjB;IACA,IAAI,KAAK7xD,MAAT,EAAiB;MACf,KAAKA,MAAL,CAAYuxD,eAAZ,CAA4B,IAA5B;MACA,KAAKvxD,MAAL,CAAY0H,GAAZ,CAAgBrG,SAAhB,CAA0BC,GAA1B,CAA8B,iBAA9B;IAFe;IAIjB,MAAM0S,MAAN;EANO;EAaT,CAAAs+C,YAAA,EAAe;IACb,MAAMC,IAAA,GAAO,KAAKlC,SAAL,CAAemC,oBAAf,CAAoC,KAApC,CAAb;IACA,IAAID,IAAA,CAAKhsD,MAAL,KAAgB,CAApB,EAAuB;MACrB,OAAO,KAAK8pD,SAAL,CAAegC,SAAtB;IADqB;IAGvB,MAAM5sC,MAAA,GAAS,EAAf;IACA,WAAW/d,GAAX,IAAkB6qD,IAAlB,EAAwB;MACtB9sC,MAAA,CAAOte,IAAP,CAAYO,GAAA,CAAI2qD,SAAJ,CAAcI,OAAd,CAAsB,UAAtB,EAAkC,EAAlC,CAAZ;IADsB;IAGxB,OAAOhtC,MAAA,CAAO/rB,IAAP,CAAY,IAAZ,CAAP;EATa;EAYf,CAAA62D,oBAAA,EAAuB;IACrB,MAAM,CAAC14C,WAAD,EAAc66C,YAAd,IAA8B,KAAKC,gBAAzC;IAEA,IAAIl3D,IAAJ;IACA,IAAI,KAAK21D,eAAT,EAA0B;MACxB31D,IAAA,GAAO,KAAKiM,GAAL,CAASkrD,qBAAT,EAAP;IADwB,CAA1B,MAEO;MAGL,MAAM;QAAEC,YAAF;QAAgBnrD;MAAhB,IAAwB,IAA9B;MACA,MAAMorD,YAAA,GAAeprD,GAAA,CAAIzG,KAAJ,CAAU8C,OAA/B;MACA2D,GAAA,CAAIzG,KAAJ,CAAU8C,OAAV,GAAoB,QAApB;MACA8uD,YAAA,CAAanrD,GAAb,CAAiBX,MAAjB,CAAwB,KAAKW,GAA7B;MACAjM,IAAA,GAAOiM,GAAA,CAAIkrD,qBAAJ,EAAP;MACAlrD,GAAA,CAAIsM,MAAJ;MACAtM,GAAA,CAAIzG,KAAJ,CAAU8C,OAAV,GAAoB+uD,YAApB;IATK;IAcP,IAAI,KAAKlxD,QAAL,GAAgB,GAAhB,KAAwB,KAAKmxD,cAAL,GAAsB,GAAlD,EAAuD;MACrD,KAAKr3D,KAAL,GAAaD,IAAA,CAAKC,KAAL,GAAamc,WAA1B;MACA,KAAKlc,MAAL,GAAcF,IAAA,CAAKE,MAAL,GAAc+2D,YAA5B;IAFqD,CAAvD,MAGO;MACL,KAAKh3D,KAAL,GAAaD,IAAA,CAAKE,MAAL,GAAckc,WAA3B;MACA,KAAKlc,MAAL,GAAcF,IAAA,CAAKC,KAAL,GAAag3D,YAA3B;IAFK;IAIP,KAAKM,iBAAL;EA3BqB;EAkCvBC,OAAA,EAAS;IACP,IAAI,CAAC,KAAK3B,YAAL,EAAL,EAA0B;MACxB;IADwB;IAI1B,MAAM2B,MAAN;IACA,KAAKrB,eAAL;IACA,MAAMsB,SAAA,GAAY,KAAK,CAAA7nD,OAAvB;IACA,MAAM8nD,OAAA,GAAW,KAAK,CAAA9nD,OAAL,GAAgB,KAAK,CAAAinD,WAAL,GAAoBc,OAApB,EAAjC;IACA,IAAIF,SAAA,KAAcC,OAAlB,EAA2B;MACzB;IADyB;IAI3B,MAAME,OAAA,GAAUxK,IAAA,IAAQ;MACtB,KAAK,CAAAx9C,OAAL,GAAgBw9C,IAAhB;MACA,IAAI,CAACA,IAAL,EAAW;QACT,KAAK70C,MAAL;QACA;MAFS;MAIX,KAAK,CAAAs/C,UAAL;MACA,KAAKtC,UAAL,CAAgBG,OAAhB,CAAwB,IAAxB;MACA,KAAK,CAAAZ,mBAAL;IARsB,CAAxB;IAUA,KAAKE,WAAL,CAAiB;MACfC,GAAA,EAAKA,CAAA,KAAM;QACT2C,OAAA,CAAQF,OAAR;MADS,CADI;MAIfxC,IAAA,EAAMA,CAAA,KAAM;QACV0C,OAAA,CAAQH,SAAR;MADU,CAJG;MAOftC,QAAA,EAAU;IAPK,CAAjB;IASA,KAAK,CAAAL,mBAAL;EAhCO;EAoCTgD,wBAAA,EAA0B;IACxB,OAAO,KAAKjC,YAAL,EAAP;EADwB;EAK1BkC,gBAAA,EAAkB;IAChB,KAAKnC,cAAL;IACA,KAAKhB,SAAL,CAAehsD,KAAf;EAFgB;EASlBovD,SAAShwD,KAAT,EAAgB;IACd,KAAK+vD,eAAL;EADc;EAQhBE,QAAQjwD,KAAR,EAAe;IACb,IAAIA,KAAA,CAAMI,MAAN,KAAiB,KAAK6D,GAAtB,IAA6BjE,KAAA,CAAMyM,GAAN,KAAc,OAA/C,EAAwD;MACtD,KAAKsjD,eAAL;MAEA/vD,KAAA,CAAM4O,cAAN;IAHsD;EAD3C;EAQf87C,iBAAiB1qD,KAAjB,EAAwB;IACtBkqD,cAAA,CAAec,gBAAf,CAAgC3D,IAAhC,CAAqC,IAArC,EAA2CrnD,KAA3C;EADsB;EAIxBsqD,eAAetqD,KAAf,EAAsB;IACpB,KAAKouD,SAAL,GAAiB,IAAjB;EADoB;EAItBhE,cAAcpqD,KAAd,EAAqB;IACnB,KAAKouD,SAAL,GAAiB,KAAjB;EADmB;EAIrB5D,eAAexqD,KAAf,EAAsB;IACpB,KAAKzD,MAAL,CAAY0H,GAAZ,CAAgBrG,SAAhB,CAA0B2U,MAA1B,CAAiC,iBAAjC,EAAoD,KAAKmuC,OAAL,EAApD;EADoB;EAKtBwP,eAAA,EAAiB;IACf,KAAKtD,SAAL,CAAevvD,YAAf,CAA4B,MAA5B,EAAoC,SAApC;IACA,KAAKuvD,SAAL,CAAexgD,eAAf,CAA+B,gBAA/B;EAFe;EAMjB+jD,cAAA,EAAgB;IACd,KAAKvD,SAAL,CAAevvD,YAAf,CAA4B,MAA5B,EAAoC,SAApC;IACA,KAAKuvD,SAAL,CAAevvD,YAAf,CAA4B,gBAA5B,EAA8C,IAA9C;EAFc;EAMhB6G,OAAA,EAAS;IACP,IAAI,KAAKD,GAAT,EAAc;MACZ,OAAO,KAAKA,GAAZ;IADY;IAId,IAAImsD,KAAJ,EAAWC,KAAX;IACA,IAAI,KAAKp4D,KAAT,EAAgB;MACdm4D,KAAA,GAAQ,KAAKv7D,CAAb;MACAw7D,KAAA,GAAQ,KAAKp7D,CAAb;IAFc;IAKhB,MAAMiP,MAAN;IACA,KAAK0oD,SAAL,GAAiBzvD,QAAA,CAASC,aAAT,CAAuB,KAAvB,CAAjB;IACA,KAAKwvD,SAAL,CAAe75C,SAAf,GAA2B,UAA3B;IAEA,KAAK65C,SAAL,CAAevvD,YAAf,CAA4B,IAA5B,EAAkC,KAAK,CAAAstD,WAAvC;IACA,KAAKiC,SAAL,CAAevvD,YAAf,CAA4B,cAA5B,EAA4C,iBAA5C;IACA,KAAK8yD,aAAL;IAEAx4C,8BAAA,CAAiB24C,YAAjB,CACGtoD,GADH,CACO,iCADP,EAEGyY,IAFH,CAEQkmC,GAAA,IAAO,KAAKiG,SAAL,EAAgBvvD,YAAhB,CAA6B,iBAA7B,EAAgDspD,GAAhD,CAFf;IAGA,KAAKiG,SAAL,CAAeqB,eAAf,GAAiC,IAAjC;IAEA,MAAM;MAAEzwD;IAAF,IAAY,KAAKovD,SAAvB;IACApvD,KAAA,CAAMgO,QAAN,GAAkB,QAAO,KAAK,CAAAA,QAAU,2BAAxC;IACAhO,KAAA,CAAM1H,KAAN,GAAc,KAAK,CAAAA,KAAnB;IAEA,KAAKmO,GAAL,CAASX,MAAT,CAAgB,KAAKspD,SAArB;IAEA,KAAKoB,UAAL,GAAkB7wD,QAAA,CAASC,aAAT,CAAuB,KAAvB,CAAlB;IACA,KAAK4wD,UAAL,CAAgBpwD,SAAhB,CAA0BC,GAA1B,CAA8B,SAA9B,EAAyC,SAAzC;IACA,KAAKoG,GAAL,CAASX,MAAT,CAAgB,KAAK0qD,UAArB;IAKAhE,oBAAA,CAAW,IAAX,EAAiB,KAAK/lD,GAAtB,EAA2B,CAAC,UAAD,EAAa,SAAb,CAA3B;IAEA,IAAI,KAAKhM,KAAT,EAAgB;MAEd,MAAM,CAACmc,WAAD,EAAc66C,YAAd,IAA8B,KAAKC,gBAAzC;MACA,IAAI,KAAKqB,mBAAT,EAA8B;QAU5B,MAAM;UAAEpO;QAAF,IAAe,KAAK,CAAAlhC,WAA1B;QACA,IAAI,CAAC8lB,EAAD,EAAKC,EAAL,IAAW,KAAKymB,qBAAL,EAAf;QACA,CAAC1mB,EAAD,EAAKC,EAAL,IAAW,KAAKwpB,uBAAL,CAA6BzpB,EAA7B,EAAiCC,EAAjC,CAAX;QACA,MAAM,CAAClpC,SAAD,EAAYC,UAAZ,IAA0B,KAAK0yD,cAArC;QACA,MAAM,CAACzyD,KAAD,EAAQC,KAAR,IAAiB,KAAKyyD,eAA5B;QACA,IAAIC,IAAJ,EAAUC,IAAV;QACA,QAAQ,KAAKzyD,QAAb;UACE,KAAK,CAAL;YACEwyD,IAAA,GAAOP,KAAA,GAAS,CAAAjO,QAAA,CAAS,CAAT,IAAcnkD,KAAd,IAAuBF,SAAvC;YACA8yD,IAAA,GAAOP,KAAA,GAAQ,KAAKn4D,MAAb,GAAuB,CAAAiqD,QAAA,CAAS,CAAT,IAAclkD,KAAd,IAAuBF,UAArD;YACA;UACF,KAAK,EAAL;YACE4yD,IAAA,GAAOP,KAAA,GAAS,CAAAjO,QAAA,CAAS,CAAT,IAAcnkD,KAAd,IAAuBF,SAAvC;YACA8yD,IAAA,GAAOP,KAAA,GAAS,CAAAlO,QAAA,CAAS,CAAT,IAAclkD,KAAd,IAAuBF,UAAvC;YACA,CAACgpC,EAAD,EAAKC,EAAL,IAAW,CAACA,EAAD,EAAK,CAACD,EAAN,CAAX;YACA;UACF,KAAK,GAAL;YACE4pB,IAAA,GAAOP,KAAA,GAAQ,KAAKn4D,KAAb,GAAsB,CAAAkqD,QAAA,CAAS,CAAT,IAAcnkD,KAAd,IAAuBF,SAApD;YACA8yD,IAAA,GAAOP,KAAA,GAAS,CAAAlO,QAAA,CAAS,CAAT,IAAclkD,KAAd,IAAuBF,UAAvC;YACA,CAACgpC,EAAD,EAAKC,EAAL,IAAW,CAAC,CAACD,EAAF,EAAM,CAACC,EAAP,CAAX;YACA;UACF,KAAK,GAAL;YACE2pB,IAAA,GACEP,KAAA,GACC,CAAAjO,QAAA,CAAS,CAAT,IAAcnkD,KAAd,GAAsB,KAAK9F,MAAL,GAAc6F,UAApC,IAAkDD,SAFrD;YAGA8yD,IAAA,GACEP,KAAA,GACC,CAAAlO,QAAA,CAAS,CAAT,IAAclkD,KAAd,GAAsB,KAAKhG,KAAL,GAAa6F,SAAnC,IAAgDC,UAFnD;YAGA,CAACgpC,EAAD,EAAKC,EAAL,IAAW,CAAC,CAACA,EAAF,EAAMD,EAAN,CAAX;YACA;QAvBJ;QAyBA,KAAK8pB,KAAL,CAAWF,IAAA,GAAOv8C,WAAlB,EAA+Bw8C,IAAA,GAAO3B,YAAtC,EAAoDloB,EAApD,EAAwDC,EAAxD;MAzC4B,CAA9B,MA0CO;QACL,KAAK6pB,KAAL,CACET,KAAA,GAAQh8C,WADV,EAEEi8C,KAAA,GAAQpB,YAFV,EAGE,KAAKh3D,KAAL,GAAamc,WAHf,EAIE,KAAKlc,MAAL,GAAc+2D,YAJhB;MADK;MASP,KAAK,CAAAY,UAAL;MACA,KAAK3B,YAAL,GAAoB,IAApB;MACA,KAAKtB,SAAL,CAAeqB,eAAf,GAAiC,KAAjC;IAxDc,CAAhB,MAyDO;MACL,KAAKC,YAAL,GAAoB,KAApB;MACA,KAAKtB,SAAL,CAAeqB,eAAf,GAAiC,IAAjC;IAFK;IASP,OAAO,KAAKhqD,GAAZ;EAzGO;EA4GT,CAAA4rD,WAAA,EAAc;IACZ,KAAKjD,SAAL,CAAekE,eAAf;IACA,IAAI,CAAC,KAAK,CAAAlpD,OAAV,EAAoB;MAClB;IADkB;IAGpB,WAAW+M,IAAX,IAAmB,KAAK,CAAA/M,OAAL,CAAc6M,KAAd,CAAoB,IAApB,CAAnB,EAA8C;MAC5C,MAAMxQ,GAAA,GAAM9G,QAAA,CAASC,aAAT,CAAuB,KAAvB,CAAZ;MACA6G,GAAA,CAAIX,MAAJ,CACEqR,IAAA,GAAOxX,QAAA,CAASyX,cAAT,CAAwBD,IAAxB,CAAP,GAAuCxX,QAAA,CAASC,aAAT,CAAuB,IAAvB,CADzC;MAGA,KAAKwvD,SAAL,CAAetpD,MAAf,CAAsBW,GAAtB;IAL4C;EALlC;EAed,IAAI8sD,UAAJA,CAAA,EAAiB;IACf,OAAO,KAAKnE,SAAZ;EADe;EAKjB,OAAOoE,WAAPA,CAAmBz4D,IAAnB,EAAyBgE,MAAzB,EAAiC00D,SAAjC,EAA4C;IAC1C,IAAIhwC,WAAA,GAAc,IAAlB;IACA,IAAI1oB,IAAA,YAAgBoB,0CAApB,EAA+C;MAC7C,MAAM;QACJpB,IAAA,EAAM;UACJgT,qBAAA,EAAuB;YAAEC,QAAF;YAAYF;UAAZ,CADnB;UAEJtT,IAFI;UAGJmG,QAHI;UAIJb;QAJI,CADF;QAOJsP,WAPI;QAQJoI,YARI;QASJzY,MAAA,EAAQ;UACNU,IAAA,EAAM;YAAE0nB;UAAF;QADA;MATJ,IAYFpsB,IAZJ;MAeA,IAAI,CAACqU,WAAD,IAAgBA,WAAA,CAAY9J,MAAZ,KAAuB,CAA3C,EAA8C;QAE5C,OAAO,IAAP;MAF4C;MAI9Cme,WAAA,GAAc1oB,IAAA,GAAO;QACnBC,cAAA,EAAgB5B,yBAAA,CAAqB8C,QADlB;QAEnB5D,KAAA,EAAOuP,KAAA,CAAMmS,IAAN,CAAWlM,SAAX,CAFY;QAGnBE,QAHmB;QAInBzC,KAAA,EAAO6D,WAAA,CAAY3W,IAAZ,CAAiB,IAAjB,CAJY;QAKnBksD,QAAA,EAAUntC,YALS;QAMnB2R,SAAA,EAAWhC,UAAA,GAAa,CANL;QAOnB3sB,IAPmB;QAQnBmG,QARmB;QASnBb,EATmB;QAUnB4zD,OAAA,EAAS;MAVU,CAArB;IApB6C;IAiC/C,MAAMC,MAAA,GAAS,MAAMH,WAAN,CAAkBz4D,IAAlB,EAAwBgE,MAAxB,EAAgC00D,SAAhC,CAAf;IAEAE,MAAA,CAAO,CAAA3lD,QAAP,GAAmBjT,IAAA,CAAKiT,QAAxB;IACA2lD,MAAA,CAAO,CAAAr7D,KAAP,GAAgBqB,SAAA,CAAKmI,YAAL,CAAkB,GAAG/G,IAAA,CAAKzC,KAA1B,CAAhB;IACAq7D,MAAA,CAAO,CAAAvpD,OAAP,GAAkBrP,IAAA,CAAKwQ,KAAvB;IACAooD,MAAA,CAAOZ,mBAAP,GAA6Bh4D,IAAA,CAAK+E,EAAL,IAAW,IAAxC;IACA6zD,MAAA,CAAO,CAAAlwC,WAAP,GAAsBA,WAAtB;IAEA,OAAOkwC,MAAP;EA3C0C;EA+C5C/3C,UAAUg4C,YAAA,GAAe,KAAzB,EAAgC;IAC9B,IAAI,KAAK1Q,OAAL,EAAJ,EAAoB;MAClB,OAAO,IAAP;IADkB;IAIpB,IAAI,KAAKwQ,OAAT,EAAkB;MAChB,OAAO;QACLvqC,SAAA,EAAW,KAAKA,SADX;QAELrpB,EAAA,EAAI,KAAKizD,mBAFJ;QAGLW,OAAA,EAAS;MAHJ,CAAP;IADgB;IAQlB,MAAMG,OAAA,GAAUnH,cAAA,CAAeW,gBAAf,GAAkC,KAAKgC,WAAvD;IACA,MAAM70D,IAAA,GAAO,KAAKs5D,OAAL,CAAaD,OAAb,EAAsBA,OAAtB,CAAb;IACA,MAAMv7D,KAAA,GAAQ6hB,8BAAA,CAAiB45C,aAAjB,CAA+BC,OAA/B,CACZ,KAAK7D,eAAL,GACIhJ,gBAAA,CAAiB,KAAKiI,SAAtB,EAAiC92D,KADrC,GAEI,KAAK,CAAAA,KAHG,CAAd;IAMA,MAAMqjB,UAAA,GAAa;MACjB3gB,cAAA,EAAgB5B,yBAAA,CAAqB8C,QADpB;MAEjB5D,KAFiB;MAGjB0V,QAAA,EAAU,KAAK,CAAAA,QAHE;MAIjBzC,KAAA,EAAO,KAAK,CAAAnB,OAJK;MAKjB+e,SAAA,EAAW,KAAKA,SALC;MAMjB3uB,IANiB;MAOjBmG,QAAA,EAAU,KAAKA,QAPE;MAQjBszD,kBAAA,EAAoB,KAAKC;IARR,CAAnB;IAWA,IAAIN,YAAJ,EAAkB;MAGhB,OAAOj4C,UAAP;IAHgB;IAMlB,IAAI,KAAKo3C,mBAAL,IAA4B,CAAC,KAAK,CAAAoB,iBAAL,CAAwBx4C,UAAxB,CAAjC,EAAsE;MACpE,OAAO,IAAP;IADoE;IAItEA,UAAA,CAAW7b,EAAX,GAAgB,KAAKizD,mBAArB;IAEA,OAAOp3C,UAAP;EA5C8B;EA+ChC,CAAAw4C,kBAAmBx4C,UAAnB,EAA+B;IAC7B,MAAM;MAAEpQ,KAAF;MAASyC,QAAT;MAAmB1V,KAAnB;MAA0BkC,IAA1B;MAAgC2uB;IAAhC,IAA8C,KAAK,CAAA1F,WAAzD;IAEA,OACE9H,UAAA,CAAWpQ,KAAX,KAAqBA,KAArB,IACAoQ,UAAA,CAAW3N,QAAX,KAAwBA,QADxB,IAEA2N,UAAA,CAAWnhB,IAAX,CAAgB45D,IAAhB,CAAqB,CAAC/8D,CAAD,EAAIqc,CAAJ,KAAU5c,IAAA,CAAKwX,GAAL,CAASjX,CAAA,GAAImD,IAAA,CAAKkZ,CAAL,CAAb,KAAyB,CAAxD,CAFA,IAGAiI,UAAA,CAAWrjB,KAAX,CAAiB87D,IAAjB,CAAsB,CAAC58D,CAAD,EAAIkc,CAAJ,KAAUlc,CAAA,KAAMc,KAAA,CAAMob,CAAN,CAAtC,CAHA,IAIAiI,UAAA,CAAWwN,SAAX,KAAyBA,SAL3B;EAH6B;EAY/B,CAAA6nC,iBAAkBniC,OAAA,GAAU,KAA5B,EAAmC;IAKjC,IAAI,CAAC,KAAKkkC,mBAAV,EAA+B;MAC7B;IAD6B;IAI/B,KAAK,CAAAzD,mBAAL;IACA,IAAI,CAACzgC,OAAD,KAAa,KAAKp0B,KAAL,KAAe,CAAf,IAAoB,KAAKC,MAAL,KAAgB,CAApC,CAAjB,EAAyD;MACvD2I,UAAA,CAAW,MAAM,KAAK,CAAA2tD,gBAAL,CAAuC,IAAvC,CAAjB,EAA+D,CAA/D;MACA;IAFuD;IAKzD,MAAM6C,OAAA,GAAUnH,cAAA,CAAeW,gBAAf,GAAkC,KAAKgC,WAAvD;IACA,KAAK,CAAA5rC,WAAL,CAAkBjpB,IAAlB,GAAyB,KAAKs5D,OAAL,CAAaD,OAAb,EAAsBA,OAAtB,CAAzB;EAhBiC;AArtBS;;;;;ACtB9C;AAKA;AACA;AACA;AACA;AAKA,MAAMS,SAAN,SAAwBn6C,8BAAxB,CAAyC;EACvC,CAAAo6C,UAAA,GAAc,CAAd;EAEA,CAAAC,SAAA,GAAa,CAAb;EAEA,CAAAC,sBAAA,GAA0B,KAAKC,iBAAL,CAAuB//C,IAAvB,CAA4B,IAA5B,CAA1B;EAEA,CAAAggD,uBAAA,GAA2B,KAAKC,kBAAL,CAAwBjgD,IAAxB,CAA6B,IAA7B,CAA3B;EAEA,CAAAkgD,oBAAA,GAAwB,KAAKC,eAAL,CAAqBngD,IAArB,CAA0B,IAA1B,CAAxB;EAEA,CAAAogD,sBAAA,GAA0B,KAAKC,iBAAL,CAAuBrgD,IAAvB,CAA4B,IAA5B,CAA1B;EAEA,CAAAsgD,0BAAA,GAA8B,IAA9B;EAEA,CAAAC,aAAA,GAAiB,IAAI36B,MAAJ,EAAjB;EAEA,CAAAm4B,cAAA,GAAkB,KAAlB;EAEA,CAAAyC,kBAAA,GAAsB,KAAtB;EAEA,CAAAC,mBAAA,GAAuB,KAAvB;EAEA,CAAAC,QAAA,GAAY,IAAZ;EAEA,CAAAC,SAAA,GAAa,CAAb;EAEA,CAAAC,UAAA,GAAc,CAAd;EAEA,CAAAC,oBAAA,GAAwB,IAAxB;EAEA,OAAOlI,aAAP,GAAuB,IAAvB;EAEA,OAAOmI,eAAP,GAAyB,CAAzB;EAEA,OAAOC,iBAAP,GAA2B,CAA3B;EAEA,OAAOt6C,KAAP,GAAe,KAAf;EAEA,OAAOgzC,WAAP,GAAqBh1D,yBAAA,CAAqB0D,GAA1C;EAEAkB,YAAYmb,MAAZ,EAAoB;IAClB,MAAM;MAAE,GAAGA,MAAL;MAAa7U,IAAA,EAAM;IAAnB,CAAN;IACA,KAAKhM,KAAL,GAAa6gB,MAAA,CAAO7gB,KAAP,IAAgB,IAA7B;IACA,KAAKq9D,SAAL,GAAiBx8C,MAAA,CAAOw8C,SAAP,IAAoB,IAArC;IACA,KAAKC,OAAL,GAAez8C,MAAA,CAAOy8C,OAAP,IAAkB,IAAjC;IACA,KAAK5b,KAAL,GAAa,EAAb;IACA,KAAK6b,YAAL,GAAoB,EAApB;IACA,KAAKC,WAAL,GAAmB,EAAnB;IACA,KAAKC,WAAL,GAAmB,EAAnB;IACA,KAAKC,WAAL,GAAmB,CAAnB;IACA,KAAKC,YAAL,GAAoB,KAAKC,YAAL,GAAoB,CAAxC;IACA,KAAK7+D,CAAL,GAAS,CAAT;IACA,KAAKI,CAAL,GAAS,CAAT;IACA,KAAK0+D,oBAAL,GAA4B,IAA5B;EAbkB;EAiBpB,OAAO7H,UAAPA,CAAkBC,IAAlB,EAAwB;IACtBp0C,8BAAA,CAAiBm0C,UAAjB,CAA4BC,IAA5B;EADsB;EAKxB,OAAOI,mBAAPA,CAA2BrjD,IAA3B,EAAiCC,KAAjC,EAAwC;IACtC,QAAQD,IAAR;MACE,KAAKghD,+BAAA,CAA2B8J,aAAhC;QACE9B,SAAA,CAAUoB,iBAAV,GAA8BnqD,KAA9B;QACA;MACF,KAAK+gD,+BAAA,CAA2B+J,SAAhC;QACE/B,SAAA,CAAUhH,aAAV,GAA0B/hD,KAA1B;QACA;MACF,KAAK+gD,+BAAA,CAA2BgK,WAAhC;QACEhC,SAAA,CAAUmB,eAAV,GAA4BlqD,KAAA,GAAQ,GAApC;QACA;IATJ;EADsC;EAexCujD,aAAaxjD,IAAb,EAAmBC,KAAnB,EAA0B;IACxB,QAAQD,IAAR;MACE,KAAKghD,+BAAA,CAA2B8J,aAAhC;QACE,KAAK,CAAAG,eAAL,CAAsBhrD,KAAtB;QACA;MACF,KAAK+gD,+BAAA,CAA2B+J,SAAhC;QACE,KAAK,CAAArH,WAAL,CAAkBzjD,KAAlB;QACA;MACF,KAAK+gD,+BAAA,CAA2BgK,WAAhC;QACE,KAAK,CAAAE,aAAL,CAAoBjrD,KAApB;QACA;IATJ;EADwB;EAe1B,WAAW0jD,yBAAXA,CAAA,EAAuC;IACrC,OAAO,CACL,CAAC3C,+BAAA,CAA2B8J,aAA5B,EAA2C9B,SAAA,CAAUoB,iBAArD,CADK,EAEL,CACEpJ,+BAAA,CAA2B+J,SAD7B,EAEE/B,SAAA,CAAUhH,aAAV,IAA2BnzC,8BAAA,CAAiBk0C,iBAF9C,CAFK,EAML,CACE/B,+BAAA,CAA2BgK,WAD7B,EAEEx/D,IAAA,CAAKsX,KAAL,CAAWkmD,SAAA,CAAUmB,eAAV,GAA4B,GAAvC,CAFF,CANK,CAAP;EADqC;EAevC,IAAIvG,kBAAJA,CAAA,EAAyB;IACvB,OAAO,CACL,CACE5C,+BAAA,CAA2B8J,aAD7B,EAEE,KAAKT,SAAL,IAAkBrB,SAAA,CAAUoB,iBAF9B,CADK,EAKL,CACEpJ,+BAAA,CAA2B+J,SAD7B,EAEE,KAAK/9D,KAAL,IACEg8D,SAAA,CAAUhH,aADZ,IAEEnzC,8BAAA,CAAiBk0C,iBAJrB,CALK,EAWL,CACE/B,+BAAA,CAA2BgK,WAD7B,EAEEx/D,IAAA,CAAKsX,KAAL,CAAW,OAAO,KAAKwnD,OAAL,IAAgBtB,SAAA,CAAUmB,eAA1B,CAAlB,CAFF,CAXK,CAAP;EADuB;EAuBzB,CAAAc,gBAAiBZ,SAAjB,EAA4B;IAC1B,MAAMc,cAAA,GAAiB,KAAKd,SAA5B;IACA,KAAKnG,WAAL,CAAiB;MACfC,GAAA,EAAKA,CAAA,KAAM;QACT,KAAKkG,SAAL,GAAiBA,SAAjB;QACA,KAAK,CAAAe,YAAL;MAFS,CADI;MAKfhH,IAAA,EAAMA,CAAA,KAAM;QACV,KAAKiG,SAAL,GAAiBc,cAAjB;QACA,KAAK,CAAAC,YAAL;MAFU,CALG;MASf/G,QAAA,EAAU,IATK;MAUfrkD,IAAA,EAAMghD,+BAAA,CAA2B8J,aAVlB;MAWfxG,mBAAA,EAAqB,IAXN;MAYfC,QAAA,EAAU;IAZK,CAAjB;EAF0B;EAsB5B,CAAAb,YAAa12D,KAAb,EAAoB;IAClB,MAAMw3D,UAAA,GAAa,KAAKx3D,KAAxB;IACA,KAAKk3D,WAAL,CAAiB;MACfC,GAAA,EAAKA,CAAA,KAAM;QACT,KAAKn3D,KAAL,GAAaA,KAAb;QACA,KAAK,CAAAq+D,MAAL;MAFS,CADI;MAKfjH,IAAA,EAAMA,CAAA,KAAM;QACV,KAAKp3D,KAAL,GAAaw3D,UAAb;QACA,KAAK,CAAA6G,MAAL;MAFU,CALG;MASfhH,QAAA,EAAU,IATK;MAUfrkD,IAAA,EAAMghD,+BAAA,CAA2B+J,SAVlB;MAWfzG,mBAAA,EAAqB,IAXN;MAYfC,QAAA,EAAU;IAZK,CAAjB;EAFkB;EAsBpB,CAAA2G,cAAeZ,OAAf,EAAwB;IACtBA,OAAA,IAAW,GAAX;IACA,MAAMgB,YAAA,GAAe,KAAKhB,OAA1B;IACA,KAAKpG,WAAL,CAAiB;MACfC,GAAA,EAAKA,CAAA,KAAM;QACT,KAAKmG,OAAL,GAAeA,OAAf;QACA,KAAK,CAAAe,MAAL;MAFS,CADI;MAKfjH,IAAA,EAAMA,CAAA,KAAM;QACV,KAAKkG,OAAL,GAAegB,YAAf;QACA,KAAK,CAAAD,MAAL;MAFU,CALG;MASfhH,QAAA,EAAU,IATK;MAUfrkD,IAAA,EAAMghD,+BAAA,CAA2BgK,WAVlB;MAWf1G,mBAAA,EAAqB,IAXN;MAYfC,QAAA,EAAU;IAZK,CAAjB;EAHsB;EAoBxBK,QAAA,EAAU;IACR,IAAI,CAAC,KAAKnxD,MAAV,EAAkB;MAChB;IADgB;IAGlB,MAAMmxD,OAAN;IACA,IAAI,KAAKzpD,GAAL,KAAa,IAAjB,EAAuB;MACrB;IADqB;IAIvB,IAAI,CAAC,KAAKoT,MAAV,EAAkB;MAChB,KAAK,CAAAg9C,YAAL;MACA,KAAK,CAAAC,cAAL;IAFgB;IAKlB,IAAI,CAAC,KAAK3G,eAAV,EAA2B;MAGzB,KAAKpxD,MAAL,CAAYsB,GAAZ,CAAgB,IAAhB;MACA,KAAK,CAAA02D,aAAL;IAJyB;IAM3B,KAAK,CAAAL,YAAL;EApBQ;EAwBV3jD,OAAA,EAAS;IACP,IAAI,KAAK8G,MAAL,KAAgB,IAApB,EAA0B;MACxB;IADwB;IAI1B,IAAI,CAAC,KAAKqpC,OAAL,EAAL,EAAqB;MACnB,KAAK8O,MAAL;IADmB;IAKrB,KAAKn4C,MAAL,CAAYpf,KAAZ,GAAoB,KAAKof,MAAL,CAAYnf,MAAZ,GAAqB,CAAzC;IACA,KAAKmf,MAAL,CAAY9G,MAAZ;IACA,KAAK8G,MAAL,GAAc,IAAd;IAEA,IAAI,KAAK,CAAAo7C,0BAAT,EAAsC;MACpCzpC,YAAA,CAAa,KAAK,CAAAypC,0BAAlB;MACA,KAAK,CAAAA,0BAAL,GAAmC,IAAnC;IAFoC;IAKtC,KAAK,CAAAI,QAAL,CAAe2B,UAAf;IACA,KAAK,CAAA3B,QAAL,GAAiB,IAAjB;IAEA,MAAMtiD,MAAN;EAtBO;EAyBTkkD,UAAUl4D,MAAV,EAAkB;IAChB,IAAI,CAAC,KAAKA,MAAN,IAAgBA,MAApB,EAA4B;MAG1B,KAAKgxD,UAAL,CAAgBmH,mBAAhB,CAAoC,IAApC;IAH0B,CAA5B,MAIO,IAAI,KAAKn4D,MAAL,IAAeA,MAAA,KAAW,IAA9B,EAAoC;MAIzC,KAAKgxD,UAAL,CAAgBoH,gBAAhB,CAAiC,IAAjC;IAJyC;IAM3C,MAAMF,SAAN,CAAgBl4D,MAAhB;EAXgB;EAclBq4D,gBAAA,EAAkB;IAChB,MAAM,CAACxgD,WAAD,EAAc66C,YAAd,IAA8B,KAAKC,gBAAzC;IACA,MAAMj3D,KAAA,GAAQ,KAAKA,KAAL,GAAamc,WAA3B;IACA,MAAMlc,MAAA,GAAS,KAAKA,MAAL,GAAc+2D,YAA7B;IACA,KAAK4F,aAAL,CAAmB58D,KAAnB,EAA0BC,MAA1B;EAJgB;EAQlB01D,eAAA,EAAiB;IACf,IAAI,KAAK,CAAAsC,cAAL,IAAwB,KAAK74C,MAAL,KAAgB,IAA5C,EAAkD;MAChD;IADgD;IAIlD,MAAMu2C,cAAN;IACA,KAAKM,YAAL,GAAoB,KAApB;IACA,KAAK72C,MAAL,CAAYzR,gBAAZ,CAA6B,aAA7B,EAA4C,KAAK,CAAA2sD,sBAAjD;EAPe;EAWjBpE,gBAAA,EAAkB;IAChB,IAAI,CAAC,KAAKN,YAAL,EAAD,IAAwB,KAAKx2C,MAAL,KAAgB,IAA5C,EAAkD;MAChD;IADgD;IAIlD,MAAM82C,eAAN;IACA,KAAKD,YAAL,GAAoB,CAAC,KAAKxN,OAAL,EAArB;IACA,KAAKz8C,GAAL,CAASrG,SAAT,CAAmB2S,MAAnB,CAA0B,SAA1B;IAEA,KAAK8G,MAAL,CAAY7G,mBAAZ,CACE,aADF,EAEE,KAAK,CAAA+hD,sBAFP;EATgB;EAgBlBhE,UAAA,EAAY;IACV,KAAKL,YAAL,GAAoB,CAAC,KAAKxN,OAAL,EAArB;EADU;EAKZA,QAAA,EAAU;IACR,OACE,KAAKlJ,KAAL,CAAW10C,MAAX,KAAsB,CAAtB,IACC,KAAK00C,KAAL,CAAW10C,MAAX,KAAsB,CAAtB,IAA2B,KAAK00C,KAAL,CAAW,CAAX,EAAc10C,MAAd,KAAyB,CAFvD;EADQ;EAOV,CAAAgyD,eAAA,EAAkB;IAChB,MAAM;MACJxF,cADI;MAEJJ,gBAAA,EAAkB,CAACj3D,KAAD,EAAQC,MAAR;IAFd,IAGF,IAHJ;IAIA,QAAQo3D,cAAR;MACE,KAAK,EAAL;QACE,OAAO,CAAC,CAAD,EAAIp3D,MAAJ,EAAYA,MAAZ,EAAoBD,KAApB,CAAP;MACF,KAAK,GAAL;QACE,OAAO,CAACA,KAAD,EAAQC,MAAR,EAAgBD,KAAhB,EAAuBC,MAAvB,CAAP;MACF,KAAK,GAAL;QACE,OAAO,CAACD,KAAD,EAAQ,CAAR,EAAWC,MAAX,EAAmBD,KAAnB,CAAP;MACF;QACE,OAAO,CAAC,CAAD,EAAI,CAAJ,EAAOA,KAAP,EAAcC,MAAd,CAAP;IARJ;EALgB;EAoBlB,CAAA68D,UAAA,EAAa;IACX,MAAM;MAAEn9B,GAAF;MAAO9hC,KAAP;MAAcs9D,OAAd;MAAuBD,SAAvB;MAAkCtG,WAAlC;MAA+C2G;IAA/C,IAA+D,IAArE;IACA57B,GAAA,CAAIiS,SAAJ,GAAiBspB,SAAA,GAAYtG,WAAb,GAA4B2G,WAA5C;IACA57B,GAAA,CAAIqV,OAAJ,GAAc,OAAd;IACArV,GAAA,CAAIsV,QAAJ,GAAe,OAAf;IACAtV,GAAA,CAAIuV,UAAJ,GAAiB,EAAjB;IACAvV,GAAA,CAAIoJ,WAAJ,GAAkB,GAAGlrC,KAAH,GAAW+7D,sBAAA,CAAauB,OAAb,CAAX,EAAlB;EANW;EAcb,CAAA4B,aAAcngE,CAAd,EAAiBI,CAAjB,EAAoB;IAClB,KAAKoiB,MAAL,CAAYzR,gBAAZ,CAA6B,aAA7B,EAA4CkiD,2BAA5C;IACA,KAAKzwC,MAAL,CAAYzR,gBAAZ,CAA6B,cAA7B,EAA6C,KAAK,CAAAusD,uBAAlD;IACA,KAAK96C,MAAL,CAAYzR,gBAAZ,CAA6B,aAA7B,EAA4C,KAAK,CAAAqsD,sBAAjD;IACA,KAAK56C,MAAL,CAAYzR,gBAAZ,CAA6B,WAA7B,EAA0C,KAAK,CAAAysD,oBAA/C;IACA,KAAKh7C,MAAL,CAAY7G,mBAAZ,CACE,aADF,EAEE,KAAK,CAAA+hD,sBAFP;IAKA,KAAKnE,SAAL,GAAiB,IAAjB;IACA,IAAI,CAAC,KAAK,CAAAwE,mBAAV,EAAgC;MAC9B,KAAK,CAAAA,mBAAL,GAA4B,IAA5B;MACA,KAAK,CAAA2B,aAAL;MACA,KAAKpB,SAAL,KAAmBrB,SAAA,CAAUoB,iBAA7B;MACA,KAAKp9D,KAAL,KACEg8D,SAAA,CAAUhH,aAAV,IAA2BnzC,8BAAA,CAAiBk0C,iBAD9C;MAEA,KAAKuH,OAAL,KAAiBtB,SAAA,CAAUmB,eAA3B;IAN8B;IAQhC,KAAKM,WAAL,CAAiB7vD,IAAjB,CAAsB,CAAC7O,CAAD,EAAII,CAAJ,CAAtB;IACA,KAAK,CAAA09D,kBAAL,GAA2B,KAA3B;IACA,KAAK,CAAAoC,SAAL;IAEA,KAAK,CAAA/B,oBAAL,GAA6B,MAAM;MACjC,KAAK,CAAAiC,UAAL;MACA,IAAI,KAAK,CAAAjC,oBAAT,EAAgC;QAC9B/wC,MAAA,CAAOyT,qBAAP,CAA6B,KAAK,CAAAs9B,oBAAlC;MAD8B;IAFC,CAAnC;IAMA/wC,MAAA,CAAOyT,qBAAP,CAA6B,KAAK,CAAAs9B,oBAAlC;EA7BkB;EAqCpB,CAAAkC,KAAMrgE,CAAN,EAASI,CAAT,EAAY;IACV,MAAM,CAACkgE,KAAD,EAAQC,KAAR,IAAiB,KAAK7B,WAAL,CAAiB8B,EAAjB,CAAoB,CAAC,CAArB,CAAvB;IACA,IAAI,KAAK9B,WAAL,CAAiBzwD,MAAjB,GAA0B,CAA1B,IAA+BjO,CAAA,KAAMsgE,KAArC,IAA8ClgE,CAAA,KAAMmgE,KAAxD,EAA+D;MAC7D;IAD6D;IAG/D,MAAM7B,WAAA,GAAc,KAAKA,WAAzB;IACA,IAAI+B,MAAA,GAAS,KAAK,CAAA5C,aAAlB;IACAa,WAAA,CAAY7vD,IAAZ,CAAiB,CAAC7O,CAAD,EAAII,CAAJ,CAAjB;IACA,KAAK,CAAA09D,kBAAL,GAA2B,IAA3B;IAEA,IAAIY,WAAA,CAAYzwD,MAAZ,IAAsB,CAA1B,EAA6B;MAC3BwyD,MAAA,CAAO7wB,MAAP,CAAc,GAAG8uB,WAAA,CAAY,CAAZ,CAAjB;MACA+B,MAAA,CAAO3wB,MAAP,CAAc9vC,CAAd,EAAiBI,CAAjB;MACA;IAH2B;IAM7B,IAAIs+D,WAAA,CAAYzwD,MAAZ,KAAuB,CAA3B,EAA8B;MAC5B,KAAK,CAAA4vD,aAAL,GAAsB4C,MAAA,GAAS,IAAIv9B,MAAJ,EAA/B;MACAu9B,MAAA,CAAO7wB,MAAP,CAAc,GAAG8uB,WAAA,CAAY,CAAZ,CAAjB;IAF4B;IAK9B,KAAK,CAAAgC,eAAL,CACED,MADF,EAEE,GAAG/B,WAAA,CAAY8B,EAAZ,CAAe,CAAC,CAAhB,CAFL,EAGE,GAAG9B,WAAA,CAAY8B,EAAZ,CAAe,CAAC,CAAhB,CAHL,EAIExgE,CAJF,EAKEI,CALF;EArBU;EA8BZ,CAAA8rC,QAAA,EAAW;IACT,IAAI,KAAKwyB,WAAL,CAAiBzwD,MAAjB,KAA4B,CAAhC,EAAmC;MACjC;IADiC;IAGnC,MAAM0yD,SAAA,GAAY,KAAKjC,WAAL,CAAiB8B,EAAjB,CAAoB,CAAC,CAArB,CAAlB;IACA,KAAK,CAAA3C,aAAL,CAAoB/tB,MAApB,CAA2B,GAAG6wB,SAA9B;EALS;EAaX,CAAAC,YAAa5gE,CAAb,EAAgBI,CAAhB,EAAmB;IACjB,KAAK,CAAA+9D,oBAAL,GAA6B,IAA7B;IAEAn+D,CAAA,GAAIP,IAAA,CAAKG,GAAL,CAASH,IAAA,CAAKE,GAAL,CAASK,CAAT,EAAY,CAAZ,CAAT,EAAyB,KAAKwiB,MAAL,CAAYpf,KAArC,CAAJ;IACAhD,CAAA,GAAIX,IAAA,CAAKG,GAAL,CAASH,IAAA,CAAKE,GAAL,CAASS,CAAT,EAAY,CAAZ,CAAT,EAAyB,KAAKoiB,MAAL,CAAYnf,MAArC,CAAJ;IAEA,KAAK,CAAAg9D,IAAL,CAAWrgE,CAAX,EAAcI,CAAd;IACA,KAAK,CAAA8rC,OAAL;IAKA,IAAI20B,MAAJ;IACA,IAAI,KAAKnC,WAAL,CAAiBzwD,MAAjB,KAA4B,CAAhC,EAAmC;MACjC4yD,MAAA,GAAS,KAAK,CAAAC,oBAAL,EAAT;IADiC,CAAnC,MAEO;MAEL,MAAMC,EAAA,GAAK,CAAC/gE,CAAD,EAAII,CAAJ,CAAX;MACAygE,MAAA,GAAS,CAAC,CAACE,EAAD,EAAKA,EAAA,CAAGn/D,KAAH,EAAL,EAAiBm/D,EAAA,CAAGn/D,KAAH,EAAjB,EAA6Bm/D,EAA7B,CAAD,CAAT;IAHK;IAKP,MAAMN,MAAA,GAAS,KAAK,CAAA5C,aAApB;IACA,MAAMa,WAAA,GAAc,KAAKA,WAAzB;IACA,KAAKA,WAAL,GAAmB,EAAnB;IACA,KAAK,CAAAb,aAAL,GAAsB,IAAI36B,MAAJ,EAAtB;IAEA,MAAMk1B,GAAA,GAAMA,CAAA,KAAM;MAChB,KAAKqG,WAAL,CAAiB5vD,IAAjB,CAAsB6vD,WAAtB;MACA,KAAK/b,KAAL,CAAW9zC,IAAX,CAAgBgyD,MAAhB;MACA,KAAKrC,YAAL,CAAkB3vD,IAAlB,CAAuB4xD,MAAvB;MACA,KAAK5H,OAAL;IAJgB,CAAlB;IAOA,MAAMR,IAAA,GAAOA,CAAA,KAAM;MACjB,KAAKoG,WAAL,CAAiBzd,GAAjB;MACA,KAAK2B,KAAL,CAAW3B,GAAX;MACA,KAAKwd,YAAL,CAAkBxd,GAAlB;MACA,IAAI,KAAK2B,KAAL,CAAW10C,MAAX,KAAsB,CAA1B,EAA6B;QAC3B,KAAKyN,MAAL;MAD2B,CAA7B,MAEO;QACL,IAAI,CAAC,KAAK8G,MAAV,EAAkB;UAChB,KAAK,CAAAg9C,YAAL;UACA,KAAK,CAAAC,cAAL;QAFgB;QAIlB,KAAK,CAAAJ,YAAL;MALK;IANU,CAAnB;IAeA,KAAKlH,WAAL,CAAiB;MAAEC,GAAF;MAAOC,IAAP;MAAaC,QAAA,EAAU;IAAvB,CAAjB;EA/CiB;EAkDnB,CAAA8H,WAAA,EAAc;IACZ,IAAI,CAAC,KAAK,CAAAtC,kBAAV,EAA+B;MAC7B;IAD6B;IAG/B,KAAK,CAAAA,kBAAL,GAA2B,KAA3B;IAEA,MAAMQ,SAAA,GAAY7+D,IAAA,CAAKmlC,IAAL,CAAU,KAAK05B,SAAL,GAAiB,KAAKtG,WAAhC,CAAlB;IACA,MAAMgJ,UAAA,GAAa,KAAKtC,WAAL,CAAiB98D,KAAjB,CAAuB,CAAC,CAAxB,CAAnB;IACA,MAAM5B,CAAA,GAAIghE,UAAA,CAAW9/D,GAAX,CAAe6/D,EAAA,IAAMA,EAAA,CAAG,CAAH,CAArB,CAAV;IACA,MAAM3gE,CAAA,GAAI4gE,UAAA,CAAW9/D,GAAX,CAAe6/D,EAAA,IAAMA,EAAA,CAAG,CAAH,CAArB,CAAV;IACA,MAAME,IAAA,GAAOxhE,IAAA,CAAKG,GAAL,CAAS,GAAGI,CAAZ,IAAiBs+D,SAA9B;IACA,MAAM4C,IAAA,GAAOzhE,IAAA,CAAKE,GAAL,CAAS,GAAGK,CAAZ,IAAiBs+D,SAA9B;IACA,MAAM6C,IAAA,GAAO1hE,IAAA,CAAKG,GAAL,CAAS,GAAGQ,CAAZ,IAAiBk+D,SAA9B;IACA,MAAM8C,IAAA,GAAO3hE,IAAA,CAAKE,GAAL,CAAS,GAAGS,CAAZ,IAAiBk+D,SAA9B;IAEA,MAAM;MAAEv7B;IAAF,IAAU,IAAhB;IACAA,GAAA,CAAI2I,IAAJ;IASE3I,GAAA,CAAIkC,SAAJ,CAAc,CAAd,EAAiB,CAAjB,EAAoB,KAAKziB,MAAL,CAAYpf,KAAhC,EAAuC,KAAKof,MAAL,CAAYnf,MAAnD;IAGF,WAAWuwC,IAAX,IAAmB,KAAK4qB,YAAxB,EAAsC;MACpCz7B,GAAA,CAAI+e,MAAJ,CAAWlO,IAAX;IADoC;IAGtC7Q,GAAA,CAAI+e,MAAJ,CAAW,KAAK,CAAA+b,aAAhB;IAEA96B,GAAA,CAAImM,OAAJ;EAjCY;EAoCd,CAAAwxB,gBAAiBD,MAAjB,EAAyB71B,EAAzB,EAA6BC,EAA7B,EAAiCtE,EAAjC,EAAqCE,EAArC,EAAyCE,EAAzC,EAA6CC,EAA7C,EAAiD;IAC/C,MAAMy6B,KAAA,GAAS,CAAAz2B,EAAA,GAAKrE,EAAL,IAAW,CAA1B;IACA,MAAM+6B,KAAA,GAAS,CAAAz2B,EAAA,GAAKpE,EAAL,IAAW,CAA1B;IACA,MAAMI,EAAA,GAAM,CAAAN,EAAA,GAAKI,EAAL,IAAW,CAAvB;IACA,MAAMG,EAAA,GAAM,CAAAL,EAAA,GAAKG,EAAL,IAAW,CAAvB;IAEA65B,MAAA,CAAOzwB,aAAP,CACEqxB,KAAA,GAAS,KAAK96B,EAAA,GAAK86B,KAAL,CAAN,GAAqB,CAD/B,EAEEC,KAAA,GAAS,KAAK76B,EAAA,GAAK66B,KAAL,CAAN,GAAqB,CAF/B,EAGEz6B,EAAA,GAAM,KAAKN,EAAA,GAAKM,EAAL,CAAN,GAAkB,CAHzB,EAIEC,EAAA,GAAM,KAAKL,EAAA,GAAKK,EAAL,CAAN,GAAkB,CAJzB,EAKED,EALF,EAMEC,EANF;EAN+C;EAgBjD,CAAAg6B,qBAAA,EAAwB;IACtB,MAAMltB,IAAA,GAAO,KAAK8qB,WAAlB;IACA,IAAI9qB,IAAA,CAAK3lC,MAAL,IAAe,CAAnB,EAAsB;MACpB,OAAO,CAAC,CAAC2lC,IAAA,CAAK,CAAL,CAAD,EAAUA,IAAA,CAAK,CAAL,CAAV,EAAmBA,IAAA,CAAK4sB,EAAL,CAAQ,CAAC,CAAT,CAAnB,EAAgC5sB,IAAA,CAAK4sB,EAAL,CAAQ,CAAC,CAAT,CAAhC,CAAD,CAAP;IADoB;IAItB,MAAMe,YAAA,GAAe,EAArB;IACA,IAAIllD,CAAJ;IACA,IAAI,CAACuuB,EAAD,EAAKC,EAAL,IAAW+I,IAAA,CAAK,CAAL,CAAf;IACA,KAAKv3B,CAAA,GAAI,CAAT,EAAYA,CAAA,GAAIu3B,IAAA,CAAK3lC,MAAL,GAAc,CAA9B,EAAiCoO,CAAA,EAAjC,EAAsC;MACpC,MAAM,CAACkqB,EAAD,EAAKE,EAAL,IAAWmN,IAAA,CAAKv3B,CAAL,CAAjB;MACA,MAAM,CAACsqB,EAAD,EAAKC,EAAL,IAAWgN,IAAA,CAAKv3B,CAAA,GAAI,CAAT,CAAjB;MACA,MAAMwqB,EAAA,GAAM,CAAAN,EAAA,GAAKI,EAAL,IAAW,CAAvB;MACA,MAAMG,EAAA,GAAM,CAAAL,EAAA,GAAKG,EAAL,IAAW,CAAvB;MAKA,MAAM46B,QAAA,GAAW,CAAC52B,EAAA,GAAM,KAAKrE,EAAA,GAAKqE,EAAL,CAAN,GAAkB,CAAxB,EAA2BC,EAAA,GAAM,KAAKpE,EAAA,GAAKoE,EAAL,CAAN,GAAkB,CAAlD,CAAjB;MACA,MAAM42B,QAAA,GAAW,CAAC56B,EAAA,GAAM,KAAKN,EAAA,GAAKM,EAAL,CAAN,GAAkB,CAAxB,EAA2BC,EAAA,GAAM,KAAKL,EAAA,GAAKK,EAAL,CAAN,GAAkB,CAAlD,CAAjB;MAEAy6B,YAAA,CAAa1yD,IAAb,CAAkB,CAAC,CAAC+7B,EAAD,EAAKC,EAAL,CAAD,EAAW22B,QAAX,EAAqBC,QAArB,EAA+B,CAAC56B,EAAD,EAAKC,EAAL,CAA/B,CAAlB;MAEA,CAAC8D,EAAD,EAAKC,EAAL,IAAW,CAAChE,EAAD,EAAKC,EAAL,CAAX;IAdoC;IAiBtC,MAAM,CAACP,EAAD,EAAKE,EAAL,IAAWmN,IAAA,CAAKv3B,CAAL,CAAjB;IACA,MAAM,CAACsqB,EAAD,EAAKC,EAAL,IAAWgN,IAAA,CAAKv3B,CAAA,GAAI,CAAT,CAAjB;IAGA,MAAMmlD,QAAA,GAAW,CAAC52B,EAAA,GAAM,KAAKrE,EAAA,GAAKqE,EAAL,CAAN,GAAkB,CAAxB,EAA2BC,EAAA,GAAM,KAAKpE,EAAA,GAAKoE,EAAL,CAAN,GAAkB,CAAlD,CAAjB;IACA,MAAM42B,QAAA,GAAW,CAAC96B,EAAA,GAAM,KAAKJ,EAAA,GAAKI,EAAL,CAAN,GAAkB,CAAxB,EAA2BC,EAAA,GAAM,KAAKH,EAAA,GAAKG,EAAL,CAAN,GAAkB,CAAlD,CAAjB;IAEA26B,YAAA,CAAa1yD,IAAb,CAAkB,CAAC,CAAC+7B,EAAD,EAAKC,EAAL,CAAD,EAAW22B,QAAX,EAAqBC,QAArB,EAA+B,CAAC96B,EAAD,EAAKC,EAAL,CAA/B,CAAlB;IACA,OAAO26B,YAAP;EAlCsB;EAwCxB,CAAAjC,OAAA,EAAU;IACR,IAAI,KAAKzT,OAAL,EAAJ,EAAoB;MAClB,KAAK,CAAA6V,eAAL;MACA;IAFkB;IAIpB,KAAK,CAAAxB,SAAL;IAEA,MAAM;MAAE19C,MAAF;MAAUugB;IAAV,IAAkB,IAAxB;IACAA,GAAA,CAAI2C,YAAJ,CAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAvB,EAA0B,CAA1B,EAA6B,CAA7B,EAAgC,CAAhC;IACA3C,GAAA,CAAIkC,SAAJ,CAAc,CAAd,EAAiB,CAAjB,EAAoBziB,MAAA,CAAOpf,KAA3B,EAAkCof,MAAA,CAAOnf,MAAzC;IACA,KAAK,CAAAq+D,eAAL;IAEA,WAAW9tB,IAAX,IAAmB,KAAK4qB,YAAxB,EAAsC;MACpCz7B,GAAA,CAAI+e,MAAJ,CAAWlO,IAAX;IADoC;EAZ9B;EAoBV+mB,OAAA,EAAS;IACP,IAAI,KAAK,CAAAU,cAAT,EAA0B;MACxB;IADwB;IAI1B,MAAMV,MAAN;IAEA,KAAKpB,SAAL,GAAiB,KAAjB;IACA,KAAKD,eAAL;IAGA,KAAKqI,eAAL;IAEA,KAAK,CAAAtG,cAAL,GAAuB,IAAvB;IACA,KAAKjsD,GAAL,CAASrG,SAAT,CAAmBC,GAAnB,CAAuB,UAAvB;IAEA,KAAK,CAAAq2D,YAAL,CAAqC,IAArC;IACA,KAAKuC,aAAL;IAEA,KAAKl6D,MAAL,CAAYm6D,oBAAZ,CAAsD,IAAtD;IAIA,KAAKC,SAAL;IACA,KAAK1yD,GAAL,CAASrD,KAAT,CAAe;MACbE,aAAA,EAAe;IADF,CAAf;EAxBO;EA8BTutD,QAAQruD,KAAR,EAAe;IACb,IAAI,CAAC,KAAKsuD,mBAAV,EAA+B;MAC7B;IAD6B;IAG/B,MAAMD,OAAN,CAAcruD,KAAd;IACA,KAAK4tD,cAAL;EALa;EAYf4E,kBAAkBxyD,KAAlB,EAAyB;IACvB,IAAIA,KAAA,CAAM42D,MAAN,KAAiB,CAAjB,IAAsB,CAAC,KAAK/I,YAAL,EAAvB,IAA8C,KAAK,CAAAqC,cAAvD,EAAwE;MACtE;IADsE;IAMxE,KAAKsG,eAAL;IAEAx2D,KAAA,CAAM4O,cAAN;IAEA,IAAI5O,KAAA,CAAM8I,IAAN,KAAe,OAAnB,EAA4B;MAC1B,KAAK7E,GAAL,CAASrD,KAAT;IAD0B;IAI5B,KAAK,CAAAo0D,YAAL,CAAmBh1D,KAAA,CAAM0nB,OAAzB,EAAkC1nB,KAAA,CAAM2nB,OAAxC;EAfuB;EAsBzBuqC,kBAAkBlyD,KAAlB,EAAyB;IACvBA,KAAA,CAAM4O,cAAN;IACA,KAAK,CAAAsmD,IAAL,CAAWl1D,KAAA,CAAM0nB,OAAjB,EAA0B1nB,KAAA,CAAM2nB,OAAhC;EAFuB;EASzB2qC,gBAAgBtyD,KAAhB,EAAuB;IACrBA,KAAA,CAAM4O,cAAN;IACA,KAAK,CAAA4mB,UAAL,CAAiBx1B,KAAjB;EAFqB;EASvBoyD,mBAAmBpyD,KAAnB,EAA0B;IACxB,KAAK,CAAAw1B,UAAL,CAAiBx1B,KAAjB;EADwB;EAQ1B,CAAAw1B,WAAYx1B,KAAZ,EAAmB;IACjB,KAAKqX,MAAL,CAAY7G,mBAAZ,CACE,cADF,EAEE,KAAK,CAAA2hD,uBAFP;IAIA,KAAK96C,MAAL,CAAY7G,mBAAZ,CACE,aADF,EAEE,KAAK,CAAAyhD,sBAFP;IAIA,KAAK56C,MAAL,CAAY7G,mBAAZ,CAAgC,WAAhC,EAA6C,KAAK,CAAA6hD,oBAAlD;IACA,KAAKh7C,MAAL,CAAYzR,gBAAZ,CAA6B,aAA7B,EAA4C,KAAK,CAAA2sD,sBAAjD;IAIA,IAAI,KAAK,CAAAE,0BAAT,EAAsC;MACpCzpC,YAAA,CAAa,KAAK,CAAAypC,0BAAlB;IADoC;IAGtC,KAAK,CAAAA,0BAAL,GAAmC5xD,UAAA,CAAW,MAAM;MAClD,KAAK,CAAA4xD,0BAAL,GAAmC,IAAnC;MACA,KAAKp7C,MAAL,CAAY7G,mBAAZ,CAAgC,aAAhC,EAA+Cs3C,2BAA/C;IAFkD,CAAjB,EAGhC,EAHgC,CAAnC;IAKA,KAAK,CAAA2N,WAAL,CAAkBz1D,KAAA,CAAM0nB,OAAxB,EAAiC1nB,KAAA,CAAM2nB,OAAvC;IAEA,KAAKkvC,sBAAL;IAIA,KAAKC,eAAL;EA5BiB;EAkCnB,CAAAzC,aAAA,EAAgB;IACd,KAAKh9C,MAAL,GAAcla,QAAA,CAASC,aAAT,CAAuB,QAAvB,CAAd;IACA,KAAKia,MAAL,CAAYpf,KAAZ,GAAoB,KAAKof,MAAL,CAAYnf,MAAZ,GAAqB,CAAzC;IACA,KAAKmf,MAAL,CAAYtE,SAAZ,GAAwB,iBAAxB;IACA,KAAKsE,MAAL,CAAYha,YAAZ,CAAyB,cAAzB,EAAyC,kBAAzC;IAEA,KAAK4G,GAAL,CAASX,MAAT,CAAgB,KAAK+T,MAArB;IACA,KAAKugB,GAAL,GAAW,KAAKvgB,MAAL,CAAYof,UAAZ,CAAuB,IAAvB,CAAX;EAPc;EAahB,CAAA69B,eAAA,EAAkB;IAChB,KAAK,CAAAzB,QAAL,GAAiB,IAAIkE,cAAJ,CAAmBx0D,OAAA,IAAW;MAC7C,MAAMvK,IAAA,GAAOuK,OAAA,CAAQ,CAAR,EAAWy0D,WAAxB;MACA,IAAIh/D,IAAA,CAAKC,KAAL,IAAcD,IAAA,CAAKE,MAAvB,EAA+B;QAC7B,KAAK28D,aAAL,CAAmB78D,IAAA,CAAKC,KAAxB,EAA+BD,IAAA,CAAKE,MAApC;MAD6B;IAFc,CAA9B,CAAjB;IAMA,KAAK,CAAA26D,QAAL,CAAeoE,OAAf,CAAuB,KAAKhzD,GAA5B;EAPgB;EAWlB,IAAIizD,WAAJA,CAAA,EAAkB;IAChB,OAAO,CAAC,KAAKxW,OAAL,EAAD,IAAmB,KAAK,CAAAwP,cAA/B;EADgB;EAKlBhsD,OAAA,EAAS;IACP,IAAI,KAAKD,GAAT,EAAc;MACZ,OAAO,KAAKA,GAAZ;IADY;IAId,IAAImsD,KAAJ,EAAWC,KAAX;IACA,IAAI,KAAKp4D,KAAT,EAAgB;MACdm4D,KAAA,GAAQ,KAAKv7D,CAAb;MACAw7D,KAAA,GAAQ,KAAKp7D,CAAb;IAFc;IAKhB,MAAMiP,MAAN;IAEA,KAAKD,GAAL,CAAS5G,YAAT,CAAsB,cAAtB,EAAsC,WAAtC;IAEA,MAAM,CAACxI,CAAD,EAAII,CAAJ,EAAOuqD,CAAP,EAAUC,CAAV,IAAe,KAAK,CAAAqV,cAAL,EAArB;IACA,KAAKjE,KAAL,CAAWh8D,CAAX,EAAcI,CAAd,EAAiB,CAAjB,EAAoB,CAApB;IACA,KAAKkiE,OAAL,CAAa3X,CAAb,EAAgBC,CAAhB;IAEA,KAAK,CAAA4U,YAAL;IAEA,IAAI,KAAKp8D,KAAT,EAAgB;MAEd,MAAM,CAACmc,WAAD,EAAc66C,YAAd,IAA8B,KAAKC,gBAAzC;MACA,KAAKkI,cAAL,CAAoB,KAAKn/D,KAAL,GAAamc,WAAjC,EAA8C,KAAKlc,MAAL,GAAc+2D,YAA5D;MACA,KAAK4B,KAAL,CACET,KAAA,GAAQh8C,WADV,EAEEi8C,KAAA,GAAQpB,YAFV,EAGE,KAAKh3D,KAAL,GAAamc,WAHf,EAIE,KAAKlc,MAAL,GAAc+2D,YAJhB;MAMA,KAAK,CAAA2D,mBAAL,GAA4B,IAA5B;MACA,KAAK,CAAA2B,aAAL;MACA,KAAK4C,OAAL,CAAa,KAAKl/D,KAAL,GAAamc,WAA1B,EAAuC,KAAKlc,MAAL,GAAc+2D,YAArD;MACA,KAAK,CAAAkF,MAAL;MACA,KAAKlwD,GAAL,CAASrG,SAAT,CAAmBC,GAAnB,CAAuB,UAAvB;IAdc,CAAhB,MAeO;MACL,KAAKoG,GAAL,CAASrG,SAAT,CAAmBC,GAAnB,CAAuB,SAAvB;MACA,KAAK+vD,cAAL;IAFK;IAKP,KAAK,CAAA0G,cAAL;IAEA,OAAO,KAAKrwD,GAAZ;EA3CO;EA8CT,CAAAswD,cAAA,EAAiB;IACf,IAAI,CAAC,KAAK,CAAA3B,mBAAV,EAAgC;MAC9B;IAD8B;IAGhC,MAAM,CAACx+C,WAAD,EAAc66C,YAAd,IAA8B,KAAKC,gBAAzC;IACA,KAAK73C,MAAL,CAAYpf,KAAZ,GAAoB3D,IAAA,CAAKmlC,IAAL,CAAU,KAAKxhC,KAAL,GAAamc,WAAvB,CAApB;IACA,KAAKiD,MAAL,CAAYnf,MAAZ,GAAqB5D,IAAA,CAAKmlC,IAAL,CAAU,KAAKvhC,MAAL,GAAc+2D,YAAxB,CAArB;IACA,KAAK,CAAAsH,eAAL;EAPe;EAiBjB1B,cAAc58D,KAAd,EAAqBC,MAArB,EAA6B;IAC3B,MAAMm/D,YAAA,GAAe/iE,IAAA,CAAKsX,KAAL,CAAW3T,KAAX,CAArB;IACA,MAAMq/D,aAAA,GAAgBhjE,IAAA,CAAKsX,KAAL,CAAW1T,MAAX,CAAtB;IACA,IACE,KAAK,CAAA46D,SAAL,KAAoBuE,YAApB,IACA,KAAK,CAAAtE,UAAL,KAAqBuE,aAFvB,EAGE;MACA;IADA;IAIF,KAAK,CAAAxE,SAAL,GAAkBuE,YAAlB;IACA,KAAK,CAAAtE,UAAL,GAAmBuE,aAAnB;IAEA,KAAKjgD,MAAL,CAAY7Z,KAAZ,CAAkBgD,UAAlB,GAA+B,QAA/B;IAEA,MAAM,CAAC4T,WAAD,EAAc66C,YAAd,IAA8B,KAAKC,gBAAzC;IACA,KAAKj3D,KAAL,GAAaA,KAAA,GAAQmc,WAArB;IACA,KAAKlc,MAAL,GAAcA,MAAA,GAAS+2D,YAAvB;IACA,KAAKM,iBAAL;IAEA,IAAI,KAAK,CAAAW,cAAT,EAA0B;MACxB,KAAK,CAAAqH,cAAL,CAAqBt/D,KAArB,EAA4BC,MAA5B;IADwB;IAI1B,KAAK,CAAAq8D,aAAL;IACA,KAAK,CAAAJ,MAAL;IAEA,KAAK98C,MAAL,CAAY7Z,KAAZ,CAAkBgD,UAAlB,GAA+B,SAA/B;IAIA,KAAKg3D,OAAL;EA/B2B;EAkC7B,CAAAD,eAAgBt/D,KAAhB,EAAuBC,MAAvB,EAA+B;IAC7B,MAAMm5D,OAAA,GAAU,KAAK,CAAAoG,UAAL,EAAhB;IACA,MAAMC,YAAA,GAAgB,CAAAz/D,KAAA,GAAQo5D,OAAR,IAAmB,KAAK,CAAAW,SAA9C;IACA,MAAM2F,YAAA,GAAgB,CAAAz/D,MAAA,GAASm5D,OAAT,IAAoB,KAAK,CAAAU,UAA/C;IACA,KAAKyB,WAAL,GAAmBl/D,IAAA,CAAKG,GAAL,CAASijE,YAAT,EAAuBC,YAAvB,CAAnB;EAJ6B;EAU/B,CAAApB,gBAAA,EAAmB;IACjB,MAAMlF,OAAA,GAAU,KAAK,CAAAoG,UAAL,KAAqB,CAArC;IACA,KAAK7/B,GAAL,CAAS2C,YAAT,CACE,KAAKi5B,WADP,EAEE,CAFF,EAGE,CAHF,EAIE,KAAKA,WAJP,EAKE,KAAKC,YAAL,GAAoB,KAAKD,WAAzB,GAAuCnC,OALzC,EAME,KAAKqC,YAAL,GAAoB,KAAKF,WAAzB,GAAuCnC,OANzC;EAFiB;EAiBnB,OAAO,CAAAuG,WAAPA,CAAoBlC,MAApB,EAA4B;IAC1B,MAAMJ,MAAA,GAAS,IAAIv9B,MAAJ,EAAf;IACA,KAAK,IAAI7mB,CAAA,GAAI,CAAR,EAAWwD,EAAA,GAAKghD,MAAA,CAAO5yD,MAAvB,EAA+BoO,CAAA,GAAIwD,EAAxC,EAA4CxD,CAAA,EAA5C,EAAiD;MAC/C,MAAM,CAAC2mD,KAAD,EAAQxB,QAAR,EAAkBC,QAAlB,EAA4B3N,MAA5B,IAAsC+M,MAAA,CAAOxkD,CAAP,CAA5C;MACA,IAAIA,CAAA,KAAM,CAAV,EAAa;QACXokD,MAAA,CAAO7wB,MAAP,CAAc,GAAGozB,KAAjB;MADW;MAGbvC,MAAA,CAAOzwB,aAAP,CACEwxB,QAAA,CAAS,CAAT,CADF,EAEEA,QAAA,CAAS,CAAT,CAFF,EAGEC,QAAA,CAAS,CAAT,CAHF,EAIEA,QAAA,CAAS,CAAT,CAJF,EAKE3N,MAAA,CAAO,CAAP,CALF,EAMEA,MAAA,CAAO,CAAP,CANF;IAL+C;IAcjD,OAAO2M,MAAP;EAhB0B;EAmB5B,OAAO,CAAAwC,gBAAPA,CAAyBtiD,MAAzB,EAAiCxd,IAAjC,EAAuCmG,QAAvC,EAAiD;IAC/C,MAAM,CAAC8E,GAAD,EAAMC,GAAN,EAAWH,GAAX,EAAgBC,GAAhB,IAAuBhL,IAA7B;IAEA,QAAQmG,QAAR;MACE,KAAK,CAAL;QACE,KAAK,IAAI+S,CAAA,GAAI,CAAR,EAAWwD,EAAA,GAAKc,MAAA,CAAO1S,MAAvB,EAA+BoO,CAAA,GAAIwD,EAAxC,EAA4CxD,CAAA,IAAK,CAAjD,EAAoD;UAClDsE,MAAA,CAAOtE,CAAP,KAAajO,GAAb;UACAuS,MAAA,CAAOtE,CAAA,GAAI,CAAX,IAAgBlO,GAAA,GAAMwS,MAAA,CAAOtE,CAAA,GAAI,CAAX,CAAtB;QAFkD;QAIpD;MACF,KAAK,EAAL;QACE,KAAK,IAAIA,CAAA,GAAI,CAAR,EAAWwD,EAAA,GAAKc,MAAA,CAAO1S,MAAvB,EAA+BoO,CAAA,GAAIwD,EAAxC,EAA4CxD,CAAA,IAAK,CAAjD,EAAoD;UAClD,MAAMrc,CAAA,GAAI2gB,MAAA,CAAOtE,CAAP,CAAV;UACAsE,MAAA,CAAOtE,CAAP,IAAYsE,MAAA,CAAOtE,CAAA,GAAI,CAAX,IAAgBjO,GAA5B;UACAuS,MAAA,CAAOtE,CAAA,GAAI,CAAX,IAAgBrc,CAAA,GAAIqO,GAApB;QAHkD;QAKpD;MACF,KAAK,GAAL;QACE,KAAK,IAAIgO,CAAA,GAAI,CAAR,EAAWwD,EAAA,GAAKc,MAAA,CAAO1S,MAAvB,EAA+BoO,CAAA,GAAIwD,EAAxC,EAA4CxD,CAAA,IAAK,CAAjD,EAAoD;UAClDsE,MAAA,CAAOtE,CAAP,IAAYnO,GAAA,GAAMyS,MAAA,CAAOtE,CAAP,CAAlB;UACAsE,MAAA,CAAOtE,CAAA,GAAI,CAAX,KAAiBhO,GAAjB;QAFkD;QAIpD;MACF,KAAK,GAAL;QACE,KAAK,IAAIgO,CAAA,GAAI,CAAR,EAAWwD,EAAA,GAAKc,MAAA,CAAO1S,MAAvB,EAA+BoO,CAAA,GAAIwD,EAAxC,EAA4CxD,CAAA,IAAK,CAAjD,EAAoD;UAClD,MAAMrc,CAAA,GAAI2gB,MAAA,CAAOtE,CAAP,CAAV;UACAsE,MAAA,CAAOtE,CAAP,IAAYnO,GAAA,GAAMyS,MAAA,CAAOtE,CAAA,GAAI,CAAX,CAAlB;UACAsE,MAAA,CAAOtE,CAAA,GAAI,CAAX,IAAgBlO,GAAA,GAAMnO,CAAtB;QAHkD;QAKpD;MACF;QACE,MAAM,IAAI+nB,KAAJ,CAAU,kBAAV,CAAN;IA5BJ;IA8BA,OAAOpH,MAAP;EAjC+C;EAoCjD,OAAO,CAAAuiD,kBAAPA,CAA2BviD,MAA3B,EAAmCxd,IAAnC,EAAyCmG,QAAzC,EAAmD;IACjD,MAAM,CAAC8E,GAAD,EAAMC,GAAN,EAAWH,GAAX,EAAgBC,GAAhB,IAAuBhL,IAA7B;IAEA,QAAQmG,QAAR;MACE,KAAK,CAAL;QACE,KAAK,IAAI+S,CAAA,GAAI,CAAR,EAAWwD,EAAA,GAAKc,MAAA,CAAO1S,MAAvB,EAA+BoO,CAAA,GAAIwD,EAAxC,EAA4CxD,CAAA,IAAK,CAAjD,EAAoD;UAClDsE,MAAA,CAAOtE,CAAP,KAAajO,GAAb;UACAuS,MAAA,CAAOtE,CAAA,GAAI,CAAX,IAAgBlO,GAAA,GAAMwS,MAAA,CAAOtE,CAAA,GAAI,CAAX,CAAtB;QAFkD;QAIpD;MACF,KAAK,EAAL;QACE,KAAK,IAAIA,CAAA,GAAI,CAAR,EAAWwD,EAAA,GAAKc,MAAA,CAAO1S,MAAvB,EAA+BoO,CAAA,GAAIwD,EAAxC,EAA4CxD,CAAA,IAAK,CAAjD,EAAoD;UAClD,MAAMrc,CAAA,GAAI2gB,MAAA,CAAOtE,CAAP,CAAV;UACAsE,MAAA,CAAOtE,CAAP,IAAYsE,MAAA,CAAOtE,CAAA,GAAI,CAAX,IAAgBhO,GAA5B;UACAsS,MAAA,CAAOtE,CAAA,GAAI,CAAX,IAAgBrc,CAAA,GAAIoO,GAApB;QAHkD;QAKpD;MACF,KAAK,GAAL;QACE,KAAK,IAAIiO,CAAA,GAAI,CAAR,EAAWwD,EAAA,GAAKc,MAAA,CAAO1S,MAAvB,EAA+BoO,CAAA,GAAIwD,EAAxC,EAA4CxD,CAAA,IAAK,CAAjD,EAAoD;UAClDsE,MAAA,CAAOtE,CAAP,IAAYnO,GAAA,GAAMyS,MAAA,CAAOtE,CAAP,CAAlB;UACAsE,MAAA,CAAOtE,CAAA,GAAI,CAAX,KAAiBhO,GAAjB;QAFkD;QAIpD;MACF,KAAK,GAAL;QACE,KAAK,IAAIgO,CAAA,GAAI,CAAR,EAAWwD,EAAA,GAAKc,MAAA,CAAO1S,MAAvB,EAA+BoO,CAAA,GAAIwD,EAAxC,EAA4CxD,CAAA,IAAK,CAAjD,EAAoD;UAClD,MAAMrc,CAAA,GAAI2gB,MAAA,CAAOtE,CAAP,CAAV;UACAsE,MAAA,CAAOtE,CAAP,IAAYlO,GAAA,GAAMwS,MAAA,CAAOtE,CAAA,GAAI,CAAX,CAAlB;UACAsE,MAAA,CAAOtE,CAAA,GAAI,CAAX,IAAgBnO,GAAA,GAAMlO,CAAtB;QAHkD;QAKpD;MACF;QACE,MAAM,IAAI+nB,KAAJ,CAAU,kBAAV,CAAN;IA5BJ;IA8BA,OAAOpH,MAAP;EAjCiD;EA2CnD,CAAAwiD,eAAgBC,CAAhB,EAAmBlxB,EAAnB,EAAuBC,EAAvB,EAA2BhvC,IAA3B,EAAiC;IAC/B,MAAMw/C,KAAA,GAAQ,EAAd;IACA,MAAM6Z,OAAA,GAAU,KAAK8B,SAAL,GAAiB,CAAjC;IACA,MAAM+E,MAAA,GAASD,CAAA,GAAIlxB,EAAJ,GAASsqB,OAAxB;IACA,MAAM8G,MAAA,GAASF,CAAA,GAAIjxB,EAAJ,GAASqqB,OAAxB;IACA,WAAWqE,MAAX,IAAqB,KAAKle,KAA1B,EAAiC;MAC/B,MAAMx1B,MAAA,GAAS,EAAf;MACA,MAAMxM,MAAA,GAAS,EAAf;MACA,KAAK,IAAIynB,CAAA,GAAI,CAAR,EAAW0F,EAAA,GAAK+yB,MAAA,CAAO5yD,MAAvB,EAA+Bm6B,CAAA,GAAI0F,EAAxC,EAA4C1F,CAAA,EAA5C,EAAiD;QAC/C,MAAM,CAAC46B,KAAD,EAAQxB,QAAR,EAAkBC,QAAlB,EAA4B3N,MAA5B,IAAsC+M,MAAA,CAAOz4B,CAAP,CAA5C;QACA,MAAMm7B,GAAA,GAAMH,CAAA,GAAIJ,KAAA,CAAM,CAAN,CAAJ,GAAeK,MAA3B;QACA,MAAMG,GAAA,GAAMJ,CAAA,GAAIJ,KAAA,CAAM,CAAN,CAAJ,GAAeM,MAA3B;QACA,MAAMG,GAAA,GAAML,CAAA,GAAI5B,QAAA,CAAS,CAAT,CAAJ,GAAkB6B,MAA9B;QACA,MAAMK,GAAA,GAAMN,CAAA,GAAI5B,QAAA,CAAS,CAAT,CAAJ,GAAkB8B,MAA9B;QACA,MAAMK,GAAA,GAAMP,CAAA,GAAI3B,QAAA,CAAS,CAAT,CAAJ,GAAkB4B,MAA9B;QACA,MAAMO,GAAA,GAAMR,CAAA,GAAI3B,QAAA,CAAS,CAAT,CAAJ,GAAkB6B,MAA9B;QACA,MAAMO,GAAA,GAAMT,CAAA,GAAItP,MAAA,CAAO,CAAP,CAAJ,GAAgBuP,MAA5B;QACA,MAAMS,GAAA,GAAMV,CAAA,GAAItP,MAAA,CAAO,CAAP,CAAJ,GAAgBwP,MAA5B;QAEA,IAAIl7B,CAAA,KAAM,CAAV,EAAa;UACXjb,MAAA,CAAOte,IAAP,CAAY00D,GAAZ,EAAiBC,GAAjB;UACA7iD,MAAA,CAAO9R,IAAP,CAAY00D,GAAZ,EAAiBC,GAAjB;QAFW;QAIbr2C,MAAA,CAAOte,IAAP,CAAY40D,GAAZ,EAAiBC,GAAjB,EAAsBC,GAAtB,EAA2BC,GAA3B,EAAgCC,GAAhC,EAAqCC,GAArC;QACAnjD,MAAA,CAAO9R,IAAP,CAAY40D,GAAZ,EAAiBC,GAAjB;QACA,IAAIt7B,CAAA,KAAM0F,EAAA,GAAK,CAAf,EAAkB;UAChBntB,MAAA,CAAO9R,IAAP,CAAYg1D,GAAZ,EAAiBC,GAAjB;QADgB;MAjB6B;MAqBjDnhB,KAAA,CAAM9zC,IAAN,CAAW;QACTgyD,MAAA,EAAQ5D,SAAA,CAAU,CAAAgG,gBAAV,CAA4B91C,MAA5B,EAAoChqB,IAApC,EAA0C,KAAKmG,QAA/C,CADC;QAETqX,MAAA,EAAQs8C,SAAA,CAAU,CAAAgG,gBAAV,CAA4BtiD,MAA5B,EAAoCxd,IAApC,EAA0C,KAAKmG,QAA/C;MAFC,CAAX;IAxB+B;IA8BjC,OAAOq5C,KAAP;EAnC+B;EA0CjC,CAAAohB,QAAA,EAAW;IACT,IAAI9C,IAAA,GAAO3qB,QAAX;IACA,IAAI4qB,IAAA,GAAO,CAAC5qB,QAAZ;IACA,IAAI6qB,IAAA,GAAO7qB,QAAX;IACA,IAAI8qB,IAAA,GAAO,CAAC9qB,QAAZ;IAEA,WAAW1C,IAAX,IAAmB,KAAK+O,KAAxB,EAA+B;MAC7B,WAAW,CAACqgB,KAAD,EAAQxB,QAAR,EAAkBC,QAAlB,EAA4B3N,MAA5B,CAAX,IAAkDlgB,IAAlD,EAAwD;QACtD,MAAM5Q,IAAA,GAAO1gC,SAAA,CAAK0zC,iBAAL,CACX,GAAGgtB,KADQ,EAEX,GAAGxB,QAFQ,EAGX,GAAGC,QAHQ,EAIX,GAAG3N,MAJQ,CAAb;QAMAmN,IAAA,GAAOxhE,IAAA,CAAKG,GAAL,CAASqhE,IAAT,EAAej+B,IAAA,CAAK,CAAL,CAAf,CAAP;QACAm+B,IAAA,GAAO1hE,IAAA,CAAKG,GAAL,CAASuhE,IAAT,EAAen+B,IAAA,CAAK,CAAL,CAAf,CAAP;QACAk+B,IAAA,GAAOzhE,IAAA,CAAKE,GAAL,CAASuhE,IAAT,EAAel+B,IAAA,CAAK,CAAL,CAAf,CAAP;QACAo+B,IAAA,GAAO3hE,IAAA,CAAKE,GAAL,CAASyhE,IAAT,EAAep+B,IAAA,CAAK,CAAL,CAAf,CAAP;MAVsD;IAD3B;IAe/B,OAAO,CAACi+B,IAAD,EAAOE,IAAP,EAAaD,IAAb,EAAmBE,IAAnB,CAAP;EArBS;EA+BX,CAAAwB,WAAA,EAAc;IACZ,OAAO,KAAK,CAAAvH,cAAL,GACH57D,IAAA,CAAKmlC,IAAL,CAAU,KAAK05B,SAAL,GAAiB,KAAKtG,WAAhC,CADG,GAEH,CAFJ;EADY;EAWd,CAAAqH,aAAc2E,SAAA,GAAY,KAA1B,EAAiC;IAC/B,IAAI,KAAKnY,OAAL,EAAJ,EAAoB;MAClB;IADkB;IAIpB,IAAI,CAAC,KAAK,CAAAwP,cAAV,EAA2B;MACzB,KAAK,CAAAiE,MAAL;MACA;IAFyB;IAK3B,MAAMt8B,IAAA,GAAO,KAAK,CAAA+gC,OAAL,EAAb;IACA,MAAMvH,OAAA,GAAU,KAAK,CAAAoG,UAAL,EAAhB;IACA,KAAK,CAAAzF,SAAL,GAAkB19D,IAAA,CAAKE,GAAL,CAASmjB,8BAAA,CAAiBmhD,QAA1B,EAAoCjhC,IAAA,CAAK,CAAL,IAAUA,IAAA,CAAK,CAAL,CAA9C,CAAlB;IACA,KAAK,CAAAk6B,UAAL,GAAmBz9D,IAAA,CAAKE,GAAL,CAASmjB,8BAAA,CAAiBmhD,QAA1B,EAAoCjhC,IAAA,CAAK,CAAL,IAAUA,IAAA,CAAK,CAAL,CAA9C,CAAnB;IAEA,MAAM5/B,KAAA,GAAQ3D,IAAA,CAAKmlC,IAAL,CAAU43B,OAAA,GAAU,KAAK,CAAAW,SAAL,GAAkB,KAAKwB,WAA3C,CAAd;IACA,MAAMt7D,MAAA,GAAS5D,IAAA,CAAKmlC,IAAL,CAAU43B,OAAA,GAAU,KAAK,CAAAU,UAAL,GAAmB,KAAKyB,WAA5C,CAAf;IAEA,MAAM,CAACp/C,WAAD,EAAc66C,YAAd,IAA8B,KAAKC,gBAAzC;IACA,KAAKj3D,KAAL,GAAaA,KAAA,GAAQmc,WAArB;IACA,KAAKlc,MAAL,GAAcA,MAAA,GAAS+2D,YAAvB;IAEA,KAAKmI,cAAL,CAAoBn/D,KAApB,EAA2BC,MAA3B;IAEA,MAAM6gE,gBAAA,GAAmB,KAAKtF,YAA9B;IACA,MAAMuF,gBAAA,GAAmB,KAAKtF,YAA9B;IAEA,KAAKD,YAAL,GAAoB,CAAC57B,IAAA,CAAK,CAAL,CAArB;IACA,KAAK67B,YAAL,GAAoB,CAAC77B,IAAA,CAAK,CAAL,CAArB;IACA,KAAK,CAAA08B,aAAL;IACA,KAAK,CAAAJ,MAAL;IAEA,KAAK,CAAArB,SAAL,GAAkB76D,KAAlB;IACA,KAAK,CAAA86D,UAAL,GAAmB76D,MAAnB;IAEA,KAAKi/D,OAAL,CAAal/D,KAAb,EAAoBC,MAApB;IACA,MAAM+gE,eAAA,GAAkBJ,SAAA,GAAYxH,OAAA,GAAU,KAAKmC,WAAf,GAA6B,CAAzC,GAA6C,CAArE;IACA,KAAKx5B,SAAL,CACE++B,gBAAA,GAAmB,KAAKtF,YAAxB,GAAuCwF,eADzC,EAEED,gBAAA,GAAmB,KAAKtF,YAAxB,GAAuCuF,eAFzC;EArC+B;EA4CjC,OAAOjI,WAAPA,CAAmBz4D,IAAnB,EAAyBgE,MAAzB,EAAiC00D,SAAjC,EAA4C;IAC1C,IAAI14D,IAAA,YAAgBgC,qCAApB,EAA0C;MACxC,OAAO,IAAP;IADwC;IAG1C,MAAM42D,MAAA,GAAS,MAAMH,WAAN,CAAkBz4D,IAAlB,EAAwBgE,MAAxB,EAAgC00D,SAAhC,CAAf;IAEAE,MAAA,CAAOgC,SAAP,GAAmB56D,IAAA,CAAK46D,SAAxB;IACAhC,MAAA,CAAOr7D,KAAP,GAAeqB,SAAA,CAAKmI,YAAL,CAAkB,GAAG/G,IAAA,CAAKzC,KAA1B,CAAf;IACAq7D,MAAA,CAAOiC,OAAP,GAAiB76D,IAAA,CAAK66D,OAAtB;IAEA,MAAM,CAACt1D,SAAD,EAAYC,UAAZ,IAA0BozD,MAAA,CAAOV,cAAvC;IACA,MAAMx4D,KAAA,GAAQk5D,MAAA,CAAOl5D,KAAP,GAAe6F,SAA7B;IACA,MAAM5F,MAAA,GAASi5D,MAAA,CAAOj5D,MAAP,GAAgB6F,UAA/B;IACA,MAAMy1D,WAAA,GAAcrC,MAAA,CAAOtE,WAA3B;IACA,MAAMwE,OAAA,GAAU94D,IAAA,CAAK46D,SAAL,GAAiB,CAAjC;IAEAhC,MAAA,CAAO,CAAAjB,cAAP,GAAyB,IAAzB;IACAiB,MAAA,CAAO,CAAA2B,SAAP,GAAoBx+D,IAAA,CAAKsX,KAAL,CAAW3T,KAAX,CAApB;IACAk5D,MAAA,CAAO,CAAA4B,UAAP,GAAqBz+D,IAAA,CAAKsX,KAAL,CAAW1T,MAAX,CAArB;IAEA,MAAM;MAAEs/C,KAAF;MAASx/C,IAAT;MAAemG;IAAf,IAA4B5F,IAAlC;IAEA,SAAS;MAAEm9D;IAAF,CAAT,IAAuBle,KAAvB,EAA8B;MAC5Bke,MAAA,GAAS5D,SAAA,CAAU,CAAAiG,kBAAV,CAA8BrC,MAA9B,EAAsC19D,IAAtC,EAA4CmG,QAA5C,CAAT;MACA,MAAMsqC,IAAA,GAAO,EAAb;MACA0oB,MAAA,CAAO3Z,KAAP,CAAa9zC,IAAb,CAAkB+kC,IAAlB;MACA,IAAIC,EAAA,GAAK8qB,WAAA,IAAekC,MAAA,CAAO,CAAP,IAAYrE,OAAZ,CAAxB;MACA,IAAI52B,EAAA,GAAK+4B,WAAA,IAAekC,MAAA,CAAO,CAAP,IAAYrE,OAAZ,CAAxB;MACA,KAAK,IAAIngD,CAAA,GAAI,CAAR,EAAWwD,EAAA,GAAKghD,MAAA,CAAO5yD,MAAvB,EAA+BoO,CAAA,GAAIwD,EAAxC,EAA4CxD,CAAA,IAAK,CAAjD,EAAoD;QAClD,MAAMknD,GAAA,GAAM5E,WAAA,IAAekC,MAAA,CAAOxkD,CAAP,IAAYmgD,OAAZ,CAA3B;QACA,MAAMgH,GAAA,GAAM7E,WAAA,IAAekC,MAAA,CAAOxkD,CAAA,GAAI,CAAX,IAAgBmgD,OAAhB,CAA3B;QACA,MAAMiH,GAAA,GAAM9E,WAAA,IAAekC,MAAA,CAAOxkD,CAAA,GAAI,CAAX,IAAgBmgD,OAAhB,CAA3B;QACA,MAAMkH,GAAA,GAAM/E,WAAA,IAAekC,MAAA,CAAOxkD,CAAA,GAAI,CAAX,IAAgBmgD,OAAhB,CAA3B;QACA,MAAMmH,GAAA,GAAMhF,WAAA,IAAekC,MAAA,CAAOxkD,CAAA,GAAI,CAAX,IAAgBmgD,OAAhB,CAA3B;QACA,MAAMoH,GAAA,GAAMjF,WAAA,IAAekC,MAAA,CAAOxkD,CAAA,GAAI,CAAX,IAAgBmgD,OAAhB,CAA3B;QACA5oB,IAAA,CAAK/kC,IAAL,CAAU,CACR,CAACglC,EAAD,EAAKjO,EAAL,CADQ,EAER,CAAC29B,GAAD,EAAMC,GAAN,CAFQ,EAGR,CAACC,GAAD,EAAMC,GAAN,CAHQ,EAIR,CAACC,GAAD,EAAMC,GAAN,CAJQ,CAAV;QAMA/vB,EAAA,GAAK8vB,GAAL;QACA/9B,EAAA,GAAKg+B,GAAL;MAdkD;MAgBpD,MAAMnD,MAAA,GAAS,KAAK,CAAAsC,WAAL,CAAkBnvB,IAAlB,CAAf;MACA0oB,MAAA,CAAOkC,YAAP,CAAoB3vD,IAApB,CAAyB4xD,MAAzB;IAvB4B;IA0B9B,MAAMz9B,IAAA,GAAOs5B,MAAA,CAAO,CAAAyH,OAAP,EAAb;IACAzH,MAAA,CAAO,CAAAa,SAAP,GAAoB19D,IAAA,CAAKE,GAAL,CAASmjB,8BAAA,CAAiBmhD,QAA1B,EAAoCjhC,IAAA,CAAK,CAAL,IAAUA,IAAA,CAAK,CAAL,CAA9C,CAApB;IACAs5B,MAAA,CAAO,CAAAY,UAAP,GAAqBz9D,IAAA,CAAKE,GAAL,CAASmjB,8BAAA,CAAiBmhD,QAA1B,EAAoCjhC,IAAA,CAAK,CAAL,IAAUA,IAAA,CAAK,CAAL,CAA9C,CAArB;IACAs5B,MAAA,CAAO,CAAAoG,cAAP,CAAuBt/D,KAAvB,EAA8BC,MAA9B;IAEA,OAAOi5D,MAAP;EArD0C;EAyD5C/3C,UAAA,EAAY;IACV,IAAI,KAAKsnC,OAAL,EAAJ,EAAoB;MAClB,OAAO,IAAP;IADkB;IAIpB,MAAM1oD,IAAA,GAAO,KAAKs5D,OAAL,CAAa,CAAb,EAAgB,CAAhB,CAAb;IACA,MAAMx7D,KAAA,GAAQ6hB,8BAAA,CAAiB45C,aAAjB,CAA+BC,OAA/B,CAAuC,KAAK55B,GAAL,CAASoJ,WAAhD,CAAd;IAEA,OAAO;MACLxoC,cAAA,EAAgB5B,yBAAA,CAAqB0D,GADhC;MAELxE,KAFK;MAGLq9D,SAAA,EAAW,KAAKA,SAHX;MAILC,OAAA,EAAS,KAAKA,OAJT;MAKL5b,KAAA,EAAO,KAAK,CAAAwgB,cAAL,CACL,KAAKxE,WAAL,GAAmB,KAAK3G,WADnB,EAEL,KAAK4G,YAFA,EAGL,KAAKC,YAHA,EAIL17D,IAJK,CALF;MAWL2uB,SAAA,EAAW,KAAKA,SAXX;MAYL3uB,IAZK;MAaLmG,QAAA,EAAU,KAAKA,QAbV;MAcLszD,kBAAA,EAAoB,KAAKC;IAdpB,CAAP;EARU;AArnC2B;;;ACbzC;AACA;AACA;AACA;AAKA,MAAMwH,WAAN,SAA0BvhD,8BAA1B,CAA2C;EACzC,CAAA0B,MAAA,GAAU,IAAV;EAEA,CAAA8/C,QAAA,GAAY,IAAZ;EAEA,CAAAC,aAAA,GAAiB,IAAjB;EAEA,CAAAC,SAAA,GAAa,IAAb;EAEA,CAAAC,UAAA,GAAc,IAAd;EAEA,CAAAC,cAAA,GAAkB,EAAlB;EAEA,CAAAliD,MAAA,GAAU,IAAV;EAEA,CAAAw7C,QAAA,GAAY,IAAZ;EAEA,CAAA2G,eAAA,GAAmB,IAAnB;EAEA,CAAAC,KAAA,GAAS,KAAT;EAEA,CAAAC,uBAAA,GAA2B,KAA3B;EAEA,OAAO9gD,KAAP,GAAe,OAAf;EAEA,OAAOgzC,WAAP,GAAqBh1D,yBAAA,CAAqBsE,KAA1C;EAEAM,YAAYmb,MAAZ,EAAoB;IAClB,MAAM;MAAE,GAAGA,MAAL;MAAa7U,IAAA,EAAM;IAAnB,CAAN;IACA,KAAK,CAAAu3D,SAAL,GAAkB1iD,MAAA,CAAO0iD,SAAzB;IACA,KAAK,CAAAC,UAAL,GAAmB3iD,MAAA,CAAO2iD,UAA1B;EAHkB;EAOpB,OAAOxN,UAAPA,CAAkBC,IAAlB,EAAwB;IACtBp0C,8BAAA,CAAiBm0C,UAAjB,CAA4BC,IAA5B;EADsB;EAIxB,WAAW4N,cAAXA,CAAA,EAA4B;IAG1B,MAAMC,KAAA,GAAQ,CACZ,MADY,EAEZ,MAFY,EAGZ,KAHY,EAIZ,KAJY,EAKZ,MALY,EAMZ,KANY,EAOZ,SAPY,EAQZ,MARY,EASZ,QATY,CAAd;IAWA,OAAO3iE,eAAA,CACL,IADK,EAEL,gBAFK,EAGL2iE,KAAA,CAAM7jE,GAAN,CAAU+S,IAAA,IAAS,SAAQA,IAAT,EAAlB,CAHK,CAAP;EAd0B;EAqB5B,WAAW+wD,iBAAXA,CAAA,EAA+B;IAC7B,OAAO5iE,eAAA,CAAO,IAAP,EAAa,mBAAb,EAAkC,KAAK0iE,cAAL,CAAoB1jE,IAApB,CAAyB,GAAzB,CAAlC,CAAP;EAD6B;EAK/B,OAAO6jE,wBAAPA,CAAgCC,IAAhC,EAAsC;IACpC,OAAO,KAAKJ,cAAL,CAAoBpvD,QAApB,CAA6BwvD,IAA7B,CAAP;EADoC;EAKtC,OAAOC,KAAPA,CAAatoD,IAAb,EAAmBnV,MAAnB,EAA2B;IACzBA,MAAA,CAAO09D,WAAP,CAAmBrjE,yBAAA,CAAqBsE,KAAxC,EAA+C;MAC7Co+D,UAAA,EAAY5nD,IAAA,CAAKwoD,SAAL;IADiC,CAA/C;EADyB;EAM3B,CAAAC,iBAAkB5hE,IAAlB,EAAwB6hE,MAAA,GAAS,KAAjC,EAAwC;IACtC,IAAI,CAAC7hE,IAAL,EAAW;MACT,KAAKgY,MAAL;MACA;IAFS;IAIX,KAAK,CAAA8I,MAAL,GAAe9gB,IAAA,CAAK8gB,MAApB;IACA,IAAI,CAAC+gD,MAAL,EAAa;MACX,KAAK,CAAAjB,QAAL,GAAiB5gE,IAAA,CAAK+E,EAAtB;MACA,KAAK,CAAAm8D,KAAL,GAAclhE,IAAA,CAAKkhE,KAAnB;IAFW;IAIb,IAAIlhE,IAAA,CAAKud,IAAT,EAAe;MACb,KAAK,CAAAyjD,cAAL,GAAuBhhE,IAAA,CAAKud,IAAL,CAAUhU,IAAjC;IADa;IAGf,KAAK,CAAAuyD,YAAL;EAbsC;EAgBxC,CAAAgG,cAAA,EAAiB;IACf,KAAK,CAAAjB,aAAL,GAAsB,IAAtB;IACA,KAAK7L,UAAL,CAAgB+M,aAAhB,CAA8B,KAA9B;IACA,IAAI,KAAK,CAAAjjD,MAAT,EAAkB;MAChB,KAAKpT,GAAL,CAASrD,KAAT;IADgB;EAHH;EAQjB,CAAA25D,UAAA,EAAa;IACX,IAAI,KAAK,CAAApB,QAAT,EAAoB;MAClB,KAAK5L,UAAL,CAAgB+M,aAAhB,CAA8B,IAA9B;MACA,KAAK/M,UAAL,CAAgBiN,YAAhB,CACGC,SADH,CACa,KAAK,CAAAtB,QADlB,EAEG14C,IAFH,CAEQloB,IAAA,IAAQ,KAAK,CAAA4hE,gBAAL,CAAuB5hE,IAAvB,EAA4C,IAA5C,CAFhB,EAGG46B,OAHH,CAGW,MAAM,KAAK,CAAAknC,aAAL,EAHjB;MAIA;IANkB;IASpB,IAAI,KAAK,CAAAhB,SAAT,EAAqB;MACnB,MAAMjzD,GAAA,GAAM,KAAK,CAAAizD,SAAjB;MACA,KAAK,CAAAA,SAAL,GAAkB,IAAlB;MACA,KAAK9L,UAAL,CAAgB+M,aAAhB,CAA8B,IAA9B;MACA,KAAK,CAAAlB,aAAL,GAAsB,KAAK7L,UAAL,CAAgBiN,YAAhB,CACnBE,UADmB,CACRt0D,GADQ,EAEnBqa,IAFmB,CAEdloB,IAAA,IAAQ,KAAK,CAAA4hE,gBAAL,CAAuB5hE,IAAvB,CAFM,EAGnB46B,OAHmB,CAGX,MAAM,KAAK,CAAAknC,aAAL,EAHK,CAAtB;MAIA;IARmB;IAWrB,IAAI,KAAK,CAAAf,UAAT,EAAsB;MACpB,MAAMxjD,IAAA,GAAO,KAAK,CAAAwjD,UAAlB;MACA,KAAK,CAAAA,UAAL,GAAmB,IAAnB;MACA,KAAK/L,UAAL,CAAgB+M,aAAhB,CAA8B,IAA9B;MACA,KAAK,CAAAlB,aAAL,GAAsB,KAAK7L,UAAL,CAAgBiN,YAAhB,CACnBG,WADmB,CACP7kD,IADO,EAEnB2K,IAFmB,CAEdloB,IAAA,IAAQ,KAAK,CAAA4hE,gBAAL,CAAuB5hE,IAAvB,CAFM,EAGnB46B,OAHmB,CAGX,MAAM,KAAK,CAAAknC,aAAL,EAHK,CAAtB;MAIA;IARoB;IAWtB,MAAMlS,KAAA,GAAQhrD,QAAA,CAASC,aAAT,CAAuB,OAAvB,CAAd;IAMA+qD,KAAA,CAAMr/C,IAAN,GAAa,MAAb;IACAq/C,KAAA,CAAMyS,MAAN,GAAe1B,WAAA,CAAYW,iBAA3B;IACA,KAAK,CAAAT,aAAL,GAAsB,IAAIt4C,OAAJ,CAAYC,OAAA,IAAW;MAC3ConC,KAAA,CAAMviD,gBAAN,CAAuB,QAAvB,EAAiC,YAAY;QAC3C,IAAI,CAACuiD,KAAA,CAAM0S,KAAP,IAAgB1S,KAAA,CAAM0S,KAAN,CAAY/3D,MAAZ,KAAuB,CAA3C,EAA8C;UAC5C,KAAKyN,MAAL;QAD4C,CAA9C,MAEO;UACL,KAAKg9C,UAAL,CAAgB+M,aAAhB,CAA8B,IAA9B;UACA,MAAM/hE,IAAA,GAAO,MAAM,KAAKg1D,UAAL,CAAgBiN,YAAhB,CAA6BG,WAA7B,CACjBxS,KAAA,CAAM0S,KAAN,CAAY,CAAZ,CADiB,CAAnB;UAGA,KAAK,CAAAV,gBAAL,CAAuB5hE,IAAvB;QALK;QAUPwoB,OAAA;MAb2C,CAA7C;MAeAonC,KAAA,CAAMviD,gBAAN,CAAuB,QAAvB,EAAiC,MAAM;QACrC,KAAK2K,MAAL;QACAwQ,OAAA;MAFqC,CAAvC;IAhB2C,CAAvB,EAoBnBoS,OApBmB,CAoBX,MAAM,KAAK,CAAAknC,aAAL,EApBK,CAAtB;IAsBElS,KAAA,CAAM2S,KAAN;EA9DS;EAmEbvqD,OAAA,EAAS;IACP,IAAI,KAAK,CAAA4oD,QAAT,EAAoB;MAClB,KAAK,CAAA9/C,MAAL,GAAe,IAAf;MACA,KAAKk0C,UAAL,CAAgBiN,YAAhB,CAA6BO,QAA7B,CAAsC,KAAK,CAAA5B,QAA3C;MACA,KAAK,CAAA9hD,MAAL,EAAc9G,MAAd;MACA,KAAK,CAAA8G,MAAL,GAAe,IAAf;MACA,KAAK,CAAAw7C,QAAL,EAAgB2B,UAAhB;MACA,KAAK,CAAA3B,QAAL,GAAiB,IAAjB;MACA,IAAI,KAAK,CAAA2G,eAAT,EAA2B;QACzBxwC,YAAA,CAAa,KAAK,CAAAwwC,eAAlB;QACA,KAAK,CAAAA,eAAL,GAAwB,IAAxB;MAFyB;IAPT;IAYpB,MAAMjpD,MAAN;EAbO;EAiBTm9C,QAAA,EAAU;IACR,IAAI,CAAC,KAAKnxD,MAAV,EAAkB;MAGhB,IAAI,KAAK,CAAA48D,QAAT,EAAoB;QAClB,KAAK,CAAAoB,SAAL;MADkB;MAGpB;IANgB;IAQlB,MAAM7M,OAAN;IACA,IAAI,KAAKzpD,GAAL,KAAa,IAAjB,EAAuB;MACrB;IADqB;IAIvB,IAAI,KAAK,CAAAk1D,QAAT,EAAoB;MAClB,KAAK,CAAAoB,SAAL;IADkB;IAIpB,IAAI,CAAC,KAAK5M,eAAV,EAA2B;MAGzB,KAAKpxD,MAAL,CAAYsB,GAAZ,CAAgB,IAAhB;IAHyB;EAlBnB;EA0BV0wD,UAAA,EAAY;IACV,KAAKL,YAAL,GAAoB,IAApB;IACA,KAAKjqD,GAAL,CAASrD,KAAT;EAFU;EAMZ8/C,QAAA,EAAU;IACR,OAAO,EACL,KAAK,CAAA0Y,aAAL,IACA,KAAK,CAAA//C,MADL,IAEA,KAAK,CAAAggD,SAFL,IAGA,KAAK,CAAAC,UAHL,CADF;EADQ;EAUV,IAAIpC,WAAJA,CAAA,EAAkB;IAChB,OAAO,IAAP;EADgB;EAKlBhzD,OAAA,EAAS;IACP,IAAI,KAAKD,GAAT,EAAc;MACZ,OAAO,KAAKA,GAAZ;IADY;IAId,IAAImsD,KAAJ,EAAWC,KAAX;IACA,IAAI,KAAKp4D,KAAT,EAAgB;MACdm4D,KAAA,GAAQ,KAAKv7D,CAAb;MACAw7D,KAAA,GAAQ,KAAKp7D,CAAb;IAFc;IAKhB,MAAMiP,MAAN;IACA,KAAKD,GAAL,CAAS1D,MAAT,GAAkB,IAAlB;IAEA,IAAI,KAAK,CAAA8Y,MAAT,EAAkB;MAChB,KAAK,CAAAg7C,YAAL;IADgB,CAAlB,MAEO;MACL,KAAK,CAAAkG,SAAL;IADK;IAIP,IAAI,KAAKtiE,KAAT,EAAgB;MAEd,MAAM,CAACmc,WAAD,EAAc66C,YAAd,IAA8B,KAAKC,gBAAzC;MACA,KAAK2B,KAAL,CACET,KAAA,GAAQh8C,WADV,EAEEi8C,KAAA,GAAQpB,YAFV,EAGE,KAAKh3D,KAAL,GAAamc,WAHf,EAIE,KAAKlc,MAAL,GAAc+2D,YAJhB;IAHc;IAWhB,OAAO,KAAKhrD,GAAZ;EA/BO;EAkCT,CAAAowD,aAAA,EAAgB;IACd,MAAM;MAAEpwD;IAAF,IAAU,IAAhB;IACA,IAAI;MAAEhM,KAAF;MAASC;IAAT,IAAoB,KAAK,CAAAmhB,MAA7B;IACA,MAAM,CAACvb,SAAD,EAAYC,UAAZ,IAA0B,KAAK0yD,cAArC;IACA,MAAMuK,SAAA,GAAY,IAAlB;IACA,IAAI,KAAK/iE,KAAT,EAAgB;MACdA,KAAA,GAAQ,KAAKA,KAAL,GAAa6F,SAArB;MACA5F,MAAA,GAAS,KAAKA,MAAL,GAAc6F,UAAvB;IAFc,CAAhB,MAGO,IACL9F,KAAA,GAAQ+iE,SAAA,GAAYl9D,SAApB,IACA5F,MAAA,GAAS8iE,SAAA,GAAYj9D,UAFhB,EAGL;MAGA,MAAMk9D,MAAA,GAAS3mE,IAAA,CAAKG,GAAL,CACZumE,SAAA,GAAYl9D,SAAb,GAA0B7F,KADb,EAEZ+iE,SAAA,GAAYj9D,UAAb,GAA2B7F,MAFd,CAAf;MAIAD,KAAA,IAASgjE,MAAT;MACA/iE,MAAA,IAAU+iE,MAAV;IARA;IAUF,MAAM,CAAC7mD,WAAD,EAAc66C,YAAd,IAA8B,KAAKC,gBAAzC;IACA,KAAKiI,OAAL,CACGl/D,KAAA,GAAQmc,WAAT,GAAwBtW,SAD1B,EAEG5F,MAAA,GAAS+2D,YAAV,GAA0BlxD,UAF5B;IAKA,KAAKwvD,UAAL,CAAgB+M,aAAhB,CAA8B,KAA9B;IACA,MAAMjjD,MAAA,GAAU,KAAK,CAAAA,MAAL,GAAela,QAAA,CAASC,aAAT,CAAuB,QAAvB,CAA/B;IACA6G,GAAA,CAAIX,MAAJ,CAAW+T,MAAX;IACApT,GAAA,CAAI1D,MAAJ,GAAa,KAAb;IACA,KAAK,CAAA26D,UAAL,CAAiBjjE,KAAjB,EAAwBC,MAAxB;IACA,KAAK,CAAAo8D,cAAL;IACA,IAAI,CAAC,KAAK,CAAAoF,uBAAV,EAAoC;MAClC,KAAKn9D,MAAL,CAAY4+D,iBAAZ,CAA8B,IAA9B;MACA,KAAK,CAAAzB,uBAAL,GAAgC,IAAhC;IAFkC;IAQpC,KAAKnM,UAAL,CAAgB6N,SAAhB,CAA0Bt1D,QAA1B,CAAmC,iBAAnC,EAAsD;MACpDC,MAAA,EAAQ,IAD4C;MAEpD0sB,OAAA,EAAS;QACP3pB,IAAA,EAAM,SADC;QAEPxQ,OAAA,EAAS,KAAK+iE,UAFP;QAGP9iE,IAAA,EAAM;UACJ0J,MAAA,EAAQ;QADJ;MAHC;IAF2C,CAAtD;IAUA,KAAKq5D,gBAAL;IACA,IAAI,KAAK,CAAA/B,cAAT,EAA0B;MACxBliD,MAAA,CAAOha,YAAP,CAAoB,YAApB,EAAkC,KAAK,CAAAk8D,cAAvC;IADwB;EApDZ;EAgEhB,CAAA1E,cAAe58D,KAAf,EAAsBC,MAAtB,EAA8B;IAC5B,MAAM,CAACkc,WAAD,EAAc66C,YAAd,IAA8B,KAAKC,gBAAzC;IACA,KAAKj3D,KAAL,GAAaA,KAAA,GAAQmc,WAArB;IACA,KAAKlc,MAAL,GAAcA,MAAA,GAAS+2D,YAAvB;IACA,KAAKkI,OAAL,CAAal/D,KAAb,EAAoBC,MAApB;IACA,IAAI,KAAKu2D,eAAL,EAAsBC,UAA1B,EAAsC;MACpC,KAAKC,MAAL;IADoC,CAAtC,MAEO;MACL,KAAKY,iBAAL;IADK;IAGP,KAAKd,eAAL,GAAuB,IAAvB;IACA,IAAI,KAAK,CAAA+K,eAAL,KAA0B,IAA9B,EAAoC;MAClCxwC,YAAA,CAAa,KAAK,CAAAwwC,eAAlB;IADkC;IAOpC,MAAM+B,YAAA,GAAe,GAArB;IACA,KAAK,CAAA/B,eAAL,GAAwB34D,UAAA,CAAW,MAAM;MACvC,KAAK,CAAA24D,eAAL,GAAwB,IAAxB;MACA,KAAK,CAAA0B,UAAL,CAAiBjjE,KAAjB,EAAwBC,MAAxB;IAFuC,CAAjB,EAGrBqjE,YAHqB,CAAxB;EAnB4B;EAyB9B,CAAAC,YAAavjE,KAAb,EAAoBC,MAApB,EAA4B;IAC1B,MAAM;MAAED,KAAA,EAAOwjE,WAAT;MAAsBvjE,MAAA,EAAQwjE;IAA9B,IAA+C,KAAK,CAAAriD,MAA1D;IAEA,IAAIk6B,QAAA,GAAWkoB,WAAf;IACA,IAAIjoB,SAAA,GAAYkoB,YAAhB;IACA,IAAIriD,MAAA,GAAS,KAAK,CAAAA,MAAlB;IACA,OAAOk6B,QAAA,GAAW,IAAIt7C,KAAf,IAAwBu7C,SAAA,GAAY,IAAIt7C,MAA/C,EAAuD;MACrD,MAAMyjE,SAAA,GAAYpoB,QAAlB;MACA,MAAMqoB,UAAA,GAAapoB,SAAnB;MAEA,IAAID,QAAA,GAAW,IAAIt7C,KAAnB,EAA0B;QAIxBs7C,QAAA,GACEA,QAAA,IAAY,KAAZ,GACIj/C,IAAA,CAAKC,KAAL,CAAWg/C,QAAA,GAAW,CAAtB,IAA2B,CAD/B,GAEIj/C,IAAA,CAAKmlC,IAAL,CAAU8Z,QAAA,GAAW,CAArB,CAHN;MAJwB;MAS1B,IAAIC,SAAA,GAAY,IAAIt7C,MAApB,EAA4B;QAC1Bs7C,SAAA,GACEA,SAAA,IAAa,KAAb,GACIl/C,IAAA,CAAKC,KAAL,CAAWi/C,SAAA,GAAY,CAAvB,IAA4B,CADhC,GAEIl/C,IAAA,CAAKmlC,IAAL,CAAU+Z,SAAA,GAAY,CAAtB,CAHN;MAD0B;MAO5B,MAAMqoB,SAAA,GAAY,IAAIC,eAAJ,CAAoBvoB,QAApB,EAA8BC,SAA9B,CAAlB;MACA,MAAM5b,GAAA,GAAMikC,SAAA,CAAUplC,UAAV,CAAqB,IAArB,CAAZ;MACAmB,GAAA,CAAI8P,SAAJ,CACEruB,MADF,EAEE,CAFF,EAGE,CAHF,EAIEsiD,SAJF,EAKEC,UALF,EAME,CANF,EAOE,CAPF,EAQEroB,QARF,EASEC,SATF;MAWAn6B,MAAA,GAASwiD,SAAA,CAAUE,qBAAV,EAAT;IAjCqD;IAoCvD,OAAO1iD,MAAP;EA1C0B;EA6C5B,CAAA6hD,WAAYjjE,KAAZ,EAAmBC,MAAnB,EAA2B;IACzBD,KAAA,GAAQ3D,IAAA,CAAKmlC,IAAL,CAAUxhC,KAAV,CAAR;IACAC,MAAA,GAAS5D,IAAA,CAAKmlC,IAAL,CAAUvhC,MAAV,CAAT;IACA,MAAMmf,MAAA,GAAS,KAAK,CAAAA,MAApB;IACA,IAAI,CAACA,MAAD,IAAYA,MAAA,CAAOpf,KAAP,KAAiBA,KAAjB,IAA0Bof,MAAA,CAAOnf,MAAP,KAAkBA,MAA5D,EAAqE;MACnE;IADmE;IAGrEmf,MAAA,CAAOpf,KAAP,GAAeA,KAAf;IACAof,MAAA,CAAOnf,MAAP,GAAgBA,MAAhB;IACA,MAAMmhB,MAAA,GAAS,KAAK,CAAAogD,KAAL,GACX,KAAK,CAAApgD,MADM,GAEX,KAAK,CAAAmiD,WAAL,CAAkBvjE,KAAlB,EAAyBC,MAAzB,CAFJ;IAGA,MAAM0/B,GAAA,GAAMvgB,MAAA,CAAOof,UAAP,CAAkB,IAAlB,CAAZ;IACAmB,GAAA,CAAIhnB,MAAJ,GAAa,KAAK28C,UAAL,CAAgB3L,SAA7B;IACAhqB,GAAA,CAAI8P,SAAJ,CACEruB,MADF,EAEE,CAFF,EAGE,CAHF,EAIEA,MAAA,CAAOphB,KAJT,EAKEohB,MAAA,CAAOnhB,MALT,EAME,CANF,EAOE,CAPF,EAQED,KARF,EASEC,MATF;EAdyB;EA4B3B8jE,mBAAA,EAAqB;IACnB,OAAO,KAAK,CAAA3kD,MAAZ;EADmB;EAIrB,CAAA4kD,gBAAiBC,KAAjB,EAAwB;IACtB,IAAIA,KAAJ,EAAW;MACT,IAAI,KAAK,CAAAzC,KAAT,EAAiB;QACf,MAAMrzD,GAAA,GAAM,KAAKmnD,UAAL,CAAgBiN,YAAhB,CAA6B2B,SAA7B,CAAuC,KAAK,CAAAhD,QAA5C,CAAZ;QACA,IAAI/yD,GAAJ,EAAS;UACP,OAAOA,GAAP;QADO;MAFM;MAQjB,MAAMiR,MAAA,GAASla,QAAA,CAASC,aAAT,CAAuB,QAAvB,CAAf;MACA,CAAC;QAAEnF,KAAA,EAAOof,MAAA,CAAOpf,KAAhB;QAAuBC,MAAA,EAAQmf,MAAA,CAAOnf;MAAtC,IAAiD,KAAK,CAAAmhB,MAAvD;MACA,MAAMue,GAAA,GAAMvgB,MAAA,CAAOof,UAAP,CAAkB,IAAlB,CAAZ;MACAmB,GAAA,CAAI8P,SAAJ,CAAc,KAAK,CAAAruB,MAAnB,EAA4B,CAA5B,EAA+B,CAA/B;MAEA,OAAOhC,MAAA,CAAO+kD,SAAP,EAAP;IAdS;IAiBX,IAAI,KAAK,CAAA3C,KAAT,EAAiB;MACf,MAAM,CAAC37D,SAAD,EAAYC,UAAZ,IAA0B,KAAK0yD,cAArC;MAGA,MAAMx4D,KAAA,GAAQ3D,IAAA,CAAKsX,KAAL,CACZ,KAAK3T,KAAL,GAAa6F,SAAb,GAAyBolC,2BAAA,CAAcuM,gBAD3B,CAAd;MAGA,MAAMv3C,MAAA,GAAS5D,IAAA,CAAKsX,KAAL,CACb,KAAK1T,MAAL,GAAc6F,UAAd,GAA2BmlC,2BAAA,CAAcuM,gBAD5B,CAAf;MAGA,MAAMosB,SAAA,GAAY,IAAIC,eAAJ,CAAoB7jE,KAApB,EAA2BC,MAA3B,CAAlB;MACA,MAAM0/B,GAAA,GAAMikC,SAAA,CAAUplC,UAAV,CAAqB,IAArB,CAAZ;MACAmB,GAAA,CAAI8P,SAAJ,CACE,KAAK,CAAAruB,MADP,EAEE,CAFF,EAGE,CAHF,EAIE,KAAK,CAAAA,MAAL,CAAaphB,KAJf,EAKE,KAAK,CAAAohB,MAAL,CAAanhB,MALf,EAME,CANF,EAOE,CAPF,EAQED,KARF,EASEC,MATF;MAWA,OAAO2jE,SAAA,CAAUE,qBAAV,EAAP;IAvBe;IA0BjB,OAAOviD,eAAA,CAAgB,KAAK,CAAAH,MAArB,CAAP;EA5CsB;EAkDxB,CAAAi7C,eAAA,EAAkB;IAChB,KAAK,CAAAzB,QAAL,GAAiB,IAAIkE,cAAJ,CAAmBx0D,OAAA,IAAW;MAC7C,MAAMvK,IAAA,GAAOuK,OAAA,CAAQ,CAAR,EAAWy0D,WAAxB;MACA,IAAIh/D,IAAA,CAAKC,KAAL,IAAcD,IAAA,CAAKE,MAAvB,EAA+B;QAC7B,KAAK,CAAA28D,aAAL,CAAoB78D,IAAA,CAAKC,KAAzB,EAAgCD,IAAA,CAAKE,MAArC;MAD6B;IAFc,CAA9B,CAAjB;IAMA,KAAK,CAAA26D,QAAL,CAAeoE,OAAf,CAAuB,KAAKhzD,GAA5B;EAPgB;EAWlB,OAAO+sD,WAAPA,CAAmBz4D,IAAnB,EAAyBgE,MAAzB,EAAiC00D,SAAjC,EAA4C;IAC1C,IAAI14D,IAAA,YAAgB4C,uCAApB,EAA4C;MAC1C,OAAO,IAAP;IAD0C;IAG5C,MAAMg2D,MAAA,GAAS,MAAMH,WAAN,CAAkBz4D,IAAlB,EAAwBgE,MAAxB,EAAgC00D,SAAhC,CAAf;IACA,MAAM;MAAEj5D,IAAF;MAAQqhE,SAAR;MAAmBF,QAAnB;MAA6BM,KAA7B;MAAoC4C;IAApC,IAA0D9jE,IAAhE;IACA,IAAI4gE,QAAA,IAAYlI,SAAA,CAAUuJ,YAAV,CAAuB8B,SAAvB,CAAiCnD,QAAjC,CAAhB,EAA4D;MAC1DhI,MAAA,CAAO,CAAAgI,QAAP,GAAmBA,QAAnB;IAD0D,CAA5D,MAEO;MACLhI,MAAA,CAAO,CAAAkI,SAAP,GAAoBA,SAApB;IADK;IAGPlI,MAAA,CAAO,CAAAsI,KAAP,GAAgBA,KAAhB;IAEA,MAAM,CAACrlD,WAAD,EAAc66C,YAAd,IAA8BkC,MAAA,CAAOV,cAA3C;IACAU,MAAA,CAAOl5D,KAAP,GAAgB,CAAAD,IAAA,CAAK,CAAL,IAAUA,IAAA,CAAK,CAAL,CAAV,IAAqBoc,WAArC;IACA+8C,MAAA,CAAOj5D,MAAP,GAAiB,CAAAF,IAAA,CAAK,CAAL,IAAUA,IAAA,CAAK,CAAL,CAAV,IAAqBi3D,YAAtC;IAEA,IAAIoN,iBAAJ,EAAuB;MACrBlL,MAAA,CAAOoL,WAAP,GAAqBF,iBAArB;IADqB;IAIvB,OAAOlL,MAAP;EArB0C;EAyB5C/3C,UAAUg4C,YAAA,GAAe,KAAzB,EAAgCn4C,OAAA,GAAU,IAA1C,EAAgD;IAC9C,IAAI,KAAKynC,OAAL,EAAJ,EAAoB;MAClB,OAAO,IAAP;IADkB;IAIpB,MAAMvnC,UAAA,GAAa;MACjB3gB,cAAA,EAAgB5B,yBAAA,CAAqBsE,KADpB;MAEjBi+D,QAAA,EAAU,KAAK,CAAAA,QAFE;MAGjBxyC,SAAA,EAAW,KAAKA,SAHC;MAIjB3uB,IAAA,EAAM,KAAKs5D,OAAL,CAAa,CAAb,EAAgB,CAAhB,CAJW;MAKjBnzD,QAAA,EAAU,KAAKA,QALE;MAMjBs7D,KAAA,EAAO,KAAK,CAAAA,KANK;MAOjBhI,kBAAA,EAAoB,KAAKC;IAPR,CAAnB;IAUA,IAAIN,YAAJ,EAAkB;MAIhBj4C,UAAA,CAAWkgD,SAAX,GAAuB,KAAK,CAAA4C,eAAL,CAAoC,IAApC,CAAvB;MACA9iD,UAAA,CAAWkjD,iBAAX,GAA+B,KAAKE,WAApC;MACA,OAAOpjD,UAAP;IANgB;IASlB,MAAM;MAAEqjD,UAAF;MAAcC;IAAd,IAA0B,KAAKF,WAArC;IACA,IAAI,CAACC,UAAD,IAAeC,OAAnB,EAA4B;MAC1BtjD,UAAA,CAAWkjD,iBAAX,GAA+B;QAAEvzD,IAAA,EAAM,QAAR;QAAkB4zD,GAAA,EAAKD;MAAvB,CAA/B;IAD0B;IAI5B,IAAIxjD,OAAA,KAAY,IAAhB,EAAsB;MACpB,OAAOE,UAAP;IADoB;IAItBF,OAAA,CAAQ0jD,MAAR,KAAmB,IAAI50D,GAAJ,EAAnB;IACA,MAAM60D,IAAA,GAAO,KAAK,CAAAnD,KAAL,GACR,CAAAtgD,UAAA,CAAWnhB,IAAX,CAAgB,CAAhB,IAAqBmhB,UAAA,CAAWnhB,IAAX,CAAgB,CAAhB,CAArB,KACAmhB,UAAA,CAAWnhB,IAAX,CAAgB,CAAhB,IAAqBmhB,UAAA,CAAWnhB,IAAX,CAAgB,CAAhB,CAArB,CAFQ,GAGT,IAHJ;IAIA,IAAI,CAACihB,OAAA,CAAQ0jD,MAAR,CAAeh4D,GAAf,CAAmB,KAAK,CAAAw0D,QAAxB,CAAL,EAAyC;MAGvClgD,OAAA,CAAQ0jD,MAAR,CAAe1lD,GAAf,CAAmB,KAAK,CAAAkiD,QAAxB,EAAmC;QAAEyD,IAAF;QAAQzjD;MAAR,CAAnC;MACAA,UAAA,CAAWE,MAAX,GAAoB,KAAK,CAAA4iD,eAAL,CAAoC,KAApC,CAApB;IAJuC,CAAzC,MAKO,IAAI,KAAK,CAAAxC,KAAT,EAAiB;MAGtB,MAAMoD,QAAA,GAAW5jD,OAAA,CAAQ0jD,MAAR,CAAe30D,GAAf,CAAmB,KAAK,CAAAmxD,QAAxB,CAAjB;MACA,IAAIyD,IAAA,GAAOC,QAAA,CAASD,IAApB,EAA0B;QACxBC,QAAA,CAASD,IAAT,GAAgBA,IAAhB;QACAC,QAAA,CAAS1jD,UAAT,CAAoBE,MAApB,CAA2BkY,KAA3B;QACAsrC,QAAA,CAAS1jD,UAAT,CAAoBE,MAApB,GAA6B,KAAK,CAAA4iD,eAAL,CAAoC,KAApC,CAA7B;MAHwB;IAJJ;IAUxB,OAAO9iD,UAAP;EArD8C;AApgBP;;;ACC3C;AACA;AACA;AACA;AACA;AACA;AAuBA,MAAM2jD,qBAAN,CAA4B;EAC1B,CAAA1mD,oBAAA;EAEA,CAAA2mD,UAAA,GAAc,KAAd;EAEA,CAAAC,eAAA,GAAmB,IAAnB;EAEA,CAAAC,cAAA,GAAkB,KAAKC,SAAL,CAAe/qD,IAAf,CAAoB,IAApB,CAAlB;EAEA,CAAAgrD,gBAAA,GAAoB,KAAKC,WAAL,CAAiBjrD,IAAjB,CAAsB,IAAtB,CAApB;EAEA,CAAAkrD,oBAAA,GAAwB,IAAxB;EAEA,CAAAC,OAAA,GAAW,IAAIv1D,GAAJ,EAAX;EAEA,CAAAw1D,cAAA,GAAkB,KAAlB;EAEA,CAAAC,YAAA,GAAgB,KAAhB;EAEA,CAAAC,WAAA,GAAe,KAAf;EAEA,CAAAxM,SAAA;EAEA,OAAOyM,YAAP,GAAsB,KAAtB;EAEA,OAAO,CAAAC,WAAP,GAAsB,IAAI51D,GAAJ,CACpB,CAACmiD,cAAD,EAAiB4H,SAAjB,EAA4BoH,WAA5B,EAAyCnjE,GAAzC,CAA6C+S,IAAA,IAAQ,CACnDA,IAAA,CAAK8iD,WAD8C,EAEnD9iD,IAFmD,CAArD,CADoB,CAAtB;EAUAtN,YAAY;IACVy1D,SADU;IAEVtqC,SAFU;IAGV1iB,GAHU;IAIVmS,oBAJU;IAKV4mD,eALU;IAMV9/D,QANU;IAOV6uD;EAPU,CAAZ,EAQG;IACD,MAAM4R,WAAA,GAAc,CAAC,GAAGb,qBAAA,CAAsB,CAAAa,WAAtB,CAAmCj1D,MAAnC,EAAJ,CAApB;IACA,IAAI,CAACo0D,qBAAA,CAAsBY,YAA3B,EAAyC;MACvCZ,qBAAA,CAAsBY,YAAtB,GAAqC,IAArC;MACA,WAAWrC,UAAX,IAAyBsC,WAAzB,EAAsC;QACpCtC,UAAA,CAAWvP,UAAX,CAAsBC,IAAtB;MADoC;IAFC;IAMzCkF,SAAA,CAAU2M,mBAAV,CAA8BD,WAA9B;IAEA,KAAK,CAAA1M,SAAL,GAAkBA,SAAlB;IACA,KAAKtqC,SAAL,GAAiBA,SAAjB;IACA,KAAK1iB,GAAL,GAAWA,GAAX;IACA,KAAK,CAAAmS,oBAAL,GAA6BA,oBAA7B;IACA,KAAK,CAAA4mD,eAAL,GAAwBA,eAAxB;IACA,KAAK9/D,QAAL,GAAgBA,QAAhB;IAEA,KAAK,CAAA+zD,SAAL,CAAgB4M,QAAhB,CAAyB,IAAzB;EAjBC;EAoBH,IAAInd,OAAJA,CAAA,EAAc;IACZ,OAAO,KAAK,CAAA4c,OAAL,CAAcztD,IAAd,KAAuB,CAA9B;EADY;EAQdk+C,cAAcroD,IAAd,EAAoB;IAClB,KAAK,CAAAurD,SAAL,CAAgBlD,aAAhB,CAA8BroD,IAA9B;EADkB;EAQpBo4D,WAAWp4D,IAAA,GAAO,KAAK,CAAAurD,SAAL,CAAgB8M,OAAhB,EAAlB,EAA6C;IAC3C,KAAK,CAAA93C,OAAL;IACA,IAAIvgB,IAAA,KAAS9O,yBAAA,CAAqB0D,GAAlC,EAAuC;MAErC,KAAKo8D,oBAAL,CAA0B,KAA1B;MACA,KAAKsH,YAAL;IAHqC,CAAvC,MAIO;MACL,KAAKC,WAAL;IADK;IAIP,IAAIv4D,IAAA,KAAS9O,yBAAA,CAAqBmgC,IAAlC,EAAwC;MACtC,MAAM;QAAEn5B;MAAF,IAAgB,KAAKqG,GAA3B;MACA,WAAWo3D,UAAX,IAAyByB,qBAAA,CAAsB,CAAAa,WAAtB,CAAmCj1D,MAAnC,EAAzB,EAAsE;QACpE9K,SAAA,CAAU2U,MAAV,CACE,GAAG8oD,UAAA,CAAWziD,KAAM,SADtB,EAEElT,IAAA,KAAS21D,UAAA,CAAWzP,WAFtB;MADoE;MAMtE,KAAK3nD,GAAL,CAAS1D,MAAT,GAAkB,KAAlB;IARsC;EAVG;EAsB7Cm2D,qBAAqBwH,YAArB,EAAmC;IACjC,IACE,CAACA,YAAD,IACA,KAAK,CAAAjN,SAAL,CAAgB8M,OAAhB,OAA8BnnE,yBAAA,CAAqB0D,GAFrD,EAGE;MACA;IADA;IAIF,IAAI,CAAC4jE,YAAL,EAAmB;MAGjB,WAAW/M,MAAX,IAAqB,KAAK,CAAAmM,OAAL,CAAc50D,MAAd,EAArB,EAA6C;QAC3C,IAAIyoD,MAAA,CAAOzQ,OAAP,EAAJ,EAAsB;UACpByQ,MAAA,CAAO2F,eAAP;UACA;QAFoB;MADqB;IAH5B;IAWnB,MAAM3F,MAAA,GAAS,KAAK,CAAAgN,qBAAL,CACb;MAAEz2C,OAAA,EAAS,CAAX;MAAcC,OAAA,EAAS;IAAvB,CADa,EAEM,KAFN,CAAf;IAIAwpC,MAAA,CAAO2F,eAAP;EAvBiC;EA8BnChJ,gBAAgBM,SAAhB,EAA2B;IACzB,KAAK,CAAA6C,SAAL,CAAgBnD,eAAhB,CAAgCM,SAAhC;EADyB;EAQ3BpB,YAAYr2C,MAAZ,EAAoB;IAClB,KAAK,CAAAs6C,SAAL,CAAgBjE,WAAhB,CAA4Br2C,MAA5B;EADkB;EAIpBynD,oBAAoBprC,OAAA,GAAU,KAA9B,EAAqC;IACnC,KAAK/uB,GAAL,CAASrG,SAAT,CAAmB2U,MAAnB,CAA0B,UAA1B,EAAsC,CAACygB,OAAvC;EADmC;EAQrCqrC,OAAA,EAAS;IACP,KAAKD,mBAAL,CAAyB,IAAzB;IACA,MAAME,oBAAA,GAAuB,IAAI91D,GAAJ,EAA7B;IACA,WAAW2oD,MAAX,IAAqB,KAAK,CAAAmM,OAAL,CAAc50D,MAAd,EAArB,EAA6C;MAC3CyoD,MAAA,CAAOhB,aAAP;MACA,IAAIgB,MAAA,CAAOZ,mBAAX,EAAgC;QAC9B+N,oBAAA,CAAqBzgE,GAArB,CAAyBszD,MAAA,CAAOZ,mBAAhC;MAD8B;IAFW;IAO7C,IAAI,CAAC,KAAK,CAAAyM,eAAV,EAA4B;MAC1B;IAD0B;IAI5B,MAAMuB,SAAA,GAAY,KAAK,CAAAvB,eAAL,CAAsBzlD,sBAAtB,EAAlB;IACA,WAAW3F,QAAX,IAAuB2sD,SAAvB,EAAkC;MAEhC3sD,QAAA,CAAS5M,IAAT;MACA,IAAI,KAAK,CAAAisD,SAAL,CAAgBuN,0BAAhB,CAA2C5sD,QAAA,CAASrZ,IAAT,CAAc+E,EAAzD,CAAJ,EAAkE;QAChE;MADgE;MAGlE,IAAIghE,oBAAA,CAAqB35D,GAArB,CAAyBiN,QAAA,CAASrZ,IAAT,CAAc+E,EAAvC,CAAJ,EAAgD;QAC9C;MAD8C;MAGhD,MAAM6zD,MAAA,GAAS,KAAKH,WAAL,CAAiBp/C,QAAjB,CAAf;MACA,IAAI,CAACu/C,MAAL,EAAa;QACX;MADW;MAGb,KAAKsN,YAAL,CAAkBtN,MAAlB;MACAA,MAAA,CAAOhB,aAAP;IAdgC;EAf3B;EAoCTuO,QAAA,EAAU;IACR,KAAK,CAAAjB,WAAL,GAAoB,IAApB;IACA,KAAKW,mBAAL,CAAyB,KAAzB;IACA,MAAMO,mBAAA,GAAsB,IAAIn2D,GAAJ,EAA5B;IACA,WAAW2oD,MAAX,IAAqB,KAAK,CAAAmM,OAAL,CAAc50D,MAAd,EAArB,EAA6C;MAC3CyoD,MAAA,CAAOjB,cAAP;MACA,IAAI,CAACiB,MAAA,CAAOZ,mBAAR,IAA+BY,MAAA,CAAO/3C,SAAP,OAAuB,IAA1D,EAAgE;QAC9DulD,mBAAA,CAAoB9gE,GAApB,CAAwBszD,MAAA,CAAOZ,mBAA/B;QACA;MAF8D;MAIhE,KAAK94C,qBAAL,CAA2B05C,MAAA,CAAOZ,mBAAlC,GAAwDzrD,IAAxD;MACAqsD,MAAA,CAAO5gD,MAAP;IAP2C;IAU7C,IAAI,KAAK,CAAAysD,eAAT,EAA2B;MAEzB,MAAMuB,SAAA,GAAY,KAAK,CAAAvB,eAAL,CAAsBzlD,sBAAtB,EAAlB;MACA,WAAW3F,QAAX,IAAuB2sD,SAAvB,EAAkC;QAChC,MAAM;UAAEjhE;QAAF,IAASsU,QAAA,CAASrZ,IAAxB;QACA,IACEomE,mBAAA,CAAoBh6D,GAApB,CAAwBrH,EAAxB,KACA,KAAK,CAAA2zD,SAAL,CAAgBuN,0BAAhB,CAA2ClhE,EAA3C,CAFF,EAGE;UACA;QADA;QAGFsU,QAAA,CAAS9M,IAAT;MARgC;IAHT;IAe3B,KAAK,CAAAmhB,OAAL;IACA,IAAI,KAAKy6B,OAAT,EAAkB;MAChB,KAAKz8C,GAAL,CAAS1D,MAAT,GAAkB,IAAlB;IADgB;IAGlB,MAAM;MAAE3C;IAAF,IAAgB,KAAKqG,GAA3B;IACA,WAAWo3D,UAAX,IAAyByB,qBAAA,CAAsB,CAAAa,WAAtB,CAAmCj1D,MAAnC,EAAzB,EAAsE;MACpE9K,SAAA,CAAU2S,MAAV,CAAiB,GAAG8qD,UAAA,CAAWziD,KAAM,SAArC;IADoE;IAItE,KAAK,CAAA6kD,WAAL,GAAoB,KAApB;EAtCQ;EAyCVhmD,sBAAsBna,EAAtB,EAA0B;IACxB,OAAO,KAAK,CAAA0/D,eAAL,EAAuBvlD,qBAAvB,CAA6Cna,EAA7C,KAAoD,IAA3D;EADwB;EAQ1BshE,gBAAgBzN,MAAhB,EAAwB;IACtB,MAAM0N,aAAA,GAAgB,KAAK,CAAA5N,SAAL,CAAgB6N,SAAhB,EAAtB;IACA,IAAID,aAAA,KAAkB1N,MAAtB,EAA8B;MAC5B;IAD4B;IAI9B,KAAK,CAAAF,SAAL,CAAgB2N,eAAhB,CAAgCzN,MAAhC;EANsB;EASxB8M,YAAA,EAAc;IACZ,KAAKh6D,GAAL,CAAS2B,gBAAT,CAA0B,aAA1B,EAAyC,KAAK,CAAAu3D,gBAA9C;IACA,KAAKl5D,GAAL,CAAS2B,gBAAT,CAA0B,WAA1B,EAAuC,KAAK,CAAAq3D,cAA5C;EAFY;EAKde,aAAA,EAAe;IACb,KAAK/5D,GAAL,CAASuM,mBAAT,CAA6B,aAA7B,EAA4C,KAAK,CAAA2sD,gBAAjD;IACA,KAAKl5D,GAAL,CAASuM,mBAAT,CAA6B,WAA7B,EAA0C,KAAK,CAAAysD,cAA/C;EAFa;EAKf8B,OAAO5N,MAAP,EAAe;IACb,KAAK,CAAAmM,OAAL,CAAcrmD,GAAd,CAAkBk6C,MAAA,CAAO7zD,EAAzB,EAA6B6zD,MAA7B;IACA,MAAM;MAAEZ;IAAF,IAA0BY,MAAhC;IACA,IACEZ,mBAAA,IACA,KAAK,CAAAU,SAAL,CAAgBuN,0BAAhB,CAA2CjO,mBAA3C,CAFF,EAGE;MACA,KAAK,CAAAU,SAAL,CAAgB+N,8BAAhB,CAA+C7N,MAA/C;IADA;EANW;EAWf8N,OAAO9N,MAAP,EAAe;IACb,KAAK,CAAAmM,OAAL,CAAchlD,MAAd,CAAqB64C,MAAA,CAAO7zD,EAA5B;IACA,KAAK,CAAA8Y,oBAAL,EAA4B8oD,wBAA5B,CAAqD/N,MAAA,CAAOJ,UAA5D;IAEA,IAAI,CAAC,KAAK,CAAA0M,WAAN,IAAsBtM,MAAA,CAAOZ,mBAAjC,EAAsD;MACpD,KAAK,CAAAU,SAAL,CAAgBkO,2BAAhB,CAA4ChO,MAA5C;IADoD;EAJzC;EAaf5gD,OAAO4gD,MAAP,EAAe;IAIb,KAAK8N,MAAL,CAAY9N,MAAZ;IACA,KAAK,CAAAF,SAAL,CAAgBmO,YAAhB,CAA6BjO,MAA7B;IACAA,MAAA,CAAOltD,GAAP,CAAWsM,MAAX;IACA4gD,MAAA,CAAOxD,eAAP,GAAyB,KAAzB;IAEA,IAAI,CAAC,KAAK,CAAA6P,YAAV,EAAyB;MACvB,KAAK9G,oBAAL,CAA+C,KAA/C;IADuB;EATZ;EAmBf2I,aAAalO,MAAb,EAAqB;IACnB,IAAIA,MAAA,CAAO50D,MAAP,KAAkB,IAAtB,EAA4B;MAC1B;IAD0B;IAI5B,IAAI40D,MAAA,CAAOZ,mBAAX,EAAgC;MAC9B,KAAK,CAAAU,SAAL,CAAgBkO,2BAAhB,CAA4ChO,MAAA,CAAOZ,mBAAnD;MACA54C,8BAAA,CAAiB2nD,uBAAjB,CAAyCnO,MAAzC;MACAA,MAAA,CAAOZ,mBAAP,GAA6B,IAA7B;IAH8B;IAMhC,KAAKwO,MAAL,CAAY5N,MAAZ;IACAA,MAAA,CAAO50D,MAAP,EAAe0iE,MAAf,CAAsB9N,MAAtB;IACAA,MAAA,CAAOsD,SAAP,CAAiB,IAAjB;IACA,IAAItD,MAAA,CAAOltD,GAAP,IAAcktD,MAAA,CAAOxD,eAAzB,EAA0C;MACxCwD,MAAA,CAAOltD,GAAP,CAAWsM,MAAX;MACA,KAAKtM,GAAL,CAASX,MAAT,CAAgB6tD,MAAA,CAAOltD,GAAvB;IAFwC;EAdvB;EAwBrBpG,IAAIszD,MAAJ,EAAY;IACV,KAAKkO,YAAL,CAAkBlO,MAAlB;IACA,KAAK,CAAAF,SAAL,CAAgBsO,SAAhB,CAA0BpO,MAA1B;IACA,KAAK4N,MAAL,CAAY5N,MAAZ;IAEA,IAAI,CAACA,MAAA,CAAOxD,eAAZ,EAA6B;MAC3B,MAAM1pD,GAAA,GAAMktD,MAAA,CAAOjtD,MAAP,EAAZ;MACA,KAAKD,GAAL,CAASX,MAAT,CAAgBW,GAAhB;MACAktD,MAAA,CAAOxD,eAAP,GAAyB,IAAzB;IAH2B;IAO7BwD,MAAA,CAAO5B,iBAAP;IACA4B,MAAA,CAAO5C,SAAP;IACA,KAAK,CAAA0C,SAAL,CAAgB4F,sBAAhB,CAAuC1F,MAAvC;EAdU;EAiBZqO,gBAAgBrO,MAAhB,EAAwB;IACtB,IAAI,CAACA,MAAA,CAAOxD,eAAZ,EAA6B;MAC3B;IAD2B;IAI7B,MAAM;MAAE5/C;IAAF,IAAoB5Q,QAA1B;IACA,IAAIg0D,MAAA,CAAOltD,GAAP,CAAWw7D,QAAX,CAAoB1xD,aAApB,KAAsC,CAAC,KAAK,CAAAsvD,oBAAhD,EAAuE;MAKrElM,MAAA,CAAO7C,mBAAP,GAA6B,KAA7B;MACA,KAAK,CAAA+O,oBAAL,GAA6Bx8D,UAAA,CAAW,MAAM;QAC5C,KAAK,CAAAw8D,oBAAL,GAA6B,IAA7B;QACA,IAAI,CAAClM,MAAA,CAAOltD,GAAP,CAAWw7D,QAAX,CAAoBtiE,QAAA,CAAS4Q,aAA7B,CAAL,EAAkD;UAChDojD,MAAA,CAAOltD,GAAP,CAAW2B,gBAAX,CACE,SADF,EAEE,MAAM;YACJurD,MAAA,CAAO7C,mBAAP,GAA6B,IAA7B;UADI,CAFR,EAKE;YAAEoR,IAAA,EAAM;UAAR,CALF;UAOA3xD,aAAA,CAAcnN,KAAd;QARgD,CAAlD,MASO;UACLuwD,MAAA,CAAO7C,mBAAP,GAA6B,IAA7B;QADK;MAXqC,CAAjB,EAc1B,CAd0B,CAA7B;IANqE;IAuBvE6C,MAAA,CAAOO,mBAAP,GAA6B,KAAK,CAAAt7C,oBAAL,EAA4BM,gBAA5B,CAC3B,KAAKzS,GADsB,EAE3BktD,MAAA,CAAOltD,GAFoB,EAG3BktD,MAAA,CAAOJ,UAHoB,EAIP,IAJO,CAA7B;EA7BsB;EAyCxB0N,aAAatN,MAAb,EAAqB;IACnB,IAAIA,MAAA,CAAOwO,gBAAP,EAAJ,EAA+B;MAC7BxO,MAAA,CAAO50D,MAAP,KAAkB,IAAlB;MACA40D,MAAA,CAAOzD,OAAP;IAF6B,CAA/B,MAGO;MACL,KAAK7vD,GAAL,CAASszD,MAAT;IADK;EAJY;EAarBgK,kBAAkBhK,MAAlB,EAA0B;IACxB,MAAMlE,GAAA,GAAMA,CAAA,KAAMkE,MAAA,CAAO5D,UAAP,CAAkBG,OAAlB,CAA0ByD,MAA1B,CAAlB;IACA,MAAMjE,IAAA,GAAOA,CAAA,KAAM;MACjBiE,MAAA,CAAO5gD,MAAP;IADiB,CAAnB;IAIA,KAAKy8C,WAAL,CAAiB;MAAEC,GAAF;MAAOC,IAAP;MAAaC,QAAA,EAAU;IAAvB,CAAjB;EANwB;EAa1ByS,UAAA,EAAY;IACV,OAAO,KAAK,CAAA3O,SAAL,CAAgB4O,KAAhB,EAAP;EADU;EASZ,CAAAC,gBAAiBnpD,MAAjB,EAAyB;IACvB,MAAM0kD,UAAA,GAAayB,qBAAA,CAAsB,CAAAa,WAAtB,CAAmC31D,GAAnC,CACjB,KAAK,CAAAipD,SAAL,CAAgB8M,OAAhB,EADiB,CAAnB;IAGA,OAAO1C,UAAA,GAAa,IAAIA,UAAA,CAAW1qD,SAAX,CAAqBnV,WAAzB,CAAqCmb,MAArC,CAAb,GAA4D,IAAnE;EAJuB;EAYzBsjD,YAAYv0D,IAAZ,EAAkBiR,MAAlB,EAA0B;IACxB,KAAK,CAAAs6C,SAAL,CAAgBlD,aAAhB,CAA8BroD,IAA9B;IACA,KAAK,CAAAurD,SAAL,CAAgB6M,UAAhB,CAA2Bp4D,IAA3B;IAEA,MAAM;MAAEgiB,OAAF;MAAWC;IAAX,IAAuB,KAAK,CAAAo4C,cAAL,EAA7B;IACA,MAAMziE,EAAA,GAAK,KAAKsiE,SAAL,EAAX;IACA,MAAMzO,MAAA,GAAS,KAAK,CAAA2O,eAAL,CAAsB;MACnCvjE,MAAA,EAAQ,IAD2B;MAEnCe,EAFmC;MAGnCzI,CAAA,EAAG6yB,OAHgC;MAInCzyB,CAAA,EAAG0yB,OAJgC;MAKnCspC,SAAA,EAAW,KAAK,CAAAA,SALmB;MAMnCvC,UAAA,EAAY,IANuB;MAOnC,GAAG/3C;IAPgC,CAAtB,CAAf;IASA,IAAIw6C,MAAJ,EAAY;MACV,KAAKtzD,GAAL,CAASszD,MAAT;IADU;EAfY;EAyB1BH,YAAYz4D,IAAZ,EAAkB;IAChB,OACEukE,qBAAA,CAAsB,CAAAa,WAAtB,CACG31D,GADH,CACOzP,IAAA,CAAKC,cAAL,IAAuBD,IAAA,CAAKkN,oBADnC,GAEIurD,WAFJ,CAEgBz4D,IAFhB,EAEsB,IAFtB,EAE4B,KAAK,CAAA04D,SAFjC,KAEgD,IAHlD;EADgB;EAclB,CAAAkN,sBAAuBn+D,KAAvB,EAA8B0uD,UAA9B,EAA0C;IACxC,MAAMpxD,EAAA,GAAK,KAAKsiE,SAAL,EAAX;IACA,MAAMzO,MAAA,GAAS,KAAK,CAAA2O,eAAL,CAAsB;MACnCvjE,MAAA,EAAQ,IAD2B;MAEnCe,EAFmC;MAGnCzI,CAAA,EAAGmL,KAAA,CAAM0nB,OAH0B;MAInCzyB,CAAA,EAAG+K,KAAA,CAAM2nB,OAJ0B;MAKnCspC,SAAA,EAAW,KAAK,CAAAA,SALmB;MAMnCvC;IANmC,CAAtB,CAAf;IAQA,IAAIyC,MAAJ,EAAY;MACV,KAAKtzD,GAAL,CAASszD,MAAT;IADU;IAIZ,OAAOA,MAAP;EAdwC;EAiB1C,CAAA4O,eAAA,EAAkB;IAChB,MAAM;MAAElrE,CAAF;MAAKI,CAAL;MAAQgD,KAAR;MAAeC;IAAf,IAA0B,KAAK+L,GAAL,CAASkrD,qBAAT,EAAhC;IACA,MAAMloB,GAAA,GAAM3yC,IAAA,CAAKE,GAAL,CAAS,CAAT,EAAYK,CAAZ,CAAZ;IACA,MAAMsyC,GAAA,GAAM7yC,IAAA,CAAKE,GAAL,CAAS,CAAT,EAAYS,CAAZ,CAAZ;IACA,MAAMoyC,GAAA,GAAM/yC,IAAA,CAAKG,GAAL,CAASwtB,MAAA,CAAO+9C,UAAhB,EAA4BnrE,CAAA,GAAIoD,KAAhC,CAAZ;IACA,MAAMsvC,GAAA,GAAMjzC,IAAA,CAAKG,GAAL,CAASwtB,MAAA,CAAOg+C,WAAhB,EAA6BhrE,CAAA,GAAIiD,MAAjC,CAAZ;IACA,MAAM2tD,OAAA,GAAW,CAAA5e,GAAA,GAAMI,GAAN,IAAa,CAAd,GAAkBxyC,CAAlC;IACA,MAAMixD,OAAA,GAAW,CAAA3e,GAAA,GAAMI,GAAN,IAAa,CAAd,GAAkBtyC,CAAlC;IACA,MAAM,CAACyyB,OAAD,EAAUC,OAAV,IACJ,KAAKzqB,QAAL,CAAciB,QAAd,GAAyB,GAAzB,KAAiC,CAAjC,GACI,CAAC0nD,OAAD,EAAUC,OAAV,CADJ,GAEI,CAACA,OAAD,EAAUD,OAAV,CAHN;IAKA,OAAO;MAAEn+B,OAAF;MAAWC;IAAX,CAAP;EAbgB;EAmBlBu4C,aAAA,EAAe;IACb,KAAK,CAAA/B,qBAAL,CACE,KAAK,CAAA4B,cAAL,EADF,EAEqB,IAFrB;EADa;EAWfI,YAAYhP,MAAZ,EAAoB;IAClB,KAAK,CAAAF,SAAL,CAAgBkP,WAAhB,CAA4BhP,MAA5B;EADkB;EAQpBiP,eAAejP,MAAf,EAAuB;IACrB,KAAK,CAAAF,SAAL,CAAgBmP,cAAhB,CAA+BjP,MAA/B;EADqB;EAQvBkP,WAAWlP,MAAX,EAAmB;IACjB,OAAO,KAAK,CAAAF,SAAL,CAAgBoP,UAAhB,CAA2BlP,MAA3B,CAAP;EADiB;EAQnBmP,SAASnP,MAAT,EAAiB;IACf,KAAK,CAAAF,SAAL,CAAgBqP,QAAhB,CAAyBnP,MAAzB;EADe;EAQjB+L,UAAUl9D,KAAV,EAAiB;IACf,MAAM;MAAE+J;IAAF,IAAYhT,gBAAA,CAAY+S,QAA9B;IACA,IAAI9J,KAAA,CAAM42D,MAAN,KAAiB,CAAjB,IAAuB52D,KAAA,CAAMiK,OAAN,IAAiBF,KAA5C,EAAoD;MAElD;IAFkD;IAKpD,IAAI/J,KAAA,CAAMI,MAAN,KAAiB,KAAK6D,GAA1B,EAA+B;MAC7B;IAD6B;IAI/B,IAAI,CAAC,KAAK,CAAAs5D,cAAV,EAA2B;MAKzB;IALyB;IAO3B,KAAK,CAAAA,cAAL,GAAuB,KAAvB;IAEA,IAAI,CAAC,KAAK,CAAAR,UAAV,EAAuB;MACrB,KAAK,CAAAA,UAAL,GAAmB,IAAnB;MACA;IAFqB;IAKvB,IAAI,KAAK,CAAA9L,SAAL,CAAgB8M,OAAhB,OAA8BnnE,yBAAA,CAAqBsE,KAAvD,EAA8D;MAC5D,KAAK,CAAA+1D,SAAL,CAAgBsP,WAAhB;MACA;IAF4D;IAK9D,KAAK,CAAApC,qBAAL,CAA4Bn+D,KAA5B,EAAsD,KAAtD;EA9Be;EAqCjBo9D,YAAYp9D,KAAZ,EAAmB;IACjB,IAAI,KAAK,CAAAu9D,cAAT,EAA0B;MAMxB,KAAK,CAAAA,cAAL,GAAuB,KAAvB;MACA;IAPwB;IAS1B,MAAM;MAAExzD;IAAF,IAAYhT,gBAAA,CAAY+S,QAA9B;IACA,IAAI9J,KAAA,CAAM42D,MAAN,KAAiB,CAAjB,IAAuB52D,KAAA,CAAMiK,OAAN,IAAiBF,KAA5C,EAAoD;MAElD;IAFkD;IAKpD,IAAI/J,KAAA,CAAMI,MAAN,KAAiB,KAAK6D,GAA1B,EAA+B;MAC7B;IAD6B;IAI/B,KAAK,CAAAs5D,cAAL,GAAuB,IAAvB;IAEA,MAAMpM,MAAA,GAAS,KAAK,CAAAF,SAAL,CAAgB6N,SAAhB,EAAf;IACA,KAAK,CAAA/B,UAAL,GAAmB,CAAC5L,MAAD,IAAWA,MAAA,CAAOzQ,OAAP,EAA9B;EAvBiB;EAiCnB8f,cAAcrP,MAAd,EAAsBt8D,CAAtB,EAAyBI,CAAzB,EAA4B;IAC1B,MAAM2G,KAAA,GAAQ,KAAK,CAAAq1D,SAAL,CAAgBwP,UAAhB,CAA2B5rE,CAA3B,EAA8BI,CAA9B,CAAd;IACA,IAAI2G,KAAA,KAAU,IAAV,IAAkBA,KAAA,KAAU,IAAhC,EAAsC;MACpC,OAAO,KAAP;IADoC;IAGtCA,KAAA,CAAMyjE,YAAN,CAAmBlO,MAAnB;IACA,OAAO,IAAP;EAN0B;EAY5B1uC,QAAA,EAAU;IACR,IAAI,KAAK,CAAAwuC,SAAL,CAAgB6N,SAAhB,IAA6BviE,MAA7B,KAAwC,IAA5C,EAAkD;MAEhD,KAAK,CAAA00D,SAAL,CAAgBzF,cAAhB;MACA,KAAK,CAAAyF,SAAL,CAAgB2N,eAAhB,CAAgC,IAAhC;IAHgD;IAMlD,IAAI,KAAK,CAAAvB,oBAAT,EAAgC;MAC9Br0C,YAAA,CAAa,KAAK,CAAAq0C,oBAAlB;MACA,KAAK,CAAAA,oBAAL,GAA6B,IAA7B;IAF8B;IAKhC,WAAWlM,MAAX,IAAqB,KAAK,CAAAmM,OAAL,CAAc50D,MAAd,EAArB,EAA6C;MAC3C,KAAK,CAAA0N,oBAAL,EAA4B8oD,wBAA5B,CAAqD/N,MAAA,CAAOJ,UAA5D;MACAI,MAAA,CAAOsD,SAAP,CAAiB,IAAjB;MACAtD,MAAA,CAAOxD,eAAP,GAAyB,KAAzB;MACAwD,MAAA,CAAOltD,GAAP,CAAWsM,MAAX;IAJ2C;IAM7C,KAAKtM,GAAL,GAAW,IAAX;IACA,KAAK,CAAAq5D,OAAL,CAAcjsD,KAAd;IACA,KAAK,CAAA4/C,SAAL,CAAgByP,WAAhB,CAA4B,IAA5B;EApBQ;EAuBV,CAAAz6C,QAAA,EAAW;IAIT,KAAK,CAAAu3C,YAAL,GAAqB,IAArB;IACA,WAAWrM,MAAX,IAAqB,KAAK,CAAAmM,OAAL,CAAc50D,MAAd,EAArB,EAA6C;MAC3C,IAAIyoD,MAAA,CAAOzQ,OAAP,EAAJ,EAAsB;QACpByQ,MAAA,CAAO5gD,MAAP;MADoB;IADqB;IAK7C,KAAK,CAAAitD,YAAL,GAAqB,KAArB;EAVS;EAiBXt5D,OAAO;IAAEhH;EAAF,CAAP,EAAqB;IACnB,KAAKA,QAAL,GAAgBA,QAAhB;IACA1F,oCAAA,CAAmB,KAAKyM,GAAxB,EAA6B/G,QAA7B;IACA,WAAWi0D,MAAX,IAAqB,KAAK,CAAAF,SAAL,CAAgB0P,UAAhB,CAA2B,KAAKh6C,SAAhC,CAArB,EAAiE;MAC/D,KAAK9oB,GAAL,CAASszD,MAAT;IAD+D;IAGjE,KAAK2M,UAAL;EANmB;EAarB1mD,OAAO;IAAEla;EAAF,CAAP,EAAqB;IAInB,KAAK,CAAA+zD,SAAL,CAAgBzF,cAAhB;IAEA,KAAKtuD,QAAL,GAAgBA,QAAhB;IACA1F,oCAAA,CAAmB,KAAKyM,GAAxB,EAA6B;MAAE9F,QAAA,EAAUjB,QAAA,CAASiB;IAArB,CAA7B;IACA,KAAK2/D,UAAL;EARmB;EAerB,IAAIrN,cAAJA,CAAA,EAAqB;IACnB,MAAM;MAAE3yD,SAAF;MAAaC;IAAb,IAA4B,KAAKb,QAAL,CAAcgB,OAAhD;IACA,OAAO,CAACJ,SAAD,EAAYC,UAAZ,CAAP;EAFmB;AAvrBK;;;;;;;;;;;;;;AClC5B;AAMA;AACA;AAcA,MAAM4Z,gBAAN,CAAuB;EACrB,CAAAkpD,cAAA,GAAkB,IAAlB;EAEA,CAAApE,OAAA,GAAW,EAAX;EAEA,CAAAqE,iBAAA,GAAqB,KAArB;EAEA,CAAAC,aAAA,GAAiB,IAAjB;EAEA,CAAAC,cAAA,GAAkB,IAAlB;EAEA,CAAAC,qBAAA,GAAyB,IAAzB;EAEA,CAAAC,sBAAA,GAA0B,KAA1B;EAEA,CAAAC,eAAA,GAAmB,KAAnB;EAEA,CAAAC,WAAA,GAAe,IAAf;EAEA,CAAAC,eAAA,GAAmB,IAAnB;EAEA,CAAAC,YAAA,GAAgB,KAAKjT,OAAL,CAAal8C,IAAb,CAAkB,IAAlB,CAAhB;EAEA,CAAAovD,aAAA,GAAiB,KAAKC,QAAL,CAAcrvD,IAAd,CAAmB,IAAnB,CAAjB;EAEA,CAAAsvD,kBAAA,GAAsB,EAAtB;EAEA,CAAAC,cAAA,GAAkB,KAAlB;EAEA,CAAAtT,SAAA,GAAa,KAAb;EAEA,CAAAP,YAAA,GAAgB,KAAhB;EAEA,CAAA8T,2BAAA,GAA+B,KAA/B;EAEA,CAAAC,gBAAA,GAAoB,IAApB;EAEAnT,eAAA,GAAkB1sD,MAAA,CAAO3J,MAAP,CAAc,IAAd,CAAlB;EAEAm1D,UAAA,GAAa,IAAb;EAEAe,mBAAA,GAAsB,IAAtB;EAEAgC,YAAA,GAAe,IAAf;EAEA,CAAAuR,WAAA,GAAe,KAAf;EAEA,CAAApkE,MAAA,GAAUka,gBAAA,CAAiBmqD,OAAjB,EAAV;EAEA,OAAOC,gBAAP,GAA0B,CAAC,CAA3B;EAEA,OAAOxQ,aAAP,GAAuB,IAAIqP,mDAAJ,EAAvB;EAEA,OAAOkB,OAAP,GAAiB,CAAjB;EAIA,OAAOE,iBAAP,GAA2B,CAA3B;EAEA,WAAWC,uBAAXA,CAAA,EAAqC;IACnC,MAAMC,MAAA,GAASvqD,gBAAA,CAAiBhH,SAAjB,CAA2BwxD,mBAA1C;IACA,MAAM/W,KAAA,GAAQrB,gEAAA,CAA0BsB,eAAxC;IACA,MAAMC,GAAA,GAAMvB,gEAAA,CAA0BwB,aAAtC;IAEA,OAAOt0D,uDAAA,CACL,IADK,EAEL,yBAFK,EAGL,IAAIgzD,sDAAJ,CAAoB,CAClB,CAAC,CAAC,WAAD,EAAc,eAAd,CAAD,EAAiCiY,MAAjC,EAAyC;MAAElsB,IAAA,EAAM,CAAC,CAACoV,KAAF,EAAS,CAAT;IAAR,CAAzC,CADkB,EAElB,CACE,CAAC,gBAAD,EAAmB,qBAAnB,CADF,EAEE8W,MAFF,EAGE;MAAElsB,IAAA,EAAM,CAAC,CAACsV,GAAF,EAAO,CAAP;IAAR,CAHF,CAFkB,EAOlB,CAAC,CAAC,YAAD,EAAe,gBAAf,CAAD,EAAmC4W,MAAnC,EAA2C;MAAElsB,IAAA,EAAM,CAACoV,KAAD,EAAQ,CAAR;IAAR,CAA3C,CAPkB,EAQlB,CACE,CAAC,iBAAD,EAAoB,sBAApB,CADF,EAEE8W,MAFF,EAGE;MAAElsB,IAAA,EAAM,CAACsV,GAAD,EAAM,CAAN;IAAR,CAHF,CARkB,EAalB,CAAC,CAAC,SAAD,EAAY,aAAZ,CAAD,EAA6B4W,MAA7B,EAAqC;MAAElsB,IAAA,EAAM,CAAC,CAAD,EAAI,CAACoV,KAAL;IAAR,CAArC,CAbkB,EAclB,CAAC,CAAC,cAAD,EAAiB,mBAAjB,CAAD,EAAwC8W,MAAxC,EAAgD;MAAElsB,IAAA,EAAM,CAAC,CAAD,EAAI,CAACsV,GAAL;IAAR,CAAhD,CAdkB,EAelB,CAAC,CAAC,WAAD,EAAc,eAAd,CAAD,EAAiC4W,MAAjC,EAAyC;MAAElsB,IAAA,EAAM,CAAC,CAAD,EAAIoV,KAAJ;IAAR,CAAzC,CAfkB,EAgBlB,CAAC,CAAC,gBAAD,EAAmB,qBAAnB,CAAD,EAA4C8W,MAA5C,EAAoD;MAAElsB,IAAA,EAAM,CAAC,CAAD,EAAIsV,GAAJ;IAAR,CAApD,CAhBkB,EAiBlB,CACE,CAAC,QAAD,EAAW,YAAX,CADF,EAEE3zC,gBAAA,CAAiBhH,SAAjB,CAA2ByxD,yBAF7B,CAjBkB,CAApB,CAHK,CAAP;EALmC;EAoCrC5mE,YAAYnD,UAAZ,EAAwB;IACtB,IAAI,KAAKmD,WAAL,KAAqBmc,gBAAzB,EAA2C;MACzCzgB,4DAAA,CAAY,qCAAZ;IADyC;IAI3C,KAAKqF,MAAL,GAAclE,UAAA,CAAWkE,MAAzB;IACA,KAAKe,EAAL,GAAUjF,UAAA,CAAWiF,EAArB;IACA,KAAKrF,KAAL,GAAa,KAAKC,MAAL,GAAc,IAA3B;IACA,KAAKyuB,SAAL,GAAiBtuB,UAAA,CAAWkE,MAAX,CAAkBoqB,SAAnC;IACA,KAAK7kB,IAAL,GAAYzJ,UAAA,CAAWyJ,IAAvB;IACA,KAAKmC,GAAL,GAAW,IAAX;IACA,KAAKspD,UAAL,GAAkBl1D,UAAA,CAAW44D,SAA7B;IACA,KAAKV,mBAAL,GAA2B,IAA3B;IACA,KAAKoD,oBAAL,GAA4B,KAA5B;IACA,KAAKlF,eAAL,CAAqBC,UAArB,GAAkCr2D,UAAA,CAAWq2D,UAA7C;IACA,KAAKgD,mBAAL,GAA2B,IAA3B;IAEA,MAAM;MACJvzD,QADI;MAEJD,OAAA,EAAS;QAAEJ,SAAF;QAAaC,UAAb;QAAyBC,KAAzB;QAAgCC;MAAhC;IAFL,IAGF,KAAK1B,MAAL,CAAYW,QAHhB;IAKA,KAAKiB,QAAL,GAAgBA,QAAhB;IACA,KAAKkkE,YAAL,GACG,OAAMlkE,QAAN,GAAiB,KAAKovD,UAAL,CAAgB+U,cAAhB,CAA+BnkE,QAAhD,IAA4D,GAD/D;IAEA,KAAKsyD,cAAL,GAAsB,CAAC3yD,SAAD,EAAYC,UAAZ,CAAtB;IACA,KAAK2yD,eAAL,GAAuB,CAAC1yD,KAAD,EAAQC,KAAR,CAAvB;IAEA,MAAM,CAAChG,KAAD,EAAQC,MAAR,IAAkB,KAAKg3D,gBAA7B;IACA,KAAKr6D,CAAL,GAASwD,UAAA,CAAWxD,CAAX,GAAeoD,KAAxB;IACA,KAAKhD,CAAL,GAASoD,UAAA,CAAWpD,CAAX,GAAeiD,MAAxB;IAEA,KAAKy1D,eAAL,GAAuB,KAAvB;IACA,KAAKuD,OAAL,GAAe,KAAf;EAjCsB;EAoCxB,IAAImK,UAAJA,CAAA,EAAiB;IACf,OAAOt5D,MAAA,CAAOwgE,cAAP,CAAsB,IAAtB,EAA4B/mE,WAA5B,CAAwCod,KAA/C;EADe;EAIjB,WAAWizC,iBAAXA,CAAA,EAA+B;IAC7B,OAAO50D,uDAAA,CACL,IADK,EAEL,mBAFK,EAGL,KAAKs6D,aAAL,CAAmBiR,UAAnB,CAA8B,YAA9B,CAHK,CAAP;EAD6B;EAQ/B,OAAOlD,uBAAPA,CAA+BnO,MAA/B,EAAuC;IACrC,MAAMsR,UAAA,GAAa,IAAIC,UAAJ,CAAe;MAChCplE,EAAA,EAAI6zD,MAAA,CAAO50D,MAAP,CAAcqjE,SAAd,EAD4B;MAEhCrjE,MAAA,EAAQ40D,MAAA,CAAO50D,MAFiB;MAGhC00D,SAAA,EAAWE,MAAA,CAAO5D;IAHc,CAAf,CAAnB;IAKAkV,UAAA,CAAWlS,mBAAX,GAAiCY,MAAA,CAAOZ,mBAAxC;IACAkS,UAAA,CAAWvR,OAAX,GAAqB,IAArB;IACAuR,UAAA,CAAWlV,UAAX,CAAsBsJ,sBAAtB,CAA6C4L,UAA7C;EARqC;EAevC,OAAO3W,UAAPA,CAAkBC,IAAlB,EAAwB/lD,OAAA,GAAU,IAAlC,EAAwC;IACtC2R,gBAAA,CAAiB24C,YAAjB,KAAkC,IAAIvoD,GAAJ,CAChC,CACE,oCADF,EAEE,yCAFF,EAGE,0CAHF,EAIE,oCAJF,EAKE,sCALF,EAME,qCANF,EAOE,wCAPF,EAQE,wCARF,EASE,yCATF,EAUE,uCAVF,EAWE,uCAXF,EAYEhS,GAZF,CAYMgH,GAAA,IAAO,CACXA,GADW,EAEXgvD,IAAA,CAAK/jD,GAAL,CAASjL,GAAA,CAAImQ,UAAJ,CAAe,UAAf,EAA2BlY,CAAA,IAAM,IAAGA,CAAA,CAAEsU,WAAF,EAAJ,EAAhC,CAAT,CAFW,CAZb,CADgC,CAAlC;IAkBA,IAAItD,OAAA,EAASgmD,OAAb,EAAsB;MACpB,WAAWjvD,GAAX,IAAkBiJ,OAAA,CAAQgmD,OAA1B,EAAmC;QACjCr0C,gBAAA,CAAiB24C,YAAjB,CAA8Br5C,GAA9B,CAAkCla,GAAlC,EAAuCgvD,IAAA,CAAK/jD,GAAL,CAASjL,GAAT,CAAvC;MADiC;IADf;IAKtB,IAAI4a,gBAAA,CAAiBoqD,gBAAjB,KAAsC,CAAC,CAA3C,EAA8C;MAC5C;IAD4C;IAG9C,MAAMvkE,KAAA,GAAQmnD,gBAAA,CAAiBxnD,QAAA,CAAS8uD,eAA1B,CAAd;IACAt0C,gBAAA,CAAiBoqD,gBAAjB,GACE7V,UAAA,CAAW1uD,KAAA,CAAMonD,gBAAN,CAAuB,iBAAvB,CAAX,KAAyD,CAD3D;EA5BsC;EAqCxC,OAAOuH,mBAAPA,CAA2BvzC,KAA3B,EAAkC+pD,MAAlC,EAA0C;EAM1C,WAAWlW,yBAAXA,CAAA,EAAuC;IACrC,OAAO,EAAP;EADqC;EAUvC,OAAOqN,wBAAPA,CAAgCC,IAAhC,EAAsC;IACpC,OAAO,KAAP;EADoC;EAUtC,OAAOC,KAAPA,CAAatoD,IAAb,EAAmBnV,MAAnB,EAA2B;IACzBrF,4DAAA,CAAY,iBAAZ;EADyB;EAQ3B,IAAIw1D,kBAAJA,CAAA,EAAyB;IACvB,OAAO,EAAP;EADuB;EAIzB,IAAIwB,YAAJA,CAAA,EAAmB;IACjB,OAAO,KAAK,CAAA2T,WAAZ;EADiB;EAInB,IAAI3T,YAAJA,CAAiBnlD,KAAjB,EAAwB;IACtB,KAAK,CAAA84D,WAAL,GAAoB94D,KAApB;IACA,KAAK9E,GAAL,EAAUrG,SAAV,CAAoB2U,MAApB,CAA2B,WAA3B,EAAwCxJ,KAAxC;EAFsB;EAQxB,IAAI65D,cAAJA,CAAA,EAAqB;IACnB,OAAO,IAAP;EADmB;EAIrBjU,OAAA,EAAS;IACP,MAAM,CAAC7wD,SAAD,EAAYC,UAAZ,IAA0B,KAAK0yD,cAArC;IACA,QAAQ,KAAKnB,cAAb;MACE,KAAK,EAAL;QACE,KAAKz6D,CAAL,IAAW,KAAKqD,MAAL,GAAc6F,UAAf,IAA8BD,SAAA,GAAY,CAAZ,CAAxC;QACA,KAAK7I,CAAL,IAAW,KAAKgD,KAAL,GAAa6F,SAAd,IAA4BC,UAAA,GAAa,CAAb,CAAtC;QACA;MACF,KAAK,GAAL;QACE,KAAKlJ,CAAL,IAAU,KAAKoD,KAAL,GAAa,CAAvB;QACA,KAAKhD,CAAL,IAAU,KAAKiD,MAAL,GAAc,CAAxB;QACA;MACF,KAAK,GAAL;QACE,KAAKrD,CAAL,IAAW,KAAKqD,MAAL,GAAc6F,UAAf,IAA8BD,SAAA,GAAY,CAAZ,CAAxC;QACA,KAAK7I,CAAL,IAAW,KAAKgD,KAAL,GAAa6F,SAAd,IAA4BC,UAAA,GAAa,CAAb,CAAtC;QACA;MACF;QACE,KAAKlJ,CAAL,IAAU,KAAKoD,KAAL,GAAa,CAAvB;QACA,KAAKhD,CAAL,IAAU,KAAKiD,MAAL,GAAc,CAAxB;QACA;IAhBJ;IAkBA,KAAKq3D,iBAAL;EApBO;EA2BTvC,YAAYr2C,MAAZ,EAAoB;IAClB,KAAK42C,UAAL,CAAgBP,WAAhB,CAA4Br2C,MAA5B;EADkB;EAIpB,IAAIy4C,YAAJA,CAAA,EAAmB;IACjB,OAAO,KAAK7B,UAAL,CAAgB6B,YAAvB;EADiB;EAOnB0H,gBAAA,EAAkB;IAChB,KAAK7yD,GAAL,CAASzG,KAAT,CAAeC,MAAf,GAAwB,CAAxB;EADgB;EAOlB+4D,gBAAA,EAAkB;IAChB,KAAKvyD,GAAL,CAASzG,KAAT,CAAeC,MAAf,GAAwB,KAAK,CAAAA,MAA7B;EADgB;EAIlBg3D,UAAUl4D,MAAV,EAAkB;IAChB,IAAIA,MAAA,KAAW,IAAf,EAAqB;MACnB,KAAKoqB,SAAL,GAAiBpqB,MAAA,CAAOoqB,SAAxB;MACA,KAAK8pC,cAAL,GAAsBl0D,MAAA,CAAOk0D,cAA7B;IAFmB,CAArB,MAGO;MAEL,KAAK,CAAAoS,YAAL;IAFK;IAIP,KAAKtmE,MAAL,GAAcA,MAAd;EARgB;EAclB8xD,QAAQruD,KAAR,EAAe;IACb,IAAI,CAAC,KAAKsuD,mBAAV,EAA+B;MAC7B;IAD6B;IAG/B,IAAI,CAAC,KAAK,CAAAoT,cAAV,EAA2B;MACzB,KAAKnlE,MAAL,CAAY4jE,WAAZ,CAAwB,IAAxB;IADyB,CAA3B,MAEO;MACL,KAAK,CAAAuB,cAAL,GAAuB,KAAvB;IADK;EANM;EAefF,SAASxhE,KAAT,EAAgB;IACd,IAAI,CAAC,KAAKsuD,mBAAV,EAA+B;MAC7B;IAD6B;IAI/B,IAAI,CAAC,KAAKX,eAAV,EAA2B;MACzB;IADyB;IAQ3B,MAAMvtD,MAAA,GAASJ,KAAA,CAAM4K,aAArB;IACA,IAAIxK,MAAA,EAAQ0iE,OAAR,CAAiB,IAAG,KAAKxlE,EAAT,EAAhB,CAAJ,EAAoC;MAClC;IADkC;IAIpC0C,KAAA,CAAM4O,cAAN;IAEA,IAAI,CAAC,KAAKrS,MAAL,EAAawmE,mBAAlB,EAAuC;MACrC,KAAKvX,cAAL;IADqC;EApBzB;EAyBhBA,eAAA,EAAiB;IACf,IAAI,KAAK9K,OAAL,EAAJ,EAAoB;MAClB,KAAKnwC,MAAL;IADkB,CAApB,MAEO;MACL,KAAKi/C,MAAL;IADK;EAHQ;EAWjBA,OAAA,EAAS;IACP,KAAKqH,sBAAL;EADO;EAITA,uBAAA,EAAyB;IACvB,KAAKtJ,UAAL,CAAgBsJ,sBAAhB,CAAuC,IAAvC;EADuB;EAWzBhG,MAAMh8D,CAAN,EAASI,CAAT,EAAY8xC,EAAZ,EAAgBC,EAAhB,EAAoB;IAClB,MAAM,CAAC/uC,KAAD,EAAQC,MAAR,IAAkB,KAAKg3D,gBAA7B;IACA,CAACnoB,EAAD,EAAKC,EAAL,IAAW,KAAKg8B,uBAAL,CAA6Bj8B,EAA7B,EAAiCC,EAAjC,CAAX;IAEA,KAAKnyC,CAAL,GAAU,CAAAA,CAAA,GAAIkyC,EAAJ,IAAU9uC,KAApB;IACA,KAAKhD,CAAL,GAAU,CAAAA,CAAA,GAAI+xC,EAAJ,IAAU9uC,MAApB;IAEA,KAAKq3D,iBAAL;EAPkB;EAUpB,CAAAv1B,UAAW,CAAC/hC,KAAD,EAAQC,MAAR,CAAX,EAA4BrD,CAA5B,EAA+BI,CAA/B,EAAkC;IAChC,CAACJ,CAAD,EAAII,CAAJ,IAAS,KAAK+tE,uBAAL,CAA6BnuE,CAA7B,EAAgCI,CAAhC,CAAT;IAEA,KAAKJ,CAAL,IAAUA,CAAA,GAAIoD,KAAd;IACA,KAAKhD,CAAL,IAAUA,CAAA,GAAIiD,MAAd;IAEA,KAAKq3D,iBAAL;EANgC;EAclCv1B,UAAUnlC,CAAV,EAAaI,CAAb,EAAgB;IACd,KAAK,CAAA+kC,SAAL,CAAgB,KAAKk1B,gBAArB,EAAuCr6D,CAAvC,EAA0CI,CAA1C;EADc;EAUhBguE,gBAAgBpuE,CAAhB,EAAmBI,CAAnB,EAAsB;IACpB,KAAK,CAAA+kC,SAAL,CAAgB,KAAKy2B,cAArB,EAAqC57D,CAArC,EAAwCI,CAAxC;IACA,KAAKgP,GAAL,CAASi/D,cAAT,CAAwB;MAAEC,KAAA,EAAO;IAAT,CAAxB;EAFoB;EAKtBC,KAAKr8B,EAAL,EAASC,EAAT,EAAa;IACX,MAAM,CAAC5yB,WAAD,EAAc66C,YAAd,IAA8B,KAAKC,gBAAzC;IACA,KAAKr6D,CAAL,IAAUkyC,EAAA,GAAK3yB,WAAf;IACA,KAAKnf,CAAL,IAAU+xC,EAAA,GAAKioB,YAAf;IACA,IAAI,KAAK1yD,MAAL,KAAgB,KAAK1H,CAAL,GAAS,CAAT,IAAc,KAAKA,CAAL,GAAS,CAAvB,IAA4B,KAAKI,CAAL,GAAS,CAArC,IAA0C,KAAKA,CAAL,GAAS,CAAnD,CAApB,EAA2E;MASzE,MAAM;QAAEJ,CAAF;QAAKI;MAAL,IAAW,KAAKgP,GAAL,CAASkrD,qBAAT,EAAjB;MACA,IAAI,KAAK5yD,MAAL,CAAYikE,aAAZ,CAA0B,IAA1B,EAAgC3rE,CAAhC,EAAmCI,CAAnC,CAAJ,EAA2C;QACzC,KAAKJ,CAAL,IAAUP,IAAA,CAAKC,KAAL,CAAW,KAAKM,CAAhB,CAAV;QACA,KAAKI,CAAL,IAAUX,IAAA,CAAKC,KAAL,CAAW,KAAKU,CAAhB,CAAV;MAFyC;IAV8B;IAmB3E,IAAI;MAAEJ,CAAF;MAAKI;IAAL,IAAW,IAAf;IACA,MAAM,CAACouE,EAAD,EAAKC,EAAL,IAAW,KAAK,CAAAC,kBAAL,EAAjB;IACA1uE,CAAA,IAAKwuE,EAAL;IACApuE,CAAA,IAAKquE,EAAL;IAEA,KAAKr/D,GAAL,CAASzG,KAAT,CAAe+B,IAAf,GAAsB,GAAI,OAAM1K,CAAN,EAAS2uE,OAAV,CAAkB,CAAlB,CAAqB,GAA9C;IACA,KAAKv/D,GAAL,CAASzG,KAAT,CAAegC,GAAf,GAAqB,GAAI,OAAMvK,CAAN,EAASuuE,OAAV,CAAkB,CAAlB,CAAqB,GAA7C;IACA,KAAKv/D,GAAL,CAASi/D,cAAT,CAAwB;MAAEC,KAAA,EAAO;IAAT,CAAxB;EA9BW;EAiCb,CAAAI,mBAAA,EAAsB;IACpB,MAAM,CAACnvD,WAAD,EAAc66C,YAAd,IAA8B,KAAKC,gBAAzC;IACA,MAAM;MAAE6S;IAAF,IAAuBpqD,gBAA7B;IACA,MAAM9iB,CAAA,GAAIktE,gBAAA,GAAmB3tD,WAA7B;IACA,MAAMnf,CAAA,GAAI8sE,gBAAA,GAAmB9S,YAA7B;IACA,QAAQ,KAAK9wD,QAAb;MACE,KAAK,EAAL;QACE,OAAO,CAAC,CAACtJ,CAAF,EAAKI,CAAL,CAAP;MACF,KAAK,GAAL;QACE,OAAO,CAACJ,CAAD,EAAII,CAAJ,CAAP;MACF,KAAK,GAAL;QACE,OAAO,CAACJ,CAAD,EAAI,CAACI,CAAL,CAAP;MACF;QACE,OAAO,CAAC,CAACJ,CAAF,EAAK,CAACI,CAAN,CAAP;IARJ;EALoB;EAiBtBs6D,kBAAA,EAAoB;IAClB,MAAM,CAACzxD,SAAD,EAAYC,UAAZ,IAA0B,KAAK0yD,cAArC;IACA,IAAI;MAAE57D,CAAF;MAAKI,CAAL;MAAQgD,KAAR;MAAeC;IAAf,IAA0B,IAA9B;IACAD,KAAA,IAAS6F,SAAT;IACA5F,MAAA,IAAU6F,UAAV;IACAlJ,CAAA,IAAKiJ,SAAL;IACA7I,CAAA,IAAK8I,UAAL;IAEA,QAAQ,KAAKI,QAAb;MACE,KAAK,CAAL;QACEtJ,CAAA,GAAIP,IAAA,CAAKE,GAAL,CAAS,CAAT,EAAYF,IAAA,CAAKG,GAAL,CAASqJ,SAAA,GAAY7F,KAArB,EAA4BpD,CAA5B,CAAZ,CAAJ;QACAI,CAAA,GAAIX,IAAA,CAAKE,GAAL,CAAS,CAAT,EAAYF,IAAA,CAAKG,GAAL,CAASsJ,UAAA,GAAa7F,MAAtB,EAA8BjD,CAA9B,CAAZ,CAAJ;QACA;MACF,KAAK,EAAL;QACEJ,CAAA,GAAIP,IAAA,CAAKE,GAAL,CAAS,CAAT,EAAYF,IAAA,CAAKG,GAAL,CAASqJ,SAAA,GAAY5F,MAArB,EAA6BrD,CAA7B,CAAZ,CAAJ;QACAI,CAAA,GAAIX,IAAA,CAAKG,GAAL,CAASsJ,UAAT,EAAqBzJ,IAAA,CAAKE,GAAL,CAASyD,KAAT,EAAgBhD,CAAhB,CAArB,CAAJ;QACA;MACF,KAAK,GAAL;QACEJ,CAAA,GAAIP,IAAA,CAAKG,GAAL,CAASqJ,SAAT,EAAoBxJ,IAAA,CAAKE,GAAL,CAASyD,KAAT,EAAgBpD,CAAhB,CAApB,CAAJ;QACAI,CAAA,GAAIX,IAAA,CAAKG,GAAL,CAASsJ,UAAT,EAAqBzJ,IAAA,CAAKE,GAAL,CAAS0D,MAAT,EAAiBjD,CAAjB,CAArB,CAAJ;QACA;MACF,KAAK,GAAL;QACEJ,CAAA,GAAIP,IAAA,CAAKG,GAAL,CAASqJ,SAAT,EAAoBxJ,IAAA,CAAKE,GAAL,CAAS0D,MAAT,EAAiBrD,CAAjB,CAApB,CAAJ;QACAI,CAAA,GAAIX,IAAA,CAAKE,GAAL,CAAS,CAAT,EAAYF,IAAA,CAAKG,GAAL,CAASsJ,UAAA,GAAa9F,KAAtB,EAA6BhD,CAA7B,CAAZ,CAAJ;QACA;IAhBJ;IAmBA,KAAKJ,CAAL,GAASA,CAAA,IAAKiJ,SAAd;IACA,KAAK7I,CAAL,GAASA,CAAA,IAAK8I,UAAd;IAEA,MAAM,CAACslE,EAAD,EAAKC,EAAL,IAAW,KAAK,CAAAC,kBAAL,EAAjB;IACA1uE,CAAA,IAAKwuE,EAAL;IACApuE,CAAA,IAAKquE,EAAL;IAEA,MAAM;MAAE9lE;IAAF,IAAY,KAAKyG,GAAvB;IACAzG,KAAA,CAAM+B,IAAN,GAAa,GAAI,OAAM1K,CAAN,EAAS2uE,OAAV,CAAkB,CAAlB,CAAqB,GAArC;IACAhmE,KAAA,CAAMgC,GAAN,GAAY,GAAI,OAAMvK,CAAN,EAASuuE,OAAV,CAAkB,CAAlB,CAAqB,GAApC;IAEA,KAAK7M,SAAL;EAtCkB;EAyCpB,OAAO,CAAA8M,WAAPA,CAAoB5uE,CAApB,EAAuBI,CAAvB,EAA0BwK,KAA1B,EAAiC;IAC/B,QAAQA,KAAR;MACE,KAAK,EAAL;QACE,OAAO,CAACxK,CAAD,EAAI,CAACJ,CAAL,CAAP;MACF,KAAK,GAAL;QACE,OAAO,CAAC,CAACA,CAAF,EAAK,CAACI,CAAN,CAAP;MACF,KAAK,GAAL;QACE,OAAO,CAAC,CAACA,CAAF,EAAKJ,CAAL,CAAP;MACF;QACE,OAAO,CAACA,CAAD,EAAII,CAAJ,CAAP;IARJ;EAD+B;EAkBjC+tE,wBAAwBnuE,CAAxB,EAA2BI,CAA3B,EAA8B;IAC5B,OAAO0iB,gBAAA,CAAiB,CAAA8rD,WAAjB,CAA8B5uE,CAA9B,EAAiCI,CAAjC,EAAoC,KAAKq6D,cAAzC,CAAP;EAD4B;EAS9BkB,wBAAwB37D,CAAxB,EAA2BI,CAA3B,EAA8B;IAC5B,OAAO0iB,gBAAA,CAAiB,CAAA8rD,WAAjB,CAA8B5uE,CAA9B,EAAiCI,CAAjC,EAAoC,MAAM,KAAKq6D,cAA/C,CAAP;EAD4B;EAI9B,CAAAoU,kBAAmBvlE,QAAnB,EAA6B;IAC3B,QAAQA,QAAR;MACE,KAAK,EAAL;QAAS;UACP,MAAM,CAACL,SAAD,EAAYC,UAAZ,IAA0B,KAAK0yD,cAArC;UACA,OAAO,CAAC,CAAD,EAAI,CAAC3yD,SAAD,GAAaC,UAAjB,EAA6BA,UAAA,GAAaD,SAA1C,EAAqD,CAArD,CAAP;QAFO;MAIT,KAAK,GAAL;QACE,OAAO,CAAC,CAAC,CAAF,EAAK,CAAL,EAAQ,CAAR,EAAW,CAAC,CAAZ,CAAP;MACF,KAAK,GAAL;QAAU;UACR,MAAM,CAACA,SAAD,EAAYC,UAAZ,IAA0B,KAAK0yD,cAArC;UACA,OAAO,CAAC,CAAD,EAAI3yD,SAAA,GAAYC,UAAhB,EAA4B,CAACA,UAAD,GAAcD,SAA1C,EAAqD,CAArD,CAAP;QAFQ;MAIV;QACE,OAAO,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,CAAP;IAZJ;EAD2B;EAiB7B,IAAI+uD,WAAJA,CAAA,EAAkB;IAChB,OAAO,KAAKU,UAAL,CAAgB+U,cAAhB,CAA+BqB,SAAtC;EADgB;EAIlB,IAAIrU,cAAJA,CAAA,EAAqB;IACnB,OAAQ,MAAK/B,UAAL,CAAgB+U,cAAhB,CAA+BnkE,QAA/B,GAA0C,KAAKkkE,YAA/C,IAA+D,GAAvE;EADmB;EAIrB,IAAInT,gBAAJA,CAAA,EAAuB;IACrB,MAAM;MACJrC,WADI;MAEJ4D,cAAA,EAAgB,CAAC3yD,SAAD,EAAYC,UAAZ;IAFZ,IAGF,IAHJ;IAIA,MAAM6lE,WAAA,GAAc9lE,SAAA,GAAY+uD,WAAhC;IACA,MAAMgX,YAAA,GAAe9lE,UAAA,GAAa8uD,WAAlC;IACA,OAAO91D,wDAAA,CAAY4yD,mBAAZ,GACH,CAACr1D,IAAA,CAAKsX,KAAL,CAAWg4D,WAAX,CAAD,EAA0BtvE,IAAA,CAAKsX,KAAL,CAAWi4D,YAAX,CAA1B,CADG,GAEH,CAACD,WAAD,EAAcC,YAAd,CAFJ;EAPqB;EAiBvB1M,QAAQl/D,KAAR,EAAeC,MAAf,EAAuB;IACrB,MAAM,CAACkc,WAAD,EAAc66C,YAAd,IAA8B,KAAKC,gBAAzC;IACA,KAAKjrD,GAAL,CAASzG,KAAT,CAAevF,KAAf,GAAuB,GAAI,CAAC,MAAMA,KAAP,GAAgBmc,WAAhB,EAA6BovD,OAA9B,CAAsC,CAAtC,CAAyC,GAAnE;IACA,IAAI,CAAC,KAAK,CAAArC,eAAV,EAA4B;MAC1B,KAAKl9D,GAAL,CAASzG,KAAT,CAAetF,MAAf,GAAwB,GAAI,CAAC,MAAMA,MAAP,GAAiB+2D,YAAjB,EAA+BuU,OAAhC,CAAwC,CAAxC,CAA2C,GAAtE;IAD0B;IAG5B,KAAK,CAAAzC,aAAL,EAAqBnjE,SAArB,CAA+B2U,MAA/B,CACE,OADF,EAEEta,KAAA,GAAQ0f,gBAAA,CAAiBqqD,iBAAzB,IACE9pE,MAAA,GAASyf,gBAAA,CAAiBqqD,iBAH9B;EANqB;EAavBxK,QAAA,EAAU;IACR,MAAM;MAAEh6D;IAAF,IAAY,KAAKyG,GAAvB;IACA,MAAM;MAAE/L,MAAF;MAAUD;IAAV,IAAoBuF,KAA1B;IACA,MAAMsmE,YAAA,GAAe7rE,KAAA,CAAM8rE,QAAN,CAAe,GAAf,CAArB;IACA,MAAMC,aAAA,GAAgB,CAAC,KAAK,CAAA7C,eAAN,IAA0BjpE,MAAA,CAAO6rE,QAAP,CAAgB,GAAhB,CAAhD;IACA,IAAID,YAAA,IAAgBE,aAApB,EAAmC;MACjC;IADiC;IAInC,MAAM,CAAC5vD,WAAD,EAAc66C,YAAd,IAA8B,KAAKC,gBAAzC;IACA,IAAI,CAAC4U,YAAL,EAAmB;MACjBtmE,KAAA,CAAMvF,KAAN,GAAc,GAAI,CAAC,MAAMi0D,UAAA,CAAWj0D,KAAX,CAAP,GAA4Bmc,WAA5B,EAAyCovD,OAA1C,CAAkD,CAAlD,CAAqD,GAAtE;IADiB;IAGnB,IAAI,CAAC,KAAK,CAAArC,eAAN,IAA0B,CAAC6C,aAA/B,EAA8C;MAC5CxmE,KAAA,CAAMtF,MAAN,GAAe,GAAI,CAAC,MAAMg0D,UAAA,CAAWh0D,MAAX,CAAP,GAA6B+2D,YAA7B,EAA2CuU,OAA5C,CAChB,CADgB,CAEhB,GAFF;IAD4C;EAbtC;EAwBV/V,sBAAA,EAAwB;IACtB,OAAO,CAAC,CAAD,EAAI,CAAJ,CAAP;EADsB;EAIxB,CAAAwW,eAAA,EAAkB;IAChB,IAAI,KAAK,CAAA7C,WAAT,EAAuB;MACrB;IADqB;IAGvB,KAAK,CAAAA,WAAL,GAAoBjkE,QAAA,CAASC,aAAT,CAAuB,KAAvB,CAApB;IACA,KAAK,CAAAgkE,WAAL,CAAkBxjE,SAAlB,CAA4BC,GAA5B,CAAgC,UAAhC;IAIA,MAAMqmE,OAAA,GAAU,KAAKvQ,oBAAL,GACZ,CAAC,SAAD,EAAY,UAAZ,EAAwB,aAAxB,EAAuC,YAAvC,CADY,GAEZ,CACE,SADF,EAEE,WAFF,EAGE,UAHF,EAIE,aAJF,EAKE,aALF,EAME,cANF,EAOE,YAPF,EAQE,YARF,CAFJ;IAYA,WAAW7xD,IAAX,IAAmBoiE,OAAnB,EAA4B;MAC1B,MAAMjgE,GAAA,GAAM9G,QAAA,CAASC,aAAT,CAAuB,KAAvB,CAAZ;MACA,KAAK,CAAAgkE,WAAL,CAAkB99D,MAAlB,CAAyBW,GAAzB;MACAA,GAAA,CAAIrG,SAAJ,CAAcC,GAAd,CAAkB,SAAlB,EAA6BiE,IAA7B;MACAmC,GAAA,CAAI5G,YAAJ,CAAiB,mBAAjB,EAAsCyE,IAAtC;MACAmC,GAAA,CAAI2B,gBAAJ,CACE,aADF,EAEE,KAAK,CAAAu+D,kBAAL,CAAyBhyD,IAAzB,CAA8B,IAA9B,EAAoCrQ,IAApC,CAFF;MAIAmC,GAAA,CAAI2B,gBAAJ,CAAqB,aAArB,EAAoCkiD,4DAApC;MACA7jD,GAAA,CAAI1G,QAAJ,GAAe,CAAC,CAAhB;IAV0B;IAY5B,KAAK0G,GAAL,CAASqM,OAAT,CAAiB,KAAK,CAAA8wD,WAAtB;EAjCgB;EAoClB,CAAA+C,mBAAoBriE,IAApB,EAA0B9B,KAA1B,EAAiC;IAC/BA,KAAA,CAAM4O,cAAN;IACA,MAAM;MAAE7E;IAAF,IAAYhT,wDAAA,CAAY+S,QAA9B;IACA,IAAI9J,KAAA,CAAM42D,MAAN,KAAiB,CAAjB,IAAuB52D,KAAA,CAAMiK,OAAN,IAAiBF,KAA5C,EAAoD;MAClD;IADkD;IAIpD,KAAK,CAAAq6D,mBAAL,CAA0B,KAA1B;IAEA,MAAMC,uBAAA,GAA0B,KAAK,CAAAC,kBAAL,CAAyBnyD,IAAzB,CAA8B,IAA9B,EAAoCrQ,IAApC,CAAhC;IACA,MAAMyiE,cAAA,GAAiB,KAAKrW,YAA5B;IACA,KAAKA,YAAL,GAAoB,KAApB;IACA,MAAMsW,kBAAA,GAAqB;MAAEC,OAAA,EAAS,IAAX;MAAiBC,OAAA,EAAS;IAA1B,CAA3B;IACA,KAAKnoE,MAAL,CAAY6hE,mBAAZ,CAAgC,KAAhC;IACAn8C,MAAA,CAAOrc,gBAAP,CACE,aADF,EAEEy+D,uBAFF,EAGEG,kBAHF;IAKA,MAAMG,MAAA,GAAS,KAAK9vE,CAApB;IACA,MAAM+vE,MAAA,GAAS,KAAK3vE,CAApB;IACA,MAAM4vE,UAAA,GAAa,KAAK5sE,KAAxB;IACA,MAAM6sE,WAAA,GAAc,KAAK5sE,MAAzB;IACA,MAAM6sE,iBAAA,GAAoB,KAAKxoE,MAAL,CAAY0H,GAAZ,CAAgBzG,KAAhB,CAAsBwnE,MAAhD;IACA,MAAMC,WAAA,GAAc,KAAKhhE,GAAL,CAASzG,KAAT,CAAewnE,MAAnC;IACA,KAAK/gE,GAAL,CAASzG,KAAT,CAAewnE,MAAf,GAAwB,KAAKzoE,MAAL,CAAY0H,GAAZ,CAAgBzG,KAAhB,CAAsBwnE,MAAtB,GACtB/iD,MAAA,CAAO0iC,gBAAP,CAAwB3kD,KAAA,CAAMI,MAA9B,EAAsC4kE,MADxC;IAGA,MAAME,iBAAA,GAAoBA,CAAA,KAAM;MAC9B,KAAK3oE,MAAL,CAAY6hE,mBAAZ,CAAgC,IAAhC;MACA,KAAK,CAAAgG,mBAAL,CAA0B,IAA1B;MACA,KAAKlW,YAAL,GAAoBqW,cAApB;MACAtiD,MAAA,CAAOzR,mBAAP,CAA2B,WAA3B,EAAwC00D,iBAAxC;MACAjjD,MAAA,CAAOzR,mBAAP,CAA2B,MAA3B,EAAmC00D,iBAAnC;MACAjjD,MAAA,CAAOzR,mBAAP,CACE,aADF,EAEE6zD,uBAFF,EAGEG,kBAHF;MAKA,KAAKjoE,MAAL,CAAY0H,GAAZ,CAAgBzG,KAAhB,CAAsBwnE,MAAtB,GAA+BD,iBAA/B;MACA,KAAK9gE,GAAL,CAASzG,KAAT,CAAewnE,MAAf,GAAwBC,WAAxB;MAEA,KAAK,CAAAE,oBAAL,CAA2BR,MAA3B,EAAmCC,MAAnC,EAA2CC,UAA3C,EAAuDC,WAAvD;IAd8B,CAAhC;IAgBA7iD,MAAA,CAAOrc,gBAAP,CAAwB,WAAxB,EAAqCs/D,iBAArC;IAGAjjD,MAAA,CAAOrc,gBAAP,CAAwB,MAAxB,EAAgCs/D,iBAAhC;EA/C+B;EAkDjC,CAAAC,qBAAsBR,MAAtB,EAA8BC,MAA9B,EAAsCC,UAAtC,EAAkDC,WAAlD,EAA+D;IAC7D,MAAMM,IAAA,GAAO,KAAKvwE,CAAlB;IACA,MAAMwwE,IAAA,GAAO,KAAKpwE,CAAlB;IACA,MAAMs+C,QAAA,GAAW,KAAKt7C,KAAtB;IACA,MAAMu7C,SAAA,GAAY,KAAKt7C,MAAvB;IACA,IACEktE,IAAA,KAAST,MAAT,IACAU,IAAA,KAAST,MADT,IAEArxB,QAAA,KAAasxB,UAFb,IAGArxB,SAAA,KAAcsxB,WAJhB,EAKE;MACA;IADA;IAIF,KAAK9X,WAAL,CAAiB;MACfC,GAAA,EAAKA,CAAA,KAAM;QACT,KAAKh1D,KAAL,GAAas7C,QAAb;QACA,KAAKr7C,MAAL,GAAcs7C,SAAd;QACA,KAAK3+C,CAAL,GAASuwE,IAAT;QACA,KAAKnwE,CAAL,GAASowE,IAAT;QACA,MAAM,CAACjxD,WAAD,EAAc66C,YAAd,IAA8B,KAAKC,gBAAzC;QACA,KAAKiI,OAAL,CAAa/iD,WAAA,GAAcm/B,QAA3B,EAAqC0b,YAAA,GAAezb,SAApD;QACA,KAAK+b,iBAAL;MAPS,CADI;MAUfrC,IAAA,EAAMA,CAAA,KAAM;QACV,KAAKj1D,KAAL,GAAa4sE,UAAb;QACA,KAAK3sE,MAAL,GAAc4sE,WAAd;QACA,KAAKjwE,CAAL,GAAS8vE,MAAT;QACA,KAAK1vE,CAAL,GAAS2vE,MAAT;QACA,MAAM,CAACxwD,WAAD,EAAc66C,YAAd,IAA8B,KAAKC,gBAAzC;QACA,KAAKiI,OAAL,CAAa/iD,WAAA,GAAcywD,UAA3B,EAAuC5V,YAAA,GAAe6V,WAAtD;QACA,KAAKvV,iBAAL;MAPU,CAVG;MAmBfpC,QAAA,EAAU;IAnBK,CAAjB;EAd6D;EAqC/D,CAAAmX,mBAAoBxiE,IAApB,EAA0B9B,KAA1B,EAAiC;IAC/B,MAAM,CAACoU,WAAD,EAAc66C,YAAd,IAA8B,KAAKC,gBAAzC;IACA,MAAMyV,MAAA,GAAS,KAAK9vE,CAApB;IACA,MAAM+vE,MAAA,GAAS,KAAK3vE,CAApB;IACA,MAAM4vE,UAAA,GAAa,KAAK5sE,KAAxB;IACA,MAAM6sE,WAAA,GAAc,KAAK5sE,MAAzB;IACA,MAAMotE,QAAA,GAAW3tD,gBAAA,CAAiBmhD,QAAjB,GAA4B1kD,WAA7C;IACA,MAAMmxD,SAAA,GAAY5tD,gBAAA,CAAiBmhD,QAAjB,GAA4B7J,YAA9C;IAKA,MAAMrjD,KAAA,GAAQ/W,CAAA,IAAKP,IAAA,CAAKsX,KAAL,CAAW/W,CAAA,GAAI,KAAf,IAAwB,KAA3C;IACA,MAAM2wE,cAAA,GAAiB,KAAK,CAAA9B,iBAAL,CAAwB,KAAKvlE,QAA7B,CAAvB;IACA,MAAMsnE,MAAA,GAASA,CAAC5wE,CAAD,EAAII,CAAJ,KAAU,CACvBuwE,cAAA,CAAe,CAAf,IAAoB3wE,CAApB,GAAwB2wE,cAAA,CAAe,CAAf,IAAoBvwE,CADrB,EAEvBuwE,cAAA,CAAe,CAAf,IAAoB3wE,CAApB,GAAwB2wE,cAAA,CAAe,CAAf,IAAoBvwE,CAFrB,CAAzB;IAIA,MAAMywE,iBAAA,GAAoB,KAAK,CAAAhC,iBAAL,CAAwB,MAAM,KAAKvlE,QAAnC,CAA1B;IACA,MAAMwnE,SAAA,GAAYA,CAAC9wE,CAAD,EAAII,CAAJ,KAAU,CAC1BywE,iBAAA,CAAkB,CAAlB,IAAuB7wE,CAAvB,GAA2B6wE,iBAAA,CAAkB,CAAlB,IAAuBzwE,CADxB,EAE1BywE,iBAAA,CAAkB,CAAlB,IAAuB7wE,CAAvB,GAA2B6wE,iBAAA,CAAkB,CAAlB,IAAuBzwE,CAFxB,CAA5B;IAIA,IAAI2wE,QAAJ;IACA,IAAIC,WAAJ;IACA,IAAIC,UAAA,GAAa,KAAjB;IACA,IAAIC,YAAA,GAAe,KAAnB;IAEA,QAAQjkE,IAAR;MACE,KAAK,SAAL;QACEgkE,UAAA,GAAa,IAAb;QACAF,QAAA,GAAWA,CAACpmB,CAAD,EAAIC,CAAJ,KAAU,CAAC,CAAD,EAAI,CAAJ,CAArB;QACAomB,WAAA,GAAcA,CAACrmB,CAAD,EAAIC,CAAJ,KAAU,CAACD,CAAD,EAAIC,CAAJ,CAAxB;QACA;MACF,KAAK,WAAL;QACEmmB,QAAA,GAAWA,CAACpmB,CAAD,EAAIC,CAAJ,KAAU,CAACD,CAAA,GAAI,CAAL,EAAQ,CAAR,CAArB;QACAqmB,WAAA,GAAcA,CAACrmB,CAAD,EAAIC,CAAJ,KAAU,CAACD,CAAA,GAAI,CAAL,EAAQC,CAAR,CAAxB;QACA;MACF,KAAK,UAAL;QACEqmB,UAAA,GAAa,IAAb;QACAF,QAAA,GAAWA,CAACpmB,CAAD,EAAIC,CAAJ,KAAU,CAACD,CAAD,EAAI,CAAJ,CAArB;QACAqmB,WAAA,GAAcA,CAACrmB,CAAD,EAAIC,CAAJ,KAAU,CAAC,CAAD,EAAIA,CAAJ,CAAxB;QACA;MACF,KAAK,aAAL;QACEsmB,YAAA,GAAe,IAAf;QACAH,QAAA,GAAWA,CAACpmB,CAAD,EAAIC,CAAJ,KAAU,CAACD,CAAD,EAAIC,CAAA,GAAI,CAAR,CAArB;QACAomB,WAAA,GAAcA,CAACrmB,CAAD,EAAIC,CAAJ,KAAU,CAAC,CAAD,EAAIA,CAAA,GAAI,CAAR,CAAxB;QACA;MACF,KAAK,aAAL;QACEqmB,UAAA,GAAa,IAAb;QACAF,QAAA,GAAWA,CAACpmB,CAAD,EAAIC,CAAJ,KAAU,CAACD,CAAD,EAAIC,CAAJ,CAArB;QACAomB,WAAA,GAAcA,CAACrmB,CAAD,EAAIC,CAAJ,KAAU,CAAC,CAAD,EAAI,CAAJ,CAAxB;QACA;MACF,KAAK,cAAL;QACEmmB,QAAA,GAAWA,CAACpmB,CAAD,EAAIC,CAAJ,KAAU,CAACD,CAAA,GAAI,CAAL,EAAQC,CAAR,CAArB;QACAomB,WAAA,GAAcA,CAACrmB,CAAD,EAAIC,CAAJ,KAAU,CAACD,CAAA,GAAI,CAAL,EAAQ,CAAR,CAAxB;QACA;MACF,KAAK,YAAL;QACEsmB,UAAA,GAAa,IAAb;QACAF,QAAA,GAAWA,CAACpmB,CAAD,EAAIC,CAAJ,KAAU,CAAC,CAAD,EAAIA,CAAJ,CAArB;QACAomB,WAAA,GAAcA,CAACrmB,CAAD,EAAIC,CAAJ,KAAU,CAACD,CAAD,EAAI,CAAJ,CAAxB;QACA;MACF,KAAK,YAAL;QACEumB,YAAA,GAAe,IAAf;QACAH,QAAA,GAAWA,CAACpmB,CAAD,EAAIC,CAAJ,KAAU,CAAC,CAAD,EAAIA,CAAA,GAAI,CAAR,CAArB;QACAomB,WAAA,GAAcA,CAACrmB,CAAD,EAAIC,CAAJ,KAAU,CAACD,CAAD,EAAIC,CAAA,GAAI,CAAR,CAAxB;QACA;IAtCJ;IAyCA,MAAMumB,KAAA,GAAQJ,QAAA,CAASf,UAAT,EAAqBC,WAArB,CAAd;IACA,MAAMmB,aAAA,GAAgBJ,WAAA,CAAYhB,UAAZ,EAAwBC,WAAxB,CAAtB;IACA,IAAIoB,mBAAA,GAAsBT,MAAA,CAAO,GAAGQ,aAAV,CAA1B;IACA,MAAME,SAAA,GAAYv6D,KAAA,CAAM+4D,MAAA,GAASuB,mBAAA,CAAoB,CAApB,CAAf,CAAlB;IACA,MAAME,SAAA,GAAYx6D,KAAA,CAAMg5D,MAAA,GAASsB,mBAAA,CAAoB,CAApB,CAAf,CAAlB;IACA,IAAIG,MAAA,GAAS,CAAb;IACA,IAAIC,MAAA,GAAS,CAAb;IAEA,IAAI,CAACC,MAAD,EAASC,MAAT,IAAmB,KAAKxD,uBAAL,CACrBhjE,KAAA,CAAMymE,SADe,EAErBzmE,KAAA,CAAM0mE,SAFe,CAAvB;IAIA,CAACH,MAAD,EAASC,MAAT,IAAmBb,SAAA,CAAUY,MAAA,GAASnyD,WAAnB,EAAgCoyD,MAAA,GAASvX,YAAzC,CAAnB;IAEA,IAAI6W,UAAJ,EAAgB;MACd,MAAMa,OAAA,GAAUryE,IAAA,CAAKqzC,KAAL,CAAWk9B,UAAX,EAAuBC,WAAvB,CAAhB;MACAuB,MAAA,GAASC,MAAA,GAAShyE,IAAA,CAAKE,GAAL,CAChBF,IAAA,CAAKG,GAAL,CACEH,IAAA,CAAKqzC,KAAL,CACEs+B,aAAA,CAAc,CAAd,IAAmBD,KAAA,CAAM,CAAN,CAAnB,GAA8BO,MADhC,EAEEN,aAAA,CAAc,CAAd,IAAmBD,KAAA,CAAM,CAAN,CAAnB,GAA8BQ,MAFhC,IAGIG,OAJN,EAME,IAAI9B,UANN,EAOE,IAAIC,WAPN,CADgB,EAWhBQ,QAAA,GAAWT,UAXK,EAYhBU,SAAA,GAAYT,WAZI,CAAlB;IAFc,CAAhB,MAgBO,IAAIiB,YAAJ,EAAkB;MACvBM,MAAA,GACE/xE,IAAA,CAAKE,GAAL,CACE8wE,QADF,EAEEhxE,IAAA,CAAKG,GAAL,CAAS,CAAT,EAAYH,IAAA,CAAKwX,GAAL,CAASm6D,aAAA,CAAc,CAAd,IAAmBD,KAAA,CAAM,CAAN,CAAnB,GAA8BO,MAAvC,CAAZ,CAFF,IAGI1B,UAJN;IADuB,CAAlB,MAMA;MACLyB,MAAA,GACEhyE,IAAA,CAAKE,GAAL,CACE+wE,SADF,EAEEjxE,IAAA,CAAKG,GAAL,CAAS,CAAT,EAAYH,IAAA,CAAKwX,GAAL,CAASm6D,aAAA,CAAc,CAAd,IAAmBD,KAAA,CAAM,CAAN,CAAnB,GAA8BQ,MAAvC,CAAZ,CAFF,IAGI1B,WAJN;IADK;IAQP,MAAMvxB,QAAA,GAAW3nC,KAAA,CAAMi5D,UAAA,GAAawB,MAAnB,CAAjB;IACA,MAAM7yB,SAAA,GAAY5nC,KAAA,CAAMk5D,WAAA,GAAcwB,MAApB,CAAlB;IACAJ,mBAAA,GAAsBT,MAAA,CAAO,GAAGI,WAAA,CAAYtyB,QAAZ,EAAsBC,SAAtB,CAAV,CAAtB;IACA,MAAM4xB,IAAA,GAAOe,SAAA,GAAYD,mBAAA,CAAoB,CAApB,CAAzB;IACA,MAAMb,IAAA,GAAOe,SAAA,GAAYF,mBAAA,CAAoB,CAApB,CAAzB;IAEA,KAAKjuE,KAAL,GAAas7C,QAAb;IACA,KAAKr7C,MAAL,GAAcs7C,SAAd;IACA,KAAK3+C,CAAL,GAASuwE,IAAT;IACA,KAAKnwE,CAAL,GAASowE,IAAT;IAEA,KAAKlO,OAAL,CAAa/iD,WAAA,GAAcm/B,QAA3B,EAAqC0b,YAAA,GAAezb,SAApD;IACA,KAAK+b,iBAAL;EA7H+B;EAgIjC,MAAM+L,gBAANA,CAAA,EAAyB;IACvB,IAAI,KAAK,CAAAyF,aAAT,EAAyB;MACvB;IADuB;IAGzB,MAAMtE,OAAA,GAAW,KAAK,CAAAsE,aAAL,GAAsB5jE,QAAA,CAASC,aAAT,CAAuB,QAAvB,CAAvC;IACAq/D,OAAA,CAAQ1pD,SAAR,GAAoB,SAApB;IACA,MAAM4zC,GAAA,GAAM,MAAMhvC,gBAAA,CAAiB24C,YAAjB,CAA8BtoD,GAA9B,CAChB,oCADgB,CAAlB;IAGAy0D,OAAA,CAAQ7vD,WAAR,GAAsB+5C,GAAtB;IACA8V,OAAA,CAAQp/D,YAAR,CAAqB,YAArB,EAAmCspD,GAAnC;IACA8V,OAAA,CAAQl/D,QAAR,GAAmB,GAAnB;IACAk/D,OAAA,CAAQ72D,gBAAR,CAAyB,aAAzB,EAAwCkiD,4DAAxC;IACA2U,OAAA,CAAQ72D,gBAAR,CAAyB,aAAzB,EAAwC5F,KAAA,IAASA,KAAA,CAAM4mE,eAAN,EAAjD;IAEA,MAAMC,OAAA,GAAU7mE,KAAA,IAAS;MACvB,KAAK,CAAA+gE,aAAL,CAAoBxgE,MAApB,GAA6B,IAA7B;MACAP,KAAA,CAAM4O,cAAN;MACA,KAAK2+C,UAAL,CAAgBuZ,WAAhB,CAA4B,IAA5B;IAHuB,CAAzB;IAKArK,OAAA,CAAQ72D,gBAAR,CAAyB,OAAzB,EAAkCihE,OAAlC,EAA2C;MAAEnC,OAAA,EAAS;IAAX,CAA3C;IACAjI,OAAA,CAAQ72D,gBAAR,CAAyB,SAAzB,EAAoC5F,KAAA,IAAS;MAC3C,IAAIA,KAAA,CAAMI,MAAN,KAAiBq8D,OAAjB,IAA4Bz8D,KAAA,CAAMyM,GAAN,KAAc,OAA9C,EAAuD;QACrD,KAAK,CAAAy0D,sBAAL,GAA+B,IAA/B;QACA2F,OAAA,CAAQ7mE,KAAR;MAFqD;IADZ,CAA7C;IAMA,KAAK,CAAA+mE,qBAAL;IACA,KAAK9iE,GAAL,CAASX,MAAT,CAAgBm5D,OAAhB;IACA,IAAI,CAAC9kD,gBAAA,CAAiBqqD,iBAAtB,EAAyC;MAGvC,MAAMgF,OAAA,GAAU,EAAhB;MACArvD,gBAAA,CAAiBqqD,iBAAjB,GAAqC1tE,IAAA,CAAKG,GAAL,CACnC,GADmC,EAEnCH,IAAA,CAAKsX,KAAL,CAAW6wD,OAAA,CAAQtN,qBAAR,GAAgCl3D,KAAhC,IAAyC,IAAI+uE,OAAA,GAAU,GAAd,CAApD,CAFmC,CAArC;IAJuC;EA7BlB;EAwCzB,MAAM,CAAAD,qBAANA,CAAA,EAA+B;IAC7B,MAAMnQ,MAAA,GAAS,KAAK,CAAAmK,aAApB;IACA,IAAI,CAACnK,MAAL,EAAa;MACX;IADW;IAGb,IAAI,CAAC,KAAK,CAAA6F,OAAN,IAAkB,CAAC,KAAK,CAAAqE,iBAA5B,EAAgD;MAC9ClK,MAAA,CAAOh5D,SAAP,CAAiB2S,MAAjB,CAAwB,MAAxB;MACA,KAAK,CAAAywD,cAAL,EAAsBzwD,MAAtB;MACA;IAH8C;IAKhDqmD,MAAA,CAAOh5D,SAAP,CAAiBC,GAAjB,CAAqB,MAArB;IAEA8Z,gBAAA,CAAiB24C,YAAjB,CACGtoD,GADH,CACO,yCADP,EAEGyY,IAFH,CAEQkmC,GAAA,IAAO;MACXiQ,MAAA,CAAOv5D,YAAP,CAAoB,YAApB,EAAkCspD,GAAlC;IADW,CAFf;IAKA,IAAIsgB,OAAA,GAAU,KAAK,CAAAjG,cAAnB;IACA,IAAI,CAACiG,OAAL,EAAc;MACZ,KAAK,CAAAjG,cAAL,GAAuBiG,OAAA,GAAU9pE,QAAA,CAASC,aAAT,CAAuB,MAAvB,CAAjC;MACA6pE,OAAA,CAAQl0D,SAAR,GAAoB,SAApB;MACAk0D,OAAA,CAAQ5pE,YAAR,CAAqB,MAArB,EAA6B,SAA7B;MACA,MAAMC,EAAA,GAAM2pE,OAAA,CAAQ3pE,EAAR,GAAc,oBAAmB,KAAKA,EAAzB,EAAzB;MACAs5D,MAAA,CAAOv5D,YAAP,CAAoB,kBAApB,EAAwCC,EAAxC;MAEA,MAAM4pE,qBAAA,GAAwB,GAA9B;MACAtQ,MAAA,CAAOhxD,gBAAP,CAAwB,YAAxB,EAAsC,MAAM;QAC1C,KAAK,CAAAq7D,qBAAL,GAA8BpgE,UAAA,CAAW,MAAM;UAC7C,KAAK,CAAAogE,qBAAL,GAA8B,IAA9B;UACA,KAAK,CAAAD,cAAL,CAAqBpjE,SAArB,CAA+BC,GAA/B,CAAmC,MAAnC;UACA,KAAK0vD,UAAL,CAAgB6N,SAAhB,CAA0Bt1D,QAA1B,CAAmC,iBAAnC,EAAsD;YACpDC,MAAA,EAAQ,IAD4C;YAEpD0sB,OAAA,EAAS;cACP3pB,IAAA,EAAM,SADC;cAEPxQ,OAAA,EAAS,KAAK+iE,UAFP;cAGP9iE,IAAA,EAAM;gBACJ0J,MAAA,EAAQ;cADJ;YAHC;UAF2C,CAAtD;QAH6C,CAAjB,EAa3BilE,qBAb2B,CAA9B;MAD0C,CAA5C;MAgBAtQ,MAAA,CAAOhxD,gBAAP,CAAwB,YAAxB,EAAsC,MAAM;QAC1C,IAAI,KAAK,CAAAq7D,qBAAT,EAAiC;UAC/Bj4C,YAAA,CAAa,KAAK,CAAAi4C,qBAAlB;UACA,KAAK,CAAAA,qBAAL,GAA8B,IAA9B;QAF+B;QAIjC,KAAK,CAAAD,cAAL,EAAsBpjE,SAAtB,CAAgC2S,MAAhC,CAAuC,MAAvC;MAL0C,CAA5C;IAxBY;IAgCd02D,OAAA,CAAQrY,SAAR,GAAoB,KAAK,CAAAkS,iBAAL,GAChB,MAAMnpD,gBAAA,CAAiB24C,YAAjB,CAA8BtoD,GAA9B,CACJ,0CADI,CADU,GAIhB,KAAK,CAAAy0D,OAJT;IAMA,IAAI,CAACwK,OAAA,CAAQ/iB,UAAb,EAAyB;MACvB0S,MAAA,CAAOtzD,MAAP,CAAc2jE,OAAd;IADuB;IAIzB,MAAM9kE,OAAA,GAAU,KAAK65D,kBAAL,EAAhB;IACA75D,OAAA,EAAS9E,YAAT,CAAsB,kBAAtB,EAA0C4pE,OAAA,CAAQ3pE,EAAlD;EA7D6B;EAgE/B,CAAA8mE,oBAAqBpxC,OAAA,GAAU,KAA/B,EAAsC;IACpC,IAAI,CAAC,KAAK,CAAA+tC,aAAV,EAA0B;MACxB;IADwB;IAG1B,IAAI,CAAC/tC,OAAD,IAAY,KAAK,CAAAiuC,qBAArB,EAA6C;MAC3Cj4C,YAAA,CAAa,KAAK,CAAAi4C,qBAAlB;MACA,KAAK,CAAAA,qBAAL,GAA8B,IAA9B;IAF2C;IAI7C,KAAK,CAAAF,aAAL,CAAoB7/D,QAApB,GAA+B,CAAC8xB,OAAhC;EARoC;EAWtCm0C,cAAA,EAAgB;IACd,IAAI,CAAC,KAAK,CAAApG,aAAV,EAA0B;MACxB;IADwB;IAG1B,KAAK,CAAAA,aAAL,CAAoBxgE,MAApB,GAA6B,KAA7B;IACA,KAAK,CAAAwgE,aAAL,CAAoBngE,KAApB,CAA0B;MAAEwmE,YAAA,EAAc,KAAK,CAAAlG;IAArB,CAA1B;IACA,KAAK,CAAAA,sBAAL,GAA+B,KAA/B;EANc;EAShBmG,oBAAA,EAAsB;IACpB,OAAO,KAAKpjE,GAAL,CAASkrD,qBAAT,EAAP;EADoB;EAItB,IAAIoN,WAAJA,CAAA,EAAkB;IAChB,OAAO;MACLE,OAAA,EAAS,KAAK,CAAAA,OADT;MAELD,UAAA,EAAY,KAAK,CAAAsE;IAFZ,CAAP;EADgB;EAUlB,IAAIvE,WAAJA,CAAgB;IAAEE,OAAF;IAAWD;EAAX,CAAhB,EAAyC;IACvC,IAAI,KAAK,CAAAC,OAAL,KAAkBA,OAAlB,IAA6B,KAAK,CAAAqE,iBAAL,KAA4BtE,UAA7D,EAAyE;MACvE;IADuE;IAGzE,KAAK,CAAAC,OAAL,GAAgBA,OAAhB;IACA,KAAK,CAAAqE,iBAAL,GAA0BtE,UAA1B;IACA,KAAK,CAAAuK,qBAAL;EANuC;EAazC7iE,OAAA,EAAS;IACP,KAAKD,GAAL,GAAW9G,QAAA,CAASC,aAAT,CAAuB,KAAvB,CAAX;IACA,KAAK6G,GAAL,CAAS5G,YAAT,CAAsB,sBAAtB,EAA+C,OAAM,KAAKc,QAAX,IAAuB,GAAtE;IACA,KAAK8F,GAAL,CAAS8O,SAAT,GAAqB,KAAKjR,IAA1B;IACA,KAAKmC,GAAL,CAAS5G,YAAT,CAAsB,IAAtB,EAA4B,KAAKC,EAAjC;IACA,KAAK2G,GAAL,CAAS5G,YAAT,CAAsB,UAAtB,EAAkC,CAAlC;IAEA,KAAKm5D,eAAL;IAEA,KAAKvyD,GAAL,CAAS2B,gBAAT,CAA0B,SAA1B,EAAqC,KAAK,CAAA07D,YAA1C;IACA,KAAKr9D,GAAL,CAAS2B,gBAAT,CAA0B,UAA1B,EAAsC,KAAK,CAAA27D,aAA3C;IAEA,MAAM,CAACntD,WAAD,EAAc66C,YAAd,IAA8B,KAAKC,gBAAzC;IACA,IAAI,KAAKI,cAAL,GAAsB,GAAtB,KAA8B,CAAlC,EAAqC;MACnC,KAAKrrD,GAAL,CAASzG,KAAT,CAAe8pE,QAAf,GAA0B,GAAI,CAAC,MAAMrY,YAAP,GAAuB76C,WAAvB,EAAoCovD,OAArC,CAC3B,CAD2B,CAE3B,GAFF;MAGA,KAAKv/D,GAAL,CAASzG,KAAT,CAAe+pE,SAAf,GAA2B,GACzB,CAAC,MAAMnzD,WAAP,GACA66C,YADA,EAEAuU,OAH4B,CAGpB,CAHoB,CAGjB,GAHb;IAJmC;IAUrC,MAAM,CAACz8B,EAAD,EAAKC,EAAL,IAAW,KAAKymB,qBAAL,EAAjB;IACA,KAAKzzB,SAAL,CAAe+M,EAAf,EAAmBC,EAAnB;IAEAgjB,qDAAA,CAAW,IAAX,EAAiB,KAAK/lD,GAAtB,EAA2B,CAAC,aAAD,CAA3B;IAEA,OAAO,KAAKA,GAAZ;EA5BO;EAmCTm5D,YAAYp9D,KAAZ,EAAmB;IACjB,MAAM;MAAE+J;IAAF,IAAYhT,wDAAA,CAAY+S,QAA9B;IACA,IAAI9J,KAAA,CAAM42D,MAAN,KAAiB,CAAjB,IAAuB52D,KAAA,CAAMiK,OAAN,IAAiBF,KAA5C,EAAoD;MAElD/J,KAAA,CAAM4O,cAAN;MACA;IAHkD;IAMpD,KAAK,CAAA8yD,cAAL,GAAuB,IAAvB;IAEA,KAAK,CAAA8F,gBAAL,CAAuBxnE,KAAvB;EAViB;EAanB,CAAAwnE,iBAAkBxnE,KAAlB,EAAyB;IACvB,IAAI,CAAC,KAAKkuD,YAAV,EAAwB;MACtB;IADsB;IAIxB,MAAMmS,UAAA,GAAa,KAAK9S,UAAL,CAAgB8S,UAAhB,CAA2B,IAA3B,CAAnB;IACA,KAAK9S,UAAL,CAAgBia,gBAAhB;IAEA,IAAIhD,kBAAJ,EAAwBiD,mBAAxB;IACA,IAAIpH,UAAJ,EAAgB;MACdmE,kBAAA,GAAqB;QAAEC,OAAA,EAAS,IAAX;QAAiBC,OAAA,EAAS;MAA1B,CAArB;MACA+C,mBAAA,GAAsB30D,CAAA,IAAK;QACzB,MAAM,CAACi0B,EAAD,EAAKC,EAAL,IAAW,KAAKg8B,uBAAL,CAA6BlwD,CAAA,CAAE2zD,SAA/B,EAA0C3zD,CAAA,CAAE4zD,SAA5C,CAAjB;QACA,KAAKnZ,UAAL,CAAgBma,mBAAhB,CAAoC3gC,EAApC,EAAwCC,EAAxC;MAFyB,CAA3B;MAIA/kB,MAAA,CAAOrc,gBAAP,CACE,aADF,EAEE6hE,mBAFF,EAGEjD,kBAHF;IANc;IAahB,MAAMU,iBAAA,GAAoBA,CAAA,KAAM;MAC9BjjD,MAAA,CAAOzR,mBAAP,CAA2B,WAA3B,EAAwC00D,iBAAxC;MACAjjD,MAAA,CAAOzR,mBAAP,CAA2B,MAA3B,EAAmC00D,iBAAnC;MACA,IAAI7E,UAAJ,EAAgB;QACdp+C,MAAA,CAAOzR,mBAAP,CACE,aADF,EAEEi3D,mBAFF,EAGEjD,kBAHF;MADc;MAQhB,KAAK,CAAA9C,cAAL,GAAuB,KAAvB;MACA,IAAI,CAAC,KAAKnU,UAAL,CAAgBoa,cAAhB,EAAL,EAAuC;QACrC,MAAM;UAAE59D;QAAF,IAAYhT,wDAAA,CAAY+S,QAA9B;QACA,IACG9J,KAAA,CAAMiK,OAAN,IAAiB,CAACF,KAAnB,IACA/J,KAAA,CAAMyK,QADN,IAECzK,KAAA,CAAMgK,OAAN,IAAiBD,KAHpB,EAIE;UACA,KAAKxN,MAAL,CAAY6jE,cAAZ,CAA2B,IAA3B;QADA,CAJF,MAMO;UACL,KAAK7jE,MAAL,CAAY4jE,WAAZ,CAAwB,IAAxB;QADK;MAR8B;IAZT,CAAhC;IAyBAl+C,MAAA,CAAOrc,gBAAP,CAAwB,WAAxB,EAAqCs/D,iBAArC;IAIAjjD,MAAA,CAAOrc,gBAAP,CAAwB,MAAxB,EAAgCs/D,iBAAhC;EAnDuB;EAsDzBvO,UAAA,EAAY;IAIV,IAAI,KAAK,CAAAiL,gBAAT,EAA4B;MAC1B54C,YAAA,CAAa,KAAK,CAAA44C,gBAAlB;IAD0B;IAG5B,KAAK,CAAAA,gBAAL,GAAyB/gE,UAAA,CAAW,MAAM;MACxC,KAAK,CAAA+gE,gBAAL,GAAyB,IAAzB;MACA,KAAKrlE,MAAL,EAAaijE,eAAb,CAA6B,IAA7B;IAFwC,CAAjB,EAGtB,CAHsB,CAAzB;EAPU;EAaZoI,sBAAsBrrE,MAAtB,EAA8B1H,CAA9B,EAAiCI,CAAjC,EAAoC;IAClCsH,MAAA,CAAO8iE,YAAP,CAAoB,IAApB;IACA,KAAKxqE,CAAL,GAASA,CAAT;IACA,KAAKI,CAAL,GAASA,CAAT;IACA,KAAKs6D,iBAAL;EAJkC;EAUpC+B,QAAQvqB,EAAR,EAAYC,EAAZ,EAAgB;IACd,MAAMvf,KAAA,GAAQ,KAAKolC,WAAnB;IACA,MAAM,CAAC/uD,SAAD,EAAYC,UAAZ,IAA0B,KAAK0yD,cAArC;IACA,MAAM,CAACzyD,KAAD,EAAQC,KAAR,IAAiB,KAAKyyD,eAA5B;IACA,MAAMwH,MAAA,GAASnxB,EAAA,GAAKtf,KAApB;IACA,MAAM0wC,MAAA,GAASnxB,EAAA,GAAKvf,KAApB;IACA,MAAM5yB,CAAA,GAAI,KAAKA,CAAL,GAASiJ,SAAnB;IACA,MAAM7I,CAAA,GAAI,KAAKA,CAAL,GAAS8I,UAAnB;IACA,MAAM9F,KAAA,GAAQ,KAAKA,KAAL,GAAa6F,SAA3B;IACA,MAAM5F,MAAA,GAAS,KAAKA,MAAL,GAAc6F,UAA7B;IAEA,QAAQ,KAAKI,QAAb;MACE,KAAK,CAAL;QACE,OAAO,CACLtJ,CAAA,GAAIqjE,MAAJ,GAAal6D,KADR,EAELD,UAAA,GAAa9I,CAAb,GAAiBkjE,MAAjB,GAA0BjgE,MAA1B,GAAmC+F,KAF9B,EAGLpJ,CAAA,GAAIqjE,MAAJ,GAAajgE,KAAb,GAAqB+F,KAHhB,EAILD,UAAA,GAAa9I,CAAb,GAAiBkjE,MAAjB,GAA0Bl6D,KAJrB,CAAP;MAMF,KAAK,EAAL;QACE,OAAO,CACLpJ,CAAA,GAAIsjE,MAAJ,GAAan6D,KADR,EAELD,UAAA,GAAa9I,CAAb,GAAiBijE,MAAjB,GAA0Bj6D,KAFrB,EAGLpJ,CAAA,GAAIsjE,MAAJ,GAAajgE,MAAb,GAAsB8F,KAHjB,EAILD,UAAA,GAAa9I,CAAb,GAAiBijE,MAAjB,GAA0BjgE,KAA1B,GAAkCgG,KAJ7B,CAAP;MAMF,KAAK,GAAL;QACE,OAAO,CACLpJ,CAAA,GAAIqjE,MAAJ,GAAajgE,KAAb,GAAqB+F,KADhB,EAELD,UAAA,GAAa9I,CAAb,GAAiBkjE,MAAjB,GAA0Bl6D,KAFrB,EAGLpJ,CAAA,GAAIqjE,MAAJ,GAAal6D,KAHR,EAILD,UAAA,GAAa9I,CAAb,GAAiBkjE,MAAjB,GAA0BjgE,MAA1B,GAAmC+F,KAJ9B,CAAP;MAMF,KAAK,GAAL;QACE,OAAO,CACLpJ,CAAA,GAAIsjE,MAAJ,GAAajgE,MAAb,GAAsB8F,KADjB,EAELD,UAAA,GAAa9I,CAAb,GAAiBijE,MAAjB,GAA0BjgE,KAA1B,GAAkCgG,KAF7B,EAGLpJ,CAAA,GAAIsjE,MAAJ,GAAan6D,KAHR,EAILD,UAAA,GAAa9I,CAAb,GAAiBijE,MAAjB,GAA0Bj6D,KAJrB,CAAP;MAMF;QACE,MAAM,IAAI2e,KAAJ,CAAU,kBAAV,CAAN;IA9BJ;EAXc;EA6ChBirD,uBAAuB7vE,IAAvB,EAA6B+F,UAA7B,EAAyC;IACvC,MAAM,CAACq9B,EAAD,EAAKE,EAAL,EAASE,EAAT,EAAaC,EAAb,IAAmBzjC,IAAzB;IAEA,MAAMC,KAAA,GAAQujC,EAAA,GAAKJ,EAAnB;IACA,MAAMljC,MAAA,GAASujC,EAAA,GAAKH,EAApB;IAEA,QAAQ,KAAKn9B,QAAb;MACE,KAAK,CAAL;QACE,OAAO,CAACi9B,EAAD,EAAKr9B,UAAA,GAAa09B,EAAlB,EAAsBxjC,KAAtB,EAA6BC,MAA7B,CAAP;MACF,KAAK,EAAL;QACE,OAAO,CAACkjC,EAAD,EAAKr9B,UAAA,GAAau9B,EAAlB,EAAsBpjC,MAAtB,EAA8BD,KAA9B,CAAP;MACF,KAAK,GAAL;QACE,OAAO,CAACujC,EAAD,EAAKz9B,UAAA,GAAau9B,EAAlB,EAAsBrjC,KAAtB,EAA6BC,MAA7B,CAAP;MACF,KAAK,GAAL;QACE,OAAO,CAACsjC,EAAD,EAAKz9B,UAAA,GAAa09B,EAAlB,EAAsBvjC,MAAtB,EAA8BD,KAA9B,CAAP;MACF;QACE,MAAM,IAAI2kB,KAAJ,CAAU,kBAAV,CAAN;IAVJ;EANuC;EAuBzC2xC,UAAA,EAAY;EAMZ7N,QAAA,EAAU;IACR,OAAO,KAAP;EADQ;EAOVkN,eAAA,EAAiB;IACf,KAAK,CAAAC,YAAL,GAAqB,IAArB;EADe;EAOjBM,gBAAA,EAAkB;IAChB,KAAK,CAAAN,YAAL,GAAqB,KAArB;EADgB;EAQlBA,aAAA,EAAe;IACb,OAAO,KAAK,CAAAA,YAAZ;EADa;EASfiC,wBAAA,EAA0B;IACxB,OAAO,KAAK,CAAA6R,2BAAZ;EADwB;EAQ1BhC,iBAAA,EAAmB;IACjB,OAAO,KAAK17D,GAAL,IAAY,CAAC,KAAK0pD,eAAzB;EADiB;EASnBD,QAAA,EAAU;IACR,KAAKzpD,GAAL,EAAU2B,gBAAV,CAA2B,SAA3B,EAAsC,KAAK,CAAA07D,YAA3C;IACA,KAAKr9D,GAAL,EAAU2B,gBAAV,CAA2B,UAA3B,EAAuC,KAAK,CAAA27D,aAA5C;EAFQ;EAeVnoD,UAAUg4C,YAAA,GAAe,KAAzB,EAAgCn4C,OAAA,GAAU,IAA1C,EAAgD;IAC9C/hB,4DAAA,CAAY,gCAAZ;EAD8C;EAahD,OAAO85D,WAAPA,CAAmBz4D,IAAnB,EAAyBgE,MAAzB,EAAiC00D,SAAjC,EAA4C;IAC1C,MAAME,MAAA,GAAS,IAAI,KAAKxgD,SAAL,CAAenV,WAAnB,CAA+B;MAC5Ce,MAD4C;MAE5Ce,EAAA,EAAIf,MAAA,CAAOqjE,SAAP,EAFwC;MAG5C3O;IAH4C,CAA/B,CAAf;IAKAE,MAAA,CAAOhzD,QAAP,GAAkB5F,IAAA,CAAK4F,QAAvB;IAEA,MAAM,CAACL,SAAD,EAAYC,UAAZ,IAA0BozD,MAAA,CAAOV,cAAvC;IACA,MAAM,CAAC57D,CAAD,EAAII,CAAJ,EAAOgD,KAAP,EAAcC,MAAd,IAAwBi5D,MAAA,CAAO0W,sBAAP,CAC5BtvE,IAAA,CAAKP,IADuB,EAE5B+F,UAF4B,CAA9B;IAIAozD,MAAA,CAAOt8D,CAAP,GAAWA,CAAA,GAAIiJ,SAAf;IACAqzD,MAAA,CAAOl8D,CAAP,GAAWA,CAAA,GAAI8I,UAAf;IACAozD,MAAA,CAAOl5D,KAAP,GAAeA,KAAA,GAAQ6F,SAAvB;IACAqzD,MAAA,CAAOj5D,MAAP,GAAgBA,MAAA,GAAS6F,UAAzB;IAEA,OAAOozD,MAAP;EAlB0C;EAyB5C5gD,OAAA,EAAS;IACP,KAAKtM,GAAL,CAASuM,mBAAT,CAA6B,SAA7B,EAAwC,KAAK,CAAA8wD,YAA7C;IACA,KAAKr9D,GAAL,CAASuM,mBAAT,CAA6B,UAA7B,EAAyC,KAAK,CAAA+wD,aAA9C;IAEA,IAAI,CAAC,KAAK7gB,OAAL,EAAL,EAAqB;MAGnB,KAAK8O,MAAL;IAHmB;IAKrB,IAAI,KAAKjzD,MAAT,EAAiB;MACf,KAAKA,MAAL,CAAYgU,MAAZ,CAAmB,IAAnB;IADe,CAAjB,MAEO;MACL,KAAKg9C,UAAL,CAAgB6R,YAAhB,CAA6B,IAA7B;IADK;IAMP,KAAK,CAAA2B,aAAL,EAAqBxwD,MAArB;IACA,KAAK,CAAAwwD,aAAL,GAAsB,IAAtB;IACA,KAAK,CAAAC,cAAL,GAAuB,IAAvB;IACA,IAAI,KAAK,CAAAY,gBAAT,EAA4B;MAC1B54C,YAAA,CAAa,KAAK,CAAA44C,gBAAlB;MACA,KAAK,CAAAA,gBAAL,GAAyB,IAAzB;IAF0B;IAI5B,KAAK,CAAAiB,YAAL;EAxBO;EA8BT,IAAI3L,WAAJA,CAAA,EAAkB;IAChB,OAAO,KAAP;EADgB;EAOlBT,cAAA,EAAgB;IACd,IAAI,KAAKS,WAAT,EAAsB;MACpB,KAAK,CAAA+M,cAAL;MACA,KAAK,CAAA7C,WAAL,CAAkBxjE,SAAlB,CAA4B2S,MAA5B,CAAmC,QAAnC;MACAy5C,qDAAA,CAAW,IAAX,EAAiB,KAAK/lD,GAAtB,EAA2B,CAAC,SAAD,CAA3B;IAHoB;EADR;EAYhBgsD,QAAQjwD,KAAR,EAAe;IACb,IACE,CAAC,KAAKk3D,WAAN,IACAl3D,KAAA,CAAMI,MAAN,KAAiB,KAAK6D,GADtB,IAEAjE,KAAA,CAAMyM,GAAN,KAAc,OAHhB,EAIE;MACA;IADA;IAGF,KAAK8gD,UAAL,CAAgB4S,WAAhB,CAA4B,IAA5B;IACA,KAAK,CAAAkB,eAAL,GAAwB;MACtBsD,MAAA,EAAQ,KAAK9vE,CADS;MAEtB+vE,MAAA,EAAQ,KAAK3vE,CAFS;MAGtB4vE,UAAA,EAAY,KAAK5sE,KAHK;MAItB6sE,WAAA,EAAa,KAAK5sE;IAJI,CAAxB;IAMA,MAAMsZ,QAAA,GAAW,KAAK,CAAA4vD,WAAL,CAAkB5vD,QAAnC;IACA,IAAI,CAAC,KAAK,CAAAqvD,cAAV,EAA2B;MACzB,KAAK,CAAAA,cAAL,GAAuBx7D,KAAA,CAAMmS,IAAN,CAAWhG,QAAX,CAAvB;MACA,MAAMs2D,mBAAA,GAAsB,KAAK,CAAAC,cAAL,CAAqB51D,IAArB,CAA0B,IAA1B,CAA5B;MACA,MAAM61D,gBAAA,GAAmB,KAAK,CAAAC,WAAL,CAAkB91D,IAAlB,CAAuB,IAAvB,CAAzB;MACA,WAAWlO,GAAX,IAAkB,KAAK,CAAA48D,cAAvB,EAAwC;QACtC,MAAM/+D,IAAA,GAAOmC,GAAA,CAAIY,YAAJ,CAAiB,mBAAjB,CAAb;QACAZ,GAAA,CAAI5G,YAAJ,CAAiB,MAAjB,EAAyB,YAAzB;QACA4G,GAAA,CAAI2B,gBAAJ,CAAqB,SAArB,EAAgCkiE,mBAAhC;QACA7jE,GAAA,CAAI2B,gBAAJ,CAAqB,MAArB,EAA6BoiE,gBAA7B;QACA/jE,GAAA,CAAI2B,gBAAJ,CAAqB,OAArB,EAA8B,KAAK,CAAAsiE,YAAL,CAAmB/1D,IAAnB,CAAwB,IAAxB,EAA8BrQ,IAA9B,CAA9B;QACA6V,gBAAA,CAAiB24C,YAAjB,CACGtoD,GADH,CACQ,8BAA6BlG,IAA9B,EADP,EAEG2e,IAFH,CAEQkmC,GAAA,IAAO1iD,GAAA,CAAI5G,YAAJ,CAAiB,YAAjB,EAA+BspD,GAA/B,CAFf;MANsC;IAJf;IAkB3B,MAAMkR,KAAA,GAAQ,KAAK,CAAAgJ,cAAL,CAAqB,CAArB,CAAd;IACA,IAAIsH,aAAA,GAAgB,CAApB;IACA,WAAWlkE,GAAX,IAAkBuN,QAAlB,EAA4B;MAC1B,IAAIvN,GAAA,KAAQ4zD,KAAZ,EAAmB;QACjB;MADiB;MAGnBsQ,aAAA;IAJ0B;IAM5B,MAAMC,iBAAA,GACD,OAAM,KAAKjqE,QAAX,GAAsB,KAAKmxD,cAA3B,IAA6C,GAA/C,GAAsD,EAAvD,IACC,KAAK,CAAAuR,cAAL,CAAqB/9D,MAArB,GAA8B,CAA9B,CAFH;IAIA,IAAIslE,iBAAA,KAAsBD,aAA1B,EAAyC;MAGvC,IAAIC,iBAAA,GAAoBD,aAAxB,EAAuC;QACrC,KAAK,IAAIj3D,CAAA,GAAI,CAAR,EAAWA,CAAA,GAAIi3D,aAAA,GAAgBC,iBAApC,EAAuDl3D,CAAA,EAAvD,EAA4D;UAC1D,KAAK,CAAAkwD,WAAL,CAAkB99D,MAAlB,CAAyB,KAAK,CAAA89D,WAAL,CAAkB3qD,UAA3C;QAD0D;MADvB,CAAvC,MAIO,IAAI2xD,iBAAA,GAAoBD,aAAxB,EAAuC;QAC5C,KAAK,IAAIj3D,CAAA,GAAI,CAAR,EAAWA,CAAA,GAAIk3D,iBAAA,GAAoBD,aAAxC,EAAuDj3D,CAAA,EAAvD,EAA4D;UAC1D,KAAK,CAAAkwD,WAAL,CAAkB3qD,UAAlB,CAA6BhF,MAA7B,CAAoC,KAAK,CAAA2vD,WAAL,CAAkB3xD,SAAtD;QAD0D;MADhB;MAM9C,IAAIyB,CAAA,GAAI,CAAR;MACA,WAAWm3D,KAAX,IAAoB72D,QAApB,EAA8B;QAC5B,MAAMvN,GAAA,GAAM,KAAK,CAAA48D,cAAL,CAAqB3vD,CAAA,EAArB,CAAZ;QACA,MAAMpP,IAAA,GAAOmC,GAAA,CAAIY,YAAJ,CAAiB,mBAAjB,CAAb;QACA8S,gBAAA,CAAiB24C,YAAjB,CACGtoD,GADH,CACQ,8BAA6BlG,IAA9B,EADP,EAEG2e,IAFH,CAEQkmC,GAAA,IAAO0hB,KAAA,CAAMhrE,YAAN,CAAmB,YAAnB,EAAiCspD,GAAjC,CAFf;MAH4B;IAdS;IAuBzC,KAAK,CAAA2hB,kBAAL,CAAyB,CAAzB;IACA,KAAK,CAAA3G,2BAAL,GAAoC,IAApC;IACA,KAAK,CAAAP,WAAL,CAAkB3qD,UAAlB,CAA6B7V,KAA7B,CAAmC;MAAEwmE,YAAA,EAAc;IAAhB,CAAnC;IACApnE,KAAA,CAAM4O,cAAN;IACA5O,KAAA,CAAMuoE,wBAAN;EAzEa;EA4Ef,CAAAR,eAAgB/nE,KAAhB,EAAuB;IACrB2X,gBAAA,CAAiBsqD,uBAAjB,CAAyC5a,IAAzC,CAA8C,IAA9C,EAAoDrnD,KAApD;EADqB;EAIvB,CAAAioE,YAAajoE,KAAb,EAAoB;IAClB,IACE,KAAK,CAAA2hE,2BAAL,IACA3hE,KAAA,CAAM4K,aAAN,EAAqBs5C,UAArB,KAAoC,KAAK,CAAAkd,WAF3C,EAGE;MACA,KAAK,CAAAyB,YAAL;IADA;EAJgB;EASpB,CAAAqF,aAAcpmE,IAAd,EAAoB;IAClB,KAAK,CAAA2/D,kBAAL,GAA2B,KAAK,CAAAE,2BAAL,GAAoC7/D,IAApC,GAA2C,EAAtE;EADkB;EAIpB,CAAAwmE,mBAAoBv/D,KAApB,EAA2B;IACzB,IAAI,CAAC,KAAK,CAAA83D,cAAV,EAA2B;MACzB;IADyB;IAG3B,WAAW58D,GAAX,IAAkB,KAAK,CAAA48D,cAAvB,EAAwC;MACtC58D,GAAA,CAAI1G,QAAJ,GAAewL,KAAf;IADsC;EAJf;EAS3Bo5D,oBAAoBttE,CAApB,EAAuBI,CAAvB,EAA0B;IACxB,IAAI,CAAC,KAAK,CAAA0sE,2BAAV,EAAwC;MACtC;IADsC;IAGxC,KAAK,CAAA2C,kBAAL,CAAyB,KAAK,CAAA7C,kBAA9B,EAAmD;MACjDgF,SAAA,EAAW5xE,CADsC;MAEjD6xE,SAAA,EAAWzxE;IAFsC,CAAnD;EAJwB;EAU1B,CAAA4tE,aAAA,EAAgB;IACd,KAAK,CAAAlB,2BAAL,GAAoC,KAApC;IACA,KAAK,CAAA2G,kBAAL,CAAyB,CAAC,CAA1B;IACA,IAAI,KAAK,CAAAjH,eAAT,EAA2B;MACzB,MAAM;QAAEsD,MAAF;QAAUC,MAAV;QAAkBC,UAAlB;QAA8BC;MAA9B,IAA8C,KAAK,CAAAzD,eAAzD;MACA,KAAK,CAAA8D,oBAAL,CAA2BR,MAA3B,EAAmCC,MAAnC,EAA2CC,UAA3C,EAAuDC,WAAvD;MACA,KAAK,CAAAzD,eAAL,GAAwB,IAAxB;IAHyB;EAHb;EAUhBe,0BAAA,EAA4B;IAC1B,KAAK,CAAAS,YAAL;IACA,KAAK5+D,GAAL,CAASrD,KAAT;EAF0B;EAQ5B4nE,OAAA,EAAS;IACP,KAAK/R,aAAL;IACA,KAAKxyD,GAAL,EAAUrG,SAAV,CAAoBC,GAApB,CAAwB,gBAAxB;EAFO;EAQTyiE,SAAA,EAAW;IACT,KAAK,CAAAc,WAAL,EAAmBxjE,SAAnB,CAA6BC,GAA7B,CAAiC,QAAjC;IACA,KAAKoG,GAAL,EAAUrG,SAAV,CAAoB2S,MAApB,CAA2B,gBAA3B;IACA,IAAI,KAAKtM,GAAL,EAAUw7D,QAAV,CAAmBtiE,QAAA,CAAS4Q,aAA5B,CAAJ,EAAgD;MAG9C,KAAKw/C,UAAL,CAAgB6B,YAAhB,CAA6BnrD,GAA7B,CAAiCrD,KAAjC;IAH8C;EAHvC;EAeX0rD,aAAaxjD,IAAb,EAAmBC,KAAnB,EAA0B;EAM1BmnD,eAAA,EAAiB;IACf,IAAI,KAAK,CAAA6Q,aAAT,EAAyB;MACvB,KAAK,CAAAA,aAAL,CAAoBxgE,MAApB,GAA6B,IAA7B;IADuB;EADV;EAUjB4vD,cAAA,EAAgB;IACd,IAAI,KAAK,CAAA4Q,aAAT,EAAyB;MACvB,KAAK,CAAAA,aAAL,CAAoBxgE,MAApB,GAA6B,KAA7B;IADuB;EADX;EAShBwvD,gBAAA,EAAkB;EAKlBiM,mBAAA,EAAqB;IACnB,OAAO,IAAP;EADmB;EAQrB,IAAIjL,UAAJA,CAAA,EAAiB;IACf,OAAO,KAAK9sD,GAAZ;EADe;EAQjB,IAAImqD,SAAJA,CAAA,EAAgB;IACd,OAAO,KAAK,CAAAA,SAAZ;EADc;EAQhB,IAAIA,SAAJA,CAAcrlD,KAAd,EAAqB;IACnB,KAAK,CAAAqlD,SAAL,GAAkBrlD,KAAlB;IACA,IAAI,CAAC,KAAKxM,MAAV,EAAkB;MAChB;IADgB;IAGlB,IAAIwM,KAAJ,EAAW;MACT,KAAKxM,MAAL,CAAY4jE,WAAZ,CAAwB,IAAxB;MACA,KAAK5jE,MAAL,CAAYqiE,eAAZ,CAA4B,IAA5B;IAFS,CAAX,MAGO;MACL,KAAKriE,MAAL,CAAYqiE,eAAZ,CAA4B,IAA5B;IADK;EARY;EAkBrBxH,eAAen/D,KAAf,EAAsBC,MAAtB,EAA8B;IAC5B,KAAK,CAAAipE,eAAL,GAAwB,IAAxB;IACA,MAAMsH,WAAA,GAAcxwE,KAAA,GAAQC,MAA5B;IACA,MAAM;MAAEsF;IAAF,IAAY,KAAKyG,GAAvB;IACAzG,KAAA,CAAMirE,WAAN,GAAoBA,WAApB;IACAjrE,KAAA,CAAMtF,MAAN,GAAe,MAAf;EAL4B;EAQ9B,WAAW4gE,QAAXA,CAAA,EAAsB;IACpB,OAAO,EAAP;EADoB;AAtkDD;AA4kDvB,MAAM4J,UAAN,SAAyB/qD,gBAAzB,CAA0C;EACxCnc,YAAYmb,MAAZ,EAAoB;IAClB,MAAMA,MAAN;IACA,KAAK45C,mBAAL,GAA2B55C,MAAA,CAAO45C,mBAAlC;IACA,KAAKW,OAAL,GAAe,IAAf;EAHkB;EAMpB93C,UAAA,EAAY;IACV,OAAO;MACL9b,EAAA,EAAI,KAAKizD,mBADJ;MAELW,OAAA,EAAS,IAFJ;MAGLvqC,SAAA,EAAW,KAAKA;IAHX,CAAP;EADU;AAP4B;;;;;;;;;;;;;;;;;;AChmD1C;AAUA;AAEA,SAASqjC,UAATA,CAAoBxxC,GAApB,EAAyBrW,OAAzB,EAAkC2I,KAAlC,EAAyC;EACvC,WAAWhJ,IAAX,IAAmBgJ,KAAnB,EAA0B;IACxB3I,OAAA,CAAQyD,gBAAR,CAAyB9D,IAAzB,EAA+B0W,GAAA,CAAI1W,IAAJ,EAAUqQ,IAAV,CAAeqG,GAAf,CAA/B;EADwB;AADa;AAWzC,SAASq5C,YAATA,CAAsBuB,OAAtB,EAA+B;EAC7B,OAAO9+D,IAAA,CAAKsX,KAAL,CAAWtX,IAAA,CAAKG,GAAL,CAAS,GAAT,EAAcH,IAAA,CAAKE,GAAL,CAAS,CAAT,EAAY,MAAM4+D,OAAlB,CAAd,CAAX,EACJ1+D,QADI,CACK,EADL,EAEJC,QAFI,CAEK,CAFL,EAEQ,GAFR,CAAP;AAD6B;AAS/B,MAAMi0E,SAAN,CAAgB;EACd,CAAAtrE,EAAA,GAAM,CAAN;EAMAuiE,MAAA,EAAQ;IACN,OAAO,GAAG6I,mEAAH,GAA4B,KAAK,CAAAprE,EAAL,EAA5B,EAAP;EADM;AAPM;AAoBhB,MAAMurE,YAAN,CAAmB;EACjB,CAAAC,MAAA,GAAUH,wDAAA,EAAV;EAEA,CAAArrE,EAAA,GAAM,CAAN;EAEA,CAAA6oC,KAAA,GAAS,IAAT;EAEA,WAAW4iC,mBAAXA,CAAA,EAAiC;IAM/B,MAAM3lE,GAAA,GAAO,sKAAb;IACA,MAAMiU,MAAA,GAAS,IAAIykD,eAAJ,CAAoB,CAApB,EAAuB,CAAvB,CAAf;IACA,MAAMlkC,GAAA,GAAMvgB,MAAA,CAAOof,UAAP,CAAkB,IAAlB,CAAZ;IACA,MAAMrtB,KAAA,GAAQ,IAAI4/D,KAAJ,EAAd;IACA5/D,KAAA,CAAMC,GAAN,GAAYjG,GAAZ;IACA,MAAMod,OAAA,GAAUpX,KAAA,CAAM6/D,MAAN,GAAexoD,IAAf,CAAoB,MAAM;MACxCmX,GAAA,CAAI8P,SAAJ,CAAct+B,KAAd,EAAqB,CAArB,EAAwB,CAAxB,EAA2B,CAA3B,EAA8B,CAA9B,EAAiC,CAAjC,EAAoC,CAApC,EAAuC,CAAvC,EAA0C,CAA1C;MACA,OAAO,IAAI+4B,WAAJ,CAAgBvK,GAAA,CAAIkX,YAAJ,CAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAvB,EAA0B,CAA1B,EAA6Bv2C,IAA7B,CAAkCypB,MAAlD,EAA0D,CAA1D,MAAiE,CAAxE;IAFwC,CAA1B,CAAhB;IAKA,OAAO/qB,uDAAA,CAAO,IAAP,EAAa,qBAAb,EAAoCupB,OAApC,CAAP;EAhB+B;EAmBjC,MAAM,CAAAxY,GAANA,CAAWyE,GAAX,EAAgBy8D,OAAhB,EAAyB;IACvB,KAAK,CAAA/iC,KAAL,KAAgB,IAAIp+B,GAAJ,EAAhB;IACA,IAAIxP,IAAA,GAAO,KAAK,CAAA4tC,KAAL,CAAYn+B,GAAZ,CAAgByE,GAAhB,CAAX;IACA,IAAIlU,IAAA,KAAS,IAAb,EAAmB;MAEjB,OAAO,IAAP;IAFiB;IAInB,IAAIA,IAAA,EAAM8gB,MAAV,EAAkB;MAChB9gB,IAAA,CAAK4wE,UAAL,IAAmB,CAAnB;MACA,OAAO5wE,IAAP;IAFgB;IAIlB,IAAI;MACFA,IAAA,KAAS;QACP8gB,MAAA,EAAQ,IADD;QAEP/b,EAAA,EAAK,SAAQ,KAAK,CAAAwrE,MAAQ,IAAG,KAAK,CAAAxrE,EAAL,EAAzB,EAFG;QAGP6rE,UAAA,EAAY,CAHL;QAIP1P,KAAA,EAAO;MAJA,CAAT;MAMA,IAAIrwD,KAAJ;MACA,IAAI,OAAO8/D,OAAP,KAAmB,QAAvB,EAAiC;QAC/B3wE,IAAA,CAAK6N,GAAL,GAAW8iE,OAAX;QAEA,MAAMlkB,QAAA,GAAW,MAAM1xB,KAAA,CAAM41C,OAAN,CAAvB;QACA,IAAI,CAAClkB,QAAA,CAASC,EAAd,EAAkB;UAChB,MAAM,IAAIroC,KAAJ,CAAUooC,QAAA,CAASE,UAAnB,CAAN;QADgB;QAGlB97C,KAAA,GAAQ,MAAM47C,QAAA,CAASokB,IAAT,EAAd;MAP+B,CAAjC,MAQO;QACLhgE,KAAA,GAAQ7Q,IAAA,CAAKud,IAAL,GAAYozD,OAApB;MADK;MAIP,IAAI9/D,KAAA,CAAMN,IAAN,KAAe,eAAnB,EAAoC;QAGlC,MAAMugE,4BAAA,GAA+BR,YAAA,CAAaE,mBAAlD;QACA,MAAMO,UAAA,GAAa,IAAIC,UAAJ,EAAnB;QACA,MAAMC,YAAA,GAAe,IAAIR,KAAJ,EAArB;QACA,MAAMS,YAAA,GAAe,IAAI3oD,OAAJ,CAAY,CAACC,OAAD,EAAUe,MAAV,KAAqB;UACpD0nD,YAAA,CAAaE,MAAb,GAAsB,MAAM;YAC1BnxE,IAAA,CAAK8gB,MAAL,GAAcmwD,YAAd;YACAjxE,IAAA,CAAKkhE,KAAL,GAAa,IAAb;YACA14C,OAAA;UAH0B,CAA5B;UAKAuoD,UAAA,CAAWI,MAAX,GAAoB,YAAY;YAC9B,MAAMtjE,GAAA,GAAO7N,IAAA,CAAKoxE,MAAL,GAAcL,UAAA,CAAWM,MAAtC;YAGAJ,YAAA,CAAangE,GAAb,GAAoB,OAAMggE,4BAAP,IACf,GAAGjjE,GAAI,qCADQ,GAEfA,GAFJ;UAJ8B,CAAhC;UAQAojE,YAAA,CAAaK,OAAb,GAAuBP,UAAA,CAAWO,OAAX,GAAqB/nD,MAA5C;QAdoD,CAAjC,CAArB;QAgBAwnD,UAAA,CAAWQ,aAAX,CAAyB1gE,KAAzB;QACA,MAAMqgE,YAAN;MAvBkC,CAApC,MAwBO;QACLlxE,IAAA,CAAK8gB,MAAL,GAAc,MAAM0wD,iBAAA,CAAkB3gE,KAAlB,CAApB;MADK;MAGP7Q,IAAA,CAAK4wE,UAAL,GAAkB,CAAlB;IA/CE,CAAJ,CAgDE,OAAOr2D,CAAP,EAAU;MACVk1C,OAAA,CAAQr+B,KAAR,CAAc7W,CAAd;MACAva,IAAA,GAAO,IAAP;IAFU;IAIZ,KAAK,CAAA4tC,KAAL,CAAYlvB,GAAZ,CAAgBxK,GAAhB,EAAqBlU,IAArB;IACA,IAAIA,IAAJ,EAAU;MACR,KAAK,CAAA4tC,KAAL,CAAYlvB,GAAZ,CAAgB1e,IAAA,CAAK+E,EAArB,EAAyB/E,IAAzB;IADQ;IAGV,OAAOA,IAAP;EAnEuB;EAsEzB,MAAMoiE,WAANA,CAAkB7kD,IAAlB,EAAwB;IACtB,MAAM;MAAEk0D,YAAF;MAAgBloE,IAAhB;MAAsB+N,IAAtB;MAA4B/G;IAA5B,IAAqCgN,IAA3C;IACA,OAAO,KAAK,CAAA9N,GAAL,CAAU,GAAGgiE,YAAa,IAAGloE,IAAK,IAAG+N,IAAK,IAAG/G,IAAnC,EAAV,EAAqDgN,IAArD,CAAP;EAFsB;EAKxB,MAAM4kD,UAANA,CAAiBt0D,GAAjB,EAAsB;IACpB,OAAO,KAAK,CAAA4B,GAAL,CAAU5B,GAAV,EAAeA,GAAf,CAAP;EADoB;EAItB,MAAMq0D,SAANA,CAAgBn9D,EAAhB,EAAoB;IAClB,KAAK,CAAA6oC,KAAL,KAAgB,IAAIp+B,GAAJ,EAAhB;IACA,MAAMxP,IAAA,GAAO,KAAK,CAAA4tC,KAAL,CAAYn+B,GAAZ,CAAgB1K,EAAhB,CAAb;IACA,IAAI,CAAC/E,IAAL,EAAW;MACT,OAAO,IAAP;IADS;IAGX,IAAIA,IAAA,CAAK8gB,MAAT,EAAiB;MACf9gB,IAAA,CAAK4wE,UAAL,IAAmB,CAAnB;MACA,OAAO5wE,IAAP;IAFe;IAKjB,IAAIA,IAAA,CAAKud,IAAT,EAAe;MACb,OAAO,KAAK6kD,WAAL,CAAiBpiE,IAAA,CAAKud,IAAtB,CAAP;IADa;IAGf,OAAO,KAAK4kD,UAAL,CAAgBniE,IAAA,CAAK6N,GAArB,CAAP;EAdkB;EAiBpB+1D,UAAU7+D,EAAV,EAAc;IACZ,MAAM/E,IAAA,GAAO,KAAK,CAAA4tC,KAAL,CAAYn+B,GAAZ,CAAgB1K,EAAhB,CAAb;IACA,IAAI,CAAC/E,IAAA,EAAMkhE,KAAX,EAAkB;MAChB,OAAO,IAAP;IADgB;IAGlB,OAAOlhE,IAAA,CAAKoxE,MAAZ;EALY;EAQd5O,SAASz9D,EAAT,EAAa;IACX,KAAK,CAAA6oC,KAAL,KAAgB,IAAIp+B,GAAJ,EAAhB;IACA,MAAMxP,IAAA,GAAO,KAAK,CAAA4tC,KAAL,CAAYn+B,GAAZ,CAAgB1K,EAAhB,CAAb;IACA,IAAI,CAAC/E,IAAL,EAAW;MACT;IADS;IAGXA,IAAA,CAAK4wE,UAAL,IAAmB,CAAnB;IACA,IAAI5wE,IAAA,CAAK4wE,UAAL,KAAoB,CAAxB,EAA2B;MACzB;IADyB;IAG3B5wE,IAAA,CAAK8gB,MAAL,GAAc,IAAd;EAVW;EAiBbijD,UAAUh/D,EAAV,EAAc;IACZ,OAAOA,EAAA,CAAGg0C,UAAH,CAAe,SAAQ,KAAK,CAAAw3B,MAAQ,GAApC,CAAP;EADY;AAnJG;AA8JnB,MAAMmB,cAAN,CAAqB;EACnB,CAAAC,QAAA,GAAY,EAAZ;EAEA,CAAAC,MAAA,GAAU,KAAV;EAEA,CAAAxpC,OAAA;EAEA,CAAAwhB,QAAA,GAAY,CAAC,CAAb;EAEA3mD,YAAYmlC,OAAA,GAAU,GAAtB,EAA2B;IACzB,KAAK,CAAAA,OAAL,GAAgBA,OAAhB;EADyB;EAkB3B9iC,IAAI;IACFovD,GADE;IAEFC,IAFE;IAGFC,QAHE;IAIFrkD,IAAA,GAAOqW,GAJL;IAKFiuC,mBAAA,GAAsB,KALpB;IAMFC,QAAA,GAAW;EANT,CAAJ,EAOG;IACD,IAAIF,QAAJ,EAAc;MACZF,GAAA;IADY;IAId,IAAI,KAAK,CAAAkd,MAAT,EAAkB;MAChB;IADgB;IAIlB,MAAM5pC,IAAA,GAAO;MAAE0sB,GAAF;MAAOC,IAAP;MAAapkD;IAAb,CAAb;IACA,IAAI,KAAK,CAAAq5C,QAAL,KAAmB,CAAC,CAAxB,EAA2B;MACzB,IAAI,KAAK,CAAA+nB,QAAL,CAAepnE,MAAf,GAAwB,CAA5B,EAA+B;QAG7B,KAAK,CAAAonE,QAAL,CAAepnE,MAAf,GAAwB,CAAxB;MAH6B;MAK/B,KAAK,CAAAq/C,QAAL,GAAiB,CAAjB;MACA,KAAK,CAAA+nB,QAAL,CAAexmE,IAAf,CAAoB68B,IAApB;MACA;IARyB;IAW3B,IAAI6sB,mBAAA,IAAuB,KAAK,CAAA8c,QAAL,CAAe,KAAK,CAAA/nB,QAApB,EAA+Br5C,IAA/B,KAAwCA,IAAnE,EAAyE;MAIvE,IAAIukD,QAAJ,EAAc;QACZ9sB,IAAA,CAAK2sB,IAAL,GAAY,KAAK,CAAAgd,QAAL,CAAe,KAAK,CAAA/nB,QAApB,EAA+B+K,IAA3C;MADY;MAGd,KAAK,CAAAgd,QAAL,CAAe,KAAK,CAAA/nB,QAApB,IAAiC5hB,IAAjC;MACA;IARuE;IAWzE,MAAM6pC,IAAA,GAAO,KAAK,CAAAjoB,QAAL,GAAiB,CAA9B;IACA,IAAIioB,IAAA,KAAS,KAAK,CAAAzpC,OAAlB,EAA4B;MAC1B,KAAK,CAAAupC,QAAL,CAAeG,MAAf,CAAsB,CAAtB,EAAyB,CAAzB;IAD0B,CAA5B,MAEO;MACL,KAAK,CAAAloB,QAAL,GAAiBioB,IAAjB;MACA,IAAIA,IAAA,GAAO,KAAK,CAAAF,QAAL,CAAepnE,MAA1B,EAAkC;QAChC,KAAK,CAAAonE,QAAL,CAAeG,MAAf,CAAsBD,IAAtB;MADgC;IAF7B;IAOP,KAAK,CAAAF,QAAL,CAAexmE,IAAf,CAAoB68B,IAApB;EA1CC;EAgDH2sB,KAAA,EAAO;IACL,IAAI,KAAK,CAAA/K,QAAL,KAAmB,CAAC,CAAxB,EAA2B;MAEzB;IAFyB;IAM3B,KAAK,CAAAgoB,MAAL,GAAe,IAAf;IACA,KAAK,CAAAD,QAAL,CAAe,KAAK,CAAA/nB,QAApB,EAA+B+K,IAA/B;IACA,KAAK,CAAAid,MAAL,GAAe,KAAf;IAEA,KAAK,CAAAhoB,QAAL,IAAkB,CAAlB;EAXK;EAiBPmoB,KAAA,EAAO;IACL,IAAI,KAAK,CAAAnoB,QAAL,GAAiB,KAAK,CAAA+nB,QAAL,CAAepnE,MAAf,GAAwB,CAA7C,EAAgD;MAC9C,KAAK,CAAAq/C,QAAL,IAAkB,CAAlB;MAGA,KAAK,CAAAgoB,MAAL,GAAe,IAAf;MACA,KAAK,CAAAD,QAAL,CAAe,KAAK,CAAA/nB,QAApB,EAA+B8K,GAA/B;MACA,KAAK,CAAAkd,MAAL,GAAe,KAAf;IAN8C;EAD3C;EAePI,mBAAA,EAAqB;IACnB,OAAO,KAAK,CAAApoB,QAAL,KAAmB,CAAC,CAA3B;EADmB;EAQrBqoB,mBAAA,EAAqB;IACnB,OAAO,KAAK,CAAAroB,QAAL,GAAiB,KAAK,CAAA+nB,QAAL,CAAepnE,MAAf,GAAwB,CAAhD;EADmB;EAIrB2f,QAAA,EAAU;IACR,KAAK,CAAAynD,QAAL,GAAiB,IAAjB;EADQ;AA9HS;AAuIrB,MAAMjgB,eAAN,CAAsB;EAOpBzuD,YAAYivE,SAAZ,EAAuB;IACrB,KAAKzoD,MAAL,GAAc,EAAd;IACA,KAAKyoD,SAAL,GAAiB,IAAI1iE,GAAJ,EAAjB;IACA,KAAK2iE,OAAL,GAAe,IAAIliE,GAAJ,EAAf;IAEA,MAAM;MAAEuB;IAAF,IAAYhT,wDAAA,CAAY+S,QAA9B;IACA,WAAW,CAAC9H,IAAD,EAAOooB,QAAP,EAAiBpkB,OAAA,GAAU,EAA3B,CAAX,IAA6CykE,SAA7C,EAAwD;MACtD,WAAWh+D,GAAX,IAAkBzK,IAAlB,EAAwB;QACtB,MAAM2oE,QAAA,GAAWl+D,GAAA,CAAI6kC,UAAJ,CAAe,MAAf,CAAjB;QACA,IAAIvnC,KAAA,IAAS4gE,QAAb,EAAuB;UACrB,KAAKF,SAAL,CAAexzD,GAAf,CAAmBxK,GAAA,CAAIhW,KAAJ,CAAU,CAAV,CAAnB,EAAiC;YAAE2zB,QAAF;YAAYpkB;UAAZ,CAAjC;UACA,KAAK0kE,OAAL,CAAa7sE,GAAb,CAAiB4O,GAAA,CAAIgI,KAAJ,CAAU,GAAV,EAAe4gD,EAAf,CAAkB,CAAC,CAAnB,CAAjB;QAFqB,CAAvB,MAGO,IAAI,CAACtrD,KAAD,IAAU,CAAC4gE,QAAf,EAAyB;UAC9B,KAAKF,SAAL,CAAexzD,GAAf,CAAmBxK,GAAnB,EAAwB;YAAE2d,QAAF;YAAYpkB;UAAZ,CAAxB;UACA,KAAK0kE,OAAL,CAAa7sE,GAAb,CAAiB4O,GAAA,CAAIgI,KAAJ,CAAU,GAAV,EAAe4gD,EAAf,CAAkB,CAAC,CAAnB,CAAjB;QAF8B;MALV;IAD8B;EANnC;EA0BvB,CAAAj8C,UAAWpZ,KAAX,EAAkB;IAChB,IAAIA,KAAA,CAAM6U,MAAV,EAAkB;MAChB,KAAKmN,MAAL,CAAYte,IAAZ,CAAiB,KAAjB;IADgB;IAGlB,IAAI1D,KAAA,CAAMiK,OAAV,EAAmB;MACjB,KAAK+X,MAAL,CAAYte,IAAZ,CAAiB,MAAjB;IADiB;IAGnB,IAAI1D,KAAA,CAAMgK,OAAV,EAAmB;MACjB,KAAKgY,MAAL,CAAYte,IAAZ,CAAiB,MAAjB;IADiB;IAGnB,IAAI1D,KAAA,CAAMyK,QAAV,EAAoB;MAClB,KAAKuX,MAAL,CAAYte,IAAZ,CAAiB,OAAjB;IADkB;IAGpB,KAAKse,MAAL,CAAYte,IAAZ,CAAiB1D,KAAA,CAAMyM,GAAvB;IACA,MAAM1P,GAAA,GAAM,KAAKilB,MAAL,CAAY/rB,IAAZ,CAAiB,GAAjB,CAAZ;IACA,KAAK+rB,MAAL,CAAYlf,MAAZ,GAAqB,CAArB;IAEA,OAAO/F,GAAP;EAjBgB;EA2BlBsqD,KAAK8D,IAAL,EAAWnrD,KAAX,EAAkB;IAChB,IAAI,CAAC,KAAK0qE,OAAL,CAAa/lE,GAAb,CAAiB3E,KAAA,CAAMyM,GAAvB,CAAL,EAAkC;MAChC;IADgC;IAGlC,MAAMoN,IAAA,GAAO,KAAK4wD,SAAL,CAAeziE,GAAf,CAAmB,KAAK,CAAAoR,SAAL,CAAgBpZ,KAAhB,CAAnB,CAAb;IACA,IAAI,CAAC6Z,IAAL,EAAW;MACT;IADS;IAGX,MAAM;MACJuQ,QADI;MAEJpkB,OAAA,EAAS;QAAEylD,OAAA,GAAU,KAAZ;QAAmBzV,IAAA,GAAO,EAA1B;QAA8B2V,OAAA,GAAU;MAAxC;IAFL,IAGF9xC,IAHJ;IAKA,IAAI8xC,OAAA,IAAW,CAACA,OAAA,CAAQR,IAAR,EAAcnrD,KAAd,CAAhB,EAAsC;MACpC;IADoC;IAGtCoqB,QAAA,CAASjY,IAAT,CAAcg5C,IAAd,EAAoB,GAAGnV,IAAvB;IAIA,IAAI,CAACyV,OAAL,EAAc;MACZzrD,KAAA,CAAM4mE,eAAN;MACA5mE,KAAA,CAAM4O,cAAN;IAFY;EApBE;AA5DE;AAuFtB,MAAMgyD,YAAN,CAAmB;EACjB,OAAOgK,cAAP,GAAwB,IAAI7iE,GAAJ,CAAQ,CAC9B,CAAC,YAAD,EAAe,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,CAAf,CAD8B,EAE9B,CAAC,QAAD,EAAW,CAAC,GAAD,EAAM,GAAN,EAAW,GAAX,CAAX,CAF8B,CAAR,CAAxB;EAKA,IAAI61B,OAAJA,CAAA,EAAc;IASZ,MAAM5C,MAAA,GAAS,IAAIjzB,GAAJ,CAAQ,CACrB,CAAC,YAAD,EAAe,IAAf,CADqB,EAErB,CAAC,QAAD,EAAW,IAAX,CAFqB,CAAR,CAAf;IAIAqhD,iEAAA,CAAepuB,MAAf;IACA,OAAO/jC,uDAAA,CAAO,IAAP,EAAa,SAAb,EAAwB+jC,MAAxB,CAAP;EAdY;EAyBdw2B,QAAQ17D,KAAR,EAAe;IACb,MAAMU,GAAA,GAAM0sD,yDAAA,CAAOptD,KAAP,CAAZ;IACA,IAAI,CAACmsB,MAAA,CAAO4oD,UAAP,CAAkB,yBAAlB,EAA6CxiB,OAAlD,EAA2D;MACzD,OAAO7xD,GAAP;IADyD;IAI3D,WAAW,CAACsL,IAAD,EAAOgpE,GAAP,CAAX,IAA0B,KAAKltC,OAA/B,EAAwC;MACtC,IAAIktC,GAAA,CAAIC,KAAJ,CAAU,CAACl2E,CAAD,EAAIqc,CAAJ,KAAUrc,CAAA,KAAM2B,GAAA,CAAI0a,CAAJ,CAA1B,CAAJ,EAAuC;QACrC,OAAO0vD,YAAA,CAAagK,cAAb,CAA4B5iE,GAA5B,CAAgClG,IAAhC,CAAP;MADqC;IADD;IAKxC,OAAOtL,GAAP;EAXa;EAqBfgsE,WAAW1gE,IAAX,EAAiB;IACf,MAAMtL,GAAA,GAAM,KAAKonC,OAAL,CAAa51B,GAAb,CAAiBlG,IAAjB,CAAZ;IACA,IAAI,CAACtL,GAAL,EAAU;MACR,OAAOsL,IAAP;IADQ;IAGV,OAAO3K,iDAAA,CAAKmI,YAAL,CAAkB,GAAG9I,GAArB,CAAP;EALe;AApDA;AAqEnB,MAAMuzD,yBAAN,CAAgC;EAC9B,CAAAihB,YAAA,GAAgB,IAAhB;EAEA,CAAAC,UAAA,GAAc,IAAIljE,GAAJ,EAAd;EAEA,CAAAmjE,SAAA,GAAa,IAAInjE,GAAJ,EAAb;EAEA,CAAAojE,cAAA,GAAkB,IAAlB;EAEA,CAAAjvE,iBAAA,GAAqB,IAArB;EAEA,CAAAkvE,cAAA,GAAkB,IAAInB,cAAJ,EAAlB;EAEA,CAAAoB,gBAAA,GAAoB,CAApB;EAEA,CAAAC,4BAAA,GAAgC,IAAI9iE,GAAJ,EAAhC;EAEA,CAAA+iE,eAAA,GAAmB,IAAnB;EAEA,CAAA5N,WAAA,GAAe,IAAf;EAEA,CAAA6N,gBAAA,GAAoB,IAAIhjE,GAAJ,EAApB;EAEA,CAAAgX,aAAA,GAAiB,IAAjB;EAEA,CAAAisD,2BAAA,GAA+B,IAA/B;EAEA,CAAAC,SAAA,GAAa,IAAI9C,SAAJ,EAAb;EAEA,CAAA+C,SAAA,GAAa,KAAb;EAEA,CAAAC,SAAA,GAAa,KAAb;EAEA,CAAAC,iBAAA,GAAqB,IAArB;EAEA,CAAAnmE,IAAA,GAAQ9O,iEAAA,CAAqBmgC,IAA7B;EAEA,CAAA+0C,eAAA,GAAmB,IAAItjE,GAAJ,EAAnB;EAEA,CAAAkgB,UAAA,GAAc,IAAd;EAEA,CAAAqjD,SAAA,GAAa,KAAKC,IAAL,CAAU75D,IAAV,CAAe,IAAf,CAAb;EAEA,CAAA85D,UAAA,GAAc,KAAKrrE,KAAL,CAAWuR,IAAX,CAAgB,IAAhB,CAAd;EAEA,CAAA+5D,SAAA,GAAa,KAAKC,IAAL,CAAUh6D,IAAV,CAAe,IAAf,CAAb;EAEA,CAAAi6D,QAAA,GAAY,KAAKC,GAAL,CAASl6D,IAAT,CAAc,IAAd,CAAZ;EAEA,CAAAm6D,UAAA,GAAc,KAAKtS,KAAL,CAAW7nD,IAAX,CAAgB,IAAhB,CAAd;EAEA,CAAAo6D,YAAA,GAAgB,KAAKtc,OAAL,CAAa99C,IAAb,CAAkB,IAAlB,CAAhB;EAEA,CAAAq6D,oBAAA,GAAwB,KAAKC,eAAL,CAAqBt6D,IAArB,CAA0B,IAA1B,CAAxB;EAEA,CAAAu6D,mBAAA,GAAuB,KAAKC,cAAL,CAAoBx6D,IAApB,CAAyB,IAAzB,CAAvB;EAEA,CAAAy6D,oBAAA,GAAwB,KAAKhY,eAAL,CAAqBziD,IAArB,CAA0B,IAA1B,CAAxB;EAEA,CAAA06D,uBAAA,GAA2B,KAAKC,kBAAL,CAAwB36D,IAAxB,CAA6B,IAA7B,CAA3B;EAEA,CAAA46D,cAAA,GAAkB;IAChB3e,SAAA,EAAW,KADK;IAEhB1N,OAAA,EAAS,IAFO;IAGhB6pB,kBAAA,EAAoB,KAHJ;IAIhBC,kBAAA,EAAoB,KAJJ;IAKhBwC,iBAAA,EAAmB;EALH,CAAlB;EAQA,CAAAC,WAAA,GAAe,CAAC,CAAD,EAAI,CAAJ,CAAf;EAEA,CAAAC,oBAAA,GAAwB,IAAxB;EAEA,CAAA1wE,SAAA,GAAa,IAAb;EAEA,CAAA2wE,MAAA,GAAU,IAAV;EAEA,OAAO9hB,eAAP,GAAyB,CAAzB;EAEA,OAAOE,aAAP,GAAuB,EAAvB;EAEA,WAAWP,gBAAXA,CAAA,EAA8B;IAC5B,MAAMC,KAAA,GAAQlB,yBAAA,CAA0Bp5C,SAAxC;IAEA,MAAMu6C,YAAA,GAAeC,IAAA,IAAQ;MAG3B,OACEA,IAAA,CAAK,CAAA3uD,SAAL,CAAgBijE,QAAhB,CAAyBtiE,QAAA,CAAS4Q,aAAlC,KACAo9C,IAAA,CAAKiiB,qBAAL,EAFF;IAH2B,CAA7B;IASA,MAAMC,gBAAA,GAAmBA,CAACC,KAAD,EAAQ;MAAEltE,MAAA,EAAQmtE;IAAV,CAAR,KAA2B;MAClD,IAAIA,EAAA,YAAcC,gBAAlB,EAAoC;QAClC,MAAM;UAAE1kE;QAAF,IAAWykE,EAAjB;QACA,OAAOzkE,IAAA,KAAS,MAAT,IAAmBA,IAAA,KAAS,QAAnC;MAFkC;MAIpC,OAAO,IAAP;IALkD,CAApD;IAQA,MAAMsiD,KAAA,GAAQ,KAAKC,eAAnB;IACA,MAAMC,GAAA,GAAM,KAAKC,aAAjB;IAEA,OAAOt0D,uDAAA,CACL,IADK,EAEL,kBAFK,EAGL,IAAIgzD,eAAJ,CAAoB,CAClB,CACE,CAAC,QAAD,EAAW,YAAX,CADF,EAEEgB,KAAA,CAAMwiB,SAFR,EAGE;MAAE9hB,OAAA,EAAS0hB;IAAX,CAHF,CADkB,EAMlB,CAAC,CAAC,QAAD,EAAW,YAAX,CAAD,EAA2BpiB,KAAA,CAAMiC,IAAjC,EAAuC;MAAEvB,OAAA,EAAS0hB;IAAX,CAAvC,CANkB,EAOlB,CAGE,CACE,QADF,EAEE,cAFF,EAGE,kBAHF,EAIE,cAJF,EAKE,kBALF,CAHF,EAUEpiB,KAAA,CAAMqf,IAVR,EAWE;MAAE3e,OAAA,EAAS0hB;IAAX,CAXF,CAPkB,EAoBlB,CACE,CACE,WADF,EAEE,eAFF,EAGE,gBAHF,EAIE,iBAJF,EAKE,eALF,EAME,mBANF,EAOE,oBAPF,EAQE,QARF,EASE,aATF,EAUE,cAVF,EAWE,YAXF,CADF,EAcEpiB,KAAA,CAAM3yC,MAdR,EAeE;MAAEqzC,OAAA,EAAS0hB;IAAX,CAfF,CApBkB,EAqClB,CACE,CAAC,OAAD,EAAU,WAAV,CADF,EAEEpiB,KAAA,CAAMyiB,wBAFR,EAGE;MAIE/hB,OAAA,EAASR,IAAA,IACPA,IAAA,CAAK,CAAA3uD,SAAL,CAAgBijE,QAAhB,CAAyBtiE,QAAA,CAAS4Q,aAAlC,KACA,CAACo9C,IAAA,CAAKyX;IANV,CAHF,CArCkB,EAiDlB,CACE,CAAC,GAAD,EAAM,OAAN,CADF,EAEE3X,KAAA,CAAMyiB,wBAFR,EAGE;MAIE/hB,OAAA,EAASR,IAAA,IAAQA,IAAA,CAAK,CAAA3uD,SAAL,CAAgBijE,QAAhB,CAAyBtiE,QAAA,CAAS4Q,aAAlC;IAJnB,CAHF,CAjDkB,EA2DlB,CAAC,CAAC,QAAD,EAAW,YAAX,CAAD,EAA2Bk9C,KAAA,CAAMsV,WAAjC,CA3DkB,EA4DlB,CACE,CAAC,WAAD,EAAc,eAAd,CADF,EAEEtV,KAAA,CAAMuC,wBAFR,EAGE;MAAExX,IAAA,EAAM,CAAC,CAACoV,KAAF,EAAS,CAAT,CAAR;MAAqBO,OAAA,EAAST;IAA9B,CAHF,CA5DkB,EAiElB,CACE,CAAC,gBAAD,EAAmB,qBAAnB,CADF,EAEED,KAAA,CAAMuC,wBAFR,EAGE;MAAExX,IAAA,EAAM,CAAC,CAACsV,GAAF,EAAO,CAAP,CAAR;MAAmBK,OAAA,EAAST;IAA5B,CAHF,CAjEkB,EAsElB,CACE,CAAC,YAAD,EAAe,gBAAf,CADF,EAEED,KAAA,CAAMuC,wBAFR,EAGE;MAAExX,IAAA,EAAM,CAACoV,KAAD,EAAQ,CAAR,CAAR;MAAoBO,OAAA,EAAST;IAA7B,CAHF,CAtEkB,EA2ElB,CACE,CAAC,iBAAD,EAAoB,sBAApB,CADF,EAEED,KAAA,CAAMuC,wBAFR,EAGE;MAAExX,IAAA,EAAM,CAACsV,GAAD,EAAM,CAAN,CAAR;MAAkBK,OAAA,EAAST;IAA3B,CAHF,CA3EkB,EAgFlB,CACE,CAAC,SAAD,EAAY,aAAZ,CADF,EAEED,KAAA,CAAMuC,wBAFR,EAGE;MAAExX,IAAA,EAAM,CAAC,CAAD,EAAI,CAACoV,KAAL,CAAR;MAAqBO,OAAA,EAAST;IAA9B,CAHF,CAhFkB,EAqFlB,CACE,CAAC,cAAD,EAAiB,mBAAjB,CADF,EAEED,KAAA,CAAMuC,wBAFR,EAGE;MAAExX,IAAA,EAAM,CAAC,CAAD,EAAI,CAACsV,GAAL,CAAR;MAAmBK,OAAA,EAAST;IAA5B,CAHF,CArFkB,EA0FlB,CACE,CAAC,WAAD,EAAc,eAAd,CADF,EAEED,KAAA,CAAMuC,wBAFR,EAGE;MAAExX,IAAA,EAAM,CAAC,CAAD,EAAIoV,KAAJ,CAAR;MAAoBO,OAAA,EAAST;IAA7B,CAHF,CA1FkB,EA+FlB,CACE,CAAC,gBAAD,EAAmB,qBAAnB,CADF,EAEED,KAAA,CAAMuC,wBAFR,EAGE;MAAExX,IAAA,EAAM,CAAC,CAAD,EAAIsV,GAAJ,CAAR;MAAkBK,OAAA,EAAST;IAA3B,CAHF,CA/FkB,CAApB,CAHK,CAAP;EAvB4B;EAkI9B1vD,YACEgB,SADF,EAEE2wE,MAFF,EAGEhC,cAHF,EAIEtlE,QAJF,EAKE8nE,WALF,EAMEjlD,UANF,EAOE;IACA,KAAK,CAAAlsB,SAAL,GAAkBA,SAAlB;IACA,KAAK,CAAA2wE,MAAL,GAAeA,MAAf;IACA,KAAK,CAAAhC,cAAL,GAAuBA,cAAvB;IACA,KAAK/P,SAAL,GAAiBv1D,QAAjB;IACA,KAAKu1D,SAAL,CAAewS,GAAf,CAAmB,eAAnB,EAAoC,KAAK,CAAApB,oBAAzC;IACA,KAAKpR,SAAL,CAAewS,GAAf,CAAmB,cAAnB,EAAmC,KAAK,CAAAlB,mBAAxC;IACA,KAAKtR,SAAL,CAAewS,GAAf,CAAmB,eAAnB,EAAoC,KAAK,CAAAhB,oBAAzC;IACA,KAAKxR,SAAL,CAAewS,GAAf,CAAmB,kBAAnB,EAAuC,KAAK,CAAAf,uBAA5C;IACA,KAAK,CAAA3wE,iBAAL,GAA0ByxE,WAAA,CAAYzxE,iBAAtC;IACA,KAAK,CAAAsjB,aAAL,GAAsBmuD,WAAA,CAAYnuD,aAAlC;IACA,KAAK,CAAAkJ,UAAL,GAAmBA,UAAnB;IACA,KAAK45C,cAAL,GAAsB;MACpBqB,SAAA,EAAWzgC,4DAAA,CAAcuM,gBADL;MAEpBtxC,QAAA,EAAU;IAFU,CAAtB;EAZA;EAkBFskB,QAAA,EAAU;IACR,KAAK,CAAAorD,qBAAL;IACA,KAAK,CAAAC,kBAAL;IACA,KAAK1S,SAAL,CAAe2S,IAAf,CAAoB,eAApB,EAAqC,KAAK,CAAAvB,oBAA1C;IACA,KAAKpR,SAAL,CAAe2S,IAAf,CAAoB,cAApB,EAAoC,KAAK,CAAArB,mBAAzC;IACA,KAAKtR,SAAL,CAAe2S,IAAf,CAAoB,eAApB,EAAqC,KAAK,CAAAnB,oBAA1C;IACA,KAAKxR,SAAL,CAAe2S,IAAf,CAAoB,kBAApB,EAAwC,KAAK,CAAAlB,uBAA7C;IACA,WAAWjxE,KAAX,IAAoB,KAAK,CAAAsvE,SAAL,CAAgBxiE,MAAhB,EAApB,EAA8C;MAC5C9M,KAAA,CAAM6mB,OAAN;IAD4C;IAG9C,KAAK,CAAAyoD,SAAL,CAAgB75D,KAAhB;IACA,KAAK,CAAA45D,UAAL,CAAiB55D,KAAjB;IACA,KAAK,CAAAm6D,gBAAL,CAAuBn6D,KAAvB;IACA,KAAK,CAAA25D,YAAL,GAAqB,IAArB;IACA,KAAK,CAAAc,eAAL,CAAsBz6D,KAAtB;IACA,KAAK,CAAA+5D,cAAL,CAAqB3oD,OAArB;IACA,KAAK,CAAA0oD,cAAL,CAAqB1oD,OAArB;IACA,IAAI,KAAK,CAAAgpD,2BAAT,EAAuC;MACrCziD,YAAA,CAAa,KAAK,CAAAyiD,2BAAlB;MACA,KAAK,CAAAA,2BAAL,GAAoC,IAApC;IAFqC;IAIvC,IAAI,KAAK,CAAAyB,oBAAT,EAAgC;MAC9BlkD,YAAA,CAAa,KAAK,CAAAkkD,oBAAlB;MACA,KAAK,CAAAA,oBAAL,GAA6B,IAA7B;IAF8B;EArBxB;EA2BV,IAAItrB,SAAJA,CAAA,EAAgB;IACd,OAAO3qD,uDAAA,CACL,IADK,EAEL,WAFK,EAGL,KAAK,CAAAyxB,UAAL,GACI,KAAK,CAAAlJ,aAAL,CAAoB0W,YAApB,CACE,KAAK,CAAAxN,UAAL,CAAiBmqB,UADnB,EAEE,KAAK,CAAAnqB,UAAL,CAAiBF,UAFnB,CADJ,GAKI,MARC,CAAP;EADc;EAahB,IAAIwlD,SAAJA,CAAA,EAAgB;IACd,OAAO/2E,uDAAA,CACL,IADK,EAEL,WAFK,EAGL0tD,gBAAA,CAAiB,KAAK,CAAAnoD,SAAtB,EAAkCwxE,SAH7B,CAAP;EADc;EAQhBlH,YAAY3V,MAAZ,EAAoB;IAClB,KAAK,CAAAga,cAAL,EAAsBrE,WAAtB,CAAkC,IAAlC,EAAwC3V,MAAxC;EADkB;EAIpBwb,eAAe;IAAEhoD;EAAF,CAAf,EAA+B;IAC7B,KAAK,CAAA0mD,gBAAL,GAAyB1mD,UAAA,GAAa,CAAtC;EAD6B;EAI/BspD,mBAAA,EAAqB;IACnB,KAAK,CAAAzxE,SAAL,CAAgBoE,KAAhB;EADmB;EAIrB6/D,WAAW5rE,CAAX,EAAcI,CAAd,EAAiB;IACf,WAAW2G,KAAX,IAAoB,KAAK,CAAAsvE,SAAL,CAAgBxiE,MAAhB,EAApB,EAA8C;MAC5C,MAAM;QACJ7T,CAAA,EAAGq5E,MADC;QAEJj5E,CAAA,EAAGk5E,MAFC;QAGJl2E,KAHI;QAIJC;MAJI,IAKF0D,KAAA,CAAMqI,GAAN,CAAUkrD,qBAAV,EALJ;MAMA,IACEt6D,CAAA,IAAKq5E,MAAL,IACAr5E,CAAA,IAAKq5E,MAAA,GAASj2E,KADd,IAEAhD,CAAA,IAAKk5E,MAFL,IAGAl5E,CAAA,IAAKk5E,MAAA,GAASj2E,MAJhB,EAKE;QACA,OAAO0D,KAAP;MADA;IAZ0C;IAgB9C,OAAO,IAAP;EAjBe;EAoBjBwyE,kBAAkBrlE,KAAA,GAAQ,KAA1B,EAAiC;IAC/B,KAAK,CAAAokE,MAAL,CAAavvE,SAAb,CAAuB2U,MAAvB,CAA8B,cAA9B,EAA8CxJ,KAA9C;EAD+B;EAIjC4rD,iBAAiBxD,MAAjB,EAAyB;IACvB,KAAK,CAAAqa,gBAAL,CAAuB3tE,GAAvB,CAA2BszD,MAA3B;EADuB;EAIzBuD,oBAAoBvD,MAApB,EAA4B;IAC1B,KAAK,CAAAqa,gBAAL,CAAuBlzD,MAAvB,CAA8B64C,MAA9B;EAD0B;EAI5ByD,gBAAgB;IAAEntC;EAAF,CAAhB,EAA2B;IACzB,KAAK+jC,cAAL;IACA,KAAK8W,cAAL,CAAoBqB,SAApB,GAAgCl8C,KAAA,GAAQyb,4DAAA,CAAcuM,gBAAtD;IACA,WAAW0hB,MAAX,IAAqB,KAAK,CAAAqa,gBAA1B,EAA6C;MAC3Cra,MAAA,CAAOyD,eAAP;IAD2C;EAHpB;EAQ3BkY,mBAAmB;IAAEuB;EAAF,CAAnB,EAAsC;IACpC,KAAK7iB,cAAL;IACA,KAAK8W,cAAL,CAAoBnkE,QAApB,GAA+BkwE,aAA/B;EAFoC;EAStCxX,uBAAuB1F,MAAvB,EAA+B;IAC7B,IACE,CAACA,MAAA,CAAOzQ,OAAP,EAAD,IACA,KAAK,CAAAxkD,iBADL,IAEA,CAAC,KAAK,CAAAA,iBAAL,CAAwByI,GAAxB,CAA4BwsD,MAAA,CAAO7zD,EAAnC,CAHH,EAIE;MACA,KAAK,CAAApB,iBAAL,CAAwBmE,QAAxB,CAAiC8wD,MAAA,CAAO7zD,EAAxC,EAA4C6zD,MAA5C;IADA;EAL2B;EAU/B,CAAAmd,gBAAA,EAAmB;IACjBrsD,MAAA,CAAOrc,gBAAP,CAAwB,OAAxB,EAAiC,KAAK,CAAAqmE,UAAtC;IACAhqD,MAAA,CAAOrc,gBAAP,CAAwB,MAAxB,EAAgC,KAAK,CAAAmmE,SAArC;EAFiB;EAKnB,CAAA+B,mBAAA,EAAsB;IACpB7rD,MAAA,CAAOzR,mBAAP,CAA2B,OAA3B,EAAoC,KAAK,CAAAy7D,UAAzC;IACAhqD,MAAA,CAAOzR,mBAAP,CAA2B,MAA3B,EAAmC,KAAK,CAAAu7D,SAAxC;EAFoB;EAKtBC,KAAA,EAAO;IACL,IAAI,CAAC,KAAKuC,YAAV,EAAwB;MACtB;IADsB;IAOxB,MAAM;MAAExgE;IAAF,IAAoB5Q,QAA1B;IACA,WAAWg0D,MAAX,IAAqB,KAAK,CAAA2a,eAA1B,EAA4C;MAC1C,IAAI3a,MAAA,CAAOltD,GAAP,CAAWw7D,QAAX,CAAoB1xD,aAApB,CAAJ,EAAwC;QACtC,KAAK,CAAA89D,iBAAL,GAA0B,CAAC1a,MAAD,EAASpjD,aAAT,CAA1B;QACAojD,MAAA,CAAO7C,mBAAP,GAA6B,KAA7B;QACA;MAHsC;IADE;EATvC;EAkBP1tD,MAAA,EAAQ;IACN,IAAI,CAAC,KAAK,CAAAirE,iBAAV,EAA8B;MAC5B;IAD4B;IAG9B,MAAM,CAAC2C,UAAD,EAAa3C,iBAAb,IAAkC,KAAK,CAAAA,iBAA7C;IACA,KAAK,CAAAA,iBAAL,GAA0B,IAA1B;IACAA,iBAAA,CAAkBjmE,gBAAlB,CACE,SADF,EAEE,MAAM;MACJ4oE,UAAA,CAAWlgB,mBAAX,GAAiC,IAAjC;IADI,CAFR,EAKE;MAAEoR,IAAA,EAAM;IAAR,CALF;IAOAmM,iBAAA,CAAkBjrE,KAAlB;EAbM;EAgBR,CAAA6tE,mBAAA,EAAsB;IAGpBxsD,MAAA,CAAOrc,gBAAP,CAAwB,SAAxB,EAAmC,KAAK,CAAA2mE,YAAxC;EAHoB;EAMtB,CAAAsB,sBAAA,EAAyB;IACvB5rD,MAAA,CAAOzR,mBAAP,CAA2B,SAA3B,EAAsC,KAAK,CAAA+7D,YAA3C;EADuB;EAIzB,CAAAmC,sBAAA,EAAyB;IACvBvxE,QAAA,CAASyI,gBAAT,CAA0B,MAA1B,EAAkC,KAAK,CAAAsmE,SAAvC;IACA/uE,QAAA,CAASyI,gBAAT,CAA0B,KAA1B,EAAiC,KAAK,CAAAwmE,QAAtC;IACAjvE,QAAA,CAASyI,gBAAT,CAA0B,OAA1B,EAAmC,KAAK,CAAA0mE,UAAxC;EAHuB;EAMzB,CAAAqC,yBAAA,EAA4B;IAC1BxxE,QAAA,CAASqT,mBAAT,CAA6B,MAA7B,EAAqC,KAAK,CAAA07D,SAA1C;IACA/uE,QAAA,CAASqT,mBAAT,CAA6B,KAA7B,EAAoC,KAAK,CAAA47D,QAAzC;IACAjvE,QAAA,CAASqT,mBAAT,CAA6B,OAA7B,EAAsC,KAAK,CAAA87D,UAA3C;EAH0B;EAM5BsC,iBAAA,EAAmB;IACjB,KAAK,CAAAH,kBAAL;IACA,KAAK,CAAAC,qBAAL;EAFiB;EAKnBG,oBAAA,EAAsB;IACpB,KAAK,CAAAhB,qBAAL;IACA,KAAK,CAAAc,wBAAL;EAFoB;EAStBxC,KAAKnsE,KAAL,EAAY;IACVA,KAAA,CAAM4O,cAAN;IAGA,KAAK,CAAAo8D,YAAL,EAAoBxf,cAApB;IAEA,IAAI,CAAC,KAAK+iB,YAAV,EAAwB;MACtB;IADsB;IAIxB,MAAMjR,OAAA,GAAU,EAAhB;IACA,WAAWnM,MAAX,IAAqB,KAAK,CAAA2a,eAA1B,EAA4C;MAC1C,MAAM3yD,UAAA,GAAag4C,MAAA,CAAO/3C,SAAP,CAAsC,IAAtC,CAAnB;MACA,IAAID,UAAJ,EAAgB;QACdmkD,OAAA,CAAQ55D,IAAR,CAAayV,UAAb;MADc;IAF0B;IAM5C,IAAImkD,OAAA,CAAQx6D,MAAR,KAAmB,CAAvB,EAA0B;MACxB;IADwB;IAI1B9C,KAAA,CAAM8uE,aAAN,CAAoBC,OAApB,CAA4B,mBAA5B,EAAiDxlE,IAAA,CAAKC,SAAL,CAAe8zD,OAAf,CAAjD;EArBU;EA4BZ+O,IAAIrsE,KAAJ,EAAW;IACT,KAAKmsE,IAAL,CAAUnsE,KAAV;IACA,KAAKsY,MAAL;EAFS;EASX0hD,MAAMh6D,KAAN,EAAa;IACXA,KAAA,CAAM4O,cAAN;IACA,MAAM;MAAEkgE;IAAF,IAAoB9uE,KAA1B;IACA,WAAW0R,IAAX,IAAmBo9D,aAAA,CAAc19D,KAAjC,EAAwC;MACtC,WAAWiqD,UAAX,IAAyB,KAAK,CAAAsC,WAA9B,EAA4C;QAC1C,IAAItC,UAAA,CAAWvB,wBAAX,CAAoCpoD,IAAA,CAAK5I,IAAzC,CAAJ,EAAoD;UAClDuyD,UAAA,CAAWrB,KAAX,CAAiBtoD,IAAjB,EAAuB,KAAK09C,YAA5B;UACA;QAFkD;MADV;IADN;IASxC,IAAI72D,IAAA,GAAOu2E,aAAA,CAAcjpD,OAAd,CAAsB,mBAAtB,CAAX;IACA,IAAI,CAACttB,IAAL,EAAW;MACT;IADS;IAIX,IAAI;MACFA,IAAA,GAAOgR,IAAA,CAAKylE,KAAL,CAAWz2E,IAAX,CAAP;IADE,CAAJ,CAEE,OAAOoqB,EAAP,EAAW;MACXvrB,qDAAA,CAAM,WAAUurB,EAAA,CAAGkK,OAAQ,IAA3B;MACA;IAFW;IAKb,IAAI,CAACxnB,KAAA,CAAMC,OAAN,CAAc/M,IAAd,CAAL,EAA0B;MACxB;IADwB;IAI1B,KAAKgoE,WAAL;IACA,MAAM3kE,KAAA,GAAQ,KAAKwzD,YAAnB;IAEA,IAAI;MACF,MAAM6f,UAAA,GAAa,EAAnB;MACA,WAAW9d,MAAX,IAAqB54D,IAArB,EAA2B;QACzB,MAAM22E,kBAAA,GAAqBtzE,KAAA,CAAMo1D,WAAN,CAAkBG,MAAlB,CAA3B;QACA,IAAI,CAAC+d,kBAAL,EAAyB;UACvB;QADuB;QAGzBD,UAAA,CAAWvrE,IAAX,CAAgBwrE,kBAAhB;MALyB;MAQ3B,MAAMjiB,GAAA,GAAMA,CAAA,KAAM;QAChB,WAAWkE,MAAX,IAAqB8d,UAArB,EAAiC;UAC/B,KAAK,CAAAE,gBAAL,CAAuBhe,MAAvB;QAD+B;QAGjC,KAAK,CAAAie,aAAL,CAAoBH,UAApB;MAJgB,CAAlB;MAMA,MAAM/hB,IAAA,GAAOA,CAAA,KAAM;QACjB,WAAWiE,MAAX,IAAqB8d,UAArB,EAAiC;UAC/B9d,MAAA,CAAO5gD,MAAP;QAD+B;MADhB,CAAnB;MAKA,KAAKy8C,WAAL,CAAiB;QAAEC,GAAF;QAAOC,IAAP;QAAaC,QAAA,EAAU;MAAvB,CAAjB;IArBE,CAAJ,CAsBE,OAAOxqC,EAAP,EAAW;MACXvrB,qDAAA,CAAM,WAAUurB,EAAA,CAAGkK,OAAQ,IAA3B;IADW;EArDF;EA8DbojC,QAAQjwD,KAAR,EAAe;IACb,IAAI,CAAC,KAAKqvE,wBAAV,EAAoC;MAClCtlB,yBAAA,CAA0BiB,gBAA1B,CAA2C3D,IAA3C,CAAgD,IAAhD,EAAsDrnD,KAAtD;IADkC;EADvB;EAYfysE,gBAAgBh6C,OAAhB,EAAyB;IACvB,IAAI,CAAC,MAAD,EAAS,MAAT,EAAiB,QAAjB,EAA2B,WAA3B,EAAwCloB,QAAxC,CAAiDkoB,OAAA,CAAQ3wB,IAAzD,CAAJ,EAAoE;MAClE,KAAK2wB,OAAA,CAAQ3wB,IAAb;IADkE;EAD7C;EAWzB,CAAAwtE,qBAAsB78C,OAAtB,EAA+B;IAC7B,MAAM88C,UAAA,GAAaxtE,MAAA,CAAOQ,OAAP,CAAekwB,OAAf,EAAwBm/B,IAAxB,CACjB,CAAC,CAACnlD,GAAD,EAAM1D,KAAN,CAAD,KAAkB,KAAK,CAAAgkE,cAAL,CAAqBtgE,GAArB,MAA8B1D,KAD/B,CAAnB;IAIA,IAAIwmE,UAAJ,EAAgB;MACd,KAAKnU,SAAL,CAAet1D,QAAf,CAAwB,+BAAxB,EAAyD;QACvDC,MAAA,EAAQ,IAD+C;QAEvD0sB,OAAA,EAAS1wB,MAAA,CAAOsW,MAAP,CAAc,KAAK,CAAA00D,cAAnB,EAAoCt6C,OAApC;MAF8C,CAAzD;IADc;EALa;EAa/B,CAAA+8C,iBAAkB/8C,OAAlB,EAA2B;IACzB,KAAK2oC,SAAL,CAAet1D,QAAf,CAAwB,+BAAxB,EAAyD;MACvDC,MAAA,EAAQ,IAD+C;MAEvD0sB;IAFuD,CAAzD;EADyB;EAa3Bq7B,gBAAgBM,SAAhB,EAA2B;IACzB,IAAIA,SAAJ,EAAe;MACb,KAAK,CAAAkgB,eAAL;MACA,KAAK,CAAAG,kBAAL;MACA,KAAK,CAAAC,qBAAL;MACA,KAAK,CAAAY,oBAAL,CAA2B;QACzBlhB,SAAA,EAAW,KAAK,CAAA1oD,IAAL,KAAe9O,iEAAA,CAAqBmgC,IADtB;QAEzB2pB,OAAA,EAAS,KAAK,CAAAA,OAAL,EAFgB;QAGzB6pB,kBAAA,EAAoB,KAAK,CAAAa,cAAL,CAAqBb,kBAArB,EAHK;QAIzBC,kBAAA,EAAoB,KAAK,CAAAY,cAAL,CAAqBZ,kBAArB,EAJK;QAKzBwC,iBAAA,EAAmB;MALM,CAA3B;IAJa,CAAf,MAWO;MACL,KAAK,CAAAc,kBAAL;MACA,KAAK,CAAAD,qBAAL;MACA,KAAK,CAAAc,wBAAL;MACA,KAAK,CAAAW,oBAAL,CAA2B;QACzBlhB,SAAA,EAAW;MADc,CAA3B;MAGA,KAAKggB,iBAAL,CAAuB,KAAvB;IAPK;EAZkB;EAuB3BxQ,oBAAoBhE,KAApB,EAA2B;IACzB,IAAI,KAAK,CAAA+D,WAAT,EAAuB;MACrB;IADqB;IAGvB,KAAK,CAAAA,WAAL,GAAoB/D,KAApB;IACA,WAAWyB,UAAX,IAAyB,KAAK,CAAAsC,WAA9B,EAA4C;MAC1C,KAAK,CAAA6R,gBAAL,CAAuBnU,UAAA,CAAW5O,yBAAlC;IAD0C;EALnB;EAc3BoT,MAAA,EAAQ;IACN,OAAO,KAAK,CAAA6L,SAAL,CAAgB7L,KAAhB,EAAP;EADM;EAIR,IAAIzQ,YAAJA,CAAA,EAAmB;IACjB,OAAO,KAAK,CAAA8b,SAAL,CAAgBljE,GAAhB,CAAoB,KAAK,CAAAqjE,gBAAzB,CAAP;EADiB;EAInBoE,SAAS9oD,SAAT,EAAoB;IAClB,OAAO,KAAK,CAAAukD,SAAL,CAAgBljE,GAAhB,CAAoB2e,SAApB,CAAP;EADkB;EAIpB,IAAI0kD,gBAAJA,CAAA,EAAuB;IACrB,OAAO,KAAK,CAAAA,gBAAZ;EADqB;EAQvBxN,SAASjiE,KAAT,EAAgB;IACd,KAAK,CAAAsvE,SAAL,CAAgBj0D,GAAhB,CAAoBrb,KAAA,CAAM+qB,SAA1B,EAAqC/qB,KAArC;IACA,IAAI,KAAK,CAAA+vE,SAAT,EAAqB;MACnB/vE,KAAA,CAAMyiE,MAAN;IADmB,CAArB,MAEO;MACLziE,KAAA,CAAM8iE,OAAN;IADK;EAJO;EAahBgC,YAAY9kE,KAAZ,EAAmB;IACjB,KAAK,CAAAsvE,SAAL,CAAgB5yD,MAAhB,CAAuB1c,KAAA,CAAM+qB,SAA7B;EADiB;EAWnBm3C,WAAWp4D,IAAX,EAAiBC,MAAA,GAAS,IAA1B,EAAgC+pE,cAAA,GAAiB,KAAjD,EAAwD;IACtD,IAAI,KAAK,CAAAhqE,IAAL,KAAeA,IAAnB,EAAyB;MACvB;IADuB;IAGzB,KAAK,CAAAA,IAAL,GAAaA,IAAb;IACA,IAAIA,IAAA,KAAS9O,iEAAA,CAAqBmgC,IAAlC,EAAwC;MACtC,KAAK+2B,eAAL,CAAqB,KAArB;MACA,KAAK,CAAA6hB,UAAL;MACA;IAHsC;IAKxC,KAAK7hB,eAAL,CAAqB,IAArB;IACA,KAAK,CAAA8hB,SAAL;IACA,KAAKrP,WAAL;IACA,WAAW3kE,KAAX,IAAoB,KAAK,CAAAsvE,SAAL,CAAgBxiE,MAAhB,EAApB,EAA8C;MAC5C9M,KAAA,CAAMkiE,UAAN,CAAiBp4D,IAAjB;IAD4C;IAG9C,IAAI,CAACC,MAAD,IAAW+pE,cAAf,EAA+B;MAC7B,KAAKhC,wBAAL;MACA;IAF6B;IAK/B,IAAI,CAAC/nE,MAAL,EAAa;MACX;IADW;IAGb,WAAWwrD,MAAX,IAAqB,KAAK,CAAA8Z,UAAL,CAAiBviE,MAAjB,EAArB,EAAgD;MAC9C,IAAIyoD,MAAA,CAAOZ,mBAAP,KAA+B5qD,MAAnC,EAA2C;QACzC,KAAKw6D,WAAL,CAAiBhP,MAAjB;QACAA,MAAA,CAAOpB,eAAP;QACA;MAHyC;IADG;EAxBM;EAiCxD2d,yBAAA,EAA2B;IACzB,KAAKte,YAAL,CAAkB8Q,YAAlB;EADyB;EAS3BnS,cAAcroD,IAAd,EAAoB;IAClB,IAAIA,IAAA,KAAS,KAAK,CAAAA,IAAlB,EAAyB;MACvB;IADuB;IAGzB,KAAK01D,SAAL,CAAet1D,QAAf,CAAwB,4BAAxB,EAAsD;MACpDC,MAAA,EAAQ,IAD4C;MAEpDL;IAFoD,CAAtD;EAJkB;EAepB4mD,aAAaxjD,IAAb,EAAmBC,KAAnB,EAA0B;IACxB,IAAI,CAAC,KAAK,CAAA40D,WAAV,EAAwB;MACtB;IADsB;IAGxB,IAAI70D,IAAA,KAASghD,uEAAA,CAA2B+lB,MAAxC,EAAgD;MAC9C,KAAKzgB,YAAL,CAAkB8Q,YAAlB;MACA;IAF8C;IAKhD,WAAW/O,MAAX,IAAqB,KAAK,CAAA2a,eAA1B,EAA4C;MAC1C3a,MAAA,CAAO7E,YAAP,CAAoBxjD,IAApB,EAA0BC,KAA1B;IAD0C;IAI5C,WAAWsyD,UAAX,IAAyB,KAAK,CAAAsC,WAA9B,EAA4C;MAC1CtC,UAAA,CAAWlP,mBAAX,CAA+BrjD,IAA/B,EAAqCC,KAArC;IAD0C;EAbpB;EAkB1BuxD,cAAcwV,QAAA,GAAW,KAAzB,EAAgC;IAC9B,IAAI,KAAK,CAAAlE,SAAL,KAAoBkE,QAAxB,EAAkC;MAChC;IADgC;IAGlC,KAAK,CAAAlE,SAAL,GAAkBkE,QAAlB;IACA,WAAWl0E,KAAX,IAAoB,KAAK,CAAAsvE,SAAL,CAAgBxiE,MAAhB,EAApB,EAA8C;MAC5C,IAAIonE,QAAJ,EAAc;QACZl0E,KAAA,CAAMoiE,YAAN;MADY,CAAd,MAEO;QACLpiE,KAAA,CAAMqiE,WAAN;MADK;MAGPriE,KAAA,CAAMqI,GAAN,CAAUrG,SAAV,CAAoB2U,MAApB,CAA2B,SAA3B,EAAsCu9D,QAAtC;IAN4C;EALhB;EAkBhC,CAAAF,UAAA,EAAa;IACX,IAAI,CAAC,KAAK,CAAAjE,SAAV,EAAsB;MACpB,KAAK,CAAAA,SAAL,GAAkB,IAAlB;MACA,WAAW/vE,KAAX,IAAoB,KAAK,CAAAsvE,SAAL,CAAgBxiE,MAAhB,EAApB,EAA8C;QAC5C9M,KAAA,CAAMyiE,MAAN;MAD4C;IAF1B;EADX;EAYb,CAAAsR,WAAA,EAAc;IACZ,KAAKpP,WAAL;IACA,IAAI,KAAK,CAAAoL,SAAT,EAAqB;MACnB,KAAK,CAAAA,SAAL,GAAkB,KAAlB;MACA,WAAW/vE,KAAX,IAAoB,KAAK,CAAAsvE,SAAL,CAAgBxiE,MAAhB,EAApB,EAA8C;QAC5C9M,KAAA,CAAM8iE,OAAN;MAD4C;IAF3B;EAFT;EAediC,WAAWh6C,SAAX,EAAsB;IACpB,MAAM22C,OAAA,GAAU,EAAhB;IACA,WAAWnM,MAAX,IAAqB,KAAK,CAAA8Z,UAAL,CAAiBviE,MAAjB,EAArB,EAAgD;MAC9C,IAAIyoD,MAAA,CAAOxqC,SAAP,KAAqBA,SAAzB,EAAoC;QAClC22C,OAAA,CAAQ55D,IAAR,CAAaytD,MAAb;MADkC;IADU;IAKhD,OAAOmM,OAAP;EAPoB;EAetByS,UAAUzyE,EAAV,EAAc;IACZ,OAAO,KAAK,CAAA2tE,UAAL,CAAiBjjE,GAAjB,CAAqB1K,EAArB,CAAP;EADY;EAQdiiE,UAAUpO,MAAV,EAAkB;IAChB,KAAK,CAAA8Z,UAAL,CAAiBh0D,GAAjB,CAAqBk6C,MAAA,CAAO7zD,EAA5B,EAAgC6zD,MAAhC;EADgB;EAQlBiO,aAAajO,MAAb,EAAqB;IACnB,IAAIA,MAAA,CAAOltD,GAAP,CAAWw7D,QAAX,CAAoBtiE,QAAA,CAAS4Q,aAA7B,CAAJ,EAAiD;MAC/C,IAAI,KAAK,CAAA09D,2BAAT,EAAuC;QACrCziD,YAAA,CAAa,KAAK,CAAAyiD,2BAAlB;MADqC;MAGvC,KAAK,CAAAA,2BAAL,GAAoC5qE,UAAA,CAAW,MAAM;QAGnD,KAAKotE,kBAAL;QACA,KAAK,CAAAxC,2BAAL,GAAoC,IAApC;MAJmD,CAAjB,EAKjC,CALiC,CAApC;IAJ+C;IAWjD,KAAK,CAAAR,UAAL,CAAiB3yD,MAAjB,CAAwB64C,MAAA,CAAO7zD,EAA/B;IACA,KAAKgjE,QAAL,CAAcnP,MAAd;IACA,IACE,CAACA,MAAA,CAAOZ,mBAAR,IACA,CAAC,KAAK,CAAA+a,4BAAL,CAAmC3mE,GAAnC,CAAuCwsD,MAAA,CAAOZ,mBAA9C,CAFH,EAGE;MACA,KAAK,CAAAr0D,iBAAL,EAAyBqU,MAAzB,CAAgC4gD,MAAA,CAAO7zD,EAAvC;IADA;EAjBiB;EA0BrB6hE,4BAA4BhO,MAA5B,EAAoC;IAClC,KAAK,CAAAma,4BAAL,CAAmCztE,GAAnC,CAAuCszD,MAAA,CAAOZ,mBAA9C;IACAY,MAAA,CAAOD,OAAP,GAAiB,IAAjB;EAFkC;EAUpCsN,2BAA2BjO,mBAA3B,EAAgD;IAC9C,OAAO,KAAK,CAAA+a,4BAAL,CAAmC3mE,GAAnC,CAAuC4rD,mBAAvC,CAAP;EAD8C;EAQhDyO,+BAA+B7N,MAA/B,EAAuC;IACrC,KAAK,CAAAma,4BAAL,CAAmChzD,MAAnC,CAA0C64C,MAAA,CAAOZ,mBAAjD;IACAY,MAAA,CAAOD,OAAP,GAAiB,KAAjB;EAFqC;EASvC,CAAAie,iBAAkBhe,MAAlB,EAA0B;IACxB,MAAMv1D,KAAA,GAAQ,KAAK,CAAAsvE,SAAL,CAAgBljE,GAAhB,CAAoBmpD,MAAA,CAAOxqC,SAA3B,CAAd;IACA,IAAI/qB,KAAJ,EAAW;MACTA,KAAA,CAAM6iE,YAAN,CAAmBtN,MAAnB;IADS,CAAX,MAEO;MACL,KAAKoO,SAAL,CAAepO,MAAf;IADK;EAJiB;EAa1ByN,gBAAgBzN,MAAhB,EAAwB;IACtB,IAAI,KAAK,CAAA6Z,YAAL,KAAuB7Z,MAA3B,EAAmC;MACjC;IADiC;IAInC,KAAK,CAAA6Z,YAAL,GAAqB7Z,MAArB;IACA,IAAIA,MAAJ,EAAY;MACV,KAAK,CAAAqe,gBAAL,CAAuBre,MAAA,CAAOzE,kBAA9B;IADU;EANU;EAexB0T,eAAejP,MAAf,EAAuB;IACrB,IAAI,KAAK,CAAA2a,eAAL,CAAsBnnE,GAAtB,CAA0BwsD,MAA1B,CAAJ,EAAuC;MACrC,KAAK,CAAA2a,eAAL,CAAsBxzD,MAAtB,CAA6B64C,MAA7B;MACAA,MAAA,CAAOmP,QAAP;MACA,KAAK,CAAAgP,oBAAL,CAA2B;QACzBtC,iBAAA,EAAmB,KAAKuB;MADC,CAA3B;MAGA;IANqC;IAQvC,KAAK,CAAAzC,eAAL,CAAsBjuE,GAAtB,CAA0BszD,MAA1B;IACAA,MAAA,CAAOqX,MAAP;IACA,KAAK,CAAAgH,gBAAL,CAAuBre,MAAA,CAAOzE,kBAA9B;IACA,KAAK,CAAA4iB,oBAAL,CAA2B;MACzBtC,iBAAA,EAAmB;IADM,CAA3B;EAZqB;EAqBvB7M,YAAYhP,MAAZ,EAAoB;IAClB,WAAW6e,EAAX,IAAiB,KAAK,CAAAlE,eAAtB,EAAwC;MACtC,IAAIkE,EAAA,KAAO7e,MAAX,EAAmB;QACjB6e,EAAA,CAAG1P,QAAH;MADiB;IADmB;IAKxC,KAAK,CAAAwL,eAAL,CAAsBz6D,KAAtB;IAEA,KAAK,CAAAy6D,eAAL,CAAsBjuE,GAAtB,CAA0BszD,MAA1B;IACAA,MAAA,CAAOqX,MAAP;IACA,KAAK,CAAAgH,gBAAL,CAAuBre,MAAA,CAAOzE,kBAA9B;IACA,KAAK,CAAA4iB,oBAAL,CAA2B;MACzBtC,iBAAA,EAAmB;IADM,CAA3B;EAXkB;EAoBpB3M,WAAWlP,MAAX,EAAmB;IACjB,OAAO,KAAK,CAAA2a,eAAL,CAAsBnnE,GAAtB,CAA0BwsD,MAA1B,CAAP;EADiB;EAInB,IAAI8e,mBAAJA,CAAA,EAA0B;IACxB,OAAO,KAAK,CAAAnE,eAAL,CAAsBpjE,MAAtB,GAA+B0hE,IAA/B,GAAsCrhE,KAA7C;EADwB;EAQ1Bu3D,SAASnP,MAAT,EAAiB;IACfA,MAAA,CAAOmP,QAAP;IACA,KAAK,CAAAwL,eAAL,CAAsBxzD,MAAtB,CAA6B64C,MAA7B;IACA,KAAK,CAAAme,oBAAL,CAA2B;MACzBtC,iBAAA,EAAmB,KAAKuB;IADC,CAA3B;EAHe;EAQjB,IAAIA,YAAJA,CAAA,EAAmB;IACjB,OAAO,KAAK,CAAAzC,eAAL,CAAsBj8D,IAAtB,KAA+B,CAAtC;EADiB;EAInB,IAAI+yD,cAAJA,CAAA,EAAqB;IACnB,OACE,KAAK,CAAAkJ,eAAL,CAAsBj8D,IAAtB,KAA+B,CAA/B,IACA,KAAKogE,mBAAL,CAAyBrN,cAF3B;EADmB;EAUrB1V,KAAA,EAAO;IACL,KAAK,CAAAke,cAAL,CAAqBle,IAArB;IACA,KAAK,CAAAoiB,oBAAL,CAA2B;MACzB/E,kBAAA,EAAoB,KAAK,CAAAa,cAAL,CAAqBb,kBAArB,EADK;MAEzBC,kBAAA,EAAoB,IAFK;MAGzB9pB,OAAA,EAAS,KAAK,CAAAA,OAAL;IAHgB,CAA3B;EAFK;EAYP4pB,KAAA,EAAO;IACL,KAAK,CAAAc,cAAL,CAAqBd,IAArB;IACA,KAAK,CAAAgF,oBAAL,CAA2B;MACzB/E,kBAAA,EAAoB,IADK;MAEzBC,kBAAA,EAAoB,KAAK,CAAAY,cAAL,CAAqBZ,kBAArB,EAFK;MAGzB9pB,OAAA,EAAS,KAAK,CAAAA,OAAL;IAHgB,CAA3B;EAFK;EAaPsM,YAAYr2C,MAAZ,EAAoB;IAClB,KAAK,CAAAy0D,cAAL,CAAqBvtE,GAArB,CAAyB8Y,MAAzB;IACA,KAAK,CAAA24D,oBAAL,CAA2B;MACzB/E,kBAAA,EAAoB,IADK;MAEzBC,kBAAA,EAAoB,KAFK;MAGzB9pB,OAAA,EAAS,KAAK,CAAAA,OAAL;IAHgB,CAA3B;EAFkB;EASpB,CAAAA,QAAA,EAAW;IACT,IAAI,KAAK,CAAAuqB,UAAL,CAAiBp7D,IAAjB,KAA0B,CAA9B,EAAiC;MAC/B,OAAO,IAAP;IAD+B;IAIjC,IAAI,KAAK,CAAAo7D,UAAL,CAAiBp7D,IAAjB,KAA0B,CAA9B,EAAiC;MAC/B,WAAWshD,MAAX,IAAqB,KAAK,CAAA8Z,UAAL,CAAiBviE,MAAjB,EAArB,EAAgD;QAC9C,OAAOyoD,MAAA,CAAOzQ,OAAP,EAAP;MAD8C;IADjB;IAMjC,OAAO,KAAP;EAXS;EAiBXpoC,OAAA,EAAS;IACP,KAAKkzC,cAAL;IACA,IAAI,CAAC,KAAK+iB,YAAV,EAAwB;MACtB;IADsB;IAIxB,MAAMjR,OAAA,GAAU,CAAC,GAAG,KAAK,CAAAwO,eAAT,CAAhB;IACA,MAAM7e,GAAA,GAAMA,CAAA,KAAM;MAChB,WAAWkE,MAAX,IAAqBmM,OAArB,EAA8B;QAC5BnM,MAAA,CAAO5gD,MAAP;MAD4B;IADd,CAAlB;IAKA,MAAM28C,IAAA,GAAOA,CAAA,KAAM;MACjB,WAAWiE,MAAX,IAAqBmM,OAArB,EAA8B;QAC5B,KAAK,CAAA6R,gBAAL,CAAuBhe,MAAvB;MAD4B;IADb,CAAnB;IAMA,KAAKnE,WAAL,CAAiB;MAAEC,GAAF;MAAOC,IAAP;MAAaC,QAAA,EAAU;IAAvB,CAAjB;EAlBO;EAqBT3B,eAAA,EAAiB;IAEf,KAAK,CAAAwf,YAAL,EAAoBxf,cAApB;EAFe;EAKjB4hB,sBAAA,EAAwB;IACtB,OAAO,KAAK,CAAApC,YAAL,IAAsB,KAAKuD,YAAlC;EADsB;EAQxB,CAAAa,cAAe9R,OAAf,EAAwB;IACtB,KAAK,CAAAwO,eAAL,CAAsBz6D,KAAtB;IACA,WAAW8/C,MAAX,IAAqBmM,OAArB,EAA8B;MAC5B,IAAInM,MAAA,CAAOzQ,OAAP,EAAJ,EAAsB;QACpB;MADoB;MAGtB,KAAK,CAAAorB,eAAL,CAAsBjuE,GAAtB,CAA0BszD,MAA1B;MACAA,MAAA,CAAOqX,MAAP;IAL4B;IAO9B,KAAK,CAAA8G,oBAAL,CAA2B;MAAEtC,iBAAA,EAAmB;IAArB,CAA3B;EATsB;EAexBS,UAAA,EAAY;IACV,WAAWtc,MAAX,IAAqB,KAAK,CAAA2a,eAA1B,EAA4C;MAC1C3a,MAAA,CAAO3B,MAAP;IAD0C;IAG5C,KAAK,CAAA4f,aAAL,CAAoB,KAAK,CAAAnE,UAAL,CAAiBviE,MAAjB,EAApB;EAJU;EAUZ63D,YAAA,EAAc;IACZ,IAAI,KAAK,CAAAyK,YAAT,EAAwB;MAEtB,KAAK,CAAAA,YAAL,CAAmBxf,cAAnB;MACA;IAHsB;IAMxB,IAAI,CAAC,KAAK+iB,YAAV,EAAwB;MACtB;IADsB;IAGxB,WAAWpd,MAAX,IAAqB,KAAK,CAAA2a,eAA1B,EAA4C;MAC1C3a,MAAA,CAAOmP,QAAP;IAD0C;IAG5C,KAAK,CAAAwL,eAAL,CAAsBz6D,KAAtB;IACA,KAAK,CAAAi+D,oBAAL,CAA2B;MACzBtC,iBAAA,EAAmB;IADM,CAA3B;EAdY;EAmBdxf,yBAAyB34D,CAAzB,EAA4BI,CAA5B,EAA+Bi7E,QAAA,GAAW,KAA1C,EAAiD;IAC/C,IAAI,CAACA,QAAL,EAAe;MACb,KAAK1kB,cAAL;IADa;IAGf,IAAI,CAAC,KAAK+iB,YAAV,EAAwB;MACtB;IADsB;IAIxB,KAAK,CAAAtB,WAAL,CAAkB,CAAlB,KAAwBp4E,CAAxB;IACA,KAAK,CAAAo4E,WAAL,CAAkB,CAAlB,KAAwBh4E,CAAxB;IACA,MAAM,CAACk7E,MAAD,EAASC,MAAT,IAAmB,KAAK,CAAAnD,WAA9B;IACA,MAAM3P,OAAA,GAAU,CAAC,GAAG,KAAK,CAAAwO,eAAT,CAAhB;IAIA,MAAMvQ,YAAA,GAAe,IAArB;IAEA,IAAI,KAAK,CAAA2R,oBAAT,EAAgC;MAC9BlkD,YAAA,CAAa,KAAK,CAAAkkD,oBAAlB;IAD8B;IAIhC,KAAK,CAAAA,oBAAL,GAA6BrsE,UAAA,CAAW,MAAM;MAC5C,KAAK,CAAAqsE,oBAAL,GAA6B,IAA7B;MACA,KAAK,CAAAD,WAAL,CAAkB,CAAlB,IAAuB,KAAK,CAAAA,WAAL,CAAkB,CAAlB,IAAuB,CAA9C;MAEA,KAAKjgB,WAAL,CAAiB;QACfC,GAAA,EAAKA,CAAA,KAAM;UACT,WAAWkE,MAAX,IAAqBmM,OAArB,EAA8B;YAC5B,IAAI,KAAK,CAAA2N,UAAL,CAAiBtmE,GAAjB,CAAqBwsD,MAAA,CAAO7zD,EAA5B,CAAJ,EAAqC;cACnC6zD,MAAA,CAAO8R,eAAP,CAAuBkN,MAAvB,EAA+BC,MAA/B;YADmC;UADT;QADrB,CADI;QAQfljB,IAAA,EAAMA,CAAA,KAAM;UACV,WAAWiE,MAAX,IAAqBmM,OAArB,EAA8B;YAC5B,IAAI,KAAK,CAAA2N,UAAL,CAAiBtmE,GAAjB,CAAqBwsD,MAAA,CAAO7zD,EAA5B,CAAJ,EAAqC;cACnC6zD,MAAA,CAAO8R,eAAP,CAAuB,CAACkN,MAAxB,EAAgC,CAACC,MAAjC;YADmC;UADT;QADpB,CARG;QAefjjB,QAAA,EAAU;MAfK,CAAjB;IAJ4C,CAAjB,EAqB1BoO,YArB0B,CAA7B;IAuBA,WAAWpK,MAAX,IAAqBmM,OAArB,EAA8B;MAC5BnM,MAAA,CAAO8R,eAAP,CAAuBpuE,CAAvB,EAA0BI,CAA1B;IAD4B;EA5CiB;EAoDjDuyE,iBAAA,EAAmB;IAGjB,IAAI,CAAC,KAAK+G,YAAV,EAAwB;MACtB;IADsB;IAIxB,KAAKH,iBAAL,CAAuB,IAAvB;IACA,KAAK,CAAA7C,eAAL,GAAwB,IAAIxjE,GAAJ,EAAxB;IACA,WAAWopD,MAAX,IAAqB,KAAK,CAAA2a,eAA1B,EAA4C;MAC1C,KAAK,CAAAP,eAAL,CAAsBt0D,GAAtB,CAA0Bk6C,MAA1B,EAAkC;QAChCwT,MAAA,EAAQxT,MAAA,CAAOt8D,CADiB;QAEhC+vE,MAAA,EAAQzT,MAAA,CAAOl8D,CAFiB;QAGhCo7E,cAAA,EAAgBlf,MAAA,CAAOxqC,SAHS;QAIhCy+C,IAAA,EAAM,CAJ0B;QAKhCC,IAAA,EAAM,CAL0B;QAMhCiL,YAAA,EAAc,CAAC;MANiB,CAAlC;IAD0C;EAT3B;EAyBnB3I,eAAA,EAAiB;IACf,IAAI,CAAC,KAAK,CAAA4D,eAAV,EAA4B;MAC1B,OAAO,KAAP;IAD0B;IAG5B,KAAK6C,iBAAL,CAAuB,KAAvB;IACA,MAAMr4E,GAAA,GAAM,KAAK,CAAAw1E,eAAjB;IACA,KAAK,CAAAA,eAAL,GAAwB,IAAxB;IACA,IAAIgF,sBAAA,GAAyB,KAA7B;IAEA,WAAW,CAAC;MAAE17E,CAAF;MAAKI,CAAL;MAAQ0xB;IAAR,CAAD,EAAsB5d,KAAtB,CAAX,IAA2ChT,GAA3C,EAAgD;MAC9CgT,KAAA,CAAMq8D,IAAN,GAAavwE,CAAb;MACAkU,KAAA,CAAMs8D,IAAN,GAAapwE,CAAb;MACA8T,KAAA,CAAMunE,YAAN,GAAqB3pD,SAArB;MACA4pD,sBAAA,KACE17E,CAAA,KAAMkU,KAAA,CAAM47D,MAAZ,IACA1vE,CAAA,KAAM8T,KAAA,CAAM67D,MADZ,IAEAj+C,SAAA,KAAc5d,KAAA,CAAMsnE,cAHtB;IAJ8C;IAUhD,IAAI,CAACE,sBAAL,EAA6B;MAC3B,OAAO,KAAP;IAD2B;IAI7B,MAAMC,IAAA,GAAOA,CAACrf,MAAD,EAASt8D,CAAT,EAAYI,CAAZ,EAAe0xB,SAAf,KAA6B;MACxC,IAAI,KAAK,CAAAskD,UAAL,CAAiBtmE,GAAjB,CAAqBwsD,MAAA,CAAO7zD,EAA5B,CAAJ,EAAqC;QAInC,MAAMf,MAAA,GAAS,KAAK,CAAA2uE,SAAL,CAAgBljE,GAAhB,CAAoB2e,SAApB,CAAf;QACA,IAAIpqB,MAAJ,EAAY;UACV40D,MAAA,CAAOyW,qBAAP,CAA6BrrE,MAA7B,EAAqC1H,CAArC,EAAwCI,CAAxC;QADU,CAAZ,MAEO;UACLk8D,MAAA,CAAOxqC,SAAP,GAAmBA,SAAnB;UACAwqC,MAAA,CAAOt8D,CAAP,GAAWA,CAAX;UACAs8D,MAAA,CAAOl8D,CAAP,GAAWA,CAAX;QAHK;MAP4B;IADG,CAA1C;IAgBA,KAAK+3D,WAAL,CAAiB;MACfC,GAAA,EAAKA,CAAA,KAAM;QACT,WAAW,CAACkE,MAAD,EAAS;UAAEiU,IAAF;UAAQC,IAAR;UAAciL;QAAd,CAAT,CAAX,IAAqDv6E,GAArD,EAA0D;UACxDy6E,IAAA,CAAKrf,MAAL,EAAaiU,IAAb,EAAmBC,IAAnB,EAAyBiL,YAAzB;QADwD;MADjD,CADI;MAMfpjB,IAAA,EAAMA,CAAA,KAAM;QACV,WAAW,CAACiE,MAAD,EAAS;UAAEwT,MAAF;UAAUC,MAAV;UAAkByL;QAAlB,CAAT,CAAX,IAA2Dt6E,GAA3D,EAAgE;UAC9Dy6E,IAAA,CAAKrf,MAAL,EAAawT,MAAb,EAAqBC,MAArB,EAA6ByL,cAA7B;QAD8D;MADtD,CANG;MAWfljB,QAAA,EAAU;IAXK,CAAjB;IAcA,OAAO,IAAP;EArDe;EA6DjBua,oBAAoB3gC,EAApB,EAAwBC,EAAxB,EAA4B;IAC1B,IAAI,CAAC,KAAK,CAAAukC,eAAV,EAA4B;MAC1B;IAD0B;IAG5B,WAAWpa,MAAX,IAAqB,KAAK,CAAAoa,eAAL,CAAsBvpE,IAAtB,EAArB,EAAmD;MACjDmvD,MAAA,CAAOiS,IAAP,CAAYr8B,EAAZ,EAAgBC,EAAhB;IADiD;EAJzB;EAc5B0mB,QAAQyD,MAAR,EAAgB;IACd,IAAIA,MAAA,CAAO50D,MAAP,KAAkB,IAAtB,EAA4B;MAC1B,MAAMA,MAAA,GAAS,KAAKkzE,QAAL,CAActe,MAAA,CAAOxqC,SAArB,CAAf;MACA,IAAIpqB,MAAJ,EAAY;QACVA,MAAA,CAAO8iE,YAAP,CAAoBlO,MAApB;QACA50D,MAAA,CAAOkiE,YAAP,CAAoBtN,MAApB;MAFU,CAAZ,MAGO;QACL,KAAKoO,SAAL,CAAepO,MAAf;QACA,KAAK0F,sBAAL,CAA4B1F,MAA5B;QACAA,MAAA,CAAOzD,OAAP;MAHK;IALmB,CAA5B,MAUO;MACLyD,MAAA,CAAO50D,MAAP,CAAckiE,YAAd,CAA2BtN,MAA3B;IADK;EAXO;EAgBhB,IAAIke,wBAAJA,CAAA,EAA+B;IAC7B,OACE,KAAKvQ,SAAL,IAAkBhP,uBAAlB,MACC,KAAK,CAAAgc,eAAL,CAAsBj8D,IAAtB,KAA+B,CAA/B,IACC,KAAKogE,mBAAL,CAAyBngB,uBAAzB,EAHJ;EAD6B;EAa/B2gB,SAAStf,MAAT,EAAiB;IACf,OAAO,KAAK,CAAA6Z,YAAL,KAAuB7Z,MAA9B;EADe;EAQjB2N,UAAA,EAAY;IACV,OAAO,KAAK,CAAAkM,YAAZ;EADU;EAQZjN,QAAA,EAAU;IACR,OAAO,KAAK,CAAAr4D,IAAZ;EADQ;EAIV,IAAI80D,YAAJA,CAAA,EAAmB;IACjB,OAAOvjE,uDAAA,CAAO,IAAP,EAAa,cAAb,EAA6B,IAAI4xE,YAAJ,EAA7B,CAAP;EADiB;AArxCW;;;;;;;;;;;;;ACzfhC;AAMA;AAOA;AAMA,SAASiI,kBAATA,CAA4BC,OAA5B,EAAqC3zD,eAArC,EAAsD4zD,eAAtD,EAAuE;EACrE,OAAO;IACLC,MAAA,EAAQ,KADH;IAELF,OAFK;IAGLG,MAAA,EAAQF,eAAA,CAAgBE,MAHnB;IAILxrE,IAAA,EAAM,MAJD;IAKLyrE,WAAA,EAAa/zD,eAAA,GAAkB,SAAlB,GAA8B,aALtC;IAMLg0D,QAAA,EAAU;EANL,CAAP;AADqE;AAWvE,SAASC,aAATA,CAAuBl0D,WAAvB,EAAoC;EAClC,MAAM4zD,OAAA,GAAU,IAAIO,OAAJ,EAAhB;EACA,WAAW5kC,QAAX,IAAuBvvB,WAAvB,EAAoC;IAClC,MAAMpU,KAAA,GAAQoU,WAAA,CAAYuvB,QAAZ,CAAd;IACA,IAAI3jC,KAAA,KAAU8E,SAAd,EAAyB;MACvB;IADuB;IAGzBkjE,OAAA,CAAQztE,MAAR,CAAeopC,QAAf,EAAyB3jC,KAAzB;EALkC;EAOpC,OAAOgoE,OAAP;AATkC;AAYpC,SAASQ,cAATA,CAAwB74D,GAAxB,EAA6B;EAC3B,IAAIA,GAAA,YAAe0J,UAAnB,EAA+B;IAC7B,OAAO1J,GAAA,CAAIsJ,MAAX;EAD6B;EAG/B,IAAItJ,GAAA,YAAe8Y,WAAnB,EAAgC;IAC9B,OAAO9Y,GAAP;EAD8B;EAGhCthB,qDAAA,CAAM,4CAA2CshB,GAA5C,EAAL;EACA,OAAO,IAAI0J,UAAJ,CAAe1J,GAAf,EAAoBsJ,MAA3B;AAR2B;AAY7B,MAAMjG,cAAN,CAAqB;EACnBvgB,YAAYuK,MAAZ,EAAoB;IAClB,KAAKA,MAAL,GAAcA,MAAd;IACA,KAAKyrE,MAAL,GAAc,YAAYx7D,IAAZ,CAAiBjQ,MAAA,CAAOK,GAAxB,CAAd;IACA,KAAK+W,WAAL,GAAoB,KAAKq0D,MAAL,IAAezrE,MAAA,CAAOoX,WAAvB,IAAuC,EAA1D;IAEA,KAAKs0D,kBAAL,GAA0B,IAA1B;IACA,KAAKC,oBAAL,GAA4B,EAA5B;EANkB;EASpB,IAAIC,sBAAJA,CAAA,EAA6B;IAC3B,OAAO,KAAKF,kBAAL,EAAyBG,OAAzB,IAAoC,CAA3C;EAD2B;EAI7BvgD,cAAA,EAAgB;IACd1X,uDAAA,CACE,CAAC,KAAK83D,kBADR,EAEE,uDAFF;IAIA,KAAKA,kBAAL,GAA0B,IAAII,oBAAJ,CAAyB,IAAzB,CAA1B;IACA,OAAO,KAAKJ,kBAAZ;EANc;EAShBr/C,eAAe7O,KAAf,EAAsBS,GAAtB,EAA2B;IACzB,IAAIA,GAAA,IAAO,KAAK2tD,sBAAhB,EAAwC;MACtC,OAAO,IAAP;IADsC;IAGxC,MAAMnmD,MAAA,GAAS,IAAIsmD,yBAAJ,CAA8B,IAA9B,EAAoCvuD,KAApC,EAA2CS,GAA3C,CAAf;IACA,KAAK0tD,oBAAL,CAA0BhuE,IAA1B,CAA+B8nB,MAA/B;IACA,OAAOA,MAAP;EANyB;EAS3B2F,kBAAkBlH,MAAlB,EAA0B;IACxB,KAAKwnD,kBAAL,EAAyBvlD,MAAzB,CAAgCjC,MAAhC;IAEA,WAAWuB,MAAX,IAAqB,KAAKkmD,oBAAL,CAA0Bj7E,KAA1B,CAAgC,CAAhC,CAArB,EAAyD;MACvD+0B,MAAA,CAAOU,MAAP,CAAcjC,MAAd;IADuD;EAHjC;AAhCP;AA0CrB,MAAM4nD,oBAAN,CAA2B;EACzBr2E,YAAYu2E,MAAZ,EAAoB;IAClB,KAAKC,OAAL,GAAeD,MAAf;IACA,KAAKE,OAAL,GAAe,IAAf;IACA,KAAKL,OAAL,GAAe,CAAf;IACA,KAAKM,SAAL,GAAiB,IAAjB;IACA,MAAMnsE,MAAA,GAASgsE,MAAA,CAAOhsE,MAAtB;IACA,KAAKosE,gBAAL,GAAwBpsE,MAAA,CAAOqX,eAAP,IAA0B,KAAlD;IACA,KAAKg1D,cAAL,GAAsBrsE,MAAA,CAAOjD,MAA7B;IACA,KAAKuvE,kBAAL,GAA0B,IAAIj4D,8DAAJ,EAA1B;IACA,KAAKk4D,aAAL,GAAqBvsE,MAAA,CAAOgZ,YAAP,IAAuB,KAA5C;IACA,KAAKwzD,eAAL,GAAuBxsE,MAAA,CAAOyX,cAA9B;IACA,IAAI,CAAC,KAAK+0D,eAAN,IAAyB,CAAC,KAAKD,aAAnC,EAAkD;MAChD,KAAKA,aAAL,GAAqB,IAArB;IADgD;IAIlD,KAAKE,gBAAL,GAAwB,IAAIC,eAAJ,EAAxB;IACA,KAAKC,qBAAL,GAA6B,CAAC3sE,MAAA,CAAOiZ,aAArC;IACA,KAAK2zD,iBAAL,GAAyB,CAAC5sE,MAAA,CAAOgZ,YAAjC;IAEA,KAAK6zD,QAAL,GAAgBvB,aAAA,CAAc,KAAKW,OAAL,CAAa70D,WAA3B,CAAhB;IAEA,MAAM/W,GAAA,GAAML,MAAA,CAAOK,GAAnB;IACAktB,KAAA,CACEltB,GADF,EAEE0qE,kBAAA,CACE,KAAK8B,QADP,EAEE,KAAKT,gBAFP,EAGE,KAAKK,gBAHP,CAFF,EAQG/xD,IARH,CAQQukC,QAAA,IAAY;MAChB,IAAI,CAAC6rB,yEAAA,CAAuB7rB,QAAA,CAASxyB,MAAhC,CAAL,EAA8C;QAC5C,MAAMk+C,4EAAA,CAA0B1rB,QAAA,CAASxyB,MAAnC,EAA2CpsB,GAA3C,CAAN;MAD4C;MAG9C,KAAK6rE,OAAL,GAAejtB,QAAA,CAAS3C,IAAT,CAAcz2B,SAAd,EAAf;MACA,KAAKymD,kBAAL,CAAwBtxD,OAAxB;MAEA,MAAM8xD,iBAAA,GAAoB/wE,IAAA,IAAQ;QAChC,OAAOkjD,QAAA,CAAS+rB,OAAT,CAAiB/oE,GAAjB,CAAqBlG,IAArB,CAAP;MADgC,CAAlC;MAGA,MAAM;QAAEgxE,kBAAF;QAAsBC;MAAtB,IACJnC,mFAAA,CAAiC;QAC/BiC,iBAD+B;QAE/BrB,MAAA,EAAQ,KAAKQ,OAAL,CAAaR,MAFU;QAG/Bh0D,cAAA,EAAgB,KAAK+0D,eAHU;QAI/BxzD,YAAA,EAAc,KAAKuzD;MAJY,CAAjC,CADF;MAQA,KAAKK,iBAAL,GAAyBG,kBAAzB;MAEA,KAAKV,cAAL,GAAsBW,eAAA,IAAmB,KAAKX,cAA9C;MAEA,KAAKF,SAAL,GAAiBvB,4EAAA,CAA0BkC,iBAA1B,CAAjB;MAIA,IAAI,CAAC,KAAKH,qBAAN,IAA+B,KAAKC,iBAAxC,EAA2D;QACzD,KAAKzmD,MAAL,CAAY,IAAIzS,2DAAJ,CAAmB,wBAAnB,CAAZ;MADyD;IA1B3C,CARpB,EAsCGmI,KAtCH,CAsCS,KAAKywD,kBAAL,CAAwBvwD,MAtCjC;IAwCA,KAAKU,UAAL,GAAkB,IAAlB;EA9DkB;EAiEpB,IAAIuP,YAAJA,CAAA,EAAmB;IACjB,OAAO,KAAKsgD,kBAAL,CAAwB7xD,OAA/B;EADiB;EAInB,IAAI3Y,QAAJA,CAAA,EAAe;IACb,OAAO,KAAKqqE,SAAZ;EADa;EAIf,IAAIhgD,aAAJA,CAAA,EAAoB;IAClB,OAAO,KAAKkgD,cAAZ;EADkB;EAIpB,IAAIngD,gBAAJA,CAAA,EAAuB;IACrB,OAAO,KAAK0gD,iBAAZ;EADqB;EAIvB,IAAI3gD,oBAAJA,CAAA,EAA2B;IACzB,OAAO,KAAK0gD,qBAAZ;EADyB;EAI3B,MAAMjnD,IAANA,CAAA,EAAa;IACX,MAAM,KAAK4mD,kBAAL,CAAwB7xD,OAA9B;IACA,MAAM;MAAEzX,KAAF;MAAS2iB;IAAT,IAAkB,MAAM,KAAKumD,OAAL,CAAaxmD,IAAb,EAA9B;IACA,IAAIC,IAAJ,EAAU;MACR,OAAO;QAAE3iB,KAAF;QAAS2iB;MAAT,CAAP;IADQ;IAGV,KAAKkmD,OAAL,IAAgB7oE,KAAA,CAAMsZ,UAAtB;IACA,KAAKG,UAAL,GAAkB;MAChBkB,MAAA,EAAQ,KAAKkuD,OADG;MAEhBjuD,KAAA,EAAO,KAAKyuD;IAFI,CAAlB;IAKA,OAAO;MAAErpE,KAAA,EAAOwoE,cAAA,CAAexoE,KAAf,CAAT;MAAgC2iB,IAAA,EAAM;IAAtC,CAAP;EAZW;EAebQ,OAAOjC,MAAP,EAAe;IACb,KAAKgoD,OAAL,EAAc/lD,MAAd,CAAqBjC,MAArB;IACA,KAAKuoD,gBAAL,CAAsBvuD,KAAtB;EAFa;AArGU;AA4G3B,MAAM6tD,yBAAN,CAAgC;EAC9Bt2E,YAAYu2E,MAAZ,EAAoBxuD,KAApB,EAA2BS,GAA3B,EAAgC;IAC9B,KAAKguD,OAAL,GAAeD,MAAf;IACA,KAAKE,OAAL,GAAe,IAAf;IACA,KAAKL,OAAL,GAAe,CAAf;IACA,MAAM7rE,MAAA,GAASgsE,MAAA,CAAOhsE,MAAtB;IACA,KAAKosE,gBAAL,GAAwBpsE,MAAA,CAAOqX,eAAP,IAA0B,KAAlD;IACA,KAAK41D,eAAL,GAAuB,IAAI54D,8DAAJ,EAAvB;IACA,KAAKs4D,qBAAL,GAA6B,CAAC3sE,MAAA,CAAOiZ,aAArC;IAEA,KAAKwzD,gBAAL,GAAwB,IAAIC,eAAJ,EAAxB;IACA,KAAKG,QAAL,GAAgBvB,aAAA,CAAc,KAAKW,OAAL,CAAa70D,WAA3B,CAAhB;IACA,KAAKy1D,QAAL,CAActvE,MAAd,CAAqB,OAArB,EAA+B,SAAQigB,KAAM,IAAGS,GAAA,GAAM,CAAxB,EAA9B;IAEA,MAAM5d,GAAA,GAAML,MAAA,CAAOK,GAAnB;IACAktB,KAAA,CACEltB,GADF,EAEE0qE,kBAAA,CACE,KAAK8B,QADP,EAEE,KAAKT,gBAFP,EAGE,KAAKK,gBAHP,CAFF,EAQG/xD,IARH,CAQQukC,QAAA,IAAY;MAChB,IAAI,CAAC6rB,yEAAA,CAAuB7rB,QAAA,CAASxyB,MAAhC,CAAL,EAA8C;QAC5C,MAAMk+C,4EAAA,CAA0B1rB,QAAA,CAASxyB,MAAnC,EAA2CpsB,GAA3C,CAAN;MAD4C;MAG9C,KAAK4sE,eAAL,CAAqBjyD,OAArB;MACA,KAAKkxD,OAAL,GAAejtB,QAAA,CAAS3C,IAAT,CAAcz2B,SAAd,EAAf;IALgB,CARpB,EAeGhK,KAfH,CAeS,KAAKoxD,eAAL,CAAqBlxD,MAf9B;IAiBA,KAAKU,UAAL,GAAkB,IAAlB;EA/B8B;EAkChC,IAAIwP,oBAAJA,CAAA,EAA2B;IACzB,OAAO,KAAK0gD,qBAAZ;EADyB;EAI3B,MAAMjnD,IAANA,CAAA,EAAa;IACX,MAAM,KAAKunD,eAAL,CAAqBxyD,OAA3B;IACA,MAAM;MAAEzX,KAAF;MAAS2iB;IAAT,IAAkB,MAAM,KAAKumD,OAAL,CAAaxmD,IAAb,EAA9B;IACA,IAAIC,IAAJ,EAAU;MACR,OAAO;QAAE3iB,KAAF;QAAS2iB;MAAT,CAAP;IADQ;IAGV,KAAKkmD,OAAL,IAAgB7oE,KAAA,CAAMsZ,UAAtB;IACA,KAAKG,UAAL,GAAkB;MAAEkB,MAAA,EAAQ,KAAKkuD;IAAf,CAAlB;IAEA,OAAO;MAAE7oE,KAAA,EAAOwoE,cAAA,CAAexoE,KAAf,CAAT;MAAgC2iB,IAAA,EAAM;IAAtC,CAAP;EATW;EAYbQ,OAAOjC,MAAP,EAAe;IACb,KAAKgoD,OAAL,EAAc/lD,MAAd,CAAqBjC,MAArB;IACA,KAAKuoD,gBAAL,CAAsBvuD,KAAtB;EAFa;AAnDe;;;;;;;;;;;;;AC5MhC;AAWA,MAAM7I,UAAN,CAAiB;EACf,CAAA+3D,WAAA,GAAe,IAAI3qE,GAAJ,EAAf;EAEAhN,YAAY;IACVqjB,aAAA,GAAgBC,UAAA,CAAW3hB,QADjB;IAEVsiB,YAAA,GAAe;EAFL,CAAZ,EAGG;IACD,KAAKolC,SAAL,GAAiBhmC,aAAjB;IAEA,KAAKu0D,eAAL,GAAuB,IAAI5qE,GAAJ,EAAvB;IACA,KAAKiX,YAAL,GAGM,IAHN;IAME,KAAK4zD,eAAL,GAAuB,EAAvB;IACA,KAAKC,cAAL,GAAsB,CAAtB;EAXD;EAeHC,kBAAkBC,cAAlB,EAAkC;IAChC,KAAKJ,eAAL,CAAqBv1E,GAArB,CAAyB21E,cAAzB;IACA,KAAK3uB,SAAL,CAAe4uB,KAAf,CAAqB51E,GAArB,CAAyB21E,cAAzB;EAFgC;EAKlCE,qBAAqBF,cAArB,EAAqC;IACnC,KAAKJ,eAAL,CAAqB96D,MAArB,CAA4Bk7D,cAA5B;IACA,KAAK3uB,SAAL,CAAe4uB,KAAf,CAAqBn7D,MAArB,CAA4Bk7D,cAA5B;EAFmC;EAKrCG,WAAW9tC,IAAX,EAAiB;IACf,IAAI,CAAC,KAAKpmB,YAAV,EAAwB;MACtB,KAAKA,YAAL,GAAoB,KAAKolC,SAAL,CAAeznD,aAAf,CAA6B,OAA7B,CAApB;MACA,KAAKynD,SAAL,CAAeoH,eAAf,CACG8C,oBADH,CACwB,MADxB,EACgC,CADhC,EAEGzrD,MAFH,CAEU,KAAKmc,YAFf;IAFsB;IAMxB,MAAMm0D,UAAA,GAAa,KAAKn0D,YAAL,CAAkBo0D,KAArC;IACAD,UAAA,CAAWD,UAAX,CAAsB9tC,IAAtB,EAA4B+tC,UAAA,CAAWE,QAAX,CAAoBhxE,MAAhD;EARe;EAWjBuO,MAAA,EAAQ;IACN,WAAWmiE,cAAX,IAA6B,KAAKJ,eAAlC,EAAmD;MACjD,KAAKvuB,SAAL,CAAe4uB,KAAf,CAAqBn7D,MAArB,CAA4Bk7D,cAA5B;IADiD;IAGnD,KAAKJ,eAAL,CAAqB/hE,KAArB;IACA,KAAK,CAAA8hE,WAAL,CAAkB9hE,KAAlB;IAEA,IAAI,KAAKoO,YAAT,EAAuB;MAErB,KAAKA,YAAL,CAAkBlP,MAAlB;MACA,KAAKkP,YAAL,GAAoB,IAApB;IAHqB;EAPjB;EAcR,MAAMs0D,cAANA,CAAqB;IAAEz7B,cAAA,EAAgBz+B,IAAlB;IAAwBm6D;EAAxB,CAArB,EAA6D;IAC3D,IAAI,CAACn6D,IAAD,IAAS,KAAK,CAAAs5D,WAAL,CAAkBxuE,GAAlB,CAAsBkV,IAAA,CAAKu+B,UAA3B,CAAb,EAAqD;MACnD;IADmD;IAGrDz+B,uDAAA,CACE,CAAC,KAAK+E,eADR,EAEE,mEAFF;IAKA,IAAI,KAAKu1D,yBAAT,EAAoC;MAClC,MAAM;QAAE77B,UAAF;QAAc/uC,GAAd;QAAmB7L;MAAnB,IAA6Bqc,IAAnC;MACA,MAAMq6D,QAAA,GAAW,IAAIC,QAAJ,CAAa/7B,UAAb,EAAyB/uC,GAAzB,EAA8B7L,KAA9B,CAAjB;MACA,KAAK+1E,iBAAL,CAAuBW,QAAvB;MACA,IAAI;QACF,MAAMA,QAAA,CAASE,IAAT,EAAN;QACA,KAAK,CAAAjB,WAAL,CAAkBt1E,GAAlB,CAAsBu6C,UAAtB;QACA47B,YAAA,GAAen6D,IAAf;MAHE,CAAJ,CAIE,MAAM;QACNziB,qDAAA,CACG,4BAA2ByiB,IAAA,CAAKw6D,YAAa,sDADhD;QAIA,KAAKX,oBAAL,CAA0BQ,QAA1B;MALM;MAOR;IAfkC;IAkBpCh9E,4DAAA,CACE,+DADF;EA3B2D;EAgC7D,MAAMib,IAANA,CAAW8gB,IAAX,EAAiB;IAEf,IAAIA,IAAA,CAAKqhD,QAAL,IAAkBrhD,IAAA,CAAKymB,WAAL,IAAoB,CAACzmB,IAAA,CAAKqlB,cAAhD,EAAiE;MAC/D;IAD+D;IAGjErlB,IAAA,CAAKqhD,QAAL,GAAgB,IAAhB;IAEA,IAAIrhD,IAAA,CAAKqlB,cAAT,EAAyB;MACvB,MAAM,KAAKy7B,cAAL,CAAoB9gD,IAApB,CAAN;MACA;IAFuB;IAKzB,IAAI,KAAKghD,yBAAT,EAAoC;MAClC,MAAMT,cAAA,GAAiBvgD,IAAA,CAAKshD,oBAAL,EAAvB;MACA,IAAIf,cAAJ,EAAoB;QAClB,KAAKD,iBAAL,CAAuBC,cAAvB;QACA,IAAI;UACF,MAAMA,cAAA,CAAe9vD,MAArB;QADE,CAAJ,CAEE,OAAOf,EAAP,EAAW;UACXvrB,qDAAA,CAAM,wBAAuBo8E,cAAA,CAAegB,MAAO,OAAM7xD,EAAG,IAA5D;UAGAsQ,IAAA,CAAKvU,eAAL,GAAuB,IAAvB;UACA,MAAMiE,EAAN;QALW;MAJK;MAYpB;IAdkC;IAkBpC,MAAMkjB,IAAA,GAAO5S,IAAA,CAAKwhD,kBAAL,EAAb;IACA,IAAI5uC,IAAJ,EAAU;MACR,KAAK8tC,UAAL,CAAgB9tC,IAAhB;MAEA,IAAI,KAAK6uC,0BAAT,EAAqC;QACnC;MADmC;MAMrC,MAAM,IAAI5zD,OAAJ,CAAYC,OAAA,IAAW;QAC3B,MAAMskC,OAAA,GAAU,KAAKsvB,qBAAL,CAA2B5zD,OAA3B,CAAhB;QACA,KAAK6zD,qBAAL,CAA2B3hD,IAA3B,EAAiCoyB,OAAjC;MAF2B,CAAvB,CAAN;IATQ;EA/BK;EAgDjB,IAAI4uB,yBAAJA,CAAA,EAAgC;IAC9B,MAAMY,QAAA,GAAW,CAAC,CAAC,KAAKhwB,SAAL,EAAgB4uB,KAAnC;IAQA,OAAOx8E,uDAAA,CAAO,IAAP,EAAa,2BAAb,EAA0C49E,QAA1C,CAAP;EAT8B;EAYhC,IAAIH,0BAAJA,CAAA,EAAiC;IAK/B,IAAII,SAAA,GAAY,KAAhB;IAEE,IAAI96D,qDAAJ,EAAc;MAEZ86D,SAAA,GAAY,IAAZ;IAFY,CAAd,MAGO,IACL,OAAOC,SAAP,KAAqB,WAArB,IACA,OAAOA,SAAA,EAAWC,SAAlB,KAAgC,QADhC,IAIA,iCAAiCh/D,IAAjC,CAAsC++D,SAAA,CAAUC,SAAhD,CALK,EAML;MAEAF,SAAA,GAAY,IAAZ;IAFA;IAKJ,OAAO79E,uDAAA,CAAO,IAAP,EAAa,4BAAb,EAA2C69E,SAA3C,CAAP;EArB+B;EAwBjCH,sBAAsBvqD,QAAtB,EAAgC;IAK9B,SAAS6qD,eAATA,CAAA,EAA2B;MACzBt7D,uDAAA,CAAO,CAAC0rC,OAAA,CAAQ35B,IAAhB,EAAsB,2CAAtB;MACA25B,OAAA,CAAQ35B,IAAR,GAAe,IAAf;MAGA,OAAO2nD,eAAA,CAAgBvwE,MAAhB,GAAyB,CAAzB,IAA8BuwE,eAAA,CAAgB,CAAhB,EAAmB3nD,IAAxD,EAA8D;QAC5D,MAAMwpD,YAAA,GAAe7B,eAAA,CAAgB7oE,KAAhB,EAArB;QACA3J,UAAA,CAAWq0E,YAAA,CAAa9qD,QAAxB,EAAkC,CAAlC;MAF4D;IALrC;IAW3B,MAAM;MAAEipD;IAAF,IAAsB,IAA5B;IACA,MAAMhuB,OAAA,GAAU;MACd35B,IAAA,EAAM,KADQ;MAEdhC,QAAA,EAAUurD,eAFI;MAGd7qD;IAHc,CAAhB;IAKAipD,eAAA,CAAgB3vE,IAAhB,CAAqB2hD,OAArB;IACA,OAAOA,OAAP;EAvB8B;EA0BhC,IAAI8vB,aAAJA,CAAA,EAAoB;IAOlB,MAAMC,QAAA,GAAWC,IAAA,CACf,yEACE,sEADF,GAEE,sEAFF,GAGE,sEAHF,GAIE,sEAJF,GAKE,sEALF,GAME,sEANF,GAOE,sEAPF,GAQE,sEARF,GASE,sEATF,GAUE,sEAVF,GAWE,sEAXF,GAYE,sEAZF,GAaE,sEAbF,GAcE,sEAdF,GAeE,sEAfF,GAgBE,sEAhBF,GAiBE,sEAjBF,GAkBE,sEAlBF,GAmBE,sEAnBF,GAoBE,sEApBF,GAqBE,sEAtBa,CAAjB;IAwBA,OAAOp+E,uDAAA,CAAO,IAAP,EAAa,eAAb,EAA8Bm+E,QAA9B,CAAP;EA/BkB;EAkCpBR,sBAAsB3hD,IAAtB,EAA4BoyB,OAA5B,EAAqC;IAWnC,SAASiwB,KAATA,CAAe/8E,IAAf,EAAqBsjD,MAArB,EAA6B;MAC3B,OACGtjD,IAAA,CAAKg9E,UAAL,CAAgB15B,MAAhB,KAA2B,EAA5B,GACCtjD,IAAA,CAAKg9E,UAAL,CAAgB15B,MAAA,GAAS,CAAzB,KAA+B,EADhC,GAECtjD,IAAA,CAAKg9E,UAAL,CAAgB15B,MAAA,GAAS,CAAzB,KAA+B,CAFhC,GAGCtjD,IAAA,CAAKg9E,UAAL,CAAgB15B,MAAA,GAAS,CAAzB,IAA8B,IAJjC;IAD2B;IAQ7B,SAAS25B,YAATA,CAAsBvd,CAAtB,EAAyBpc,MAAzB,EAAiCtrC,MAAjC,EAAyCe,MAAzC,EAAiD;MAC/C,MAAMmkE,MAAA,GAASxd,CAAA,CAAEtpD,SAAF,CAAY,CAAZ,EAAektC,MAAf,CAAf;MACA,MAAM65B,MAAA,GAASzd,CAAA,CAAEtpD,SAAF,CAAYktC,MAAA,GAAStrC,MAArB,CAAf;MACA,OAAOklE,MAAA,GAASnkE,MAAT,GAAkBokE,MAAzB;IAH+C;IAKjD,IAAIxkE,CAAJ,EAAOwD,EAAP;IAGA,MAAM2C,MAAA,GAAS,KAAKwtC,SAAL,CAAeznD,aAAf,CAA6B,QAA7B,CAAf;IACAia,MAAA,CAAOpf,KAAP,GAAe,CAAf;IACAof,MAAA,CAAOnf,MAAP,GAAgB,CAAhB;IACA,MAAM0/B,GAAA,GAAMvgB,MAAA,CAAOof,UAAP,CAAkB,IAAlB,CAAZ;IAEA,IAAIk/C,MAAA,GAAS,CAAb;IACA,SAASC,WAATA,CAAqB9zE,IAArB,EAA2BsoB,QAA3B,EAAqC;MAEnC,IAAI,EAAEurD,MAAF,GAAW,EAAf,EAAmB;QACjBv+E,qDAAA,CAAK,8BAAL;QACAgzB,QAAA;QACA;MAHiB;MAKnBwN,GAAA,CAAI3E,IAAJ,GAAW,UAAUnxB,IAArB;MACA81B,GAAA,CAAIiiB,QAAJ,CAAa,GAAb,EAAkB,CAAlB,EAAqB,EAArB;MACA,MAAMzmB,SAAA,GAAYwE,GAAA,CAAIkX,YAAJ,CAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAvB,EAA0B,CAA1B,CAAlB;MACA,IAAI1b,SAAA,CAAU76B,IAAV,CAAe,CAAf,IAAoB,CAAxB,EAA2B;QACzB6xB,QAAA;QACA;MAFyB;MAI3BvpB,UAAA,CAAW+0E,WAAA,CAAYzjE,IAAZ,CAAiB,IAAjB,EAAuBrQ,IAAvB,EAA6BsoB,QAA7B,CAAX;IAdmC;IAiBrC,MAAMkpD,cAAA,GAAkB,KAAIthC,IAAA,CAAKC,GAAL,EAAL,GAAkB,KAAKqhC,cAAL,EAAlB,EAAvB;IAMA,IAAI/6E,IAAA,GAAO,KAAK48E,aAAhB;IACA,MAAMU,cAAA,GAAiB,GAAvB;IACAt9E,IAAA,GAAOi9E,YAAA,CACLj9E,IADK,EAELs9E,cAFK,EAGLvC,cAAA,CAAexwE,MAHV,EAILwwE,cAJK,CAAP;IAOA,MAAMwC,mBAAA,GAAsB,EAA5B;IACA,MAAMC,UAAA,GAAa,UAAnB;IACA,IAAIC,QAAA,GAAWV,KAAA,CAAM/8E,IAAN,EAAYu9E,mBAAZ,CAAf;IACA,KAAK5kE,CAAA,GAAI,CAAJ,EAAOwD,EAAA,GAAK4+D,cAAA,CAAexwE,MAAf,GAAwB,CAAzC,EAA4CoO,CAAA,GAAIwD,EAAhD,EAAoDxD,CAAA,IAAK,CAAzD,EAA4D;MAC1D8kE,QAAA,GAAYA,QAAA,GAAWD,UAAX,GAAwBT,KAAA,CAAMhC,cAAN,EAAsBpiE,CAAtB,CAAzB,GAAqD,CAAhE;IAD0D;IAG5D,IAAIA,CAAA,GAAIoiE,cAAA,CAAexwE,MAAvB,EAA+B;MAE7BkzE,QAAA,GAAYA,QAAA,GAAWD,UAAX,GAAwBT,KAAA,CAAMhC,cAAA,GAAiB,KAAvB,EAA8BpiE,CAA9B,CAAzB,GAA6D,CAAxE;IAF6B;IAI/B3Y,IAAA,GAAOi9E,YAAA,CAAaj9E,IAAb,EAAmBu9E,mBAAnB,EAAwC,CAAxC,EAA2C5C,yDAAA,CAAS8C,QAAT,CAA3C,CAAP;IAEA,MAAM5vE,GAAA,GAAO,iCAAgC6vE,IAAA,CAAK19E,IAAL,CAAW,IAAxD;IACA,MAAMstC,IAAA,GAAQ,4BAA2BytC,cAAe,SAAQltE,GAAI,GAApE;IACA,KAAKutE,UAAL,CAAgB9tC,IAAhB;IAEA,MAAM5hC,GAAA,GAAM,KAAK4gD,SAAL,CAAeznD,aAAf,CAA6B,KAA7B,CAAZ;IACA6G,GAAA,CAAIzG,KAAJ,CAAUgD,UAAV,GAAuB,QAAvB;IACAyD,GAAA,CAAIzG,KAAJ,CAAUvF,KAAV,GAAkBgM,GAAA,CAAIzG,KAAJ,CAAUtF,MAAV,GAAmB,MAArC;IACA+L,GAAA,CAAIzG,KAAJ,CAAU2kD,QAAV,GAAqB,UAArB;IACAl+C,GAAA,CAAIzG,KAAJ,CAAUgC,GAAV,GAAgByE,GAAA,CAAIzG,KAAJ,CAAU+B,IAAV,GAAiB,KAAjC;IAEA,WAAWuC,IAAX,IAAmB,CAACmxB,IAAA,CAAKmlB,UAAN,EAAkBk7B,cAAlB,CAAnB,EAAsD;MACpD,MAAMjqB,IAAA,GAAO,KAAKxE,SAAL,CAAeznD,aAAf,CAA6B,MAA7B,CAAb;MACAisD,IAAA,CAAKz8C,WAAL,GAAmB,IAAnB;MACAy8C,IAAA,CAAK7rD,KAAL,CAAW04E,UAAX,GAAwBp0E,IAAxB;MACAmC,GAAA,CAAIX,MAAJ,CAAW+lD,IAAX;IAJoD;IAMtD,KAAKxE,SAAL,CAAexC,IAAf,CAAoB/+C,MAApB,CAA2BW,GAA3B;IAEA2xE,WAAA,CAAYtC,cAAZ,EAA4B,MAAM;MAChCrvE,GAAA,CAAIsM,MAAJ;MACA80C,OAAA,CAAQ37B,QAAR;IAFgC,CAAlC;EA/FmC;AAxOtB;AA+UjB,MAAMvO,cAAN,CAAqB;EACnB3f,YACE26E,cADF,EAEE;IACE53D,eAAA,GAAkB,IADpB;IAEEG,eAAA,GAAkB,KAFpB;IAGEN,YAAA,GAAe,KAHjB;IAIE0U,WAAA,GAAc;EAJhB,CAFF,EAQE;IACA,KAAKsjD,cAAL,GAAsBr0E,MAAA,CAAO3J,MAAP,CAAc,IAAd,CAAtB;IAEA,WAAW8Y,CAAX,IAAgBilE,cAAhB,EAAgC;MAC9B,KAAKjlE,CAAL,IAAUilE,cAAA,CAAejlE,CAAf,CAAV;IAD8B;IAGhC,KAAKqN,eAAL,GAAuBA,eAAA,KAAoB,KAA3C;IACA,KAAKG,eAAL,GAAuBA,eAAA,KAAoB,IAA3C;IACA,KAAKN,YAAL,GAAoBA,YAAA,KAAiB,IAArC;IACA,KAAK41D,YAAL,GAAoBlhD,WAApB;EATA;EAYFyhD,qBAAA,EAAuB;IACrB,IAAI,CAAC,KAAKh8E,IAAN,IAAc,KAAKmmB,eAAvB,EAAwC;MACtC,OAAO,IAAP;IADsC;IAGxC,IAAI80D,cAAJ;IACA,IAAI,CAAC,KAAK6C,WAAV,EAAuB;MACrB7C,cAAA,GAAiB,IAAIW,QAAJ,CAAa,KAAK/7B,UAAlB,EAA8B,KAAK7/C,IAAnC,EAAyC,EAAzC,CAAjB;IADqB,CAAvB,MAEO;MACL,MAAMggD,GAAA,GAAM;QACV+9B,MAAA,EAAQ,KAAKD,WAAL,CAAiBE;MADf,CAAZ;MAGA,IAAI,KAAKF,WAAL,CAAiBG,WAArB,EAAkC;QAChCj+B,GAAA,CAAI/6C,KAAJ,GAAa,WAAU,KAAK64E,WAAL,CAAiBG,WAAY,KAApD;MADgC;MAGlChD,cAAA,GAAiB,IAAIW,QAAJ,CACf,KAAKkC,WAAL,CAAiBH,UADF,EAEf,KAAK39E,IAFU,EAGfggD,GAHe,CAAjB;IAPK;IAcP,KAAKy7B,YAAL,GAAoB,IAApB;IACA,OAAOR,cAAP;EAtBqB;EAyBvBiB,mBAAA,EAAqB;IACnB,IAAI,CAAC,KAAKl8E,IAAN,IAAc,KAAKmmB,eAAvB,EAAwC;MACtC,OAAO,IAAP;IADsC;IAGxC,MAAMnmB,IAAA,GAAO06E,8DAAA,CAAc,KAAK16E,IAAnB,CAAb;IAEA,MAAM6N,GAAA,GAAO,YAAW,KAAKqwE,QAAS,WAAUR,IAAA,CAAK19E,IAAL,CAAW,IAA3D;IACA,IAAIstC,IAAJ;IACA,IAAI,CAAC,KAAKwwC,WAAV,EAAuB;MACrBxwC,IAAA,GAAQ,4BAA2B,KAAKuS,UAAW,SAAQhyC,GAAI,GAA/D;IADqB,CAAvB,MAEO;MACL,IAAImyC,GAAA,GAAO,gBAAe,KAAK89B,WAAL,CAAiBE,UAAW,GAAtD;MACA,IAAI,KAAKF,WAAL,CAAiBG,WAArB,EAAkC;QAChCj+B,GAAA,IAAQ,uBAAsB,KAAK89B,WAAL,CAAiBG,WAAY,MAA3D;MADgC;MAGlC3wC,IAAA,GAAQ,4BAA2B,KAAKwwC,WAAL,CAAiBH,UAAW,KAAI39B,GAAI,OAAMnyC,GAAI,GAAjF;IALK;IAQP,KAAK4tE,YAAL,GAAoB,IAApB,EAA0B5tE,GAA1B;IACA,OAAOy/B,IAAP;EAnBmB;EAsBrB8T,iBAAiBzyB,IAAjB,EAAuBkyB,SAAvB,EAAkC;IAChC,IAAI,KAAKg9B,cAAL,CAAoBh9B,SAApB,MAAmCvrC,SAAvC,EAAkD;MAChD,OAAO,KAAKuoE,cAAL,CAAoBh9B,SAApB,CAAP;IADgD;IAIlD,IAAIs9B,IAAJ;IACA,IAAI;MACFA,IAAA,GAAOxvD,IAAA,CAAKlf,GAAL,CAAS,KAAKowC,UAAL,GAAkB,QAAlB,GAA6BgB,SAAtC,CAAP;IADE,CAAJ,CAEE,OAAOz2B,EAAP,EAAW;MACX,IAAI,CAAC,KAAKvE,YAAV,EAAwB;QACtB,MAAMuE,EAAN;MADsB;MAGxBvrB,qDAAA,CAAM,2CAA0CurB,EAAG,IAAnD;MAEA,OAAQ,KAAKyzD,cAAL,CAAoBh9B,SAApB,IAAiC,UAAUpkD,CAAV,EAAa6a,IAAb,EAAmB,EAA5D;IANW;IAYb,IAAI,KAAK0O,eAAL,IAAwBxnB,wDAAA,CAAYwnB,eAAxC,EAAyD;MACvD,MAAMo4D,KAAA,GAAQ,EAAd;MACA,WAAWp9C,OAAX,IAAsBm9C,IAAtB,EAA4B;QAC1B,MAAM1gC,IAAA,GAAOzc,OAAA,CAAQyc,IAAR,KAAiBnoC,SAAjB,GAA6B0rB,OAAA,CAAQyc,IAAR,CAAa//C,IAAb,CAAkB,GAAlB,CAA7B,GAAsD,EAAnE;QACA0gF,KAAA,CAAMjzE,IAAN,CAAW,IAAX,EAAiB61B,OAAA,CAAQ0zB,GAAzB,EAA8B,GAA9B,EAAmCjX,IAAnC,EAAyC,MAAzC;MAF0B;MAK5B,OAAQ,KAAKogC,cAAL,CAAoBh9B,SAApB,IAAiC,IAAIw9B,QAAJ,CACvC,GADuC,EAEvC,MAFuC,EAGvCD,KAAA,CAAM1gF,IAAN,CAAW,EAAX,CAHuC,CAAzC;IAPuD;IAezD,OAAQ,KAAKmgF,cAAL,CAAoBh9B,SAApB,IAAiC,UAAUpkD,CAAV,EAAa6a,IAAb,EAAmB;MAC1D,WAAW0pB,OAAX,IAAsBm9C,IAAtB,EAA4B;QAC1B,IAAIn9C,OAAA,CAAQ0zB,GAAR,KAAgB,OAApB,EAA6B;UAC3B1zB,OAAA,CAAQyc,IAAR,GAAe,CAACnmC,IAAD,EAAO,CAACA,IAAR,CAAf;QAD2B;QAI7B7a,CAAA,CAAEukC,OAAA,CAAQ0zB,GAAV,EAAe5a,KAAf,CAAqBr9C,CAArB,EAAwBukC,OAAA,CAAQyc,IAAhC;MAL0B;IAD8B,CAA5D;EAnCgC;AApEf;;;;;;;;;;;;AC1VrB;AAEA,MAAMp6B,QAAN,CAAe;EACb,CAAAi7D,WAAA;EAEA,CAAAt+E,IAAA;EAEAiD,YAAY;IAAEs7E,UAAF;IAAc5N;EAAd,CAAZ,EAAqC;IACnC,KAAK,CAAA2N,WAAL,GAAoBC,UAApB;IACA,KAAK,CAAAv+E,IAAL,GAAa2wE,OAAb;EAFmC;EAKrC6N,OAAA,EAAS;IACP,OAAO,KAAK,CAAAx+E,IAAZ;EADO;EAITyP,IAAIlG,IAAJ,EAAU;IACR,OAAO,KAAK,CAAA+0E,WAAL,CAAkB7uE,GAAlB,CAAsBlG,IAAtB,KAA+B,IAAtC;EADQ;EAIV+W,OAAA,EAAS;IACP,OAAOnB,8DAAA,CAAc,KAAK,CAAAm/D,WAAnB,CAAP;EADO;EAITlyE,IAAI7C,IAAJ,EAAU;IACR,OAAO,KAAK,CAAA+0E,WAAL,CAAkBlyE,GAAlB,CAAsB7C,IAAtB,CAAP;EADQ;AAtBG;;;;;;;;;;;;;ACFf;AACA;AAMA;AAMA,MAAMk1E,WAAA,GAAc,GAApB;AACA,MAAMC,wBAAA,GAA2B,GAAjC;AAEA,SAAS1F,cAATA,CAAwB2F,GAAxB,EAA6B;EAC3B,MAAM3+E,IAAA,GAAO2+E,GAAA,CAAIlyB,QAAjB;EACA,IAAI,OAAOzsD,IAAP,KAAgB,QAApB,EAA8B;IAC5B,OAAOA,IAAP;EAD4B;EAG9B,OAAOgiB,8DAAA,CAAchiB,IAAd,EAAoBypB,MAA3B;AAL2B;AAQ7B,MAAMm1D,cAAN,CAAqB;EACnB37E,YAAY4K,GAAZ,EAAiB4vC,IAAA,GAAO,EAAxB,EAA4B;IAC1B,KAAK5vC,GAAL,GAAWA,GAAX;IACA,KAAKorE,MAAL,GAAc,YAAYx7D,IAAZ,CAAiB5P,GAAjB,CAAd;IACA,KAAK+W,WAAL,GAAoB,KAAKq0D,MAAL,IAAex7B,IAAA,CAAK74B,WAArB,IAAqCpb,MAAA,CAAO3J,MAAP,CAAc,IAAd,CAAxD;IACA,KAAKglB,eAAL,GAAuB44B,IAAA,CAAK54B,eAAL,IAAwB,KAA/C;IAEA,KAAKg6D,SAAL,GAAiB,CAAjB;IACA,KAAKC,eAAL,GAAuBt1E,MAAA,CAAO3J,MAAP,CAAc,IAAd,CAAvB;EAP0B;EAU5Bk/E,aAAa/zD,KAAb,EAAoBS,GAApB,EAAyBkJ,SAAzB,EAAoC;IAClC,MAAM8oB,IAAA,GAAO;MACXzyB,KADW;MAEXS;IAFW,CAAb;IAIA,WAAWuzD,IAAX,IAAmBrqD,SAAnB,EAA8B;MAC5B8oB,IAAA,CAAKuhC,IAAL,IAAarqD,SAAA,CAAUqqD,IAAV,CAAb;IAD4B;IAG9B,OAAO,KAAKlyB,OAAL,CAAarP,IAAb,CAAP;EARkC;EAWpCwhC,YAAYtqD,SAAZ,EAAuB;IACrB,OAAO,KAAKm4B,OAAL,CAAan4B,SAAb,CAAP;EADqB;EAIvBm4B,QAAQrP,IAAR,EAAc;IACZ,MAAMkhC,GAAA,GAAM,IAAI5xB,cAAJ,EAAZ;IACA,MAAMmyB,KAAA,GAAQ,KAAKL,SAAL,EAAd;IACA,MAAMM,cAAA,GAAkB,KAAKL,eAAL,CAAqBI,KAArB,IAA8B;MAAEP;IAAF,CAAtD;IAEAA,GAAA,CAAIllE,IAAJ,CAAS,KAAT,EAAgB,KAAK5L,GAArB;IACA8wE,GAAA,CAAI95D,eAAJ,GAAsB,KAAKA,eAA3B;IACA,WAAWsvB,QAAX,IAAuB,KAAKvvB,WAA5B,EAAyC;MACvC,MAAMpU,KAAA,GAAQ,KAAKoU,WAAL,CAAiBuvB,QAAjB,CAAd;MACA,IAAI3jC,KAAA,KAAU8E,SAAd,EAAyB;QACvB;MADuB;MAGzBqpE,GAAA,CAAIS,gBAAJ,CAAqBjrC,QAArB,EAA+B3jC,KAA/B;IALuC;IAOzC,IAAI,KAAKyoE,MAAL,IAAe,WAAWx7B,IAA1B,IAAkC,SAASA,IAA/C,EAAqD;MACnDkhC,GAAA,CAAIS,gBAAJ,CAAqB,OAArB,EAA+B,SAAQ3hC,IAAA,CAAKzyB,KAAM,IAAGyyB,IAAA,CAAKhyB,GAAL,GAAW,CAAlC,EAA9B;MACA0zD,cAAA,CAAeE,cAAf,GAAgCX,wBAAhC;IAFmD,CAArD,MAGO;MACLS,cAAA,CAAeE,cAAf,GAAgCZ,WAAhC;IADK;IAGPE,GAAA,CAAI3xB,YAAJ,GAAmB,aAAnB;IAEA,IAAIvP,IAAA,CAAK6hC,OAAT,EAAkB;MAChBX,GAAA,CAAIrN,OAAJ,GAAc,UAAU3zD,GAAV,EAAe;QAC3B8/B,IAAA,CAAK6hC,OAAL,CAAaX,GAAA,CAAI1kD,MAAjB;MAD2B,CAA7B;IADgB;IAKlB0kD,GAAA,CAAI1xB,kBAAJ,GAAyB,KAAKsyB,aAAL,CAAmB3lE,IAAnB,CAAwB,IAAxB,EAA8BslE,KAA9B,CAAzB;IACAP,GAAA,CAAIa,UAAJ,GAAiB,KAAKv1D,UAAL,CAAgBrQ,IAAhB,CAAqB,IAArB,EAA2BslE,KAA3B,CAAjB;IAEAC,cAAA,CAAeM,iBAAf,GAAmChiC,IAAA,CAAKgiC,iBAAxC;IACAN,cAAA,CAAeO,MAAf,GAAwBjiC,IAAA,CAAKiiC,MAA7B;IACAP,cAAA,CAAeG,OAAf,GAAyB7hC,IAAA,CAAK6hC,OAA9B;IACAH,cAAA,CAAel1D,UAAf,GAA4BwzB,IAAA,CAAKxzB,UAAjC;IAEA00D,GAAA,CAAIv1D,IAAJ,CAAS,IAAT;IAEA,OAAO81D,KAAP;EArCY;EAwCdj1D,WAAWi1D,KAAX,EAAkBvhE,GAAlB,EAAuB;IACrB,MAAMwhE,cAAA,GAAiB,KAAKL,eAAL,CAAqBI,KAArB,CAAvB;IACA,IAAI,CAACC,cAAL,EAAqB;MACnB;IADmB;IAGrBA,cAAA,CAAel1D,UAAf,GAA4BtM,GAA5B;EALqB;EAQvB4hE,cAAcL,KAAd,EAAqBvhE,GAArB,EAA0B;IACxB,MAAMwhE,cAAA,GAAiB,KAAKL,eAAL,CAAqBI,KAArB,CAAvB;IACA,IAAI,CAACC,cAAL,EAAqB;MACnB;IADmB;IAIrB,MAAMR,GAAA,GAAMQ,cAAA,CAAeR,GAA3B;IACA,IAAIA,GAAA,CAAIzxB,UAAJ,IAAkB,CAAlB,IAAuBiyB,cAAA,CAAeM,iBAA1C,EAA6D;MAC3DN,cAAA,CAAeM,iBAAf;MACA,OAAON,cAAA,CAAeM,iBAAtB;IAF2D;IAK7D,IAAId,GAAA,CAAIzxB,UAAJ,KAAmB,CAAvB,EAA0B;MACxB;IADwB;IAI1B,IAAI,EAAEgyB,KAAA,IAAS,KAAKJ,eAAd,CAAN,EAAsC;MAGpC;IAHoC;IAMtC,OAAO,KAAKA,eAAL,CAAqBI,KAArB,CAAP;IAGA,IAAIP,GAAA,CAAI1kD,MAAJ,KAAe,CAAf,IAAoB,KAAKg/C,MAA7B,EAAqC;MACnCkG,cAAA,CAAeG,OAAf,GAAyBX,GAAA,CAAI1kD,MAA7B;MACA;IAFmC;IAIrC,MAAM0lD,SAAA,GAAYhB,GAAA,CAAI1kD,MAAJ,IAAcwkD,WAAhC;IAKA,MAAMmB,4BAAA,GACJD,SAAA,KAAclB,WAAd,IACAU,cAAA,CAAeE,cAAf,KAAkCX,wBAFpC;IAIA,IACE,CAACkB,4BAAD,IACAD,SAAA,KAAcR,cAAA,CAAeE,cAF/B,EAGE;MACAF,cAAA,CAAeG,OAAf,GAAyBX,GAAA,CAAI1kD,MAA7B;MACA;IAFA;IAKF,MAAMhP,KAAA,GAAQ+tD,cAAA,CAAe2F,GAAf,CAAd;IACA,IAAIgB,SAAA,KAAcjB,wBAAlB,EAA4C;MAC1C,MAAMmB,WAAA,GAAclB,GAAA,CAAIrE,iBAAJ,CAAsB,eAAtB,CAApB;MACA,MAAMxqB,OAAA,GAAU,2BAA2BhB,IAA3B,CAAgC+wB,WAAhC,CAAhB;MACAV,cAAA,CAAeO,MAAf,CAAsB;QACpB10D,KAAA,EAAOxO,QAAA,CAASszC,OAAA,CAAQ,CAAR,CAAT,EAAqB,EAArB,CADa;QAEpB7kC;MAFoB,CAAtB;IAH0C,CAA5C,MAOO,IAAIA,KAAJ,EAAW;MAChBk0D,cAAA,CAAeO,MAAf,CAAsB;QACpB10D,KAAA,EAAO,CADa;QAEpBC;MAFoB,CAAtB;IADgB,CAAX,MAKA;MACLk0D,cAAA,CAAeG,OAAf,GAAyBX,GAAA,CAAI1kD,MAA7B;IADK;EA3DiB;EAgE1B6lD,cAAcZ,KAAd,EAAqB;IACnB,OAAO,KAAKJ,eAAL,CAAqBI,KAArB,EAA4BP,GAAnC;EADmB;EAIrBoB,iBAAiBb,KAAjB,EAAwB;IACtB,OAAOA,KAAA,IAAS,KAAKJ,eAArB;EADsB;EAIxBkB,aAAad,KAAb,EAAoB;IAClB,MAAMP,GAAA,GAAM,KAAKG,eAAL,CAAqBI,KAArB,EAA4BP,GAAxC;IACA,OAAO,KAAKG,eAAL,CAAqBI,KAArB,CAAP;IACAP,GAAA,CAAIjzD,KAAJ;EAHkB;AAlJD;AA0JrB,MAAMjI,gBAAN,CAAuB;EACrBxgB,YAAYuK,MAAZ,EAAoB;IAClB,KAAKyyE,OAAL,GAAezyE,MAAf;IACA,KAAK0yE,QAAL,GAAgB,IAAItB,cAAJ,CAAmBpxE,MAAA,CAAOK,GAA1B,EAA+B;MAC7C+W,WAAA,EAAapX,MAAA,CAAOoX,WADyB;MAE7CC,eAAA,EAAiBrX,MAAA,CAAOqX;IAFqB,CAA/B,CAAhB;IAIA,KAAKm1D,eAAL,GAAuBxsE,MAAA,CAAOyX,cAA9B;IACA,KAAKi0D,kBAAL,GAA0B,IAA1B;IACA,KAAKC,oBAAL,GAA4B,EAA5B;EARkB;EAWpBgH,4BAA4BltD,MAA5B,EAAoC;IAClC,MAAMta,CAAA,GAAI,KAAKwgE,oBAAL,CAA0BiH,OAA1B,CAAkCntD,MAAlC,CAAV;IACA,IAAIta,CAAA,IAAK,CAAT,EAAY;MACV,KAAKwgE,oBAAL,CAA0BrH,MAA1B,CAAiCn5D,CAAjC,EAAoC,CAApC;IADU;EAFsB;EAOpCmgB,cAAA,EAAgB;IACd1X,uDAAA,CACE,CAAC,KAAK83D,kBADR,EAEE,yDAFF;IAIA,KAAKA,kBAAL,GAA0B,IAAImH,iCAAJ,CACxB,KAAKH,QADmB,EAExB,KAAKD,OAFmB,CAA1B;IAIA,OAAO,KAAK/G,kBAAZ;EATc;EAYhBr/C,eAAe7O,KAAf,EAAsBS,GAAtB,EAA2B;IACzB,MAAMwH,MAAA,GAAS,IAAIqtD,kCAAJ,CACb,KAAKJ,QADQ,EAEbl1D,KAFa,EAGbS,GAHa,CAAf;IAKAwH,MAAA,CAAOstD,QAAP,GAAkB,KAAKJ,2BAAL,CAAiCvmE,IAAjC,CAAsC,IAAtC,CAAlB;IACA,KAAKu/D,oBAAL,CAA0BhuE,IAA1B,CAA+B8nB,MAA/B;IACA,OAAOA,MAAP;EARyB;EAW3B2F,kBAAkBlH,MAAlB,EAA0B;IACxB,KAAKwnD,kBAAL,EAAyBvlD,MAAzB,CAAgCjC,MAAhC;IAEA,WAAWuB,MAAX,IAAqB,KAAKkmD,oBAAL,CAA0Bj7E,KAA1B,CAAgC,CAAhC,CAArB,EAAyD;MACvD+0B,MAAA,CAAOU,MAAP,CAAcjC,MAAd;IADuD;EAHjC;AA1CL;AAoDvB,MAAM2uD,iCAAN,CAAwC;EACtCp9E,YAAYu9E,OAAZ,EAAqBhzE,MAArB,EAA6B;IAC3B,KAAK0yE,QAAL,GAAgBM,OAAhB;IAEA,MAAM/iC,IAAA,GAAO;MACXgiC,iBAAA,EAAmB,KAAKgB,kBAAL,CAAwB7mE,IAAxB,CAA6B,IAA7B,CADR;MAEX8lE,MAAA,EAAQ,KAAKgB,OAAL,CAAa9mE,IAAb,CAAkB,IAAlB,CAFG;MAGX0lE,OAAA,EAAS,KAAKqB,QAAL,CAAc/mE,IAAd,CAAmB,IAAnB,CAHE;MAIXqQ,UAAA,EAAY,KAAK22D,WAAL,CAAiBhnE,IAAjB,CAAsB,IAAtB;IAJD,CAAb;IAMA,KAAKinE,IAAL,GAAYrzE,MAAA,CAAOK,GAAnB;IACA,KAAKizE,cAAL,GAAsBN,OAAA,CAAQvB,WAAR,CAAoBxhC,IAApB,CAAtB;IACA,KAAKsjC,0BAAL,GAAkC,IAAIl/D,8DAAJ,EAAlC;IACA,KAAKk4D,aAAL,GAAqBvsE,MAAA,CAAOgZ,YAAP,IAAuB,KAA5C;IACA,KAAKqzD,cAAL,GAAsBrsE,MAAA,CAAOjD,MAA7B;IACA,KAAKyvE,eAAL,GAAuBxsE,MAAA,CAAOyX,cAA9B;IACA,IAAI,CAAC,KAAK+0D,eAAN,IAAyB,CAAC,KAAKD,aAAnC,EAAkD;MAChD,KAAKA,aAAL,GAAqB,IAArB;IADgD;IAIlD,KAAKI,qBAAL,GAA6B,KAA7B;IACA,KAAKC,iBAAL,GAAyB,KAAzB;IAEA,KAAK4G,aAAL,GAAqB,EAArB;IACA,KAAKC,SAAL,GAAiB,EAAjB;IACA,KAAKC,KAAL,GAAa,KAAb;IACA,KAAKC,YAAL,GAAoB7rE,SAApB;IACA,KAAKqkE,SAAL,GAAiB,IAAjB;IAEA,KAAK1vD,UAAL,GAAkB,IAAlB;EA5B2B;EA+B7Bw2D,mBAAA,EAAqB;IACnB,MAAMW,gBAAA,GAAmB,KAAKN,cAA9B;IACA,MAAMO,cAAA,GAAiB,KAAKnB,QAAL,CAAcJ,aAAd,CAA4BsB,gBAA5B,CAAvB;IAEA,MAAM9G,iBAAA,GAAoB/wE,IAAA,IAAQ;MAChC,OAAO83E,cAAA,CAAe/G,iBAAf,CAAiC/wE,IAAjC,CAAP;IADgC,CAAlC;IAGA,MAAM;MAAEgxE,kBAAF;MAAsBC;IAAtB,IACJnC,mFAAA,CAAiC;MAC/BiC,iBAD+B;MAE/BrB,MAAA,EAAQ,KAAKiH,QAAL,CAAcjH,MAFS;MAG/Bh0D,cAAA,EAAgB,KAAK+0D,eAHU;MAI/BxzD,YAAA,EAAc,KAAKuzD;IAJY,CAAjC,CADF;IAQA,IAAIQ,kBAAJ,EAAwB;MACtB,KAAKH,iBAAL,GAAyB,IAAzB;IADsB;IAIxB,KAAKP,cAAL,GAAsBW,eAAA,IAAmB,KAAKX,cAA9C;IAEA,KAAKF,SAAL,GAAiBvB,4EAAA,CAA0BkC,iBAA1B,CAAjB;IAEA,IAAI,KAAKF,iBAAT,EAA4B;MAK1B,KAAK8F,QAAL,CAAcF,YAAd,CAA2BoB,gBAA3B;IAL0B;IAQ5B,KAAKL,0BAAL,CAAgCv4D,OAAhC;EA/BmB;EAkCrBk4D,QAAQ1gF,IAAR,EAAc;IACZ,IAAIA,IAAJ,EAAU;MACR,IAAI,KAAKihF,SAAL,CAAe12E,MAAf,GAAwB,CAA5B,EAA+B;QAC7B,MAAM+2E,iBAAA,GAAoB,KAAKL,SAAL,CAAehvE,KAAf,EAA1B;QACAqvE,iBAAA,CAAkB94D,OAAlB,CAA0B;UAAEhY,KAAA,EAAOxQ,IAAA,CAAKirB,KAAd;UAAqBkI,IAAA,EAAM;QAA3B,CAA1B;MAF6B,CAA/B,MAGO;QACL,KAAK6tD,aAAL,CAAmB71E,IAAnB,CAAwBnL,IAAA,CAAKirB,KAA7B;MADK;IAJC;IAQV,KAAKi2D,KAAL,GAAa,IAAb;IACA,IAAI,KAAKF,aAAL,CAAmBz2E,MAAnB,GAA4B,CAAhC,EAAmC;MACjC;IADiC;IAGnC,WAAW+2E,iBAAX,IAAgC,KAAKL,SAArC,EAAgD;MAC9CK,iBAAA,CAAkB94D,OAAlB,CAA0B;QAAEhY,KAAA,EAAO8E,SAAT;QAAoB6d,IAAA,EAAM;MAA1B,CAA1B;IAD8C;IAGhD,KAAK8tD,SAAL,CAAe12E,MAAf,GAAwB,CAAxB;EAhBY;EAmBdo2E,SAAS1mD,MAAT,EAAiB;IACf,KAAKknD,YAAL,GAAoBhJ,4EAAA,CAA0Bl+C,MAA1B,EAAkC,KAAK4mD,IAAvC,CAApB;IACA,KAAKE,0BAAL,CAAgCx3D,MAAhC,CAAuC,KAAK43D,YAA5C;IACA,WAAWG,iBAAX,IAAgC,KAAKL,SAArC,EAAgD;MAC9CK,iBAAA,CAAkB/3D,MAAlB,CAAyB,KAAK43D,YAA9B;IAD8C;IAGhD,KAAKF,SAAL,CAAe12E,MAAf,GAAwB,CAAxB;IACA,KAAKy2E,aAAL,CAAmBz2E,MAAnB,GAA4B,CAA5B;EAPe;EAUjBq2E,YAAYjjE,GAAZ,EAAiB;IACf,KAAKsM,UAAL,GAAkB;MAChBkB,MAAA,EAAQxN,GAAA,CAAIwN,MADI;MAEhBC,KAAA,EAAOzN,GAAA,CAAI4jE,gBAAJ,GAAuB5jE,GAAA,CAAIyN,KAA3B,GAAmC,KAAKyuD;IAF/B,CAAlB;EADe;EAOjB,IAAIvqE,QAAJA,CAAA,EAAe;IACb,OAAO,KAAKqqE,SAAZ;EADa;EAIf,IAAIjgD,gBAAJA,CAAA,EAAuB;IACrB,OAAO,KAAK0gD,iBAAZ;EADqB;EAIvB,IAAI3gD,oBAAJA,CAAA,EAA2B;IACzB,OAAO,KAAK0gD,qBAAZ;EADyB;EAI3B,IAAIxgD,aAAJA,CAAA,EAAoB;IAClB,OAAO,KAAKkgD,cAAZ;EADkB;EAIpB,IAAIrgD,YAAJA,CAAA,EAAmB;IACjB,OAAO,KAAKunD,0BAAL,CAAgC94D,OAAvC;EADiB;EAInB,MAAMiL,IAANA,CAAA,EAAa;IACX,IAAI,KAAKiuD,YAAT,EAAuB;MACrB,MAAM,KAAKA,YAAX;IADqB;IAGvB,IAAI,KAAKH,aAAL,CAAmBz2E,MAAnB,GAA4B,CAAhC,EAAmC;MACjC,MAAM0gB,KAAA,GAAQ,KAAK+1D,aAAL,CAAmB/uE,KAAnB,EAAd;MACA,OAAO;QAAEzB,KAAA,EAAOya,KAAT;QAAgBkI,IAAA,EAAM;MAAtB,CAAP;IAFiC;IAInC,IAAI,KAAK+tD,KAAT,EAAgB;MACd,OAAO;QAAE1wE,KAAA,EAAO8E,SAAT;QAAoB6d,IAAA,EAAM;MAA1B,CAAP;IADc;IAGhB,MAAMmuD,iBAAA,GAAoB,IAAIz/D,8DAAJ,EAA1B;IACA,KAAKo/D,SAAL,CAAe91E,IAAf,CAAoBm2E,iBAApB;IACA,OAAOA,iBAAA,CAAkBr5D,OAAzB;EAbW;EAgBb0L,OAAOjC,MAAP,EAAe;IACb,KAAKwvD,KAAL,GAAa,IAAb;IACA,KAAKH,0BAAL,CAAgCx3D,MAAhC,CAAuCmI,MAAvC;IACA,WAAW4vD,iBAAX,IAAgC,KAAKL,SAArC,EAAgD;MAC9CK,iBAAA,CAAkB94D,OAAlB,CAA0B;QAAEhY,KAAA,EAAO8E,SAAT;QAAoB6d,IAAA,EAAM;MAA1B,CAA1B;IAD8C;IAGhD,KAAK8tD,SAAL,CAAe12E,MAAf,GAAwB,CAAxB;IACA,IAAI,KAAK21E,QAAL,CAAcH,gBAAd,CAA+B,KAAKe,cAApC,CAAJ,EAAyD;MACvD,KAAKZ,QAAL,CAAcF,YAAd,CAA2B,KAAKc,cAAhC;IADuD;IAGzD,KAAK5H,kBAAL,GAA0B,IAA1B;EAVa;AA1IuB;AAyJxC,MAAMoH,kCAAN,CAAyC;EACvCr9E,YAAYu9E,OAAZ,EAAqBx1D,KAArB,EAA4BS,GAA5B,EAAiC;IAC/B,KAAKy0D,QAAL,GAAgBM,OAAhB;IAEA,MAAM/iC,IAAA,GAAO;MACXiiC,MAAA,EAAQ,KAAKgB,OAAL,CAAa9mE,IAAb,CAAkB,IAAlB,CADG;MAEX0lE,OAAA,EAAS,KAAKqB,QAAL,CAAc/mE,IAAd,CAAmB,IAAnB,CAFE;MAGXqQ,UAAA,EAAY,KAAK22D,WAAL,CAAiBhnE,IAAjB,CAAsB,IAAtB;IAHD,CAAb;IAKA,KAAKinE,IAAL,GAAYL,OAAA,CAAQ3yE,GAApB;IACA,KAAK2zE,UAAL,GAAkBhB,OAAA,CAAQzB,YAAR,CAAqB/zD,KAArB,EAA4BS,GAA5B,EAAiCgyB,IAAjC,CAAlB;IACA,KAAKwjC,SAAL,GAAiB,EAAjB;IACA,KAAKQ,YAAL,GAAoB,IAApB;IACA,KAAKP,KAAL,GAAa,KAAb;IACA,KAAKC,YAAL,GAAoB7rE,SAApB;IAEA,KAAK2U,UAAL,GAAkB,IAAlB;IACA,KAAKs2D,QAAL,GAAgB,IAAhB;EAhB+B;EAmBjCmB,OAAA,EAAS;IACP,KAAKnB,QAAL,GAAgB,IAAhB;EADO;EAITG,QAAQ1gF,IAAR,EAAc;IACZ,MAAMirB,KAAA,GAAQjrB,IAAA,CAAKirB,KAAnB;IACA,IAAI,KAAKg2D,SAAL,CAAe12E,MAAf,GAAwB,CAA5B,EAA+B;MAC7B,MAAM+2E,iBAAA,GAAoB,KAAKL,SAAL,CAAehvE,KAAf,EAA1B;MACAqvE,iBAAA,CAAkB94D,OAAlB,CAA0B;QAAEhY,KAAA,EAAOya,KAAT;QAAgBkI,IAAA,EAAM;MAAtB,CAA1B;IAF6B,CAA/B,MAGO;MACL,KAAKsuD,YAAL,GAAoBx2D,KAApB;IADK;IAGP,KAAKi2D,KAAL,GAAa,IAAb;IACA,WAAWI,iBAAX,IAAgC,KAAKL,SAArC,EAAgD;MAC9CK,iBAAA,CAAkB94D,OAAlB,CAA0B;QAAEhY,KAAA,EAAO8E,SAAT;QAAoB6d,IAAA,EAAM;MAA1B,CAA1B;IAD8C;IAGhD,KAAK8tD,SAAL,CAAe12E,MAAf,GAAwB,CAAxB;IACA,KAAKm3E,MAAL;EAbY;EAgBdf,SAAS1mD,MAAT,EAAiB;IACf,KAAKknD,YAAL,GAAoBhJ,4EAAA,CAA0Bl+C,MAA1B,EAAkC,KAAK4mD,IAAvC,CAApB;IACA,WAAWS,iBAAX,IAAgC,KAAKL,SAArC,EAAgD;MAC9CK,iBAAA,CAAkB/3D,MAAlB,CAAyB,KAAK43D,YAA9B;IAD8C;IAGhD,KAAKF,SAAL,CAAe12E,MAAf,GAAwB,CAAxB;IACA,KAAKk3E,YAAL,GAAoB,IAApB;EANe;EASjBb,YAAYjjE,GAAZ,EAAiB;IACf,IAAI,CAAC,KAAK8b,oBAAV,EAAgC;MAC9B,KAAKxP,UAAL,GAAkB;QAAEkB,MAAA,EAAQxN,GAAA,CAAIwN;MAAd,CAAlB;IAD8B;EADjB;EAMjB,IAAIsO,oBAAJA,CAAA,EAA2B;IACzB,OAAO,KAAP;EADyB;EAI3B,MAAMvG,IAANA,CAAA,EAAa;IACX,IAAI,KAAKiuD,YAAT,EAAuB;MACrB,MAAM,KAAKA,YAAX;IADqB;IAGvB,IAAI,KAAKM,YAAL,KAAsB,IAA1B,EAAgC;MAC9B,MAAMx2D,KAAA,GAAQ,KAAKw2D,YAAnB;MACA,KAAKA,YAAL,GAAoB,IAApB;MACA,OAAO;QAAEjxE,KAAA,EAAOya,KAAT;QAAgBkI,IAAA,EAAM;MAAtB,CAAP;IAH8B;IAKhC,IAAI,KAAK+tD,KAAT,EAAgB;MACd,OAAO;QAAE1wE,KAAA,EAAO8E,SAAT;QAAoB6d,IAAA,EAAM;MAA1B,CAAP;IADc;IAGhB,MAAMmuD,iBAAA,GAAoB,IAAIz/D,8DAAJ,EAA1B;IACA,KAAKo/D,SAAL,CAAe91E,IAAf,CAAoBm2E,iBAApB;IACA,OAAOA,iBAAA,CAAkBr5D,OAAzB;EAdW;EAiBb0L,OAAOjC,MAAP,EAAe;IACb,KAAKwvD,KAAL,GAAa,IAAb;IACA,WAAWI,iBAAX,IAAgC,KAAKL,SAArC,EAAgD;MAC9CK,iBAAA,CAAkB94D,OAAlB,CAA0B;QAAEhY,KAAA,EAAO8E,SAAT;QAAoB6d,IAAA,EAAM;MAA1B,CAA1B;IAD8C;IAGhD,KAAK8tD,SAAL,CAAe12E,MAAf,GAAwB,CAAxB;IACA,IAAI,KAAK21E,QAAL,CAAcH,gBAAd,CAA+B,KAAKyB,UAApC,CAAJ,EAAqD;MACnD,KAAKtB,QAAL,CAAcF,YAAd,CAA2B,KAAKwB,UAAhC;IADmD;IAGrD,KAAKE,MAAL;EATa;AA5EwB;;;;;;;;;;;;;;;;;;;;AC/XzC;AAeA,SAASC,uCAATA,CAAiDC,kBAAjD,EAAqE;EACnE,IAAIC,kBAAA,GAAqB,IAAzB;EAGA,IAAIj/C,GAAA,GAAMk/C,aAAA,CAAc,aAAd,EAA6B,GAA7B,EAAkChzB,IAAlC,CAAuC8yB,kBAAvC,CAAV;EACA,IAAIh/C,GAAJ,EAAS;IACPA,GAAA,GAAMA,GAAA,CAAI,CAAJ,CAAN;IACA,IAAItzB,QAAA,GAAWyyE,cAAA,CAAen/C,GAAf,CAAf;IACAtzB,QAAA,GAAW0yE,QAAA,CAAS1yE,QAAT,CAAX;IACAA,QAAA,GAAW2yE,aAAA,CAAc3yE,QAAd,CAAX;IACAA,QAAA,GAAW4yE,aAAA,CAAc5yE,QAAd,CAAX;IACA,OAAO6yE,aAAA,CAAc7yE,QAAd,CAAP;EANO;EAYTszB,GAAA,GAAMw/C,eAAA,CAAgBR,kBAAhB,CAAN;EACA,IAAIh/C,GAAJ,EAAS;IAEP,MAAMtzB,QAAA,GAAW4yE,aAAA,CAAct/C,GAAd,CAAjB;IACA,OAAOu/C,aAAA,CAAc7yE,QAAd,CAAP;EAHO;EAOTszB,GAAA,GAAMk/C,aAAA,CAAc,UAAd,EAA0B,GAA1B,EAA+BhzB,IAA/B,CAAoC8yB,kBAApC,CAAN;EACA,IAAIh/C,GAAJ,EAAS;IACPA,GAAA,GAAMA,GAAA,CAAI,CAAJ,CAAN;IACA,IAAItzB,QAAA,GAAWyyE,cAAA,CAAen/C,GAAf,CAAf;IACAtzB,QAAA,GAAW4yE,aAAA,CAAc5yE,QAAd,CAAX;IACA,OAAO6yE,aAAA,CAAc7yE,QAAd,CAAP;EAJO;EAUT,SAASwyE,aAATA,CAAuBO,gBAAvB,EAAyCC,KAAzC,EAAgD;IAC9C,OAAO,IAAIzyB,MAAJ,CACL,gBACEwyB,gBADF,GAEE,WAFF,GAKE,GALF,GAME,kBANF,GAOE,GAPF,GAQE,yBARF,GASE,GAVG,EAWLC,KAXK,CAAP;EAD8C;EAehD,SAASC,UAATA,CAAoBC,QAApB,EAA8BhyE,KAA9B,EAAqC;IACnC,IAAIgyE,QAAJ,EAAc;MACZ,IAAI,CAAC,iBAAiB/kE,IAAjB,CAAsBjN,KAAtB,CAAL,EAAmC;QACjC,OAAOA,KAAP;MADiC;MAGnC,IAAI;QACF,MAAMiyE,OAAA,GAAU,IAAIC,WAAJ,CAAgBF,QAAhB,EAA0B;UAAEG,KAAA,EAAO;QAAT,CAA1B,CAAhB;QACA,MAAMl5D,MAAA,GAASzH,sBAAA,CAAcxR,KAAd,CAAf;QACAA,KAAA,GAAQiyE,OAAA,CAAQ/R,MAAR,CAAejnD,MAAf,CAAR;QACAo4D,kBAAA,GAAqB,KAArB;MAJE,CAAJ,CAKE,MAAM;IATI;IAad,OAAOrxE,KAAP;EAdmC;EAgBrC,SAAS2xE,aAATA,CAAuB3xE,KAAvB,EAA8B;IAC5B,IAAIqxE,kBAAA,IAAsB,cAAcpkE,IAAd,CAAmBjN,KAAnB,CAA1B,EAAqD;MAEnDA,KAAA,GAAQ+xE,UAAA,CAAW,OAAX,EAAoB/xE,KAApB,CAAR;MACA,IAAIqxE,kBAAJ,EAAwB;QAEtBrxE,KAAA,GAAQ+xE,UAAA,CAAW,YAAX,EAAyB/xE,KAAzB,CAAR;MAFsB;IAH2B;IAQrD,OAAOA,KAAP;EAT4B;EAW9B,SAAS4xE,eAATA,CAAyBQ,qBAAzB,EAAgD;IAC9C,MAAM9yB,OAAA,GAAU,EAAhB;IACA,IAAI35C,KAAJ;IAGA,MAAM0sE,IAAA,GAAOf,aAAA,CAAc,iCAAd,EAAiD,IAAjD,CAAb;IACA,OAAQ,CAAA3rE,KAAA,GAAQ0sE,IAAA,CAAK/zB,IAAL,CAAU8zB,qBAAV,CAAR,MAA8C,IAAtD,EAA4D;MAC1D,IAAI,GAAG9mF,CAAH,EAAMgnF,IAAN,EAAYC,IAAZ,IAAoB5sE,KAAxB;MACAra,CAAA,GAAI0gB,QAAA,CAAS1gB,CAAT,EAAY,EAAZ,CAAJ;MACA,IAAIA,CAAA,IAAKg0D,OAAT,EAAkB;QAEhB,IAAIh0D,CAAA,KAAM,CAAV,EAAa;UACX;QADW;QAGb;MALgB;MAOlBg0D,OAAA,CAAQh0D,CAAR,IAAa,CAACgnF,IAAD,EAAOC,IAAP,CAAb;IAV0D;IAY5D,MAAMC,KAAA,GAAQ,EAAd;IACA,KAAK,IAAIlnF,CAAA,GAAI,CAAR,EAAWA,CAAA,GAAIg0D,OAAA,CAAQvlD,MAA5B,EAAoC,EAAEzO,CAAtC,EAAyC;MACvC,IAAI,EAAEA,CAAA,IAAKg0D,OAAL,CAAN,EAAqB;QAEnB;MAFmB;MAIrB,IAAI,CAACgzB,IAAD,EAAOC,IAAP,IAAejzB,OAAA,CAAQh0D,CAAR,CAAnB;MACAinF,IAAA,GAAOhB,cAAA,CAAegB,IAAf,CAAP;MACA,IAAID,IAAJ,EAAU;QACRC,IAAA,GAAOf,QAAA,CAASe,IAAT,CAAP;QACA,IAAIjnF,CAAA,KAAM,CAAV,EAAa;UACXinF,IAAA,GAAOd,aAAA,CAAcc,IAAd,CAAP;QADW;MAFL;MAMVC,KAAA,CAAM73E,IAAN,CAAW43E,IAAX;IAbuC;IAezC,OAAOC,KAAA,CAAMtlF,IAAN,CAAW,EAAX,CAAP;EAlC8C;EAoChD,SAASqkF,cAATA,CAAwBvxE,KAAxB,EAA+B;IAC7B,IAAIA,KAAA,CAAMuoC,UAAN,CAAiB,GAAjB,CAAJ,EAA2B;MACzB,MAAMiqC,KAAA,GAAQxyE,KAAA,CAAMtS,KAAN,CAAY,CAAZ,EAAege,KAAf,CAAqB,KAArB,CAAd;MAEA,KAAK,IAAIvD,CAAA,GAAI,CAAR,EAAWA,CAAA,GAAIqqE,KAAA,CAAMz4E,MAA1B,EAAkC,EAAEoO,CAApC,EAAuC;QACrC,MAAMsqE,SAAA,GAAYD,KAAA,CAAMrqE,CAAN,EAASynE,OAAT,CAAiB,GAAjB,CAAlB;QACA,IAAI6C,SAAA,KAAc,CAAC,CAAnB,EAAsB;UACpBD,KAAA,CAAMrqE,CAAN,IAAWqqE,KAAA,CAAMrqE,CAAN,EAASza,KAAT,CAAe,CAAf,EAAkB+kF,SAAlB,CAAX;UACAD,KAAA,CAAMz4E,MAAN,GAAeoO,CAAA,GAAI,CAAnB;QAFoB;QAItBqqE,KAAA,CAAMrqE,CAAN,IAAWqqE,KAAA,CAAMrqE,CAAN,EAAShE,UAAT,CAAoB,QAApB,EAA8B,IAA9B,CAAX;MANqC;MAQvCnE,KAAA,GAAQwyE,KAAA,CAAMtlF,IAAN,CAAW,GAAX,CAAR;IAXyB;IAa3B,OAAO8S,KAAP;EAd6B;EAgB/B,SAASyxE,aAATA,CAAuBiB,QAAvB,EAAiC;IAE/B,MAAMC,WAAA,GAAcD,QAAA,CAAS9C,OAAT,CAAiB,GAAjB,CAApB;IACA,IAAI+C,WAAA,KAAgB,CAAC,CAArB,EAAwB;MAItB,OAAOD,QAAP;IAJsB;IAMxB,MAAMV,QAAA,GAAWU,QAAA,CAAShlF,KAAT,CAAe,CAAf,EAAkBilF,WAAlB,CAAjB;IACA,MAAMC,SAAA,GAAYF,QAAA,CAAShlF,KAAT,CAAeilF,WAAA,GAAc,CAA7B,CAAlB;IAEA,MAAM3yE,KAAA,GAAQ4yE,SAAA,CAAU3sB,OAAV,CAAkB,SAAlB,EAA6B,EAA7B,CAAd;IACA,OAAO8rB,UAAA,CAAWC,QAAX,EAAqBhyE,KAArB,CAAP;EAb+B;EAejC,SAAS0xE,aAATA,CAAuB1xE,KAAvB,EAA8B;IAW5B,IAAI,CAACA,KAAA,CAAMuoC,UAAN,CAAiB,IAAjB,CAAD,IAA2B,uBAAuBt7B,IAAvB,CAA4BjN,KAA5B,CAA/B,EAAmE;MACjE,OAAOA,KAAP;IADiE;IAUnE,OAAOA,KAAA,CAAMmE,UAAN,CACL,gDADK,EAEL,UAAUm7C,OAAV,EAAmBuzB,OAAnB,EAA4Bb,QAA5B,EAAsC31B,IAAtC,EAA4C;MAC1C,IAAI21B,QAAA,KAAa,GAAb,IAAoBA,QAAA,KAAa,GAArC,EAA0C;QAExC31B,IAAA,GAAOA,IAAA,CAAKl4C,UAAL,CAAgB,GAAhB,EAAqB,GAArB,CAAP;QACAk4C,IAAA,GAAOA,IAAA,CAAKl4C,UAAL,CAAgB,oBAAhB,EAAsC,UAAUwB,KAAV,EAAiBmtE,GAAjB,EAAsB;UACjE,OAAOC,MAAA,CAAOC,YAAP,CAAoBhnE,QAAA,CAAS8mE,GAAT,EAAc,EAAd,CAApB,CAAP;QADiE,CAA5D,CAAP;QAGA,OAAOf,UAAA,CAAWc,OAAX,EAAoBx2B,IAApB,CAAP;MANwC;MAQ1C,IAAI;QACFA,IAAA,GAAOiwB,IAAA,CAAKjwB,IAAL,CAAP;MADE,CAAJ,CAEE,MAAM;MACR,OAAO01B,UAAA,CAAWc,OAAX,EAAoBx2B,IAApB,CAAP;IAZ0C,CAFvC,CAAP;EArB4B;EAwC9B,OAAO,EAAP;AAzLmE;;;;;ACfrE;AAKA;AACA;AAEA,SAASwrB,gCAATA,CAA0C;EACxCiC,iBADwC;EAExCrB,MAFwC;EAGxCh0D,cAHwC;EAIxCuB;AAJwC,CAA1C,EAKG;EAOD,MAAMi9D,YAAA,GAAe;IACnBlJ,kBAAA,EAAoB,KADD;IAEnBC,eAAA,EAAiBllE;EAFE,CAArB;EAKA,MAAM/K,MAAA,GAASiS,QAAA,CAAS89D,iBAAA,CAAkB,gBAAlB,CAAT,EAA8C,EAA9C,CAAf;EACA,IAAI,CAACp1D,MAAA,CAAOC,SAAP,CAAiB5a,MAAjB,CAAL,EAA+B;IAC7B,OAAOk5E,YAAP;EAD6B;EAI/BA,YAAA,CAAajJ,eAAb,GAA+BjwE,MAA/B;EAEA,IAAIA,MAAA,IAAU,IAAI0a,cAAlB,EAAkC;IAGhC,OAAOw+D,YAAP;EAHgC;EAMlC,IAAIj9D,YAAA,IAAgB,CAACyyD,MAArB,EAA6B;IAC3B,OAAOwK,YAAP;EAD2B;EAG7B,IAAInJ,iBAAA,CAAkB,eAAlB,MAAuC,OAA3C,EAAoD;IAClD,OAAOmJ,YAAP;EADkD;EAIpD,MAAMC,eAAA,GAAkBpJ,iBAAA,CAAkB,kBAAlB,KAAyC,UAAjE;EACA,IAAIoJ,eAAA,KAAoB,UAAxB,EAAoC;IAClC,OAAOD,YAAP;EADkC;EAIpCA,YAAA,CAAalJ,kBAAb,GAAkC,IAAlC;EACA,OAAOkJ,YAAP;AAtCC;AAyCH,SAASrL,yBAATA,CAAmCkC,iBAAnC,EAAsD;EACpD,MAAMsH,kBAAA,GAAqBtH,iBAAA,CAAkB,qBAAlB,CAA3B;EACA,IAAIsH,kBAAJ,EAAwB;IACtB,IAAItyE,QAAA,GAAWqyE,uCAAA,CAAwCC,kBAAxC,CAAf;IACA,IAAItyE,QAAA,CAAS0C,QAAT,CAAkB,GAAlB,CAAJ,EAA4B;MAC1B,IAAI;QACF1C,QAAA,GAAW0/C,kBAAA,CAAmB1/C,QAAnB,CAAX;MADE,CAAJ,CAEE,MAAM;IAHkB;IAK5B,IAAIg/C,2BAAA,CAAUh/C,QAAV,CAAJ,EAAyB;MACvB,OAAOA,QAAP;IADuB;EAPH;EAWxB,OAAO,IAAP;AAboD;AAgBtD,SAAS6oE,yBAATA,CAAmCl+C,MAAnC,EAA2CpsB,GAA3C,EAAgD;EAC9C,IAAIosB,MAAA,KAAW,GAAX,IAAmBA,MAAA,KAAW,CAAX,IAAgBpsB,GAAA,CAAIkrC,UAAJ,CAAe,OAAf,CAAvC,EAAiE;IAC/D,OAAO,IAAIp3B,wBAAJ,CAAwB,kBAAkB9T,GAAlB,GAAwB,IAAhD,CAAP;EAD+D;EAGjE,OAAO,IAAIoU,gCAAJ,CACJ,+BAA8BgY,MAAO,2BAA0BpsB,GAAI,IAD/D,EAELosB,MAFK,CAAP;AAJ8C;AAUhD,SAASq+C,sBAATA,CAAgCr+C,MAAhC,EAAwC;EACtC,OAAOA,MAAA,KAAW,GAAX,IAAkBA,MAAA,KAAW,GAApC;AADsC;;;;;;;;;;;;;;AChFxC;AAOA;AAKA;AAMA,IAAI0pD,EAAJ,EAAQC,IAAR,EAAcC,KAAd,EAAqBh2E,GAArB;AACA,IAAI4T,qDAAJ,EAAc;EAEZkiE,EAAA,GAAK,MAAM1sD,sBAAA,CAAuB,IAAvB,CAAX;EACA2sD,IAAA,GAAO,MAAM3sD,sBAAA,CAAuB,MAAvB,CAAb;EACA4sD,KAAA,GAAQ,MAAM5sD,sBAAA,CAAuB,OAAvB,CAAd;EACAppB,GAAA,GAAM,MAAMopB,sBAAA,CAAuB,KAAvB,CAAZ;AALY;AAQd,MAAM6sD,YAAA,GAAe,yBAArB;AAEA,SAASC,QAATA,CAAkBC,SAAlB,EAA6B;EAC3B,MAAMC,SAAA,GAAYp2E,GAAA,CAAI4oE,KAAJ,CAAUuN,SAAV,CAAlB;EACA,IAAIC,SAAA,CAAU30B,QAAV,KAAuB,OAAvB,IAAkC20B,SAAA,CAAUC,IAAhD,EAAsD;IACpD,OAAOD,SAAP;EADoD;EAItD,IAAI,gBAAgBxmE,IAAhB,CAAqBumE,SAArB,CAAJ,EAAqC;IACnC,OAAOn2E,GAAA,CAAI4oE,KAAJ,CAAW,WAAUuN,SAAX,EAAV,CAAP;EADmC;EAIrC,IAAI,CAACC,SAAA,CAAUC,IAAf,EAAqB;IACnBD,SAAA,CAAU30B,QAAV,GAAqB,OAArB;EADmB;EAGrB,OAAO20B,SAAP;AAb2B;AAgB7B,MAAMvgE,aAAN,CAAoB;EAClBzgB,YAAYuK,MAAZ,EAAoB;IAClB,KAAKA,MAAL,GAAcA,MAAd;IACA,KAAKK,GAAL,GAAWk2E,QAAA,CAASv2E,MAAA,CAAOK,GAAhB,CAAX;IACA,KAAKorE,MAAL,GACE,KAAKprE,GAAL,CAASyhD,QAAT,KAAsB,OAAtB,IAAiC,KAAKzhD,GAAL,CAASyhD,QAAT,KAAsB,QADzD;IAGA,KAAK60B,OAAL,GAAe,KAAKt2E,GAAL,CAASyhD,QAAT,KAAsB,OAArC;IACA,KAAK1qC,WAAL,GAAoB,KAAKq0D,MAAL,IAAezrE,MAAA,CAAOoX,WAAvB,IAAuC,EAA1D;IAEA,KAAKs0D,kBAAL,GAA0B,IAA1B;IACA,KAAKC,oBAAL,GAA4B,EAA5B;EAVkB;EAapB,IAAIC,sBAAJA,CAAA,EAA6B;IAC3B,OAAO,KAAKF,kBAAL,EAAyBG,OAAzB,IAAoC,CAA3C;EAD2B;EAI7BvgD,cAAA,EAAgB;IACd1X,uDAAA,CACE,CAAC,KAAK83D,kBADR,EAEE,sDAFF;IAIA,KAAKA,kBAAL,GAA0B,KAAKiL,OAAL,GACtB,IAAIC,yBAAJ,CAA8B,IAA9B,CADsB,GAEtB,IAAIC,uBAAJ,CAA4B,IAA5B,CAFJ;IAGA,OAAO,KAAKnL,kBAAZ;EARc;EAWhBr/C,eAAemxB,KAAf,EAAsBv/B,GAAtB,EAA2B;IACzB,IAAIA,GAAA,IAAO,KAAK2tD,sBAAhB,EAAwC;MACtC,OAAO,IAAP;IADsC;IAGxC,MAAMx/C,WAAA,GAAc,KAAKuqD,OAAL,GAChB,IAAIG,0BAAJ,CAA+B,IAA/B,EAAqCt5B,KAArC,EAA4Cv/B,GAA5C,CADgB,GAEhB,IAAI84D,wBAAJ,CAA6B,IAA7B,EAAmCv5B,KAAnC,EAA0Cv/B,GAA1C,CAFJ;IAGA,KAAK0tD,oBAAL,CAA0BhuE,IAA1B,CAA+ByuB,WAA/B;IACA,OAAOA,WAAP;EARyB;EAW3BhB,kBAAkBlH,MAAlB,EAA0B;IACxB,KAAKwnD,kBAAL,EAAyBvlD,MAAzB,CAAgCjC,MAAhC;IAEA,WAAWuB,MAAX,IAAqB,KAAKkmD,oBAAL,CAA0Bj7E,KAA1B,CAAgC,CAAhC,CAArB,EAAyD;MACvD+0B,MAAA,CAAOU,MAAP,CAAcjC,MAAd;IADuD;EAHjC;AAxCR;AAiDpB,MAAM8yD,cAAN,CAAqB;EACnBvhF,YAAYu2E,MAAZ,EAAoB;IAClB,KAAKqH,IAAL,GAAYrH,MAAA,CAAO3rE,GAAnB;IACA,KAAKqzE,KAAL,GAAa,KAAb;IACA,KAAKC,YAAL,GAAoB,IAApB;IACA,KAAKl3D,UAAL,GAAkB,IAAlB;IACA,MAAMzc,MAAA,GAASgsE,MAAA,CAAOhsE,MAAtB;IACA,KAAKqsE,cAAL,GAAsBrsE,MAAA,CAAOjD,MAA7B;IACA,KAAK8uE,OAAL,GAAe,CAAf;IACA,KAAKM,SAAL,GAAiB,IAAjB;IAEA,KAAKI,aAAL,GAAqBvsE,MAAA,CAAOgZ,YAAP,IAAuB,KAA5C;IACA,KAAKwzD,eAAL,GAAuBxsE,MAAA,CAAOyX,cAA9B;IACA,IAAI,CAAC,KAAK+0D,eAAN,IAAyB,CAAC,KAAKD,aAAnC,EAAkD;MAChD,KAAKA,aAAL,GAAqB,IAArB;IADgD;IAIlD,KAAKI,qBAAL,GAA6B,CAAC3sE,MAAA,CAAOiZ,aAArC;IACA,KAAK2zD,iBAAL,GAAyB,CAAC5sE,MAAA,CAAOgZ,YAAjC;IAEA,KAAKi+D,eAAL,GAAuB,IAAvB;IACA,KAAKhK,eAAL,GAAuB,IAAI54D,8DAAJ,EAAvB;IACA,KAAKi4D,kBAAL,GAA0B,IAAIj4D,8DAAJ,EAA1B;EArBkB;EAwBpB,IAAI2X,YAAJA,CAAA,EAAmB;IACjB,OAAO,KAAKsgD,kBAAL,CAAwB7xD,OAA/B;EADiB;EAInB,IAAI3Y,QAAJA,CAAA,EAAe;IACb,OAAO,KAAKqqE,SAAZ;EADa;EAIf,IAAIhgD,aAAJA,CAAA,EAAoB;IAClB,OAAO,KAAKkgD,cAAZ;EADkB;EAIpB,IAAIngD,gBAAJA,CAAA,EAAuB;IACrB,OAAO,KAAK0gD,iBAAZ;EADqB;EAIvB,IAAI3gD,oBAAJA,CAAA,EAA2B;IACzB,OAAO,KAAK0gD,qBAAZ;EADyB;EAI3B,MAAMjnD,IAANA,CAAA,EAAa;IACX,MAAM,KAAKunD,eAAL,CAAqBxyD,OAA3B;IACA,IAAI,KAAKi5D,KAAT,EAAgB;MACd,OAAO;QAAE1wE,KAAA,EAAO8E,SAAT;QAAoB6d,IAAA,EAAM;MAA1B,CAAP;IADc;IAGhB,IAAI,KAAKguD,YAAT,EAAuB;MACrB,MAAM,KAAKA,YAAX;IADqB;IAIvB,MAAMl2D,KAAA,GAAQ,KAAKw5D,eAAL,CAAqBvxD,IAArB,EAAd;IACA,IAAIjI,KAAA,KAAU,IAAd,EAAoB;MAClB,KAAKwvD,eAAL,GAAuB,IAAI54D,8DAAJ,EAAvB;MACA,OAAO,KAAKqR,IAAL,EAAP;IAFkB;IAIpB,KAAKmmD,OAAL,IAAgBpuD,KAAA,CAAM1gB,MAAtB;IACA,KAAK0f,UAAL,GAAkB;MAChBkB,MAAA,EAAQ,KAAKkuD,OADG;MAEhBjuD,KAAA,EAAO,KAAKyuD;IAFI,CAAlB;IAMA,MAAMpwD,MAAA,GAAS,IAAII,UAAJ,CAAeoB,KAAf,EAAsBxB,MAArC;IACA,OAAO;MAAEjZ,KAAA,EAAOiZ,MAAT;MAAiB0J,IAAA,EAAM;IAAvB,CAAP;EAtBW;EAyBbQ,OAAOjC,MAAP,EAAe;IAGb,IAAI,CAAC,KAAK+yD,eAAV,EAA2B;MACzB,KAAKC,MAAL,CAAYhzD,MAAZ;MACA;IAFyB;IAI3B,KAAK+yD,eAAL,CAAqBv6D,OAArB,CAA6BwH,MAA7B;EAPa;EAUfgzD,OAAOhzD,MAAP,EAAe;IACb,KAAKyvD,YAAL,GAAoBzvD,MAApB;IACA,KAAK+oD,eAAL,CAAqBjyD,OAArB;EAFa;EAKfm8D,mBAAmB5xD,cAAnB,EAAmC;IACjC,KAAK0xD,eAAL,GAAuB1xD,cAAvB;IACAA,cAAA,CAAemD,EAAf,CAAkB,UAAlB,EAA8B,MAAM;MAClC,KAAKukD,eAAL,CAAqBjyD,OAArB;IADkC,CAApC;IAIAuK,cAAA,CAAemD,EAAf,CAAkB,KAAlB,EAAyB,MAAM;MAE7BnD,cAAA,CAAe7I,OAAf;MACA,KAAKg3D,KAAL,GAAa,IAAb;MACA,KAAKzG,eAAL,CAAqBjyD,OAArB;IAJ6B,CAA/B;IAOAuK,cAAA,CAAemD,EAAf,CAAkB,OAAlB,EAA2BxE,MAAA,IAAU;MACnC,KAAKgzD,MAAL,CAAYhzD,MAAZ;IADmC,CAArC;IAMA,IAAI,CAAC,KAAKyoD,qBAAN,IAA+B,KAAKC,iBAAxC,EAA2D;MACzD,KAAKsK,MAAL,CAAY,IAAIxjE,2DAAJ,CAAmB,uBAAnB,CAAZ;IADyD;IAK3D,IAAI,KAAKigE,YAAT,EAAuB;MACrB,KAAKsD,eAAL,CAAqBv6D,OAArB,CAA6B,KAAKi3D,YAAlC;IADqB;EAxBU;AArFhB;AAmHrB,MAAMyD,eAAN,CAAsB;EACpB3hF,YAAYu2E,MAAZ,EAAoB;IAClB,KAAKqH,IAAL,GAAYrH,MAAA,CAAO3rE,GAAnB;IACA,KAAKqzE,KAAL,GAAa,KAAb;IACA,KAAKC,YAAL,GAAoB,IAApB;IACA,KAAKl3D,UAAL,GAAkB,IAAlB;IACA,KAAKovD,OAAL,GAAe,CAAf;IACA,KAAKoL,eAAL,GAAuB,IAAvB;IACA,KAAKhK,eAAL,GAAuB,IAAI54D,8DAAJ,EAAvB;IACA,MAAMrU,MAAA,GAASgsE,MAAA,CAAOhsE,MAAtB;IACA,KAAK2sE,qBAAL,GAA6B,CAAC3sE,MAAA,CAAOiZ,aAArC;EATkB;EAYpB,IAAIgT,oBAAJA,CAAA,EAA2B;IACzB,OAAO,KAAK0gD,qBAAZ;EADyB;EAI3B,MAAMjnD,IAANA,CAAA,EAAa;IACX,MAAM,KAAKunD,eAAL,CAAqBxyD,OAA3B;IACA,IAAI,KAAKi5D,KAAT,EAAgB;MACd,OAAO;QAAE1wE,KAAA,EAAO8E,SAAT;QAAoB6d,IAAA,EAAM;MAA1B,CAAP;IADc;IAGhB,IAAI,KAAKguD,YAAT,EAAuB;MACrB,MAAM,KAAKA,YAAX;IADqB;IAIvB,MAAMl2D,KAAA,GAAQ,KAAKw5D,eAAL,CAAqBvxD,IAArB,EAAd;IACA,IAAIjI,KAAA,KAAU,IAAd,EAAoB;MAClB,KAAKwvD,eAAL,GAAuB,IAAI54D,8DAAJ,EAAvB;MACA,OAAO,KAAKqR,IAAL,EAAP;IAFkB;IAIpB,KAAKmmD,OAAL,IAAgBpuD,KAAA,CAAM1gB,MAAtB;IACA,KAAK0f,UAAL,GAAkB;MAAEkB,MAAA,EAAQ,KAAKkuD;IAAf,CAAlB;IAGA,MAAM5vD,MAAA,GAAS,IAAII,UAAJ,CAAeoB,KAAf,EAAsBxB,MAArC;IACA,OAAO;MAAEjZ,KAAA,EAAOiZ,MAAT;MAAiB0J,IAAA,EAAM;IAAvB,CAAP;EAnBW;EAsBbQ,OAAOjC,MAAP,EAAe;IAGb,IAAI,CAAC,KAAK+yD,eAAV,EAA2B;MACzB,KAAKC,MAAL,CAAYhzD,MAAZ;MACA;IAFyB;IAI3B,KAAK+yD,eAAL,CAAqBv6D,OAArB,CAA6BwH,MAA7B;EAPa;EAUfgzD,OAAOhzD,MAAP,EAAe;IACb,KAAKyvD,YAAL,GAAoBzvD,MAApB;IACA,KAAK+oD,eAAL,CAAqBjyD,OAArB;EAFa;EAKfm8D,mBAAmB5xD,cAAnB,EAAmC;IACjC,KAAK0xD,eAAL,GAAuB1xD,cAAvB;IACAA,cAAA,CAAemD,EAAf,CAAkB,UAAlB,EAA8B,MAAM;MAClC,KAAKukD,eAAL,CAAqBjyD,OAArB;IADkC,CAApC;IAIAuK,cAAA,CAAemD,EAAf,CAAkB,KAAlB,EAAyB,MAAM;MAE7BnD,cAAA,CAAe7I,OAAf;MACA,KAAKg3D,KAAL,GAAa,IAAb;MACA,KAAKzG,eAAL,CAAqBjyD,OAArB;IAJ6B,CAA/B;IAOAuK,cAAA,CAAemD,EAAf,CAAkB,OAAlB,EAA2BxE,MAAA,IAAU;MACnC,KAAKgzD,MAAL,CAAYhzD,MAAZ;IADmC,CAArC;IAKA,IAAI,KAAKyvD,YAAT,EAAuB;MACrB,KAAKsD,eAAL,CAAqBv6D,OAArB,CAA6B,KAAKi3D,YAAlC;IADqB;EAlBU;AAtDf;AA8EtB,SAAS0D,oBAATA,CAA8BZ,SAA9B,EAAyCzL,OAAzC,EAAkD;EAChD,OAAO;IACLlpB,QAAA,EAAU20B,SAAA,CAAU30B,QADf;IAELw1B,IAAA,EAAMb,SAAA,CAAUa,IAFX;IAGLZ,IAAA,EAAMD,SAAA,CAAUc,QAHX;IAILt9D,IAAA,EAAMw8D,SAAA,CAAUx8D,IAJX;IAKLyoB,IAAA,EAAM+zC,SAAA,CAAU/zC,IALX;IAMLwoC,MAAA,EAAQ,KANH;IAOLF;EAPK,CAAP;AADgD;AAYlD,MAAM6L,uBAAN,SAAsCG,cAAtC,CAAqD;EACnDvhF,YAAYu2E,MAAZ,EAAoB;IAClB,MAAMA,MAAN;IAEA,MAAMwL,cAAA,GAAiBv4B,QAAA,IAAY;MACjC,IAAIA,QAAA,CAASw4B,UAAT,KAAwB,GAA5B,EAAiC;QAC/B,MAAM7zD,KAAA,GAAQ,IAAIzP,gEAAJ,CAAyB,gBAAe,KAAKk/D,IAAK,IAAlD,CAAd;QACA,KAAKM,YAAL,GAAoB/vD,KAApB;QACA,KAAK0oD,kBAAL,CAAwBvwD,MAAxB,CAA+B6H,KAA/B;QACA;MAJ+B;MAMjC,KAAK0oD,kBAAL,CAAwBtxD,OAAxB;MACA,KAAKm8D,kBAAL,CAAwBl4B,QAAxB;MAEA,MAAM6tB,iBAAA,GAAoB/wE,IAAA,IAAQ;QAGhC,OAAO,KAAKk7E,eAAL,CAAqBjM,OAArB,CAA6BjvE,IAAA,CAAKwH,WAAL,EAA7B,CAAP;MAHgC,CAAlC;MAKA,MAAM;QAAEwpE,kBAAF;QAAsBC;MAAtB,IACJnC,mFAAA,CAAiC;QAC/BiC,iBAD+B;QAE/BrB,MAAA,EAAQO,MAAA,CAAOP,MAFgB;QAG/Bh0D,cAAA,EAAgB,KAAK+0D,eAHU;QAI/BxzD,YAAA,EAAc,KAAKuzD;MAJY,CAAjC,CADF;MAQA,KAAKK,iBAAL,GAAyBG,kBAAzB;MAEA,KAAKV,cAAL,GAAsBW,eAAA,IAAmB,KAAKX,cAA9C;MAEA,KAAKF,SAAL,GAAiBvB,4EAAA,CAA0BkC,iBAA1B,CAAjB;IA3BiC,CAAnC;IA8BA,KAAK4K,QAAL,GAAgB,IAAhB;IACA,IAAI,KAAKrE,IAAL,CAAUvxB,QAAV,KAAuB,OAA3B,EAAoC;MAClC,KAAK41B,QAAL,GAAgBtB,IAAA,CAAK92B,OAAL,CACd+3B,oBAAA,CAAqB,KAAKhE,IAA1B,EAAgCrH,MAAA,CAAO50D,WAAvC,CADc,EAEdogE,cAFc,CAAhB;IADkC,CAApC,MAKO;MACL,KAAKE,QAAL,GAAgBrB,KAAA,CAAM/2B,OAAN,CACd+3B,oBAAA,CAAqB,KAAKhE,IAA1B,EAAgCrH,MAAA,CAAO50D,WAAvC,CADc,EAEdogE,cAFc,CAAhB;IADK;IAOP,KAAKE,QAAL,CAAchvD,EAAd,CAAiB,OAAjB,EAA0BxE,MAAA,IAAU;MAClC,KAAKyvD,YAAL,GAAoBzvD,MAApB;MACA,KAAKooD,kBAAL,CAAwBvwD,MAAxB,CAA+BmI,MAA/B;IAFkC,CAApC;IAOA,KAAKwzD,QAAL,CAAcz5D,GAAd;EArDkB;AAD+B;AA0DrD,MAAM84D,wBAAN,SAAuCK,eAAvC,CAAuD;EACrD3hF,YAAYu2E,MAAZ,EAAoBxuB,KAApB,EAA2Bv/B,GAA3B,EAAgC;IAC9B,MAAM+tD,MAAN;IAEA,KAAK2L,YAAL,GAAoB,EAApB;IACA,WAAWhxC,QAAX,IAAuBqlC,MAAA,CAAO50D,WAA9B,EAA2C;MACzC,MAAMpU,KAAA,GAAQgpE,MAAA,CAAO50D,WAAP,CAAmBuvB,QAAnB,CAAd;MACA,IAAI3jC,KAAA,KAAU8E,SAAd,EAAyB;QACvB;MADuB;MAGzB,KAAK6vE,YAAL,CAAkBhxC,QAAlB,IAA8B3jC,KAA9B;IALyC;IAO3C,KAAK20E,YAAL,CAAkBC,KAAlB,GAA2B,SAAQp6B,KAAM,IAAGv/B,GAAA,GAAM,CAAxB,EAA1B;IAEA,MAAMu5D,cAAA,GAAiBv4B,QAAA,IAAY;MACjC,IAAIA,QAAA,CAASw4B,UAAT,KAAwB,GAA5B,EAAiC;QAC/B,MAAM7zD,KAAA,GAAQ,IAAIzP,gEAAJ,CAAyB,gBAAe,KAAKk/D,IAAK,IAAlD,CAAd;QACA,KAAKM,YAAL,GAAoB/vD,KAApB;QACA;MAH+B;MAKjC,KAAKuzD,kBAAL,CAAwBl4B,QAAxB;IANiC,CAAnC;IASA,KAAKy4B,QAAL,GAAgB,IAAhB;IACA,IAAI,KAAKrE,IAAL,CAAUvxB,QAAV,KAAuB,OAA3B,EAAoC;MAClC,KAAK41B,QAAL,GAAgBtB,IAAA,CAAK92B,OAAL,CACd+3B,oBAAA,CAAqB,KAAKhE,IAA1B,EAAgC,KAAKsE,YAArC,CADc,EAEdH,cAFc,CAAhB;IADkC,CAApC,MAKO;MACL,KAAKE,QAAL,GAAgBrB,KAAA,CAAM/2B,OAAN,CACd+3B,oBAAA,CAAqB,KAAKhE,IAA1B,EAAgC,KAAKsE,YAArC,CADc,EAEdH,cAFc,CAAhB;IADK;IAOP,KAAKE,QAAL,CAAchvD,EAAd,CAAiB,OAAjB,EAA0BxE,MAAA,IAAU;MAClC,KAAKyvD,YAAL,GAAoBzvD,MAApB;IADkC,CAApC;IAGA,KAAKwzD,QAAL,CAAcz5D,GAAd;EAtC8B;AADqB;AA2CvD,MAAM24D,yBAAN,SAAwCI,cAAxC,CAAuD;EACrDvhF,YAAYu2E,MAAZ,EAAoB;IAClB,MAAMA,MAAN;IAEA,IAAItpC,IAAA,GAAO8e,kBAAA,CAAmB,KAAK6xB,IAAL,CAAU3wC,IAA7B,CAAX;IAGA,IAAI4zC,YAAA,CAAarmE,IAAb,CAAkB,KAAKojE,IAAL,CAAU/xE,IAA5B,CAAJ,EAAuC;MACrCohC,IAAA,GAAOA,IAAA,CAAKumB,OAAL,CAAa,KAAb,EAAoB,EAApB,CAAP;IADqC;IAIvCktB,EAAA,CAAG0B,KAAH,CAASn1C,IAAT,EAAe,CAAC9e,KAAD,EAAQk0D,IAAR,KAAiB;MAC9B,IAAIl0D,KAAJ,EAAW;QACT,IAAIA,KAAA,CAAM4I,IAAN,KAAe,QAAnB,EAA6B;UAC3B5I,KAAA,GAAQ,IAAIzP,gEAAJ,CAAyB,gBAAeuuB,IAAK,IAA7C,CAAR;QAD2B;QAG7B,KAAKixC,YAAL,GAAoB/vD,KAApB;QACA,KAAK0oD,kBAAL,CAAwBvwD,MAAxB,CAA+B6H,KAA/B;QACA;MANS;MASX,KAAKyoD,cAAL,GAAsByL,IAAA,CAAKhuE,IAA3B;MAEA,KAAKqtE,kBAAL,CAAwBhB,EAAA,CAAG4B,gBAAH,CAAoBr1C,IAApB,CAAxB;MACA,KAAK4pC,kBAAL,CAAwBtxD,OAAxB;IAb8B,CAAhC;EAVkB;AADiC;AA6BvD,MAAM87D,0BAAN,SAAyCM,eAAzC,CAAyD;EACvD3hF,YAAYu2E,MAAZ,EAAoBxuB,KAApB,EAA2Bv/B,GAA3B,EAAgC;IAC9B,MAAM+tD,MAAN;IAEA,IAAItpC,IAAA,GAAO8e,kBAAA,CAAmB,KAAK6xB,IAAL,CAAU3wC,IAA7B,CAAX;IAGA,IAAI4zC,YAAA,CAAarmE,IAAb,CAAkB,KAAKojE,IAAL,CAAU/xE,IAA5B,CAAJ,EAAuC;MACrCohC,IAAA,GAAOA,IAAA,CAAKumB,OAAL,CAAa,KAAb,EAAoB,EAApB,CAAP;IADqC;IAIvC,KAAKkuB,kBAAL,CAAwBhB,EAAA,CAAG4B,gBAAH,CAAoBr1C,IAApB,EAA0B;MAAE8a,KAAF;MAASv/B,GAAA,EAAKA,GAAA,GAAM;IAApB,CAA1B,CAAxB;EAV8B;AADuB;;;;;;;;;;;;;;;;;;;AC7azD;AAMA;AAEA;AAMA,IAAIk4D,EAAJ,EAAQ7kE,MAAR,EAAgB0mE,eAAhB;AACA,IAAI/jE,qDAAJ,EAAc;EAEZkiE,EAAA,GAAK,MAAM1sD,sBAAA,CAAuB,IAAvB,CAAX;EAEA,IAAI;IACFnY,MAAA,GAAS,MAAMmY,sBAAA,CAAuB,QAAvB,CAAf;EADE,CAAJ,CAEE,MAAM;EACR,IAAI;IACFuuD,eAAA,GAAkB,MAAMvuD,sBAAA,CAAuB,iBAAvB,CAAxB;EADE,CAAJ,CAEE,MAAM;AATI;AAYd;AA8BA,MAAMs1B,SAAA,GAAY,SAAAA,CAAU1+C,GAAV,EAAe;EAC/B,OAAO,IAAI0a,OAAJ,CAAY,CAACC,OAAD,EAAUe,MAAV,KAAqB;IACtCo6D,EAAA,CAAG8B,QAAH,CAAY53E,GAAZ,EAAiB,CAACujB,KAAD,EAAQpxB,IAAR,KAAiB;MAChC,IAAIoxB,KAAA,IAAS,CAACpxB,IAAd,EAAoB;QAClBupB,MAAA,CAAO,IAAIlF,KAAJ,CAAU+M,KAAV,CAAP;QACA;MAFkB;MAIpB5I,OAAA,CAAQ,IAAIqB,UAAJ,CAAe7pB,IAAf,CAAR;IALgC,CAAlC;EADsC,CAAjC,CAAP;AAD+B,CAAjC;AAYA,MAAMgjB,iBAAN,SAAgCwa,+DAAhC,CAAkD;AAElD,MAAM1a,iBAAN,SAAgCkb,+DAAhC,CAAkD;EAIhDC,cAAcv+B,KAAd,EAAqBC,MAArB,EAA6B;IAC3B,OAAOmf,MAAA,CAAOg9C,YAAP,CAAoBp8D,KAApB,EAA2BC,MAA3B,CAAP;EAD2B;AAJmB;AASlD,MAAMojB,qBAAN,SAAoCsb,mEAApC,CAA0D;EAIxDI,WAAW5wB,GAAX,EAAgBywB,eAAhB,EAAiC;IAC/B,OAAOiuB,SAAA,CAAU1+C,GAAV,EAAeqa,IAAf,CAAoBloB,IAAA,IAAQ;MACjC,OAAO;QAAEqtD,QAAA,EAAUrtD,IAAZ;QAAkBs+B;MAAlB,CAAP;IADiC,CAA5B,CAAP;EAD+B;AAJuB;AAW1D,MAAMrb,2BAAN,SAA0Cyb,yEAA1C,CAAsE;EAIpED,WAAW5wB,GAAX,EAAgB;IACd,OAAO0+C,SAAA,CAAU1+C,GAAV,CAAP;EADc;AAJoD;;;;;;;;;;;;;;;AC3FtE;AACA;AAEA,MAAM63E,QAAA,GAAWC,MAAA,CAAO,UAAP,CAAjB;AAEA,MAAMC,oBAAN,CAA2B;EACzB,CAAA/9B,OAAA,GAAW,IAAX;EAEA5kD,YAAYsG,IAAZ,EAAkB+R,MAAlB,EAA0B;IACxB,KAAK/R,IAAL,GAAYA,IAAZ;IACA,KAAK+R,MAAL,GAAcA,MAAd;EAFwB;EAQ1B,IAAIusC,OAAJA,CAAA,EAAc;IACZ,OAAO,KAAK,CAAAA,OAAZ;EADY;EAOdg+B,YAAYC,QAAZ,EAAsBj+B,OAAtB,EAA+B;IAC7B,IAAIi+B,QAAA,KAAaJ,QAAjB,EAA2B;MACzB/mF,4DAAA,CAAY,uCAAZ;IADyB;IAG3B,KAAK,CAAAkpD,OAAL,GAAgBA,OAAhB;EAJ6B;AAlBN;AA0B3B,MAAMvkC,qBAAN,CAA4B;EAC1B,CAAAyiE,aAAA,GAAiB,IAAjB;EAEA,CAAAC,MAAA,GAAU,IAAIx2E,GAAJ,EAAV;EAEA,CAAAy2E,WAAA,GAAe,IAAf;EAEA,CAAAC,KAAA,GAAS,IAAT;EAEAjjF,YAAYjD,IAAZ,EAAkB;IAChB,KAAKuJ,IAAL,GAAY,IAAZ;IACA,KAAK48E,OAAL,GAAe,IAAf;IAEA,IAAInmF,IAAA,KAAS,IAAb,EAAmB;MACjB;IADiB;IAGnB,KAAKuJ,IAAL,GAAYvJ,IAAA,CAAKuJ,IAAjB;IACA,KAAK48E,OAAL,GAAenmF,IAAA,CAAKmmF,OAApB;IACA,KAAK,CAAAD,KAAL,GAAclmF,IAAA,CAAKkmF,KAAnB;IACA,WAAW7gC,KAAX,IAAoBrlD,IAAA,CAAKgmF,MAAzB,EAAiC;MAC/B,KAAK,CAAAA,MAAL,CAAatnE,GAAb,CACE2mC,KAAA,CAAMtgD,EADR,EAEE,IAAI6gF,oBAAJ,CAAyBvgC,KAAA,CAAM97C,IAA/B,EAAqC87C,KAAA,CAAM/pC,MAA3C,CAFF;IAD+B;IAOjC,IAAItb,IAAA,CAAKomF,SAAL,KAAmB,KAAvB,EAA8B;MAC5B,WAAW/gC,KAAX,IAAoB,KAAK,CAAA2gC,MAAL,CAAa71E,MAAb,EAApB,EAA2C;QACzCk1C,KAAA,CAAMwgC,WAAN,CAAkBH,QAAlB,EAA4B,KAA5B;MADyC;IADf;IAM9B,WAAWxvD,EAAX,IAAiBl2B,IAAA,CAAKk2B,EAAtB,EAA0B;MACxB,KAAK,CAAA8vD,MAAL,CAAav2E,GAAb,CAAiBymB,EAAjB,EAAqB2vD,WAArB,CAAiCH,QAAjC,EAA2C,IAA3C;IADwB;IAI1B,WAAWW,GAAX,IAAkBrmF,IAAA,CAAKqmF,GAAvB,EAA4B;MAC1B,KAAK,CAAAL,MAAL,CAAav2E,GAAb,CAAiB42E,GAAjB,EAAsBR,WAAtB,CAAkCH,QAAlC,EAA4C,KAA5C;IAD0B;IAK5B,KAAK,CAAAO,WAAL,GAAoB,KAAKK,OAAL,EAApB;EAhCgB;EAmClB,CAAAC,6BAA8BC,KAA9B,EAAqC;IACnC,MAAMj8E,MAAA,GAASi8E,KAAA,CAAMj8E,MAArB;IACA,IAAIA,MAAA,GAAS,CAAb,EAAgB;MACd,OAAO,IAAP;IADc;IAGhB,MAAMk8E,QAAA,GAAWD,KAAA,CAAM,CAAN,CAAjB;IACA,KAAK,IAAI7tE,CAAA,GAAI,CAAR,EAAWA,CAAA,GAAIpO,MAApB,EAA4BoO,CAAA,EAA5B,EAAiC;MAC/B,MAAM/O,OAAA,GAAU48E,KAAA,CAAM7tE,CAAN,CAAhB;MACA,IAAI+tE,KAAJ;MACA,IAAI55E,KAAA,CAAMC,OAAN,CAAcnD,OAAd,CAAJ,EAA4B;QAC1B88E,KAAA,GAAQ,KAAK,CAAAH,4BAAL,CAAmC38E,OAAnC,CAAR;MAD0B,CAA5B,MAEO,IAAI,KAAK,CAAAo8E,MAAL,CAAa55E,GAAb,CAAiBxC,OAAjB,CAAJ,EAA+B;QACpC88E,KAAA,GAAQ,KAAK,CAAAV,MAAL,CAAav2E,GAAb,CAAiB7F,OAAjB,EAA0Bi+C,OAAlC;MADoC,CAA/B,MAEA;QACLhpD,qDAAA,CAAM,qCAAoC+K,OAArC,EAAL;QACA,OAAO,IAAP;MAFK;MAIP,QAAQ68E,QAAR;QACE,KAAK,KAAL;UACE,IAAI,CAACC,KAAL,EAAY;YACV,OAAO,KAAP;UADU;UAGZ;QACF,KAAK,IAAL;UACE,IAAIA,KAAJ,EAAW;YACT,OAAO,IAAP;UADS;UAGX;QACF,KAAK,KAAL;UACE,OAAO,CAACA,KAAR;QACF;UACE,OAAO,IAAP;MAdJ;IAX+B;IA4BjC,OAAOD,QAAA,KAAa,KAApB;EAlCmC;EAqCrClqE,UAAU8oC,KAAV,EAAiB;IACf,IAAI,KAAK,CAAA2gC,MAAL,CAAa1uE,IAAb,KAAsB,CAA1B,EAA6B;MAC3B,OAAO,IAAP;IAD2B;IAG7B,IAAI,CAAC+tC,KAAL,EAAY;MACVxmD,qDAAA,CAAK,qCAAL;MACA,OAAO,IAAP;IAFU;IAIZ,IAAIwmD,KAAA,CAAM90C,IAAN,KAAe,KAAnB,EAA0B;MACxB,IAAI,CAAC,KAAK,CAAAy1E,MAAL,CAAa55E,GAAb,CAAiBi5C,KAAA,CAAMtgD,EAAvB,CAAL,EAAiC;QAC/BlG,qDAAA,CAAM,qCAAoCwmD,KAAA,CAAMtgD,EAA3C,EAAL;QACA,OAAO,IAAP;MAF+B;MAIjC,OAAO,KAAK,CAAAihF,MAAL,CAAav2E,GAAb,CAAiB41C,KAAA,CAAMtgD,EAAvB,EAA2B8iD,OAAlC;IALwB,CAA1B,MAMO,IAAIxC,KAAA,CAAM90C,IAAN,KAAe,MAAnB,EAA2B;MAEhC,IAAI80C,KAAA,CAAMshC,UAAV,EAAsB;QACpB,OAAO,KAAK,CAAAJ,4BAAL,CAAmClhC,KAAA,CAAMshC,UAAzC,CAAP;MADoB;MAGtB,IAAI,CAACthC,KAAA,CAAMuhC,MAAP,IAAiBvhC,KAAA,CAAMuhC,MAAN,KAAiB,OAAtC,EAA+C;QAE7C,WAAW7hF,EAAX,IAAiBsgD,KAAA,CAAMz0C,GAAvB,EAA4B;UAC1B,IAAI,CAAC,KAAK,CAAAo1E,MAAL,CAAa55E,GAAb,CAAiBrH,EAAjB,CAAL,EAA2B;YACzBlG,qDAAA,CAAM,qCAAoCkG,EAArC,EAAL;YACA,OAAO,IAAP;UAFyB;UAI3B,IAAI,KAAK,CAAAihF,MAAL,CAAav2E,GAAb,CAAiB1K,EAAjB,EAAqB8iD,OAAzB,EAAkC;YAChC,OAAO,IAAP;UADgC;QALR;QAS5B,OAAO,KAAP;MAX6C,CAA/C,MAYO,IAAIxC,KAAA,CAAMuhC,MAAN,KAAiB,OAArB,EAA8B;QACnC,WAAW7hF,EAAX,IAAiBsgD,KAAA,CAAMz0C,GAAvB,EAA4B;UAC1B,IAAI,CAAC,KAAK,CAAAo1E,MAAL,CAAa55E,GAAb,CAAiBrH,EAAjB,CAAL,EAA2B;YACzBlG,qDAAA,CAAM,qCAAoCkG,EAArC,EAAL;YACA,OAAO,IAAP;UAFyB;UAI3B,IAAI,CAAC,KAAK,CAAAihF,MAAL,CAAav2E,GAAb,CAAiB1K,EAAjB,EAAqB8iD,OAA1B,EAAmC;YACjC,OAAO,KAAP;UADiC;QALT;QAS5B,OAAO,IAAP;MAVmC,CAA9B,MAWA,IAAIxC,KAAA,CAAMuhC,MAAN,KAAiB,QAArB,EAA+B;QACpC,WAAW7hF,EAAX,IAAiBsgD,KAAA,CAAMz0C,GAAvB,EAA4B;UAC1B,IAAI,CAAC,KAAK,CAAAo1E,MAAL,CAAa55E,GAAb,CAAiBrH,EAAjB,CAAL,EAA2B;YACzBlG,qDAAA,CAAM,qCAAoCkG,EAArC,EAAL;YACA,OAAO,IAAP;UAFyB;UAI3B,IAAI,CAAC,KAAK,CAAAihF,MAAL,CAAav2E,GAAb,CAAiB1K,EAAjB,EAAqB8iD,OAA1B,EAAmC;YACjC,OAAO,IAAP;UADiC;QALT;QAS5B,OAAO,KAAP;MAVoC,CAA/B,MAWA,IAAIxC,KAAA,CAAMuhC,MAAN,KAAiB,QAArB,EAA+B;QACpC,WAAW7hF,EAAX,IAAiBsgD,KAAA,CAAMz0C,GAAvB,EAA4B;UAC1B,IAAI,CAAC,KAAK,CAAAo1E,MAAL,CAAa55E,GAAb,CAAiBrH,EAAjB,CAAL,EAA2B;YACzBlG,qDAAA,CAAM,qCAAoCkG,EAArC,EAAL;YACA,OAAO,IAAP;UAFyB;UAI3B,IAAI,KAAK,CAAAihF,MAAL,CAAav2E,GAAb,CAAiB1K,EAAjB,EAAqB8iD,OAAzB,EAAkC;YAChC,OAAO,KAAP;UADgC;QALR;QAS5B,OAAO,IAAP;MAVoC;MAYtChpD,qDAAA,CAAM,mCAAkCwmD,KAAA,CAAMuhC,MAAO,GAArD;MACA,OAAO,IAAP;IApDgC;IAsDlC/nF,qDAAA,CAAM,sBAAqBwmD,KAAA,CAAM90C,IAAK,GAAtC;IACA,OAAO,IAAP;EArEe;EAwEjBs2E,cAAc9hF,EAAd,EAAkB8iD,OAAA,GAAU,IAA5B,EAAkC;IAChC,IAAI,CAAC,KAAK,CAAAm+B,MAAL,CAAa55E,GAAb,CAAiBrH,EAAjB,CAAL,EAA2B;MACzBlG,qDAAA,CAAM,qCAAoCkG,EAArC,EAAL;MACA;IAFyB;IAI3B,KAAK,CAAAihF,MAAL,CAAav2E,GAAb,CAAiB1K,EAAjB,EAAqB8gF,WAArB,CAAiCH,QAAjC,EAA2C,CAAC,CAAC79B,OAA7C;IAEA,KAAK,CAAAk+B,aAAL,GAAsB,IAAtB;EAPgC;EAUlC,IAAIe,oBAAJA,CAAA,EAA2B;IACzB,OAAO,KAAK,CAAAb,WAAL,KAAsB,IAAtB,IAA8B,KAAKK,OAAL,OAAmB,KAAK,CAAAL,WAA7D;EADyB;EAI3Bc,SAAA,EAAW;IACT,IAAI,CAAC,KAAK,CAAAf,MAAL,CAAa1uE,IAAlB,EAAwB;MACtB,OAAO,IAAP;IADsB;IAGxB,IAAI,KAAK,CAAA4uE,KAAT,EAAiB;MACf,OAAO,KAAK,CAAAA,KAAL,CAAYhoF,KAAZ,EAAP;IADe;IAGjB,OAAO,CAAC,GAAG,KAAK,CAAA8nF,MAAL,CAAav8E,IAAb,EAAJ,CAAP;EAPS;EAUXu9E,UAAA,EAAY;IACV,OAAO,KAAK,CAAAhB,MAAL,CAAa1uE,IAAb,GAAoB,CAApB,GAAwB6H,8DAAA,CAAc,KAAK,CAAA6mE,MAAnB,CAAxB,GAAsD,IAA7D;EADU;EAIZiB,SAASliF,EAAT,EAAa;IACX,OAAO,KAAK,CAAAihF,MAAL,CAAav2E,GAAb,CAAiB1K,EAAjB,KAAwB,IAA/B;EADW;EAIbuhF,QAAA,EAAU;IACR,IAAI,KAAK,CAAAP,aAAL,KAAwB,IAA5B,EAAkC;MAChC,OAAO,KAAK,CAAAA,aAAZ;IADgC;IAGlC,MAAMvmE,IAAA,GAAO,IAAIH,kEAAJ,EAAb;IAEA,WAAW,CAACta,EAAD,EAAKsgD,KAAL,CAAX,IAA0B,KAAK,CAAA2gC,MAA/B,EAAwC;MACtCxmE,IAAA,CAAKX,MAAL,CAAY,GAAG9Z,EAAG,IAAGsgD,KAAA,CAAMwC,OAAf,EAAZ;IADsC;IAGxC,OAAQ,KAAK,CAAAk+B,aAAL,GAAsBvmE,IAAA,CAAKuB,SAAL,EAA9B;EATQ;AAzLgB;;;;;;;;;;;;;;;AC5B5B;AAMA;AA6CA,MAAMmmE,uBAAA,GAA0B,MAAhC;AACA,MAAM7nF,iBAAA,GAAoB,EAA1B;AACA,MAAM8nF,mBAAA,GAAsB,GAA5B;AACA,MAAMC,WAAA,GAAc,IAAI53E,GAAJ,EAApB;AAEA,SAAS63E,MAATA,CAAgB/vE,IAAhB,EAAsB2O,0BAAtB,EAAkD;EAChD,IAAIoZ,GAAJ;EACA,IAAIpZ,0BAAA,IAA8BznB,wDAAA,CAAYynB,0BAA9C,EAA0E;IACxEoZ,GAAA,GAAM,IAAIkkC,eAAJ,CAAoBjsD,IAApB,EAA0BA,IAA1B,EAAgC4mB,UAAhC,CAA2C,IAA3C,EAAiD;MAAEgX,KAAA,EAAO;IAAT,CAAjD,CAAN;EADwE,CAA1E,MAEO;IACL,MAAMp2B,MAAA,GAASla,QAAA,CAASC,aAAT,CAAuB,QAAvB,CAAf;IACAia,MAAA,CAAOpf,KAAP,GAAeof,MAAA,CAAOnf,MAAP,GAAgB2X,IAA/B;IACA+nB,GAAA,GAAMvgB,MAAA,CAAOof,UAAP,CAAkB,IAAlB,EAAwB;MAAEgX,KAAA,EAAO;IAAT,CAAxB,CAAN;EAHK;EAMP,OAAO7V,GAAP;AAVgD;AAalD,SAASioD,SAATA,CAAmB3J,UAAnB,EAA+B13D,0BAA/B,EAA2D;EACzD,MAAMshE,YAAA,GAAeH,WAAA,CAAY33E,GAAZ,CAAgBkuE,UAAhB,CAArB;EACA,IAAI4J,YAAJ,EAAkB;IAChB,OAAOA,YAAP;EADgB;EAIlB,MAAMloD,GAAA,GAAMgoD,MAAA,CAAOhoF,iBAAP,EAA0B4mB,0BAA1B,CAAZ;EAEAoZ,GAAA,CAAI3E,IAAJ,GAAW,GAAGr7B,iBAAkB,MAAKs+E,UAA1B,EAAX;EACA,MAAM6J,OAAA,GAAUnoD,GAAA,CAAI6jB,WAAJ,CAAgB,EAAhB,CAAhB;EAGA,IAAIukC,MAAA,GAASD,OAAA,CAAQE,qBAArB;EACA,IAAIC,OAAA,GAAU5rF,IAAA,CAAKwX,GAAL,CAASi0E,OAAA,CAAQI,sBAAjB,CAAd;EACA,IAAIH,MAAJ,EAAY;IACV,MAAMI,KAAA,GAAQJ,MAAA,IAAUA,MAAA,GAASE,OAAT,CAAxB;IACAP,WAAA,CAAY1oE,GAAZ,CAAgBi/D,UAAhB,EAA4BkK,KAA5B;IAEAxoD,GAAA,CAAIvgB,MAAJ,CAAWpf,KAAX,GAAmB2/B,GAAA,CAAIvgB,MAAJ,CAAWnf,MAAX,GAAoB,CAAvC;IACA,OAAOkoF,KAAP;EALU;EAYZxoD,GAAA,CAAIoJ,WAAJ,GAAkB,KAAlB;EACApJ,GAAA,CAAIkC,SAAJ,CAAc,CAAd,EAAiB,CAAjB,EAAoBliC,iBAApB,EAAuCA,iBAAvC;EACAggC,GAAA,CAAIkiB,UAAJ,CAAe,GAAf,EAAoB,CAApB,EAAuB,CAAvB;EACA,IAAIumC,MAAA,GAASzoD,GAAA,CAAIkX,YAAJ,CACX,CADW,EAEX,CAFW,EAGXl3C,iBAHW,EAIXA,iBAJW,EAKXW,IALF;EAMA2nF,OAAA,GAAU,CAAV;EACA,KAAK,IAAIhvE,CAAA,GAAImvE,MAAA,CAAOv9E,MAAP,GAAgB,CAAhB,GAAoB,CAA5B,EAA+BoO,CAAA,IAAK,CAAzC,EAA4CA,CAAA,IAAK,CAAjD,EAAoD;IAClD,IAAImvE,MAAA,CAAOnvE,CAAP,IAAY,CAAhB,EAAmB;MACjBgvE,OAAA,GAAU5rF,IAAA,CAAKmlC,IAAL,CAAUvoB,CAAA,GAAI,CAAJ,GAAQtZ,iBAAlB,CAAV;MACA;IAFiB;EAD+B;EAUpDggC,GAAA,CAAIkC,SAAJ,CAAc,CAAd,EAAiB,CAAjB,EAAoBliC,iBAApB,EAAuCA,iBAAvC;EACAggC,GAAA,CAAIkiB,UAAJ,CAAe,GAAf,EAAoB,CAApB,EAAuBliD,iBAAvB;EACAyoF,MAAA,GAASzoD,GAAA,CAAIkX,YAAJ,CAAiB,CAAjB,EAAoB,CAApB,EAAuBl3C,iBAAvB,EAA0CA,iBAA1C,EAA6DW,IAAtE;EACAynF,MAAA,GAAS,CAAT;EACA,KAAK,IAAI9uE,CAAA,GAAI,CAAR,EAAWwD,EAAA,GAAK2rE,MAAA,CAAOv9E,MAAvB,EAA+BoO,CAAA,GAAIwD,EAAxC,EAA4CxD,CAAA,IAAK,CAAjD,EAAoD;IAClD,IAAImvE,MAAA,CAAOnvE,CAAP,IAAY,CAAhB,EAAmB;MACjB8uE,MAAA,GAASpoF,iBAAA,GAAoBtD,IAAA,CAAKC,KAAL,CAAW2c,CAAA,GAAI,CAAJ,GAAQtZ,iBAAnB,CAA7B;MACA;IAFiB;EAD+B;EAOpDggC,GAAA,CAAIvgB,MAAJ,CAAWpf,KAAX,GAAmB2/B,GAAA,CAAIvgB,MAAJ,CAAWnf,MAAX,GAAoB,CAAvC;EAEA,IAAI8nF,MAAJ,EAAY;IACV,MAAMI,KAAA,GAAQJ,MAAA,IAAUA,MAAA,GAASE,OAAT,CAAxB;IACAP,WAAA,CAAY1oE,GAAZ,CAAgBi/D,UAAhB,EAA4BkK,KAA5B;IACA,OAAOA,KAAP;EAHU;EAMZT,WAAA,CAAY1oE,GAAZ,CAAgBi/D,UAAhB,EAA4BwJ,mBAA5B;EACA,OAAOA,mBAAP;AAlEyD;AAqE3D,SAASY,UAATA,CAAoBxjE,IAApB,EAA0ByjE,IAA1B,EAAgC50D,MAAhC,EAAwC;EAEtC,MAAM60D,OAAA,GAAUrjF,QAAA,CAASC,aAAT,CAAuB,MAAvB,CAAhB;EACA,MAAMqjF,iBAAA,GAAoB;IACxBhhF,KAAA,EAAO,CADiB;IAExB8+C,WAAA,EAAa,CAFW;IAGxBmiC,OAAA,EAASH,IAAA,CAAKxjF,GAAL,KAAa,EAHE;IAIxB4jF,MAAA,EAAQJ,IAAA,CAAKI,MAJW;IAKxBn1E,QAAA,EAAU;EALc,CAA1B;EAOAsR,IAAA,CAAK8jE,SAAL,CAAel9E,IAAf,CAAoB88E,OAApB;EAEA,MAAMz5C,EAAA,GAAK5vC,iDAAA,CAAKoxB,SAAL,CAAezL,IAAA,CAAK+jE,UAApB,EAAgCN,IAAA,CAAKh4D,SAArC,CAAX;EACA,IAAI9oB,KAAA,GAAQnL,IAAA,CAAKwsF,KAAL,CAAW/5C,EAAA,CAAG,CAAH,CAAX,EAAkBA,EAAA,CAAG,CAAH,CAAlB,CAAZ;EACA,MAAMvpC,KAAA,GAAQmuB,MAAA,CAAO40D,IAAA,CAAKQ,QAAZ,CAAd;EACA,IAAIvjF,KAAA,CAAM48C,QAAV,EAAoB;IAClB36C,KAAA,IAASnL,IAAA,CAAK0sF,EAAL,GAAU,CAAnB;EADkB;EAIpB,MAAM9K,UAAA,GACHp5D,IAAA,CAAKmkE,qBAAL,IAA8BzjF,KAAA,CAAM0jF,gBAArC,IAA0D1jF,KAAA,CAAM04E,UADlE;EAEA,MAAMiL,UAAA,GAAa7sF,IAAA,CAAKqzC,KAAL,CAAWZ,EAAA,CAAG,CAAH,CAAX,EAAkBA,EAAA,CAAG,CAAH,CAAlB,CAAnB;EACA,MAAMq6C,UAAA,GACJD,UAAA,GAAatB,SAAA,CAAU3J,UAAV,EAAsBp5D,IAAA,CAAKukE,2BAA3B,CADf;EAGA,IAAI9hF,IAAJ,EAAUC,GAAV;EACA,IAAIC,KAAA,KAAU,CAAd,EAAiB;IACfF,IAAA,GAAOwnC,EAAA,CAAG,CAAH,CAAP;IACAvnC,GAAA,GAAMunC,EAAA,CAAG,CAAH,IAAQq6C,UAAd;EAFe,CAAjB,MAGO;IACL7hF,IAAA,GAAOwnC,EAAA,CAAG,CAAH,IAAQq6C,UAAA,GAAa9sF,IAAA,CAAKgtF,GAAL,CAAS7hF,KAAT,CAA5B;IACAD,GAAA,GAAMunC,EAAA,CAAG,CAAH,IAAQq6C,UAAA,GAAa9sF,IAAA,CAAKitF,GAAL,CAAS9hF,KAAT,CAA3B;EAFK;EAKP,MAAM+hF,cAAA,GAAiB,2BAAvB;EACA,MAAMC,QAAA,GAAWjB,OAAA,CAAQhjF,KAAzB;EAGA,IAAIsf,IAAA,CAAK4kE,UAAL,KAAoB5kE,IAAA,CAAK6kE,cAA7B,EAA6C;IAC3CF,QAAA,CAASliF,IAAT,GAAgB,GAAI,CAAC,MAAMA,IAAP,GAAeud,IAAA,CAAK8kE,UAApB,EAAgCpe,OAAjC,CAAyC,CAAzC,CAA4C,GAA/D;IACAie,QAAA,CAASjiF,GAAT,GAAe,GAAI,CAAC,MAAMA,GAAP,GAAcsd,IAAA,CAAK+kE,WAAnB,EAAgCre,OAAjC,CAAyC,CAAzC,CAA4C,GAA9D;EAF2C,CAA7C,MAGO;IAELie,QAAA,CAASliF,IAAT,GAAgB,GAAGiiF,cAAH,GAAoBjiF,IAAA,CAAKikE,OAAL,CAAa,CAAb,CAAgB,KAApD;IACAie,QAAA,CAASjiF,GAAT,GAAe,GAAGgiF,cAAH,GAAoBhiF,GAAA,CAAIgkE,OAAJ,CAAY,CAAZ,CAAe,KAAlD;EAHK;EAKPie,QAAA,CAASj2E,QAAT,GAAoB,GAAGg2E,cAAH,GAAoBL,UAAA,CAAW3d,OAAX,CAAmB,CAAnB,CAAsB,KAA9D;EACAie,QAAA,CAASvL,UAAT,GAAsBA,UAAtB;EAEAuK,iBAAA,CAAkBj1E,QAAlB,GAA6B21E,UAA7B;EAGAX,OAAA,CAAQnjF,YAAR,CAAqB,MAArB,EAA6B,cAA7B;EAEAmjF,OAAA,CAAQ5zE,WAAR,GAAsB2zE,IAAA,CAAKxjF,GAA3B;EAEAyjF,OAAA,CAAQltE,GAAR,GAAcitE,IAAA,CAAKjtE,GAAnB;EAIA,IAAIwJ,IAAA,CAAKmkE,qBAAT,EAAgC;IAC9BT,OAAA,CAAQsB,OAAR,CAAgBf,QAAhB,GACEvjF,KAAA,CAAMukF,0BAAN,IAAoCxB,IAAA,CAAKQ,QAD3C;EAD8B;EAIhC,IAAIthF,KAAA,KAAU,CAAd,EAAiB;IACfghF,iBAAA,CAAkBhhF,KAAlB,GAA0BA,KAAA,IAAS,MAAMnL,IAAA,CAAK0sF,EAAX,CAAnC;EADe;EAMjB,IAAIgB,eAAA,GAAkB,KAAtB;EACA,IAAIzB,IAAA,CAAKxjF,GAAL,CAAS+F,MAAT,GAAkB,CAAtB,EAAyB;IACvBk/E,eAAA,GAAkB,IAAlB;EADuB,CAAzB,MAEO,IAAIzB,IAAA,CAAKxjF,GAAL,KAAa,GAAb,IAAoBwjF,IAAA,CAAKh4D,SAAL,CAAe,CAAf,MAAsBg4D,IAAA,CAAKh4D,SAAL,CAAe,CAAf,CAA9C,EAAiE;IACtE,MAAM05D,SAAA,GAAY3tF,IAAA,CAAKwX,GAAL,CAASy0E,IAAA,CAAKh4D,SAAL,CAAe,CAAf,CAAT,CAAlB;MACE25D,SAAA,GAAY5tF,IAAA,CAAKwX,GAAL,CAASy0E,IAAA,CAAKh4D,SAAL,CAAe,CAAf,CAAT,CADd;IAIA,IACE05D,SAAA,KAAcC,SAAd,IACA5tF,IAAA,CAAKE,GAAL,CAASytF,SAAT,EAAoBC,SAApB,IAAiC5tF,IAAA,CAAKG,GAAL,CAASwtF,SAAT,EAAoBC,SAApB,CAAjC,GAAkE,GAFpE,EAGE;MACAF,eAAA,GAAkB,IAAlB;IADA;EARoE;EAYxE,IAAIA,eAAJ,EAAqB;IACnBvB,iBAAA,CAAkBliC,WAAlB,GAAgC/gD,KAAA,CAAM48C,QAAN,GAAiBmmC,IAAA,CAAKroF,MAAtB,GAA+BqoF,IAAA,CAAKtoF,KAApE;EADmB;EAGrB6kB,IAAA,CAAKqlE,kBAAL,CAAwBlrE,GAAxB,CAA4BupE,OAA5B,EAAqCC,iBAArC;EACA,IAAI3jE,IAAA,CAAKslE,iBAAT,EAA4B;IAC1BtlE,IAAA,CAAKulE,WAAL,CAAiB7B,OAAjB;EAD0B;AAzFU;AA8FxC,SAAS8B,MAATA,CAAgB3rE,MAAhB,EAAwB;EACtB,MAAM;IAAE1S,GAAF;IAAOwjB,KAAP;IAAcglB,UAAd;IAA0B7U,GAA1B;IAA+B2qD,YAA/B;IAA6CC;EAA7C,IAAgE7rE,MAAtE;EACA,MAAM;IAAEnZ;EAAF,IAAYyG,GAAlB;EACA,IAAIskB,SAAA,GAAY,EAAhB;EACA,IAAIkkB,UAAA,CAAW8R,WAAX,KAA2B,CAA3B,IAAgC9R,UAAA,CAAWi0C,OAA/C,EAAwD;IACtD,MAAM;MAAExK;IAAF,IAAiB14E,KAAvB;IACA,MAAM;MAAE+gD,WAAF;MAAe/yC;IAAf,IAA4BihC,UAAlC;IAEA,IAAI81C,YAAA,KAAiB/2E,QAAjB,IAA6Bg3E,cAAA,KAAmBtM,UAApD,EAAgE;MAC9Dt+C,GAAA,CAAI3E,IAAJ,GAAW,GAAGznB,QAAA,GAAWic,KAAM,MAAKyuD,UAAzB,EAAX;MACAv/D,MAAA,CAAO4rE,YAAP,GAAsB/2E,QAAtB;MACAmL,MAAA,CAAO6rE,cAAP,GAAwBtM,UAAxB;IAH8D;IAOhE,MAAM;MAAEj+E;IAAF,IAAY2/B,GAAA,CAAI6jB,WAAJ,CAAgBx3C,GAAA,CAAI2I,WAApB,CAAlB;IAEA,IAAI3U,KAAA,GAAQ,CAAZ,EAAe;MACbswB,SAAA,GAAa,UAAUg2B,WAAA,GAAc92B,KAAf,GAAwBxvB,KAAM,GAApD;IADa;EAbuC;EAiBxD,IAAIw0C,UAAA,CAAWhtC,KAAX,KAAqB,CAAzB,EAA4B;IAC1B8oB,SAAA,GAAa,UAASkkB,UAAA,CAAWhtC,KAAM,QAAO8oB,SAAlC,EAAZ;EAD0B;EAG5B,IAAIA,SAAA,CAAUzlB,MAAV,GAAmB,CAAvB,EAA0B;IACxBtF,KAAA,CAAM+qB,SAAN,GAAkBA,SAAlB;EADwB;AAxBJ;AA6BxB,SAASrkB,MAATA,CAAgB4Y,IAAhB,EAAsB;EACpB,IAAIA,IAAA,CAAK2lE,SAAT,EAAoB;IAClB;EADkB;EAGpB,MAAMC,QAAA,GAAW5lE,IAAA,CAAK8jE,SAAtB;EACA,MAAM72D,UAAA,GAAajN,IAAA,CAAK+E,WAAxB;EACA,MAAM8gE,cAAA,GAAiBD,QAAA,CAAS5/E,MAAhC;EAIA,IAAI6/E,cAAA,GAAiBlD,uBAArB,EAA8C;IAC5C11D,UAAA,CAAWhJ,OAAX;IACA;EAF4C;EAK9C,IAAI,CAACjE,IAAA,CAAKslE,iBAAV,EAA6B;IAC3B,WAAW5B,OAAX,IAAsBkC,QAAtB,EAAgC;MAC9B5lE,IAAA,CAAKulE,WAAL,CAAiB7B,OAAjB;IAD8B;EADL;EAK7Bz2D,UAAA,CAAWhJ,OAAX;AApBoB;AAuBtB,MAAM6hE,mBAAN,CAA0B;EACxBpnF,YAAY;IACVqnF,iBADU;IAEVrmF,SAFU;IAGVU,QAHU;IAIVwlF,QAJU;IAKVjC,iBALU;IAMVqC,mBANU;IAOVtkE;EAPU,CAAZ,EAQG;IACD,KAAKukE,kBAAL,GAA0BF,iBAA1B;IACA,KAAKT,iBAAL,GAAyBS,iBAAA,YAA6BG,cAAtD;IACA,KAAKtB,UAAL,GAAkB,KAAKC,cAAL,GAAsBnlF,SAAxC;IACA,KAAKokF,SAAL,GAAiB8B,QAAA,IAAY,EAA7B;IACA,KAAKO,oBAAL,GAA4BH,mBAAA,IAAuB,EAAnD;IACA,KAAKzB,2BAAL,GAAmC7iE,0BAAnC;IACA,KAAKyiE,qBAAL,GAA6B,CAAC,CAACniE,UAAA,CAAWiU,aAAX,EAA0BC,OAAzD;IAEA,KAAKi/C,OAAL,GAAe,IAAf;IACA,KAAKkQ,kBAAL,GAA0B1B,iBAAA,IAAqB,IAAInyD,OAAJ,EAA/C;IACA,KAAKm0D,SAAL,GAAiB,KAAjB;IACA,KAAK5gE,WAAL,GAAmB,IAAIzH,8DAAJ,EAAnB;IACA,KAAK8oE,iBAAL,GAAyB;MACvBX,YAAA,EAAc,IADS;MAEvBC,cAAA,EAAgB,IAFO;MAGvBv+E,GAAA,EAAK,IAHkB;MAIvBwjB,KAAA,EAAOvqB,QAAA,CAASuqB,KAAT,IAAkB3I,UAAA,CAAW0wB,gBAAX,IAA+B,CAA/B,CAJF;MAKvB/C,UAAA,EAAY,IALW;MAMvB7U,GAAA,EAAKgoD,MAAA,CAAO,CAAP,EAAUphE,0BAAV;IANkB,CAAzB;IAQA,MAAM;MAAE1gB,SAAF;MAAaC,UAAb;MAAyBC,KAAzB;MAAgCC;IAAhC,IAA0Cf,QAAA,CAASgB,OAAzD;IACA,KAAK2iF,UAAL,GAAkB,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAC,CAAX,EAAc,CAAC7iF,KAAf,EAAsBC,KAAA,GAAQF,UAA9B,CAAlB;IACA,KAAK6jF,UAAL,GAAkB9jF,SAAlB;IACA,KAAK+jF,WAAL,GAAmB9jF,UAAnB;IAEAvG,qEAAA,CAAmBgF,SAAnB,EAA8BU,QAA9B;IAGA,KAAK2kB,WAAL,CAAiBrB,OAAjB,CACG2S,OADH,CACW,MAAM;MACb,KAAK+vD,iBAAL,GAAyB,IAAzB;IADa,CADjB,EAIGthE,KAJH,CAIS,MAAM,EAJf;EA7BC;EA0CH,IAAIpB,OAAJA,CAAA,EAAc;IACZ,OAAO,KAAKqB,WAAL,CAAiBrB,OAAxB;EADY;EAOd0L,OAAA,EAAS;IACP,KAAKu2D,SAAL,GAAiB,IAAjB;IACA,IAAI,KAAKxQ,OAAT,EAAkB;MAChB,KAAKA,OAAL,CACG/lD,MADH,CACU,IAAIzS,2DAAJ,CAAmB,2BAAnB,CADV,EAEGmI,KAFH,CAES,MAAM,EAFf;MAKA,KAAKqwD,OAAL,GAAe,IAAf;IANgB;IAQlB,KAAKpwD,WAAL,CAAiBC,MAAjB,CAAwB,IAAIrI,2DAAJ,CAAmB,2BAAnB,CAAxB;EAVO;EAgBT0pE,cAAc/xE,KAAd,EAAqBgyE,UAArB,EAAiC;IAC/B,WAAW1xE,IAAX,IAAmBN,KAAnB,EAA0B;MACxB,IAAIM,IAAA,CAAK3U,GAAL,KAAa8Q,SAAjB,EAA4B;QAC1B,IACE6D,IAAA,CAAK5I,IAAL,KAAc,yBAAd,IACA4I,IAAA,CAAK5I,IAAL,KAAc,oBAFhB,EAGE;UACA,MAAMvM,MAAA,GAAS,KAAKmlF,UAApB;UACA,KAAKA,UAAL,GAAkBvkF,QAAA,CAASC,aAAT,CAAuB,MAAvB,CAAlB;UACA,KAAKskF,UAAL,CAAgB9jF,SAAhB,CAA0BC,GAA1B,CAA8B,eAA9B;UACA,IAAI6T,IAAA,CAAKpU,EAAL,KAAY,IAAhB,EAAsB;YACpB,KAAKokF,UAAL,CAAgBrkF,YAAhB,CAA6B,IAA7B,EAAmC,GAAGqU,IAAA,CAAKpU,EAAR,EAAnC;UADoB;UAGtBf,MAAA,CAAO+G,MAAP,CAAc,KAAKo+E,UAAnB;QAPA,CAHF,MAWO,IAAIhwE,IAAA,CAAK5I,IAAL,KAAc,kBAAlB,EAAsC;UAC3C,KAAK44E,UAAL,GAAkB,KAAKA,UAAL,CAAgBx9B,UAAlC;QAD2C;QAG7C;MAf0B;MAiB5B,KAAK++B,oBAAL,CAA0Bv/E,IAA1B,CAA+BgO,IAAA,CAAK3U,GAApC;MACAujF,UAAA,CAAW,IAAX,EAAiB5uE,IAAjB,EAAuB0xE,UAAvB;IAnBwB;EADK;EA2BjCf,YAAY7B,OAAZ,EAAqB;IACnB,MAAMC,iBAAA,GAAqB,KAAKyC,iBAAL,CAAuBz2C,UAAvB,GACzB,KAAK01C,kBAAL,CAAwBn6E,GAAxB,CAA4Bw4E,OAA5B,CADF;IAEA,KAAK0C,iBAAL,CAAuBj/E,GAAvB,GAA6Bu8E,OAA7B;IACA8B,MAAA,CAAO,KAAKY,iBAAZ;IAEA,IAAIzC,iBAAA,CAAkBC,OAAtB,EAA+B;MAC7B,KAAKgB,UAAL,CAAgBp+E,MAAhB,CAAuBk9E,OAAvB;IAD6B;IAG/B,IAAIC,iBAAA,CAAkBE,MAAtB,EAA8B;MAC5B,MAAM0C,EAAA,GAAKlmF,QAAA,CAASC,aAAT,CAAuB,IAAvB,CAAX;MACAimF,EAAA,CAAGhmF,YAAH,CAAgB,MAAhB,EAAwB,cAAxB;MACA,KAAKqkF,UAAL,CAAgBp+E,MAAhB,CAAuB+/E,EAAvB;IAH4B;EATX;EAmBrBC,QAAA,EAAU;IACR,MAAMv5D,UAAA,GAAa,IAAI3P,8DAAJ,EAAnB;IACA,IAAIgpE,UAAA,GAAarhF,MAAA,CAAO3J,MAAP,CAAc,IAAd,CAAjB;IAEA,IAAI,KAAKgqF,iBAAT,EAA4B;MAC1B,MAAM72D,IAAA,GAAOA,CAAA,KAAM;QACjB,KAAK0mD,OAAL,CAAaxmD,IAAb,GAAoBhL,IAApB,CAAyB,CAAC;UAAE1X,KAAF;UAAS2iB;QAAT,CAAD,KAAqB;UAC5C,IAAIA,IAAJ,EAAU;YACR3B,UAAA,CAAWhJ,OAAX;YACA;UAFQ;UAKVhf,MAAA,CAAOsW,MAAP,CAAc+qE,UAAd,EAA0Br6E,KAAA,CAAM4iB,MAAhC;UACA,KAAKw3D,aAAL,CAAmBp6E,KAAA,CAAMqI,KAAzB,EAAgCgyE,UAAhC;UACA73D,IAAA;QAR4C,CAA9C,EASGxB,UAAA,CAAWjI,MATd;MADiB,CAAnB;MAaA,KAAKmwD,OAAL,GAAe,KAAK8Q,kBAAL,CAAwBn3D,SAAxB,EAAf;MACAL,IAAA;IAf0B,CAA5B,MAgBO,IAAI,KAAKw3D,kBAAT,EAA6B;MAClC,MAAM;QAAE3xE,KAAF;QAASua;MAAT,IAAoB,KAAKo3D,kBAA/B;MACA,KAAKI,aAAL,CAAmB/xE,KAAnB,EAA0Bua,MAA1B;MACA5B,UAAA,CAAWhJ,OAAX;IAHkC,CAA7B,MAIA;MACL,MAAM,IAAInE,KAAJ,CAAU,6CAAV,CAAN;IADK;IAIPmN,UAAA,CAAWvJ,OAAX,CAAmBC,IAAnB,CAAwB,MAAM;MAC5B2iE,UAAA,GAAa,IAAb;MACAl/E,MAAA,CAAO,IAAP;IAF4B,CAA9B,EAGG,KAAK2d,WAAL,CAAiBC,MAHpB;EA5BQ;AAxHc;AA+J1B,SAASyhE,eAATA,CAAyB5sE,MAAzB,EAAiC;EAC/B,MAAMmG,IAAA,GAAO,IAAI8lE,mBAAJ,CAAwBjsE,MAAxB,CAAb;EACAmG,IAAA,CAAKwmE,OAAL;EACA,OAAOxmE,IAAP;AAH+B;AAUjC,SAAS0mE,eAATA,CAAyB;EACvBhnF,SADuB;EAEvBU,QAFuB;EAGvBwlF,QAHuB;EAIvBjC,iBAJuB;EAKvBjiE,0BALuB;EAMvBirC,UAAA,GAAa,IANU;EAOvBg6B,WAAA,GAAc;AAPS,CAAzB,EAQG;EACD,IAAIh6B,UAAJ,EAAgB;IACdjyD,qEAAA,CAAmBgF,SAAnB,EAA8B;MAAE2B,QAAA,EAAUjB,QAAA,CAASiB;IAArB,CAA9B;EADc;EAIhB,IAAIslF,WAAJ,EAAiB;IACf,MAAM7rD,GAAA,GAAMgoD,MAAA,CAAO,CAAP,EAAUphE,0BAAV,CAAZ;IACA,MAAMiJ,KAAA,GAAQvqB,QAAA,CAASuqB,KAAT,IAAkB3I,UAAA,CAAW0wB,gBAAX,IAA+B,CAA/B,CAAhC;IACA,MAAM74B,MAAA,GAAS;MACb4rE,YAAA,EAAc,IADD;MAEbC,cAAA,EAAgB,IAFH;MAGbv+E,GAAA,EAAK,IAHQ;MAIbwjB,KAJa;MAKbglB,UAAA,EAAY,IALC;MAMb7U;IANa,CAAf;IAQA,WAAW3zB,GAAX,IAAkBy+E,QAAlB,EAA4B;MAC1B/rE,MAAA,CAAO81B,UAAP,GAAoBg0C,iBAAA,CAAkBz4E,GAAlB,CAAsB/D,GAAtB,CAApB;MACA0S,MAAA,CAAO1S,GAAP,GAAaA,GAAb;MACAq+E,MAAA,CAAO3rE,MAAP;IAH0B;EAXb;AALhB;;;;;;;;;;;;;AC3cH;AACA;AAGA,MAAMmF,sBAAN,CAA6B;EAC3BtgB,YACE;IACEsH,MADF;IAEEme,WAFF;IAGEC,eAAA,GAAkB,KAHpB;IAIEC,0BAAA,GAA6B,IAJ/B;IAKEpC,YAAA,GAAe,KALjB;IAMEC,aAAA,GAAgB;EANlB,CADF,EASE0kE,qBATF,EAUE;IACA/pE,uDAAA,CACE+pE,qBADF,EAEE,6EAFF;IAKA,KAAKC,aAAL,GAAqB,EAArB;IACA,KAAKC,gBAAL,GAAwB1iE,eAAxB;IACA,KAAK2iE,2BAAL,GAAmC1iE,0BAAnC;IAEA,IAAIF,WAAA,EAAane,MAAb,GAAsB,CAA1B,EAA6B;MAG3B,MAAMkf,MAAA,GACJf,WAAA,YAAuBmB,UAAvB,IACAnB,WAAA,CAAYoB,UAAZ,KAA2BpB,WAAA,CAAYe,MAAZ,CAAmBK,UAD9C,GAEIpB,WAAA,CAAYe,MAFhB,GAGI,IAAII,UAAJ,CAAenB,WAAf,EAA4Be,MAJlC;MAKA,KAAK2hE,aAAL,CAAmBjgF,IAAnB,CAAwBse,MAAxB;IAR2B;IAW7B,KAAK8hE,sBAAL,GAA8BJ,qBAA9B;IACA,KAAKhR,qBAAL,GAA6B,CAAC1zD,aAA9B;IACA,KAAK2zD,iBAAL,GAAyB,CAAC5zD,YAA1B;IACA,KAAKqzD,cAAL,GAAsBtvE,MAAtB;IAEA,KAAK2uE,kBAAL,GAA0B,IAA1B;IACA,KAAKsS,aAAL,GAAqB,EAArB;IAEA,KAAKD,sBAAL,CAA4B7gE,gBAA5B,CAA6C,CAACM,KAAD,EAAQC,KAAR,KAAkB;MAC7D,KAAKwgE,cAAL,CAAoB;QAAEzgE,KAAF;QAASC;MAAT,CAApB;IAD6D,CAA/D;IAIA,KAAKsgE,sBAAL,CAA4B3gE,mBAA5B,CAAgD,CAACO,MAAD,EAASC,KAAT,KAAmB;MACjE,KAAKw1D,WAAL,CAAiB;QAAEz1D,MAAF;QAAUC;MAAV,CAAjB;IADiE,CAAnE;IAIA,KAAKmgE,sBAAL,CAA4B1gE,0BAA5B,CAAuDI,KAAA,IAAS;MAC9D,KAAKwgE,cAAL,CAAoB;QAAExgE;MAAF,CAApB;IAD8D,CAAhE;IAIA,KAAKsgE,sBAAL,CAA4BzgE,0BAA5B,CAAuD,MAAM;MAC3D,KAAK4gE,kBAAL;IAD2D,CAA7D;IAIA,KAAKH,sBAAL,CAA4BhgE,cAA5B;EA7CA;EAgDFkgE,eAAe;IAAEzgE,KAAF;IAASC;EAAT,CAAf,EAAiC;IAG/B,MAAMxB,MAAA,GACJwB,KAAA,YAAiBpB,UAAjB,IACAoB,KAAA,CAAMnB,UAAN,KAAqBmB,KAAA,CAAMxB,MAAN,CAAaK,UADlC,GAEImB,KAAA,CAAMxB,MAFV,GAGI,IAAII,UAAJ,CAAeoB,KAAf,EAAsBxB,MAJ5B;IAMA,IAAIuB,KAAA,KAAU1V,SAAd,EAAyB;MACvB,IAAI,KAAK4jE,kBAAT,EAA6B;QAC3B,KAAKA,kBAAL,CAAwByS,QAAxB,CAAiCliE,MAAjC;MAD2B,CAA7B,MAEO;QACL,KAAK2hE,aAAL,CAAmBjgF,IAAnB,CAAwBse,MAAxB;MADK;IAHgB,CAAzB,MAMO;MACL,MAAMmiE,KAAA,GAAQ,KAAKJ,aAAL,CAAmBnyB,IAAnB,CAAwB,UAAUz/B,WAAV,EAAuB;QAC3D,IAAIA,WAAA,CAAYiyD,MAAZ,KAAuB7gE,KAA3B,EAAkC;UAChC,OAAO,KAAP;QADgC;QAGlC4O,WAAA,CAAY+xD,QAAZ,CAAqBliE,MAArB;QACA,OAAO,IAAP;MAL2D,CAA/C,CAAd;MAOArI,uDAAA,CACEwqE,KADF,EAEE,yEAFF;IARK;EAfwB;EA8BjC,IAAIxS,sBAAJA,CAAA,EAA6B;IAC3B,OAAO,KAAKF,kBAAL,EAAyBG,OAAzB,IAAoC,CAA3C;EAD2B;EAI7BuH,YAAYjjE,GAAZ,EAAiB;IACf,IAAIA,GAAA,CAAIyN,KAAJ,KAAc9V,SAAlB,EAA6B;MAE3B,KAAKk2E,aAAL,CAAmB,CAAnB,GAAuBvhE,UAAvB,GAAoC;QAAEkB,MAAA,EAAQxN,GAAA,CAAIwN;MAAd,CAApC;IAF2B,CAA7B,MAGO;MACL,KAAK+tD,kBAAL,EAAyBjvD,UAAzB,GAAsC;QACpCkB,MAAA,EAAQxN,GAAA,CAAIwN,MADwB;QAEpCC,KAAA,EAAOzN,GAAA,CAAIyN;MAFyB,CAAtC;IADK;EAJQ;EAYjBsgE,mBAAA,EAAqB;IACnB,KAAKxS,kBAAL,EAAyBvwD,eAAzB;IACA,KAAK0iE,gBAAL,GAAwB,IAAxB;EAFmB;EAKrBS,mBAAmB74D,MAAnB,EAA2B;IACzB,MAAMta,CAAA,GAAI,KAAK6yE,aAAL,CAAmBpL,OAAnB,CAA2BntD,MAA3B,CAAV;IACA,IAAIta,CAAA,IAAK,CAAT,EAAY;MACV,KAAK6yE,aAAL,CAAmB1Z,MAAnB,CAA0Bn5D,CAA1B,EAA6B,CAA7B;IADU;EAFa;EAO3BmgB,cAAA,EAAgB;IACd1X,uDAAA,CACE,CAAC,KAAK83D,kBADR,EAEE,+DAFF;IAIA,MAAM6S,YAAA,GAAe,KAAKX,aAA1B;IACA,KAAKA,aAAL,GAAqB,IAArB;IACA,OAAO,IAAIY,4BAAJ,CACL,IADK,EAELD,YAFK,EAGL,KAAKV,gBAHA,EAIL,KAAKC,2BAJA,CAAP;EAPc;EAehBzxD,eAAe7O,KAAf,EAAsBS,GAAtB,EAA2B;IACzB,IAAIA,GAAA,IAAO,KAAK2tD,sBAAhB,EAAwC;MACtC,OAAO,IAAP;IADsC;IAGxC,MAAMnmD,MAAA,GAAS,IAAIg5D,iCAAJ,CAAsC,IAAtC,EAA4CjhE,KAA5C,EAAmDS,GAAnD,CAAf;IACA,KAAK8/D,sBAAL,CAA4B//D,gBAA5B,CAA6CR,KAA7C,EAAoDS,GAApD;IACA,KAAK+/D,aAAL,CAAmBrgF,IAAnB,CAAwB8nB,MAAxB;IACA,OAAOA,MAAP;EAPyB;EAU3B2F,kBAAkBlH,MAAlB,EAA0B;IACxB,KAAKwnD,kBAAL,EAAyBvlD,MAAzB,CAAgCjC,MAAhC;IAEA,WAAWuB,MAAX,IAAqB,KAAKu4D,aAAL,CAAmBttF,KAAnB,CAAyB,CAAzB,CAArB,EAAkD;MAChD+0B,MAAA,CAAOU,MAAP,CAAcjC,MAAd;IADgD;IAGlD,KAAK65D,sBAAL,CAA4B7/D,KAA5B;EANwB;AA9IC;AAyJ7B,MAAMsgE,4BAAN,CAAmC;EACjC/oF,YACEu2E,MADF,EAEEuS,YAFF,EAGEpjE,eAAA,GAAkB,KAHpB,EAIEC,0BAAA,GAA6B,IAJ/B,EAKE;IACA,KAAK6wD,OAAL,GAAeD,MAAf;IACA,KAAK0H,KAAL,GAAav4D,eAAA,IAAmB,KAAhC;IACA,KAAKgxD,SAAL,GAAiBrrB,4DAAA,CAAU1lC,0BAAV,IACbA,0BADa,GAEb,IAFJ;IAGA,KAAKwiE,aAAL,GAAqBW,YAAA,IAAgB,EAArC;IACA,KAAK1S,OAAL,GAAe,CAAf;IACA,WAAWpuD,KAAX,IAAoB,KAAKmgE,aAAzB,EAAwC;MACtC,KAAK/R,OAAL,IAAgBpuD,KAAA,CAAMnB,UAAtB;IADsC;IAGxC,KAAKm3D,SAAL,GAAiB,EAAjB;IACA,KAAKiL,aAAL,GAAqB3jE,OAAA,CAAQC,OAAR,EAArB;IACAgxD,MAAA,CAAON,kBAAP,GAA4B,IAA5B;IAEA,KAAKjvD,UAAL,GAAkB,IAAlB;EAfA;EAkBF0hE,SAAS1gE,KAAT,EAAgB;IACd,IAAI,KAAKi2D,KAAT,EAAgB;MACd;IADc;IAGhB,IAAI,KAAKD,SAAL,CAAe12E,MAAf,GAAwB,CAA5B,EAA+B;MAC7B,MAAM+2E,iBAAA,GAAoB,KAAKL,SAAL,CAAehvE,KAAf,EAA1B;MACAqvE,iBAAA,CAAkB94D,OAAlB,CAA0B;QAAEhY,KAAA,EAAOya,KAAT;QAAgBkI,IAAA,EAAM;MAAtB,CAA1B;IAF6B,CAA/B,MAGO;MACL,KAAKi4D,aAAL,CAAmBjgF,IAAnB,CAAwB8f,KAAxB;IADK;IAGP,KAAKouD,OAAL,IAAgBpuD,KAAA,CAAMnB,UAAtB;EAVc;EAahB,IAAI0P,YAAJA,CAAA,EAAmB;IACjB,OAAO,KAAK0yD,aAAZ;EADiB;EAInB,IAAI58E,QAAJA,CAAA,EAAe;IACb,OAAO,KAAKqqE,SAAZ;EADa;EAIf,IAAIjgD,gBAAJA,CAAA,EAAuB;IACrB,OAAO,KAAK+/C,OAAL,CAAaW,iBAApB;EADqB;EAIvB,IAAI3gD,oBAAJA,CAAA,EAA2B;IACzB,OAAO,KAAKggD,OAAL,CAAaU,qBAApB;EADyB;EAI3B,IAAIxgD,aAAJA,CAAA,EAAoB;IAClB,OAAO,KAAK8/C,OAAL,CAAaI,cAApB;EADkB;EAIpB,MAAM3mD,IAANA,CAAA,EAAa;IACX,IAAI,KAAKk4D,aAAL,CAAmB7gF,MAAnB,GAA4B,CAAhC,EAAmC;MACjC,MAAM0gB,KAAA,GAAQ,KAAKmgE,aAAL,CAAmBn5E,KAAnB,EAAd;MACA,OAAO;QAAEzB,KAAA,EAAOya,KAAT;QAAgBkI,IAAA,EAAM;MAAtB,CAAP;IAFiC;IAInC,IAAI,KAAK+tD,KAAT,EAAgB;MACd,OAAO;QAAE1wE,KAAA,EAAO8E,SAAT;QAAoB6d,IAAA,EAAM;MAA1B,CAAP;IADc;IAGhB,MAAMmuD,iBAAA,GAAoB,IAAIz/D,8DAAJ,EAA1B;IACA,KAAKo/D,SAAL,CAAe91E,IAAf,CAAoBm2E,iBAApB;IACA,OAAOA,iBAAA,CAAkBr5D,OAAzB;EAVW;EAab0L,OAAOjC,MAAP,EAAe;IACb,KAAKwvD,KAAL,GAAa,IAAb;IACA,WAAWI,iBAAX,IAAgC,KAAKL,SAArC,EAAgD;MAC9CK,iBAAA,CAAkB94D,OAAlB,CAA0B;QAAEhY,KAAA,EAAO8E,SAAT;QAAoB6d,IAAA,EAAM;MAA1B,CAA1B;IAD8C;IAGhD,KAAK8tD,SAAL,CAAe12E,MAAf,GAAwB,CAAxB;EALa;EAQfoe,gBAAA,EAAkB;IAChB,IAAI,KAAKu4D,KAAT,EAAgB;MACd;IADc;IAGhB,KAAKA,KAAL,GAAa,IAAb;EAJgB;AA9Ee;AAuFnC,MAAM+K,iCAAN,CAAwC;EACtChpF,YAAYu2E,MAAZ,EAAoBxuD,KAApB,EAA2BS,GAA3B,EAAgC;IAC9B,KAAKguD,OAAL,GAAeD,MAAf;IACA,KAAKqS,MAAL,GAAc7gE,KAAd;IACA,KAAKmhE,IAAL,GAAY1gE,GAAZ;IACA,KAAKg2D,YAAL,GAAoB,IAApB;IACA,KAAKR,SAAL,GAAiB,EAAjB;IACA,KAAKC,KAAL,GAAa,KAAb;IAEA,KAAKj3D,UAAL,GAAkB,IAAlB;EAR8B;EAWhC0hE,SAAS1gE,KAAT,EAAgB;IACd,IAAI,KAAKi2D,KAAT,EAAgB;MACd;IADc;IAGhB,IAAI,KAAKD,SAAL,CAAe12E,MAAf,KAA0B,CAA9B,EAAiC;MAC/B,KAAKk3E,YAAL,GAAoBx2D,KAApB;IAD+B,CAAjC,MAEO;MACL,MAAMmhE,kBAAA,GAAqB,KAAKnL,SAAL,CAAehvE,KAAf,EAA3B;MACAm6E,kBAAA,CAAmB5jE,OAAnB,CAA2B;QAAEhY,KAAA,EAAOya,KAAT;QAAgBkI,IAAA,EAAM;MAAtB,CAA3B;MACA,WAAWmuD,iBAAX,IAAgC,KAAKL,SAArC,EAAgD;QAC9CK,iBAAA,CAAkB94D,OAAlB,CAA0B;UAAEhY,KAAA,EAAO8E,SAAT;UAAoB6d,IAAA,EAAM;QAA1B,CAA1B;MAD8C;MAGhD,KAAK8tD,SAAL,CAAe12E,MAAf,GAAwB,CAAxB;IANK;IAQP,KAAK22E,KAAL,GAAa,IAAb;IACA,KAAKzH,OAAL,CAAaqS,kBAAb,CAAgC,IAAhC;EAfc;EAkBhB,IAAIryD,oBAAJA,CAAA,EAA2B;IACzB,OAAO,KAAP;EADyB;EAI3B,MAAMvG,IAANA,CAAA,EAAa;IACX,IAAI,KAAKuuD,YAAT,EAAuB;MACrB,MAAMx2D,KAAA,GAAQ,KAAKw2D,YAAnB;MACA,KAAKA,YAAL,GAAoB,IAApB;MACA,OAAO;QAAEjxE,KAAA,EAAOya,KAAT;QAAgBkI,IAAA,EAAM;MAAtB,CAAP;IAHqB;IAKvB,IAAI,KAAK+tD,KAAT,EAAgB;MACd,OAAO;QAAE1wE,KAAA,EAAO8E,SAAT;QAAoB6d,IAAA,EAAM;MAA1B,CAAP;IADc;IAGhB,MAAMmuD,iBAAA,GAAoB,IAAIz/D,8DAAJ,EAA1B;IACA,KAAKo/D,SAAL,CAAe91E,IAAf,CAAoBm2E,iBAApB;IACA,OAAOA,iBAAA,CAAkBr5D,OAAzB;EAXW;EAcb0L,OAAOjC,MAAP,EAAe;IACb,KAAKwvD,KAAL,GAAa,IAAb;IACA,WAAWI,iBAAX,IAAgC,KAAKL,SAArC,EAAgD;MAC9CK,iBAAA,CAAkB94D,OAAlB,CAA0B;QAAEhY,KAAA,EAAO8E,SAAT;QAAoB6d,IAAA,EAAM;MAA1B,CAA1B;IAD8C;IAGhD,KAAK8tD,SAAL,CAAe12E,MAAf,GAAwB,CAAxB;IACA,KAAKkvE,OAAL,CAAaqS,kBAAb,CAAgC,IAAhC;EANa;AAhDuB;;;;;;;;;;;AC7OxC,MAAM3oE,mBAAA,GAAsB3Z,MAAA,CAAO3J,MAAP,CAAc,IAAd,CAA5B;AAEAsjB,mBAAA,CAAoBuE,UAApB,GAAiC,IAAjC;AACAvE,mBAAA,CAAoB+R,SAApB,GAAgC,EAAhC;;;;;;;;;;;;ACVA;AAYA,MAAM/1B,QAAN,CAAe;EACb,OAAOktF,YAAPA,CAAoBhxE,IAApB,EAA0BtW,EAA1B,EAA8B6E,OAA9B,EAAuCyG,OAAvC,EAAgDiL,MAAhD,EAAwD;IACtD,MAAMzR,UAAA,GAAawG,OAAA,CAAQ+D,QAAR,CAAiBrP,EAAjB,EAAqB;MAAEyL,KAAA,EAAO;IAAT,CAArB,CAAnB;IACA,QAAQ5G,OAAA,CAAQL,IAAhB;MACE,KAAK,UAAL;QACE,IAAIM,UAAA,CAAW2G,KAAX,KAAqB,IAAzB,EAA+B;UAC7B6K,IAAA,CAAKhH,WAAL,GAAmBxK,UAAA,CAAW2G,KAA9B;QAD6B;QAG/B,IAAI8K,MAAA,KAAW,OAAf,EAAwB;UACtB;QADsB;QAGxBD,IAAA,CAAKhO,gBAAL,CAAsB,OAAtB,EAA+B5F,KAAA,IAAS;UACtC4I,OAAA,CAAQvI,QAAR,CAAiB/C,EAAjB,EAAqB;YAAEyL,KAAA,EAAO/I,KAAA,CAAMI,MAAN,CAAa2I;UAAtB,CAArB;QADsC,CAAxC;QAGA;MACF,KAAK,OAAL;QACE,IACE5G,OAAA,CAAQ+mD,UAAR,CAAmBpgD,IAAnB,KAA4B,OAA5B,IACA3G,OAAA,CAAQ+mD,UAAR,CAAmBpgD,IAAnB,KAA4B,UAF9B,EAGE;UACA,IAAI1G,UAAA,CAAW2G,KAAX,KAAqB5G,OAAA,CAAQ+mD,UAAR,CAAmB27B,KAA5C,EAAmD;YACjDjxE,IAAA,CAAKvW,YAAL,CAAkB,SAAlB,EAA6B,IAA7B;UADiD,CAAnD,MAEO,IAAI+E,UAAA,CAAW2G,KAAX,KAAqB5G,OAAA,CAAQ+mD,UAAR,CAAmB47B,MAA5C,EAAoD;YAGzDlxE,IAAA,CAAKxH,eAAL,CAAqB,SAArB;UAHyD;UAK3D,IAAIyH,MAAA,KAAW,OAAf,EAAwB;YACtB;UADsB;UAGxBD,IAAA,CAAKhO,gBAAL,CAAsB,QAAtB,EAAgC5F,KAAA,IAAS;YACvC4I,OAAA,CAAQvI,QAAR,CAAiB/C,EAAjB,EAAqB;cACnByL,KAAA,EAAO/I,KAAA,CAAMI,MAAN,CAAa8O,OAAb,GACHlP,KAAA,CAAMI,MAAN,CAAayE,YAAb,CAA0B,OAA1B,CADG,GAEH7E,KAAA,CAAMI,MAAN,CAAayE,YAAb,CAA0B,QAA1B;YAHe,CAArB;UADuC,CAAzC;QAXA,CAHF,MAqBO;UACL,IAAIzC,UAAA,CAAW2G,KAAX,KAAqB,IAAzB,EAA+B;YAC7B6K,IAAA,CAAKvW,YAAL,CAAkB,OAAlB,EAA2B+E,UAAA,CAAW2G,KAAtC;UAD6B;UAG/B,IAAI8K,MAAA,KAAW,OAAf,EAAwB;YACtB;UADsB;UAGxBD,IAAA,CAAKhO,gBAAL,CAAsB,OAAtB,EAA+B5F,KAAA,IAAS;YACtC4I,OAAA,CAAQvI,QAAR,CAAiB/C,EAAjB,EAAqB;cAAEyL,KAAA,EAAO/I,KAAA,CAAMI,MAAN,CAAa2I;YAAtB,CAArB;UADsC,CAAxC;QAPK;QAWP;MACF,KAAK,QAAL;QACE,IAAI3G,UAAA,CAAW2G,KAAX,KAAqB,IAAzB,EAA+B;UAC7B6K,IAAA,CAAKvW,YAAL,CAAkB,OAAlB,EAA2B+E,UAAA,CAAW2G,KAAtC;UACA,WAAWiH,MAAX,IAAqB7N,OAAA,CAAQqP,QAA7B,EAAuC;YACrC,IAAIxB,MAAA,CAAOk5C,UAAP,CAAkBngD,KAAlB,KAA4B3G,UAAA,CAAW2G,KAA3C,EAAkD;cAChDiH,MAAA,CAAOk5C,UAAP,CAAkBj5C,QAAlB,GAA6B,IAA7B;YADgD,CAAlD,MAEO,IAAID,MAAA,CAAOk5C,UAAP,CAAkBj4B,cAAlB,CAAiC,UAAjC,CAAJ,EAAkD;cACvD,OAAOjhB,MAAA,CAAOk5C,UAAP,CAAkBj5C,QAAzB;YADuD;UAHpB;QAFV;QAU/B2D,IAAA,CAAKhO,gBAAL,CAAsB,OAAtB,EAA+B5F,KAAA,IAAS;UACtC,MAAMgG,OAAA,GAAUhG,KAAA,CAAMI,MAAN,CAAa4F,OAA7B;UACA,MAAM+C,KAAA,GACJ/C,OAAA,CAAQ0K,aAAR,KAA0B,CAAC,CAA3B,GACI,EADJ,GAEI1K,OAAA,CAAQA,OAAA,CAAQ0K,aAAhB,EAA+B3H,KAHrC;UAIAH,OAAA,CAAQvI,QAAR,CAAiB/C,EAAjB,EAAqB;YAAEyL;UAAF,CAArB;QANsC,CAAxC;QAQA;IAjEJ;EAFsD;EAuExD,OAAOg8E,aAAPA,CAAqB;IAAEnxE,IAAF;IAAQzR,OAAR;IAAiByG,OAAA,GAAU,IAA3B;IAAiCiL,MAAjC;IAAyChY;EAAzC,CAArB,EAA6E;IAC3E,MAAM;MAAEqtD;IAAF,IAAiB/mD,OAAvB;IACA,MAAM6iF,mBAAA,GAAsBpxE,IAAA,YAAgBqxE,iBAA5C;IAEA,IAAI/7B,UAAA,CAAWpgD,IAAX,KAAoB,OAAxB,EAAiC;MAG/BogD,UAAA,CAAWpnD,IAAX,GAAkB,GAAGonD,UAAA,CAAWpnD,IAAK,IAAG+R,MAAtB,EAAlB;IAH+B;IAKjC,WAAW,CAACpH,GAAD,EAAM1D,KAAN,CAAX,IAA2BhH,MAAA,CAAOQ,OAAP,CAAe2mD,UAAf,CAA3B,EAAuD;MACrD,IAAIngD,KAAA,KAAU,IAAV,IAAkBA,KAAA,KAAU8E,SAAhC,EAA2C;QACzC;MADyC;MAI3C,QAAQpB,GAAR;QACE,KAAK,OAAL;UACE,IAAI1D,KAAA,CAAMjG,MAAV,EAAkB;YAChB8Q,IAAA,CAAKvW,YAAL,CAAkBoP,GAAlB,EAAuB1D,KAAA,CAAM9S,IAAN,CAAW,GAAX,CAAvB;UADgB;UAGlB;QACF,KAAK,QAAL;UAIE;QACF,KAAK,IAAL;UACE2d,IAAA,CAAKvW,YAAL,CAAkB,iBAAlB,EAAqC0L,KAArC;UACA;QACF,KAAK,OAAL;UACEhH,MAAA,CAAOsW,MAAP,CAAczE,IAAA,CAAKpW,KAAnB,EAA0BuL,KAA1B;UACA;QACF,KAAK,aAAL;UACE6K,IAAA,CAAKhH,WAAL,GAAmB7D,KAAnB;UACA;QACF;UACE,IAAI,CAACi8E,mBAAD,IAAyBv4E,GAAA,KAAQ,MAAR,IAAkBA,GAAA,KAAQ,WAAvD,EAAqE;YACnEmH,IAAA,CAAKvW,YAAL,CAAkBoP,GAAlB,EAAuB1D,KAAvB;UADmE;MArBzE;IALqD;IAgCvD,IAAIi8E,mBAAJ,EAAyB;MACvBnpF,WAAA,CAAYwK,iBAAZ,CACEuN,IADF,EAEEs1C,UAAA,CAAW7hD,IAFb,EAGE6hD,UAAA,CAAW5iD,SAHb;IADuB;IASzB,IAAIsC,OAAA,IAAWsgD,UAAA,CAAWg8B,MAA1B,EAAkC;MAChC,KAAKN,YAAL,CAAkBhxE,IAAlB,EAAwBs1C,UAAA,CAAWg8B,MAAnC,EAA2C/iF,OAA3C,EAAoDyG,OAApD;IADgC;EAlDyC;EA4D7E,OAAO1E,MAAPA,CAAc7L,UAAd,EAA0B;IACxB,MAAMuQ,OAAA,GAAUvQ,UAAA,CAAW6D,iBAA3B;IACA,MAAML,WAAA,GAAcxD,UAAA,CAAWwD,WAA/B;IACA,MAAMspF,IAAA,GAAO9sF,UAAA,CAAWsb,OAAxB;IACA,MAAME,MAAA,GAASxb,UAAA,CAAWwb,MAAX,IAAqB,SAApC;IACA,MAAMuxE,QAAA,GAAWjoF,QAAA,CAASC,aAAT,CAAuB+nF,IAAA,CAAKrjF,IAA5B,CAAjB;IACA,IAAIqjF,IAAA,CAAKj8B,UAAT,EAAqB;MACnB,KAAK67B,aAAL,CAAmB;QACjBnxE,IAAA,EAAMwxE,QADW;QAEjBjjF,OAAA,EAASgjF,IAFQ;QAGjBtxE,MAHiB;QAIjBhY;MAJiB,CAAnB;IADmB;IASrB,MAAMwpF,gBAAA,GAAmBxxE,MAAA,KAAW,UAApC;IACA,MAAMyxE,OAAA,GAAUjtF,UAAA,CAAW4L,GAA3B;IACAqhF,OAAA,CAAQhiF,MAAR,CAAe8hF,QAAf;IAEA,IAAI/sF,UAAA,CAAW6E,QAAf,EAAyB;MACvB,MAAMqrB,SAAA,GAAa,UAASlwB,UAAA,CAAW6E,QAAX,CAAoBqrB,SAApB,CAA8BtyB,IAA9B,CAAmC,GAAnC,CAAwC,GAApE;MACAqvF,OAAA,CAAQ9nF,KAAR,CAAc+qB,SAAd,GAA0BA,SAA1B;IAFuB;IAMzB,IAAI88D,gBAAJ,EAAsB;MACpBC,OAAA,CAAQjoF,YAAR,CAAqB,OAArB,EAA8B,kBAA9B;IADoB;IAKtB,MAAMqlF,QAAA,GAAW,EAAjB;IAIA,IAAIyC,IAAA,CAAK3zE,QAAL,CAAc1O,MAAd,KAAyB,CAA7B,EAAgC;MAC9B,IAAIqiF,IAAA,CAAKp8E,KAAT,EAAgB;QACd,MAAMw8E,IAAA,GAAOpoF,QAAA,CAASyX,cAAT,CAAwBuwE,IAAA,CAAKp8E,KAA7B,CAAb;QACAq8E,QAAA,CAAS9hF,MAAT,CAAgBiiF,IAAhB;QACA,IAAIF,gBAAA,IAAoBnpE,iDAAA,CAAQspE,eAAR,CAAwBL,IAAA,CAAKrjF,IAA7B,CAAxB,EAA4D;UAC1D4gF,QAAA,CAASh/E,IAAT,CAAc6hF,IAAd;QAD0D;MAH9C;MAOhB,OAAO;QAAE7C;MAAF,CAAP;IAR8B;IAWhC,MAAM+C,KAAA,GAAQ,CAAC,CAACN,IAAD,EAAO,CAAC,CAAR,EAAWC,QAAX,CAAD,CAAd;IAEA,OAAOK,KAAA,CAAM3iF,MAAN,GAAe,CAAtB,EAAyB;MACvB,MAAM,CAACvG,MAAD,EAAS2U,CAAT,EAAY0C,IAAZ,IAAoB6xE,KAAA,CAAMpwB,EAAN,CAAS,CAAC,CAAV,CAA1B;MACA,IAAInkD,CAAA,GAAI,CAAJ,KAAU3U,MAAA,CAAOiV,QAAP,CAAgB1O,MAA9B,EAAsC;QACpC2iF,KAAA,CAAM5vC,GAAN;QACA;MAFoC;MAKtC,MAAMwyB,KAAA,GAAQ9rE,MAAA,CAAOiV,QAAP,CAAgB,EAAEi0E,KAAA,CAAMpwB,EAAN,CAAS,CAAC,CAAV,EAAa,CAAb,CAAlB,CAAd;MACA,IAAIgT,KAAA,KAAU,IAAd,EAAoB;QAClB;MADkB;MAIpB,MAAM;QAAEvmE;MAAF,IAAWumE,KAAjB;MACA,IAAIvmE,IAAA,KAAS,OAAb,EAAsB;QACpB,MAAMyjF,IAAA,GAAOpoF,QAAA,CAASyX,cAAT,CAAwByzD,KAAA,CAAMt/D,KAA9B,CAAb;QACA25E,QAAA,CAASh/E,IAAT,CAAc6hF,IAAd;QACA3xE,IAAA,CAAKtQ,MAAL,CAAYiiF,IAAZ;QACA;MAJoB;MAOtB,MAAMG,SAAA,GAAYrd,KAAA,EAAOnf,UAAP,EAAmBy8B,KAAnB,GACdxoF,QAAA,CAASilD,eAAT,CAAyBimB,KAAA,CAAMnf,UAAN,CAAiBy8B,KAA1C,EAAiD7jF,IAAjD,CADc,GAEd3E,QAAA,CAASC,aAAT,CAAuB0E,IAAvB,CAFJ;MAIA8R,IAAA,CAAKtQ,MAAL,CAAYoiF,SAAZ;MACA,IAAIrd,KAAA,CAAMnf,UAAV,EAAsB;QACpB,KAAK67B,aAAL,CAAmB;UACjBnxE,IAAA,EAAM8xE,SADW;UAEjBvjF,OAAA,EAASkmE,KAFQ;UAGjBz/D,OAHiB;UAIjBiL,MAJiB;UAKjBhY;QALiB,CAAnB;MADoB;MAUtB,IAAIwsE,KAAA,CAAM72D,QAAN,EAAgB1O,MAAhB,GAAyB,CAA7B,EAAgC;QAC9B2iF,KAAA,CAAM/hF,IAAN,CAAW,CAAC2kE,KAAD,EAAQ,CAAC,CAAT,EAAYqd,SAAZ,CAAX;MAD8B,CAAhC,MAEO,IAAIrd,KAAA,CAAMt/D,KAAV,EAAiB;QACtB,MAAMw8E,IAAA,GAAOpoF,QAAA,CAASyX,cAAT,CAAwByzD,KAAA,CAAMt/D,KAA9B,CAAb;QACA,IAAIs8E,gBAAA,IAAoBnpE,iDAAA,CAAQspE,eAAR,CAAwB1jF,IAAxB,CAAxB,EAAuD;UACrD4gF,QAAA,CAASh/E,IAAT,CAAc6hF,IAAd;QADqD;QAGvDG,SAAA,CAAUpiF,MAAV,CAAiBiiF,IAAjB;MALsB;IArCD;IA8DzB,WAAWhY,EAAX,IAAiB+X,OAAA,CAAQM,gBAAR,CACf,uDADe,CAAjB,EAEG;MACDrY,EAAA,CAAGlwE,YAAH,CAAgB,UAAhB,EAA4B,IAA5B;IADC;IAIH,OAAO;MACLqlF;IADK,CAAP;EAnHwB;EA6H1B,OAAOtrE,MAAPA,CAAc/e,UAAd,EAA0B;IACxB,MAAMkwB,SAAA,GAAa,UAASlwB,UAAA,CAAW6E,QAAX,CAAoBqrB,SAApB,CAA8BtyB,IAA9B,CAAmC,GAAnC,CAAwC,GAApE;IACAoC,UAAA,CAAW4L,GAAX,CAAezG,KAAf,CAAqB+qB,SAArB,GAAiCA,SAAjC;IACAlwB,UAAA,CAAW4L,GAAX,CAAe1D,MAAf,GAAwB,KAAxB;EAHwB;AAjQb;;;;;;;;;;;ACff,MAAM2b,OAAN,CAAc;EAUZ,OAAOtP,WAAPA,CAAmBye,GAAnB,EAAwB;IACtB,MAAMja,KAAA,GAAQ,EAAd;IACA,MAAMy0E,MAAA,GAAS;MACbz0E,KADa;MAEbua,MAAA,EAAQ5pB,MAAA,CAAO3J,MAAP,CAAc,IAAd;IAFK,CAAf;IAIA,SAAS0tF,IAATA,CAAcP,IAAd,EAAoB;MAClB,IAAI,CAACA,IAAL,EAAW;QACT;MADS;MAGX,IAAIxoF,GAAA,GAAM,IAAV;MACA,MAAM+E,IAAA,GAAOyjF,IAAA,CAAKzjF,IAAlB;MACA,IAAIA,IAAA,KAAS,OAAb,EAAsB;QACpB/E,GAAA,GAAMwoF,IAAA,CAAKx8E,KAAX;MADoB,CAAtB,MAEO,IAAI,CAACmT,OAAA,CAAQspE,eAAR,CAAwB1jF,IAAxB,CAAL,EAAoC;QACzC;MADyC,CAApC,MAEA,IAAIyjF,IAAA,EAAMr8B,UAAN,EAAkBt8C,WAAtB,EAAmC;QACxC7P,GAAA,GAAMwoF,IAAA,CAAKr8B,UAAL,CAAgBt8C,WAAtB;MADwC,CAAnC,MAEA,IAAI24E,IAAA,CAAKx8E,KAAT,EAAgB;QACrBhM,GAAA,GAAMwoF,IAAA,CAAKx8E,KAAX;MADqB;MAGvB,IAAIhM,GAAA,KAAQ,IAAZ,EAAkB;QAChBqU,KAAA,CAAM1N,IAAN,CAAW;UACT3G;QADS,CAAX;MADgB;MAKlB,IAAI,CAACwoF,IAAA,CAAK/zE,QAAV,EAAoB;QAClB;MADkB;MAGpB,WAAW62D,KAAX,IAAoBkd,IAAA,CAAK/zE,QAAzB,EAAmC;QACjCs0E,IAAA,CAAKzd,KAAL;MADiC;IAvBjB;IA2BpByd,IAAA,CAAKz6D,GAAL;IACA,OAAOw6D,MAAP;EAlCsB;EA2CxB,OAAOL,eAAPA,CAAuB1jF,IAAvB,EAA6B;IAC3B,OAAO,EACLA,IAAA,KAAS,UAAT,IACAA,IAAA,KAAS,OADT,IAEAA,IAAA,KAAS,QAFT,IAGAA,IAAA,KAAS,QAHT,CADF;EAD2B;AArDjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACSd;AAqBA;AAOA;AAaA;AACA;AACA;AACA;AACA;AACA;AAGA,MAAMskF,YAAA,GAC8B,SADpC;AAGA,MAAMC,UAAA,GAC8B,WADpC;;;;;;;;;;;;;;AC/DA;AAWA,MAAMC,YAAA,GAAe;EACnBC,OAAA,EAAS,CADU;EAEnBC,IAAA,EAAM,CAFa;EAGnBC,KAAA,EAAO;AAHY,CAArB;AAMA,MAAMC,UAAA,GAAa;EACjBH,OAAA,EAAS,CADQ;EAEjBI,MAAA,EAAQ,CAFS;EAGjBC,eAAA,EAAiB,CAHA;EAIjBC,KAAA,EAAO,CAJU;EAKjBC,OAAA,EAAS,CALQ;EAMjBL,KAAA,EAAO,CANU;EAOjBM,IAAA,EAAM,CAPW;EAQjBC,aAAA,EAAe,CARE;EASjBC,cAAA,EAAgB;AATC,CAAnB;AAYA,SAASC,UAATA,CAAoBj9D,MAApB,EAA4B;EAC1B,IACE,EACEA,MAAA,YAAkBrN,KAAlB,IACC,OAAOqN,MAAP,KAAkB,QAAlB,IAA8BA,MAAA,KAAW,IAD1C,CAFJ,EAKE;IACA/yB,qDAAA,CACE,gEADF;EADA;EAKF,QAAQ+yB,MAAA,CAAOnoB,IAAf;IACE,KAAK,gBAAL;MACE,OAAO,IAAI2X,oDAAJ,CAAmBwQ,MAAA,CAAO4C,OAA1B,CAAP;IACF,KAAK,qBAAL;MACE,OAAO,IAAI3S,yDAAJ,CAAwB+P,MAAA,CAAO4C,OAA/B,CAAP;IACF,KAAK,mBAAL;MACE,OAAO,IAAI1S,uDAAJ,CAAsB8P,MAAA,CAAO4C,OAA7B,EAAsC5C,MAAA,CAAOsI,IAA7C,CAAP;IACF,KAAK,6BAAL;MACE,OAAO,IAAI/X,iEAAJ,CAAgCyP,MAAA,CAAO4C,OAAvC,EAAgD5C,MAAA,CAAOuI,MAAvD,CAAP;IACF,KAAK,uBAAL;MACE,OAAO,IAAI/X,2DAAJ,CAA0BwP,MAAA,CAAO4C,OAAjC,EAA0C5C,MAAA,CAAOwI,OAAjD,CAAP;IACF;MACE,OAAO,IAAIhY,2DAAJ,CAA0BwP,MAAA,CAAO4C,OAAjC,EAA0C5C,MAAA,CAAOv1B,QAAP,EAA1C,CAAP;EAZJ;AAX0B;AA2B5B,MAAMinB,cAAN,CAAqB;EACnBngB,YAAY2rF,UAAZ,EAAwBC,UAAxB,EAAoCC,MAApC,EAA4C;IAC1C,KAAKF,UAAL,GAAkBA,UAAlB;IACA,KAAKC,UAAL,GAAkBA,UAAlB;IACA,KAAKC,MAAL,GAAcA,MAAd;IACA,KAAKC,UAAL,GAAkB,CAAlB;IACA,KAAKC,QAAL,GAAgB,CAAhB;IACA,KAAKC,WAAL,GAAmBzlF,MAAA,CAAO3J,MAAP,CAAc,IAAd,CAAnB;IACA,KAAKqvF,iBAAL,GAAyB1lF,MAAA,CAAO3J,MAAP,CAAc,IAAd,CAAzB;IACA,KAAKsvF,oBAAL,GAA4B3lF,MAAA,CAAO3J,MAAP,CAAc,IAAd,CAA5B;IACA,KAAKuvF,aAAL,GAAqB5lF,MAAA,CAAO3J,MAAP,CAAc,IAAd,CAArB;IAEA,KAAKwvF,kBAAL,GAA0B5nF,KAAA,IAAS;MACjC,MAAMzH,IAAA,GAAOyH,KAAA,CAAMzH,IAAnB;MACA,IAAIA,IAAA,CAAK6uF,UAAL,KAAoB,KAAKD,UAA7B,EAAyC;QACvC;MADuC;MAGzC,IAAI5uF,IAAA,CAAKw5E,MAAT,EAAiB;QACf,KAAK,CAAA8V,oBAAL,CAA2BtvF,IAA3B;QACA;MAFe;MAIjB,IAAIA,IAAA,CAAK6xB,QAAT,EAAmB;QACjB,MAAMk9D,UAAA,GAAa/uF,IAAA,CAAK+uF,UAAxB;QACA,MAAMv9D,UAAA,GAAa,KAAK29D,oBAAL,CAA0BJ,UAA1B,CAAnB;QACA,IAAI,CAACv9D,UAAL,EAAiB;UACf,MAAM,IAAInN,KAAJ,CAAW,2BAA0B0qE,UAA3B,EAAV,CAAN;QADe;QAGjB,OAAO,KAAKI,oBAAL,CAA0BJ,UAA1B,CAAP;QAEA,IAAI/uF,IAAA,CAAK6xB,QAAL,KAAkBk8D,YAAA,CAAaE,IAAnC,EAAyC;UACvCz8D,UAAA,CAAWhJ,OAAX,CAAmBxoB,IAAA,CAAKA,IAAxB;QADuC,CAAzC,MAEO,IAAIA,IAAA,CAAK6xB,QAAL,KAAkBk8D,YAAA,CAAaG,KAAnC,EAA0C;UAC/C18D,UAAA,CAAWjI,MAAX,CAAkBolE,UAAA,CAAW3uF,IAAA,CAAK0xB,MAAhB,CAAlB;QAD+C,CAA1C,MAEA;UACL,MAAM,IAAIrN,KAAJ,CAAU,0BAAV,CAAN;QADK;QAGP;MAfiB;MAiBnB,MAAM3a,MAAA,GAAS,KAAK0lF,aAAL,CAAmBpvF,IAAA,CAAK0J,MAAxB,CAAf;MACA,IAAI,CAACA,MAAL,EAAa;QACX,MAAM,IAAI2a,KAAJ,CAAW,+BAA8BrkB,IAAA,CAAK0J,MAApC,EAAV,CAAN;MADW;MAGb,IAAI1J,IAAA,CAAK+uF,UAAT,EAAqB;QACnB,MAAMQ,YAAA,GAAe,KAAKX,UAA1B;QACA,MAAMY,YAAA,GAAexvF,IAAA,CAAK4uF,UAA1B;QAEA,IAAIrmE,OAAJ,CAAY,UAAUC,OAAV,EAAmB;UAC7BA,OAAA,CAAQ9e,MAAA,CAAO1J,IAAA,CAAKA,IAAZ,CAAR;QAD6B,CAA/B,EAEGkoB,IAFH,CAGE,UAAUmpD,MAAV,EAAkB;UAChByd,MAAA,CAAOj6D,WAAP,CAAmB;YACjB+5D,UAAA,EAAYW,YADK;YAEjBV,UAAA,EAAYW,YAFK;YAGjB39D,QAAA,EAAUk8D,YAAA,CAAaE,IAHN;YAIjBc,UAAA,EAAY/uF,IAAA,CAAK+uF,UAJA;YAKjB/uF,IAAA,EAAMqxE;UALW,CAAnB;QADgB,CAHpB,EAYE,UAAU3/C,MAAV,EAAkB;UAChBo9D,MAAA,CAAOj6D,WAAP,CAAmB;YACjB+5D,UAAA,EAAYW,YADK;YAEjBV,UAAA,EAAYW,YAFK;YAGjB39D,QAAA,EAAUk8D,YAAA,CAAaG,KAHN;YAIjBa,UAAA,EAAY/uF,IAAA,CAAK+uF,UAJA;YAKjBr9D,MAAA,EAAQi9D,UAAA,CAAWj9D,MAAX;UALS,CAAnB;QADgB,CAZpB;QAsBA;MA1BmB;MA4BrB,IAAI1xB,IAAA,CAAKgvF,QAAT,EAAmB;QACjB,KAAK,CAAAS,gBAAL,CAAuBzvF,IAAvB;QACA;MAFiB;MAInB0J,MAAA,CAAO1J,IAAA,CAAKA,IAAZ;IA9DiC,CAAnC;IAgEA8uF,MAAA,CAAOzhF,gBAAP,CAAwB,SAAxB,EAAmC,KAAKgiF,kBAAxC;EA3E0C;EA8E5Cn5D,GAAGnsB,UAAH,EAAe2lF,OAAf,EAAwB;IAOtB,MAAMC,EAAA,GAAK,KAAKP,aAAhB;IACA,IAAIO,EAAA,CAAG5lF,UAAH,CAAJ,EAAoB;MAClB,MAAM,IAAIsa,KAAJ,CAAW,0CAAyCta,UAAW,GAA/D,CAAN;IADkB;IAGpB4lF,EAAA,CAAG5lF,UAAH,IAAiB2lF,OAAjB;EAXsB;EAoBxBtmE,KAAKrf,UAAL,EAAiB/J,IAAjB,EAAuB4vF,SAAvB,EAAkC;IAChC,KAAKd,MAAL,CAAYj6D,WAAZ,CACE;MACE+5D,UAAA,EAAY,KAAKA,UADnB;MAEEC,UAAA,EAAY,KAAKA,UAFnB;MAGEnlF,MAAA,EAAQK,UAHV;MAIE/J;IAJF,CADF,EAOE4vF,SAPF;EADgC;EAoBlCpmE,gBAAgBzf,UAAhB,EAA4B/J,IAA5B,EAAkC4vF,SAAlC,EAA6C;IAC3C,MAAMb,UAAA,GAAa,KAAKA,UAAL,EAAnB;IACA,MAAMv9D,UAAA,GAAa,IAAI3P,uDAAJ,EAAnB;IACA,KAAKstE,oBAAL,CAA0BJ,UAA1B,IAAwCv9D,UAAxC;IACA,IAAI;MACF,KAAKs9D,MAAL,CAAYj6D,WAAZ,CACE;QACE+5D,UAAA,EAAY,KAAKA,UADnB;QAEEC,UAAA,EAAY,KAAKA,UAFnB;QAGEnlF,MAAA,EAAQK,UAHV;QAIEglF,UAJF;QAKE/uF;MALF,CADF,EAQE4vF,SARF;IADE,CAAJ,CAWE,OAAOxlE,EAAP,EAAW;MACXoH,UAAA,CAAWjI,MAAX,CAAkBa,EAAlB;IADW;IAGb,OAAOoH,UAAA,CAAWvJ,OAAlB;EAlB2C;EA+B7C0K,eAAe5oB,UAAf,EAA2B/J,IAA3B,EAAiC6vF,gBAAjC,EAAmDD,SAAnD,EAA8D;IAC5D,MAAMZ,QAAA,GAAW,KAAKA,QAAL,EAAjB;MACEJ,UAAA,GAAa,KAAKA,UADpB;MAEEC,UAAA,GAAa,KAAKA,UAFpB;MAGEC,MAAA,GAAS,KAAKA,MAHhB;IAKA,OAAO,IAAIrE,cAAJ,CACL;MACEz/B,KAAA,EAAO8kC,UAAA,IAAc;QACnB,MAAMC,eAAA,GAAkB,IAAIluE,uDAAJ,EAAxB;QACA,KAAKqtE,iBAAL,CAAuBF,QAAvB,IAAmC;UACjCc,UADiC;UAEjCE,SAAA,EAAWD,eAFsB;UAGjCE,QAAA,EAAU,IAHuB;UAIjCC,UAAA,EAAY,IAJqB;UAKjCC,QAAA,EAAU;QALuB,CAAnC;QAOArB,MAAA,CAAOj6D,WAAP,CACE;UACE+5D,UADF;UAEEC,UAFF;UAGEnlF,MAAA,EAAQK,UAHV;UAIEilF,QAJF;UAKEhvF,IALF;UAMEowF,WAAA,EAAaN,UAAA,CAAWM;QAN1B,CADF,EASER,SATF;QAYA,OAAOG,eAAA,CAAgB9nE,OAAvB;MArBmB,CADvB;MAyBEooE,IAAA,EAAMP,UAAA,IAAc;QAClB,MAAMQ,cAAA,GAAiB,IAAIzuE,uDAAJ,EAAvB;QACA,KAAKqtE,iBAAL,CAAuBF,QAAvB,EAAiCiB,QAAjC,GAA4CK,cAA5C;QACAxB,MAAA,CAAOj6D,WAAP,CAAmB;UACjB+5D,UADiB;UAEjBC,UAFiB;UAGjBrV,MAAA,EAAQ2U,UAAA,CAAWK,IAHF;UAIjBQ,QAJiB;UAKjBoB,WAAA,EAAaN,UAAA,CAAWM;QALP,CAAnB;QASA,OAAOE,cAAA,CAAeroE,OAAtB;MAZkB,CAzBtB;MAwCE0L,MAAA,EAAQjC,MAAA,IAAU;QAChBtQ,gDAAA,CAAOsQ,MAAA,YAAkBrN,KAAzB,EAAgC,iCAAhC;QACA,MAAMksE,gBAAA,GAAmB,IAAI1uE,uDAAJ,EAAzB;QACA,KAAKqtE,iBAAL,CAAuBF,QAAvB,EAAiCkB,UAAjC,GAA8CK,gBAA9C;QACA,KAAKrB,iBAAL,CAAuBF,QAAvB,EAAiCmB,QAAjC,GAA4C,IAA5C;QACArB,MAAA,CAAOj6D,WAAP,CAAmB;UACjB+5D,UADiB;UAEjBC,UAFiB;UAGjBrV,MAAA,EAAQ2U,UAAA,CAAWC,MAHF;UAIjBY,QAJiB;UAKjBt9D,MAAA,EAAQi9D,UAAA,CAAWj9D,MAAX;QALS,CAAnB;QAQA,OAAO6+D,gBAAA,CAAiBtoE,OAAxB;MAbgB;IAxCpB,CADK,EAyDL4nE,gBAzDK,CAAP;EAN4D;EAmE9D,CAAAJ,iBAAkBzvF,IAAlB,EAAwB;IACtB,MAAMgvF,QAAA,GAAWhvF,IAAA,CAAKgvF,QAAtB;MACEJ,UAAA,GAAa,KAAKA,UADpB;MAEEC,UAAA,GAAa7uF,IAAA,CAAK4uF,UAFpB;MAGEE,MAAA,GAAS,KAAKA,MAHhB;IAIA,MAAMl8B,IAAA,GAAO,IAAb;MACElpD,MAAA,GAAS,KAAK0lF,aAAL,CAAmBpvF,IAAA,CAAK0J,MAAxB,CADX;IAGA,MAAM8mF,UAAA,GAAa;MACjBt3D,QAAQjO,KAAR,EAAe3T,IAAA,GAAO,CAAtB,EAAyBs4E,SAAzB,EAAoC;QAClC,IAAI,KAAKa,WAAT,EAAsB;UACpB;QADoB;QAGtB,MAAMC,eAAA,GAAkB,KAAKN,WAA7B;QACA,KAAKA,WAAL,IAAoB94E,IAApB;QAIA,IAAIo5E,eAAA,GAAkB,CAAlB,IAAuB,KAAKN,WAAL,IAAoB,CAA/C,EAAkD;UAChD,KAAKO,cAAL,GAAsB,IAAI9uE,uDAAJ,EAAtB;UACA,KAAKuX,KAAL,GAAa,KAAKu3D,cAAL,CAAoB1oE,OAAjC;QAFgD;QAIlD6mE,MAAA,CAAOj6D,WAAP,CACE;UACE+5D,UADF;UAEEC,UAFF;UAGErV,MAAA,EAAQ2U,UAAA,CAAWI,OAHrB;UAIES,QAJF;UAKE/jE;QALF,CADF,EAQE2kE,SARF;MAbkC,CADnB;MA0BjB52D,MAAA,EAAQ;QACN,IAAI,KAAKy3D,WAAT,EAAsB;UACpB;QADoB;QAGtB,KAAKA,WAAL,GAAmB,IAAnB;QACA3B,MAAA,CAAOj6D,WAAP,CAAmB;UACjB+5D,UADiB;UAEjBC,UAFiB;UAGjBrV,MAAA,EAAQ2U,UAAA,CAAWG,KAHF;UAIjBU;QAJiB,CAAnB;QAMA,OAAOp8B,IAAA,CAAKq8B,WAAL,CAAiBD,QAAjB,CAAP;MAXM,CA1BS;MAwCjB59D,MAAMM,MAAN,EAAc;QACZtQ,gDAAA,CAAOsQ,MAAA,YAAkBrN,KAAzB,EAAgC,gCAAhC;QACA,IAAI,KAAKosE,WAAT,EAAsB;UACpB;QADoB;QAGtB,KAAKA,WAAL,GAAmB,IAAnB;QACA3B,MAAA,CAAOj6D,WAAP,CAAmB;UACjB+5D,UADiB;UAEjBC,UAFiB;UAGjBrV,MAAA,EAAQ2U,UAAA,CAAWD,KAHF;UAIjBc,QAJiB;UAKjBt9D,MAAA,EAAQi9D,UAAA,CAAWj9D,MAAX;QALS,CAAnB;MANY,CAxCG;MAuDjBi/D,cAAA,EAAgB,IAAI9uE,uDAAJ,EAvDC;MAwDjBkX,MAAA,EAAQ,IAxDS;MAyDjBI,QAAA,EAAU,IAzDO;MA0DjBs3D,WAAA,EAAa,KA1DI;MA2DjBL,WAAA,EAAapwF,IAAA,CAAKowF,WA3DD;MA4DjBh3D,KAAA,EAAO;IA5DU,CAAnB;IA+DAo3D,UAAA,CAAWG,cAAX,CAA0BnoE,OAA1B;IACAgoE,UAAA,CAAWp3D,KAAX,GAAmBo3D,UAAA,CAAWG,cAAX,CAA0B1oE,OAA7C;IACA,KAAKgnE,WAAL,CAAiBD,QAAjB,IAA6BwB,UAA7B;IAEA,IAAIjoE,OAAJ,CAAY,UAAUC,OAAV,EAAmB;MAC7BA,OAAA,CAAQ9e,MAAA,CAAO1J,IAAA,CAAKA,IAAZ,EAAkBwwF,UAAlB,CAAR;IAD6B,CAA/B,EAEGtoE,IAFH,CAGE,YAAY;MACV4mE,MAAA,CAAOj6D,WAAP,CAAmB;QACjB+5D,UADiB;QAEjBC,UAFiB;QAGjBrV,MAAA,EAAQ2U,UAAA,CAAWO,cAHF;QAIjBM,QAJiB;QAKjBn7D,OAAA,EAAS;MALQ,CAAnB;IADU,CAHd,EAYE,UAAUnC,MAAV,EAAkB;MAChBo9D,MAAA,CAAOj6D,WAAP,CAAmB;QACjB+5D,UADiB;QAEjBC,UAFiB;QAGjBrV,MAAA,EAAQ2U,UAAA,CAAWO,cAHF;QAIjBM,QAJiB;QAKjBt9D,MAAA,EAAQi9D,UAAA,CAAWj9D,MAAX;MALS,CAAnB;IADgB,CAZpB;EA3EsB;EAmGxB,CAAA49D,qBAAsBtvF,IAAtB,EAA4B;IAC1B,MAAMgvF,QAAA,GAAWhvF,IAAA,CAAKgvF,QAAtB;MACEJ,UAAA,GAAa,KAAKA,UADpB;MAEEC,UAAA,GAAa7uF,IAAA,CAAK4uF,UAFpB;MAGEE,MAAA,GAAS,KAAKA,MAHhB;IAIA,MAAM8B,gBAAA,GAAmB,KAAK1B,iBAAL,CAAuBF,QAAvB,CAAzB;MACEwB,UAAA,GAAa,KAAKvB,WAAL,CAAiBD,QAAjB,CADf;IAGA,QAAQhvF,IAAA,CAAKw5E,MAAb;MACE,KAAK2U,UAAA,CAAWO,cAAhB;QACE,IAAI1uF,IAAA,CAAK6zB,OAAT,EAAkB;UAChB+8D,gBAAA,CAAiBZ,SAAjB,CAA2BxnE,OAA3B;QADgB,CAAlB,MAEO;UACLooE,gBAAA,CAAiBZ,SAAjB,CAA2BzmE,MAA3B,CAAkColE,UAAA,CAAW3uF,IAAA,CAAK0xB,MAAhB,CAAlC;QADK;QAGP;MACF,KAAKy8D,UAAA,CAAWM,aAAhB;QACE,IAAIzuF,IAAA,CAAK6zB,OAAT,EAAkB;UAChB+8D,gBAAA,CAAiBX,QAAjB,CAA0BznE,OAA1B;QADgB,CAAlB,MAEO;UACLooE,gBAAA,CAAiBX,QAAjB,CAA0B1mE,MAA1B,CAAiColE,UAAA,CAAW3uF,IAAA,CAAK0xB,MAAhB,CAAjC;QADK;QAGP;MACF,KAAKy8D,UAAA,CAAWK,IAAhB;QAEE,IAAI,CAACgC,UAAL,EAAiB;UACf1B,MAAA,CAAOj6D,WAAP,CAAmB;YACjB+5D,UADiB;YAEjBC,UAFiB;YAGjBrV,MAAA,EAAQ2U,UAAA,CAAWM,aAHF;YAIjBO,QAJiB;YAKjBn7D,OAAA,EAAS;UALQ,CAAnB;UAOA;QARe;QAYjB,IAAI28D,UAAA,CAAWJ,WAAX,IAA0B,CAA1B,IAA+BpwF,IAAA,CAAKowF,WAAL,GAAmB,CAAtD,EAAyD;UACvDI,UAAA,CAAWG,cAAX,CAA0BnoE,OAA1B;QADuD;QAIzDgoE,UAAA,CAAWJ,WAAX,GAAyBpwF,IAAA,CAAKowF,WAA9B;QAEA,IAAI7nE,OAAJ,CAAY,UAAUC,OAAV,EAAmB;UAC7BA,OAAA,CAAQgoE,UAAA,CAAWz3D,MAAX,IAAR;QAD6B,CAA/B,EAEG7Q,IAFH,CAGE,YAAY;UACV4mE,MAAA,CAAOj6D,WAAP,CAAmB;YACjB+5D,UADiB;YAEjBC,UAFiB;YAGjBrV,MAAA,EAAQ2U,UAAA,CAAWM,aAHF;YAIjBO,QAJiB;YAKjBn7D,OAAA,EAAS;UALQ,CAAnB;QADU,CAHd,EAYE,UAAUnC,MAAV,EAAkB;UAChBo9D,MAAA,CAAOj6D,WAAP,CAAmB;YACjB+5D,UADiB;YAEjBC,UAFiB;YAGjBrV,MAAA,EAAQ2U,UAAA,CAAWM,aAHF;YAIjBO,QAJiB;YAKjBt9D,MAAA,EAAQi9D,UAAA,CAAWj9D,MAAX;UALS,CAAnB;QADgB,CAZpB;QAsBA;MACF,KAAKy8D,UAAA,CAAWI,OAAhB;QACEntE,gDAAA,CAAOwvE,gBAAP,EAAyB,uCAAzB;QACA,IAAIA,gBAAA,CAAiBT,QAArB,EAA+B;UAC7B;QAD6B;QAG/BS,gBAAA,CAAiBd,UAAjB,CAA4B52D,OAA5B,CAAoCl5B,IAAA,CAAKirB,KAAzC;QACA;MACF,KAAKkjE,UAAA,CAAWG,KAAhB;QACEltE,gDAAA,CAAOwvE,gBAAP,EAAyB,qCAAzB;QACA,IAAIA,gBAAA,CAAiBT,QAArB,EAA+B;UAC7B;QAD6B;QAG/BS,gBAAA,CAAiBT,QAAjB,GAA4B,IAA5B;QACAS,gBAAA,CAAiBd,UAAjB,CAA4B92D,KAA5B;QACA,KAAK,CAAA63D,sBAAL,CAA6BD,gBAA7B,EAA+C5B,QAA/C;QACA;MACF,KAAKb,UAAA,CAAWD,KAAhB;QACE9sE,gDAAA,CAAOwvE,gBAAP,EAAyB,qCAAzB;QACAA,gBAAA,CAAiBd,UAAjB,CAA4B1+D,KAA5B,CAAkCu9D,UAAA,CAAW3uF,IAAA,CAAK0xB,MAAhB,CAAlC;QACA,KAAK,CAAAm/D,sBAAL,CAA6BD,gBAA7B,EAA+C5B,QAA/C;QACA;MACF,KAAKb,UAAA,CAAWE,eAAhB;QACE,IAAIruF,IAAA,CAAK6zB,OAAT,EAAkB;UAChB+8D,gBAAA,CAAiBV,UAAjB,CAA4B1nE,OAA5B;QADgB,CAAlB,MAEO;UACLooE,gBAAA,CAAiBV,UAAjB,CAA4B3mE,MAA5B,CAAmColE,UAAA,CAAW3uF,IAAA,CAAK0xB,MAAhB,CAAnC;QADK;QAGP,KAAK,CAAAm/D,sBAAL,CAA6BD,gBAA7B,EAA+C5B,QAA/C;QACA;MACF,KAAKb,UAAA,CAAWC,MAAhB;QACE,IAAI,CAACoC,UAAL,EAAiB;UACf;QADe;QAIjB,IAAIjoE,OAAJ,CAAY,UAAUC,OAAV,EAAmB;UAC7BA,OAAA,CAAQgoE,UAAA,CAAWr3D,QAAX,GAAsBw1D,UAAA,CAAW3uF,IAAA,CAAK0xB,MAAhB,CAAtB,CAAR;QAD6B,CAA/B,EAEGxJ,IAFH,CAGE,YAAY;UACV4mE,MAAA,CAAOj6D,WAAP,CAAmB;YACjB+5D,UADiB;YAEjBC,UAFiB;YAGjBrV,MAAA,EAAQ2U,UAAA,CAAWE,eAHF;YAIjBW,QAJiB;YAKjBn7D,OAAA,EAAS;UALQ,CAAnB;QADU,CAHd,EAYE,UAAUnC,MAAV,EAAkB;UAChBo9D,MAAA,CAAOj6D,WAAP,CAAmB;YACjB+5D,UADiB;YAEjBC,UAFiB;YAGjBrV,MAAA,EAAQ2U,UAAA,CAAWE,eAHF;YAIjBW,QAJiB;YAKjBt9D,MAAA,EAAQi9D,UAAA,CAAWj9D,MAAX;UALS,CAAnB;QADgB,CAZpB;QAsBA8+D,UAAA,CAAWG,cAAX,CAA0BpnE,MAA1B,CAAiColE,UAAA,CAAW3uF,IAAA,CAAK0xB,MAAhB,CAAjC;QACA8+D,UAAA,CAAWC,WAAX,GAAyB,IAAzB;QACA,OAAO,KAAKxB,WAAL,CAAiBD,QAAjB,CAAP;QACA;MACF;QACE,MAAM,IAAI3qE,KAAJ,CAAU,wBAAV,CAAN;IAvHJ;EAR0B;EAmI5B,MAAM,CAAAwsE,sBAANA,CAA8BD,gBAA9B,EAAgD5B,QAAhD,EAA0D;IAGxD,MAAMzmE,OAAA,CAAQuoE,UAAR,CAAmB,CACvBF,gBAAA,CAAiBZ,SAAjB,EAA4B/nE,OADL,EAEvB2oE,gBAAA,CAAiBX,QAAjB,EAA2BhoE,OAFJ,EAGvB2oE,gBAAA,CAAiBV,UAAjB,EAA6BjoE,OAHN,CAAnB,CAAN;IAKA,OAAO,KAAKinE,iBAAL,CAAuBF,QAAvB,CAAP;EARwD;EAW1D9kE,QAAA,EAAU;IACR,KAAK4kE,MAAL,CAAY72E,mBAAZ,CAAgC,SAAhC,EAA2C,KAAKo3E,kBAAhD;EADQ;AA1cS;;;;;;;;;;;;ACpDrB;AAEA,MAAM0B,IAAA,GAAO,UAAb;AAEA,MAAMC,SAAA,GAAY,UAAlB;AACA,MAAMC,QAAA,GAAW,MAAjB;AAEA,MAAM5xE,cAAN,CAAqB;EACnBpc,YAAYiuF,IAAZ,EAAkB;IAChB,KAAKC,EAAL,GAAUD,IAAA,GAAOA,IAAA,GAAO,UAAd,GAA2BH,IAArC;IACA,KAAKK,EAAL,GAAUF,IAAA,GAAOA,IAAA,GAAO,UAAd,GAA2BH,IAArC;EAFgB;EAKlBlyE,OAAO+wC,KAAP,EAAc;IACZ,IAAI5vD,IAAJ,EAAUuK,MAAV;IACA,IAAI,OAAOqlD,KAAP,KAAiB,QAArB,EAA+B;MAC7B5vD,IAAA,GAAO,IAAI6pB,UAAJ,CAAe+lC,KAAA,CAAMrlD,MAAN,GAAe,CAA9B,CAAP;MACAA,MAAA,GAAS,CAAT;MACA,KAAK,IAAIoO,CAAA,GAAI,CAAR,EAAWwD,EAAA,GAAKyzC,KAAA,CAAMrlD,MAAtB,EAA8BoO,CAAA,GAAIwD,EAAvC,EAA2CxD,CAAA,EAA3C,EAAgD;QAC9C,MAAMqhB,IAAA,GAAO41B,KAAA,CAAMotB,UAAN,CAAiBrkE,CAAjB,CAAb;QACA,IAAIqhB,IAAA,IAAQ,IAAZ,EAAkB;UAChBh6B,IAAA,CAAKuK,MAAA,EAAL,IAAiByvB,IAAjB;QADgB,CAAlB,MAEO;UACLh6B,IAAA,CAAKuK,MAAA,EAAL,IAAiByvB,IAAA,KAAS,CAA1B;UACAh6B,IAAA,CAAKuK,MAAA,EAAL,IAAiByvB,IAAA,GAAO,IAAxB;QAFK;MAJuC;IAHnB,CAA/B,MAYO,IAAIxY,uDAAA,CAAcouC,KAAd,CAAJ,EAA0B;MAC/B5vD,IAAA,GAAO4vD,KAAA,CAAM1xD,KAAN,EAAP;MACAqM,MAAA,GAASvK,IAAA,CAAK8pB,UAAd;IAF+B,CAA1B,MAGA;MACL,MAAM,IAAIzF,KAAJ,CACJ,iDACE,kCAFE,CAAN;IADK;IAOP,MAAMgtE,WAAA,GAAc9mF,MAAA,IAAU,CAA9B;IACA,MAAM+mF,UAAA,GAAa/mF,MAAA,GAAS8mF,WAAA,GAAc,CAA1C;IAEA,MAAME,UAAA,GAAa,IAAI3nD,WAAJ,CAAgB5pC,IAAA,CAAKypB,MAArB,EAA6B,CAA7B,EAAgC4nE,WAAhC,CAAnB;IACA,IAAIG,EAAA,GAAK,CAAT;MACEC,EAAA,GAAK,CADP;IAEA,IAAIN,EAAA,GAAK,KAAKA,EAAd;MACEC,EAAA,GAAK,KAAKA,EADZ;IAEA,MAAMM,EAAA,GAAK,UAAX;MACEC,EAAA,GAAK,UADP;IAEA,MAAMC,MAAA,GAASF,EAAA,GAAKT,QAApB;MACEY,MAAA,GAASF,EAAA,GAAKV,QADhB;IAGA,KAAK,IAAIt4E,CAAA,GAAI,CAAR,EAAWA,CAAA,GAAI04E,WAApB,EAAiC14E,CAAA,EAAjC,EAAsC;MACpC,IAAIA,CAAA,GAAI,CAAR,EAAW;QACT64E,EAAA,GAAKD,UAAA,CAAW54E,CAAX,CAAL;QACA64E,EAAA,GAAOA,EAAA,GAAKE,EAAN,GAAYV,SAAb,GAA4BQ,EAAA,GAAKI,MAAN,GAAgBX,QAAhD;QACAO,EAAA,GAAMA,EAAA,IAAM,EAAP,GAAcA,EAAA,KAAO,EAA1B;QACAA,EAAA,GAAOA,EAAA,GAAKG,EAAN,GAAYX,SAAb,GAA4BQ,EAAA,GAAKK,MAAN,GAAgBZ,QAAhD;QACAE,EAAA,IAAMK,EAAN;QACAL,EAAA,GAAMA,EAAA,IAAM,EAAP,GAAcA,EAAA,KAAO,EAA1B;QACAA,EAAA,GAAKA,EAAA,GAAK,CAAL,GAAS,UAAd;MAPS,CAAX,MAQO;QACLM,EAAA,GAAKF,UAAA,CAAW54E,CAAX,CAAL;QACA84E,EAAA,GAAOA,EAAA,GAAKC,EAAN,GAAYV,SAAb,GAA4BS,EAAA,GAAKG,MAAN,GAAgBX,QAAhD;QACAQ,EAAA,GAAMA,EAAA,IAAM,EAAP,GAAcA,EAAA,KAAO,EAA1B;QACAA,EAAA,GAAOA,EAAA,GAAKE,EAAN,GAAYX,SAAb,GAA4BS,EAAA,GAAKI,MAAN,GAAgBZ,QAAhD;QACAG,EAAA,IAAMK,EAAN;QACAL,EAAA,GAAMA,EAAA,IAAM,EAAP,GAAcA,EAAA,KAAO,EAA1B;QACAA,EAAA,GAAKA,EAAA,GAAK,CAAL,GAAS,UAAd;MAPK;IAT6B;IAoBtCI,EAAA,GAAK,CAAL;IAEA,QAAQF,UAAR;MACE,KAAK,CAAL;QACEE,EAAA,IAAMxxF,IAAA,CAAKqxF,WAAA,GAAc,CAAd,GAAkB,CAAvB,KAA6B,EAAnC;MAEF,KAAK,CAAL;QACEG,EAAA,IAAMxxF,IAAA,CAAKqxF,WAAA,GAAc,CAAd,GAAkB,CAAvB,KAA6B,CAAnC;MAEF,KAAK,CAAL;QACEG,EAAA,IAAMxxF,IAAA,CAAKqxF,WAAA,GAAc,CAAnB,CAAN;QAGAG,EAAA,GAAOA,EAAA,GAAKE,EAAN,GAAYV,SAAb,GAA4BQ,EAAA,GAAKI,MAAN,GAAgBX,QAAhD;QACAO,EAAA,GAAMA,EAAA,IAAM,EAAP,GAAcA,EAAA,KAAO,EAA1B;QACAA,EAAA,GAAOA,EAAA,GAAKG,EAAN,GAAYX,SAAb,GAA4BQ,EAAA,GAAKK,MAAN,GAAgBZ,QAAhD;QACA,IAAII,WAAA,GAAc,CAAlB,EAAqB;UACnBF,EAAA,IAAMK,EAAN;QADmB,CAArB,MAEO;UACLJ,EAAA,IAAMI,EAAN;QADK;IAhBX;IAqBA,KAAKL,EAAL,GAAUA,EAAV;IACA,KAAKC,EAAL,GAAUA,EAAV;EAjFY;EAoFdrwE,UAAA,EAAY;IACV,IAAIowE,EAAA,GAAK,KAAKA,EAAd;MACEC,EAAA,GAAK,KAAKA,EADZ;IAGAD,EAAA,IAAMC,EAAA,KAAO,CAAb;IACAD,EAAA,GAAOA,EAAA,GAAK,UAAN,GAAoBH,SAArB,GAAoCG,EAAA,GAAK,MAAN,GAAgBF,QAAxD;IACAG,EAAA,GACIA,EAAA,GAAK,UAAN,GAAoBJ,SAArB,GACE,CAAE,CAACI,EAAA,IAAM,EAAP,GAAcD,EAAA,KAAO,EAArB,IAA4B,UAA9B,GAA4CH,SAA5C,MAA2D,EAF/D;IAGAG,EAAA,IAAMC,EAAA,KAAO,CAAb;IACAD,EAAA,GAAOA,EAAA,GAAK,UAAN,GAAoBH,SAArB,GAAoCG,EAAA,GAAK,MAAN,GAAgBF,QAAxD;IACAG,EAAA,GACIA,EAAA,GAAK,UAAN,GAAoBJ,SAArB,GACE,CAAE,CAACI,EAAA,IAAM,EAAP,GAAcD,EAAA,KAAO,EAArB,IAA4B,UAA9B,GAA4CH,SAA5C,MAA2D,EAF/D;IAGAG,EAAA,IAAMC,EAAA,KAAO,CAAb;IAEA,OACG,CAAAD,EAAA,KAAO,CAAP,EAAUh1F,QAAX,CAAoB,EAApB,EAAwBC,QAAxB,CAAiC,CAAjC,EAAoC,GAApC,IACC,CAAAg1F,EAAA,KAAO,CAAP,EAAUj1F,QAAX,CAAoB,EAApB,EAAwBC,QAAxB,CAAiC,CAAjC,EAAoC,GAApC,CAFF;EAhBU;AA1FO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACNrB,MAAMqlB,QAAA,GAEJ,OAAOqwE,OAAP,KAAmB,QADnB,IAEAA,OAAA,GAAU,EAAV,KAAiB,kBAFjB,IAGA,CAACA,OAAA,CAAQC,QAAR,CAAiBC,EAHlB,IAIA,EAAEF,OAAA,CAAQC,QAAR,CAAiBE,QAAjB,IAA6BH,OAAA,CAAQvhF,IAArC,IAA6CuhF,OAAA,CAAQvhF,IAAR,KAAiB,SAA9D,CALJ;AAOA,MAAMg6B,eAAA,GAAkB,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,EAAa,CAAb,EAAgB,CAAhB,CAAxB;AACA,MAAMD,oBAAA,GAAuB,CAAC,KAAD,EAAQ,CAAR,EAAW,CAAX,EAAc,KAAd,EAAqB,CAArB,EAAwB,CAAxB,CAA7B;AAEA,MAAM5oB,uBAAA,GAA0B,IAAhC;AAIA,MAAMjjB,WAAA,GAAc,IAApB;AACA,MAAMyzF,mBAAA,GAAsB,IAA5B;AACA,MAAMC,eAAA,GAAkBD,mBAAA,GAAsBzzF,WAA9C;AAcA,MAAMqjB,mBAAA,GAAsB;EAC1BoW,GAAA,EAAK,IADqB;EAE1BD,OAAA,EAAS,IAFiB;EAG1BtH,KAAA,EAAO,IAHmB;EAI1ByhE,IAAA,EAAM,IAJoB;EAK1B95D,iBAAA,EAAmB,IALO;EAM1BE,mBAAA,EAAqB,IANK;EAO1BJ,mBAAA,EAAqB,IAPK;EAQ1BK,MAAA,EAAQ;AARkB,CAA5B;AAWA,MAAMtX,cAAA,GAAiB;EACrBgX,OAAA,EAAS,CADY;EAErBpI,MAAA,EAAQ,CAFa;EAGrBsI,YAAA,EAAc,CAHO;EAIrBE,cAAA,EAAgB;AAJK,CAAvB;AAOA,MAAM43C,sBAAA,GAAyB,wBAA/B;AAEA,MAAM9xE,oBAAA,GAAuB;EAC3B85B,OAAA,EAAS,CAAC,CADiB;EAE3BqG,IAAA,EAAM,CAFqB;EAG3Br9B,QAAA,EAAU,CAHiB;EAI3BwB,KAAA,EAAO,EAJoB;EAK3BZ,GAAA,EAAK;AALsB,CAA7B;AAQA,MAAMwvD,0BAAA,GAA6B;EACjC8gC,MAAA,EAAQ,CADyB;EAEjC/a,MAAA,EAAQ,CAFyB;EAGjCzjB,aAAA,EAAe,EAHkB;EAIjCC,cAAA,EAAgB,EAJiB;EAKjCw+B,gBAAA,EAAkB,EALe;EAMjCh3B,SAAA,EAAW,EANsB;EAOjCD,aAAA,EAAe,EAPkB;EAQjCE,WAAA,EAAa;AARoB,CAAnC;AAYA,MAAMoyB,cAAA,GAAiB;EACrBh9D,KAAA,EAAO,IADc;EAErB4hE,eAAA,EAAiB,IAFI;EAGrBC,IAAA,EAAM,IAHe;EAIrBC,kBAAA,EAAoB,IAJC;EAKrBC,sBAAA,EAAwB,KALH;EAMrBC,sBAAA,EAAwB,KANH;EAOrBC,QAAA,EAAU,KAPW;EAQrBC,kBAAA,EAAoB;AARC,CAAvB;AAWA,MAAMpoD,iBAAA,GAAoB;EACxBxL,IAAA,EAAM,CADkB;EAExBC,MAAA,EAAQ,CAFgB;EAGxBmiB,WAAA,EAAa,CAHW;EAIxBqC,SAAA,EAAW,CAJa;EAKxBovC,gBAAA,EAAkB,CALM;EAMxBC,kBAAA,EAAoB,CANI;EAOxBC,uBAAA,EAAyB,CAPD;EAQxBC,WAAA,EAAa,CARW;EASxBjyC,gBAAA,EAAkB,CATM;EAUxBE,gBAAA,EAAkB;AAVM,CAA1B;AAaA,MAAMvY,SAAA,GAAY;EAChBG,cAAA,EAAgB,CADA;EAEhBE,SAAA,EAAW,CAFK;EAGhB6K,UAAA,EAAY;AAHI,CAAlB;AAMA,MAAMt1C,cAAA,GAAiB;EACrB6B,IAAA,EAAM,CADe;EAErBF,IAAA,EAAM,CAFe;EAGrBiB,QAAA,EAAU,CAHW;EAIrBE,IAAA,EAAM,CAJe;EAKrBE,MAAA,EAAQ,CALa;EAMrBE,MAAA,EAAQ,CANa;EAOrBQ,OAAA,EAAS,CAPY;EAQrBN,QAAA,EAAU,CARW;EASrBQ,SAAA,EAAW,CATU;EAUrBE,SAAA,EAAW,EAVU;EAWrBE,QAAA,EAAU,EAXW;EAYrBE,SAAA,EAAW,EAZU;EAarBE,KAAA,EAAO,EAbc;EAcrBd,KAAA,EAAO,EAdc;EAerBE,GAAA,EAAK,EAfgB;EAgBrBd,KAAA,EAAO,EAhBc;EAiBrB4B,cAAA,EAAgB,EAjBK;EAkBrBqwF,KAAA,EAAO,EAlBc;EAmBrBC,KAAA,EAAO,EAnBc;EAoBrB7yF,MAAA,EAAQ,EApBa;EAqBrB8yF,MAAA,EAAQ,EArBa;EAsBrBC,WAAA,EAAa,EAtBQ;EAuBrBC,OAAA,EAAS,EAvBY;EAwBrBC,SAAA,EAAW,EAxBU;EAyBrBC,MAAA,EAAQ,EAzBa;EA0BrBC,MAAA,EAAQ;AA1Ba,CAAvB;AA6BA,MAAMC,mBAAA,GAAsB;EAC1BC,KAAA,EAAO,OADmB;EAE1BC,KAAA,EAAO;AAFmB,CAA5B;AAKA,MAAMC,cAAA,GAAiB;EACrBnwC,SAAA,EAAW,IADU;EAErBowC,MAAA,EAAQ,IAFa;EAGrBnjE,KAAA,EAAO,IAHc;EAIrBojE,MAAA,EAAQ,IAJa;EAKrBC,QAAA,EAAU,IALW;EAMrBC,MAAA,EAAQ,IANa;EAOrBC,QAAA,EAAU,IAPW;EAQrBC,MAAA,EAAQ,IARa;EASrBC,YAAA,EAAc,KATO;EAUrBC,cAAA,EAAgB;AAVK,CAAvB;AAaA,MAAMC,mBAAA,GAAsB;EAC1BJ,QAAA,EAAU,SADgB;EAE1BK,QAAA,EAAU,SAFgB;EAG1BC,QAAA,EAAU,SAHgB;EAI1BC,SAAA,EAAW,SAJe;EAK1BC,QAAA,EAAU,SALgB;EAM1BC,aAAA,EAAe,SANW;EAO1BC,KAAA,EAAO,SAPmB;EAQ1BC,UAAA,EAAY,SARc;EAS1BC,KAAA,EAAO,SATmB;EAU1BC,IAAA,EAAM,SAVoB;EAW1BC,IAAA,EAAM,SAXoB;EAY1BC,UAAA,EAAY,SAZc;EAa1BC,WAAA,EAAa,SAba;EAc1BC,eAAA,EAAiB,SAdS;EAe1BC,WAAA,EAAa,SAfa;EAgB1BC,IAAA,EAAM,SAhBoB;EAiB1BC,QAAA,EAAU,SAjBgB;EAkB1BC,cAAA,EAAgB,SAlBU;EAmB1BC,iBAAA,EAAmB;AAnBO,CAA5B;AAsBA,MAAMp3F,yBAAA,GAA4B;EAChCqI,KAAA,EAAO,CADyB;EAEhCC,MAAA,EAAQ,CAFwB;EAGhCC,OAAA,EAAS,CAHuB;EAIhCC,KAAA,EAAO,CAJyB;EAKhCvE,SAAA,EAAW;AALqB,CAAlC;AAQA,MAAMozF,yBAAA,GAA4B;EAChCC,CAAA,EAAG,aAD6B;EAEhCC,CAAA,EAAG,YAF6B;EAGhCC,CAAA,EAAG,YAH6B;EAIhCC,CAAA,EAAG,UAJ6B;EAKhCC,EAAA,EAAI,OAL4B;EAMhCC,EAAA,EAAI,MAN4B;EAOhCC,EAAA,EAAI,UAP4B;EAQhCC,EAAA,EAAI,WAR4B;EAShCC,EAAA,EAAI,aAT4B;EAUhCzN,EAAA,EAAI,eAV4B;EAWhC0N,CAAA,EAAG,WAX6B;EAYhCC,CAAA,EAAG,QAZ6B;EAahCC,CAAA,EAAG,UAb6B;EAchCC,CAAA,EAAG;AAd6B,CAAlC;AAiBA,MAAMC,uBAAA,GAA0B;EAC9BC,EAAA,EAAI,WAD0B;EAE9BC,EAAA,EAAI,UAF0B;EAG9BC,EAAA,EAAI,SAH0B;EAI9BC,EAAA,EAAI,WAJ0B;EAK9BC,EAAA,EAAI;AAL0B,CAAhC;AAQA,MAAMC,mBAAA,GAAsB;EAC1BC,CAAA,EAAG,UADuB;EAE1BR,CAAA,EAAG;AAFuB,CAA5B;AAKA,MAAM1I,cAAA,GAAiB;EACrBmJ,MAAA,EAAQ,CADa;EAErBC,QAAA,EAAU,CAFW;EAGrBC,KAAA,EAAO;AAHc,CAAvB;AAMA,MAAM15D,mBAAA,GAAsB;EAC1BiB,IAAA,EAAM,CADoB;EAE1BD,MAAA,EAAQ;AAFkB,CAA5B;AAMA,MAAMiM,GAAA,GAAM;EAKVqP,UAAA,EAAY,CALF;EAMVmC,YAAA,EAAc,CANJ;EAOVC,UAAA,EAAY,CAPF;EAQVC,WAAA,EAAa,CARH;EASVC,aAAA,EAAe,CATL;EAUVE,OAAA,EAAS,CAVC;EAWVG,kBAAA,EAAoB,CAXV;EAYVC,WAAA,EAAa,CAZH;EAaVE,SAAA,EAAW,CAbD;EAcV3U,IAAA,EAAM,EAdI;EAeVwD,OAAA,EAAS,EAfC;EAgBVxb,SAAA,EAAW,EAhBD;EAiBVkc,MAAA,EAAQ,EAjBE;EAkBVE,MAAA,EAAQ,EAlBE;EAmBV6R,OAAA,EAAS,EAnBC;EAoBVC,QAAA,EAAU,EApBA;EAqBVC,QAAA,EAAU,EArBA;EAsBV1R,SAAA,EAAW,EAtBD;EAuBVqR,SAAA,EAAW,EAvBD;EAwBVM,MAAA,EAAQ,EAxBE;EAyBVG,WAAA,EAAa,EAzBH;EA0BV3c,IAAA,EAAM,EA1BI;EA2BV6c,MAAA,EAAQ,EA3BE;EA4BVC,UAAA,EAAY,EA5BF;EA6BVC,YAAA,EAAc,EA7BJ;EA8BVC,eAAA,EAAiB,EA9BP;EA+BVC,iBAAA,EAAmB,EA/BT;EAgCVrW,OAAA,EAAS,EAhCC;EAiCV/I,IAAA,EAAM,EAjCI;EAkCVqf,MAAA,EAAQ,EAlCE;EAmCVC,SAAA,EAAW,EAnCD;EAoCVC,OAAA,EAAS,EApCC;EAqCVI,cAAA,EAAgB,EArCN;EAsCVE,cAAA,EAAgB,EAtCN;EAuCVC,SAAA,EAAW,EAvCD;EAwCVC,UAAA,EAAY,EAxCF;EAyCV3C,OAAA,EAAS,EAzCC;EA0CVwD,oBAAA,EAAsB,EA1CZ;EA2CVC,WAAA,EAAa,EA3CH;EA4CVE,QAAA,EAAU,EA5CA;EA6CVC,kBAAA,EAAoB,EA7CV;EA8CVC,aAAA,EAAe,EA9CL;EA+CVC,QAAA,EAAU,EA/CA;EAgDVc,QAAA,EAAU,EAhDA;EAiDVy1C,cAAA,EAAgB,EAjDN;EAkDVC,gBAAA,EAAkB,EAlDR;EAmDVC,0BAAA,EAA4B,EAnDlB;EAoDVrzC,YAAA,EAAc,EApDJ;EAqDVG,qBAAA,EAAuB,EArDb;EAsDVmzC,mBAAA,EAAqB,EAtDX;EAuDVC,iBAAA,EAAmB,EAvDT;EAwDVC,cAAA,EAAgB,EAxDN;EAyDV9yC,eAAA,EAAiB,EAzDP;EA0DV+yC,YAAA,EAAc,EA1DJ;EA2DV7yC,aAAA,EAAe,EA3DL;EA4DV8yC,aAAA,EAAe,EA5DL;EA6DVC,WAAA,EAAa,EA7DH;EA8DV9yC,iBAAA,EAAmB,EA9DT;EA+DVC,eAAA,EAAiB,EA/DP;EAgEV8yC,kBAAA,EAAoB,EAhEV;EAiEVC,gBAAA,EAAkB,EAjER;EAkEV9yC,WAAA,EAAa,EAlEH;EAmEVE,gBAAA,EAAkB,EAnER;EAoEVC,cAAA,EAAgB,EApEN;EAqEV4yC,cAAA,EAAgB,EArEN;EAsEVC,YAAA,EAAc,EAtEJ;EAuEVrwC,SAAA,EAAW,EAvED;EAwEVE,cAAA,EAAgB,EAxEN;EAyEVC,kBAAA,EAAoB,EAzEV;EA0EVE,uBAAA,EAAyB,EA1Ef;EA2EVE,gBAAA,EAAkB,EA3ER;EA4EVC,WAAA,EAAa,EA5EH;EA6EVC,SAAA,EAAW,EA7ED;EA8EVhD,qBAAA,EAAuB,EA9Eb;EA+EVC,mBAAA,EAAqB,EA/EX;EAgFVC,UAAA,EAAY,EAhFF;EAiFVS,QAAA,EAAU,EAjFA;EAoFVE,eAAA,EAAiB,EApFP;EAqFVK,aAAA,EAAe,EArFL;EAuFVC,qBAAA,EAAuB,EAvFb;EAwFVO,0BAAA,EAA4B,EAxFlB;EAyFVE,iBAAA,EAAmB,EAzFT;EA0FVC,uBAAA,EAAyB,EA1Ff;EA2FVI,4BAAA,EAA8B,EA3FpB;EA4FVH,uBAAA,EAAyB,EA5Ff;EA6FVT,2BAAA,EAA6B,EA7FnB;EA8FViB,wBAAA,EAA0B,EA9FhB;EA+FVjK,aAAA,EAAe;AA/FL,CAAZ;AAkGA,MAAMmwC,iBAAA,GAAoB;EACxBqK,aAAA,EAAe,CADS;EAExBC,kBAAA,EAAoB;AAFI,CAA1B;AAKA,IAAI1yE,SAAA,GAAYsoE,cAAA,CAAeoJ,QAA/B;AAEA,SAASj1E,iBAATA,CAA2Bk2E,KAA3B,EAAkC;EAChC,IAAI/yE,MAAA,CAAOC,SAAP,CAAiB8yE,KAAjB,CAAJ,EAA6B;IAC3B3yE,SAAA,GAAY2yE,KAAZ;EAD2B;AADG;AAMlC,SAAS52E,iBAATA,CAAA,EAA6B;EAC3B,OAAOiE,SAAP;AAD2B;AAO7B,SAAShE,IAATA,CAAc8sC,GAAd,EAAmB;EACjB,IAAI9oC,SAAA,IAAasoE,cAAA,CAAeqJ,KAAhC,EAAuC;IACrCxnC,OAAA,CAAQC,GAAR,CAAa,SAAQtB,GAAT,EAAZ;EADqC;AADtB;AAOnB,SAASvvD,IAATA,CAAcuvD,GAAd,EAAmB;EACjB,IAAI9oC,SAAA,IAAasoE,cAAA,CAAeoJ,QAAhC,EAA0C;IACxCvnC,OAAA,CAAQC,GAAR,CAAa,YAAWtB,GAAZ,EAAZ;EADwC;AADzB;AAMnB,SAASzvD,WAATA,CAAqByvD,GAArB,EAA0B;EACxB,MAAM,IAAI/pC,KAAJ,CAAU+pC,GAAV,CAAN;AADwB;AAI1B,SAAShtC,MAATA,CAAgB82E,IAAhB,EAAsB9pC,GAAtB,EAA2B;EACzB,IAAI,CAAC8pC,IAAL,EAAW;IACTv5F,WAAA,CAAYyvD,GAAZ;EADS;AADc;AAO3B,SAAS+pC,gBAATA,CAA0BtqF,GAA1B,EAA+B;EAC7B,QAAQA,GAAA,EAAKyhD,QAAb;IACE,KAAK,OAAL;IACA,KAAK,QAAL;IACA,KAAK,MAAL;IACA,KAAK,SAAL;IACA,KAAK,MAAL;MACE,OAAO,IAAP;IACF;MACE,OAAO,KAAP;EARJ;AAD6B;AAqB/B,SAASk+B,sBAATA,CAAgC3/E,GAAhC,EAAqCwZ,OAAA,GAAU,IAA/C,EAAqD5Z,OAAA,GAAU,IAA/D,EAAqE;EACnE,IAAI,CAACI,GAAL,EAAU;IACR,OAAO,IAAP;EADQ;EAGV,IAAI;IACF,IAAIJ,OAAA,IAAW,OAAOI,GAAP,KAAe,QAA9B,EAAwC;MAEtC,IAAIJ,OAAA,CAAQ2qF,kBAAR,IAA8BvqF,GAAA,CAAIkrC,UAAJ,CAAe,MAAf,CAAlC,EAA0D;QACxD,MAAMs/C,IAAA,GAAOxqF,GAAA,CAAIsI,KAAJ,CAAU,KAAV,CAAb;QAGA,IAAIkiF,IAAA,EAAM9tF,MAAN,IAAgB,CAApB,EAAuB;UACrBsD,GAAA,GAAO,UAASA,GAAV,EAAN;QADqB;MAJiC;MAW1D,IAAIJ,OAAA,CAAQ6qF,kBAAZ,EAAgC;QAC9B,IAAI;UACFzqF,GAAA,GAAM0qF,kBAAA,CAAmB1qF,GAAnB,CAAN;QADE,CAAJ,CAEE,MAAM;MAHsB;IAbM;IAoBxC,MAAM2qF,WAAA,GAAcnxE,OAAA,GAAU,IAAIjD,GAAJ,CAAQvW,GAAR,EAAawZ,OAAb,CAAV,GAAkC,IAAIjD,GAAJ,CAAQvW,GAAR,CAAtD;IACA,IAAIsqF,gBAAA,CAAiBK,WAAjB,CAAJ,EAAmC;MACjC,OAAOA,WAAP;IADiC;EAtBjC,CAAJ,CAyBE,MAAM;EAGR,OAAO,IAAP;AAhCmE;AAmCrE,SAAS95F,MAATA,CAAgBuhB,GAAhB,EAAqB++D,IAArB,EAA2BxuE,KAA3B,EAAkCioF,eAAA,GAAkB,KAApD,EAA2D;EAOzDjvF,MAAA,CAAOkvF,cAAP,CAAsBz4E,GAAtB,EAA2B++D,IAA3B,EAAiC;IAC/BxuE,KAD+B;IAE/BmoF,UAAA,EAAY,CAACF,eAFkB;IAG/BG,YAAA,EAAc,IAHiB;IAI/BC,QAAA,EAAU;EAJqB,CAAjC;EAMA,OAAOroF,KAAP;AAbyD;AAmB3D,MAAMw4C,aAAA,GAAiB,SAAS8vC,oBAATA,CAAA,EAAgC;EAErD,SAAS9vC,aAATA,CAAuB10B,OAAvB,EAAgC/qB,IAAhC,EAAsC;IACpC,IAAI,KAAKtG,WAAL,KAAqB+lD,aAAzB,EAAwC;MACtCrqD,WAAA,CAAY,kCAAZ;IADsC;IAGxC,KAAK21B,OAAL,GAAeA,OAAf;IACA,KAAK/qB,IAAL,GAAYA,IAAZ;EALoC;EAOtCy/C,aAAA,CAAc5wC,SAAd,GAA0B,IAAIiM,KAAJ,EAA1B;EACA2kC,aAAA,CAAc/lD,WAAd,GAA4B+lD,aAA5B;EAEA,OAAOA,aAAP;AAZqD,CAAjC,EAAtB;AAeA,MAAMpnC,iBAAN,SAAgConC,aAAhC,CAA8C;EAC5C/lD,YAAYmrD,GAAZ,EAAiBp0B,IAAjB,EAAuB;IACrB,MAAMo0B,GAAN,EAAW,mBAAX;IACA,KAAKp0B,IAAL,GAAYA,IAAZ;EAFqB;AADqB;AAO9C,MAAM9X,qBAAN,SAAoC8mC,aAApC,CAAkD;EAChD/lD,YAAYmrD,GAAZ,EAAiBl0B,OAAjB,EAA0B;IACxB,MAAMk0B,GAAN,EAAW,uBAAX;IACA,KAAKl0B,OAAL,GAAeA,OAAf;EAFwB;AADsB;AAOlD,MAAM3Y,mBAAN,SAAkCynC,aAAlC,CAAgD;EAC9C/lD,YAAYmrD,GAAZ,EAAiB;IACf,MAAMA,GAAN,EAAW,qBAAX;EADe;AAD6B;AAMhD,MAAMzsC,mBAAN,SAAkCqnC,aAAlC,CAAgD;EAC9C/lD,YAAYmrD,GAAZ,EAAiB;IACf,MAAMA,GAAN,EAAW,qBAAX;EADe;AAD6B;AAMhD,MAAMnsC,2BAAN,SAA0C+mC,aAA1C,CAAwD;EACtD/lD,YAAYmrD,GAAZ,EAAiBn0B,MAAjB,EAAyB;IACvB,MAAMm0B,GAAN,EAAW,6BAAX;IACA,KAAKn0B,MAAL,GAAcA,MAAd;EAFuB;AAD6B;AAUxD,MAAM6E,WAAN,SAA0BkqB,aAA1B,CAAwC;EACtC/lD,YAAYmrD,GAAZ,EAAiB;IACf,MAAMA,GAAN,EAAW,aAAX;EADe;AADqB;AASxC,MAAMltC,cAAN,SAA6B8nC,aAA7B,CAA2C;EACzC/lD,YAAYmrD,GAAZ,EAAiB;IACf,MAAMA,GAAN,EAAW,gBAAX;EADe;AADwB;AAM3C,SAASssB,aAATA,CAAuBh4C,KAAvB,EAA8B;EAC5B,IAAI,OAAOA,KAAP,KAAiB,QAAjB,IAA6BA,KAAA,EAAOn4B,MAAP,KAAkB+K,SAAnD,EAA8D;IAC5D3W,WAAA,CAAY,oCAAZ;EAD4D;EAG9D,MAAM4L,MAAA,GAASm4B,KAAA,CAAMn4B,MAArB;EACA,MAAMwuF,kBAAA,GAAqB,IAA3B;EACA,IAAIxuF,MAAA,GAASwuF,kBAAb,EAAiC;IAC/B,OAAOxV,MAAA,CAAOC,YAAP,CAAoB1pC,KAApB,CAA0B,IAA1B,EAAgCpX,KAAhC,CAAP;EAD+B;EAGjC,MAAMs2D,MAAA,GAAS,EAAf;EACA,KAAK,IAAIrgF,CAAA,GAAI,CAAR,EAAWA,CAAA,GAAIpO,MAApB,EAA4BoO,CAAA,IAAKogF,kBAAjC,EAAqD;IACnD,MAAME,QAAA,GAAWl9F,IAAA,CAAKG,GAAL,CAASyc,CAAA,GAAIogF,kBAAb,EAAiCxuF,MAAjC,CAAjB;IACA,MAAM0gB,KAAA,GAAQyX,KAAA,CAAMoR,QAAN,CAAen7B,CAAf,EAAkBsgF,QAAlB,CAAd;IACAD,MAAA,CAAO7tF,IAAP,CAAYo4E,MAAA,CAAOC,YAAP,CAAoB1pC,KAApB,CAA0B,IAA1B,EAAgC7uB,KAAhC,CAAZ;EAHmD;EAKrD,OAAO+tE,MAAA,CAAOt7F,IAAP,CAAY,EAAZ,CAAP;AAf4B;AAkB9B,SAASskB,aAATA,CAAuBxd,GAAvB,EAA4B;EAC1B,IAAI,OAAOA,GAAP,KAAe,QAAnB,EAA6B;IAC3B7F,WAAA,CAAY,oCAAZ;EAD2B;EAG7B,MAAM4L,MAAA,GAAS/F,GAAA,CAAI+F,MAAnB;EACA,MAAMm4B,KAAA,GAAQ,IAAI7Y,UAAJ,CAAetf,MAAf,CAAd;EACA,KAAK,IAAIoO,CAAA,GAAI,CAAR,EAAWA,CAAA,GAAIpO,MAApB,EAA4B,EAAEoO,CAA9B,EAAiC;IAC/B+pB,KAAA,CAAM/pB,CAAN,IAAWnU,GAAA,CAAIw4E,UAAJ,CAAerkE,CAAf,IAAoB,IAA/B;EAD+B;EAGjC,OAAO+pB,KAAP;AAT0B;AAY5B,SAASi4C,QAATA,CAAkBnqE,KAAlB,EAAyB;EAOvB,OAAO+yE,MAAA,CAAOC,YAAP,CACJhzE,KAAA,IAAS,EAAV,GAAgB,IADX,EAEJA,KAAA,IAAS,EAAV,GAAgB,IAFX,EAGJA,KAAA,IAAS,CAAV,GAAe,IAHV,EAILA,KAAA,GAAQ,IAJH,CAAP;AAPuB;AAezB,SAAS0oF,UAATA,CAAoBj5E,GAApB,EAAyB;EACvB,OAAOzW,MAAA,CAAOC,IAAP,CAAYwW,GAAZ,EAAiB1V,MAAxB;AADuB;AAMzB,SAAS4U,aAATA,CAAuB3hB,GAAvB,EAA4B;EAC1B,MAAMyiB,GAAA,GAAMzW,MAAA,CAAO3J,MAAP,CAAc,IAAd,CAAZ;EACA,WAAW,CAACqU,GAAD,EAAM1D,KAAN,CAAX,IAA2BhT,GAA3B,EAAgC;IAC9ByiB,GAAA,CAAI/L,GAAJ,IAAW1D,KAAX;EAD8B;EAGhC,OAAOyP,GAAP;AAL0B;AAS5B,SAASqpB,cAATA,CAAA,EAA0B;EACxB,MAAM6vD,OAAA,GAAU,IAAItvE,UAAJ,CAAe,CAAf,CAAhB;EACAsvE,OAAA,CAAQ,CAAR,IAAa,CAAb;EACA,MAAMC,MAAA,GAAS,IAAIxvD,WAAJ,CAAgBuvD,OAAA,CAAQ1vE,MAAxB,EAAgC,CAAhC,EAAmC,CAAnC,CAAf;EACA,OAAO2vE,MAAA,CAAO,CAAP,MAAc,CAArB;AAJwB;AAQ1B,SAASpzE,eAATA,CAAA,EAA2B;EACzB,IAAI;IACF,IAAIq4D,QAAJ,CAAa,EAAb;IACA,OAAO,IAAP;EAFE,CAAJ,CAGE,MAAM;IACN,OAAO,KAAP;EADM;AAJiB;AAS3B,MAAM7/E,WAAN,CAAkB;EAChB,WAAW8qC,cAAXA,CAAA,EAA4B;IAC1B,OAAO5qC,MAAA,CAAO,IAAP,EAAa,gBAAb,EAA+B4qC,cAAA,EAA/B,CAAP;EAD0B;EAI5B,WAAWtjB,eAAXA,CAAA,EAA6B;IAC3B,OAAOtnB,MAAA,CAAO,IAAP,EAAa,iBAAb,EAAgCsnB,eAAA,EAAhC,CAAP;EAD2B;EAI7B,WAAWC,0BAAXA,CAAA,EAAwC;IACtC,OAAOvnB,MAAA,CACL,IADK,EAEL,4BAFK,EAGL,OAAO6kE,eAAP,KAA2B,WAHtB,CAAP;EADsC;EAQxC,WAAWhyD,QAAXA,CAAA,EAAsB;IACpB,IAEG,OAAOirE,SAAP,KAAqB,WAArB,IACC,OAAOA,SAAA,EAAWjrE,QAAlB,KAA+B,QAHnC,EAIE;MACA,OAAO7S,MAAA,CAAO,IAAP,EAAa,UAAb,EAAyB;QAC9B8S,KAAA,EAAOgrE,SAAA,CAAUjrE,QAAV,CAAmBS,QAAnB,CAA4B,KAA5B;MADuB,CAAzB,CAAP;IADA;IAKF,OAAOtT,MAAA,CAAO,IAAP,EAAa,UAAb,EAAyB;MAAE8S,KAAA,EAAO;IAAT,CAAzB,CAAP;EAVoB;EAatB,WAAW4/C,mBAAXA,CAAA,EAAiC;IAC/B,OAAO1yD,MAAA,CACL,IADK,EAEL,qBAFK,EAGL6nB,UAAA,CAAW5L,GAAX,EAAgBC,QAAhB,GAA2B,0BAA3B,CAHK,CAAP;EAD+B;AA9BjB;AAuClB,MAAMy+E,UAAA,GAAa,CAAC,GAAGvsF,KAAA,CAAM,GAAN,EAAWrD,IAAX,EAAJ,EAAuBjM,GAAvB,CAA2B1B,CAAA,IAC5CA,CAAA,CAAEK,QAAF,CAAW,EAAX,EAAeC,QAAf,CAAwB,CAAxB,EAA2B,GAA3B,CADiB,CAAnB;AAIA,MAAMwC,IAAN,CAAW;EACT,OAAOmI,YAAPA,CAAoB3J,CAApB,EAAuBN,CAAvB,EAA0BO,CAA1B,EAA6B;IAC3B,OAAQ,IAAGg8F,UAAA,CAAWj8F,CAAX,CAAJ,GAAoBi8F,UAAA,CAAWv8F,CAAX,CAApB,GAAoCu8F,UAAA,CAAWh8F,CAAX,CAApC,EAAP;EAD2B;EAO7B,OAAO80C,WAAPA,CAAmBniB,SAAnB,EAA8BkiB,MAA9B,EAAsC;IACpC,IAAIonD,IAAJ;IACA,IAAItpE,SAAA,CAAU,CAAV,CAAJ,EAAkB;MAChB,IAAIA,SAAA,CAAU,CAAV,IAAe,CAAnB,EAAsB;QACpBspE,IAAA,GAAOpnD,MAAA,CAAO,CAAP,CAAP;QACAA,MAAA,CAAO,CAAP,IAAYA,MAAA,CAAO,CAAP,CAAZ;QACAA,MAAA,CAAO,CAAP,IAAYonD,IAAZ;MAHoB;MAKtBpnD,MAAA,CAAO,CAAP,KAAaliB,SAAA,CAAU,CAAV,CAAb;MACAkiB,MAAA,CAAO,CAAP,KAAaliB,SAAA,CAAU,CAAV,CAAb;MAEA,IAAIA,SAAA,CAAU,CAAV,IAAe,CAAnB,EAAsB;QACpBspE,IAAA,GAAOpnD,MAAA,CAAO,CAAP,CAAP;QACAA,MAAA,CAAO,CAAP,IAAYA,MAAA,CAAO,CAAP,CAAZ;QACAA,MAAA,CAAO,CAAP,IAAYonD,IAAZ;MAHoB;MAKtBpnD,MAAA,CAAO,CAAP,KAAaliB,SAAA,CAAU,CAAV,CAAb;MACAkiB,MAAA,CAAO,CAAP,KAAaliB,SAAA,CAAU,CAAV,CAAb;IAfgB,CAAlB,MAgBO;MACLspE,IAAA,GAAOpnD,MAAA,CAAO,CAAP,CAAP;MACAA,MAAA,CAAO,CAAP,IAAYA,MAAA,CAAO,CAAP,CAAZ;MACAA,MAAA,CAAO,CAAP,IAAYonD,IAAZ;MACAA,IAAA,GAAOpnD,MAAA,CAAO,CAAP,CAAP;MACAA,MAAA,CAAO,CAAP,IAAYA,MAAA,CAAO,CAAP,CAAZ;MACAA,MAAA,CAAO,CAAP,IAAYonD,IAAZ;MAEA,IAAItpE,SAAA,CAAU,CAAV,IAAe,CAAnB,EAAsB;QACpBspE,IAAA,GAAOpnD,MAAA,CAAO,CAAP,CAAP;QACAA,MAAA,CAAO,CAAP,IAAYA,MAAA,CAAO,CAAP,CAAZ;QACAA,MAAA,CAAO,CAAP,IAAYonD,IAAZ;MAHoB;MAKtBpnD,MAAA,CAAO,CAAP,KAAaliB,SAAA,CAAU,CAAV,CAAb;MACAkiB,MAAA,CAAO,CAAP,KAAaliB,SAAA,CAAU,CAAV,CAAb;MAEA,IAAIA,SAAA,CAAU,CAAV,IAAe,CAAnB,EAAsB;QACpBspE,IAAA,GAAOpnD,MAAA,CAAO,CAAP,CAAP;QACAA,MAAA,CAAO,CAAP,IAAYA,MAAA,CAAO,CAAP,CAAZ;QACAA,MAAA,CAAO,CAAP,IAAYonD,IAAZ;MAHoB;MAKtBpnD,MAAA,CAAO,CAAP,KAAaliB,SAAA,CAAU,CAAV,CAAb;MACAkiB,MAAA,CAAO,CAAP,KAAaliB,SAAA,CAAU,CAAV,CAAb;IAtBK;IAwBPkiB,MAAA,CAAO,CAAP,KAAaliB,SAAA,CAAU,CAAV,CAAb;IACAkiB,MAAA,CAAO,CAAP,KAAaliB,SAAA,CAAU,CAAV,CAAb;IACAkiB,MAAA,CAAO,CAAP,KAAaliB,SAAA,CAAU,CAAV,CAAb;IACAkiB,MAAA,CAAO,CAAP,KAAaliB,SAAA,CAAU,CAAV,CAAb;EA7CoC;EAiDtC,OAAOA,SAAPA,CAAiBupE,EAAjB,EAAqBC,EAArB,EAAyB;IACvB,OAAO,CACLD,EAAA,CAAG,CAAH,IAAQC,EAAA,CAAG,CAAH,CAAR,GAAgBD,EAAA,CAAG,CAAH,IAAQC,EAAA,CAAG,CAAH,CADnB,EAELD,EAAA,CAAG,CAAH,IAAQC,EAAA,CAAG,CAAH,CAAR,GAAgBD,EAAA,CAAG,CAAH,IAAQC,EAAA,CAAG,CAAH,CAFnB,EAGLD,EAAA,CAAG,CAAH,IAAQC,EAAA,CAAG,CAAH,CAAR,GAAgBD,EAAA,CAAG,CAAH,IAAQC,EAAA,CAAG,CAAH,CAHnB,EAILD,EAAA,CAAG,CAAH,IAAQC,EAAA,CAAG,CAAH,CAAR,GAAgBD,EAAA,CAAG,CAAH,IAAQC,EAAA,CAAG,CAAH,CAJnB,EAKLD,EAAA,CAAG,CAAH,IAAQC,EAAA,CAAG,CAAH,CAAR,GAAgBD,EAAA,CAAG,CAAH,IAAQC,EAAA,CAAG,CAAH,CAAxB,GAAgCD,EAAA,CAAG,CAAH,CAL3B,EAMLA,EAAA,CAAG,CAAH,IAAQC,EAAA,CAAG,CAAH,CAAR,GAAgBD,EAAA,CAAG,CAAH,IAAQC,EAAA,CAAG,CAAH,CAAxB,GAAgCD,EAAA,CAAG,CAAH,CAN3B,CAAP;EADuB;EAYzB,OAAO1nD,cAAPA,CAAsB71B,CAAtB,EAAyBrf,CAAzB,EAA4B;IAC1B,MAAM88F,EAAA,GAAKz9E,CAAA,CAAE,CAAF,IAAOrf,CAAA,CAAE,CAAF,CAAP,GAAcqf,CAAA,CAAE,CAAF,IAAOrf,CAAA,CAAE,CAAF,CAArB,GAA4BA,CAAA,CAAE,CAAF,CAAvC;IACA,MAAM+8F,EAAA,GAAK19E,CAAA,CAAE,CAAF,IAAOrf,CAAA,CAAE,CAAF,CAAP,GAAcqf,CAAA,CAAE,CAAF,IAAOrf,CAAA,CAAE,CAAF,CAArB,GAA4BA,CAAA,CAAE,CAAF,CAAvC;IACA,OAAO,CAAC88F,EAAD,EAAKC,EAAL,CAAP;EAH0B;EAM5B,OAAOvrC,qBAAPA,CAA6BnyC,CAA7B,EAAgCrf,CAAhC,EAAmC;IACjC,MAAMswC,CAAA,GAAItwC,CAAA,CAAE,CAAF,IAAOA,CAAA,CAAE,CAAF,CAAP,GAAcA,CAAA,CAAE,CAAF,IAAOA,CAAA,CAAE,CAAF,CAA/B;IACA,MAAM88F,EAAA,GAAM,CAAAz9E,CAAA,CAAE,CAAF,IAAOrf,CAAA,CAAE,CAAF,CAAP,GAAcqf,CAAA,CAAE,CAAF,IAAOrf,CAAA,CAAE,CAAF,CAArB,GAA4BA,CAAA,CAAE,CAAF,IAAOA,CAAA,CAAE,CAAF,CAAnC,GAA0CA,CAAA,CAAE,CAAF,IAAOA,CAAA,CAAE,CAAF,CAAjD,IAAyDswC,CAArE;IACA,MAAMysD,EAAA,GAAM,EAAC19E,CAAA,CAAE,CAAF,CAAD,GAAQrf,CAAA,CAAE,CAAF,CAAR,GAAeqf,CAAA,CAAE,CAAF,IAAOrf,CAAA,CAAE,CAAF,CAAtB,GAA6BA,CAAA,CAAE,CAAF,IAAOA,CAAA,CAAE,CAAF,CAApC,GAA2CA,CAAA,CAAE,CAAF,IAAOA,CAAA,CAAE,CAAF,CAAlD,IAA0DswC,CAAtE;IACA,OAAO,CAACwsD,EAAD,EAAKC,EAAL,CAAP;EAJiC;EASnC,OAAOh+C,0BAAPA,CAAkCt+C,CAAlC,EAAqCT,CAArC,EAAwC;IACtC,MAAMulC,EAAA,GAAK,KAAK2P,cAAL,CAAoBz0C,CAApB,EAAuBT,CAAvB,CAAX;IACA,MAAMwlC,EAAA,GAAK,KAAK0P,cAAL,CAAoBz0C,CAAA,CAAEc,KAAF,CAAQ,CAAR,EAAW,CAAX,CAApB,EAAmCvB,CAAnC,CAAX;IACA,MAAMylC,EAAA,GAAK,KAAKyP,cAAL,CAAoB,CAACz0C,CAAA,CAAE,CAAF,CAAD,EAAOA,CAAA,CAAE,CAAF,CAAP,CAApB,EAAkCT,CAAlC,CAAX;IACA,MAAMq1C,EAAA,GAAK,KAAKH,cAAL,CAAoB,CAACz0C,CAAA,CAAE,CAAF,CAAD,EAAOA,CAAA,CAAE,CAAF,CAAP,CAApB,EAAkCT,CAAlC,CAAX;IACA,OAAO,CACLZ,IAAA,CAAKG,GAAL,CAASgmC,EAAA,CAAG,CAAH,CAAT,EAAgBC,EAAA,CAAG,CAAH,CAAhB,EAAuBC,EAAA,CAAG,CAAH,CAAvB,EAA8B4P,EAAA,CAAG,CAAH,CAA9B,CADK,EAELj2C,IAAA,CAAKG,GAAL,CAASgmC,EAAA,CAAG,CAAH,CAAT,EAAgBC,EAAA,CAAG,CAAH,CAAhB,EAAuBC,EAAA,CAAG,CAAH,CAAvB,EAA8B4P,EAAA,CAAG,CAAH,CAA9B,CAFK,EAGLj2C,IAAA,CAAKE,GAAL,CAASimC,EAAA,CAAG,CAAH,CAAT,EAAgBC,EAAA,CAAG,CAAH,CAAhB,EAAuBC,EAAA,CAAG,CAAH,CAAvB,EAA8B4P,EAAA,CAAG,CAAH,CAA9B,CAHK,EAILj2C,IAAA,CAAKE,GAAL,CAASimC,EAAA,CAAG,CAAH,CAAT,EAAgBC,EAAA,CAAG,CAAH,CAAhB,EAAuBC,EAAA,CAAG,CAAH,CAAvB,EAA8B4P,EAAA,CAAG,CAAH,CAA9B,CAJK,CAAP;EALsC;EAaxC,OAAO0I,gBAAPA,CAAwB/9C,CAAxB,EAA2B;IACzB,MAAMswC,CAAA,GAAItwC,CAAA,CAAE,CAAF,IAAOA,CAAA,CAAE,CAAF,CAAP,GAAcA,CAAA,CAAE,CAAF,IAAOA,CAAA,CAAE,CAAF,CAA/B;IACA,OAAO,CACLA,CAAA,CAAE,CAAF,IAAOswC,CADF,EAEL,CAACtwC,CAAA,CAAE,CAAF,CAAD,GAAQswC,CAFH,EAGL,CAACtwC,CAAA,CAAE,CAAF,CAAD,GAAQswC,CAHH,EAILtwC,CAAA,CAAE,CAAF,IAAOswC,CAJF,EAKJ,CAAAtwC,CAAA,CAAE,CAAF,IAAOA,CAAA,CAAE,CAAF,CAAP,GAAcA,CAAA,CAAE,CAAF,IAAOA,CAAA,CAAE,CAAF,CAArB,IAA6BswC,CALzB,EAMJ,CAAAtwC,CAAA,CAAE,CAAF,IAAOA,CAAA,CAAE,CAAF,CAAP,GAAcA,CAAA,CAAE,CAAF,IAAOA,CAAA,CAAE,CAAF,CAArB,IAA6BswC,CANzB,CAAP;EAFyB;EAe3B,OAAO9G,6BAAPA,CAAqCxpC,CAArC,EAAwC;IACtC,MAAMg9F,SAAA,GAAY,CAACh9F,CAAA,CAAE,CAAF,CAAD,EAAOA,CAAA,CAAE,CAAF,CAAP,EAAaA,CAAA,CAAE,CAAF,CAAb,EAAmBA,CAAA,CAAE,CAAF,CAAnB,CAAlB;IAGA,MAAMqwC,CAAA,GAAIrwC,CAAA,CAAE,CAAF,IAAOg9F,SAAA,CAAU,CAAV,CAAP,GAAsBh9F,CAAA,CAAE,CAAF,IAAOg9F,SAAA,CAAU,CAAV,CAAvC;IACA,MAAMt8F,CAAA,GAAIV,CAAA,CAAE,CAAF,IAAOg9F,SAAA,CAAU,CAAV,CAAP,GAAsBh9F,CAAA,CAAE,CAAF,IAAOg9F,SAAA,CAAU,CAAV,CAAvC;IACA,MAAMl9F,CAAA,GAAIE,CAAA,CAAE,CAAF,IAAOg9F,SAAA,CAAU,CAAV,CAAP,GAAsBh9F,CAAA,CAAE,CAAF,IAAOg9F,SAAA,CAAU,CAAV,CAAvC;IACA,MAAM1sD,CAAA,GAAItwC,CAAA,CAAE,CAAF,IAAOg9F,SAAA,CAAU,CAAV,CAAP,GAAsBh9F,CAAA,CAAE,CAAF,IAAOg9F,SAAA,CAAU,CAAV,CAAvC;IAGA,MAAMr6B,KAAA,GAAS,CAAAtyB,CAAA,GAAIC,CAAJ,IAAS,CAAxB;IACA,MAAMmjB,MAAA,GAASr0D,IAAA,CAAK69F,IAAL,CAAW,CAAA5sD,CAAA,GAAIC,CAAJ,KAAU,CAAX,GAAe,KAAKD,CAAA,GAAIC,CAAJ,GAAQxwC,CAAA,GAAIY,CAAZ,CAA9B,IAAgD,CAA/D;IACA,MAAMw8F,EAAA,GAAKv6B,KAAA,GAAQlP,MAAR,IAAkB,CAA7B;IACA,MAAM0pC,EAAA,GAAKx6B,KAAA,GAAQlP,MAAR,IAAkB,CAA7B;IAGA,OAAO,CAACr0D,IAAA,CAAK69F,IAAL,CAAUC,EAAV,CAAD,EAAgB99F,IAAA,CAAK69F,IAAL,CAAUE,EAAV,CAAhB,CAAP;EAhBsC;EAuBxC,OAAO/zF,aAAPA,CAAqBtG,IAArB,EAA2B;IACzB,MAAMrC,CAAA,GAAIqC,IAAA,CAAKvB,KAAL,CAAW,CAAX,CAAV;IACA,IAAIuB,IAAA,CAAK,CAAL,IAAUA,IAAA,CAAK,CAAL,CAAd,EAAuB;MACrBrC,CAAA,CAAE,CAAF,IAAOqC,IAAA,CAAK,CAAL,CAAP;MACArC,CAAA,CAAE,CAAF,IAAOqC,IAAA,CAAK,CAAL,CAAP;IAFqB;IAIvB,IAAIA,IAAA,CAAK,CAAL,IAAUA,IAAA,CAAK,CAAL,CAAd,EAAuB;MACrBrC,CAAA,CAAE,CAAF,IAAOqC,IAAA,CAAK,CAAL,CAAP;MACArC,CAAA,CAAE,CAAF,IAAOqC,IAAA,CAAK,CAAL,CAAP;IAFqB;IAIvB,OAAOrC,CAAP;EAVyB;EAgB3B,OAAOse,SAAPA,CAAiBq+E,KAAjB,EAAwBC,KAAxB,EAA+B;IAC7B,MAAMC,IAAA,GAAOl+F,IAAA,CAAKE,GAAL,CACXF,IAAA,CAAKG,GAAL,CAAS69F,KAAA,CAAM,CAAN,CAAT,EAAmBA,KAAA,CAAM,CAAN,CAAnB,CADW,EAEXh+F,IAAA,CAAKG,GAAL,CAAS89F,KAAA,CAAM,CAAN,CAAT,EAAmBA,KAAA,CAAM,CAAN,CAAnB,CAFW,CAAb;IAIA,MAAME,KAAA,GAAQn+F,IAAA,CAAKG,GAAL,CACZH,IAAA,CAAKE,GAAL,CAAS89F,KAAA,CAAM,CAAN,CAAT,EAAmBA,KAAA,CAAM,CAAN,CAAnB,CADY,EAEZh+F,IAAA,CAAKE,GAAL,CAAS+9F,KAAA,CAAM,CAAN,CAAT,EAAmBA,KAAA,CAAM,CAAN,CAAnB,CAFY,CAAd;IAIA,IAAIC,IAAA,GAAOC,KAAX,EAAkB;MAChB,OAAO,IAAP;IADgB;IAGlB,MAAMC,IAAA,GAAOp+F,IAAA,CAAKE,GAAL,CACXF,IAAA,CAAKG,GAAL,CAAS69F,KAAA,CAAM,CAAN,CAAT,EAAmBA,KAAA,CAAM,CAAN,CAAnB,CADW,EAEXh+F,IAAA,CAAKG,GAAL,CAAS89F,KAAA,CAAM,CAAN,CAAT,EAAmBA,KAAA,CAAM,CAAN,CAAnB,CAFW,CAAb;IAIA,MAAMI,KAAA,GAAQr+F,IAAA,CAAKG,GAAL,CACZH,IAAA,CAAKE,GAAL,CAAS89F,KAAA,CAAM,CAAN,CAAT,EAAmBA,KAAA,CAAM,CAAN,CAAnB,CADY,EAEZh+F,IAAA,CAAKE,GAAL,CAAS+9F,KAAA,CAAM,CAAN,CAAT,EAAmBA,KAAA,CAAM,CAAN,CAAnB,CAFY,CAAd;IAIA,IAAIG,IAAA,GAAOC,KAAX,EAAkB;MAChB,OAAO,IAAP;IADgB;IAIlB,OAAO,CAACH,IAAD,EAAOE,IAAP,EAAaD,KAAb,EAAoBE,KAApB,CAAP;EAxB6B;EA4B/B,OAAO9nD,iBAAPA,CAAyBpL,EAAzB,EAA6BC,EAA7B,EAAiCtE,EAAjC,EAAqCE,EAArC,EAAyCE,EAAzC,EAA6CC,EAA7C,EAAiDC,EAAjD,EAAqDC,EAArD,EAAyD;IACvD,MAAMi3D,OAAA,GAAU,EAAhB;MACE50C,MAAA,GAAS,CAAC,EAAD,EAAK,EAAL,CADX;IAEA,IAAIzY,CAAJ,EAAO3vC,CAAP,EAAUZ,CAAV,EAAa69F,CAAb,EAAgBC,EAAhB,EAAoBC,EAApB,EAAwBC,IAAxB,EAA8BC,QAA9B;IACA,KAAK,IAAI/hF,CAAA,GAAI,CAAR,EAAWA,CAAA,GAAI,CAApB,EAAuB,EAAEA,CAAzB,EAA4B;MAC1B,IAAIA,CAAA,KAAM,CAAV,EAAa;QACXtb,CAAA,GAAI,IAAI6pC,EAAJ,GAAS,KAAKrE,EAAd,GAAmB,IAAII,EAA3B;QACA+J,CAAA,GAAI,CAAC,CAAD,GAAK9F,EAAL,GAAU,IAAIrE,EAAd,GAAmB,IAAII,EAAvB,GAA4B,IAAIE,EAApC;QACA1mC,CAAA,GAAI,IAAIomC,EAAJ,GAAS,IAAIqE,EAAjB;MAHW,CAAb,MAIO;QACL7pC,CAAA,GAAI,IAAI8pC,EAAJ,GAAS,KAAKpE,EAAd,GAAmB,IAAIG,EAA3B;QACA8J,CAAA,GAAI,CAAC,CAAD,GAAK7F,EAAL,GAAU,IAAIpE,EAAd,GAAmB,IAAIG,EAAvB,GAA4B,IAAIE,EAApC;QACA3mC,CAAA,GAAI,IAAIsmC,EAAJ,GAAS,IAAIoE,EAAjB;MAHK;MAKP,IAAIprC,IAAA,CAAKwX,GAAL,CAASy5B,CAAT,IAAc,KAAlB,EAAyB;QACvB,IAAIjxC,IAAA,CAAKwX,GAAL,CAASlW,CAAT,IAAc,KAAlB,EAAyB;UACvB;QADuB;QAGzBi9F,CAAA,GAAI,CAAC79F,CAAD,GAAKY,CAAT;QACA,IAAI,IAAIi9F,CAAJ,IAASA,CAAA,GAAI,CAAjB,EAAoB;UAClBD,OAAA,CAAQlvF,IAAR,CAAamvF,CAAb;QADkB;QAGpB;MARuB;MAUzBG,IAAA,GAAOp9F,CAAA,GAAIA,CAAJ,GAAQ,IAAIZ,CAAJ,GAAQuwC,CAAvB;MACA0tD,QAAA,GAAW3+F,IAAA,CAAK69F,IAAL,CAAUa,IAAV,CAAX;MACA,IAAIA,IAAA,GAAO,CAAX,EAAc;QACZ;MADY;MAGdF,EAAA,GAAM,EAACl9F,CAAD,GAAKq9F,QAAL,KAAkB,IAAI1tD,CAAJ,CAAxB;MACA,IAAI,IAAIutD,EAAJ,IAAUA,EAAA,GAAK,CAAnB,EAAsB;QACpBF,OAAA,CAAQlvF,IAAR,CAAaovF,EAAb;MADoB;MAGtBC,EAAA,GAAM,EAACn9F,CAAD,GAAKq9F,QAAL,KAAkB,IAAI1tD,CAAJ,CAAxB;MACA,IAAI,IAAIwtD,EAAJ,IAAUA,EAAA,GAAK,CAAnB,EAAsB;QACpBH,OAAA,CAAQlvF,IAAR,CAAaqvF,EAAb;MADoB;IA9BI;IAmC5B,IAAI91D,CAAA,GAAI21D,OAAA,CAAQ9vF,MAAhB;MACEowF,EADF;IAEA,MAAMC,IAAA,GAAOl2D,CAAb;IACA,OAAOA,CAAA,EAAP,EAAY;MACV41D,CAAA,GAAID,OAAA,CAAQ31D,CAAR,CAAJ;MACAi2D,EAAA,GAAK,IAAIL,CAAT;MACA70C,MAAA,CAAO,CAAP,EAAU/gB,CAAV,IACEi2D,EAAA,GAAKA,EAAL,GAAUA,EAAV,GAAezzD,EAAf,GACA,IAAIyzD,EAAJ,GAASA,EAAT,GAAcL,CAAd,GAAkBz3D,EADlB,GAEA,IAAI83D,EAAJ,GAASL,CAAT,GAAaA,CAAb,GAAiBr3D,EAFjB,GAGAq3D,CAAA,GAAIA,CAAJ,GAAQA,CAAR,GAAYn3D,EAJd;MAKAsiB,MAAA,CAAO,CAAP,EAAU/gB,CAAV,IACEi2D,EAAA,GAAKA,EAAL,GAAUA,EAAV,GAAexzD,EAAf,GACA,IAAIwzD,EAAJ,GAASA,EAAT,GAAcL,CAAd,GAAkBv3D,EADlB,GAEA,IAAI43D,EAAJ,GAASL,CAAT,GAAaA,CAAb,GAAiBp3D,EAFjB,GAGAo3D,CAAA,GAAIA,CAAJ,GAAQA,CAAR,GAAYl3D,EAJd;IARU;IAeZqiB,MAAA,CAAO,CAAP,EAAUm1C,IAAV,IAAkB1zD,EAAlB;IACAue,MAAA,CAAO,CAAP,EAAUm1C,IAAV,IAAkBzzD,EAAlB;IACAse,MAAA,CAAO,CAAP,EAAUm1C,IAAA,GAAO,CAAjB,IAAsBz3D,EAAtB;IACAsiB,MAAA,CAAO,CAAP,EAAUm1C,IAAA,GAAO,CAAjB,IAAsBx3D,EAAtB;IACAqiB,MAAA,CAAO,CAAP,EAAUl7C,MAAV,GAAmBk7C,MAAA,CAAO,CAAP,EAAUl7C,MAAV,GAAmBqwF,IAAA,GAAO,CAA7C;IAEA,OAAO,CACL7+F,IAAA,CAAKG,GAAL,CAAS,GAAGupD,MAAA,CAAO,CAAP,CAAZ,CADK,EAEL1pD,IAAA,CAAKG,GAAL,CAAS,GAAGupD,MAAA,CAAO,CAAP,CAAZ,CAFK,EAGL1pD,IAAA,CAAKE,GAAL,CAAS,GAAGwpD,MAAA,CAAO,CAAP,CAAZ,CAHK,EAIL1pD,IAAA,CAAKE,GAAL,CAAS,GAAGwpD,MAAA,CAAO,CAAP,CAAZ,CAJK,CAAP;EA/DuD;AAnLhD;AA2PX,MAAMo1C,uBAAA,GAA0B,iDAC9B,CAD8B,EAC3B,CAD2B,EACxB,CADwB,EACrB,CADqB,EAClB,CADkB,EACf,CADe,EACZ,CADY,EACT,CADS,EACN,CADM,EACH,CADG,EACA,CADA,EACG,CADH,EACM,CADN,EACS,CADT,EACY,CADZ,EACe,CADf,EACkB,CADlB,EACqB,CADrB,EACwB,CADxB,EAC2B,CAD3B,EAC8B,CAD9B,EACiC,CADjC,EACoC,CADpC,EACuC,CADvC,EAC0C,KAD1C,EAE9B,KAF8B,EAEvB,KAFuB,EAEhB,KAFgB,EAET,KAFS,EAEF,KAFE,EAEK,KAFL,EAEY,KAFZ,EAEmB,CAFnB,EAEsB,CAFtB,EAEyB,CAFzB,EAE4B,CAF5B,EAE+B,CAF/B,EAEkC,CAFlC,EAEqC,CAFrC,EAEwC,CAFxC,EAE2C,CAF3C,EAE8C,CAF9C,EAG9B,CAH8B,EAG3B,CAH2B,EAGxB,CAHwB,EAGrB,CAHqB,EAGlB,CAHkB,EAGf,CAHe,EAGZ,CAHY,EAGT,CAHS,EAGN,CAHM,EAGH,CAHG,EAGA,CAHA,EAGG,CAHH,EAGM,CAHN,EAGS,CAHT,EAGY,CAHZ,EAGe,CAHf,EAGkB,CAHlB,EAGqB,CAHrB,EAGwB,CAHxB,EAG2B,CAH3B,EAG8B,CAH9B,EAGiC,CAHjC,EAGoC,CAHpC,EAGuC,CAHvC,EAG0C,CAH1C,EAG6C,CAH7C,EAI9B,CAJ8B,EAI3B,CAJ2B,EAIxB,CAJwB,EAIrB,CAJqB,EAIlB,CAJkB,EAIf,CAJe,EAIZ,CAJY,EAIT,CAJS,EAIN,CAJM,EAIH,CAJG,EAIA,CAJA,EAIG,CAJH,EAIM,CAJN,EAIS,CAJT,EAIY,CAJZ,EAIe,CAJf,EAIkB,CAJlB,EAIqB,CAJrB,EAIwB,CAJxB,EAI2B,CAJ3B,EAI8B,CAJ9B,EAIiC,CAJjC,EAIoC,CAJpC,EAIuC,CAJvC,EAI0C,CAJ1C,EAI6C,CAJ7C,EAK9B,CAL8B,EAK3B,CAL2B,EAKxB,CALwB,EAKrB,CALqB,EAKlB,CALkB,EAKf,CALe,EAKZ,CALY,EAKT,CALS,EAKN,CALM,EAKH,CALG,EAKA,CALA,EAKG,CALH,EAKM,CALN,EAKS,CALT,EAKY,CALZ,EAKe,CALf,EAKkB,CALlB,EAKqB,CALrB,EAKwB,CALxB,EAK2B,CAL3B,EAK8B,CAL9B,EAKiC,CALjC,EAKoC,CALpC,EAKuC,CALvC,EAK0C,CAL1C,EAK6C,CAL7C,EAM9B,CAN8B,EAM3B,CAN2B,EAMxB,CANwB,EAMrB,CANqB,EAMlB,CANkB,EAMf,CANe,EAMZ,CANY,EAMT,CANS,EAMN,MANM,EAME,MANF,EAMU,MANV,EAMkB,MANlB,EAM0B,MAN1B,EAMkC,MANlC,EAM0C,KAN1C,EAO9B,MAP8B,EAOtB,MAPsB,EAOd,MAPc,EAON,MAPM,EAOE,MAPF,EAOU,MAPV,EAOkB,MAPlB,EAO0B,MAP1B,EAOkC,MAPlC,EAQ9B,MAR8B,EAQtB,MARsB,EAQd,MARc,EAQN,MARM,EAQE,MARF,EAQU,KARV,EAQiB,KARjB,EAQwB,KARxB,EAQ+B,KAR/B,EAQsC,KARtC,EAS9B,KAT8B,EASvB,KATuB,EAShB,KATgB,EAST,KATS,EASF,KATE,EASK,CATL,EASQ,MATR,CAAhC;AAYA,SAASC,iBAATA,CAA2Bt2F,GAA3B,EAAgC;EAC9B,IAAIA,GAAA,CAAI,CAAJ,KAAU,MAAd,EAAsB;IACpB,IAAIg+E,QAAJ;IACA,IAAIh+E,GAAA,CAAI,CAAJ,MAAW,MAAX,IAAqBA,GAAA,CAAI,CAAJ,MAAW,MAApC,EAA4C;MAC1Cg+E,QAAA,GAAW,UAAX;IAD0C,CAA5C,MAEO,IAAIh+E,GAAA,CAAI,CAAJ,MAAW,MAAX,IAAqBA,GAAA,CAAI,CAAJ,MAAW,MAApC,EAA4C;MACjDg+E,QAAA,GAAW,UAAX;IADiD,CAA5C,MAEA,IAAIh+E,GAAA,CAAI,CAAJ,MAAW,MAAX,IAAqBA,GAAA,CAAI,CAAJ,MAAW,MAAhC,IAA0CA,GAAA,CAAI,CAAJ,MAAW,MAAzD,EAAiE;MACtEg+E,QAAA,GAAW,OAAX;IADsE;IAIxE,IAAIA,QAAJ,EAAc;MACZ,IAAI;QACF,MAAMC,OAAA,GAAU,IAAIC,WAAJ,CAAgBF,QAAhB,EAA0B;UAAEG,KAAA,EAAO;QAAT,CAA1B,CAAhB;QACA,MAAMl5D,MAAA,GAASzH,aAAA,CAAcxd,GAAd,CAAf;QACA,OAAOi+E,OAAA,CAAQ/R,MAAR,CAAejnD,MAAf,CAAP;MAHE,CAAJ,CAIE,OAAOW,EAAP,EAAW;QACXvrB,IAAA,CAAM,uBAAsBurB,EAAG,IAA/B;MADW;IALD;EAVM;EAqBtB,MAAM4uE,MAAA,GAAS,EAAf;EACA,KAAK,IAAIrgF,CAAA,GAAI,CAAR,EAAWwD,EAAA,GAAK3X,GAAA,CAAI+F,MAApB,EAA4BoO,CAAA,GAAIwD,EAArC,EAAyCxD,CAAA,EAAzC,EAA8C;IAC5C,MAAMqhB,IAAA,GAAO6gE,uBAAA,CAAwBr2F,GAAA,CAAIw4E,UAAJ,CAAerkE,CAAf,CAAxB,CAAb;IACAqgF,MAAA,CAAO7tF,IAAP,CAAY6uB,IAAA,GAAOupD,MAAA,CAAOC,YAAP,CAAoBxpD,IAApB,CAAP,GAAmCx1B,GAAA,CAAIu2F,MAAJ,CAAWpiF,CAAX,CAA/C;EAF4C;EAI9C,OAAOqgF,MAAA,CAAOt7F,IAAP,CAAY,EAAZ,CAAP;AA3B8B;AA8BhC,SAAS66F,kBAATA,CAA4B/zF,GAA5B,EAAiC;EAC/B,OAAOwqD,kBAAA,CAAmBgsC,MAAA,CAAOx2F,GAAP,CAAnB,CAAP;AAD+B;AAIjC,SAASy2F,kBAATA,CAA4Bz2F,GAA5B,EAAiC;EAC/B,OAAOw9E,QAAA,CAASkZ,kBAAA,CAAmB12F,GAAnB,CAAT,CAAP;AAD+B;AAIjC,SAASgd,aAATA,CAAuB25E,CAAvB,EAA0B;EACxB,OAAO,OAAOA,CAAP,KAAa,QAAb,IAAyBA,CAAA,EAAGrxE,UAAH,KAAkBxU,SAAlD;AADwB;AAI1B,SAAS8lF,YAATA,CAAsBC,IAAtB,EAA4BC,IAA5B,EAAkC;EAChC,IAAID,IAAA,CAAK9wF,MAAL,KAAgB+wF,IAAA,CAAK/wF,MAAzB,EAAiC;IAC/B,OAAO,KAAP;EAD+B;EAGjC,KAAK,IAAIoO,CAAA,GAAI,CAAR,EAAWwD,EAAA,GAAKk/E,IAAA,CAAK9wF,MAArB,EAA6BoO,CAAA,GAAIwD,EAAtC,EAA0CxD,CAAA,EAA1C,EAA+C;IAC7C,IAAI0iF,IAAA,CAAK1iF,CAAL,MAAY2iF,IAAA,CAAK3iF,CAAL,CAAhB,EAAyB;MACvB,OAAO,KAAP;IADuB;EADoB;EAK/C,OAAO,IAAP;AATgC;AAYlC,SAAS4iF,mBAATA,CAA6BvgF,IAAA,GAAO,IAAIy+B,IAAJ,EAApC,EAAgD;EAC9C,MAAMhwB,MAAA,GAAS,CACbzO,IAAA,CAAKwgF,cAAL,GAAsBr/F,QAAtB,EADa,EAEZ,CAAA6e,IAAA,CAAKygF,WAAL,KAAqB,CAArB,EAAwBt/F,QAAzB,GAAoCC,QAApC,CAA6C,CAA7C,EAAgD,GAAhD,CAFa,EAGb4e,IAAA,CAAK0gF,UAAL,GAAkBv/F,QAAlB,GAA6BC,QAA7B,CAAsC,CAAtC,EAAyC,GAAzC,CAHa,EAIb4e,IAAA,CAAK2gF,WAAL,GAAmBx/F,QAAnB,GAA8BC,QAA9B,CAAuC,CAAvC,EAA0C,GAA1C,CAJa,EAKb4e,IAAA,CAAK4gF,aAAL,GAAqBz/F,QAArB,GAAgCC,QAAhC,CAAyC,CAAzC,EAA4C,GAA5C,CALa,EAMb4e,IAAA,CAAK6gF,aAAL,GAAqB1/F,QAArB,GAAgCC,QAAhC,CAAyC,CAAzC,EAA4C,GAA5C,CANa,CAAf;EASA,OAAOqtB,MAAA,CAAO/rB,IAAP,CAAY,EAAZ,CAAP;AAV8C;AAahD,MAAMmkB,iBAAN,CAAwB;EACtB,CAAA0Z,OAAA,GAAW,KAAX;EAEAt4B,YAAA,EAAc;IAIZ,KAAKglB,OAAL,GAAe,IAAIM,OAAJ,CAAY,CAACC,OAAD,EAAUe,MAAV,KAAqB;MAI9C,KAAKf,OAAL,GAAexoB,IAAA,IAAQ;QACrB,KAAK,CAAAu7B,OAAL,GAAgB,IAAhB;QACA/S,OAAA,CAAQxoB,IAAR;MAFqB,CAAvB;MAQA,KAAKupB,MAAL,GAAcmI,MAAA,IAAU;QAItB,KAAK,CAAA6J,OAAL,GAAgB,IAAhB;QACAhS,MAAA,CAAOmI,MAAP;MALsB,CAAxB;IAZ8C,CAAjC,CAAf;EAJY;EA6Bd,IAAI6J,OAAJA,CAAA,EAAc;IACZ,OAAO,KAAK,CAAAA,OAAZ;EADY;AAhCQ;AAqCxB,IAAIugE,cAAA,GAAiB,IAArB;AACA,IAAIC,gBAAA,GAAmB,IAAvB;AACA,SAAStO,gBAATA,CAA0BjpF,GAA1B,EAA+B;EAC7B,IAAI,CAACs3F,cAAL,EAAqB;IAOnBA,cAAA,GACE,0UADF;IAEAC,gBAAA,GAAmB,IAAIvsF,GAAJ,CAAQ,CAAC,CAAC,GAAD,EAAM,IAAN,CAAD,CAAR,CAAnB;EATmB;EAWrB,OAAOhL,GAAA,CAAImQ,UAAJ,CAAemnF,cAAf,EAA+B,CAACE,CAAD,EAAI95D,EAAJ,EAAQC,EAAR,KAAe;IACnD,OAAOD,EAAA,GAAKA,EAAA,CAAG+5D,SAAH,CAAa,MAAb,CAAL,GAA4BF,gBAAA,CAAiBtsF,GAAjB,CAAqB0yB,EAArB,CAAnC;EADmD,CAA9C,CAAP;AAZ6B;AAiB/B,SAASiuC,OAATA,CAAA,EAAmB;EACjB,IAEG,OAAO8rB,MAAP,KAAkB,WAAlB,IAAiC,OAAOA,MAAA,EAAQC,UAAf,KAA8B,UAFlE,EAGE;IACA,OAAOD,MAAA,CAAOC,UAAP,EAAP;EADA;EAGF,MAAMC,GAAA,GAAM,IAAIvyE,UAAJ,CAAe,EAAf,CAAZ;EACA,IACE,OAAOqyE,MAAP,KAAkB,WAAlB,IACA,OAAOA,MAAA,EAAQG,eAAf,KAAmC,UAFrC,EAGE;IACAH,MAAA,CAAOG,eAAP,CAAuBD,GAAvB;EADA,CAHF,MAKO;IACL,KAAK,IAAIzjF,CAAA,GAAI,CAAR,EAAWA,CAAA,GAAI,EAApB,EAAwBA,CAAA,EAAxB,EAA6B;MAC3ByjF,GAAA,CAAIzjF,CAAJ,IAAS5c,IAAA,CAAKC,KAAL,CAAWD,IAAA,CAAKugG,MAAL,KAAgB,GAA3B,CAAT;IAD2B;EADxB;EAKP,OAAO5hB,aAAA,CAAc0hB,GAAd,CAAP;AAlBiB;AAqBnB,MAAM99F,gBAAA,GAAmB,oBAAzB;;;;;;;SCzhCA;SACA;;SAEA;SACA;SACA;SACA;SACA;SACA;SACA;SACA;SACA;SACA;SACA;SACA;SACA;;SAEA;SACA;;SAEA;SACA;SACA;;;;;UCtBA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA,IAAI;UACJ;UACA;UACA,IAAI;UACJ;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA,CAAC;UACD;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA,EAAE;UACF;UACA,sGAAsG;UACtG;UACA;UACA;UACA;UACA;UACA;UACA;UACA,GAAG;UACH;UACA;UACA;UACA;UACA;UACA,GAAG;UACH;UACA,EAAE;UACF;UACA;;;;;UChEA;UACA;UACA;UACA;UACA,yCAAyC,wCAAwC;UACjF;UACA;UACA;;;;;UCPA;;;;;SEAA;SACA;SACA;SACA","sources":["webpack://pdf.js/src/shared/scripting_utils.js","webpack://pdf.js/src/display/annotation_layer.js","webpack://pdf.js/src/display/annotation_storage.js","webpack://pdf.js/src/display/api.js","webpack://pdf.js/src/display/base_factory.js","webpack://pdf.js/src/display/pattern_helper.js","webpack://pdf.js/src/shared/image_utils.js","webpack://pdf.js/src/display/canvas.js","webpack://pdf.js/src/display/display_utils.js","webpack://pdf.js/src/display/editor/freetext.js","webpack://pdf.js/src/display/editor/ink.js","webpack://pdf.js/src/display/editor/stamp.js","webpack://pdf.js/src/display/editor/annotation_editor_layer.js","webpack://pdf.js/src/display/editor/editor.js","webpack://pdf.js/src/display/editor/tools.js","webpack://pdf.js/src/display/fetch_stream.js","webpack://pdf.js/src/display/font_loader.js","webpack://pdf.js/src/display/metadata.js","webpack://pdf.js/src/display/network.js","webpack://pdf.js/src/display/content_disposition.js","webpack://pdf.js/src/display/network_utils.js","webpack://pdf.js/src/display/node_stream.js","webpack://pdf.js/src/display/node_utils.js","webpack://pdf.js/src/display/optional_content_config.js","webpack://pdf.js/src/display/text_layer.js","webpack://pdf.js/src/display/transport_stream.js","webpack://pdf.js/src/display/worker_options.js","webpack://pdf.js/src/display/xfa_layer.js","webpack://pdf.js/src/display/xfa_text.js","webpack://pdf.js/src/pdf.js","webpack://pdf.js/src/shared/message_handler.js","webpack://pdf.js/src/shared/murmurhash3.js","webpack://pdf.js/src/shared/util.js","webpack://pdf.js/webpack/bootstrap","webpack://pdf.js/webpack/runtime/async module","webpack://pdf.js/webpack/runtime/define property getters","webpack://pdf.js/webpack/runtime/hasOwnProperty shorthand","webpack://pdf.js/webpack/before-startup","webpack://pdf.js/webpack/startup","webpack://pdf.js/webpack/after-startup"],"sourcesContent":["/* Copyright 2020 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * PLEASE NOTE: This file is currently imported in both the `../display/` and\n * `../scripting_api/` folders, hence be EXTREMELY careful about\n * introducing any dependencies here since that can lead to an\n * unexpected/unnecessary size increase of the *built* files.\n */\n\nfunction makeColorComp(n) {\n return Math.floor(Math.max(0, Math.min(1, n)) * 255)\n .toString(16)\n .padStart(2, \"0\");\n}\n\nfunction scaleAndClamp(x) {\n return Math.max(0, Math.min(255, 255 * x));\n}\n\n// PDF specifications section 10.3\nclass ColorConverters {\n static CMYK_G([c, y, m, k]) {\n return [\"G\", 1 - Math.min(1, 0.3 * c + 0.59 * m + 0.11 * y + k)];\n }\n\n static G_CMYK([g]) {\n return [\"CMYK\", 0, 0, 0, 1 - g];\n }\n\n static G_RGB([g]) {\n return [\"RGB\", g, g, g];\n }\n\n static G_rgb([g]) {\n g = scaleAndClamp(g);\n return [g, g, g];\n }\n\n static G_HTML([g]) {\n const G = makeColorComp(g);\n return `#${G}${G}${G}`;\n }\n\n static RGB_G([r, g, b]) {\n return [\"G\", 0.3 * r + 0.59 * g + 0.11 * b];\n }\n\n static RGB_rgb(color) {\n return color.map(scaleAndClamp);\n }\n\n static RGB_HTML(color) {\n return `#${color.map(makeColorComp).join(\"\")}`;\n }\n\n static T_HTML() {\n return \"#00000000\";\n }\n\n static T_rgb() {\n return [null];\n }\n\n static CMYK_RGB([c, y, m, k]) {\n return [\n \"RGB\",\n 1 - Math.min(1, c + k),\n 1 - Math.min(1, m + k),\n 1 - Math.min(1, y + k),\n ];\n }\n\n static CMYK_rgb([c, y, m, k]) {\n return [\n scaleAndClamp(1 - Math.min(1, c + k)),\n scaleAndClamp(1 - Math.min(1, m + k)),\n scaleAndClamp(1 - Math.min(1, y + k)),\n ];\n }\n\n static CMYK_HTML(components) {\n const rgb = this.CMYK_RGB(components).slice(1);\n return this.RGB_HTML(rgb);\n }\n\n static RGB_CMYK([r, g, b]) {\n const c = 1 - r;\n const m = 1 - g;\n const y = 1 - b;\n const k = Math.min(c, m, y);\n return [\"CMYK\", c, m, y, k];\n }\n}\n\nexport { ColorConverters };\n","/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./api\").PDFPageProxy} PDFPageProxy */\n/** @typedef {import(\"./display_utils\").PageViewport} PageViewport */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../../web/text_accessibility.js\").TextAccessibilityManager} TextAccessibilityManager */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../../web/interfaces\").IDownloadManager} IDownloadManager */\n/** @typedef {import(\"../../web/interfaces\").IPDFLinkService} IPDFLinkService */\n\nimport {\n AnnotationBorderStyleType,\n AnnotationEditorType,\n AnnotationPrefix,\n AnnotationType,\n FeatureTest,\n LINE_FACTOR,\n shadow,\n unreachable,\n Util,\n warn,\n} from \"../shared/util.js\";\nimport {\n DOMSVGFactory,\n getFilenameFromUrl,\n PDFDateString,\n setLayerDimensions,\n} from \"./display_utils.js\";\nimport { AnnotationStorage } from \"./annotation_storage.js\";\nimport { ColorConverters } from \"../shared/scripting_utils.js\";\nimport { XfaLayer } from \"./xfa_layer.js\";\n\nconst DEFAULT_TAB_INDEX = 1000;\nconst DEFAULT_FONT_SIZE = 9;\nconst GetElementsByNameSet = new WeakSet();\n\nfunction getRectDims(rect) {\n return {\n width: rect[2] - rect[0],\n height: rect[3] - rect[1],\n };\n}\n\n/**\n * @typedef {Object} AnnotationElementParameters\n * @property {Object} data\n * @property {HTMLDivElement} layer\n * @property {IPDFLinkService} linkService\n * @property {IDownloadManager} [downloadManager]\n * @property {AnnotationStorage} [annotationStorage]\n * @property {string} [imageResourcesPath] - Path for image resources, mainly\n * for annotation icons. Include trailing slash.\n * @property {boolean} renderForms\n * @property {Object} svgFactory\n * @property {boolean} [enableScripting]\n * @property {boolean} [hasJSActions]\n * @property {Object} [fieldObjects]\n */\n\nclass AnnotationElementFactory {\n /**\n * @param {AnnotationElementParameters} parameters\n * @returns {AnnotationElement}\n */\n static create(parameters) {\n const subtype = parameters.data.annotationType;\n\n switch (subtype) {\n case AnnotationType.LINK:\n return new LinkAnnotationElement(parameters);\n\n case AnnotationType.TEXT:\n return new TextAnnotationElement(parameters);\n\n case AnnotationType.WIDGET:\n const fieldType = parameters.data.fieldType;\n\n switch (fieldType) {\n case \"Tx\":\n return new TextWidgetAnnotationElement(parameters);\n case \"Btn\":\n if (parameters.data.radioButton) {\n return new RadioButtonWidgetAnnotationElement(parameters);\n } else if (parameters.data.checkBox) {\n return new CheckboxWidgetAnnotationElement(parameters);\n }\n return new PushButtonWidgetAnnotationElement(parameters);\n case \"Ch\":\n return new ChoiceWidgetAnnotationElement(parameters);\n case \"Sig\":\n return new SignatureWidgetAnnotationElement(parameters);\n }\n return new WidgetAnnotationElement(parameters);\n\n case AnnotationType.POPUP:\n return new PopupAnnotationElement(parameters);\n\n case AnnotationType.FREETEXT:\n return new FreeTextAnnotationElement(parameters);\n\n case AnnotationType.LINE:\n return new LineAnnotationElement(parameters);\n\n case AnnotationType.SQUARE:\n return new SquareAnnotationElement(parameters);\n\n case AnnotationType.CIRCLE:\n return new CircleAnnotationElement(parameters);\n\n case AnnotationType.POLYLINE:\n return new PolylineAnnotationElement(parameters);\n\n case AnnotationType.CARET:\n return new CaretAnnotationElement(parameters);\n\n case AnnotationType.INK:\n return new InkAnnotationElement(parameters);\n\n case AnnotationType.POLYGON:\n return new PolygonAnnotationElement(parameters);\n\n case AnnotationType.HIGHLIGHT:\n return new HighlightAnnotationElement(parameters);\n\n case AnnotationType.UNDERLINE:\n return new UnderlineAnnotationElement(parameters);\n\n case AnnotationType.SQUIGGLY:\n return new SquigglyAnnotationElement(parameters);\n\n case AnnotationType.STRIKEOUT:\n return new StrikeOutAnnotationElement(parameters);\n\n case AnnotationType.STAMP:\n return new StampAnnotationElement(parameters);\n\n case AnnotationType.FILEATTACHMENT:\n return new FileAttachmentAnnotationElement(parameters);\n\n default:\n return new AnnotationElement(parameters);\n }\n }\n}\n\nclass AnnotationElement {\n #hasBorder = false;\n\n constructor(\n parameters,\n {\n isRenderable = false,\n ignoreBorder = false,\n createQuadrilaterals = false,\n } = {}\n ) {\n this.isRenderable = isRenderable;\n this.data = parameters.data;\n this.layer = parameters.layer;\n this.linkService = parameters.linkService;\n this.downloadManager = parameters.downloadManager;\n this.imageResourcesPath = parameters.imageResourcesPath;\n this.renderForms = parameters.renderForms;\n this.svgFactory = parameters.svgFactory;\n this.annotationStorage = parameters.annotationStorage;\n this.enableScripting = parameters.enableScripting;\n this.hasJSActions = parameters.hasJSActions;\n this._fieldObjects = parameters.fieldObjects;\n this.parent = parameters.parent;\n\n if (isRenderable) {\n this.container = this._createContainer(ignoreBorder);\n }\n if (createQuadrilaterals) {\n this._createQuadrilaterals();\n }\n }\n\n static _hasPopupData({ titleObj, contentsObj, richText }) {\n return !!(titleObj?.str || contentsObj?.str || richText?.str);\n }\n\n get hasPopupData() {\n return AnnotationElement._hasPopupData(this.data);\n }\n\n /**\n * Create an empty container for the annotation's HTML element.\n *\n * @private\n * @param {boolean} ignoreBorder\n * @memberof AnnotationElement\n * @returns {HTMLElement} A section element.\n */\n _createContainer(ignoreBorder) {\n const {\n data,\n parent: { page, viewport },\n } = this;\n\n const container = document.createElement(\"section\");\n container.setAttribute(\"data-annotation-id\", data.id);\n if (!(this instanceof WidgetAnnotationElement)) {\n container.tabIndex = DEFAULT_TAB_INDEX;\n }\n\n // The accessibility manager will move the annotation in the DOM in\n // order to match the visual ordering.\n // But if an annotation is above an other one, then we must draw it\n // after the other one whatever the order is in the DOM, hence the\n // use of the z-index.\n container.style.zIndex = this.parent.zIndex++;\n\n if (this.data.popupRef) {\n container.setAttribute(\"aria-haspopup\", \"dialog\");\n }\n\n if (data.noRotate) {\n container.classList.add(\"norotate\");\n }\n\n const { pageWidth, pageHeight, pageX, pageY } = viewport.rawDims;\n\n if (!data.rect || this instanceof PopupAnnotationElement) {\n const { rotation } = data;\n if (!data.hasOwnCanvas && rotation !== 0) {\n this.setRotation(rotation, container);\n }\n return container;\n }\n\n const { width, height } = getRectDims(data.rect);\n\n // Do *not* modify `data.rect`, since that will corrupt the annotation\n // position on subsequent calls to `_createContainer` (see issue 6804).\n const rect = Util.normalizeRect([\n data.rect[0],\n page.view[3] - data.rect[1] + page.view[1],\n data.rect[2],\n page.view[3] - data.rect[3] + page.view[1],\n ]);\n\n if (!ignoreBorder && data.borderStyle.width > 0) {\n container.style.borderWidth = `${data.borderStyle.width}px`;\n\n const horizontalRadius = data.borderStyle.horizontalCornerRadius;\n const verticalRadius = data.borderStyle.verticalCornerRadius;\n if (horizontalRadius > 0 || verticalRadius > 0) {\n const radius = `calc(${horizontalRadius}px * var(--scale-factor)) / calc(${verticalRadius}px * var(--scale-factor))`;\n container.style.borderRadius = radius;\n } else if (this instanceof RadioButtonWidgetAnnotationElement) {\n const radius = `calc(${width}px * var(--scale-factor)) / calc(${height}px * var(--scale-factor))`;\n container.style.borderRadius = radius;\n }\n\n switch (data.borderStyle.style) {\n case AnnotationBorderStyleType.SOLID:\n container.style.borderStyle = \"solid\";\n break;\n\n case AnnotationBorderStyleType.DASHED:\n container.style.borderStyle = \"dashed\";\n break;\n\n case AnnotationBorderStyleType.BEVELED:\n warn(\"Unimplemented border style: beveled\");\n break;\n\n case AnnotationBorderStyleType.INSET:\n warn(\"Unimplemented border style: inset\");\n break;\n\n case AnnotationBorderStyleType.UNDERLINE:\n container.style.borderBottomStyle = \"solid\";\n break;\n\n default:\n break;\n }\n\n const borderColor = data.borderColor || null;\n if (borderColor) {\n this.#hasBorder = true;\n container.style.borderColor = Util.makeHexColor(\n borderColor[0] | 0,\n borderColor[1] | 0,\n borderColor[2] | 0\n );\n } else {\n // Transparent (invisible) border, so do not draw it at all.\n container.style.borderWidth = 0;\n }\n }\n\n container.style.left = `${(100 * (rect[0] - pageX)) / pageWidth}%`;\n container.style.top = `${(100 * (rect[1] - pageY)) / pageHeight}%`;\n\n const { rotation } = data;\n if (data.hasOwnCanvas || rotation === 0) {\n container.style.width = `${(100 * width) / pageWidth}%`;\n container.style.height = `${(100 * height) / pageHeight}%`;\n } else {\n this.setRotation(rotation, container);\n }\n\n return container;\n }\n\n setRotation(angle, container = this.container) {\n if (!this.data.rect) {\n return;\n }\n const { pageWidth, pageHeight } = this.parent.viewport.rawDims;\n const { width, height } = getRectDims(this.data.rect);\n\n let elementWidth, elementHeight;\n if (angle % 180 === 0) {\n elementWidth = (100 * width) / pageWidth;\n elementHeight = (100 * height) / pageHeight;\n } else {\n elementWidth = (100 * height) / pageWidth;\n elementHeight = (100 * width) / pageHeight;\n }\n\n container.style.width = `${elementWidth}%`;\n container.style.height = `${elementHeight}%`;\n\n container.setAttribute(\"data-main-rotation\", (360 - angle) % 360);\n }\n\n get _commonActions() {\n const setColor = (jsName, styleName, event) => {\n const color = event.detail[jsName];\n const colorType = color[0];\n const colorArray = color.slice(1);\n event.target.style[styleName] =\n ColorConverters[`${colorType}_HTML`](colorArray);\n this.annotationStorage.setValue(this.data.id, {\n [styleName]: ColorConverters[`${colorType}_rgb`](colorArray),\n });\n };\n\n return shadow(this, \"_commonActions\", {\n display: event => {\n const { display } = event.detail;\n // See scripting/constants.js for the values of `Display`.\n // 0 = visible, 1 = hidden, 2 = noPrint and 3 = noView.\n const hidden = display % 2 === 1;\n this.container.style.visibility = hidden ? \"hidden\" : \"visible\";\n this.annotationStorage.setValue(this.data.id, {\n noView: hidden,\n noPrint: display === 1 || display === 2,\n });\n },\n print: event => {\n this.annotationStorage.setValue(this.data.id, {\n noPrint: !event.detail.print,\n });\n },\n hidden: event => {\n const { hidden } = event.detail;\n this.container.style.visibility = hidden ? \"hidden\" : \"visible\";\n this.annotationStorage.setValue(this.data.id, {\n noPrint: hidden,\n noView: hidden,\n });\n },\n focus: event => {\n setTimeout(() => event.target.focus({ preventScroll: false }), 0);\n },\n userName: event => {\n // tooltip\n event.target.title = event.detail.userName;\n },\n readonly: event => {\n event.target.disabled = event.detail.readonly;\n },\n required: event => {\n this._setRequired(event.target, event.detail.required);\n },\n bgColor: event => {\n setColor(\"bgColor\", \"backgroundColor\", event);\n },\n fillColor: event => {\n setColor(\"fillColor\", \"backgroundColor\", event);\n },\n fgColor: event => {\n setColor(\"fgColor\", \"color\", event);\n },\n textColor: event => {\n setColor(\"textColor\", \"color\", event);\n },\n borderColor: event => {\n setColor(\"borderColor\", \"borderColor\", event);\n },\n strokeColor: event => {\n setColor(\"strokeColor\", \"borderColor\", event);\n },\n rotation: event => {\n const angle = event.detail.rotation;\n this.setRotation(angle);\n this.annotationStorage.setValue(this.data.id, {\n rotation: angle,\n });\n },\n });\n }\n\n _dispatchEventFromSandbox(actions, jsEvent) {\n const commonActions = this._commonActions;\n for (const name of Object.keys(jsEvent.detail)) {\n const action = actions[name] || commonActions[name];\n action?.(jsEvent);\n }\n }\n\n _setDefaultPropertiesFromJS(element) {\n if (!this.enableScripting) {\n return;\n }\n\n // Some properties may have been updated thanks to JS.\n const storedData = this.annotationStorage.getRawValue(this.data.id);\n if (!storedData) {\n return;\n }\n\n const commonActions = this._commonActions;\n for (const [actionName, detail] of Object.entries(storedData)) {\n const action = commonActions[actionName];\n if (action) {\n const eventProxy = {\n detail: {\n [actionName]: detail,\n },\n target: element,\n };\n action(eventProxy);\n // The action has been consumed: no need to keep it.\n delete storedData[actionName];\n }\n }\n }\n\n /**\n * Create quadrilaterals from the annotation's quadpoints.\n *\n * @private\n * @memberof AnnotationElement\n */\n _createQuadrilaterals() {\n if (!this.container) {\n return;\n }\n const { quadPoints } = this.data;\n if (!quadPoints) {\n return;\n }\n\n const [rectBlX, rectBlY, rectTrX, rectTrY] = this.data.rect;\n\n if (quadPoints.length === 1) {\n const [, { x: trX, y: trY }, { x: blX, y: blY }] = quadPoints[0];\n if (\n rectTrX === trX &&\n rectTrY === trY &&\n rectBlX === blX &&\n rectBlY === blY\n ) {\n // The quadpoints cover the whole annotation rectangle, so no need to\n // create a quadrilateral.\n return;\n }\n }\n\n const { style } = this.container;\n let svgBuffer;\n if (this.#hasBorder) {\n const { borderColor, borderWidth } = style;\n style.borderWidth = 0;\n svgBuffer = [\n \"url('data:image/svg+xml;utf8,\",\n ``,\n ``,\n ];\n this.container.classList.add(\"hasBorder\");\n }\n\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n this.container.classList.add(\"hasClipPath\");\n }\n\n const width = rectTrX - rectBlX;\n const height = rectTrY - rectBlY;\n\n const { svgFactory } = this;\n const svg = svgFactory.createElement(\"svg\");\n svg.classList.add(\"quadrilateralsContainer\");\n svg.setAttribute(\"width\", 0);\n svg.setAttribute(\"height\", 0);\n const defs = svgFactory.createElement(\"defs\");\n svg.append(defs);\n const clipPath = svgFactory.createElement(\"clipPath\");\n const id = `clippath_${this.data.id}`;\n clipPath.setAttribute(\"id\", id);\n clipPath.setAttribute(\"clipPathUnits\", \"objectBoundingBox\");\n defs.append(clipPath);\n\n for (const [, { x: trX, y: trY }, { x: blX, y: blY }] of quadPoints) {\n const rect = svgFactory.createElement(\"rect\");\n const x = (blX - rectBlX) / width;\n const y = (rectTrY - trY) / height;\n const rectWidth = (trX - blX) / width;\n const rectHeight = (trY - blY) / height;\n rect.setAttribute(\"x\", x);\n rect.setAttribute(\"y\", y);\n rect.setAttribute(\"width\", rectWidth);\n rect.setAttribute(\"height\", rectHeight);\n clipPath.append(rect);\n svgBuffer?.push(\n ``\n );\n }\n\n if (this.#hasBorder) {\n svgBuffer.push(`')`);\n style.backgroundImage = svgBuffer.join(\"\");\n }\n\n this.container.append(svg);\n this.container.style.clipPath = `url(#${id})`;\n }\n\n /**\n * Create a popup for the annotation's HTML element. This is used for\n * annotations that do not have a Popup entry in the dictionary, but\n * are of a type that works with popups (such as Highlight annotations).\n *\n * @private\n * @memberof AnnotationElement\n */\n _createPopup() {\n const { container, data } = this;\n container.setAttribute(\"aria-haspopup\", \"dialog\");\n\n const popup = new PopupAnnotationElement({\n data: {\n color: data.color,\n titleObj: data.titleObj,\n modificationDate: data.modificationDate,\n contentsObj: data.contentsObj,\n richText: data.richText,\n parentRect: data.rect,\n borderStyle: 0,\n id: `popup_${data.id}`,\n rotation: data.rotation,\n },\n parent: this.parent,\n elements: [this],\n });\n this.parent.div.append(popup.render());\n }\n\n /**\n * Render the annotation's HTML element(s).\n *\n * @public\n * @memberof AnnotationElement\n */\n render() {\n unreachable(\"Abstract method `AnnotationElement.render` called\");\n }\n\n /**\n * @private\n * @returns {Array}\n */\n _getElementsByName(name, skipId = null) {\n const fields = [];\n\n if (this._fieldObjects) {\n const fieldObj = this._fieldObjects[name];\n if (fieldObj) {\n for (const { page, id, exportValues } of fieldObj) {\n if (page === -1) {\n continue;\n }\n if (id === skipId) {\n continue;\n }\n const exportValue =\n typeof exportValues === \"string\" ? exportValues : null;\n\n const domElement = document.querySelector(\n `[data-element-id=\"${id}\"]`\n );\n if (domElement && !GetElementsByNameSet.has(domElement)) {\n warn(`_getElementsByName - element not allowed: ${id}`);\n continue;\n }\n fields.push({ id, exportValue, domElement });\n }\n }\n return fields;\n }\n // Fallback to a regular DOM lookup, to ensure that the standalone\n // viewer components won't break.\n for (const domElement of document.getElementsByName(name)) {\n const { exportValue } = domElement;\n const id = domElement.getAttribute(\"data-element-id\");\n if (id === skipId) {\n continue;\n }\n if (!GetElementsByNameSet.has(domElement)) {\n continue;\n }\n fields.push({ id, exportValue, domElement });\n }\n return fields;\n }\n\n show() {\n if (this.container) {\n this.container.hidden = false;\n }\n this.popup?.maybeShow();\n }\n\n hide() {\n if (this.container) {\n this.container.hidden = true;\n }\n this.popup?.forceHide();\n }\n\n /**\n * Get the HTML element(s) which can trigger a popup when clicked or hovered.\n *\n * @public\n * @memberof AnnotationElement\n * @returns {Array|HTMLElement} An array of elements or an\n * element.\n */\n getElementsToTriggerPopup() {\n return this.container;\n }\n\n addHighlightArea() {\n const triggers = this.getElementsToTriggerPopup();\n if (Array.isArray(triggers)) {\n for (const element of triggers) {\n element.classList.add(\"highlightArea\");\n }\n } else {\n triggers.classList.add(\"highlightArea\");\n }\n }\n\n get _isEditable() {\n return false;\n }\n\n _editOnDoubleClick() {\n if (!this._isEditable) {\n return;\n }\n const {\n annotationEditorType: mode,\n data: { id: editId },\n } = this;\n this.container.addEventListener(\"dblclick\", () => {\n this.linkService.eventBus?.dispatch(\"switchannotationeditormode\", {\n source: this,\n mode,\n editId,\n });\n });\n }\n}\n\nclass LinkAnnotationElement extends AnnotationElement {\n constructor(parameters, options = null) {\n super(parameters, {\n isRenderable: true,\n ignoreBorder: !!options?.ignoreBorder,\n createQuadrilaterals: true,\n });\n this.isTooltipOnly = parameters.data.isTooltipOnly;\n }\n\n render() {\n const { data, linkService } = this;\n const link = document.createElement(\"a\");\n link.setAttribute(\"data-element-id\", data.id);\n let isBound = false;\n\n if (data.url) {\n linkService.addLinkAttributes(link, data.url, data.newWindow);\n isBound = true;\n } else if (data.action) {\n this._bindNamedAction(link, data.action);\n isBound = true;\n } else if (data.attachment) {\n this.#bindAttachment(link, data.attachment, data.attachmentDest);\n isBound = true;\n } else if (data.setOCGState) {\n this.#bindSetOCGState(link, data.setOCGState);\n isBound = true;\n } else if (data.dest) {\n this._bindLink(link, data.dest);\n isBound = true;\n } else {\n if (\n data.actions &&\n (data.actions.Action ||\n data.actions[\"Mouse Up\"] ||\n data.actions[\"Mouse Down\"]) &&\n this.enableScripting &&\n this.hasJSActions\n ) {\n this._bindJSAction(link, data);\n isBound = true;\n }\n\n if (data.resetForm) {\n this._bindResetFormAction(link, data.resetForm);\n isBound = true;\n } else if (this.isTooltipOnly && !isBound) {\n this._bindLink(link, \"\");\n isBound = true;\n }\n }\n\n this.container.classList.add(\"linkAnnotation\");\n if (isBound) {\n this.container.append(link);\n }\n\n return this.container;\n }\n\n #setInternalLink() {\n this.container.setAttribute(\"data-internal-link\", \"\");\n }\n\n /**\n * Bind internal links to the link element.\n *\n * @private\n * @param {Object} link\n * @param {Object} destination\n * @memberof LinkAnnotationElement\n */\n _bindLink(link, destination) {\n link.href = this.linkService.getDestinationHash(destination);\n link.onclick = () => {\n if (destination) {\n this.linkService.goToDestination(destination);\n }\n return false;\n };\n if (destination || destination === /* isTooltipOnly = */ \"\") {\n this.#setInternalLink();\n }\n }\n\n /**\n * Bind named actions to the link element.\n *\n * @private\n * @param {Object} link\n * @param {Object} action\n * @memberof LinkAnnotationElement\n */\n _bindNamedAction(link, action) {\n link.href = this.linkService.getAnchorUrl(\"\");\n link.onclick = () => {\n this.linkService.executeNamedAction(action);\n return false;\n };\n this.#setInternalLink();\n }\n\n /**\n * Bind attachments to the link element.\n * @param {Object} link\n * @param {Object} attachment\n * @param {str} [dest]\n */\n #bindAttachment(link, attachment, dest = null) {\n link.href = this.linkService.getAnchorUrl(\"\");\n link.onclick = () => {\n this.downloadManager?.openOrDownloadData(\n attachment.content,\n attachment.filename,\n dest\n );\n return false;\n };\n this.#setInternalLink();\n }\n\n /**\n * Bind SetOCGState actions to the link element.\n * @param {Object} link\n * @param {Object} action\n */\n #bindSetOCGState(link, action) {\n link.href = this.linkService.getAnchorUrl(\"\");\n link.onclick = () => {\n this.linkService.executeSetOCGState(action);\n return false;\n };\n this.#setInternalLink();\n }\n\n /**\n * Bind JS actions to the link element.\n *\n * @private\n * @param {Object} link\n * @param {Object} data\n * @memberof LinkAnnotationElement\n */\n _bindJSAction(link, data) {\n link.href = this.linkService.getAnchorUrl(\"\");\n const map = new Map([\n [\"Action\", \"onclick\"],\n [\"Mouse Up\", \"onmouseup\"],\n [\"Mouse Down\", \"onmousedown\"],\n ]);\n for (const name of Object.keys(data.actions)) {\n const jsName = map.get(name);\n if (!jsName) {\n continue;\n }\n link[jsName] = () => {\n this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n source: this,\n detail: {\n id: data.id,\n name,\n },\n });\n return false;\n };\n }\n\n if (!link.onclick) {\n link.onclick = () => false;\n }\n this.#setInternalLink();\n }\n\n _bindResetFormAction(link, resetForm) {\n const otherClickAction = link.onclick;\n if (!otherClickAction) {\n link.href = this.linkService.getAnchorUrl(\"\");\n }\n this.#setInternalLink();\n\n if (!this._fieldObjects) {\n warn(\n `_bindResetFormAction - \"resetForm\" action not supported, ` +\n \"ensure that the `fieldObjects` parameter is provided.\"\n );\n if (!otherClickAction) {\n link.onclick = () => false;\n }\n return;\n }\n\n link.onclick = () => {\n otherClickAction?.();\n\n const {\n fields: resetFormFields,\n refs: resetFormRefs,\n include,\n } = resetForm;\n\n const allFields = [];\n if (resetFormFields.length !== 0 || resetFormRefs.length !== 0) {\n const fieldIds = new Set(resetFormRefs);\n for (const fieldName of resetFormFields) {\n const fields = this._fieldObjects[fieldName] || [];\n for (const { id } of fields) {\n fieldIds.add(id);\n }\n }\n for (const fields of Object.values(this._fieldObjects)) {\n for (const field of fields) {\n if (fieldIds.has(field.id) === include) {\n allFields.push(field);\n }\n }\n }\n } else {\n for (const fields of Object.values(this._fieldObjects)) {\n allFields.push(...fields);\n }\n }\n\n const storage = this.annotationStorage;\n const allIds = [];\n for (const field of allFields) {\n const { id } = field;\n allIds.push(id);\n switch (field.type) {\n case \"text\": {\n const value = field.defaultValue || \"\";\n storage.setValue(id, { value });\n break;\n }\n case \"checkbox\":\n case \"radiobutton\": {\n const value = field.defaultValue === field.exportValues;\n storage.setValue(id, { value });\n break;\n }\n case \"combobox\":\n case \"listbox\": {\n const value = field.defaultValue || \"\";\n storage.setValue(id, { value });\n break;\n }\n default:\n continue;\n }\n\n const domElement = document.querySelector(`[data-element-id=\"${id}\"]`);\n if (!domElement) {\n continue;\n } else if (!GetElementsByNameSet.has(domElement)) {\n warn(`_bindResetFormAction - element not allowed: ${id}`);\n continue;\n }\n domElement.dispatchEvent(new Event(\"resetform\"));\n }\n\n if (this.enableScripting) {\n // Update the values in the sandbox.\n this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n source: this,\n detail: {\n id: \"app\",\n ids: allIds,\n name: \"ResetForm\",\n },\n });\n }\n\n return false;\n };\n }\n}\n\nclass TextAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n super(parameters, { isRenderable: true });\n }\n\n render() {\n this.container.classList.add(\"textAnnotation\");\n\n const image = document.createElement(\"img\");\n image.src =\n this.imageResourcesPath +\n \"annotation-\" +\n this.data.name.toLowerCase() +\n \".svg\";\n image.setAttribute(\"data-l10n-id\", \"pdfjs-text-annotation-type\");\n image.setAttribute(\n \"data-l10n-args\",\n JSON.stringify({ type: this.data.name })\n );\n\n if (!this.data.popupRef && this.hasPopupData) {\n this._createPopup();\n }\n\n this.container.append(image);\n return this.container;\n }\n}\n\nclass WidgetAnnotationElement extends AnnotationElement {\n render() {\n // Show only the container for unsupported field types.\n if (this.data.alternativeText) {\n this.container.title = this.data.alternativeText;\n }\n\n return this.container;\n }\n\n showElementAndHideCanvas(element) {\n if (this.data.hasOwnCanvas) {\n if (element.previousSibling?.nodeName === \"CANVAS\") {\n element.previousSibling.hidden = true;\n }\n element.hidden = false;\n }\n }\n\n _getKeyModifier(event) {\n return FeatureTest.platform.isMac ? event.metaKey : event.ctrlKey;\n }\n\n _setEventListener(element, elementData, baseName, eventName, valueGetter) {\n if (baseName.includes(\"mouse\")) {\n // Mouse events\n element.addEventListener(baseName, event => {\n this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n source: this,\n detail: {\n id: this.data.id,\n name: eventName,\n value: valueGetter(event),\n shift: event.shiftKey,\n modifier: this._getKeyModifier(event),\n },\n });\n });\n } else {\n // Non-mouse events\n element.addEventListener(baseName, event => {\n if (baseName === \"blur\") {\n if (!elementData.focused || !event.relatedTarget) {\n return;\n }\n elementData.focused = false;\n } else if (baseName === \"focus\") {\n if (elementData.focused) {\n return;\n }\n elementData.focused = true;\n }\n\n if (!valueGetter) {\n return;\n }\n\n this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n source: this,\n detail: {\n id: this.data.id,\n name: eventName,\n value: valueGetter(event),\n },\n });\n });\n }\n }\n\n _setEventListeners(element, elementData, names, getter) {\n for (const [baseName, eventName] of names) {\n if (eventName === \"Action\" || this.data.actions?.[eventName]) {\n if (eventName === \"Focus\" || eventName === \"Blur\") {\n elementData ||= { focused: false };\n }\n this._setEventListener(\n element,\n elementData,\n baseName,\n eventName,\n getter\n );\n if (eventName === \"Focus\" && !this.data.actions?.Blur) {\n // Ensure that elementData will have the correct value.\n this._setEventListener(element, elementData, \"blur\", \"Blur\", null);\n } else if (eventName === \"Blur\" && !this.data.actions?.Focus) {\n this._setEventListener(element, elementData, \"focus\", \"Focus\", null);\n }\n }\n }\n }\n\n _setBackgroundColor(element) {\n const color = this.data.backgroundColor || null;\n element.style.backgroundColor =\n color === null\n ? \"transparent\"\n : Util.makeHexColor(color[0], color[1], color[2]);\n }\n\n /**\n * Apply text styles to the text in the element.\n *\n * @private\n * @param {HTMLDivElement} element\n * @memberof TextWidgetAnnotationElement\n */\n _setTextStyle(element) {\n const TEXT_ALIGNMENT = [\"left\", \"center\", \"right\"];\n const { fontColor } = this.data.defaultAppearanceData;\n const fontSize =\n this.data.defaultAppearanceData.fontSize || DEFAULT_FONT_SIZE;\n\n const style = element.style;\n\n // TODO: If the font-size is zero, calculate it based on the height and\n // width of the element.\n // Not setting `style.fontSize` will use the default font-size for now.\n\n // We don't use the font, as specified in the PDF document, for the \n // element. Hence using the original `fontSize` could look bad, which is why\n // it's instead based on the field height.\n // If the height is \"big\" then it could lead to a too big font size\n // so in this case use the one we've in the pdf (hence the min).\n let computedFontSize;\n const BORDER_SIZE = 2;\n const roundToOneDecimal = x => Math.round(10 * x) / 10;\n if (this.data.multiLine) {\n const height = Math.abs(\n this.data.rect[3] - this.data.rect[1] - BORDER_SIZE\n );\n const numberOfLines = Math.round(height / (LINE_FACTOR * fontSize)) || 1;\n const lineHeight = height / numberOfLines;\n computedFontSize = Math.min(\n fontSize,\n roundToOneDecimal(lineHeight / LINE_FACTOR)\n );\n } else {\n const height = Math.abs(\n this.data.rect[3] - this.data.rect[1] - BORDER_SIZE\n );\n computedFontSize = Math.min(\n fontSize,\n roundToOneDecimal(height / LINE_FACTOR)\n );\n }\n style.fontSize = `calc(${computedFontSize}px * var(--scale-factor))`;\n\n style.color = Util.makeHexColor(fontColor[0], fontColor[1], fontColor[2]);\n\n if (this.data.textAlignment !== null) {\n style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment];\n }\n }\n\n _setRequired(element, isRequired) {\n if (isRequired) {\n element.setAttribute(\"required\", true);\n } else {\n element.removeAttribute(\"required\");\n }\n element.setAttribute(\"aria-required\", isRequired);\n }\n}\n\nclass TextWidgetAnnotationElement extends WidgetAnnotationElement {\n constructor(parameters) {\n const isRenderable =\n parameters.renderForms ||\n parameters.data.hasOwnCanvas ||\n (!parameters.data.hasAppearance && !!parameters.data.fieldValue);\n super(parameters, { isRenderable });\n }\n\n setPropertyOnSiblings(base, key, value, keyInStorage) {\n const storage = this.annotationStorage;\n for (const element of this._getElementsByName(\n base.name,\n /* skipId = */ base.id\n )) {\n if (element.domElement) {\n element.domElement[key] = value;\n }\n storage.setValue(element.id, { [keyInStorage]: value });\n }\n }\n\n render() {\n const storage = this.annotationStorage;\n const id = this.data.id;\n\n this.container.classList.add(\"textWidgetAnnotation\");\n\n let element = null;\n if (this.renderForms) {\n // NOTE: We cannot set the values using `element.value` below, since it\n // prevents the AnnotationLayer rasterizer in `test/driver.js`\n // from parsing the elements correctly for the reference tests.\n const storedData = storage.getValue(id, {\n value: this.data.fieldValue,\n });\n let textContent = storedData.value || \"\";\n const maxLen = storage.getValue(id, {\n charLimit: this.data.maxLen,\n }).charLimit;\n if (maxLen && textContent.length > maxLen) {\n textContent = textContent.slice(0, maxLen);\n }\n\n let fieldFormattedValues =\n storedData.formattedValue || this.data.textContent?.join(\"\\n\") || null;\n if (fieldFormattedValues && this.data.comb) {\n fieldFormattedValues = fieldFormattedValues.replaceAll(/\\s+/g, \"\");\n }\n\n const elementData = {\n userValue: textContent,\n formattedValue: fieldFormattedValues,\n lastCommittedValue: null,\n commitKey: 1,\n focused: false,\n };\n\n if (this.data.multiLine) {\n element = document.createElement(\"textarea\");\n element.textContent = fieldFormattedValues ?? textContent;\n if (this.data.doNotScroll) {\n element.style.overflowY = \"hidden\";\n }\n } else {\n element = document.createElement(\"input\");\n element.type = \"text\";\n element.setAttribute(\"value\", fieldFormattedValues ?? textContent);\n if (this.data.doNotScroll) {\n element.style.overflowX = \"hidden\";\n }\n }\n if (this.data.hasOwnCanvas) {\n element.hidden = true;\n }\n GetElementsByNameSet.add(element);\n element.setAttribute(\"data-element-id\", id);\n\n element.disabled = this.data.readOnly;\n element.name = this.data.fieldName;\n element.tabIndex = DEFAULT_TAB_INDEX;\n\n this._setRequired(element, this.data.required);\n\n if (maxLen) {\n element.maxLength = maxLen;\n }\n\n element.addEventListener(\"input\", event => {\n storage.setValue(id, { value: event.target.value });\n this.setPropertyOnSiblings(\n element,\n \"value\",\n event.target.value,\n \"value\"\n );\n elementData.formattedValue = null;\n });\n\n element.addEventListener(\"resetform\", event => {\n const defaultValue = this.data.defaultFieldValue ?? \"\";\n element.value = elementData.userValue = defaultValue;\n elementData.formattedValue = null;\n });\n\n let blurListener = event => {\n const { formattedValue } = elementData;\n if (formattedValue !== null && formattedValue !== undefined) {\n event.target.value = formattedValue;\n }\n // Reset the cursor position to the start of the field (issue 12359).\n event.target.scrollLeft = 0;\n };\n\n if (this.enableScripting && this.hasJSActions) {\n element.addEventListener(\"focus\", event => {\n if (elementData.focused) {\n return;\n }\n const { target } = event;\n if (elementData.userValue) {\n target.value = elementData.userValue;\n }\n elementData.lastCommittedValue = target.value;\n elementData.commitKey = 1;\n elementData.focused = true;\n });\n\n element.addEventListener(\"updatefromsandbox\", jsEvent => {\n this.showElementAndHideCanvas(jsEvent.target);\n const actions = {\n value(event) {\n elementData.userValue = event.detail.value ?? \"\";\n storage.setValue(id, { value: elementData.userValue.toString() });\n event.target.value = elementData.userValue;\n },\n formattedValue(event) {\n const { formattedValue } = event.detail;\n elementData.formattedValue = formattedValue;\n if (\n formattedValue !== null &&\n formattedValue !== undefined &&\n event.target !== document.activeElement\n ) {\n // Input hasn't the focus so display formatted string\n event.target.value = formattedValue;\n }\n storage.setValue(id, {\n formattedValue,\n });\n },\n selRange(event) {\n event.target.setSelectionRange(...event.detail.selRange);\n },\n charLimit: event => {\n const { charLimit } = event.detail;\n const { target } = event;\n if (charLimit === 0) {\n target.removeAttribute(\"maxLength\");\n return;\n }\n\n target.setAttribute(\"maxLength\", charLimit);\n let value = elementData.userValue;\n if (!value || value.length <= charLimit) {\n return;\n }\n value = value.slice(0, charLimit);\n target.value = elementData.userValue = value;\n storage.setValue(id, { value });\n\n this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n source: this,\n detail: {\n id,\n name: \"Keystroke\",\n value,\n willCommit: true,\n commitKey: 1,\n selStart: target.selectionStart,\n selEnd: target.selectionEnd,\n },\n });\n },\n };\n this._dispatchEventFromSandbox(actions, jsEvent);\n });\n\n // Even if the field hasn't any actions\n // leaving it can still trigger some actions with Calculate\n element.addEventListener(\"keydown\", event => {\n elementData.commitKey = 1;\n // If the key is one of Escape, Enter then the data are committed.\n // If we've a Tab then data will be committed on blur.\n let commitKey = -1;\n if (event.key === \"Escape\") {\n commitKey = 0;\n } else if (event.key === \"Enter\" && !this.data.multiLine) {\n // When we've a multiline field, \"Enter\" key is a key as the other\n // hence we don't commit the data (Acrobat behaves the same way)\n // (see issue #15627).\n commitKey = 2;\n } else if (event.key === \"Tab\") {\n elementData.commitKey = 3;\n }\n if (commitKey === -1) {\n return;\n }\n const { value } = event.target;\n if (elementData.lastCommittedValue === value) {\n return;\n }\n elementData.lastCommittedValue = value;\n // Save the entered value\n elementData.userValue = value;\n this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n source: this,\n detail: {\n id,\n name: \"Keystroke\",\n value,\n willCommit: true,\n commitKey,\n selStart: event.target.selectionStart,\n selEnd: event.target.selectionEnd,\n },\n });\n });\n const _blurListener = blurListener;\n blurListener = null;\n element.addEventListener(\"blur\", event => {\n if (!elementData.focused || !event.relatedTarget) {\n return;\n }\n elementData.focused = false;\n const { value } = event.target;\n elementData.userValue = value;\n if (elementData.lastCommittedValue !== value) {\n this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n source: this,\n detail: {\n id,\n name: \"Keystroke\",\n value,\n willCommit: true,\n commitKey: elementData.commitKey,\n selStart: event.target.selectionStart,\n selEnd: event.target.selectionEnd,\n },\n });\n }\n _blurListener(event);\n });\n\n if (this.data.actions?.Keystroke) {\n element.addEventListener(\"beforeinput\", event => {\n elementData.lastCommittedValue = null;\n const { data, target } = event;\n const { value, selectionStart, selectionEnd } = target;\n\n let selStart = selectionStart,\n selEnd = selectionEnd;\n\n switch (event.inputType) {\n // https://rawgit.com/w3c/input-events/v1/index.html#interface-InputEvent-Attributes\n case \"deleteWordBackward\": {\n const match = value\n .substring(0, selectionStart)\n .match(/\\w*[^\\w]*$/);\n if (match) {\n selStart -= match[0].length;\n }\n break;\n }\n case \"deleteWordForward\": {\n const match = value\n .substring(selectionStart)\n .match(/^[^\\w]*\\w*/);\n if (match) {\n selEnd += match[0].length;\n }\n break;\n }\n case \"deleteContentBackward\":\n if (selectionStart === selectionEnd) {\n selStart -= 1;\n }\n break;\n case \"deleteContentForward\":\n if (selectionStart === selectionEnd) {\n selEnd += 1;\n }\n break;\n }\n\n // We handle the event ourselves.\n event.preventDefault();\n this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n source: this,\n detail: {\n id,\n name: \"Keystroke\",\n value,\n change: data || \"\",\n willCommit: false,\n selStart,\n selEnd,\n },\n });\n });\n }\n\n this._setEventListeners(\n element,\n elementData,\n [\n [\"focus\", \"Focus\"],\n [\"blur\", \"Blur\"],\n [\"mousedown\", \"Mouse Down\"],\n [\"mouseenter\", \"Mouse Enter\"],\n [\"mouseleave\", \"Mouse Exit\"],\n [\"mouseup\", \"Mouse Up\"],\n ],\n event => event.target.value\n );\n }\n\n if (blurListener) {\n element.addEventListener(\"blur\", blurListener);\n }\n\n if (this.data.comb) {\n const fieldWidth = this.data.rect[2] - this.data.rect[0];\n const combWidth = fieldWidth / maxLen;\n\n element.classList.add(\"comb\");\n element.style.letterSpacing = `calc(${combWidth}px * var(--scale-factor) - 1ch)`;\n }\n } else {\n element = document.createElement(\"div\");\n element.textContent = this.data.fieldValue;\n element.style.verticalAlign = \"middle\";\n element.style.display = \"table-cell\";\n\n if (this.data.hasOwnCanvas) {\n element.hidden = true;\n }\n }\n\n this._setTextStyle(element);\n this._setBackgroundColor(element);\n this._setDefaultPropertiesFromJS(element);\n\n this.container.append(element);\n return this.container;\n }\n}\n\nclass SignatureWidgetAnnotationElement extends WidgetAnnotationElement {\n constructor(parameters) {\n super(parameters, { isRenderable: !!parameters.data.hasOwnCanvas });\n }\n}\n\nclass CheckboxWidgetAnnotationElement extends WidgetAnnotationElement {\n constructor(parameters) {\n super(parameters, { isRenderable: parameters.renderForms });\n }\n\n render() {\n const storage = this.annotationStorage;\n const data = this.data;\n const id = data.id;\n let value = storage.getValue(id, {\n value: data.exportValue === data.fieldValue,\n }).value;\n if (typeof value === \"string\") {\n // The value has been changed through js and set in annotationStorage.\n value = value !== \"Off\";\n storage.setValue(id, { value });\n }\n\n this.container.classList.add(\"buttonWidgetAnnotation\", \"checkBox\");\n\n const element = document.createElement(\"input\");\n GetElementsByNameSet.add(element);\n element.setAttribute(\"data-element-id\", id);\n\n element.disabled = data.readOnly;\n this._setRequired(element, this.data.required);\n element.type = \"checkbox\";\n element.name = data.fieldName;\n if (value) {\n element.setAttribute(\"checked\", true);\n }\n element.setAttribute(\"exportValue\", data.exportValue);\n element.tabIndex = DEFAULT_TAB_INDEX;\n\n element.addEventListener(\"change\", event => {\n const { name, checked } = event.target;\n for (const checkbox of this._getElementsByName(name, /* skipId = */ id)) {\n const curChecked = checked && checkbox.exportValue === data.exportValue;\n if (checkbox.domElement) {\n checkbox.domElement.checked = curChecked;\n }\n storage.setValue(checkbox.id, { value: curChecked });\n }\n storage.setValue(id, { value: checked });\n });\n\n element.addEventListener(\"resetform\", event => {\n const defaultValue = data.defaultFieldValue || \"Off\";\n event.target.checked = defaultValue === data.exportValue;\n });\n\n if (this.enableScripting && this.hasJSActions) {\n element.addEventListener(\"updatefromsandbox\", jsEvent => {\n const actions = {\n value(event) {\n event.target.checked = event.detail.value !== \"Off\";\n storage.setValue(id, { value: event.target.checked });\n },\n };\n this._dispatchEventFromSandbox(actions, jsEvent);\n });\n\n this._setEventListeners(\n element,\n null,\n [\n [\"change\", \"Validate\"],\n [\"change\", \"Action\"],\n [\"focus\", \"Focus\"],\n [\"blur\", \"Blur\"],\n [\"mousedown\", \"Mouse Down\"],\n [\"mouseenter\", \"Mouse Enter\"],\n [\"mouseleave\", \"Mouse Exit\"],\n [\"mouseup\", \"Mouse Up\"],\n ],\n event => event.target.checked\n );\n }\n\n this._setBackgroundColor(element);\n this._setDefaultPropertiesFromJS(element);\n\n this.container.append(element);\n return this.container;\n }\n}\n\nclass RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement {\n constructor(parameters) {\n super(parameters, { isRenderable: parameters.renderForms });\n }\n\n render() {\n this.container.classList.add(\"buttonWidgetAnnotation\", \"radioButton\");\n const storage = this.annotationStorage;\n const data = this.data;\n const id = data.id;\n let value = storage.getValue(id, {\n value: data.fieldValue === data.buttonValue,\n }).value;\n if (typeof value === \"string\") {\n // The value has been changed through js and set in annotationStorage.\n value = value !== data.buttonValue;\n storage.setValue(id, { value });\n }\n\n const element = document.createElement(\"input\");\n GetElementsByNameSet.add(element);\n element.setAttribute(\"data-element-id\", id);\n\n element.disabled = data.readOnly;\n this._setRequired(element, this.data.required);\n element.type = \"radio\";\n element.name = data.fieldName;\n if (value) {\n element.setAttribute(\"checked\", true);\n }\n element.tabIndex = DEFAULT_TAB_INDEX;\n\n element.addEventListener(\"change\", event => {\n const { name, checked } = event.target;\n for (const radio of this._getElementsByName(name, /* skipId = */ id)) {\n storage.setValue(radio.id, { value: false });\n }\n storage.setValue(id, { value: checked });\n });\n\n element.addEventListener(\"resetform\", event => {\n const defaultValue = data.defaultFieldValue;\n event.target.checked =\n defaultValue !== null &&\n defaultValue !== undefined &&\n defaultValue === data.buttonValue;\n });\n\n if (this.enableScripting && this.hasJSActions) {\n const pdfButtonValue = data.buttonValue;\n element.addEventListener(\"updatefromsandbox\", jsEvent => {\n const actions = {\n value: event => {\n const checked = pdfButtonValue === event.detail.value;\n for (const radio of this._getElementsByName(event.target.name)) {\n const curChecked = checked && radio.id === id;\n if (radio.domElement) {\n radio.domElement.checked = curChecked;\n }\n storage.setValue(radio.id, { value: curChecked });\n }\n },\n };\n this._dispatchEventFromSandbox(actions, jsEvent);\n });\n\n this._setEventListeners(\n element,\n null,\n [\n [\"change\", \"Validate\"],\n [\"change\", \"Action\"],\n [\"focus\", \"Focus\"],\n [\"blur\", \"Blur\"],\n [\"mousedown\", \"Mouse Down\"],\n [\"mouseenter\", \"Mouse Enter\"],\n [\"mouseleave\", \"Mouse Exit\"],\n [\"mouseup\", \"Mouse Up\"],\n ],\n event => event.target.checked\n );\n }\n\n this._setBackgroundColor(element);\n this._setDefaultPropertiesFromJS(element);\n\n this.container.append(element);\n return this.container;\n }\n}\n\nclass PushButtonWidgetAnnotationElement extends LinkAnnotationElement {\n constructor(parameters) {\n super(parameters, { ignoreBorder: parameters.data.hasAppearance });\n }\n\n render() {\n // The rendering and functionality of a push button widget annotation is\n // equal to that of a link annotation, but may have more functionality, such\n // as performing actions on form fields (resetting, submitting, et cetera).\n const container = super.render();\n container.classList.add(\"buttonWidgetAnnotation\", \"pushButton\");\n\n if (this.data.alternativeText) {\n container.title = this.data.alternativeText;\n }\n\n const linkElement = container.lastChild;\n if (this.enableScripting && this.hasJSActions && linkElement) {\n this._setDefaultPropertiesFromJS(linkElement);\n\n linkElement.addEventListener(\"updatefromsandbox\", jsEvent => {\n this._dispatchEventFromSandbox({}, jsEvent);\n });\n }\n\n return container;\n }\n}\n\nclass ChoiceWidgetAnnotationElement extends WidgetAnnotationElement {\n constructor(parameters) {\n super(parameters, { isRenderable: parameters.renderForms });\n }\n\n render() {\n this.container.classList.add(\"choiceWidgetAnnotation\");\n const storage = this.annotationStorage;\n const id = this.data.id;\n\n const storedData = storage.getValue(id, {\n value: this.data.fieldValue,\n });\n\n const selectElement = document.createElement(\"select\");\n GetElementsByNameSet.add(selectElement);\n selectElement.setAttribute(\"data-element-id\", id);\n\n selectElement.disabled = this.data.readOnly;\n this._setRequired(selectElement, this.data.required);\n selectElement.name = this.data.fieldName;\n selectElement.tabIndex = DEFAULT_TAB_INDEX;\n\n let addAnEmptyEntry = this.data.combo && this.data.options.length > 0;\n\n if (!this.data.combo) {\n // List boxes have a size and (optionally) multiple selection.\n selectElement.size = this.data.options.length;\n if (this.data.multiSelect) {\n selectElement.multiple = true;\n }\n }\n\n selectElement.addEventListener(\"resetform\", event => {\n const defaultValue = this.data.defaultFieldValue;\n for (const option of selectElement.options) {\n option.selected = option.value === defaultValue;\n }\n });\n\n // Insert the options into the choice field.\n for (const option of this.data.options) {\n const optionElement = document.createElement(\"option\");\n optionElement.textContent = option.displayValue;\n optionElement.value = option.exportValue;\n if (storedData.value.includes(option.exportValue)) {\n optionElement.setAttribute(\"selected\", true);\n addAnEmptyEntry = false;\n }\n selectElement.append(optionElement);\n }\n\n let removeEmptyEntry = null;\n if (addAnEmptyEntry) {\n const noneOptionElement = document.createElement(\"option\");\n noneOptionElement.value = \" \";\n noneOptionElement.setAttribute(\"hidden\", true);\n noneOptionElement.setAttribute(\"selected\", true);\n selectElement.prepend(noneOptionElement);\n\n removeEmptyEntry = () => {\n noneOptionElement.remove();\n selectElement.removeEventListener(\"input\", removeEmptyEntry);\n removeEmptyEntry = null;\n };\n selectElement.addEventListener(\"input\", removeEmptyEntry);\n }\n\n const getValue = isExport => {\n const name = isExport ? \"value\" : \"textContent\";\n const { options, multiple } = selectElement;\n if (!multiple) {\n return options.selectedIndex === -1\n ? null\n : options[options.selectedIndex][name];\n }\n return Array.prototype.filter\n .call(options, option => option.selected)\n .map(option => option[name]);\n };\n\n let selectedValues = getValue(/* isExport */ false);\n\n const getItems = event => {\n const options = event.target.options;\n return Array.prototype.map.call(options, option => {\n return { displayValue: option.textContent, exportValue: option.value };\n });\n };\n\n if (this.enableScripting && this.hasJSActions) {\n selectElement.addEventListener(\"updatefromsandbox\", jsEvent => {\n const actions = {\n value(event) {\n removeEmptyEntry?.();\n const value = event.detail.value;\n const values = new Set(Array.isArray(value) ? value : [value]);\n for (const option of selectElement.options) {\n option.selected = values.has(option.value);\n }\n storage.setValue(id, {\n value: getValue(/* isExport */ true),\n });\n selectedValues = getValue(/* isExport */ false);\n },\n multipleSelection(event) {\n selectElement.multiple = true;\n },\n remove(event) {\n const options = selectElement.options;\n const index = event.detail.remove;\n options[index].selected = false;\n selectElement.remove(index);\n if (options.length > 0) {\n const i = Array.prototype.findIndex.call(\n options,\n option => option.selected\n );\n if (i === -1) {\n options[0].selected = true;\n }\n }\n storage.setValue(id, {\n value: getValue(/* isExport */ true),\n items: getItems(event),\n });\n selectedValues = getValue(/* isExport */ false);\n },\n clear(event) {\n while (selectElement.length !== 0) {\n selectElement.remove(0);\n }\n storage.setValue(id, { value: null, items: [] });\n selectedValues = getValue(/* isExport */ false);\n },\n insert(event) {\n const { index, displayValue, exportValue } = event.detail.insert;\n const selectChild = selectElement.children[index];\n const optionElement = document.createElement(\"option\");\n optionElement.textContent = displayValue;\n optionElement.value = exportValue;\n\n if (selectChild) {\n selectChild.before(optionElement);\n } else {\n selectElement.append(optionElement);\n }\n storage.setValue(id, {\n value: getValue(/* isExport */ true),\n items: getItems(event),\n });\n selectedValues = getValue(/* isExport */ false);\n },\n items(event) {\n const { items } = event.detail;\n while (selectElement.length !== 0) {\n selectElement.remove(0);\n }\n for (const item of items) {\n const { displayValue, exportValue } = item;\n const optionElement = document.createElement(\"option\");\n optionElement.textContent = displayValue;\n optionElement.value = exportValue;\n selectElement.append(optionElement);\n }\n if (selectElement.options.length > 0) {\n selectElement.options[0].selected = true;\n }\n storage.setValue(id, {\n value: getValue(/* isExport */ true),\n items: getItems(event),\n });\n selectedValues = getValue(/* isExport */ false);\n },\n indices(event) {\n const indices = new Set(event.detail.indices);\n for (const option of event.target.options) {\n option.selected = indices.has(option.index);\n }\n storage.setValue(id, {\n value: getValue(/* isExport */ true),\n });\n selectedValues = getValue(/* isExport */ false);\n },\n editable(event) {\n event.target.disabled = !event.detail.editable;\n },\n };\n this._dispatchEventFromSandbox(actions, jsEvent);\n });\n\n selectElement.addEventListener(\"input\", event => {\n const exportValue = getValue(/* isExport */ true);\n storage.setValue(id, { value: exportValue });\n\n event.preventDefault();\n\n this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n source: this,\n detail: {\n id,\n name: \"Keystroke\",\n value: selectedValues,\n changeEx: exportValue,\n willCommit: false,\n commitKey: 1,\n keyDown: false,\n },\n });\n });\n\n this._setEventListeners(\n selectElement,\n null,\n [\n [\"focus\", \"Focus\"],\n [\"blur\", \"Blur\"],\n [\"mousedown\", \"Mouse Down\"],\n [\"mouseenter\", \"Mouse Enter\"],\n [\"mouseleave\", \"Mouse Exit\"],\n [\"mouseup\", \"Mouse Up\"],\n [\"input\", \"Action\"],\n [\"input\", \"Validate\"],\n ],\n event => event.target.value\n );\n } else {\n selectElement.addEventListener(\"input\", function (event) {\n storage.setValue(id, { value: getValue(/* isExport */ true) });\n });\n }\n\n if (this.data.combo) {\n this._setTextStyle(selectElement);\n } else {\n // Just use the default font size...\n // it's a bit hard to guess what is a good size.\n }\n this._setBackgroundColor(selectElement);\n this._setDefaultPropertiesFromJS(selectElement);\n\n this.container.append(selectElement);\n return this.container;\n }\n}\n\nclass PopupAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n const { data, elements } = parameters;\n super(parameters, { isRenderable: AnnotationElement._hasPopupData(data) });\n this.elements = elements;\n }\n\n render() {\n this.container.classList.add(\"popupAnnotation\");\n\n const popup = new PopupElement({\n container: this.container,\n color: this.data.color,\n titleObj: this.data.titleObj,\n modificationDate: this.data.modificationDate,\n contentsObj: this.data.contentsObj,\n richText: this.data.richText,\n rect: this.data.rect,\n parentRect: this.data.parentRect || null,\n parent: this.parent,\n elements: this.elements,\n open: this.data.open,\n });\n\n const elementIds = [];\n for (const element of this.elements) {\n element.popup = popup;\n elementIds.push(element.data.id);\n element.addHighlightArea();\n }\n\n this.container.setAttribute(\n \"aria-controls\",\n elementIds.map(id => `${AnnotationPrefix}${id}`).join(\",\")\n );\n\n return this.container;\n }\n}\n\nclass PopupElement {\n #boundKeyDown = this.#keyDown.bind(this);\n\n #boundHide = this.#hide.bind(this);\n\n #boundShow = this.#show.bind(this);\n\n #boundToggle = this.#toggle.bind(this);\n\n #color = null;\n\n #container = null;\n\n #contentsObj = null;\n\n #dateObj = null;\n\n #elements = null;\n\n #parent = null;\n\n #parentRect = null;\n\n #pinned = false;\n\n #popup = null;\n\n #rect = null;\n\n #richText = null;\n\n #titleObj = null;\n\n #wasVisible = false;\n\n constructor({\n container,\n color,\n elements,\n titleObj,\n modificationDate,\n contentsObj,\n richText,\n parent,\n rect,\n parentRect,\n open,\n }) {\n this.#container = container;\n this.#titleObj = titleObj;\n this.#contentsObj = contentsObj;\n this.#richText = richText;\n this.#parent = parent;\n this.#color = color;\n this.#rect = rect;\n this.#parentRect = parentRect;\n this.#elements = elements;\n\n // The modification date is shown in the popup instead of the creation\n // date if it is available and can be parsed correctly, which is\n // consistent with other viewers such as Adobe Acrobat.\n this.#dateObj = PDFDateString.toDateObject(modificationDate);\n\n this.trigger = elements.flatMap(e => e.getElementsToTriggerPopup());\n // Attach the event listeners to the trigger element.\n for (const element of this.trigger) {\n element.addEventListener(\"click\", this.#boundToggle);\n element.addEventListener(\"mouseenter\", this.#boundShow);\n element.addEventListener(\"mouseleave\", this.#boundHide);\n element.classList.add(\"popupTriggerArea\");\n }\n\n // Attach the event listener to toggle the popup with the keyboard.\n for (const element of elements) {\n element.container?.addEventListener(\"keydown\", this.#boundKeyDown);\n }\n\n this.#container.hidden = true;\n if (open) {\n this.#toggle();\n }\n\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n // Since the popup is lazily created, we need to ensure that it'll be\n // created and displayed during reference tests.\n this.#parent.popupShow.push(async () => {\n if (this.#container.hidden) {\n this.#show();\n }\n });\n }\n }\n\n render() {\n if (this.#popup) {\n return;\n }\n\n const {\n page: { view },\n viewport: {\n rawDims: { pageWidth, pageHeight, pageX, pageY },\n },\n } = this.#parent;\n const popup = (this.#popup = document.createElement(\"div\"));\n popup.className = \"popup\";\n\n if (this.#color) {\n const baseColor = (popup.style.outlineColor = Util.makeHexColor(\n ...this.#color\n ));\n if (\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n CSS.supports(\"background-color\", \"color-mix(in srgb, red 30%, white)\")\n ) {\n popup.style.backgroundColor = `color-mix(in srgb, ${baseColor} 30%, white)`;\n } else {\n // color-mix isn't supported in some browsers hence this version.\n // See https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/color-mix#browser_compatibility\n // TODO: Use color-mix when it's supported everywhere.\n // Enlighten the color.\n const BACKGROUND_ENLIGHT = 0.7;\n popup.style.backgroundColor = Util.makeHexColor(\n ...this.#color.map(c =>\n Math.floor(BACKGROUND_ENLIGHT * (255 - c) + c)\n )\n );\n }\n }\n\n const header = document.createElement(\"span\");\n header.className = \"header\";\n const title = document.createElement(\"h1\");\n header.append(title);\n ({ dir: title.dir, str: title.textContent } = this.#titleObj);\n popup.append(header);\n\n if (this.#dateObj) {\n const modificationDate = document.createElement(\"span\");\n modificationDate.classList.add(\"popupDate\");\n modificationDate.setAttribute(\n \"data-l10n-id\",\n \"pdfjs-annotation-date-string\"\n );\n modificationDate.setAttribute(\n \"data-l10n-args\",\n JSON.stringify({\n date: this.#dateObj.toLocaleDateString(),\n time: this.#dateObj.toLocaleTimeString(),\n })\n );\n header.append(modificationDate);\n }\n\n const contentsObj = this.#contentsObj;\n const richText = this.#richText;\n if (\n richText?.str &&\n (!contentsObj?.str || contentsObj.str === richText.str)\n ) {\n XfaLayer.render({\n xfaHtml: richText.html,\n intent: \"richText\",\n div: popup,\n });\n popup.lastChild.classList.add(\"richText\", \"popupContent\");\n } else {\n const contents = this._formatContents(contentsObj);\n popup.append(contents);\n }\n\n let useParentRect = !!this.#parentRect;\n let rect = useParentRect ? this.#parentRect : this.#rect;\n for (const element of this.#elements) {\n if (!rect || Util.intersect(element.data.rect, rect) !== null) {\n rect = element.data.rect;\n useParentRect = true;\n break;\n }\n }\n\n const normalizedRect = Util.normalizeRect([\n rect[0],\n view[3] - rect[1] + view[1],\n rect[2],\n view[3] - rect[3] + view[1],\n ]);\n\n const HORIZONTAL_SPACE_AFTER_ANNOTATION = 5;\n const parentWidth = useParentRect\n ? rect[2] - rect[0] + HORIZONTAL_SPACE_AFTER_ANNOTATION\n : 0;\n const popupLeft = normalizedRect[0] + parentWidth;\n const popupTop = normalizedRect[1];\n\n const { style } = this.#container;\n style.left = `${(100 * (popupLeft - pageX)) / pageWidth}%`;\n style.top = `${(100 * (popupTop - pageY)) / pageHeight}%`;\n\n this.#container.append(popup);\n }\n\n /**\n * Format the contents of the popup by adding newlines where necessary.\n *\n * @private\n * @param {Object} contentsObj\n * @memberof PopupElement\n * @returns {HTMLParagraphElement}\n */\n _formatContents({ str, dir }) {\n const p = document.createElement(\"p\");\n p.classList.add(\"popupContent\");\n p.dir = dir;\n const lines = str.split(/(?:\\r\\n?|\\n)/);\n for (let i = 0, ii = lines.length; i < ii; ++i) {\n const line = lines[i];\n p.append(document.createTextNode(line));\n if (i < ii - 1) {\n p.append(document.createElement(\"br\"));\n }\n }\n return p;\n }\n\n #keyDown(event) {\n if (event.altKey || event.shiftKey || event.ctrlKey || event.metaKey) {\n return;\n }\n\n if (event.key === \"Enter\" || (event.key === \"Escape\" && this.#pinned)) {\n this.#toggle();\n }\n }\n\n /**\n * Toggle the visibility of the popup.\n */\n #toggle() {\n this.#pinned = !this.#pinned;\n if (this.#pinned) {\n this.#show();\n this.#container.addEventListener(\"click\", this.#boundToggle);\n this.#container.addEventListener(\"keydown\", this.#boundKeyDown);\n } else {\n this.#hide();\n this.#container.removeEventListener(\"click\", this.#boundToggle);\n this.#container.removeEventListener(\"keydown\", this.#boundKeyDown);\n }\n }\n\n /**\n * Show the popup.\n */\n #show() {\n if (!this.#popup) {\n this.render();\n }\n if (!this.isVisible) {\n this.#container.hidden = false;\n this.#container.style.zIndex =\n parseInt(this.#container.style.zIndex) + 1000;\n } else if (this.#pinned) {\n this.#container.classList.add(\"focused\");\n }\n }\n\n /**\n * Hide the popup.\n */\n #hide() {\n this.#container.classList.remove(\"focused\");\n if (this.#pinned || !this.isVisible) {\n return;\n }\n this.#container.hidden = true;\n this.#container.style.zIndex =\n parseInt(this.#container.style.zIndex) - 1000;\n }\n\n forceHide() {\n this.#wasVisible = this.isVisible;\n if (!this.#wasVisible) {\n return;\n }\n this.#container.hidden = true;\n }\n\n maybeShow() {\n if (!this.#wasVisible) {\n return;\n }\n this.#wasVisible = false;\n this.#container.hidden = false;\n }\n\n get isVisible() {\n return this.#container.hidden === false;\n }\n}\n\nclass FreeTextAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n super(parameters, { isRenderable: true, ignoreBorder: true });\n this.textContent = parameters.data.textContent;\n this.textPosition = parameters.data.textPosition;\n this.annotationEditorType = AnnotationEditorType.FREETEXT;\n }\n\n render() {\n this.container.classList.add(\"freeTextAnnotation\");\n\n if (this.textContent) {\n const content = document.createElement(\"div\");\n content.classList.add(\"annotationTextContent\");\n content.setAttribute(\"role\", \"comment\");\n for (const line of this.textContent) {\n const lineSpan = document.createElement(\"span\");\n lineSpan.textContent = line;\n content.append(lineSpan);\n }\n this.container.append(content);\n }\n\n if (!this.data.popupRef && this.hasPopupData) {\n this._createPopup();\n }\n\n this._editOnDoubleClick();\n\n return this.container;\n }\n\n get _isEditable() {\n return this.data.hasOwnCanvas;\n }\n}\n\nclass LineAnnotationElement extends AnnotationElement {\n #line = null;\n\n constructor(parameters) {\n super(parameters, { isRenderable: true, ignoreBorder: true });\n }\n\n render() {\n this.container.classList.add(\"lineAnnotation\");\n\n // Create an invisible line with the same starting and ending coordinates\n // that acts as the trigger for the popup. Only the line itself should\n // trigger the popup, not the entire container.\n const data = this.data;\n const { width, height } = getRectDims(data.rect);\n const svg = this.svgFactory.create(\n width,\n height,\n /* skipDimensions = */ true\n );\n\n // PDF coordinates are calculated from a bottom left origin, so transform\n // the line coordinates to a top left origin for the SVG element.\n const line = (this.#line = this.svgFactory.createElement(\"svg:line\"));\n line.setAttribute(\"x1\", data.rect[2] - data.lineCoordinates[0]);\n line.setAttribute(\"y1\", data.rect[3] - data.lineCoordinates[1]);\n line.setAttribute(\"x2\", data.rect[2] - data.lineCoordinates[2]);\n line.setAttribute(\"y2\", data.rect[3] - data.lineCoordinates[3]);\n // Ensure that the 'stroke-width' is always non-zero, since otherwise it\n // won't be possible to open/close the popup (note e.g. issue 11122).\n line.setAttribute(\"stroke-width\", data.borderStyle.width || 1);\n line.setAttribute(\"stroke\", \"transparent\");\n line.setAttribute(\"fill\", \"transparent\");\n\n svg.append(line);\n this.container.append(svg);\n\n // Create the popup ourselves so that we can bind it to the line instead\n // of to the entire container (which is the default).\n if (!data.popupRef && this.hasPopupData) {\n this._createPopup();\n }\n\n return this.container;\n }\n\n getElementsToTriggerPopup() {\n return this.#line;\n }\n\n addHighlightArea() {\n this.container.classList.add(\"highlightArea\");\n }\n}\n\nclass SquareAnnotationElement extends AnnotationElement {\n #square = null;\n\n constructor(parameters) {\n super(parameters, { isRenderable: true, ignoreBorder: true });\n }\n\n render() {\n this.container.classList.add(\"squareAnnotation\");\n\n // Create an invisible square with the same rectangle that acts as the\n // trigger for the popup. Only the square itself should trigger the\n // popup, not the entire container.\n const data = this.data;\n const { width, height } = getRectDims(data.rect);\n const svg = this.svgFactory.create(\n width,\n height,\n /* skipDimensions = */ true\n );\n\n // The browser draws half of the borders inside the square and half of\n // the borders outside the square by default. This behavior cannot be\n // changed programmatically, so correct for that here.\n const borderWidth = data.borderStyle.width;\n const square = (this.#square = this.svgFactory.createElement(\"svg:rect\"));\n square.setAttribute(\"x\", borderWidth / 2);\n square.setAttribute(\"y\", borderWidth / 2);\n square.setAttribute(\"width\", width - borderWidth);\n square.setAttribute(\"height\", height - borderWidth);\n // Ensure that the 'stroke-width' is always non-zero, since otherwise it\n // won't be possible to open/close the popup (note e.g. issue 11122).\n square.setAttribute(\"stroke-width\", borderWidth || 1);\n square.setAttribute(\"stroke\", \"transparent\");\n square.setAttribute(\"fill\", \"transparent\");\n\n svg.append(square);\n this.container.append(svg);\n\n // Create the popup ourselves so that we can bind it to the square instead\n // of to the entire container (which is the default).\n if (!data.popupRef && this.hasPopupData) {\n this._createPopup();\n }\n\n return this.container;\n }\n\n getElementsToTriggerPopup() {\n return this.#square;\n }\n\n addHighlightArea() {\n this.container.classList.add(\"highlightArea\");\n }\n}\n\nclass CircleAnnotationElement extends AnnotationElement {\n #circle = null;\n\n constructor(parameters) {\n super(parameters, { isRenderable: true, ignoreBorder: true });\n }\n\n render() {\n this.container.classList.add(\"circleAnnotation\");\n\n // Create an invisible circle with the same ellipse that acts as the\n // trigger for the popup. Only the circle itself should trigger the\n // popup, not the entire container.\n const data = this.data;\n const { width, height } = getRectDims(data.rect);\n const svg = this.svgFactory.create(\n width,\n height,\n /* skipDimensions = */ true\n );\n\n // The browser draws half of the borders inside the circle and half of\n // the borders outside the circle by default. This behavior cannot be\n // changed programmatically, so correct for that here.\n const borderWidth = data.borderStyle.width;\n const circle = (this.#circle =\n this.svgFactory.createElement(\"svg:ellipse\"));\n circle.setAttribute(\"cx\", width / 2);\n circle.setAttribute(\"cy\", height / 2);\n circle.setAttribute(\"rx\", width / 2 - borderWidth / 2);\n circle.setAttribute(\"ry\", height / 2 - borderWidth / 2);\n // Ensure that the 'stroke-width' is always non-zero, since otherwise it\n // won't be possible to open/close the popup (note e.g. issue 11122).\n circle.setAttribute(\"stroke-width\", borderWidth || 1);\n circle.setAttribute(\"stroke\", \"transparent\");\n circle.setAttribute(\"fill\", \"transparent\");\n\n svg.append(circle);\n this.container.append(svg);\n\n // Create the popup ourselves so that we can bind it to the circle instead\n // of to the entire container (which is the default).\n if (!data.popupRef && this.hasPopupData) {\n this._createPopup();\n }\n\n return this.container;\n }\n\n getElementsToTriggerPopup() {\n return this.#circle;\n }\n\n addHighlightArea() {\n this.container.classList.add(\"highlightArea\");\n }\n}\n\nclass PolylineAnnotationElement extends AnnotationElement {\n #polyline = null;\n\n constructor(parameters) {\n super(parameters, { isRenderable: true, ignoreBorder: true });\n\n this.containerClassName = \"polylineAnnotation\";\n this.svgElementName = \"svg:polyline\";\n }\n\n render() {\n this.container.classList.add(this.containerClassName);\n\n // Create an invisible polyline with the same points that acts as the\n // trigger for the popup. Only the polyline itself should trigger the\n // popup, not the entire container.\n const data = this.data;\n const { width, height } = getRectDims(data.rect);\n const svg = this.svgFactory.create(\n width,\n height,\n /* skipDimensions = */ true\n );\n\n // Convert the vertices array to a single points string that the SVG\n // polyline element expects (\"x1,y1 x2,y2 ...\"). PDF coordinates are\n // calculated from a bottom left origin, so transform the polyline\n // coordinates to a top left origin for the SVG element.\n let points = [];\n for (const coordinate of data.vertices) {\n const x = coordinate.x - data.rect[0];\n const y = data.rect[3] - coordinate.y;\n points.push(x + \",\" + y);\n }\n points = points.join(\" \");\n\n const polyline = (this.#polyline = this.svgFactory.createElement(\n this.svgElementName\n ));\n polyline.setAttribute(\"points\", points);\n // Ensure that the 'stroke-width' is always non-zero, since otherwise it\n // won't be possible to open/close the popup (note e.g. issue 11122).\n polyline.setAttribute(\"stroke-width\", data.borderStyle.width || 1);\n polyline.setAttribute(\"stroke\", \"transparent\");\n polyline.setAttribute(\"fill\", \"transparent\");\n\n svg.append(polyline);\n this.container.append(svg);\n\n // Create the popup ourselves so that we can bind it to the polyline\n // instead of to the entire container (which is the default).\n if (!data.popupRef && this.hasPopupData) {\n this._createPopup();\n }\n\n return this.container;\n }\n\n getElementsToTriggerPopup() {\n return this.#polyline;\n }\n\n addHighlightArea() {\n this.container.classList.add(\"highlightArea\");\n }\n}\n\nclass PolygonAnnotationElement extends PolylineAnnotationElement {\n constructor(parameters) {\n // Polygons are specific forms of polylines, so reuse their logic.\n super(parameters);\n\n this.containerClassName = \"polygonAnnotation\";\n this.svgElementName = \"svg:polygon\";\n }\n}\n\nclass CaretAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n super(parameters, { isRenderable: true, ignoreBorder: true });\n }\n\n render() {\n this.container.classList.add(\"caretAnnotation\");\n\n if (!this.data.popupRef && this.hasPopupData) {\n this._createPopup();\n }\n return this.container;\n }\n}\n\nclass InkAnnotationElement extends AnnotationElement {\n #polylines = [];\n\n constructor(parameters) {\n super(parameters, { isRenderable: true, ignoreBorder: true });\n\n this.containerClassName = \"inkAnnotation\";\n\n // Use the polyline SVG element since it allows us to use coordinates\n // directly and to draw both straight lines and curves.\n this.svgElementName = \"svg:polyline\";\n this.annotationEditorType = AnnotationEditorType.INK;\n }\n\n render() {\n this.container.classList.add(this.containerClassName);\n\n // Create an invisible polyline with the same points that acts as the\n // trigger for the popup.\n const data = this.data;\n const { width, height } = getRectDims(data.rect);\n const svg = this.svgFactory.create(\n width,\n height,\n /* skipDimensions = */ true\n );\n\n for (const inkList of data.inkLists) {\n // Convert the ink list to a single points string that the SVG\n // polyline element expects (\"x1,y1 x2,y2 ...\"). PDF coordinates are\n // calculated from a bottom left origin, so transform the polyline\n // coordinates to a top left origin for the SVG element.\n let points = [];\n for (const coordinate of inkList) {\n const x = coordinate.x - data.rect[0];\n const y = data.rect[3] - coordinate.y;\n points.push(`${x},${y}`);\n }\n points = points.join(\" \");\n\n const polyline = this.svgFactory.createElement(this.svgElementName);\n this.#polylines.push(polyline);\n polyline.setAttribute(\"points\", points);\n // Ensure that the 'stroke-width' is always non-zero, since otherwise it\n // won't be possible to open/close the popup (note e.g. issue 11122).\n polyline.setAttribute(\"stroke-width\", data.borderStyle.width || 1);\n polyline.setAttribute(\"stroke\", \"transparent\");\n polyline.setAttribute(\"fill\", \"transparent\");\n\n // Create the popup ourselves so that we can bind it to the polyline\n // instead of to the entire container (which is the default).\n if (!data.popupRef && this.hasPopupData) {\n this._createPopup();\n }\n\n svg.append(polyline);\n }\n\n this.container.append(svg);\n return this.container;\n }\n\n getElementsToTriggerPopup() {\n return this.#polylines;\n }\n\n addHighlightArea() {\n this.container.classList.add(\"highlightArea\");\n }\n}\n\nclass HighlightAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n super(parameters, {\n isRenderable: true,\n ignoreBorder: true,\n createQuadrilaterals: true,\n });\n }\n\n render() {\n if (!this.data.popupRef && this.hasPopupData) {\n this._createPopup();\n }\n\n this.container.classList.add(\"highlightAnnotation\");\n return this.container;\n }\n}\n\nclass UnderlineAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n super(parameters, {\n isRenderable: true,\n ignoreBorder: true,\n createQuadrilaterals: true,\n });\n }\n\n render() {\n if (!this.data.popupRef && this.hasPopupData) {\n this._createPopup();\n }\n\n this.container.classList.add(\"underlineAnnotation\");\n return this.container;\n }\n}\n\nclass SquigglyAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n super(parameters, {\n isRenderable: true,\n ignoreBorder: true,\n createQuadrilaterals: true,\n });\n }\n\n render() {\n if (!this.data.popupRef && this.hasPopupData) {\n this._createPopup();\n }\n\n this.container.classList.add(\"squigglyAnnotation\");\n return this.container;\n }\n}\n\nclass StrikeOutAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n super(parameters, {\n isRenderable: true,\n ignoreBorder: true,\n createQuadrilaterals: true,\n });\n }\n\n render() {\n if (!this.data.popupRef && this.hasPopupData) {\n this._createPopup();\n }\n\n this.container.classList.add(\"strikeoutAnnotation\");\n return this.container;\n }\n}\n\nclass StampAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n super(parameters, { isRenderable: true, ignoreBorder: true });\n }\n\n render() {\n this.container.classList.add(\"stampAnnotation\");\n\n if (!this.data.popupRef && this.hasPopupData) {\n this._createPopup();\n }\n return this.container;\n }\n}\n\nclass FileAttachmentAnnotationElement extends AnnotationElement {\n #trigger = null;\n\n constructor(parameters) {\n super(parameters, { isRenderable: true });\n\n const { filename, content } = this.data.file;\n this.filename = getFilenameFromUrl(filename, /* onlyStripPath = */ true);\n this.content = content;\n\n this.linkService.eventBus?.dispatch(\"fileattachmentannotation\", {\n source: this,\n filename,\n content,\n });\n }\n\n render() {\n this.container.classList.add(\"fileAttachmentAnnotation\");\n\n const { container, data } = this;\n let trigger;\n if (data.hasAppearance || data.fillAlpha === 0) {\n trigger = document.createElement(\"div\");\n } else {\n // Unfortunately it seems that it's not clearly specified exactly what\n // names are actually valid, since Table 184 contains:\n // Conforming readers shall provide predefined icon appearances for at\n // least the following standard names: GraphPushPin, PaperclipTag.\n // Additional names may be supported as well. Default value: PushPin.\n trigger = document.createElement(\"img\");\n trigger.src = `${this.imageResourcesPath}annotation-${\n /paperclip/i.test(data.name) ? \"paperclip\" : \"pushpin\"\n }.svg`;\n\n if (data.fillAlpha && data.fillAlpha < 1) {\n trigger.style = `filter: opacity(${Math.round(\n data.fillAlpha * 100\n )}%);`;\n\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n this.container.classList.add(\"hasFillAlpha\");\n }\n }\n }\n trigger.addEventListener(\"dblclick\", this.#download.bind(this));\n this.#trigger = trigger;\n\n const { isMac } = FeatureTest.platform;\n container.addEventListener(\"keydown\", evt => {\n if (evt.key === \"Enter\" && (isMac ? evt.metaKey : evt.ctrlKey)) {\n this.#download();\n }\n });\n\n if (!data.popupRef && this.hasPopupData) {\n this._createPopup();\n } else {\n trigger.classList.add(\"popupTriggerArea\");\n }\n\n container.append(trigger);\n return container;\n }\n\n getElementsToTriggerPopup() {\n return this.#trigger;\n }\n\n addHighlightArea() {\n this.container.classList.add(\"highlightArea\");\n }\n\n /**\n * Download the file attachment associated with this annotation.\n */\n #download() {\n this.downloadManager?.openOrDownloadData(this.content, this.filename);\n }\n}\n\n/**\n * @typedef {Object} AnnotationLayerParameters\n * @property {PageViewport} viewport\n * @property {HTMLDivElement} div\n * @property {Array} annotations\n * @property {PDFPageProxy} page\n * @property {IPDFLinkService} linkService\n * @property {IDownloadManager} downloadManager\n * @property {AnnotationStorage} [annotationStorage]\n * @property {string} [imageResourcesPath] - Path for image resources, mainly\n * for annotation icons. Include trailing slash.\n * @property {boolean} renderForms\n * @property {boolean} [enableScripting] - Enable embedded script execution.\n * @property {boolean} [hasJSActions] - Some fields have JS actions.\n * The default value is `false`.\n * @property {Object> | null} [fieldObjects]\n * @property {Map} [annotationCanvasMap]\n * @property {TextAccessibilityManager} [accessibilityManager]\n */\n\n/**\n * Manage the layer containing all the annotations.\n */\nclass AnnotationLayer {\n #accessibilityManager = null;\n\n #annotationCanvasMap = null;\n\n #editableAnnotations = new Map();\n\n constructor({\n div,\n accessibilityManager,\n annotationCanvasMap,\n page,\n viewport,\n }) {\n this.div = div;\n this.#accessibilityManager = accessibilityManager;\n this.#annotationCanvasMap = annotationCanvasMap;\n this.page = page;\n this.viewport = viewport;\n this.zIndex = 0;\n\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n // For testing purposes.\n Object.defineProperty(this, \"showPopups\", {\n value: async () => {\n for (const show of this.popupShow) {\n await show();\n }\n },\n });\n this.popupShow = [];\n }\n }\n\n #appendElement(element, id) {\n const contentElement = element.firstChild || element;\n contentElement.id = `${AnnotationPrefix}${id}`;\n\n this.div.append(element);\n this.#accessibilityManager?.moveElementInDOM(\n this.div,\n element,\n contentElement,\n /* isRemovable = */ false\n );\n }\n\n /**\n * Render a new annotation layer with all annotation elements.\n *\n * @param {AnnotationLayerParameters} params\n * @memberof AnnotationLayer\n */\n async render(params) {\n const { annotations } = params;\n const layer = this.div;\n setLayerDimensions(layer, this.viewport);\n\n const popupToElements = new Map();\n const elementParams = {\n data: null,\n layer,\n linkService: params.linkService,\n downloadManager: params.downloadManager,\n imageResourcesPath: params.imageResourcesPath || \"\",\n renderForms: params.renderForms !== false,\n svgFactory: new DOMSVGFactory(),\n annotationStorage: params.annotationStorage || new AnnotationStorage(),\n enableScripting: params.enableScripting === true,\n hasJSActions: params.hasJSActions,\n fieldObjects: params.fieldObjects,\n parent: this,\n elements: null,\n };\n\n for (const data of annotations) {\n if (data.noHTML) {\n continue;\n }\n const isPopupAnnotation = data.annotationType === AnnotationType.POPUP;\n if (!isPopupAnnotation) {\n const { width, height } = getRectDims(data.rect);\n if (width <= 0 || height <= 0) {\n continue; // Ignore empty annotations.\n }\n } else {\n const elements = popupToElements.get(data.id);\n if (!elements) {\n // Ignore popup annotations without a corresponding annotation.\n continue;\n }\n elementParams.elements = elements;\n }\n elementParams.data = data;\n const element = AnnotationElementFactory.create(elementParams);\n\n if (!element.isRenderable) {\n continue;\n }\n\n if (!isPopupAnnotation && data.popupRef) {\n const elements = popupToElements.get(data.popupRef);\n if (!elements) {\n popupToElements.set(data.popupRef, [element]);\n } else {\n elements.push(element);\n }\n }\n\n if (element.annotationEditorType > 0) {\n this.#editableAnnotations.set(element.data.id, element);\n }\n\n const rendered = element.render();\n if (data.hidden) {\n rendered.style.visibility = \"hidden\";\n }\n this.#appendElement(rendered, data.id);\n }\n\n this.#setAnnotationCanvasMap();\n }\n\n /**\n * Update the annotation elements on existing annotation layer.\n *\n * @param {AnnotationLayerParameters} viewport\n * @memberof AnnotationLayer\n */\n update({ viewport }) {\n const layer = this.div;\n this.viewport = viewport;\n setLayerDimensions(layer, { rotation: viewport.rotation });\n\n this.#setAnnotationCanvasMap();\n layer.hidden = false;\n }\n\n #setAnnotationCanvasMap() {\n if (!this.#annotationCanvasMap) {\n return;\n }\n const layer = this.div;\n for (const [id, canvas] of this.#annotationCanvasMap) {\n const element = layer.querySelector(`[data-annotation-id=\"${id}\"]`);\n if (!element) {\n continue;\n }\n\n const { firstChild } = element;\n if (!firstChild) {\n element.append(canvas);\n } else if (firstChild.nodeName === \"CANVAS\") {\n firstChild.replaceWith(canvas);\n } else {\n firstChild.before(canvas);\n }\n }\n this.#annotationCanvasMap.clear();\n }\n\n getEditableAnnotations() {\n return Array.from(this.#editableAnnotations.values());\n }\n\n getEditableAnnotation(id) {\n return this.#editableAnnotations.get(id);\n }\n}\n\nexport {\n AnnotationLayer,\n FreeTextAnnotationElement,\n InkAnnotationElement,\n StampAnnotationElement,\n};\n","/* Copyright 2020 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { objectFromMap, unreachable } from \"../shared/util.js\";\nimport { AnnotationEditor } from \"./editor/editor.js\";\nimport { MurmurHash3_64 } from \"../shared/murmurhash3.js\";\n\nconst SerializableEmpty = Object.freeze({\n map: null,\n hash: \"\",\n transfer: undefined,\n});\n\n/**\n * Key/value storage for annotation data in forms.\n */\nclass AnnotationStorage {\n #modified = false;\n\n #storage = new Map();\n\n constructor() {\n // Callbacks to signal when the modification state is set or reset.\n // This is used by the viewer to only bind on `beforeunload` if forms\n // are actually edited to prevent doing so unconditionally since that\n // can have undesirable effects.\n this.onSetModified = null;\n this.onResetModified = null;\n this.onAnnotationEditor = null;\n }\n\n /**\n * Get the value for a given key if it exists, or return the default value.\n * @param {string} key\n * @param {Object} defaultValue\n * @returns {Object}\n */\n getValue(key, defaultValue) {\n const value = this.#storage.get(key);\n if (value === undefined) {\n return defaultValue;\n }\n\n return Object.assign(defaultValue, value);\n }\n\n /**\n * Get the value for a given key.\n * @param {string} key\n * @returns {Object}\n */\n getRawValue(key) {\n return this.#storage.get(key);\n }\n\n /**\n * Remove a value from the storage.\n * @param {string} key\n */\n remove(key) {\n this.#storage.delete(key);\n\n if (this.#storage.size === 0) {\n this.resetModified();\n }\n\n if (typeof this.onAnnotationEditor === \"function\") {\n for (const value of this.#storage.values()) {\n if (value instanceof AnnotationEditor) {\n return;\n }\n }\n this.onAnnotationEditor(null);\n }\n }\n\n /**\n * Set the value for a given key\n * @param {string} key\n * @param {Object} value\n */\n setValue(key, value) {\n const obj = this.#storage.get(key);\n let modified = false;\n if (obj !== undefined) {\n for (const [entry, val] of Object.entries(value)) {\n if (obj[entry] !== val) {\n modified = true;\n obj[entry] = val;\n }\n }\n } else {\n modified = true;\n this.#storage.set(key, value);\n }\n if (modified) {\n this.#setModified();\n }\n\n if (\n value instanceof AnnotationEditor &&\n typeof this.onAnnotationEditor === \"function\"\n ) {\n this.onAnnotationEditor(value.constructor._type);\n }\n }\n\n /**\n * Check if the storage contains the given key.\n * @param {string} key\n * @returns {boolean}\n */\n has(key) {\n return this.#storage.has(key);\n }\n\n /**\n * @returns {Object | null}\n */\n getAll() {\n return this.#storage.size > 0 ? objectFromMap(this.#storage) : null;\n }\n\n /**\n * @param {Object} obj\n */\n setAll(obj) {\n for (const [key, val] of Object.entries(obj)) {\n this.setValue(key, val);\n }\n }\n\n get size() {\n return this.#storage.size;\n }\n\n #setModified() {\n if (!this.#modified) {\n this.#modified = true;\n if (typeof this.onSetModified === \"function\") {\n this.onSetModified();\n }\n }\n }\n\n resetModified() {\n if (this.#modified) {\n this.#modified = false;\n if (typeof this.onResetModified === \"function\") {\n this.onResetModified();\n }\n }\n }\n\n /**\n * @returns {PrintAnnotationStorage}\n */\n get print() {\n return new PrintAnnotationStorage(this);\n }\n\n /**\n * PLEASE NOTE: Only intended for usage within the API itself.\n * @ignore\n */\n get serializable() {\n if (this.#storage.size === 0) {\n return SerializableEmpty;\n }\n const map = new Map(),\n hash = new MurmurHash3_64(),\n transfer = [];\n const context = Object.create(null);\n let hasBitmap = false;\n\n for (const [key, val] of this.#storage) {\n const serialized =\n val instanceof AnnotationEditor\n ? val.serialize(/* isForCopying = */ false, context)\n : val;\n if (serialized) {\n map.set(key, serialized);\n\n hash.update(`${key}:${JSON.stringify(serialized)}`);\n hasBitmap ||= !!serialized.bitmap;\n }\n }\n\n if (hasBitmap) {\n // We must transfer the bitmap data separately, since it can be changed\n // during serialization with SVG images.\n for (const value of map.values()) {\n if (value.bitmap) {\n transfer.push(value.bitmap);\n }\n }\n }\n\n return map.size > 0\n ? { map, hash: hash.hexdigest(), transfer }\n : SerializableEmpty;\n }\n}\n\n/**\n * A special `AnnotationStorage` for use during printing, where the serializable\n * data is *frozen* upon initialization, to prevent scripting from modifying its\n * contents. (Necessary since printing is triggered synchronously in browsers.)\n */\nclass PrintAnnotationStorage extends AnnotationStorage {\n #serializable;\n\n constructor(parent) {\n super();\n const { map, hash, transfer } = parent.serializable;\n // Create a *copy* of the data, since Objects are passed by reference in JS.\n const clone = structuredClone(map, transfer ? { transfer } : null);\n\n this.#serializable = { map: clone, hash, transfer };\n }\n\n /**\n * @returns {PrintAnnotationStorage}\n */\n // eslint-disable-next-line getter-return\n get print() {\n unreachable(\"Should not call PrintAnnotationStorage.print\");\n }\n\n /**\n * PLEASE NOTE: Only intended for usage within the API itself.\n * @ignore\n */\n get serializable() {\n return this.#serializable;\n }\n}\n\nexport { AnnotationStorage, PrintAnnotationStorage, SerializableEmpty };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @module pdfjsLib\n */\n\nimport {\n AbortException,\n AnnotationMode,\n assert,\n getVerbosityLevel,\n info,\n InvalidPDFException,\n isArrayBuffer,\n isNodeJS,\n MAX_IMAGE_SIZE_TO_CACHE,\n MissingPDFException,\n PasswordException,\n PromiseCapability,\n RenderingIntentFlag,\n setVerbosityLevel,\n shadow,\n stringToBytes,\n UnexpectedResponseException,\n UnknownErrorException,\n unreachable,\n warn,\n} from \"../shared/util.js\";\nimport {\n AnnotationStorage,\n PrintAnnotationStorage,\n SerializableEmpty,\n} from \"./annotation_storage.js\";\nimport {\n DOMCanvasFactory,\n DOMCMapReaderFactory,\n DOMFilterFactory,\n DOMStandardFontDataFactory,\n isDataScheme,\n isValidFetchUrl,\n PageViewport,\n RenderingCancelledException,\n StatTimer,\n} from \"./display_utils.js\";\nimport { FontFaceObject, FontLoader } from \"./font_loader.js\";\nimport {\n NodeCanvasFactory,\n NodeCMapReaderFactory,\n NodeFilterFactory,\n NodeStandardFontDataFactory,\n} from \"display-node_utils\";\nimport { CanvasGraphics } from \"./canvas.js\";\nimport { GlobalWorkerOptions } from \"./worker_options.js\";\nimport { MessageHandler } from \"../shared/message_handler.js\";\nimport { Metadata } from \"./metadata.js\";\nimport { OptionalContentConfig } from \"./optional_content_config.js\";\nimport { PDFDataTransportStream } from \"./transport_stream.js\";\nimport { PDFFetchStream } from \"display-fetch_stream\";\nimport { PDFNetworkStream } from \"display-network\";\nimport { PDFNodeStream } from \"display-node_stream\";\nimport { XfaText } from \"./xfa_text.js\";\n\nconst DEFAULT_RANGE_CHUNK_SIZE = 65536; // 2^16 = 65536\nconst RENDERING_CANCELLED_TIMEOUT = 100; // ms\nconst DELAYED_CLEANUP_TIMEOUT = 5000; // ms\n\nconst DefaultCanvasFactory =\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\") && isNodeJS\n ? NodeCanvasFactory\n : DOMCanvasFactory;\nconst DefaultCMapReaderFactory =\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\") && isNodeJS\n ? NodeCMapReaderFactory\n : DOMCMapReaderFactory;\nconst DefaultFilterFactory =\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\") && isNodeJS\n ? NodeFilterFactory\n : DOMFilterFactory;\nconst DefaultStandardFontDataFactory =\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\") && isNodeJS\n ? NodeStandardFontDataFactory\n : DOMStandardFontDataFactory;\n\n/**\n * @typedef { Int8Array | Uint8Array | Uint8ClampedArray |\n * Int16Array | Uint16Array |\n * Int32Array | Uint32Array | Float32Array |\n * Float64Array\n * } TypedArray\n */\n\n/**\n * @typedef { TypedArray | ArrayBuffer | Array | string } BinaryData\n */\n\n/**\n * @typedef {Object} RefProxy\n * @property {number} num\n * @property {number} gen\n */\n\n/**\n * Document initialization / loading parameters object.\n *\n * @typedef {Object} DocumentInitParameters\n * @property {string | URL} [url] - The URL of the PDF.\n * @property {BinaryData} [data] - Binary PDF data.\n * Use TypedArrays (Uint8Array) to improve the memory usage. If PDF data is\n * BASE64-encoded, use `atob()` to convert it to a binary string first.\n *\n * NOTE: If TypedArrays are used they will generally be transferred to the\n * worker-thread. This will help reduce main-thread memory usage, however\n * it will take ownership of the TypedArrays.\n * @property {Object} [httpHeaders] - Basic authentication headers.\n * @property {boolean} [withCredentials] - Indicates whether or not\n * cross-site Access-Control requests should be made using credentials such\n * as cookies or authorization headers. The default is `false`.\n * @property {string} [password] - For decrypting password-protected PDFs.\n * @property {number} [length] - The PDF file length. It's used for progress\n * reports and range requests operations.\n * @property {PDFDataRangeTransport} [range] - Allows for using a custom range\n * transport implementation.\n * @property {number} [rangeChunkSize] - Specify maximum number of bytes fetched\n * per range request. The default value is {@link DEFAULT_RANGE_CHUNK_SIZE}.\n * @property {PDFWorker} [worker] - The worker that will be used for loading and\n * parsing the PDF data.\n * @property {number} [verbosity] - Controls the logging level; the constants\n * from {@link VerbosityLevel} should be used.\n * @property {string} [docBaseUrl] - The base URL of the document, used when\n * attempting to recover valid absolute URLs for annotations, and outline\n * items, that (incorrectly) only specify relative URLs.\n * @property {string} [cMapUrl] - The URL where the predefined Adobe CMaps are\n * located. Include the trailing slash.\n * @property {boolean} [cMapPacked] - Specifies if the Adobe CMaps are binary\n * packed or not. The default value is `true`.\n * @property {Object} [CMapReaderFactory] - The factory that will be used when\n * reading built-in CMap files. Providing a custom factory is useful for\n * environments without Fetch API or `XMLHttpRequest` support, such as\n * Node.js. The default value is {DOMCMapReaderFactory}.\n * @property {boolean} [useSystemFonts] - When `true`, fonts that aren't\n * embedded in the PDF document will fallback to a system font.\n * The default value is `true` in web environments and `false` in Node.js;\n * unless `disableFontFace === true` in which case this defaults to `false`\n * regardless of the environment (to prevent completely broken fonts).\n * @property {string} [standardFontDataUrl] - The URL where the standard font\n * files are located. Include the trailing slash.\n * @property {Object} [StandardFontDataFactory] - The factory that will be used\n * when reading the standard font files. Providing a custom factory is useful\n * for environments without Fetch API or `XMLHttpRequest` support, such as\n * Node.js. The default value is {DOMStandardFontDataFactory}.\n * @property {boolean} [useWorkerFetch] - Enable using the Fetch API in the\n * worker-thread when reading CMap and standard font files. When `true`,\n * the `CMapReaderFactory` and `StandardFontDataFactory` options are ignored.\n * The default value is `true` in web environments and `false` in Node.js.\n * @property {boolean} [stopAtErrors] - Reject certain promises, e.g.\n * `getOperatorList`, `getTextContent`, and `RenderTask`, when the associated\n * PDF data cannot be successfully parsed, instead of attempting to recover\n * whatever possible of the data. The default value is `false`.\n * @property {number} [maxImageSize] - The maximum allowed image size in total\n * pixels, i.e. width * height. Images above this value will not be rendered.\n * Use -1 for no limit, which is also the default value.\n * @property {boolean} [isEvalSupported] - Determines if we can evaluate strings\n * as JavaScript. Primarily used to improve performance of font rendering, and\n * when parsing PDF functions. The default value is `true`.\n * @property {boolean} [isOffscreenCanvasSupported] - Determines if we can use\n * `OffscreenCanvas` in the worker. Primarily used to improve performance of\n * image conversion/rendering.\n * The default value is `true` in web environments and `false` in Node.js.\n * @property {number} [canvasMaxAreaInBytes] - The integer value is used to\n * know when an image must be resized (uses `OffscreenCanvas` in the worker).\n * If it's -1 then a possibly slow algorithm is used to guess the max value.\n * @property {boolean} [disableFontFace] - By default fonts are converted to\n * OpenType fonts and loaded via the Font Loading API or `@font-face` rules.\n * If disabled, fonts will be rendered using a built-in font renderer that\n * constructs the glyphs with primitive path commands.\n * The default value is `false` in web environments and `true` in Node.js.\n * @property {boolean} [fontExtraProperties] - Include additional properties,\n * which are unused during rendering of PDF documents, when exporting the\n * parsed font data from the worker-thread. This may be useful for debugging\n * purposes (and backwards compatibility), but note that it will lead to\n * increased memory usage. The default value is `false`.\n * @property {boolean} [enableXfa] - Render Xfa forms if any.\n * The default value is `false`.\n * @property {HTMLDocument} [ownerDocument] - Specify an explicit document\n * context to create elements with and to load resources, such as fonts,\n * into. Defaults to the current document.\n * @property {boolean} [disableRange] - Disable range request loading of PDF\n * files. When enabled, and if the server supports partial content requests,\n * then the PDF will be fetched in chunks. The default value is `false`.\n * @property {boolean} [disableStream] - Disable streaming of PDF file data.\n * By default PDF.js attempts to load PDF files in chunks. The default value\n * is `false`.\n * @property {boolean} [disableAutoFetch] - Disable pre-fetching of PDF file\n * data. When range requests are enabled PDF.js will automatically keep\n * fetching more data even if it isn't needed to display the current page.\n * The default value is `false`.\n *\n * NOTE: It is also necessary to disable streaming, see above, in order for\n * disabling of pre-fetching to work correctly.\n * @property {boolean} [pdfBug] - Enables special hooks for debugging PDF.js\n * (see `web/debugger.js`). The default value is `false`.\n * @property {Object} [canvasFactory] - The factory instance that will be used\n * when creating canvases. The default value is {new DOMCanvasFactory()}.\n * @property {Object} [filterFactory] - A factory instance that will be used\n * to create SVG filters when rendering some images on the main canvas.\n */\n\n/**\n * This is the main entry point for loading a PDF and interacting with it.\n *\n * NOTE: If a URL is used to fetch the PDF data a standard Fetch API call (or\n * XHR as fallback) is used, which means it must follow same origin rules,\n * e.g. no cross-domain requests without CORS.\n *\n * @param {string | URL | TypedArray | ArrayBuffer | DocumentInitParameters}\n * src - Can be a URL where a PDF file is located, a typed array (Uint8Array)\n * already populated with data, or a parameter object.\n * @returns {PDFDocumentLoadingTask}\n */\nfunction getDocument(src) {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n if (typeof src === \"string\" || src instanceof URL) {\n src = { url: src };\n } else if (isArrayBuffer(src)) {\n src = { data: src };\n }\n }\n if (typeof src !== \"object\") {\n throw new Error(\"Invalid parameter in getDocument, need parameter object.\");\n }\n if (!src.url && !src.data && !src.range) {\n throw new Error(\n \"Invalid parameter object: need either .data, .range or .url\"\n );\n }\n const task = new PDFDocumentLoadingTask();\n const { docId } = task;\n\n const url = src.url ? getUrlProp(src.url) : null;\n const data = src.data ? getDataProp(src.data) : null;\n const httpHeaders = src.httpHeaders || null;\n const withCredentials = src.withCredentials === true;\n const password = src.password ?? null;\n const rangeTransport =\n src.range instanceof PDFDataRangeTransport ? src.range : null;\n const rangeChunkSize =\n Number.isInteger(src.rangeChunkSize) && src.rangeChunkSize > 0\n ? src.rangeChunkSize\n : DEFAULT_RANGE_CHUNK_SIZE;\n let worker = src.worker instanceof PDFWorker ? src.worker : null;\n const verbosity = src.verbosity;\n // Ignore \"data:\"-URLs, since they can't be used to recover valid absolute\n // URLs anyway. We want to avoid sending them to the worker-thread, since\n // they contain the *entire* PDF document and can thus be arbitrarily long.\n const docBaseUrl =\n typeof src.docBaseUrl === \"string\" && !isDataScheme(src.docBaseUrl)\n ? src.docBaseUrl\n : null;\n const cMapUrl = typeof src.cMapUrl === \"string\" ? src.cMapUrl : null;\n const cMapPacked = src.cMapPacked !== false;\n const CMapReaderFactory = src.CMapReaderFactory || DefaultCMapReaderFactory;\n const standardFontDataUrl =\n typeof src.standardFontDataUrl === \"string\"\n ? src.standardFontDataUrl\n : null;\n const StandardFontDataFactory =\n src.StandardFontDataFactory || DefaultStandardFontDataFactory;\n const ignoreErrors = src.stopAtErrors !== true;\n const maxImageSize =\n Number.isInteger(src.maxImageSize) && src.maxImageSize > -1\n ? src.maxImageSize\n : -1;\n const isEvalSupported = src.isEvalSupported !== false;\n const isOffscreenCanvasSupported =\n typeof src.isOffscreenCanvasSupported === \"boolean\"\n ? src.isOffscreenCanvasSupported\n : !isNodeJS;\n const canvasMaxAreaInBytes = Number.isInteger(src.canvasMaxAreaInBytes)\n ? src.canvasMaxAreaInBytes\n : -1;\n const disableFontFace =\n typeof src.disableFontFace === \"boolean\" ? src.disableFontFace : isNodeJS;\n const fontExtraProperties = src.fontExtraProperties === true;\n const enableXfa = src.enableXfa === true;\n const ownerDocument = src.ownerDocument || globalThis.document;\n const disableRange = src.disableRange === true;\n const disableStream = src.disableStream === true;\n const disableAutoFetch = src.disableAutoFetch === true;\n const pdfBug = src.pdfBug === true;\n\n // Parameters whose default values depend on other parameters.\n const length = rangeTransport ? rangeTransport.length : src.length ?? NaN;\n const useSystemFonts =\n typeof src.useSystemFonts === \"boolean\"\n ? src.useSystemFonts\n : !isNodeJS && !disableFontFace;\n const useWorkerFetch =\n typeof src.useWorkerFetch === \"boolean\"\n ? src.useWorkerFetch\n : (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n (CMapReaderFactory === DOMCMapReaderFactory &&\n StandardFontDataFactory === DOMStandardFontDataFactory &&\n cMapUrl &&\n standardFontDataUrl &&\n isValidFetchUrl(cMapUrl, document.baseURI) &&\n isValidFetchUrl(standardFontDataUrl, document.baseURI));\n const canvasFactory =\n src.canvasFactory || new DefaultCanvasFactory({ ownerDocument });\n const filterFactory =\n src.filterFactory || new DefaultFilterFactory({ docId, ownerDocument });\n\n // Parameters only intended for development/testing purposes.\n const styleElement =\n typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")\n ? src.styleElement\n : null;\n\n // Set the main-thread verbosity level.\n setVerbosityLevel(verbosity);\n\n // Ensure that the various factories can be initialized, when necessary,\n // since the user may provide *custom* ones.\n const transportFactory = {\n canvasFactory,\n filterFactory,\n };\n if (!useWorkerFetch) {\n transportFactory.cMapReaderFactory = new CMapReaderFactory({\n baseUrl: cMapUrl,\n isCompressed: cMapPacked,\n });\n transportFactory.standardFontDataFactory = new StandardFontDataFactory({\n baseUrl: standardFontDataUrl,\n });\n }\n\n if (!worker) {\n const workerParams = {\n verbosity,\n port: GlobalWorkerOptions.workerPort,\n };\n // Worker was not provided -- creating and owning our own. If message port\n // is specified in global worker options, using it.\n worker = workerParams.port\n ? PDFWorker.fromPort(workerParams)\n : new PDFWorker(workerParams);\n task._worker = worker;\n }\n\n const fetchDocParams = {\n docId,\n apiVersion:\n typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"TESTING\")\n ? PDFJSDev.eval(\"BUNDLE_VERSION\")\n : null,\n data,\n password,\n disableAutoFetch,\n rangeChunkSize,\n length,\n docBaseUrl,\n enableXfa,\n evaluatorOptions: {\n maxImageSize,\n disableFontFace,\n ignoreErrors,\n isEvalSupported,\n isOffscreenCanvasSupported,\n canvasMaxAreaInBytes,\n fontExtraProperties,\n useSystemFonts,\n cMapUrl: useWorkerFetch ? cMapUrl : null,\n standardFontDataUrl: useWorkerFetch ? standardFontDataUrl : null,\n },\n };\n const transportParams = {\n ignoreErrors,\n isEvalSupported,\n disableFontFace,\n fontExtraProperties,\n enableXfa,\n ownerDocument,\n disableAutoFetch,\n pdfBug,\n styleElement,\n };\n\n worker.promise\n .then(function () {\n if (task.destroyed) {\n throw new Error(\"Loading aborted\");\n }\n\n const workerIdPromise = _fetchDocument(worker, fetchDocParams);\n const networkStreamPromise = new Promise(function (resolve) {\n let networkStream;\n if (rangeTransport) {\n networkStream = new PDFDataTransportStream(\n {\n length,\n initialData: rangeTransport.initialData,\n progressiveDone: rangeTransport.progressiveDone,\n contentDispositionFilename:\n rangeTransport.contentDispositionFilename,\n disableRange,\n disableStream,\n },\n rangeTransport\n );\n } else if (!data) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: createPDFNetworkStream\");\n }\n const createPDFNetworkStream = params => {\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"GENERIC\") &&\n isNodeJS\n ) {\n return new PDFNodeStream(params);\n }\n return isValidFetchUrl(params.url)\n ? new PDFFetchStream(params)\n : new PDFNetworkStream(params);\n };\n\n networkStream = createPDFNetworkStream({\n url,\n length,\n httpHeaders,\n withCredentials,\n rangeChunkSize,\n disableRange,\n disableStream,\n });\n }\n resolve(networkStream);\n });\n\n return Promise.all([workerIdPromise, networkStreamPromise]).then(\n function ([workerId, networkStream]) {\n if (task.destroyed) {\n throw new Error(\"Loading aborted\");\n }\n\n const messageHandler = new MessageHandler(\n docId,\n workerId,\n worker.port\n );\n const transport = new WorkerTransport(\n messageHandler,\n task,\n networkStream,\n transportParams,\n transportFactory\n );\n task._transport = transport;\n messageHandler.send(\"Ready\", null);\n }\n );\n })\n .catch(task._capability.reject);\n\n return task;\n}\n\n/**\n * Starts fetching of specified PDF document/data.\n *\n * @param {PDFWorker} worker\n * @param {Object} source\n * @returns {Promise} A promise that is resolved when the worker ID of\n * the `MessageHandler` is known.\n * @private\n */\nasync function _fetchDocument(worker, source) {\n if (worker.destroyed) {\n throw new Error(\"Worker was destroyed\");\n }\n const workerId = await worker.messageHandler.sendWithPromise(\n \"GetDocRequest\",\n source,\n source.data ? [source.data.buffer] : null\n );\n\n if (worker.destroyed) {\n throw new Error(\"Worker was destroyed\");\n }\n return workerId;\n}\n\nfunction getUrlProp(val) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n return null; // The 'url' is unused with `PDFDataRangeTransport`.\n }\n if (val instanceof URL) {\n return val.href;\n }\n try {\n // The full path is required in the 'url' field.\n return new URL(val, window.location).href;\n } catch {\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"GENERIC\") &&\n isNodeJS &&\n typeof val === \"string\"\n ) {\n return val; // Use the url as-is in Node.js environments.\n }\n }\n throw new Error(\n \"Invalid PDF url data: \" +\n \"either string or URL-object is expected in the url property.\"\n );\n}\n\nfunction getDataProp(val) {\n // Converting string or array-like data to Uint8Array.\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"GENERIC\") &&\n isNodeJS &&\n typeof Buffer !== \"undefined\" && // eslint-disable-line no-undef\n val instanceof Buffer // eslint-disable-line no-undef\n ) {\n throw new Error(\n \"Please provide binary data as `Uint8Array`, rather than `Buffer`.\"\n );\n }\n if (val instanceof Uint8Array && val.byteLength === val.buffer.byteLength) {\n // Use the data as-is when it's already a Uint8Array that completely\n // \"utilizes\" its underlying ArrayBuffer, to prevent any possible\n // issues when transferring it to the worker-thread.\n return val;\n }\n if (typeof val === \"string\") {\n return stringToBytes(val);\n }\n if ((typeof val === \"object\" && !isNaN(val?.length)) || isArrayBuffer(val)) {\n return new Uint8Array(val);\n }\n throw new Error(\n \"Invalid PDF binary data: either TypedArray, \" +\n \"string, or array-like object is expected in the data property.\"\n );\n}\n\n/**\n * @typedef {Object} OnProgressParameters\n * @property {number} loaded - Currently loaded number of bytes.\n * @property {number} total - Total number of bytes in the PDF file.\n */\n\n/**\n * The loading task controls the operations required to load a PDF document\n * (such as network requests) and provides a way to listen for completion,\n * after which individual pages can be rendered.\n */\nclass PDFDocumentLoadingTask {\n static #docId = 0;\n\n constructor() {\n this._capability = new PromiseCapability();\n this._transport = null;\n this._worker = null;\n\n /**\n * Unique identifier for the document loading task.\n * @type {string}\n */\n this.docId = `d${PDFDocumentLoadingTask.#docId++}`;\n\n /**\n * Whether the loading task is destroyed or not.\n * @type {boolean}\n */\n this.destroyed = false;\n\n /**\n * Callback to request a password if a wrong or no password was provided.\n * The callback receives two parameters: a function that should be called\n * with the new password, and a reason (see {@link PasswordResponses}).\n * @type {function}\n */\n this.onPassword = null;\n\n /**\n * Callback to be able to monitor the loading progress of the PDF file\n * (necessary to implement e.g. a loading bar).\n * The callback receives an {@link OnProgressParameters} argument.\n * @type {function}\n */\n this.onProgress = null;\n }\n\n /**\n * Promise for document loading task completion.\n * @type {Promise}\n */\n get promise() {\n return this._capability.promise;\n }\n\n /**\n * Abort all network requests and destroy the worker.\n * @returns {Promise} A promise that is resolved when destruction is\n * completed.\n */\n async destroy() {\n this.destroyed = true;\n try {\n if (this._worker?.port) {\n this._worker._pendingDestroy = true;\n }\n await this._transport?.destroy();\n } catch (ex) {\n if (this._worker?.port) {\n delete this._worker._pendingDestroy;\n }\n throw ex;\n }\n\n this._transport = null;\n if (this._worker) {\n this._worker.destroy();\n this._worker = null;\n }\n }\n}\n\n/**\n * Abstract class to support range requests file loading.\n *\n * NOTE: The TypedArrays passed to the constructor and relevant methods below\n * will generally be transferred to the worker-thread. This will help reduce\n * main-thread memory usage, however it will take ownership of the TypedArrays.\n */\nclass PDFDataRangeTransport {\n /**\n * @param {number} length\n * @param {Uint8Array|null} initialData\n * @param {boolean} [progressiveDone]\n * @param {string} [contentDispositionFilename]\n */\n constructor(\n length,\n initialData,\n progressiveDone = false,\n contentDispositionFilename = null\n ) {\n this.length = length;\n this.initialData = initialData;\n this.progressiveDone = progressiveDone;\n this.contentDispositionFilename = contentDispositionFilename;\n\n this._rangeListeners = [];\n this._progressListeners = [];\n this._progressiveReadListeners = [];\n this._progressiveDoneListeners = [];\n this._readyCapability = new PromiseCapability();\n }\n\n /**\n * @param {function} listener\n */\n addRangeListener(listener) {\n this._rangeListeners.push(listener);\n }\n\n /**\n * @param {function} listener\n */\n addProgressListener(listener) {\n this._progressListeners.push(listener);\n }\n\n /**\n * @param {function} listener\n */\n addProgressiveReadListener(listener) {\n this._progressiveReadListeners.push(listener);\n }\n\n /**\n * @param {function} listener\n */\n addProgressiveDoneListener(listener) {\n this._progressiveDoneListeners.push(listener);\n }\n\n /**\n * @param {number} begin\n * @param {Uint8Array|null} chunk\n */\n onDataRange(begin, chunk) {\n for (const listener of this._rangeListeners) {\n listener(begin, chunk);\n }\n }\n\n /**\n * @param {number} loaded\n * @param {number|undefined} total\n */\n onDataProgress(loaded, total) {\n this._readyCapability.promise.then(() => {\n for (const listener of this._progressListeners) {\n listener(loaded, total);\n }\n });\n }\n\n /**\n * @param {Uint8Array|null} chunk\n */\n onDataProgressiveRead(chunk) {\n this._readyCapability.promise.then(() => {\n for (const listener of this._progressiveReadListeners) {\n listener(chunk);\n }\n });\n }\n\n onDataProgressiveDone() {\n this._readyCapability.promise.then(() => {\n for (const listener of this._progressiveDoneListeners) {\n listener();\n }\n });\n }\n\n transportReady() {\n this._readyCapability.resolve();\n }\n\n /**\n * @param {number} begin\n * @param {number} end\n */\n requestDataRange(begin, end) {\n unreachable(\"Abstract method PDFDataRangeTransport.requestDataRange\");\n }\n\n abort() {}\n}\n\n/**\n * Proxy to a `PDFDocument` in the worker thread.\n */\nclass PDFDocumentProxy {\n constructor(pdfInfo, transport) {\n this._pdfInfo = pdfInfo;\n this._transport = transport;\n\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n // For testing purposes.\n Object.defineProperty(this, \"getXFADatasets\", {\n value: () => {\n return this._transport.getXFADatasets();\n },\n });\n Object.defineProperty(this, \"getXRefPrevValue\", {\n value: () => {\n return this._transport.getXRefPrevValue();\n },\n });\n Object.defineProperty(this, \"getAnnotArray\", {\n value: pageIndex => {\n return this._transport.getAnnotArray(pageIndex);\n },\n });\n }\n }\n\n /**\n * @type {AnnotationStorage} Storage for annotation data in forms.\n */\n get annotationStorage() {\n return this._transport.annotationStorage;\n }\n\n /**\n * @type {Object} The filter factory instance.\n */\n get filterFactory() {\n return this._transport.filterFactory;\n }\n\n /**\n * @type {number} Total number of pages in the PDF file.\n */\n get numPages() {\n return this._pdfInfo.numPages;\n }\n\n /**\n * @type {Array} A (not guaranteed to be) unique ID to\n * identify the PDF document.\n * NOTE: The first element will always be defined for all PDF documents,\n * whereas the second element is only defined for *modified* PDF documents.\n */\n get fingerprints() {\n return this._pdfInfo.fingerprints;\n }\n\n /**\n * @type {boolean} True if only XFA form.\n */\n get isPureXfa() {\n return shadow(this, \"isPureXfa\", !!this._transport._htmlForXfa);\n }\n\n /**\n * NOTE: This is (mostly) intended to support printing of XFA forms.\n *\n * @type {Object | null} An object representing a HTML tree structure\n * to render the XFA, or `null` when no XFA form exists.\n */\n get allXfaHtml() {\n return this._transport._htmlForXfa;\n }\n\n /**\n * @param {number} pageNumber - The page number to get. The first page is 1.\n * @returns {Promise} A promise that is resolved with\n * a {@link PDFPageProxy} object.\n */\n getPage(pageNumber) {\n return this._transport.getPage(pageNumber);\n }\n\n /**\n * @param {RefProxy} ref - The page reference.\n * @returns {Promise} A promise that is resolved with the page index,\n * starting from zero, that is associated with the reference.\n */\n getPageIndex(ref) {\n return this._transport.getPageIndex(ref);\n }\n\n /**\n * @returns {Promise>>} A promise that is resolved\n * with a mapping from named destinations to references.\n *\n * This can be slow for large documents. Use `getDestination` instead.\n */\n getDestinations() {\n return this._transport.getDestinations();\n }\n\n /**\n * @param {string} id - The named destination to get.\n * @returns {Promise | null>} A promise that is resolved with all\n * information of the given named destination, or `null` when the named\n * destination is not present in the PDF file.\n */\n getDestination(id) {\n return this._transport.getDestination(id);\n }\n\n /**\n * @returns {Promise | null>} A promise that is resolved with\n * an {Array} containing the page labels that correspond to the page\n * indexes, or `null` when no page labels are present in the PDF file.\n */\n getPageLabels() {\n return this._transport.getPageLabels();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a {string}\n * containing the page layout name.\n */\n getPageLayout() {\n return this._transport.getPageLayout();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a {string}\n * containing the page mode name.\n */\n getPageMode() {\n return this._transport.getPageMode();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with an\n * {Object} containing the viewer preferences, or `null` when no viewer\n * preferences are present in the PDF file.\n */\n getViewerPreferences() {\n return this._transport.getViewerPreferences();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with an {Array}\n * containing the destination, or `null` when no open action is present\n * in the PDF.\n */\n getOpenAction() {\n return this._transport.getOpenAction();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a lookup table\n * for mapping named attachments to their content.\n */\n getAttachments() {\n return this._transport.getAttachments();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with\n * an {Object} with the JavaScript actions:\n * - from the name tree.\n * - from A or AA entries in the catalog dictionary.\n * , or `null` if no JavaScript exists.\n */\n getJSActions() {\n return this._transport.getDocJSActions();\n }\n\n /**\n * @typedef {Object} OutlineNode\n * @property {string} title\n * @property {boolean} bold\n * @property {boolean} italic\n * @property {Uint8ClampedArray} color - The color in RGB format to use for\n * display purposes.\n * @property {string | Array | null} dest\n * @property {string | null} url\n * @property {string | undefined} unsafeUrl\n * @property {boolean | undefined} newWindow\n * @property {number | undefined} count\n * @property {Array} items\n */\n\n /**\n * @returns {Promise>} A promise that is resolved with an\n * {Array} that is a tree outline (if it has one) of the PDF file.\n */\n getOutline() {\n return this._transport.getOutline();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with\n * an {@link OptionalContentConfig} that contains all the optional content\n * groups (assuming that the document has any).\n */\n getOptionalContentConfig() {\n return this._transport.getOptionalContentConfig();\n }\n\n /**\n * @returns {Promise | null>} A promise that is resolved with\n * an {Array} that contains the permission flags for the PDF document, or\n * `null` when no permissions are present in the PDF file.\n */\n getPermissions() {\n return this._transport.getPermissions();\n }\n\n /**\n * @returns {Promise<{ info: Object, metadata: Metadata }>} A promise that is\n * resolved with an {Object} that has `info` and `metadata` properties.\n * `info` is an {Object} filled with anything available in the information\n * dictionary and similarly `metadata` is a {Metadata} object with\n * information from the metadata section of the PDF.\n */\n getMetadata() {\n return this._transport.getMetadata();\n }\n\n /**\n * @typedef {Object} MarkInfo\n * Properties correspond to Table 321 of the PDF 32000-1:2008 spec.\n * @property {boolean} Marked\n * @property {boolean} UserProperties\n * @property {boolean} Suspects\n */\n\n /**\n * @returns {Promise} A promise that is resolved with\n * a {MarkInfo} object that contains the MarkInfo flags for the PDF\n * document, or `null` when no MarkInfo values are present in the PDF file.\n */\n getMarkInfo() {\n return this._transport.getMarkInfo();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a\n * {Uint8Array} containing the raw data of the PDF document.\n */\n getData() {\n return this._transport.getData();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a\n * {Uint8Array} containing the full data of the saved document.\n */\n saveDocument() {\n return this._transport.saveDocument();\n }\n\n /**\n * @returns {Promise<{ length: number }>} A promise that is resolved when the\n * document's data is loaded. It is resolved with an {Object} that contains\n * the `length` property that indicates size of the PDF data in bytes.\n */\n getDownloadInfo() {\n return this._transport.downloadInfoCapability.promise;\n }\n\n /**\n * Cleans up resources allocated by the document on both the main and worker\n * threads.\n *\n * NOTE: Do not, under any circumstances, call this method when rendering is\n * currently ongoing since that may lead to rendering errors.\n *\n * @param {boolean} [keepLoadedFonts] - Let fonts remain attached to the DOM.\n * NOTE: This will increase persistent memory usage, hence don't use this\n * option unless absolutely necessary. The default value is `false`.\n * @returns {Promise} A promise that is resolved when clean-up has finished.\n */\n cleanup(keepLoadedFonts = false) {\n return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa);\n }\n\n /**\n * Destroys the current document instance and terminates the worker.\n */\n destroy() {\n return this.loadingTask.destroy();\n }\n\n /**\n * @type {DocumentInitParameters} A subset of the current\n * {DocumentInitParameters}, which are needed in the viewer.\n */\n get loadingParams() {\n return this._transport.loadingParams;\n }\n\n /**\n * @type {PDFDocumentLoadingTask} The loadingTask for the current document.\n */\n get loadingTask() {\n return this._transport.loadingTask;\n }\n\n /**\n * @returns {Promise> | null>} A promise that is\n * resolved with an {Object} containing /AcroForm field data for the JS\n * sandbox, or `null` when no field data is present in the PDF file.\n */\n getFieldObjects() {\n return this._transport.getFieldObjects();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with `true`\n * if some /AcroForm fields have JavaScript actions.\n */\n hasJSActions() {\n return this._transport.hasJSActions();\n }\n\n /**\n * @returns {Promise | null>} A promise that is resolved with an\n * {Array} containing IDs of annotations that have a calculation\n * action, or `null` when no such annotations are present in the PDF file.\n */\n getCalculationOrderIds() {\n return this._transport.getCalculationOrderIds();\n }\n}\n\n/**\n * Page getViewport parameters.\n *\n * @typedef {Object} GetViewportParameters\n * @property {number} scale - The desired scale of the viewport.\n * @property {number} [rotation] - The desired rotation, in degrees, of\n * the viewport. If omitted it defaults to the page rotation.\n * @property {number} [offsetX] - The horizontal, i.e. x-axis, offset.\n * The default value is `0`.\n * @property {number} [offsetY] - The vertical, i.e. y-axis, offset.\n * The default value is `0`.\n * @property {boolean} [dontFlip] - If true, the y-axis will not be\n * flipped. The default value is `false`.\n */\n\n/**\n * Page getTextContent parameters.\n *\n * @typedef {Object} getTextContentParameters\n * @property {boolean} [includeMarkedContent] - When true include marked\n * content items in the items array of TextContent. The default is `false`.\n * @property {boolean} [disableNormalization] - When true the text is *not*\n * normalized in the worker-thread. The default is `false`.\n */\n\n/**\n * Page text content.\n *\n * @typedef {Object} TextContent\n * @property {Array} items - Array of\n * {@link TextItem} and {@link TextMarkedContent} objects. TextMarkedContent\n * items are included when includeMarkedContent is true.\n * @property {Object} styles - {@link TextStyle} objects,\n * indexed by font name.\n */\n\n/**\n * Page text content part.\n *\n * @typedef {Object} TextItem\n * @property {string} str - Text content.\n * @property {string} dir - Text direction: 'ttb', 'ltr' or 'rtl'.\n * @property {Array} transform - Transformation matrix.\n * @property {number} width - Width in device space.\n * @property {number} height - Height in device space.\n * @property {string} fontName - Font name used by PDF.js for converted font.\n * @property {boolean} hasEOL - Indicating if the text content is followed by a\n * line-break.\n */\n\n/**\n * Page text marked content part.\n *\n * @typedef {Object} TextMarkedContent\n * @property {string} type - Either 'beginMarkedContent',\n * 'beginMarkedContentProps', or 'endMarkedContent'.\n * @property {string} id - The marked content identifier. Only used for type\n * 'beginMarkedContentProps'.\n */\n\n/**\n * Text style.\n *\n * @typedef {Object} TextStyle\n * @property {number} ascent - Font ascent.\n * @property {number} descent - Font descent.\n * @property {boolean} vertical - Whether or not the text is in vertical mode.\n * @property {string} fontFamily - The possible font family.\n */\n\n/**\n * Page annotation parameters.\n *\n * @typedef {Object} GetAnnotationsParameters\n * @property {string} [intent] - Determines the annotations that are fetched,\n * can be 'display' (viewable annotations), 'print' (printable annotations),\n * or 'any' (all annotations). The default value is 'display'.\n */\n\n/**\n * Page render parameters.\n *\n * @typedef {Object} RenderParameters\n * @property {CanvasRenderingContext2D} canvasContext - A 2D context of a DOM\n * Canvas object.\n * @property {PageViewport} viewport - Rendering viewport obtained by calling\n * the `PDFPageProxy.getViewport` method.\n * @property {string} [intent] - Rendering intent, can be 'display', 'print',\n * or 'any'. The default value is 'display'.\n * @property {number} [annotationMode] Controls which annotations are rendered\n * onto the canvas, for annotations with appearance-data; the values from\n * {@link AnnotationMode} should be used. The following values are supported:\n * - `AnnotationMode.DISABLE`, which disables all annotations.\n * - `AnnotationMode.ENABLE`, which includes all possible annotations (thus\n * it also depends on the `intent`-option, see above).\n * - `AnnotationMode.ENABLE_FORMS`, which excludes annotations that contain\n * interactive form elements (those will be rendered in the display layer).\n * - `AnnotationMode.ENABLE_STORAGE`, which includes all possible annotations\n * (as above) but where interactive form elements are updated with data\n * from the {@link AnnotationStorage}-instance; useful e.g. for printing.\n * The default value is `AnnotationMode.ENABLE`.\n * @property {Array} [transform] - Additional transform, applied just\n * before viewport transform.\n * @property {CanvasGradient | CanvasPattern | string} [background] - Background\n * to use for the canvas.\n * Any valid `canvas.fillStyle` can be used: a `DOMString` parsed as CSS\n * value, a `CanvasGradient` object (a linear or radial gradient) or\n * a `CanvasPattern` object (a repetitive image). The default value is\n * 'rgb(255,255,255)'.\n *\n * NOTE: This option may be partially, or completely, ignored when the\n * `pageColors`-option is used.\n * @property {Object} [pageColors] - Overwrites background and foreground colors\n * with user defined ones in order to improve readability in high contrast\n * mode.\n * @property {Promise} [optionalContentConfigPromise] -\n * A promise that should resolve with an {@link OptionalContentConfig}\n * created from `PDFDocumentProxy.getOptionalContentConfig`. If `null`,\n * the configuration will be fetched automatically with the default visibility\n * states set.\n * @property {Map} [annotationCanvasMap] - Map some\n * annotation ids with canvases used to render them.\n * @property {PrintAnnotationStorage} [printAnnotationStorage]\n */\n\n/**\n * Page getOperatorList parameters.\n *\n * @typedef {Object} GetOperatorListParameters\n * @property {string} [intent] - Rendering intent, can be 'display', 'print',\n * or 'any'. The default value is 'display'.\n * @property {number} [annotationMode] Controls which annotations are included\n * in the operatorList, for annotations with appearance-data; the values from\n * {@link AnnotationMode} should be used. The following values are supported:\n * - `AnnotationMode.DISABLE`, which disables all annotations.\n * - `AnnotationMode.ENABLE`, which includes all possible annotations (thus\n * it also depends on the `intent`-option, see above).\n * - `AnnotationMode.ENABLE_FORMS`, which excludes annotations that contain\n * interactive form elements (those will be rendered in the display layer).\n * - `AnnotationMode.ENABLE_STORAGE`, which includes all possible annotations\n * (as above) but where interactive form elements are updated with data\n * from the {@link AnnotationStorage}-instance; useful e.g. for printing.\n * The default value is `AnnotationMode.ENABLE`.\n * @property {PrintAnnotationStorage} [printAnnotationStorage]\n */\n\n/**\n * Structure tree node. The root node will have a role \"Root\".\n *\n * @typedef {Object} StructTreeNode\n * @property {Array} children - Array of\n * {@link StructTreeNode} and {@link StructTreeContent} objects.\n * @property {string} role - element's role, already mapped if a role map exists\n * in the PDF.\n */\n\n/**\n * Structure tree content.\n *\n * @typedef {Object} StructTreeContent\n * @property {string} type - either \"content\" for page and stream structure\n * elements or \"object\" for object references.\n * @property {string} id - unique id that will map to the text layer.\n */\n\n/**\n * PDF page operator list.\n *\n * @typedef {Object} PDFOperatorList\n * @property {Array} fnArray - Array containing the operator functions.\n * @property {Array} argsArray - Array containing the arguments of the\n * functions.\n */\n\n/**\n * Proxy to a `PDFPage` in the worker thread.\n */\nclass PDFPageProxy {\n #delayedCleanupTimeout = null;\n\n #pendingCleanup = false;\n\n constructor(pageIndex, pageInfo, transport, pdfBug = false) {\n this._pageIndex = pageIndex;\n this._pageInfo = pageInfo;\n this._transport = transport;\n this._stats = pdfBug ? new StatTimer() : null;\n this._pdfBug = pdfBug;\n /** @type {PDFObjects} */\n this.commonObjs = transport.commonObjs;\n this.objs = new PDFObjects();\n\n this._maybeCleanupAfterRender = false;\n this._intentStates = new Map();\n this.destroyed = false;\n }\n\n /**\n * @type {number} Page number of the page. First page is 1.\n */\n get pageNumber() {\n return this._pageIndex + 1;\n }\n\n /**\n * @type {number} The number of degrees the page is rotated clockwise.\n */\n get rotate() {\n return this._pageInfo.rotate;\n }\n\n /**\n * @type {RefProxy | null} The reference that points to this page.\n */\n get ref() {\n return this._pageInfo.ref;\n }\n\n /**\n * @type {number} The default size of units in 1/72nds of an inch.\n */\n get userUnit() {\n return this._pageInfo.userUnit;\n }\n\n /**\n * @type {Array} An array of the visible portion of the PDF page in\n * user space units [x1, y1, x2, y2].\n */\n get view() {\n return this._pageInfo.view;\n }\n\n /**\n * @param {GetViewportParameters} params - Viewport parameters.\n * @returns {PageViewport} Contains 'width' and 'height' properties\n * along with transforms required for rendering.\n */\n getViewport({\n scale,\n rotation = this.rotate,\n offsetX = 0,\n offsetY = 0,\n dontFlip = false,\n } = {}) {\n return new PageViewport({\n viewBox: this.view,\n scale,\n rotation,\n offsetX,\n offsetY,\n dontFlip,\n });\n }\n\n /**\n * @param {GetAnnotationsParameters} params - Annotation parameters.\n * @returns {Promise>} A promise that is resolved with an\n * {Array} of the annotation objects.\n */\n getAnnotations({ intent = \"display\" } = {}) {\n const intentArgs = this._transport.getRenderingIntent(intent);\n\n return this._transport.getAnnotations(\n this._pageIndex,\n intentArgs.renderingIntent\n );\n }\n\n /**\n * @returns {Promise} A promise that is resolved with an\n * {Object} with JS actions.\n */\n getJSActions() {\n return this._transport.getPageJSActions(this._pageIndex);\n }\n\n /**\n * @type {Object} The filter factory instance.\n */\n get filterFactory() {\n return this._transport.filterFactory;\n }\n\n /**\n * @type {boolean} True if only XFA form.\n */\n get isPureXfa() {\n return shadow(this, \"isPureXfa\", !!this._transport._htmlForXfa);\n }\n\n /**\n * @returns {Promise} A promise that is resolved with\n * an {Object} with a fake DOM object (a tree structure where elements\n * are {Object} with a name, attributes (class, style, ...), value and\n * children, very similar to a HTML DOM tree), or `null` if no XFA exists.\n */\n async getXfa() {\n return this._transport._htmlForXfa?.children[this._pageIndex] || null;\n }\n\n /**\n * Begins the process of rendering a page to the desired context.\n *\n * @param {RenderParameters} params - Page render parameters.\n * @returns {RenderTask} An object that contains a promise that is\n * resolved when the page finishes rendering.\n */\n render({\n canvasContext,\n viewport,\n intent = \"display\",\n annotationMode = AnnotationMode.ENABLE,\n transform = null,\n background = null,\n optionalContentConfigPromise = null,\n annotationCanvasMap = null,\n pageColors = null,\n printAnnotationStorage = null,\n }) {\n this._stats?.time(\"Overall\");\n\n const intentArgs = this._transport.getRenderingIntent(\n intent,\n annotationMode,\n printAnnotationStorage\n );\n // If there was a pending destroy, cancel it so no cleanup happens during\n // this call to render...\n this.#pendingCleanup = false;\n // ... and ensure that a delayed cleanup is always aborted.\n this.#abortDelayedCleanup();\n\n if (!optionalContentConfigPromise) {\n optionalContentConfigPromise = this._transport.getOptionalContentConfig();\n }\n\n let intentState = this._intentStates.get(intentArgs.cacheKey);\n if (!intentState) {\n intentState = Object.create(null);\n this._intentStates.set(intentArgs.cacheKey, intentState);\n }\n\n // Ensure that a pending `streamReader` cancel timeout is always aborted.\n if (intentState.streamReaderCancelTimeout) {\n clearTimeout(intentState.streamReaderCancelTimeout);\n intentState.streamReaderCancelTimeout = null;\n }\n\n const intentPrint = !!(\n intentArgs.renderingIntent & RenderingIntentFlag.PRINT\n );\n\n // If there's no displayReadyCapability yet, then the operatorList\n // was never requested before. Make the request and create the promise.\n if (!intentState.displayReadyCapability) {\n intentState.displayReadyCapability = new PromiseCapability();\n intentState.operatorList = {\n fnArray: [],\n argsArray: [],\n lastChunk: false,\n separateAnnots: null,\n };\n\n this._stats?.time(\"Page Request\");\n this._pumpOperatorList(intentArgs);\n }\n\n const complete = error => {\n intentState.renderTasks.delete(internalRenderTask);\n\n // Attempt to reduce memory usage during *printing*, by always running\n // cleanup immediately once rendering has finished.\n if (this._maybeCleanupAfterRender || intentPrint) {\n this.#pendingCleanup = true;\n }\n this.#tryCleanup(/* delayed = */ !intentPrint);\n\n if (error) {\n internalRenderTask.capability.reject(error);\n\n this._abortOperatorList({\n intentState,\n reason: error instanceof Error ? error : new Error(error),\n });\n } else {\n internalRenderTask.capability.resolve();\n }\n\n this._stats?.timeEnd(\"Rendering\");\n this._stats?.timeEnd(\"Overall\");\n };\n\n const internalRenderTask = new InternalRenderTask({\n callback: complete,\n // Only include the required properties, and *not* the entire object.\n params: {\n canvasContext,\n viewport,\n transform,\n background,\n },\n objs: this.objs,\n commonObjs: this.commonObjs,\n annotationCanvasMap,\n operatorList: intentState.operatorList,\n pageIndex: this._pageIndex,\n canvasFactory: this._transport.canvasFactory,\n filterFactory: this._transport.filterFactory,\n useRequestAnimationFrame: !intentPrint,\n pdfBug: this._pdfBug,\n pageColors,\n });\n\n (intentState.renderTasks ||= new Set()).add(internalRenderTask);\n const renderTask = internalRenderTask.task;\n\n Promise.all([\n intentState.displayReadyCapability.promise,\n optionalContentConfigPromise,\n ])\n .then(([transparency, optionalContentConfig]) => {\n if (this.destroyed) {\n complete();\n return;\n }\n this._stats?.time(\"Rendering\");\n\n internalRenderTask.initializeGraphics({\n transparency,\n optionalContentConfig,\n });\n internalRenderTask.operatorListChanged();\n })\n .catch(complete);\n\n return renderTask;\n }\n\n /**\n * @param {GetOperatorListParameters} params - Page getOperatorList\n * parameters.\n * @returns {Promise} A promise resolved with an\n * {@link PDFOperatorList} object that represents the page's operator list.\n */\n getOperatorList({\n intent = \"display\",\n annotationMode = AnnotationMode.ENABLE,\n printAnnotationStorage = null,\n } = {}) {\n if (typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"GENERIC\")) {\n throw new Error(\"Not implemented: getOperatorList\");\n }\n function operatorListChanged() {\n if (intentState.operatorList.lastChunk) {\n intentState.opListReadCapability.resolve(intentState.operatorList);\n\n intentState.renderTasks.delete(opListTask);\n }\n }\n\n const intentArgs = this._transport.getRenderingIntent(\n intent,\n annotationMode,\n printAnnotationStorage,\n /* isOpList = */ true\n );\n let intentState = this._intentStates.get(intentArgs.cacheKey);\n if (!intentState) {\n intentState = Object.create(null);\n this._intentStates.set(intentArgs.cacheKey, intentState);\n }\n let opListTask;\n\n if (!intentState.opListReadCapability) {\n opListTask = Object.create(null);\n opListTask.operatorListChanged = operatorListChanged;\n intentState.opListReadCapability = new PromiseCapability();\n (intentState.renderTasks ||= new Set()).add(opListTask);\n intentState.operatorList = {\n fnArray: [],\n argsArray: [],\n lastChunk: false,\n separateAnnots: null,\n };\n\n this._stats?.time(\"Page Request\");\n this._pumpOperatorList(intentArgs);\n }\n return intentState.opListReadCapability.promise;\n }\n\n /**\n * NOTE: All occurrences of whitespace will be replaced by\n * standard spaces (0x20).\n *\n * @param {getTextContentParameters} params - getTextContent parameters.\n * @returns {ReadableStream} Stream for reading text content chunks.\n */\n streamTextContent({\n includeMarkedContent = false,\n disableNormalization = false,\n } = {}) {\n const TEXT_CONTENT_CHUNK_SIZE = 100;\n\n return this._transport.messageHandler.sendWithStream(\n \"GetTextContent\",\n {\n pageIndex: this._pageIndex,\n includeMarkedContent: includeMarkedContent === true,\n disableNormalization: disableNormalization === true,\n },\n {\n highWaterMark: TEXT_CONTENT_CHUNK_SIZE,\n size(textContent) {\n return textContent.items.length;\n },\n }\n );\n }\n\n /**\n * NOTE: All occurrences of whitespace will be replaced by\n * standard spaces (0x20).\n *\n * @param {getTextContentParameters} params - getTextContent parameters.\n * @returns {Promise} A promise that is resolved with a\n * {@link TextContent} object that represents the page's text content.\n */\n getTextContent(params = {}) {\n if (this._transport._htmlForXfa) {\n // TODO: We need to revisit this once the XFA foreground patch lands and\n // only do this for non-foreground XFA.\n return this.getXfa().then(xfa => {\n return XfaText.textContent(xfa);\n });\n }\n const readableStream = this.streamTextContent(params);\n\n return new Promise(function (resolve, reject) {\n function pump() {\n reader.read().then(function ({ value, done }) {\n if (done) {\n resolve(textContent);\n return;\n }\n Object.assign(textContent.styles, value.styles);\n textContent.items.push(...value.items);\n pump();\n }, reject);\n }\n\n const reader = readableStream.getReader();\n const textContent = {\n items: [],\n styles: Object.create(null),\n };\n pump();\n });\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a\n * {@link StructTreeNode} object that represents the page's structure tree,\n * or `null` when no structure tree is present for the current page.\n */\n getStructTree() {\n return this._transport.getStructTree(this._pageIndex);\n }\n\n /**\n * Destroys the page object.\n * @private\n */\n _destroy() {\n this.destroyed = true;\n\n const waitOn = [];\n for (const intentState of this._intentStates.values()) {\n this._abortOperatorList({\n intentState,\n reason: new Error(\"Page was destroyed.\"),\n force: true,\n });\n\n if (intentState.opListReadCapability) {\n // Avoid errors below, since the renderTasks are just stubs.\n continue;\n }\n for (const internalRenderTask of intentState.renderTasks) {\n waitOn.push(internalRenderTask.completed);\n internalRenderTask.cancel();\n }\n }\n this.objs.clear();\n this.#pendingCleanup = false;\n this.#abortDelayedCleanup();\n\n return Promise.all(waitOn);\n }\n\n /**\n * Cleans up resources allocated by the page.\n *\n * @param {boolean} [resetStats] - Reset page stats, if enabled.\n * The default value is `false`.\n * @returns {boolean} Indicates if clean-up was successfully run.\n */\n cleanup(resetStats = false) {\n this.#pendingCleanup = true;\n const success = this.#tryCleanup(/* delayed = */ false);\n\n if (resetStats && success) {\n this._stats &&= new StatTimer();\n }\n return success;\n }\n\n /**\n * Attempts to clean up if rendering is in a state where that's possible.\n * @param {boolean} [delayed] - Delay the cleanup, to e.g. improve zooming\n * performance in documents with large images.\n * The default value is `false`.\n * @returns {boolean} Indicates if clean-up was successfully run.\n */\n #tryCleanup(delayed = false) {\n this.#abortDelayedCleanup();\n\n if (!this.#pendingCleanup || this.destroyed) {\n return false;\n }\n if (delayed) {\n this.#delayedCleanupTimeout = setTimeout(() => {\n this.#delayedCleanupTimeout = null;\n this.#tryCleanup(/* delayed = */ false);\n }, DELAYED_CLEANUP_TIMEOUT);\n\n return false;\n }\n for (const { renderTasks, operatorList } of this._intentStates.values()) {\n if (renderTasks.size > 0 || !operatorList.lastChunk) {\n return false;\n }\n }\n this._intentStates.clear();\n this.objs.clear();\n this.#pendingCleanup = false;\n return true;\n }\n\n #abortDelayedCleanup() {\n if (this.#delayedCleanupTimeout) {\n clearTimeout(this.#delayedCleanupTimeout);\n this.#delayedCleanupTimeout = null;\n }\n }\n\n /**\n * @private\n */\n _startRenderPage(transparency, cacheKey) {\n const intentState = this._intentStates.get(cacheKey);\n if (!intentState) {\n return; // Rendering was cancelled.\n }\n this._stats?.timeEnd(\"Page Request\");\n\n // TODO Refactor RenderPageRequest to separate rendering\n // and operator list logic\n intentState.displayReadyCapability?.resolve(transparency);\n }\n\n /**\n * @private\n */\n _renderPageChunk(operatorListChunk, intentState) {\n // Add the new chunk to the current operator list.\n for (let i = 0, ii = operatorListChunk.length; i < ii; i++) {\n intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]);\n intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]);\n }\n intentState.operatorList.lastChunk = operatorListChunk.lastChunk;\n intentState.operatorList.separateAnnots = operatorListChunk.separateAnnots;\n\n // Notify all the rendering tasks there are more operators to be consumed.\n for (const internalRenderTask of intentState.renderTasks) {\n internalRenderTask.operatorListChanged();\n }\n\n if (operatorListChunk.lastChunk) {\n this.#tryCleanup(/* delayed = */ true);\n }\n }\n\n /**\n * @private\n */\n _pumpOperatorList({\n renderingIntent,\n cacheKey,\n annotationStorageSerializable,\n }) {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n assert(\n Number.isInteger(renderingIntent) && renderingIntent > 0,\n '_pumpOperatorList: Expected valid \"renderingIntent\" argument.'\n );\n }\n const { map, transfer } = annotationStorageSerializable;\n\n const readableStream = this._transport.messageHandler.sendWithStream(\n \"GetOperatorList\",\n {\n pageIndex: this._pageIndex,\n intent: renderingIntent,\n cacheKey,\n annotationStorage: map,\n },\n transfer\n );\n const reader = readableStream.getReader();\n\n const intentState = this._intentStates.get(cacheKey);\n intentState.streamReader = reader;\n\n const pump = () => {\n reader.read().then(\n ({ value, done }) => {\n if (done) {\n intentState.streamReader = null;\n return;\n }\n if (this._transport.destroyed) {\n return; // Ignore any pending requests if the worker was terminated.\n }\n this._renderPageChunk(value, intentState);\n pump();\n },\n reason => {\n intentState.streamReader = null;\n\n if (this._transport.destroyed) {\n return; // Ignore any pending requests if the worker was terminated.\n }\n if (intentState.operatorList) {\n // Mark operator list as complete.\n intentState.operatorList.lastChunk = true;\n\n for (const internalRenderTask of intentState.renderTasks) {\n internalRenderTask.operatorListChanged();\n }\n this.#tryCleanup(/* delayed = */ true);\n }\n\n if (intentState.displayReadyCapability) {\n intentState.displayReadyCapability.reject(reason);\n } else if (intentState.opListReadCapability) {\n intentState.opListReadCapability.reject(reason);\n } else {\n throw reason;\n }\n }\n );\n };\n pump();\n }\n\n /**\n * @private\n */\n _abortOperatorList({ intentState, reason, force = false }) {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n assert(\n reason instanceof Error,\n '_abortOperatorList: Expected valid \"reason\" argument.'\n );\n }\n\n if (!intentState.streamReader) {\n return;\n }\n // Ensure that a pending `streamReader` cancel timeout is always aborted.\n if (intentState.streamReaderCancelTimeout) {\n clearTimeout(intentState.streamReaderCancelTimeout);\n intentState.streamReaderCancelTimeout = null;\n }\n\n if (!force) {\n // Ensure that an Error occurring in *only* one `InternalRenderTask`, e.g.\n // multiple render() calls on the same canvas, won't break all rendering.\n if (intentState.renderTasks.size > 0) {\n return;\n }\n // Don't immediately abort parsing on the worker-thread when rendering is\n // cancelled, since that will unnecessarily delay re-rendering when (for\n // partially parsed pages) e.g. zooming/rotation occurs in the viewer.\n if (reason instanceof RenderingCancelledException) {\n let delay = RENDERING_CANCELLED_TIMEOUT;\n if (reason.extraDelay > 0 && reason.extraDelay < /* ms = */ 1000) {\n // Above, we prevent the total delay from becoming arbitrarily large.\n delay += reason.extraDelay;\n }\n\n intentState.streamReaderCancelTimeout = setTimeout(() => {\n intentState.streamReaderCancelTimeout = null;\n this._abortOperatorList({ intentState, reason, force: true });\n }, delay);\n return;\n }\n }\n intentState.streamReader\n .cancel(new AbortException(reason.message))\n .catch(() => {\n // Avoid \"Uncaught promise\" messages in the console.\n });\n intentState.streamReader = null;\n\n if (this._transport.destroyed) {\n return; // Ignore any pending requests if the worker was terminated.\n }\n // Remove the current `intentState`, since a cancelled `getOperatorList`\n // call on the worker-thread cannot be re-started...\n for (const [curCacheKey, curIntentState] of this._intentStates) {\n if (curIntentState === intentState) {\n this._intentStates.delete(curCacheKey);\n break;\n }\n }\n // ... and force clean-up to ensure that any old state is always removed.\n this.cleanup();\n }\n\n /**\n * @type {StatTimer | null} Returns page stats, if enabled; returns `null`\n * otherwise.\n */\n get stats() {\n return this._stats;\n }\n}\n\nclass LoopbackPort {\n #listeners = new Set();\n\n #deferred = Promise.resolve();\n\n postMessage(obj, transfer) {\n const event = {\n data: structuredClone(obj, transfer ? { transfer } : null),\n };\n\n this.#deferred.then(() => {\n for (const listener of this.#listeners) {\n listener.call(this, event);\n }\n });\n }\n\n addEventListener(name, listener) {\n this.#listeners.add(listener);\n }\n\n removeEventListener(name, listener) {\n this.#listeners.delete(listener);\n }\n\n terminate() {\n this.#listeners.clear();\n }\n}\n\n/**\n * @typedef {Object} PDFWorkerParameters\n * @property {string} [name] - The name of the worker.\n * @property {Worker} [port] - The `workerPort` object.\n * @property {number} [verbosity] - Controls the logging level;\n * the constants from {@link VerbosityLevel} should be used.\n */\n\nconst PDFWorkerUtil = {\n isWorkerDisabled: false,\n fakeWorkerId: 0,\n};\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n if (isNodeJS) {\n // Workers aren't supported in Node.js, force-disabling them there.\n PDFWorkerUtil.isWorkerDisabled = true;\n\n GlobalWorkerOptions.workerSrc ||= PDFJSDev.test(\"LIB\")\n ? \"../pdf.worker.js\"\n : \"./pdf.worker.mjs\";\n }\n\n // Check if URLs have the same origin. For non-HTTP based URLs, returns false.\n PDFWorkerUtil.isSameOrigin = function (baseUrl, otherUrl) {\n let base;\n try {\n base = new URL(baseUrl);\n if (!base.origin || base.origin === \"null\") {\n return false; // non-HTTP url\n }\n } catch {\n return false;\n }\n\n const other = new URL(otherUrl, base);\n return base.origin === other.origin;\n };\n\n PDFWorkerUtil.createCDNWrapper = function (url) {\n // We will rely on blob URL's property to specify origin.\n // We want this function to fail in case if createObjectURL or Blob do not\n // exist or fail for some reason -- our Worker creation will fail anyway.\n const wrapper = `await import(\"${url}\");`;\n return URL.createObjectURL(new Blob([wrapper]));\n };\n}\n\n/**\n * PDF.js web worker abstraction that controls the instantiation of PDF\n * documents. Message handlers are used to pass information from the main\n * thread to the worker thread and vice versa. If the creation of a web\n * worker is not possible, a \"fake\" worker will be used instead.\n *\n * @param {PDFWorkerParameters} params - The worker initialization parameters.\n */\nclass PDFWorker {\n static #workerPorts;\n\n constructor({\n name = null,\n port = null,\n verbosity = getVerbosityLevel(),\n } = {}) {\n this.name = name;\n this.destroyed = false;\n this.verbosity = verbosity;\n\n this._readyCapability = new PromiseCapability();\n this._port = null;\n this._webWorker = null;\n this._messageHandler = null;\n\n if (\n (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) &&\n port\n ) {\n if (PDFWorker.#workerPorts?.has(port)) {\n throw new Error(\"Cannot use more than one PDFWorker per port.\");\n }\n (PDFWorker.#workerPorts ||= new WeakMap()).set(port, this);\n this._initializeFromPort(port);\n return;\n }\n this._initialize();\n }\n\n /**\n * Promise for worker initialization completion.\n * @type {Promise}\n */\n get promise() {\n return this._readyCapability.promise;\n }\n\n /**\n * The current `workerPort`, when it exists.\n * @type {Worker}\n */\n get port() {\n return this._port;\n }\n\n /**\n * The current MessageHandler-instance.\n * @type {MessageHandler}\n */\n get messageHandler() {\n return this._messageHandler;\n }\n\n _initializeFromPort(port) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: _initializeFromPort\");\n }\n this._port = port;\n this._messageHandler = new MessageHandler(\"main\", \"worker\", port);\n this._messageHandler.on(\"ready\", function () {\n // Ignoring \"ready\" event -- MessageHandler should already be initialized\n // and ready to accept messages.\n });\n this._readyCapability.resolve();\n // Send global setting, e.g. verbosity level.\n this._messageHandler.send(\"configure\", {\n verbosity: this.verbosity,\n });\n }\n\n _initialize() {\n // If worker support isn't disabled explicit and the browser has worker\n // support, create a new web worker and test if it/the browser fulfills\n // all requirements to run parts of pdf.js in a web worker.\n // Right now, the requirement is, that an Uint8Array is still an\n // Uint8Array as it arrives on the worker. (Chrome added this with v.15.)\n if (\n !PDFWorkerUtil.isWorkerDisabled &&\n !PDFWorker.#mainThreadWorkerMessageHandler\n ) {\n let { workerSrc } = PDFWorker;\n\n try {\n // Wraps workerSrc path into blob URL, if the former does not belong\n // to the same origin.\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"GENERIC\") &&\n !PDFWorkerUtil.isSameOrigin(window.location.href, workerSrc)\n ) {\n workerSrc = PDFWorkerUtil.createCDNWrapper(\n new URL(workerSrc, window.location).href\n );\n }\n\n const worker = new Worker(workerSrc, { type: \"module\" });\n const messageHandler = new MessageHandler(\"main\", \"worker\", worker);\n const terminateEarly = () => {\n worker.removeEventListener(\"error\", onWorkerError);\n messageHandler.destroy();\n worker.terminate();\n if (this.destroyed) {\n this._readyCapability.reject(new Error(\"Worker was destroyed\"));\n } else {\n // Fall back to fake worker if the termination is caused by an\n // error (e.g. NetworkError / SecurityError).\n this._setupFakeWorker();\n }\n };\n\n const onWorkerError = () => {\n if (!this._webWorker) {\n // Worker failed to initialize due to an error. Clean up and fall\n // back to the fake worker.\n terminateEarly();\n }\n };\n worker.addEventListener(\"error\", onWorkerError);\n\n messageHandler.on(\"test\", data => {\n worker.removeEventListener(\"error\", onWorkerError);\n if (this.destroyed) {\n terminateEarly();\n return; // worker was destroyed\n }\n if (data) {\n this._messageHandler = messageHandler;\n this._port = worker;\n this._webWorker = worker;\n\n this._readyCapability.resolve();\n // Send global setting, e.g. verbosity level.\n messageHandler.send(\"configure\", {\n verbosity: this.verbosity,\n });\n } else {\n this._setupFakeWorker();\n messageHandler.destroy();\n worker.terminate();\n }\n });\n\n messageHandler.on(\"ready\", data => {\n worker.removeEventListener(\"error\", onWorkerError);\n if (this.destroyed) {\n terminateEarly();\n return; // worker was destroyed\n }\n try {\n sendTest();\n } catch {\n // We need fallback to a faked worker.\n this._setupFakeWorker();\n }\n });\n\n const sendTest = () => {\n const testObj = new Uint8Array();\n // Ensure that we can use `postMessage` transfers.\n messageHandler.send(\"test\", testObj, [testObj.buffer]);\n };\n\n // It might take time for the worker to initialize. We will try to send\n // the \"test\" message immediately, and once the \"ready\" message arrives.\n // The worker shall process only the first received \"test\" message.\n sendTest();\n return;\n } catch {\n info(\"The worker has been disabled.\");\n }\n }\n // Either workers are disabled, not supported or have thrown an exception.\n // Thus, we fallback to a faked worker.\n this._setupFakeWorker();\n }\n\n _setupFakeWorker() {\n if (!PDFWorkerUtil.isWorkerDisabled) {\n warn(\"Setting up fake worker.\");\n PDFWorkerUtil.isWorkerDisabled = true;\n }\n\n PDFWorker._setupFakeWorkerGlobal\n .then(WorkerMessageHandler => {\n if (this.destroyed) {\n this._readyCapability.reject(new Error(\"Worker was destroyed\"));\n return;\n }\n const port = new LoopbackPort();\n this._port = port;\n\n // All fake workers use the same port, making id unique.\n const id = `fake${PDFWorkerUtil.fakeWorkerId++}`;\n\n // If the main thread is our worker, setup the handling for the\n // messages -- the main thread sends to it self.\n const workerHandler = new MessageHandler(id + \"_worker\", id, port);\n WorkerMessageHandler.setup(workerHandler, port);\n\n const messageHandler = new MessageHandler(id, id + \"_worker\", port);\n this._messageHandler = messageHandler;\n this._readyCapability.resolve();\n // Send global setting, e.g. verbosity level.\n messageHandler.send(\"configure\", {\n verbosity: this.verbosity,\n });\n })\n .catch(reason => {\n this._readyCapability.reject(\n new Error(`Setting up fake worker failed: \"${reason.message}\".`)\n );\n });\n }\n\n /**\n * Destroys the worker instance.\n */\n destroy() {\n this.destroyed = true;\n if (this._webWorker) {\n // We need to terminate only web worker created resource.\n this._webWorker.terminate();\n this._webWorker = null;\n }\n PDFWorker.#workerPorts?.delete(this._port);\n this._port = null;\n if (this._messageHandler) {\n this._messageHandler.destroy();\n this._messageHandler = null;\n }\n }\n\n /**\n * @param {PDFWorkerParameters} params - The worker initialization parameters.\n */\n static fromPort(params) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: fromPort\");\n }\n if (!params?.port) {\n throw new Error(\"PDFWorker.fromPort - invalid method signature.\");\n }\n const cachedPort = this.#workerPorts?.get(params.port);\n if (cachedPort) {\n if (cachedPort._pendingDestroy) {\n throw new Error(\n \"PDFWorker.fromPort - the worker is being destroyed.\\n\" +\n \"Please remember to await `PDFDocumentLoadingTask.destroy()`-calls.\"\n );\n }\n return cachedPort;\n }\n return new PDFWorker(params);\n }\n\n /**\n * The current `workerSrc`, when it exists.\n * @type {string}\n */\n static get workerSrc() {\n if (GlobalWorkerOptions.workerSrc) {\n return GlobalWorkerOptions.workerSrc;\n }\n throw new Error('No \"GlobalWorkerOptions.workerSrc\" specified.');\n }\n\n static get #mainThreadWorkerMessageHandler() {\n try {\n return globalThis.pdfjsWorker?.WorkerMessageHandler || null;\n } catch {\n return null;\n }\n }\n\n // Loads worker code into the main-thread.\n static get _setupFakeWorkerGlobal() {\n const loader = async () => {\n if (this.#mainThreadWorkerMessageHandler) {\n // The worker was already loaded using e.g. a ` + + + + + + + +
+ +
+
+
+
+ + + + +
+
+ +
+ +
+
+
+
+
+ + + +
+
+
+ +
+ + + + + + + + + + +
+
+
+
+ +
+ +
+ +
+ +
+ + +
+
+ + + + + + +
+ +
+ + + +
+ +
+ + +
+
+
+ +
+ +
+ + + +
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+ +
+ +
+
+ +
+
+ + +
+
+ +
+ File name: +

-

+
+
+ File size: +

-

+
+
+
+ Title: +

-

+
+
+ Author: +

-

+
+
+ Subject: +

-

+
+
+ Keywords: +

-

+
+
+ Creation Date: +

-

+
+
+ Modification Date: +

-

+
+
+ Creator: +

-

+
+
+
+ PDF Producer: +

-

+
+
+ PDF Version: +

-

+
+
+ Page Count: +

-

+
+
+ Page Size: +

-

+
+
+
+ Fast Web View: +

-

+
+
+ +
+
+ +
+
+ Choose an option + + Alt text (alternative text) helps when people can’t see the image or when it doesn’t load. + +
+
+
+
+ + +
+
+ + Aim for 1-2 sentences that describe the subject, setting, or actions. + +
+
+
+ +
+
+
+
+
+ + +
+
+ + This is used for ornamental images, like borders or watermarks. + +
+
+
+
+ + +
+
+
+ +
+ Preparing document for printing… +
+
+ + 0% +
+
+ +
+
+
+ +
+
+ + + + diff --git a/qdntz/加载PDF/pdfjs-4.0.189-dist/web/viewer.mjs b/qdntz/加载PDF/pdfjs-4.0.189-dist/web/viewer.mjs new file mode 100644 index 0000000..bbda030 --- /dev/null +++ b/qdntz/加载PDF/pdfjs-4.0.189-dist/web/viewer.mjs @@ -0,0 +1,14099 @@ +/** + * @licstart The following is the entire license notice for the + * JavaScript code in this page + * + * Copyright 2023 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @licend The above is the entire license notice for the + * JavaScript code in this page + */ + +/******/ // The require scope +/******/ var __webpack_require__ = {}; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + PDFViewerApplication: () => (/* reexport */ PDFViewerApplication), + PDFViewerApplicationConstants: () => (/* binding */ AppConstants), + PDFViewerApplicationOptions: () => (/* reexport */ AppOptions) +}); + +;// CONCATENATED MODULE: ./web/ui_utils.js +const DEFAULT_SCALE_VALUE = "auto"; +const DEFAULT_SCALE = 1.0; +const DEFAULT_SCALE_DELTA = 1.1; +const MIN_SCALE = 0.1; +const MAX_SCALE = 10.0; +const UNKNOWN_SCALE = 0; +const MAX_AUTO_SCALE = 1.25; +const SCROLLBAR_PADDING = 40; +const VERTICAL_PADDING = 5; +const RenderingStates = { + INITIAL: 0, + RUNNING: 1, + PAUSED: 2, + FINISHED: 3 +}; +const PresentationModeState = { + UNKNOWN: 0, + NORMAL: 1, + CHANGING: 2, + FULLSCREEN: 3 +}; +const SidebarView = { + UNKNOWN: -1, + NONE: 0, + THUMBS: 1, + OUTLINE: 2, + ATTACHMENTS: 3, + LAYERS: 4 +}; +const TextLayerMode = { + DISABLE: 0, + ENABLE: 1, + ENABLE_PERMISSIONS: 2 +}; +const ScrollMode = { + UNKNOWN: -1, + VERTICAL: 0, + HORIZONTAL: 1, + WRAPPED: 2, + PAGE: 3 +}; +const SpreadMode = { + UNKNOWN: -1, + NONE: 0, + ODD: 1, + EVEN: 2 +}; +const CursorTool = { + SELECT: 0, + HAND: 1, + ZOOM: 2 +}; +const AutoPrintRegExp = /\bprint\s*\(/; +class OutputScale { + constructor() { + const pixelRatio = window.devicePixelRatio || 1; + this.sx = pixelRatio; + this.sy = pixelRatio; + } + get scaled() { + return this.sx !== 1 || this.sy !== 1; + } +} +function scrollIntoView(element, spot, scrollMatches = false) { + let parent = element.offsetParent; + if (!parent) { + console.error("offsetParent is not set -- cannot scroll"); + return; + } + let offsetY = element.offsetTop + element.clientTop; + let offsetX = element.offsetLeft + element.clientLeft; + while (parent.clientHeight === parent.scrollHeight && parent.clientWidth === parent.scrollWidth || scrollMatches && (parent.classList.contains("markedContent") || getComputedStyle(parent).overflow === "hidden")) { + offsetY += parent.offsetTop; + offsetX += parent.offsetLeft; + parent = parent.offsetParent; + if (!parent) { + return; + } + } + if (spot) { + if (spot.top !== undefined) { + offsetY += spot.top; + } + if (spot.left !== undefined) { + offsetX += spot.left; + parent.scrollLeft = offsetX; + } + } + parent.scrollTop = offsetY; +} +function watchScroll(viewAreaElement, callback) { + const debounceScroll = function (evt) { + if (rAF) { + return; + } + rAF = window.requestAnimationFrame(function viewAreaElementScrolled() { + rAF = null; + const currentX = viewAreaElement.scrollLeft; + const lastX = state.lastX; + if (currentX !== lastX) { + state.right = currentX > lastX; + } + state.lastX = currentX; + const currentY = viewAreaElement.scrollTop; + const lastY = state.lastY; + if (currentY !== lastY) { + state.down = currentY > lastY; + } + state.lastY = currentY; + callback(state); + }); + }; + const state = { + right: true, + down: true, + lastX: viewAreaElement.scrollLeft, + lastY: viewAreaElement.scrollTop, + _eventHandler: debounceScroll + }; + let rAF = null; + viewAreaElement.addEventListener("scroll", debounceScroll, true); + return state; +} +function parseQueryString(query) { + const params = new Map(); + for (const [key, value] of new URLSearchParams(query)) { + params.set(key.toLowerCase(), value); + } + return params; +} +const InvisibleCharactersRegExp = /[\x00-\x1F]/g; +function removeNullCharacters(str, replaceInvisible = false) { + if (!InvisibleCharactersRegExp.test(str)) { + return str; + } + if (replaceInvisible) { + return str.replaceAll(InvisibleCharactersRegExp, m => { + return m === "\x00" ? "" : " "; + }); + } + return str.replaceAll("\x00", ""); +} +function binarySearchFirstItem(items, condition, start = 0) { + let minIndex = start; + let maxIndex = items.length - 1; + if (maxIndex < 0 || !condition(items[maxIndex])) { + return items.length; + } + if (condition(items[minIndex])) { + return minIndex; + } + while (minIndex < maxIndex) { + const currentIndex = minIndex + maxIndex >> 1; + const currentItem = items[currentIndex]; + if (condition(currentItem)) { + maxIndex = currentIndex; + } else { + minIndex = currentIndex + 1; + } + } + return minIndex; +} +function approximateFraction(x) { + if (Math.floor(x) === x) { + return [x, 1]; + } + const xinv = 1 / x; + const limit = 8; + if (xinv > limit) { + return [1, limit]; + } else if (Math.floor(xinv) === xinv) { + return [1, xinv]; + } + const x_ = x > 1 ? xinv : x; + let a = 0, + b = 1, + c = 1, + d = 1; + while (true) { + const p = a + c, + q = b + d; + if (q > limit) { + break; + } + if (x_ <= p / q) { + c = p; + d = q; + } else { + a = p; + b = q; + } + } + let result; + if (x_ - a / b < c / d - x_) { + result = x_ === x ? [a, b] : [b, a]; + } else { + result = x_ === x ? [c, d] : [d, c]; + } + return result; +} +function roundToDivide(x, div) { + const r = x % div; + return r === 0 ? x : Math.round(x - r + div); +} +function getPageSizeInches({ + view, + userUnit, + rotate +}) { + const [x1, y1, x2, y2] = view; + const changeOrientation = rotate % 180 !== 0; + const width = (x2 - x1) / 72 * userUnit; + const height = (y2 - y1) / 72 * userUnit; + return { + width: changeOrientation ? height : width, + height: changeOrientation ? width : height + }; +} +function backtrackBeforeAllVisibleElements(index, views, top) { + if (index < 2) { + return index; + } + let elt = views[index].div; + let pageTop = elt.offsetTop + elt.clientTop; + if (pageTop >= top) { + elt = views[index - 1].div; + pageTop = elt.offsetTop + elt.clientTop; + } + for (let i = index - 2; i >= 0; --i) { + elt = views[i].div; + if (elt.offsetTop + elt.clientTop + elt.clientHeight <= pageTop) { + break; + } + index = i; + } + return index; +} +function getVisibleElements({ + scrollEl, + views, + sortByVisibility = false, + horizontal = false, + rtl = false +}) { + const top = scrollEl.scrollTop, + bottom = top + scrollEl.clientHeight; + const left = scrollEl.scrollLeft, + right = left + scrollEl.clientWidth; + function isElementBottomAfterViewTop(view) { + const element = view.div; + const elementBottom = element.offsetTop + element.clientTop + element.clientHeight; + return elementBottom > top; + } + function isElementNextAfterViewHorizontally(view) { + const element = view.div; + const elementLeft = element.offsetLeft + element.clientLeft; + const elementRight = elementLeft + element.clientWidth; + return rtl ? elementLeft < right : elementRight > left; + } + const visible = [], + ids = new Set(), + numViews = views.length; + let firstVisibleElementInd = binarySearchFirstItem(views, horizontal ? isElementNextAfterViewHorizontally : isElementBottomAfterViewTop); + if (firstVisibleElementInd > 0 && firstVisibleElementInd < numViews && !horizontal) { + firstVisibleElementInd = backtrackBeforeAllVisibleElements(firstVisibleElementInd, views, top); + } + let lastEdge = horizontal ? right : -1; + for (let i = firstVisibleElementInd; i < numViews; i++) { + const view = views[i], + element = view.div; + const currentWidth = element.offsetLeft + element.clientLeft; + const currentHeight = element.offsetTop + element.clientTop; + const viewWidth = element.clientWidth, + viewHeight = element.clientHeight; + const viewRight = currentWidth + viewWidth; + const viewBottom = currentHeight + viewHeight; + if (lastEdge === -1) { + if (viewBottom >= bottom) { + lastEdge = viewBottom; + } + } else if ((horizontal ? currentWidth : currentHeight) > lastEdge) { + break; + } + if (viewBottom <= top || currentHeight >= bottom || viewRight <= left || currentWidth >= right) { + continue; + } + const hiddenHeight = Math.max(0, top - currentHeight) + Math.max(0, viewBottom - bottom); + const hiddenWidth = Math.max(0, left - currentWidth) + Math.max(0, viewRight - right); + const fractionHeight = (viewHeight - hiddenHeight) / viewHeight, + fractionWidth = (viewWidth - hiddenWidth) / viewWidth; + const percent = fractionHeight * fractionWidth * 100 | 0; + visible.push({ + id: view.id, + x: currentWidth, + y: currentHeight, + view, + percent, + widthPercent: fractionWidth * 100 | 0 + }); + ids.add(view.id); + } + const first = visible[0], + last = visible.at(-1); + if (sortByVisibility) { + visible.sort(function (a, b) { + const pc = a.percent - b.percent; + if (Math.abs(pc) > 0.001) { + return -pc; + } + return a.id - b.id; + }); + } + return { + first, + last, + views: visible, + ids + }; +} +function normalizeWheelEventDirection(evt) { + let delta = Math.hypot(evt.deltaX, evt.deltaY); + const angle = Math.atan2(evt.deltaY, evt.deltaX); + if (-0.25 * Math.PI < angle && angle < 0.75 * Math.PI) { + delta = -delta; + } + return delta; +} +function normalizeWheelEventDelta(evt) { + const deltaMode = evt.deltaMode; + let delta = normalizeWheelEventDirection(evt); + const MOUSE_PIXELS_PER_LINE = 30; + const MOUSE_LINES_PER_PAGE = 30; + if (deltaMode === WheelEvent.DOM_DELTA_PIXEL) { + delta /= MOUSE_PIXELS_PER_LINE * MOUSE_LINES_PER_PAGE; + } else if (deltaMode === WheelEvent.DOM_DELTA_LINE) { + delta /= MOUSE_LINES_PER_PAGE; + } + return delta; +} +function isValidRotation(angle) { + return Number.isInteger(angle) && angle % 90 === 0; +} +function isValidScrollMode(mode) { + return Number.isInteger(mode) && Object.values(ScrollMode).includes(mode) && mode !== ScrollMode.UNKNOWN; +} +function isValidSpreadMode(mode) { + return Number.isInteger(mode) && Object.values(SpreadMode).includes(mode) && mode !== SpreadMode.UNKNOWN; +} +function isPortraitOrientation(size) { + return size.width <= size.height; +} +const animationStarted = new Promise(function (resolve) { + window.requestAnimationFrame(resolve); +}); +const docStyle = document.documentElement.style; +function clamp(v, min, max) { + return Math.min(Math.max(v, min), max); +} +class ProgressBar { + #classList = null; + #disableAutoFetchTimeout = null; + #percent = 0; + #style = null; + #visible = true; + constructor(bar) { + this.#classList = bar.classList; + this.#style = bar.style; + } + get percent() { + return this.#percent; + } + set percent(val) { + this.#percent = clamp(val, 0, 100); + if (isNaN(val)) { + this.#classList.add("indeterminate"); + return; + } + this.#classList.remove("indeterminate"); + this.#style.setProperty("--progressBar-percent", `${this.#percent}%`); + } + setWidth(viewer) { + if (!viewer) { + return; + } + const container = viewer.parentNode; + const scrollbarWidth = container.offsetWidth - viewer.offsetWidth; + if (scrollbarWidth > 0) { + this.#style.setProperty("--progressBar-end-offset", `${scrollbarWidth}px`); + } + } + setDisableAutoFetch(delay = 5000) { + if (isNaN(this.#percent)) { + return; + } + if (this.#disableAutoFetchTimeout) { + clearTimeout(this.#disableAutoFetchTimeout); + } + this.show(); + this.#disableAutoFetchTimeout = setTimeout(() => { + this.#disableAutoFetchTimeout = null; + this.hide(); + }, delay); + } + hide() { + if (!this.#visible) { + return; + } + this.#visible = false; + this.#classList.add("hidden"); + } + show() { + if (this.#visible) { + return; + } + this.#visible = true; + this.#classList.remove("hidden"); + } +} +function getActiveOrFocusedElement() { + let curRoot = document; + let curActiveOrFocused = curRoot.activeElement || curRoot.querySelector(":focus"); + while (curActiveOrFocused?.shadowRoot) { + curRoot = curActiveOrFocused.shadowRoot; + curActiveOrFocused = curRoot.activeElement || curRoot.querySelector(":focus"); + } + return curActiveOrFocused; +} +function apiPageLayoutToViewerModes(layout) { + let scrollMode = ScrollMode.VERTICAL, + spreadMode = SpreadMode.NONE; + switch (layout) { + case "SinglePage": + scrollMode = ScrollMode.PAGE; + break; + case "OneColumn": + break; + case "TwoPageLeft": + scrollMode = ScrollMode.PAGE; + case "TwoColumnLeft": + spreadMode = SpreadMode.ODD; + break; + case "TwoPageRight": + scrollMode = ScrollMode.PAGE; + case "TwoColumnRight": + spreadMode = SpreadMode.EVEN; + break; + } + return { + scrollMode, + spreadMode + }; +} +function apiPageModeToSidebarView(mode) { + switch (mode) { + case "UseNone": + return SidebarView.NONE; + case "UseThumbs": + return SidebarView.THUMBS; + case "UseOutlines": + return SidebarView.OUTLINE; + case "UseAttachments": + return SidebarView.ATTACHMENTS; + case "UseOC": + return SidebarView.LAYERS; + } + return SidebarView.NONE; +} +function toggleCheckedBtn(button, toggle, view = null) { + button.classList.toggle("toggled", toggle); + button.setAttribute("aria-checked", toggle); + view?.classList.toggle("hidden", !toggle); +} +function toggleExpandedBtn(button, toggle, view = null) { + button.classList.toggle("toggled", toggle); + button.setAttribute("aria-expanded", toggle); + view?.classList.toggle("hidden", !toggle); +} + +;// CONCATENATED MODULE: ./web/pdfjs.js +const { + AbortException, + AnnotationEditorLayer, + AnnotationEditorParamsType, + AnnotationEditorType, + AnnotationEditorUIManager, + AnnotationLayer, + AnnotationMode, + build, + CMapCompressionType, + createValidAbsoluteUrl, + DOMSVGFactory, + FeatureTest, + getDocument, + getFilenameFromUrl, + getPdfFilenameFromUrl: pdfjs_getPdfFilenameFromUrl, + getXfaPageViewport, + GlobalWorkerOptions, + ImageKind, + InvalidPDFException, + isDataScheme, + isPdfFile, + MissingPDFException, + noContextMenu, + normalizeUnicode, + OPS, + PasswordResponses, + PDFDataRangeTransport, + PDFDateString, + PDFWorker, + PermissionFlag, + PixelsPerInch, + PromiseCapability, + RenderingCancelledException, + renderTextLayer, + setLayerDimensions, + shadow, + UnexpectedResponseException, + updateTextLayer, + Util, + VerbosityLevel, + version, + XfaLayer +} = globalThis.pdfjsLib; + +;// CONCATENATED MODULE: ./web/app_options.js +const compatibilityParams = Object.create(null); +{ + const userAgent = navigator.userAgent || ""; + const platform = navigator.platform || ""; + const maxTouchPoints = navigator.maxTouchPoints || 1; + const isAndroid = /Android/.test(userAgent); + const isIOS = /\b(iPad|iPhone|iPod)(?=;)/.test(userAgent) || platform === "MacIntel" && maxTouchPoints > 1; + (function checkCanvasSizeLimitation() { + if (isIOS || isAndroid) { + compatibilityParams.maxCanvasPixels = 5242880; + } + })(); +} +const OptionKind = { + BROWSER: 0x01, + VIEWER: 0x02, + API: 0x04, + WORKER: 0x08, + PREFERENCE: 0x80 +}; +const defaultOptions = { + canvasMaxAreaInBytes: { + value: -1, + kind: OptionKind.BROWSER + OptionKind.API + }, + isInAutomation: { + value: false, + kind: OptionKind.BROWSER + }, + supportsDocumentFonts: { + value: true, + kind: OptionKind.BROWSER + }, + supportsIntegratedFind: { + value: false, + kind: OptionKind.BROWSER + }, + supportsMouseWheelZoomCtrlKey: { + value: true, + kind: OptionKind.BROWSER + }, + supportsMouseWheelZoomMetaKey: { + value: true, + kind: OptionKind.BROWSER + }, + supportsPinchToZoom: { + value: true, + kind: OptionKind.BROWSER + }, + annotationEditorMode: { + value: 0, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + annotationMode: { + value: 2, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + cursorToolOnLoad: { + value: 0, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + defaultZoomDelay: { + value: 400, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + defaultZoomValue: { + value: "", + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + disableHistory: { + value: false, + kind: OptionKind.VIEWER + }, + disablePageLabels: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + enablePermissions: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + enablePrintAutoRotate: { + value: true, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + enableScripting: { + value: true, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + externalLinkRel: { + value: "noopener noreferrer nofollow", + kind: OptionKind.VIEWER + }, + externalLinkTarget: { + value: 0, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + historyUpdateUrl: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + ignoreDestinationZoom: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + imageResourcesPath: { + value: "./images/", + kind: OptionKind.VIEWER + }, + maxCanvasPixels: { + value: 16777216, + kind: OptionKind.VIEWER + }, + forcePageColors: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + pageColorsBackground: { + value: "Canvas", + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + pageColorsForeground: { + value: "CanvasText", + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + pdfBugEnabled: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + printResolution: { + value: 150, + kind: OptionKind.VIEWER + }, + sidebarViewOnLoad: { + value: -1, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + scrollModeOnLoad: { + value: -1, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + spreadModeOnLoad: { + value: -1, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + textLayerMode: { + value: 1, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + viewOnLoad: { + value: 0, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + cMapPacked: { + value: true, + kind: OptionKind.API + }, + cMapUrl: { + value: "../web/cmaps/", + kind: OptionKind.API + }, + disableAutoFetch: { + value: false, + kind: OptionKind.API + OptionKind.PREFERENCE + }, + disableFontFace: { + value: false, + kind: OptionKind.API + OptionKind.PREFERENCE + }, + disableRange: { + value: false, + kind: OptionKind.API + OptionKind.PREFERENCE + }, + disableStream: { + value: false, + kind: OptionKind.API + OptionKind.PREFERENCE + }, + docBaseUrl: { + value: "", + kind: OptionKind.API + }, + enableXfa: { + value: true, + kind: OptionKind.API + OptionKind.PREFERENCE + }, + fontExtraProperties: { + value: false, + kind: OptionKind.API + }, + isEvalSupported: { + value: true, + kind: OptionKind.API + }, + isOffscreenCanvasSupported: { + value: true, + kind: OptionKind.API + }, + maxImageSize: { + value: -1, + kind: OptionKind.API + }, + pdfBug: { + value: false, + kind: OptionKind.API + }, + standardFontDataUrl: { + value: "../web/standard_fonts/", + kind: OptionKind.API + }, + verbosity: { + value: 1, + kind: OptionKind.API + }, + workerPort: { + value: null, + kind: OptionKind.WORKER + }, + workerSrc: { + value: "../build/pdf.worker.mjs", + kind: OptionKind.WORKER + } +}; +{ + defaultOptions.defaultUrl = { + value: "compressed.tracemonkey-pldi-09.pdf", + kind: OptionKind.VIEWER + }; + defaultOptions.disablePreferences = { + value: false, + kind: OptionKind.VIEWER + }; + defaultOptions.locale = { + value: navigator.language || "en-US", + kind: OptionKind.VIEWER + }; + defaultOptions.sandboxBundleSrc = { + value: "../build/pdf.sandbox.mjs", + kind: OptionKind.VIEWER + }; +} +const userOptions = Object.create(null); +class AppOptions { + constructor() { + throw new Error("Cannot initialize AppOptions."); + } + static get(name) { + const userOption = userOptions[name]; + if (userOption !== undefined) { + return userOption; + } + const defaultOption = defaultOptions[name]; + if (defaultOption !== undefined) { + return compatibilityParams[name] ?? defaultOption.value; + } + return undefined; + } + static getAll(kind = null) { + const options = Object.create(null); + for (const name in defaultOptions) { + const defaultOption = defaultOptions[name]; + if (kind) { + if (!(kind & defaultOption.kind)) { + continue; + } + } + const userOption = userOptions[name]; + options[name] = userOption !== undefined ? userOption : compatibilityParams[name] ?? defaultOption.value; + } + return options; + } + static set(name, value) { + userOptions[name] = value; + } + static setAll(options, init = false) { + if (init) { + if (this.get("disablePreferences")) { + return; + } + if (Object.keys(userOptions).length) { + console.warn("setAll: The Preferences may override manually set AppOptions; " + 'please use the "disablePreferences"-option in order to prevent that.'); + } + } + for (const name in options) { + userOptions[name] = options[name]; + } + } + static remove(name) { + delete userOptions[name]; + } +} + +;// CONCATENATED MODULE: ./web/event_utils.js +const WaitOnType = { + EVENT: "event", + TIMEOUT: "timeout" +}; +function waitOnEventOrTimeout({ + target, + name, + delay = 0 +}) { + return new Promise(function (resolve, reject) { + if (typeof target !== "object" || !(name && typeof name === "string") || !(Number.isInteger(delay) && delay >= 0)) { + throw new Error("waitOnEventOrTimeout - invalid parameters."); + } + function handler(type) { + if (target instanceof EventBus) { + target._off(name, eventHandler); + } else { + target.removeEventListener(name, eventHandler); + } + if (timeout) { + clearTimeout(timeout); + } + resolve(type); + } + const eventHandler = handler.bind(null, WaitOnType.EVENT); + if (target instanceof EventBus) { + target._on(name, eventHandler); + } else { + target.addEventListener(name, eventHandler); + } + const timeoutHandler = handler.bind(null, WaitOnType.TIMEOUT); + const timeout = setTimeout(timeoutHandler, delay); + }); +} +class EventBus { + #listeners = Object.create(null); + on(eventName, listener, options = null) { + this._on(eventName, listener, { + external: true, + once: options?.once + }); + } + off(eventName, listener, options = null) { + this._off(eventName, listener, { + external: true, + once: options?.once + }); + } + dispatch(eventName, data) { + const eventListeners = this.#listeners[eventName]; + if (!eventListeners || eventListeners.length === 0) { + return; + } + let externalListeners; + for (const { + listener, + external, + once + } of eventListeners.slice(0)) { + if (once) { + this._off(eventName, listener); + } + if (external) { + (externalListeners ||= []).push(listener); + continue; + } + listener(data); + } + if (externalListeners) { + for (const listener of externalListeners) { + listener(data); + } + externalListeners = null; + } + } + _on(eventName, listener, options = null) { + const eventListeners = this.#listeners[eventName] ||= []; + eventListeners.push({ + listener, + external: options?.external === true, + once: options?.once === true + }); + } + _off(eventName, listener, options = null) { + const eventListeners = this.#listeners[eventName]; + if (!eventListeners) { + return; + } + for (let i = 0, ii = eventListeners.length; i < ii; i++) { + if (eventListeners[i].listener === listener) { + eventListeners.splice(i, 1); + return; + } + } + } +} +class AutomationEventBus extends EventBus { + dispatch(eventName, data) { + throw new Error("Not implemented: AutomationEventBus.dispatch"); + } +} + +;// CONCATENATED MODULE: ./web/pdf_link_service.js + +const DEFAULT_LINK_REL = "noopener noreferrer nofollow"; +const LinkTarget = { + NONE: 0, + SELF: 1, + BLANK: 2, + PARENT: 3, + TOP: 4 +}; +function addLinkAttributes(link, { + url, + target, + rel, + enabled = true +} = {}) { + if (!url || typeof url !== "string") { + throw new Error('A valid "url" parameter must provided.'); + } + if (enabled) { + link.href = link.title = url; + } else { + link.href = ""; + link.title = `Disabled: ${url}`; + link.onclick = () => { + return false; + }; + } + let targetStr = ""; + switch (target) { + case LinkTarget.NONE: + break; + case LinkTarget.SELF: + targetStr = "_self"; + break; + case LinkTarget.BLANK: + targetStr = "_blank"; + break; + case LinkTarget.PARENT: + targetStr = "_parent"; + break; + case LinkTarget.TOP: + targetStr = "_top"; + break; + } + link.target = targetStr; + link.rel = typeof rel === "string" ? rel : DEFAULT_LINK_REL; +} +class PDFLinkService { + #pagesRefCache = new Map(); + constructor({ + eventBus, + externalLinkTarget = null, + externalLinkRel = null, + ignoreDestinationZoom = false + } = {}) { + this.eventBus = eventBus; + this.externalLinkTarget = externalLinkTarget; + this.externalLinkRel = externalLinkRel; + this.externalLinkEnabled = true; + this._ignoreDestinationZoom = ignoreDestinationZoom; + this.baseUrl = null; + this.pdfDocument = null; + this.pdfViewer = null; + this.pdfHistory = null; + } + setDocument(pdfDocument, baseUrl = null) { + this.baseUrl = baseUrl; + this.pdfDocument = pdfDocument; + this.#pagesRefCache.clear(); + } + setViewer(pdfViewer) { + this.pdfViewer = pdfViewer; + } + setHistory(pdfHistory) { + this.pdfHistory = pdfHistory; + } + get pagesCount() { + return this.pdfDocument ? this.pdfDocument.numPages : 0; + } + get page() { + return this.pdfViewer.currentPageNumber; + } + set page(value) { + this.pdfViewer.currentPageNumber = value; + } + get rotation() { + return this.pdfViewer.pagesRotation; + } + set rotation(value) { + this.pdfViewer.pagesRotation = value; + } + get isInPresentationMode() { + return this.pdfViewer.isInPresentationMode; + } + #goToDestinationHelper(rawDest, namedDest = null, explicitDest) { + const destRef = explicitDest[0]; + let pageNumber; + if (typeof destRef === "object" && destRef !== null) { + pageNumber = this._cachedPageNumber(destRef); + if (!pageNumber) { + this.pdfDocument.getPageIndex(destRef).then(pageIndex => { + this.cachePageRef(pageIndex + 1, destRef); + this.#goToDestinationHelper(rawDest, namedDest, explicitDest); + }).catch(() => { + console.error(`PDFLinkService.#goToDestinationHelper: "${destRef}" is not ` + `a valid page reference, for dest="${rawDest}".`); + }); + return; + } + } else if (Number.isInteger(destRef)) { + pageNumber = destRef + 1; + } else { + console.error(`PDFLinkService.#goToDestinationHelper: "${destRef}" is not ` + `a valid destination reference, for dest="${rawDest}".`); + return; + } + if (!pageNumber || pageNumber < 1 || pageNumber > this.pagesCount) { + console.error(`PDFLinkService.#goToDestinationHelper: "${pageNumber}" is not ` + `a valid page number, for dest="${rawDest}".`); + return; + } + if (this.pdfHistory) { + this.pdfHistory.pushCurrentPosition(); + this.pdfHistory.push({ + namedDest, + explicitDest, + pageNumber + }); + } + this.pdfViewer.scrollPageIntoView({ + pageNumber, + destArray: explicitDest, + ignoreDestinationZoom: this._ignoreDestinationZoom + }); + } + async goToDestination(dest) { + if (!this.pdfDocument) { + return; + } + let namedDest, explicitDest; + if (typeof dest === "string") { + namedDest = dest; + explicitDest = await this.pdfDocument.getDestination(dest); + } else { + namedDest = null; + explicitDest = await dest; + } + if (!Array.isArray(explicitDest)) { + console.error(`PDFLinkService.goToDestination: "${explicitDest}" is not ` + `a valid destination array, for dest="${dest}".`); + return; + } + this.#goToDestinationHelper(dest, namedDest, explicitDest); + } + goToPage(val) { + if (!this.pdfDocument) { + return; + } + const pageNumber = typeof val === "string" && this.pdfViewer.pageLabelToPageNumber(val) || val | 0; + if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.pagesCount)) { + console.error(`PDFLinkService.goToPage: "${val}" is not a valid page.`); + return; + } + if (this.pdfHistory) { + this.pdfHistory.pushCurrentPosition(); + this.pdfHistory.pushPage(pageNumber); + } + this.pdfViewer.scrollPageIntoView({ + pageNumber + }); + } + addLinkAttributes(link, url, newWindow = false) { + addLinkAttributes(link, { + url, + target: newWindow ? LinkTarget.BLANK : this.externalLinkTarget, + rel: this.externalLinkRel, + enabled: this.externalLinkEnabled + }); + } + getDestinationHash(dest) { + if (typeof dest === "string") { + if (dest.length > 0) { + return this.getAnchorUrl("#" + escape(dest)); + } + } else if (Array.isArray(dest)) { + const str = JSON.stringify(dest); + if (str.length > 0) { + return this.getAnchorUrl("#" + escape(str)); + } + } + return this.getAnchorUrl(""); + } + getAnchorUrl(anchor) { + return this.baseUrl ? this.baseUrl + anchor : anchor; + } + setHash(hash) { + if (!this.pdfDocument) { + return; + } + let pageNumber, dest; + if (hash.includes("=")) { + const params = parseQueryString(hash); + if (params.has("search")) { + const query = params.get("search").replaceAll('"', ""), + phrase = params.get("phrase") === "true"; + this.eventBus.dispatch("findfromurlhash", { + source: this, + query: phrase ? query : query.match(/\S+/g) + }); + } + if (params.has("page")) { + pageNumber = params.get("page") | 0 || 1; + } + if (params.has("zoom")) { + const zoomArgs = params.get("zoom").split(","); + const zoomArg = zoomArgs[0]; + const zoomArgNumber = parseFloat(zoomArg); + if (!zoomArg.includes("Fit")) { + dest = [null, { + name: "XYZ" + }, zoomArgs.length > 1 ? zoomArgs[1] | 0 : null, zoomArgs.length > 2 ? zoomArgs[2] | 0 : null, zoomArgNumber ? zoomArgNumber / 100 : zoomArg]; + } else if (zoomArg === "Fit" || zoomArg === "FitB") { + dest = [null, { + name: zoomArg + }]; + } else if (zoomArg === "FitH" || zoomArg === "FitBH" || zoomArg === "FitV" || zoomArg === "FitBV") { + dest = [null, { + name: zoomArg + }, zoomArgs.length > 1 ? zoomArgs[1] | 0 : null]; + } else if (zoomArg === "FitR") { + if (zoomArgs.length !== 5) { + console.error('PDFLinkService.setHash: Not enough parameters for "FitR".'); + } else { + dest = [null, { + name: zoomArg + }, zoomArgs[1] | 0, zoomArgs[2] | 0, zoomArgs[3] | 0, zoomArgs[4] | 0]; + } + } else { + console.error(`PDFLinkService.setHash: "${zoomArg}" is not a valid zoom value.`); + } + } + if (dest) { + this.pdfViewer.scrollPageIntoView({ + pageNumber: pageNumber || this.page, + destArray: dest, + allowNegativeOffset: true + }); + } else if (pageNumber) { + this.page = pageNumber; + } + if (params.has("pagemode")) { + this.eventBus.dispatch("pagemode", { + source: this, + mode: params.get("pagemode") + }); + } + if (params.has("nameddest")) { + this.goToDestination(params.get("nameddest")); + } + } else { + dest = unescape(hash); + try { + dest = JSON.parse(dest); + if (!Array.isArray(dest)) { + dest = dest.toString(); + } + } catch {} + if (typeof dest === "string" || PDFLinkService.#isValidExplicitDestination(dest)) { + this.goToDestination(dest); + return; + } + console.error(`PDFLinkService.setHash: "${unescape(hash)}" is not a valid destination.`); + } + } + executeNamedAction(action) { + switch (action) { + case "GoBack": + this.pdfHistory?.back(); + break; + case "GoForward": + this.pdfHistory?.forward(); + break; + case "NextPage": + this.pdfViewer.nextPage(); + break; + case "PrevPage": + this.pdfViewer.previousPage(); + break; + case "LastPage": + this.page = this.pagesCount; + break; + case "FirstPage": + this.page = 1; + break; + default: + break; + } + this.eventBus.dispatch("namedaction", { + source: this, + action + }); + } + async executeSetOCGState(action) { + const pdfDocument = this.pdfDocument; + const optionalContentConfig = await this.pdfViewer.optionalContentConfigPromise; + if (pdfDocument !== this.pdfDocument) { + return; + } + let operator; + for (const elem of action.state) { + switch (elem) { + case "ON": + case "OFF": + case "Toggle": + operator = elem; + continue; + } + switch (operator) { + case "ON": + optionalContentConfig.setVisibility(elem, true); + break; + case "OFF": + optionalContentConfig.setVisibility(elem, false); + break; + case "Toggle": + const group = optionalContentConfig.getGroup(elem); + if (group) { + optionalContentConfig.setVisibility(elem, !group.visible); + } + break; + } + } + this.pdfViewer.optionalContentConfigPromise = Promise.resolve(optionalContentConfig); + } + cachePageRef(pageNum, pageRef) { + if (!pageRef) { + return; + } + const refStr = pageRef.gen === 0 ? `${pageRef.num}R` : `${pageRef.num}R${pageRef.gen}`; + this.#pagesRefCache.set(refStr, pageNum); + } + _cachedPageNumber(pageRef) { + if (!pageRef) { + return null; + } + const refStr = pageRef.gen === 0 ? `${pageRef.num}R` : `${pageRef.num}R${pageRef.gen}`; + return this.#pagesRefCache.get(refStr) || null; + } + static #isValidExplicitDestination(dest) { + if (!Array.isArray(dest)) { + return false; + } + const destLength = dest.length; + if (destLength < 2) { + return false; + } + const page = dest[0]; + if (!(typeof page === "object" && Number.isInteger(page.num) && Number.isInteger(page.gen)) && !(Number.isInteger(page) && page >= 0)) { + return false; + } + const zoom = dest[1]; + if (!(typeof zoom === "object" && typeof zoom.name === "string")) { + return false; + } + let allowNull = true; + switch (zoom.name) { + case "XYZ": + if (destLength !== 5) { + return false; + } + break; + case "Fit": + case "FitB": + return destLength === 2; + case "FitH": + case "FitBH": + case "FitV": + case "FitBV": + if (destLength !== 3) { + return false; + } + break; + case "FitR": + if (destLength !== 6) { + return false; + } + allowNull = false; + break; + default: + return false; + } + for (let i = 2; i < destLength; i++) { + const param = dest[i]; + if (!(typeof param === "number" || allowNull && param === null)) { + return false; + } + } + return true; + } +} +class SimpleLinkService { + constructor() { + this.externalLinkEnabled = true; + } + get pagesCount() { + return 0; + } + get page() { + return 0; + } + set page(value) {} + get rotation() { + return 0; + } + set rotation(value) {} + get isInPresentationMode() { + return false; + } + async goToDestination(dest) {} + goToPage(val) {} + addLinkAttributes(link, url, newWindow = false) { + addLinkAttributes(link, { + url, + enabled: this.externalLinkEnabled + }); + } + getDestinationHash(dest) { + return "#"; + } + getAnchorUrl(hash) { + return "#"; + } + setHash(hash) {} + executeNamedAction(action) {} + executeSetOCGState(action) {} + cachePageRef(pageNum, pageRef) {} +} + +;// CONCATENATED MODULE: ./web/alt_text_manager.js + +class AltTextManager { + #boundUpdateUIState = this.#updateUIState.bind(this); + #boundSetPosition = this.#setPosition.bind(this); + #boundOnClick = this.#onClick.bind(this); + #currentEditor = null; + #cancelButton; + #dialog; + #eventBus; + #hasUsedPointer = false; + #optionDescription; + #optionDecorative; + #overlayManager; + #saveButton; + #textarea; + #uiManager; + #previousAltText = null; + #svgElement = null; + #rectElement = null; + #container; + #telemetryData = null; + constructor({ + dialog, + optionDescription, + optionDecorative, + textarea, + cancelButton, + saveButton + }, container, overlayManager, eventBus) { + this.#dialog = dialog; + this.#optionDescription = optionDescription; + this.#optionDecorative = optionDecorative; + this.#textarea = textarea; + this.#cancelButton = cancelButton; + this.#saveButton = saveButton; + this.#overlayManager = overlayManager; + this.#eventBus = eventBus; + this.#container = container; + dialog.addEventListener("close", this.#close.bind(this)); + dialog.addEventListener("contextmenu", event => { + if (event.target !== this.#textarea) { + event.preventDefault(); + } + }); + cancelButton.addEventListener("click", this.#finish.bind(this)); + saveButton.addEventListener("click", this.#save.bind(this)); + optionDescription.addEventListener("change", this.#boundUpdateUIState); + optionDecorative.addEventListener("change", this.#boundUpdateUIState); + this.#overlayManager.register(dialog); + } + get _elements() { + return shadow(this, "_elements", [this.#optionDescription, this.#optionDecorative, this.#textarea, this.#saveButton, this.#cancelButton]); + } + #createSVGElement() { + if (this.#svgElement) { + return; + } + const svgFactory = new DOMSVGFactory(); + const svg = this.#svgElement = svgFactory.createElement("svg"); + svg.setAttribute("width", "0"); + svg.setAttribute("height", "0"); + const defs = svgFactory.createElement("defs"); + svg.append(defs); + const mask = svgFactory.createElement("mask"); + defs.append(mask); + mask.setAttribute("id", "alttext-manager-mask"); + mask.setAttribute("maskContentUnits", "objectBoundingBox"); + let rect = svgFactory.createElement("rect"); + mask.append(rect); + rect.setAttribute("fill", "white"); + rect.setAttribute("width", "1"); + rect.setAttribute("height", "1"); + rect.setAttribute("x", "0"); + rect.setAttribute("y", "0"); + rect = this.#rectElement = svgFactory.createElement("rect"); + mask.append(rect); + rect.setAttribute("fill", "black"); + this.#dialog.append(svg); + } + async editAltText(uiManager, editor) { + if (this.#currentEditor || !editor) { + return; + } + this.#createSVGElement(); + this.#hasUsedPointer = false; + for (const element of this._elements) { + element.addEventListener("click", this.#boundOnClick); + } + const { + altText, + decorative + } = editor.altTextData; + if (decorative === true) { + this.#optionDecorative.checked = true; + this.#optionDescription.checked = false; + } else { + this.#optionDecorative.checked = false; + this.#optionDescription.checked = true; + } + this.#previousAltText = this.#textarea.value = altText?.trim() || ""; + this.#updateUIState(); + this.#currentEditor = editor; + this.#uiManager = uiManager; + this.#uiManager.removeEditListeners(); + this.#eventBus._on("resize", this.#boundSetPosition); + try { + await this.#overlayManager.open(this.#dialog); + this.#setPosition(); + } catch (ex) { + this.#close(); + throw ex; + } + } + #setPosition() { + if (!this.#currentEditor) { + return; + } + const dialog = this.#dialog; + const { + style + } = dialog; + const { + x: containerX, + y: containerY, + width: containerW, + height: containerH + } = this.#container.getBoundingClientRect(); + const { + innerWidth: windowW, + innerHeight: windowH + } = window; + const { + width: dialogW, + height: dialogH + } = dialog.getBoundingClientRect(); + const { + x, + y, + width, + height + } = this.#currentEditor.getClientDimensions(); + const MARGIN = 10; + const isLTR = this.#uiManager.direction === "ltr"; + const xs = Math.max(x, containerX); + const xe = Math.min(x + width, containerX + containerW); + const ys = Math.max(y, containerY); + const ye = Math.min(y + height, containerY + containerH); + this.#rectElement.setAttribute("width", `${(xe - xs) / windowW}`); + this.#rectElement.setAttribute("height", `${(ye - ys) / windowH}`); + this.#rectElement.setAttribute("x", `${xs / windowW}`); + this.#rectElement.setAttribute("y", `${ys / windowH}`); + let left = null; + let top = Math.max(y, 0); + top += Math.min(windowH - (top + dialogH), 0); + if (isLTR) { + if (x + width + MARGIN + dialogW < windowW) { + left = x + width + MARGIN; + } else if (x > dialogW + MARGIN) { + left = x - dialogW - MARGIN; + } + } else if (x > dialogW + MARGIN) { + left = x - dialogW - MARGIN; + } else if (x + width + MARGIN + dialogW < windowW) { + left = x + width + MARGIN; + } + if (left === null) { + top = null; + left = Math.max(x, 0); + left += Math.min(windowW - (left + dialogW), 0); + if (y > dialogH + MARGIN) { + top = y - dialogH - MARGIN; + } else if (y + height + MARGIN + dialogH < windowH) { + top = y + height + MARGIN; + } + } + if (top !== null) { + dialog.classList.add("positioned"); + if (isLTR) { + style.left = `${left}px`; + } else { + style.right = `${windowW - left - dialogW}px`; + } + style.top = `${top}px`; + } else { + dialog.classList.remove("positioned"); + style.left = ""; + style.top = ""; + } + } + #finish() { + if (this.#overlayManager.active === this.#dialog) { + this.#overlayManager.close(this.#dialog); + } + } + #close() { + this.#eventBus.dispatch("reporttelemetry", { + source: this, + details: { + type: "editing", + subtype: this.#currentEditor.editorType, + data: this.#telemetryData || { + action: "alt_text_cancel", + alt_text_keyboard: !this.#hasUsedPointer + } + } + }); + this.#telemetryData = null; + this.#removeOnClickListeners(); + this.#uiManager?.addEditListeners(); + this.#eventBus._off("resize", this.#boundSetPosition); + this.#currentEditor.altTextFinish(); + this.#currentEditor = null; + this.#uiManager = null; + } + #updateUIState() { + this.#textarea.disabled = this.#optionDecorative.checked; + } + #save() { + const altText = this.#textarea.value.trim(); + const decorative = this.#optionDecorative.checked; + this.#currentEditor.altTextData = { + altText, + decorative + }; + this.#telemetryData = { + action: "alt_text_save", + alt_text_description: !!altText, + alt_text_edit: !!this.#previousAltText && this.#previousAltText !== altText, + alt_text_decorative: decorative, + alt_text_keyboard: !this.#hasUsedPointer + }; + this.#finish(); + } + #onClick(evt) { + if (evt.detail === 0) { + return; + } + this.#hasUsedPointer = true; + this.#removeOnClickListeners(); + } + #removeOnClickListeners() { + for (const element of this._elements) { + element.removeEventListener("click", this.#boundOnClick); + } + } + destroy() { + this.#uiManager = null; + this.#finish(); + this.#svgElement?.remove(); + this.#svgElement = this.#rectElement = null; + } +} + +;// CONCATENATED MODULE: ./web/annotation_editor_params.js + +class AnnotationEditorParams { + constructor(options, eventBus) { + this.eventBus = eventBus; + this.#bindListeners(options); + } + #bindListeners({ + editorFreeTextFontSize, + editorFreeTextColor, + editorInkColor, + editorInkThickness, + editorInkOpacity, + editorStampAddImage + }) { + const dispatchEvent = (typeStr, value) => { + this.eventBus.dispatch("switchannotationeditorparams", { + source: this, + type: AnnotationEditorParamsType[typeStr], + value + }); + }; + editorFreeTextFontSize.addEventListener("input", function () { + dispatchEvent("FREETEXT_SIZE", this.valueAsNumber); + }); + editorFreeTextColor.addEventListener("input", function () { + dispatchEvent("FREETEXT_COLOR", this.value); + }); + editorInkColor.addEventListener("input", function () { + dispatchEvent("INK_COLOR", this.value); + }); + editorInkThickness.addEventListener("input", function () { + dispatchEvent("INK_THICKNESS", this.valueAsNumber); + }); + editorInkOpacity.addEventListener("input", function () { + dispatchEvent("INK_OPACITY", this.valueAsNumber); + }); + editorStampAddImage.addEventListener("click", () => { + dispatchEvent("CREATE"); + }); + this.eventBus._on("annotationeditorparamschanged", evt => { + for (const [type, value] of evt.details) { + switch (type) { + case AnnotationEditorParamsType.FREETEXT_SIZE: + editorFreeTextFontSize.value = value; + break; + case AnnotationEditorParamsType.FREETEXT_COLOR: + editorFreeTextColor.value = value; + break; + case AnnotationEditorParamsType.INK_COLOR: + editorInkColor.value = value; + break; + case AnnotationEditorParamsType.INK_THICKNESS: + editorInkThickness.value = value; + break; + case AnnotationEditorParamsType.INK_OPACITY: + editorInkOpacity.value = value; + break; + } + } + }); + } +} + +;// CONCATENATED MODULE: ./web/overlay_manager.js +class OverlayManager { + #overlays = new WeakMap(); + #active = null; + get active() { + return this.#active; + } + async register(dialog, canForceClose = false) { + if (typeof dialog !== "object") { + throw new Error("Not enough parameters."); + } else if (this.#overlays.has(dialog)) { + throw new Error("The overlay is already registered."); + } + this.#overlays.set(dialog, { + canForceClose + }); + dialog.addEventListener("cancel", evt => { + this.#active = null; + }); + } + async open(dialog) { + if (!this.#overlays.has(dialog)) { + throw new Error("The overlay does not exist."); + } else if (this.#active) { + if (this.#active === dialog) { + throw new Error("The overlay is already active."); + } else if (this.#overlays.get(dialog).canForceClose) { + await this.close(); + } else { + throw new Error("Another overlay is currently active."); + } + } + this.#active = dialog; + dialog.showModal(); + } + async close(dialog = this.#active) { + if (!this.#overlays.has(dialog)) { + throw new Error("The overlay does not exist."); + } else if (!this.#active) { + throw new Error("The overlay is currently not active."); + } else if (this.#active !== dialog) { + throw new Error("Another overlay is currently active."); + } + dialog.close(); + this.#active = null; + } +} + +;// CONCATENATED MODULE: ./web/password_prompt.js + +class PasswordPrompt { + #activeCapability = null; + #updateCallback = null; + #reason = null; + constructor(options, overlayManager, isViewerEmbedded = false) { + this.dialog = options.dialog; + this.label = options.label; + this.input = options.input; + this.submitButton = options.submitButton; + this.cancelButton = options.cancelButton; + this.overlayManager = overlayManager; + this._isViewerEmbedded = isViewerEmbedded; + this.submitButton.addEventListener("click", this.#verify.bind(this)); + this.cancelButton.addEventListener("click", this.close.bind(this)); + this.input.addEventListener("keydown", e => { + if (e.keyCode === 13) { + this.#verify(); + } + }); + this.overlayManager.register(this.dialog, true); + this.dialog.addEventListener("close", this.#cancel.bind(this)); + } + async open() { + if (this.#activeCapability) { + await this.#activeCapability.promise; + } + this.#activeCapability = new PromiseCapability(); + try { + await this.overlayManager.open(this.dialog); + } catch (ex) { + this.#activeCapability.resolve(); + throw ex; + } + const passwordIncorrect = this.#reason === PasswordResponses.INCORRECT_PASSWORD; + if (!this._isViewerEmbedded || passwordIncorrect) { + this.input.focus(); + } + this.label.setAttribute("data-l10n-id", `pdfjs-password-${passwordIncorrect ? "invalid" : "label"}`); + } + async close() { + if (this.overlayManager.active === this.dialog) { + this.overlayManager.close(this.dialog); + } + } + #verify() { + const password = this.input.value; + if (password?.length > 0) { + this.#invokeCallback(password); + } + } + #cancel() { + this.#invokeCallback(new Error("PasswordPrompt cancelled.")); + this.#activeCapability.resolve(); + } + #invokeCallback(password) { + if (!this.#updateCallback) { + return; + } + this.close(); + this.input.value = ""; + this.#updateCallback(password); + this.#updateCallback = null; + } + async setUpdateCallback(updateCallback, reason) { + if (this.#activeCapability) { + await this.#activeCapability.promise; + } + this.#updateCallback = updateCallback; + this.#reason = reason; + } +} + +;// CONCATENATED MODULE: ./web/base_tree_viewer.js + +const TREEITEM_OFFSET_TOP = -100; +const TREEITEM_SELECTED_CLASS = "selected"; +class BaseTreeViewer { + constructor(options) { + if (this.constructor === BaseTreeViewer) { + throw new Error("Cannot initialize BaseTreeViewer."); + } + this.container = options.container; + this.eventBus = options.eventBus; + this._l10n = options.l10n; + this.reset(); + } + reset() { + this._pdfDocument = null; + this._lastToggleIsShow = true; + this._currentTreeItem = null; + this.container.textContent = ""; + this.container.classList.remove("treeWithDeepNesting"); + } + _dispatchEvent(count) { + throw new Error("Not implemented: _dispatchEvent"); + } + _bindLink(element, params) { + throw new Error("Not implemented: _bindLink"); + } + _normalizeTextContent(str) { + return removeNullCharacters(str, true) || "\u2013"; + } + _addToggleButton(div, hidden = false) { + const toggler = document.createElement("div"); + toggler.className = "treeItemToggler"; + if (hidden) { + toggler.classList.add("treeItemsHidden"); + } + toggler.onclick = evt => { + evt.stopPropagation(); + toggler.classList.toggle("treeItemsHidden"); + if (evt.shiftKey) { + const shouldShowAll = !toggler.classList.contains("treeItemsHidden"); + this._toggleTreeItem(div, shouldShowAll); + } + }; + div.prepend(toggler); + } + _toggleTreeItem(root, show = false) { + this._l10n.pause(); + this._lastToggleIsShow = show; + for (const toggler of root.querySelectorAll(".treeItemToggler")) { + toggler.classList.toggle("treeItemsHidden", !show); + } + this._l10n.resume(); + } + _toggleAllTreeItems() { + this._toggleTreeItem(this.container, !this._lastToggleIsShow); + } + _finishRendering(fragment, count, hasAnyNesting = false) { + if (hasAnyNesting) { + this.container.classList.add("treeWithDeepNesting"); + this._lastToggleIsShow = !fragment.querySelector(".treeItemsHidden"); + } + this._l10n.pause(); + this.container.append(fragment); + this._l10n.resume(); + this._dispatchEvent(count); + } + render(params) { + throw new Error("Not implemented: render"); + } + _updateCurrentTreeItem(treeItem = null) { + if (this._currentTreeItem) { + this._currentTreeItem.classList.remove(TREEITEM_SELECTED_CLASS); + this._currentTreeItem = null; + } + if (treeItem) { + treeItem.classList.add(TREEITEM_SELECTED_CLASS); + this._currentTreeItem = treeItem; + } + } + _scrollToCurrentTreeItem(treeItem) { + if (!treeItem) { + return; + } + this._l10n.pause(); + let currentNode = treeItem.parentNode; + while (currentNode && currentNode !== this.container) { + if (currentNode.classList.contains("treeItem")) { + const toggler = currentNode.firstElementChild; + toggler?.classList.remove("treeItemsHidden"); + } + currentNode = currentNode.parentNode; + } + this._l10n.resume(); + this._updateCurrentTreeItem(treeItem); + this.container.scrollTo(treeItem.offsetLeft, treeItem.offsetTop + TREEITEM_OFFSET_TOP); + } +} + +;// CONCATENATED MODULE: ./web/pdf_attachment_viewer.js + + + +class PDFAttachmentViewer extends BaseTreeViewer { + constructor(options) { + super(options); + this.downloadManager = options.downloadManager; + this.eventBus._on("fileattachmentannotation", this.#appendAttachment.bind(this)); + } + reset(keepRenderedCapability = false) { + super.reset(); + this._attachments = null; + if (!keepRenderedCapability) { + this._renderedCapability = new PromiseCapability(); + } + this._pendingDispatchEvent = false; + } + async _dispatchEvent(attachmentsCount) { + this._renderedCapability.resolve(); + if (attachmentsCount === 0 && !this._pendingDispatchEvent) { + this._pendingDispatchEvent = true; + await waitOnEventOrTimeout({ + target: this.eventBus, + name: "annotationlayerrendered", + delay: 1000 + }); + if (!this._pendingDispatchEvent) { + return; + } + } + this._pendingDispatchEvent = false; + this.eventBus.dispatch("attachmentsloaded", { + source: this, + attachmentsCount + }); + } + _bindLink(element, { + content, + filename + }) { + element.onclick = () => { + this.downloadManager.openOrDownloadData(content, filename); + return false; + }; + } + render({ + attachments, + keepRenderedCapability = false + }) { + if (this._attachments) { + this.reset(keepRenderedCapability); + } + this._attachments = attachments || null; + if (!attachments) { + this._dispatchEvent(0); + return; + } + const fragment = document.createDocumentFragment(); + let attachmentsCount = 0; + for (const name in attachments) { + const item = attachments[name]; + const content = item.content, + filename = getFilenameFromUrl(item.filename, true); + const div = document.createElement("div"); + div.className = "treeItem"; + const element = document.createElement("a"); + this._bindLink(element, { + content, + filename + }); + element.textContent = this._normalizeTextContent(filename); + div.append(element); + fragment.append(div); + attachmentsCount++; + } + this._finishRendering(fragment, attachmentsCount); + } + #appendAttachment({ + filename, + content + }) { + const renderedPromise = this._renderedCapability.promise; + renderedPromise.then(() => { + if (renderedPromise !== this._renderedCapability.promise) { + return; + } + const attachments = this._attachments || Object.create(null); + for (const name in attachments) { + if (filename === name) { + return; + } + } + attachments[filename] = { + filename, + content + }; + this.render({ + attachments, + keepRenderedCapability: true + }); + }); + } +} + +;// CONCATENATED MODULE: ./web/grab_to_pan.js +const CSS_CLASS_GRAB = "grab-to-pan-grab"; +class GrabToPan { + constructor({ + element + }) { + this.element = element; + this.document = element.ownerDocument; + this.activate = this.activate.bind(this); + this.deactivate = this.deactivate.bind(this); + this.toggle = this.toggle.bind(this); + this._onMouseDown = this.#onMouseDown.bind(this); + this._onMouseMove = this.#onMouseMove.bind(this); + this._endPan = this.#endPan.bind(this); + const overlay = this.overlay = document.createElement("div"); + overlay.className = "grab-to-pan-grabbing"; + } + activate() { + if (!this.active) { + this.active = true; + this.element.addEventListener("mousedown", this._onMouseDown, true); + this.element.classList.add(CSS_CLASS_GRAB); + } + } + deactivate() { + if (this.active) { + this.active = false; + this.element.removeEventListener("mousedown", this._onMouseDown, true); + this._endPan(); + this.element.classList.remove(CSS_CLASS_GRAB); + } + } + toggle() { + if (this.active) { + this.deactivate(); + } else { + this.activate(); + } + } + ignoreTarget(node) { + return node.matches("a[href], a[href] *, input, textarea, button, button *, select, option"); + } + #onMouseDown(event) { + if (event.button !== 0 || this.ignoreTarget(event.target)) { + return; + } + if (event.originalTarget) { + try { + event.originalTarget.tagName; + } catch { + return; + } + } + this.scrollLeftStart = this.element.scrollLeft; + this.scrollTopStart = this.element.scrollTop; + this.clientXStart = event.clientX; + this.clientYStart = event.clientY; + this.document.addEventListener("mousemove", this._onMouseMove, true); + this.document.addEventListener("mouseup", this._endPan, true); + this.element.addEventListener("scroll", this._endPan, true); + event.preventDefault(); + event.stopPropagation(); + const focusedElement = document.activeElement; + if (focusedElement && !focusedElement.contains(event.target)) { + focusedElement.blur(); + } + } + #onMouseMove(event) { + this.element.removeEventListener("scroll", this._endPan, true); + if (!(event.buttons & 1)) { + this._endPan(); + return; + } + const xDiff = event.clientX - this.clientXStart; + const yDiff = event.clientY - this.clientYStart; + this.element.scrollTo({ + top: this.scrollTopStart - yDiff, + left: this.scrollLeftStart - xDiff, + behavior: "instant" + }); + if (!this.overlay.parentNode) { + document.body.append(this.overlay); + } + } + #endPan() { + this.element.removeEventListener("scroll", this._endPan, true); + this.document.removeEventListener("mousemove", this._onMouseMove, true); + this.document.removeEventListener("mouseup", this._endPan, true); + this.overlay.remove(); + } +} + +;// CONCATENATED MODULE: ./web/pdf_cursor_tools.js + + + +class PDFCursorTools { + #active = CursorTool.SELECT; + #prevActive = null; + constructor({ + container, + eventBus, + cursorToolOnLoad = CursorTool.SELECT + }) { + this.container = container; + this.eventBus = eventBus; + this.#addEventListeners(); + Promise.resolve().then(() => { + this.switchTool(cursorToolOnLoad); + }); + } + get activeTool() { + return this.#active; + } + switchTool(tool) { + if (this.#prevActive !== null) { + return; + } + if (tool === this.#active) { + return; + } + const disableActiveTool = () => { + switch (this.#active) { + case CursorTool.SELECT: + break; + case CursorTool.HAND: + this._handTool.deactivate(); + break; + case CursorTool.ZOOM: + } + }; + switch (tool) { + case CursorTool.SELECT: + disableActiveTool(); + break; + case CursorTool.HAND: + disableActiveTool(); + this._handTool.activate(); + break; + case CursorTool.ZOOM: + default: + console.error(`switchTool: "${tool}" is an unsupported value.`); + return; + } + this.#active = tool; + this.eventBus.dispatch("cursortoolchanged", { + source: this, + tool + }); + } + #addEventListeners() { + this.eventBus._on("switchcursortool", evt => { + this.switchTool(evt.tool); + }); + let annotationEditorMode = AnnotationEditorType.NONE, + presentationModeState = PresentationModeState.NORMAL; + const disableActive = () => { + const prevActive = this.#active; + this.switchTool(CursorTool.SELECT); + this.#prevActive ??= prevActive; + }; + const enableActive = () => { + const prevActive = this.#prevActive; + if (prevActive !== null && annotationEditorMode === AnnotationEditorType.NONE && presentationModeState === PresentationModeState.NORMAL) { + this.#prevActive = null; + this.switchTool(prevActive); + } + }; + this.eventBus._on("secondarytoolbarreset", evt => { + if (this.#prevActive !== null) { + annotationEditorMode = AnnotationEditorType.NONE; + presentationModeState = PresentationModeState.NORMAL; + enableActive(); + } + }); + this.eventBus._on("annotationeditormodechanged", ({ + mode + }) => { + annotationEditorMode = mode; + if (mode === AnnotationEditorType.NONE) { + enableActive(); + } else { + disableActive(); + } + }); + this.eventBus._on("presentationmodechanged", ({ + state + }) => { + presentationModeState = state; + if (state === PresentationModeState.NORMAL) { + enableActive(); + } else if (state === PresentationModeState.FULLSCREEN) { + disableActive(); + } + }); + } + get _handTool() { + return shadow(this, "_handTool", new GrabToPan({ + element: this.container + })); + } +} + +;// CONCATENATED MODULE: ./web/pdf_document_properties.js + + +const DEFAULT_FIELD_CONTENT = "-"; +const NON_METRIC_LOCALES = ["en-US", "en-LR", "my"]; +const US_PAGE_NAMES = { + "8.5x11": "letter", + "8.5x14": "legal" +}; +const METRIC_PAGE_NAMES = { + "297x420": "a-three", + "210x297": "a-four" +}; +function getPageName(size, isPortrait, pageNames) { + const width = isPortrait ? size.width : size.height; + const height = isPortrait ? size.height : size.width; + return pageNames[`${width}x${height}`]; +} +class PDFDocumentProperties { + #fieldData = null; + constructor({ + dialog, + fields, + closeButton + }, overlayManager, eventBus, l10n, fileNameLookup) { + this.dialog = dialog; + this.fields = fields; + this.overlayManager = overlayManager; + this.l10n = l10n; + this._fileNameLookup = fileNameLookup; + this.#reset(); + closeButton.addEventListener("click", this.close.bind(this)); + this.overlayManager.register(this.dialog); + eventBus._on("pagechanging", evt => { + this._currentPageNumber = evt.pageNumber; + }); + eventBus._on("rotationchanging", evt => { + this._pagesRotation = evt.pagesRotation; + }); + this._isNonMetricLocale = NON_METRIC_LOCALES.includes(l10n.getLanguage()); + } + async open() { + await Promise.all([this.overlayManager.open(this.dialog), this._dataAvailableCapability.promise]); + const currentPageNumber = this._currentPageNumber; + const pagesRotation = this._pagesRotation; + if (this.#fieldData && currentPageNumber === this.#fieldData._currentPageNumber && pagesRotation === this.#fieldData._pagesRotation) { + this.#updateUI(); + return; + } + const { + info, + contentLength + } = await this.pdfDocument.getMetadata(); + const [fileName, fileSize, creationDate, modificationDate, pageSize, isLinearized] = await Promise.all([this._fileNameLookup(), this.#parseFileSize(contentLength), this.#parseDate(info.CreationDate), this.#parseDate(info.ModDate), this.pdfDocument.getPage(currentPageNumber).then(pdfPage => { + return this.#parsePageSize(getPageSizeInches(pdfPage), pagesRotation); + }), this.#parseLinearization(info.IsLinearized)]); + this.#fieldData = Object.freeze({ + fileName, + fileSize, + title: info.Title, + author: info.Author, + subject: info.Subject, + keywords: info.Keywords, + creationDate, + modificationDate, + creator: info.Creator, + producer: info.Producer, + version: info.PDFFormatVersion, + pageCount: this.pdfDocument.numPages, + pageSize, + linearized: isLinearized, + _currentPageNumber: currentPageNumber, + _pagesRotation: pagesRotation + }); + this.#updateUI(); + const { + length + } = await this.pdfDocument.getDownloadInfo(); + if (contentLength === length) { + return; + } + const data = Object.assign(Object.create(null), this.#fieldData); + data.fileSize = await this.#parseFileSize(length); + this.#fieldData = Object.freeze(data); + this.#updateUI(); + } + async close() { + this.overlayManager.close(this.dialog); + } + setDocument(pdfDocument) { + if (this.pdfDocument) { + this.#reset(); + this.#updateUI(true); + } + if (!pdfDocument) { + return; + } + this.pdfDocument = pdfDocument; + this._dataAvailableCapability.resolve(); + } + #reset() { + this.pdfDocument = null; + this.#fieldData = null; + this._dataAvailableCapability = new PromiseCapability(); + this._currentPageNumber = 1; + this._pagesRotation = 0; + } + #updateUI(reset = false) { + if (reset || !this.#fieldData) { + for (const id in this.fields) { + this.fields[id].textContent = DEFAULT_FIELD_CONTENT; + } + return; + } + if (this.overlayManager.active !== this.dialog) { + return; + } + for (const id in this.fields) { + const content = this.#fieldData[id]; + this.fields[id].textContent = content || content === 0 ? content : DEFAULT_FIELD_CONTENT; + } + } + async #parseFileSize(fileSize = 0) { + const kb = fileSize / 1024, + mb = kb / 1024; + if (!kb) { + return undefined; + } + return this.l10n.get(`pdfjs-document-properties-${mb >= 1 ? "mb" : "kb"}`, { + size_mb: mb >= 1 && (+mb.toPrecision(3)).toLocaleString(), + size_kb: mb < 1 && (+kb.toPrecision(3)).toLocaleString(), + size_b: fileSize.toLocaleString() + }); + } + async #parsePageSize(pageSizeInches, pagesRotation) { + if (!pageSizeInches) { + return undefined; + } + if (pagesRotation % 180 !== 0) { + pageSizeInches = { + width: pageSizeInches.height, + height: pageSizeInches.width + }; + } + const isPortrait = isPortraitOrientation(pageSizeInches); + let sizeInches = { + width: Math.round(pageSizeInches.width * 100) / 100, + height: Math.round(pageSizeInches.height * 100) / 100 + }; + let sizeMillimeters = { + width: Math.round(pageSizeInches.width * 25.4 * 10) / 10, + height: Math.round(pageSizeInches.height * 25.4 * 10) / 10 + }; + let rawName = getPageName(sizeInches, isPortrait, US_PAGE_NAMES) || getPageName(sizeMillimeters, isPortrait, METRIC_PAGE_NAMES); + if (!rawName && !(Number.isInteger(sizeMillimeters.width) && Number.isInteger(sizeMillimeters.height))) { + const exactMillimeters = { + width: pageSizeInches.width * 25.4, + height: pageSizeInches.height * 25.4 + }; + const intMillimeters = { + width: Math.round(sizeMillimeters.width), + height: Math.round(sizeMillimeters.height) + }; + if (Math.abs(exactMillimeters.width - intMillimeters.width) < 0.1 && Math.abs(exactMillimeters.height - intMillimeters.height) < 0.1) { + rawName = getPageName(intMillimeters, isPortrait, METRIC_PAGE_NAMES); + if (rawName) { + sizeInches = { + width: Math.round(intMillimeters.width / 25.4 * 100) / 100, + height: Math.round(intMillimeters.height / 25.4 * 100) / 100 + }; + sizeMillimeters = intMillimeters; + } + } + } + const [{ + width, + height + }, unit, name, orientation] = await Promise.all([this._isNonMetricLocale ? sizeInches : sizeMillimeters, this.l10n.get(`pdfjs-document-properties-page-size-unit-${this._isNonMetricLocale ? "inches" : "millimeters"}`), rawName && this.l10n.get(`pdfjs-document-properties-page-size-name-${rawName}`), this.l10n.get(`pdfjs-document-properties-page-size-orientation-${isPortrait ? "portrait" : "landscape"}`)]); + return this.l10n.get(`pdfjs-document-properties-page-size-dimension-${name ? "name-" : ""}string`, { + width: width.toLocaleString(), + height: height.toLocaleString(), + unit, + name, + orientation + }); + } + async #parseDate(inputDate) { + const dateObject = PDFDateString.toDateObject(inputDate); + if (!dateObject) { + return undefined; + } + return this.l10n.get("pdfjs-document-properties-date-string", { + date: dateObject.toLocaleDateString(), + time: dateObject.toLocaleTimeString() + }); + } + #parseLinearization(isLinearized) { + return this.l10n.get(`pdfjs-document-properties-linearized-${isLinearized ? "yes" : "no"}`); + } +} + +;// CONCATENATED MODULE: ./web/pdf_find_utils.js +const CharacterType = { + SPACE: 0, + ALPHA_LETTER: 1, + PUNCT: 2, + HAN_LETTER: 3, + KATAKANA_LETTER: 4, + HIRAGANA_LETTER: 5, + HALFWIDTH_KATAKANA_LETTER: 6, + THAI_LETTER: 7 +}; +function isAlphabeticalScript(charCode) { + return charCode < 0x2e80; +} +function isAscii(charCode) { + return (charCode & 0xff80) === 0; +} +function isAsciiAlpha(charCode) { + return charCode >= 0x61 && charCode <= 0x7a || charCode >= 0x41 && charCode <= 0x5a; +} +function isAsciiDigit(charCode) { + return charCode >= 0x30 && charCode <= 0x39; +} +function isAsciiSpace(charCode) { + return charCode === 0x20 || charCode === 0x09 || charCode === 0x0d || charCode === 0x0a; +} +function isHan(charCode) { + return charCode >= 0x3400 && charCode <= 0x9fff || charCode >= 0xf900 && charCode <= 0xfaff; +} +function isKatakana(charCode) { + return charCode >= 0x30a0 && charCode <= 0x30ff; +} +function isHiragana(charCode) { + return charCode >= 0x3040 && charCode <= 0x309f; +} +function isHalfwidthKatakana(charCode) { + return charCode >= 0xff60 && charCode <= 0xff9f; +} +function isThai(charCode) { + return (charCode & 0xff80) === 0x0e00; +} +function getCharacterType(charCode) { + if (isAlphabeticalScript(charCode)) { + if (isAscii(charCode)) { + if (isAsciiSpace(charCode)) { + return CharacterType.SPACE; + } else if (isAsciiAlpha(charCode) || isAsciiDigit(charCode) || charCode === 0x5f) { + return CharacterType.ALPHA_LETTER; + } + return CharacterType.PUNCT; + } else if (isThai(charCode)) { + return CharacterType.THAI_LETTER; + } else if (charCode === 0xa0) { + return CharacterType.SPACE; + } + return CharacterType.ALPHA_LETTER; + } + if (isHan(charCode)) { + return CharacterType.HAN_LETTER; + } else if (isKatakana(charCode)) { + return CharacterType.KATAKANA_LETTER; + } else if (isHiragana(charCode)) { + return CharacterType.HIRAGANA_LETTER; + } else if (isHalfwidthKatakana(charCode)) { + return CharacterType.HALFWIDTH_KATAKANA_LETTER; + } + return CharacterType.ALPHA_LETTER; +} +let NormalizeWithNFKC; +function getNormalizeWithNFKC() { + NormalizeWithNFKC ||= ` ¨ª¯²-µ¸-º¼-¾IJ-ijĿ-ŀʼnſDŽ-njDZ-dzʰ-ʸ˘-˝ˠ-ˤʹͺ;΄-΅·ϐ-ϖϰ-ϲϴ-ϵϹևٵ-ٸक़-य़ড়-ঢ়য়ਲ਼ਸ਼ਖ਼-ਜ਼ਫ਼ଡ଼-ଢ଼ำຳໜ-ໝ༌གྷཌྷདྷབྷཛྷཀྵჼᴬ-ᴮᴰ-ᴺᴼ-ᵍᵏ-ᵪᵸᶛ-ᶿẚ-ẛάέήίόύώΆ᾽-῁ΈΉ῍-῏ΐΊ῝-῟ΰΎ῭-`ΌΏ´-῾ - ‑‗․-… ″-‴‶-‷‼‾⁇-⁉⁗ ⁰-ⁱ⁴-₎ₐ-ₜ₨℀-℃℅-ℇ℉-ℓℕ-№ℙ-ℝ℠-™ℤΩℨK-ℭℯ-ℱℳ-ℹ℻-⅀ⅅ-ⅉ⅐-ⅿ↉∬-∭∯-∰〈-〉①-⓪⨌⩴-⩶⫝̸ⱼ-ⱽⵯ⺟⻳⼀-⿕ 〶〸-〺゛-゜ゟヿㄱ-ㆎ㆒-㆟㈀-㈞㈠-㉇㉐-㉾㊀-㏿ꚜ-ꚝꝰꟲ-ꟴꟸ-ꟹꭜ-ꭟꭩ豈-嗀塚晴凞-羽蘒諸逸-都飯-舘並-龎ff-stﬓ-ﬗיִײַ-זּטּ-לּמּנּ-סּףּ-פּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-﷼︐-︙︰-﹄﹇-﹒﹔-﹦﹨-﹫ﹰ-ﹲﹴﹶ-ﻼ!-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ¢-₩`; + return NormalizeWithNFKC; +} + +;// CONCATENATED MODULE: ./web/pdf_find_controller.js + + + +const FindState = { + FOUND: 0, + NOT_FOUND: 1, + WRAPPED: 2, + PENDING: 3 +}; +const FIND_TIMEOUT = 250; +const MATCH_SCROLL_OFFSET_TOP = -50; +const MATCH_SCROLL_OFFSET_LEFT = -400; +const CHARACTERS_TO_NORMALIZE = { + "\u2010": "-", + "\u2018": "'", + "\u2019": "'", + "\u201A": "'", + "\u201B": "'", + "\u201C": '"', + "\u201D": '"', + "\u201E": '"', + "\u201F": '"', + "\u00BC": "1/4", + "\u00BD": "1/2", + "\u00BE": "3/4" +}; +const DIACRITICS_EXCEPTION = new Set([0x3099, 0x309a, 0x094d, 0x09cd, 0x0a4d, 0x0acd, 0x0b4d, 0x0bcd, 0x0c4d, 0x0ccd, 0x0d3b, 0x0d3c, 0x0d4d, 0x0dca, 0x0e3a, 0x0eba, 0x0f84, 0x1039, 0x103a, 0x1714, 0x1734, 0x17d2, 0x1a60, 0x1b44, 0x1baa, 0x1bab, 0x1bf2, 0x1bf3, 0x2d7f, 0xa806, 0xa82c, 0xa8c4, 0xa953, 0xa9c0, 0xaaf6, 0xabed, 0x0c56, 0x0f71, 0x0f72, 0x0f7a, 0x0f7b, 0x0f7c, 0x0f7d, 0x0f80, 0x0f74]); +let DIACRITICS_EXCEPTION_STR; +const DIACRITICS_REG_EXP = /\p{M}+/gu; +const SPECIAL_CHARS_REG_EXP = /([.*+?^${}()|[\]\\])|(\p{P})|(\s+)|(\p{M})|(\p{L})/gu; +const NOT_DIACRITIC_FROM_END_REG_EXP = /([^\p{M}])\p{M}*$/u; +const NOT_DIACRITIC_FROM_START_REG_EXP = /^\p{M}*([^\p{M}])/u; +const SYLLABLES_REG_EXP = /[\uAC00-\uD7AF\uFA6C\uFACF-\uFAD1\uFAD5-\uFAD7]+/g; +const SYLLABLES_LENGTHS = new Map(); +const FIRST_CHAR_SYLLABLES_REG_EXP = "[\\u1100-\\u1112\\ud7a4-\\ud7af\\ud84a\\ud84c\\ud850\\ud854\\ud857\\ud85f]"; +const NFKC_CHARS_TO_NORMALIZE = new Map(); +let noSyllablesRegExp = null; +let withSyllablesRegExp = null; +function normalize(text) { + const syllablePositions = []; + let m; + while ((m = SYLLABLES_REG_EXP.exec(text)) !== null) { + let { + index + } = m; + for (const char of m[0]) { + let len = SYLLABLES_LENGTHS.get(char); + if (!len) { + len = char.normalize("NFD").length; + SYLLABLES_LENGTHS.set(char, len); + } + syllablePositions.push([len, index++]); + } + } + let normalizationRegex; + if (syllablePositions.length === 0 && noSyllablesRegExp) { + normalizationRegex = noSyllablesRegExp; + } else if (syllablePositions.length > 0 && withSyllablesRegExp) { + normalizationRegex = withSyllablesRegExp; + } else { + const replace = Object.keys(CHARACTERS_TO_NORMALIZE).join(""); + const toNormalizeWithNFKC = getNormalizeWithNFKC(); + const CJK = "(?:\\p{Ideographic}|[\u3040-\u30FF])"; + const HKDiacritics = "(?:\u3099|\u309A)"; + const regexp = `([${replace}])|([${toNormalizeWithNFKC}])|(${HKDiacritics}\\n)|(\\p{M}+(?:-\\n)?)|(\\S-\\n)|(${CJK}\\n)|(\\n)`; + if (syllablePositions.length === 0) { + normalizationRegex = noSyllablesRegExp = new RegExp(regexp + "|(\\u0000)", "gum"); + } else { + normalizationRegex = withSyllablesRegExp = new RegExp(regexp + `|(${FIRST_CHAR_SYLLABLES_REG_EXP})`, "gum"); + } + } + const rawDiacriticsPositions = []; + while ((m = DIACRITICS_REG_EXP.exec(text)) !== null) { + rawDiacriticsPositions.push([m[0].length, m.index]); + } + let normalized = text.normalize("NFD"); + const positions = [[0, 0]]; + let rawDiacriticsIndex = 0; + let syllableIndex = 0; + let shift = 0; + let shiftOrigin = 0; + let eol = 0; + let hasDiacritics = false; + normalized = normalized.replace(normalizationRegex, (match, p1, p2, p3, p4, p5, p6, p7, p8, i) => { + i -= shiftOrigin; + if (p1) { + const replacement = CHARACTERS_TO_NORMALIZE[p1]; + const jj = replacement.length; + for (let j = 1; j < jj; j++) { + positions.push([i - shift + j, shift - j]); + } + shift -= jj - 1; + return replacement; + } + if (p2) { + let replacement = NFKC_CHARS_TO_NORMALIZE.get(p2); + if (!replacement) { + replacement = p2.normalize("NFKC"); + NFKC_CHARS_TO_NORMALIZE.set(p2, replacement); + } + const jj = replacement.length; + for (let j = 1; j < jj; j++) { + positions.push([i - shift + j, shift - j]); + } + shift -= jj - 1; + return replacement; + } + if (p3) { + hasDiacritics = true; + if (i + eol === rawDiacriticsPositions[rawDiacriticsIndex]?.[1]) { + ++rawDiacriticsIndex; + } else { + positions.push([i - 1 - shift + 1, shift - 1]); + shift -= 1; + shiftOrigin += 1; + } + positions.push([i - shift + 1, shift]); + shiftOrigin += 1; + eol += 1; + return p3.charAt(0); + } + if (p4) { + const hasTrailingDashEOL = p4.endsWith("\n"); + const len = hasTrailingDashEOL ? p4.length - 2 : p4.length; + hasDiacritics = true; + let jj = len; + if (i + eol === rawDiacriticsPositions[rawDiacriticsIndex]?.[1]) { + jj -= rawDiacriticsPositions[rawDiacriticsIndex][0]; + ++rawDiacriticsIndex; + } + for (let j = 1; j <= jj; j++) { + positions.push([i - 1 - shift + j, shift - j]); + } + shift -= jj; + shiftOrigin += jj; + if (hasTrailingDashEOL) { + i += len - 1; + positions.push([i - shift + 1, 1 + shift]); + shift += 1; + shiftOrigin += 1; + eol += 1; + return p4.slice(0, len); + } + return p4; + } + if (p5) { + const len = p5.length - 2; + positions.push([i - shift + len, 1 + shift]); + shift += 1; + shiftOrigin += 1; + eol += 1; + return p5.slice(0, -2); + } + if (p6) { + const len = p6.length - 1; + positions.push([i - shift + len, shift]); + shiftOrigin += 1; + eol += 1; + return p6.slice(0, -1); + } + if (p7) { + positions.push([i - shift + 1, shift - 1]); + shift -= 1; + shiftOrigin += 1; + eol += 1; + return " "; + } + if (i + eol === syllablePositions[syllableIndex]?.[1]) { + const newCharLen = syllablePositions[syllableIndex][0] - 1; + ++syllableIndex; + for (let j = 1; j <= newCharLen; j++) { + positions.push([i - (shift - j), shift - j]); + } + shift -= newCharLen; + shiftOrigin += newCharLen; + } + return p8; + }); + positions.push([normalized.length, shift]); + return [normalized, positions, hasDiacritics]; +} +function getOriginalIndex(diffs, pos, len) { + if (!diffs) { + return [pos, len]; + } + const start = pos; + const end = pos + len - 1; + let i = binarySearchFirstItem(diffs, x => x[0] >= start); + if (diffs[i][0] > start) { + --i; + } + let j = binarySearchFirstItem(diffs, x => x[0] >= end, i); + if (diffs[j][0] > end) { + --j; + } + const oldStart = start + diffs[i][1]; + const oldEnd = end + diffs[j][1]; + const oldLen = oldEnd + 1 - oldStart; + return [oldStart, oldLen]; +} +class PDFFindController { + #state = null; + #updateMatchesCountOnProgress = true; + #visitedPagesCount = 0; + constructor({ + linkService, + eventBus, + updateMatchesCountOnProgress = true + }) { + this._linkService = linkService; + this._eventBus = eventBus; + this.#updateMatchesCountOnProgress = updateMatchesCountOnProgress; + this.onIsPageVisible = null; + this.#reset(); + eventBus._on("find", this.#onFind.bind(this)); + eventBus._on("findbarclose", this.#onFindBarClose.bind(this)); + } + get highlightMatches() { + return this._highlightMatches; + } + get pageMatches() { + return this._pageMatches; + } + get pageMatchesLength() { + return this._pageMatchesLength; + } + get selected() { + return this._selected; + } + get state() { + return this.#state; + } + setDocument(pdfDocument) { + if (this._pdfDocument) { + this.#reset(); + } + if (!pdfDocument) { + return; + } + this._pdfDocument = pdfDocument; + this._firstPageCapability.resolve(); + } + #onFind(state) { + if (!state) { + return; + } + const pdfDocument = this._pdfDocument; + const { + type + } = state; + if (this.#state === null || this.#shouldDirtyMatch(state)) { + this._dirtyMatch = true; + } + this.#state = state; + if (type !== "highlightallchange") { + this.#updateUIState(FindState.PENDING); + } + this._firstPageCapability.promise.then(() => { + if (!this._pdfDocument || pdfDocument && this._pdfDocument !== pdfDocument) { + return; + } + this.#extractText(); + const findbarClosed = !this._highlightMatches; + const pendingTimeout = !!this._findTimeout; + if (this._findTimeout) { + clearTimeout(this._findTimeout); + this._findTimeout = null; + } + if (!type) { + this._findTimeout = setTimeout(() => { + this.#nextMatch(); + this._findTimeout = null; + }, FIND_TIMEOUT); + } else if (this._dirtyMatch) { + this.#nextMatch(); + } else if (type === "again") { + this.#nextMatch(); + if (findbarClosed && this.#state.highlightAll) { + this.#updateAllPages(); + } + } else if (type === "highlightallchange") { + if (pendingTimeout) { + this.#nextMatch(); + } else { + this._highlightMatches = true; + } + this.#updateAllPages(); + } else { + this.#nextMatch(); + } + }); + } + scrollMatchIntoView({ + element = null, + selectedLeft = 0, + pageIndex = -1, + matchIndex = -1 + }) { + if (!this._scrollMatches || !element) { + return; + } else if (matchIndex === -1 || matchIndex !== this._selected.matchIdx) { + return; + } else if (pageIndex === -1 || pageIndex !== this._selected.pageIdx) { + return; + } + this._scrollMatches = false; + const spot = { + top: MATCH_SCROLL_OFFSET_TOP, + left: selectedLeft + MATCH_SCROLL_OFFSET_LEFT + }; + scrollIntoView(element, spot, true); + } + #reset() { + this._highlightMatches = false; + this._scrollMatches = false; + this._pdfDocument = null; + this._pageMatches = []; + this._pageMatchesLength = []; + this.#visitedPagesCount = 0; + this.#state = null; + this._selected = { + pageIdx: -1, + matchIdx: -1 + }; + this._offset = { + pageIdx: null, + matchIdx: null, + wrapped: false + }; + this._extractTextPromises = []; + this._pageContents = []; + this._pageDiffs = []; + this._hasDiacritics = []; + this._matchesCountTotal = 0; + this._pagesToSearch = null; + this._pendingFindMatches = new Set(); + this._resumePageIdx = null; + this._dirtyMatch = false; + clearTimeout(this._findTimeout); + this._findTimeout = null; + this._firstPageCapability = new PromiseCapability(); + } + get #query() { + const { + query + } = this.#state; + if (typeof query === "string") { + if (query !== this._rawQuery) { + this._rawQuery = query; + [this._normalizedQuery] = normalize(query); + } + return this._normalizedQuery; + } + return (query || []).filter(q => !!q).map(q => normalize(q)[0]); + } + #shouldDirtyMatch(state) { + const newQuery = state.query, + prevQuery = this.#state.query; + const newType = typeof newQuery, + prevType = typeof prevQuery; + if (newType !== prevType) { + return true; + } + if (newType === "string") { + if (newQuery !== prevQuery) { + return true; + } + } else if (JSON.stringify(newQuery) !== JSON.stringify(prevQuery)) { + return true; + } + switch (state.type) { + case "again": + const pageNumber = this._selected.pageIdx + 1; + const linkService = this._linkService; + return pageNumber >= 1 && pageNumber <= linkService.pagesCount && pageNumber !== linkService.page && !(this.onIsPageVisible?.(pageNumber) ?? true); + case "highlightallchange": + return false; + } + return true; + } + #isEntireWord(content, startIdx, length) { + let match = content.slice(0, startIdx).match(NOT_DIACRITIC_FROM_END_REG_EXP); + if (match) { + const first = content.charCodeAt(startIdx); + const limit = match[1].charCodeAt(0); + if (getCharacterType(first) === getCharacterType(limit)) { + return false; + } + } + match = content.slice(startIdx + length).match(NOT_DIACRITIC_FROM_START_REG_EXP); + if (match) { + const last = content.charCodeAt(startIdx + length - 1); + const limit = match[1].charCodeAt(0); + if (getCharacterType(last) === getCharacterType(limit)) { + return false; + } + } + return true; + } + #calculateRegExpMatch(query, entireWord, pageIndex, pageContent) { + const matches = this._pageMatches[pageIndex] = []; + const matchesLength = this._pageMatchesLength[pageIndex] = []; + if (!query) { + return; + } + const diffs = this._pageDiffs[pageIndex]; + let match; + while ((match = query.exec(pageContent)) !== null) { + if (entireWord && !this.#isEntireWord(pageContent, match.index, match[0].length)) { + continue; + } + const [matchPos, matchLen] = getOriginalIndex(diffs, match.index, match[0].length); + if (matchLen) { + matches.push(matchPos); + matchesLength.push(matchLen); + } + } + } + #convertToRegExpString(query, hasDiacritics) { + const { + matchDiacritics + } = this.#state; + let isUnicode = false; + query = query.replaceAll(SPECIAL_CHARS_REG_EXP, (match, p1, p2, p3, p4, p5) => { + if (p1) { + return `[ ]*\\${p1}[ ]*`; + } + if (p2) { + return `[ ]*${p2}[ ]*`; + } + if (p3) { + return "[ ]+"; + } + if (matchDiacritics) { + return p4 || p5; + } + if (p4) { + return DIACRITICS_EXCEPTION.has(p4.charCodeAt(0)) ? p4 : ""; + } + if (hasDiacritics) { + isUnicode = true; + return `${p5}\\p{M}*`; + } + return p5; + }); + const trailingSpaces = "[ ]*"; + if (query.endsWith(trailingSpaces)) { + query = query.slice(0, query.length - trailingSpaces.length); + } + if (matchDiacritics) { + if (hasDiacritics) { + DIACRITICS_EXCEPTION_STR ||= String.fromCharCode(...DIACRITICS_EXCEPTION); + isUnicode = true; + query = `${query}(?=[${DIACRITICS_EXCEPTION_STR}]|[^\\p{M}]|$)`; + } + } + return [isUnicode, query]; + } + #calculateMatch(pageIndex) { + let query = this.#query; + if (query.length === 0) { + return; + } + const { + caseSensitive, + entireWord + } = this.#state; + const pageContent = this._pageContents[pageIndex]; + const hasDiacritics = this._hasDiacritics[pageIndex]; + let isUnicode = false; + if (typeof query === "string") { + [isUnicode, query] = this.#convertToRegExpString(query, hasDiacritics); + } else { + query = query.sort().reverse().map(q => { + const [isUnicodePart, queryPart] = this.#convertToRegExpString(q, hasDiacritics); + isUnicode ||= isUnicodePart; + return `(${queryPart})`; + }).join("|"); + } + const flags = `g${isUnicode ? "u" : ""}${caseSensitive ? "" : "i"}`; + query = query ? new RegExp(query, flags) : null; + this.#calculateRegExpMatch(query, entireWord, pageIndex, pageContent); + if (this.#state.highlightAll) { + this.#updatePage(pageIndex); + } + if (this._resumePageIdx === pageIndex) { + this._resumePageIdx = null; + this.#nextPageMatch(); + } + const pageMatchesCount = this._pageMatches[pageIndex].length; + this._matchesCountTotal += pageMatchesCount; + if (this.#updateMatchesCountOnProgress) { + if (pageMatchesCount > 0) { + this.#updateUIResultsCount(); + } + } else if (++this.#visitedPagesCount === this._linkService.pagesCount) { + this.#updateUIResultsCount(); + } + } + #extractText() { + if (this._extractTextPromises.length > 0) { + return; + } + let promise = Promise.resolve(); + const textOptions = { + disableNormalization: true + }; + for (let i = 0, ii = this._linkService.pagesCount; i < ii; i++) { + const extractTextCapability = new PromiseCapability(); + this._extractTextPromises[i] = extractTextCapability.promise; + promise = promise.then(() => { + return this._pdfDocument.getPage(i + 1).then(pdfPage => { + return pdfPage.getTextContent(textOptions); + }).then(textContent => { + const strBuf = []; + for (const textItem of textContent.items) { + strBuf.push(textItem.str); + if (textItem.hasEOL) { + strBuf.push("\n"); + } + } + [this._pageContents[i], this._pageDiffs[i], this._hasDiacritics[i]] = normalize(strBuf.join("")); + extractTextCapability.resolve(); + }, reason => { + console.error(`Unable to get text content for page ${i + 1}`, reason); + this._pageContents[i] = ""; + this._pageDiffs[i] = null; + this._hasDiacritics[i] = false; + extractTextCapability.resolve(); + }); + }); + } + } + #updatePage(index) { + if (this._scrollMatches && this._selected.pageIdx === index) { + this._linkService.page = index + 1; + } + this._eventBus.dispatch("updatetextlayermatches", { + source: this, + pageIndex: index + }); + } + #updateAllPages() { + this._eventBus.dispatch("updatetextlayermatches", { + source: this, + pageIndex: -1 + }); + } + #nextMatch() { + const previous = this.#state.findPrevious; + const currentPageIndex = this._linkService.page - 1; + const numPages = this._linkService.pagesCount; + this._highlightMatches = true; + if (this._dirtyMatch) { + this._dirtyMatch = false; + this._selected.pageIdx = this._selected.matchIdx = -1; + this._offset.pageIdx = currentPageIndex; + this._offset.matchIdx = null; + this._offset.wrapped = false; + this._resumePageIdx = null; + this._pageMatches.length = 0; + this._pageMatchesLength.length = 0; + this.#visitedPagesCount = 0; + this._matchesCountTotal = 0; + this.#updateAllPages(); + for (let i = 0; i < numPages; i++) { + if (this._pendingFindMatches.has(i)) { + continue; + } + this._pendingFindMatches.add(i); + this._extractTextPromises[i].then(() => { + this._pendingFindMatches.delete(i); + this.#calculateMatch(i); + }); + } + } + const query = this.#query; + if (query.length === 0) { + this.#updateUIState(FindState.FOUND); + return; + } + if (this._resumePageIdx) { + return; + } + const offset = this._offset; + this._pagesToSearch = numPages; + if (offset.matchIdx !== null) { + const numPageMatches = this._pageMatches[offset.pageIdx].length; + if (!previous && offset.matchIdx + 1 < numPageMatches || previous && offset.matchIdx > 0) { + offset.matchIdx = previous ? offset.matchIdx - 1 : offset.matchIdx + 1; + this.#updateMatch(true); + return; + } + this.#advanceOffsetPage(previous); + } + this.#nextPageMatch(); + } + #matchesReady(matches) { + const offset = this._offset; + const numMatches = matches.length; + const previous = this.#state.findPrevious; + if (numMatches) { + offset.matchIdx = previous ? numMatches - 1 : 0; + this.#updateMatch(true); + return true; + } + this.#advanceOffsetPage(previous); + if (offset.wrapped) { + offset.matchIdx = null; + if (this._pagesToSearch < 0) { + this.#updateMatch(false); + return true; + } + } + return false; + } + #nextPageMatch() { + if (this._resumePageIdx !== null) { + console.error("There can only be one pending page."); + } + let matches = null; + do { + const pageIdx = this._offset.pageIdx; + matches = this._pageMatches[pageIdx]; + if (!matches) { + this._resumePageIdx = pageIdx; + break; + } + } while (!this.#matchesReady(matches)); + } + #advanceOffsetPage(previous) { + const offset = this._offset; + const numPages = this._linkService.pagesCount; + offset.pageIdx = previous ? offset.pageIdx - 1 : offset.pageIdx + 1; + offset.matchIdx = null; + this._pagesToSearch--; + if (offset.pageIdx >= numPages || offset.pageIdx < 0) { + offset.pageIdx = previous ? numPages - 1 : 0; + offset.wrapped = true; + } + } + #updateMatch(found = false) { + let state = FindState.NOT_FOUND; + const wrapped = this._offset.wrapped; + this._offset.wrapped = false; + if (found) { + const previousPage = this._selected.pageIdx; + this._selected.pageIdx = this._offset.pageIdx; + this._selected.matchIdx = this._offset.matchIdx; + state = wrapped ? FindState.WRAPPED : FindState.FOUND; + if (previousPage !== -1 && previousPage !== this._selected.pageIdx) { + this.#updatePage(previousPage); + } + } + this.#updateUIState(state, this.#state.findPrevious); + if (this._selected.pageIdx !== -1) { + this._scrollMatches = true; + this.#updatePage(this._selected.pageIdx); + } + } + #onFindBarClose(evt) { + const pdfDocument = this._pdfDocument; + this._firstPageCapability.promise.then(() => { + if (!this._pdfDocument || pdfDocument && this._pdfDocument !== pdfDocument) { + return; + } + if (this._findTimeout) { + clearTimeout(this._findTimeout); + this._findTimeout = null; + } + if (this._resumePageIdx) { + this._resumePageIdx = null; + this._dirtyMatch = true; + } + this.#updateUIState(FindState.FOUND); + this._highlightMatches = false; + this.#updateAllPages(); + }); + } + #requestMatchesCount() { + const { + pageIdx, + matchIdx + } = this._selected; + let current = 0, + total = this._matchesCountTotal; + if (matchIdx !== -1) { + for (let i = 0; i < pageIdx; i++) { + current += this._pageMatches[i]?.length || 0; + } + current += matchIdx + 1; + } + if (current < 1 || current > total) { + current = total = 0; + } + return { + current, + total + }; + } + #updateUIResultsCount() { + this._eventBus.dispatch("updatefindmatchescount", { + source: this, + matchesCount: this.#requestMatchesCount() + }); + } + #updateUIState(state, previous = false) { + if (!this.#updateMatchesCountOnProgress && (this.#visitedPagesCount !== this._linkService.pagesCount || state === FindState.PENDING)) { + return; + } + this._eventBus.dispatch("updatefindcontrolstate", { + source: this, + state, + previous, + matchesCount: this.#requestMatchesCount(), + rawQuery: this.#state?.query ?? null + }); + } +} + +;// CONCATENATED MODULE: ./web/pdf_find_bar.js + + +const MATCHES_COUNT_LIMIT = 1000; +class PDFFindBar { + #resizeObserver = new ResizeObserver(this.#resizeObserverCallback.bind(this)); + constructor(options, eventBus) { + this.opened = false; + this.bar = options.bar; + this.toggleButton = options.toggleButton; + this.findField = options.findField; + this.highlightAll = options.highlightAllCheckbox; + this.caseSensitive = options.caseSensitiveCheckbox; + this.matchDiacritics = options.matchDiacriticsCheckbox; + this.entireWord = options.entireWordCheckbox; + this.findMsg = options.findMsg; + this.findResultsCount = options.findResultsCount; + this.findPreviousButton = options.findPreviousButton; + this.findNextButton = options.findNextButton; + this.eventBus = eventBus; + this.toggleButton.addEventListener("click", () => { + this.toggle(); + }); + this.findField.addEventListener("input", () => { + this.dispatchEvent(""); + }); + this.bar.addEventListener("keydown", e => { + switch (e.keyCode) { + case 13: + if (e.target === this.findField) { + this.dispatchEvent("again", e.shiftKey); + } + break; + case 27: + this.close(); + break; + } + }); + this.findPreviousButton.addEventListener("click", () => { + this.dispatchEvent("again", true); + }); + this.findNextButton.addEventListener("click", () => { + this.dispatchEvent("again", false); + }); + this.highlightAll.addEventListener("click", () => { + this.dispatchEvent("highlightallchange"); + }); + this.caseSensitive.addEventListener("click", () => { + this.dispatchEvent("casesensitivitychange"); + }); + this.entireWord.addEventListener("click", () => { + this.dispatchEvent("entirewordchange"); + }); + this.matchDiacritics.addEventListener("click", () => { + this.dispatchEvent("diacriticmatchingchange"); + }); + } + reset() { + this.updateUIState(); + } + dispatchEvent(type, findPrev = false) { + this.eventBus.dispatch("find", { + source: this, + type, + query: this.findField.value, + caseSensitive: this.caseSensitive.checked, + entireWord: this.entireWord.checked, + highlightAll: this.highlightAll.checked, + findPrevious: findPrev, + matchDiacritics: this.matchDiacritics.checked + }); + } + updateUIState(state, previous, matchesCount) { + const { + findField, + findMsg + } = this; + let findMsgId = "", + status = ""; + switch (state) { + case FindState.FOUND: + break; + case FindState.PENDING: + status = "pending"; + break; + case FindState.NOT_FOUND: + findMsgId = "pdfjs-find-not-found"; + status = "notFound"; + break; + case FindState.WRAPPED: + findMsgId = `pdfjs-find-reached-${previous ? "top" : "bottom"}`; + break; + } + findField.setAttribute("data-status", status); + findField.setAttribute("aria-invalid", state === FindState.NOT_FOUND); + findMsg.setAttribute("data-status", status); + if (findMsgId) { + findMsg.setAttribute("data-l10n-id", findMsgId); + } else { + findMsg.removeAttribute("data-l10n-id"); + findMsg.textContent = ""; + } + this.updateResultsCount(matchesCount); + } + updateResultsCount({ + current = 0, + total = 0 + } = {}) { + const { + findResultsCount + } = this; + if (total > 0) { + const limit = MATCHES_COUNT_LIMIT; + findResultsCount.setAttribute("data-l10n-id", `pdfjs-find-match-count${total > limit ? "-limit" : ""}`); + findResultsCount.setAttribute("data-l10n-args", JSON.stringify({ + limit, + current, + total + })); + } else { + findResultsCount.removeAttribute("data-l10n-id"); + findResultsCount.textContent = ""; + } + } + open() { + if (!this.opened) { + this.#resizeObserver.observe(this.bar.parentNode); + this.#resizeObserver.observe(this.bar); + this.opened = true; + toggleExpandedBtn(this.toggleButton, true, this.bar); + } + this.findField.select(); + this.findField.focus(); + } + close() { + if (!this.opened) { + return; + } + this.#resizeObserver.disconnect(); + this.opened = false; + toggleExpandedBtn(this.toggleButton, false, this.bar); + this.eventBus.dispatch("findbarclose", { + source: this + }); + } + toggle() { + if (this.opened) { + this.close(); + } else { + this.open(); + } + } + #resizeObserverCallback(entries) { + const { + bar + } = this; + bar.classList.remove("wrapContainers"); + const findbarHeight = bar.clientHeight; + const inputContainerHeight = bar.firstElementChild.clientHeight; + if (findbarHeight > inputContainerHeight) { + bar.classList.add("wrapContainers"); + } + } +} + +;// CONCATENATED MODULE: ./web/pdf_history.js + + +const HASH_CHANGE_TIMEOUT = 1000; +const POSITION_UPDATED_THRESHOLD = 50; +const UPDATE_VIEWAREA_TIMEOUT = 1000; +function getCurrentHash() { + return document.location.hash; +} +class PDFHistory { + constructor({ + linkService, + eventBus + }) { + this.linkService = linkService; + this.eventBus = eventBus; + this._initialized = false; + this._fingerprint = ""; + this.reset(); + this._boundEvents = null; + this.eventBus._on("pagesinit", () => { + this._isPagesLoaded = false; + this.eventBus._on("pagesloaded", evt => { + this._isPagesLoaded = !!evt.pagesCount; + }, { + once: true + }); + }); + } + initialize({ + fingerprint, + resetHistory = false, + updateUrl = false + }) { + if (!fingerprint || typeof fingerprint !== "string") { + console.error('PDFHistory.initialize: The "fingerprint" must be a non-empty string.'); + return; + } + if (this._initialized) { + this.reset(); + } + const reInitialized = this._fingerprint !== "" && this._fingerprint !== fingerprint; + this._fingerprint = fingerprint; + this._updateUrl = updateUrl === true; + this._initialized = true; + this._bindEvents(); + const state = window.history.state; + this._popStateInProgress = false; + this._blockHashChange = 0; + this._currentHash = getCurrentHash(); + this._numPositionUpdates = 0; + this._uid = this._maxUid = 0; + this._destination = null; + this._position = null; + if (!this._isValidState(state, true) || resetHistory) { + const { + hash, + page, + rotation + } = this._parseCurrentHash(true); + if (!hash || reInitialized || resetHistory) { + this._pushOrReplaceState(null, true); + return; + } + this._pushOrReplaceState({ + hash, + page, + rotation + }, true); + return; + } + const destination = state.destination; + this._updateInternalState(destination, state.uid, true); + if (destination.rotation !== undefined) { + this._initialRotation = destination.rotation; + } + if (destination.dest) { + this._initialBookmark = JSON.stringify(destination.dest); + this._destination.page = null; + } else if (destination.hash) { + this._initialBookmark = destination.hash; + } else if (destination.page) { + this._initialBookmark = `page=${destination.page}`; + } + } + reset() { + if (this._initialized) { + this._pageHide(); + this._initialized = false; + this._unbindEvents(); + } + if (this._updateViewareaTimeout) { + clearTimeout(this._updateViewareaTimeout); + this._updateViewareaTimeout = null; + } + this._initialBookmark = null; + this._initialRotation = null; + } + push({ + namedDest = null, + explicitDest, + pageNumber + }) { + if (!this._initialized) { + return; + } + if (namedDest && typeof namedDest !== "string") { + console.error("PDFHistory.push: " + `"${namedDest}" is not a valid namedDest parameter.`); + return; + } else if (!Array.isArray(explicitDest)) { + console.error("PDFHistory.push: " + `"${explicitDest}" is not a valid explicitDest parameter.`); + return; + } else if (!this._isValidPage(pageNumber)) { + if (pageNumber !== null || this._destination) { + console.error("PDFHistory.push: " + `"${pageNumber}" is not a valid pageNumber parameter.`); + return; + } + } + const hash = namedDest || JSON.stringify(explicitDest); + if (!hash) { + return; + } + let forceReplace = false; + if (this._destination && (isDestHashesEqual(this._destination.hash, hash) || isDestArraysEqual(this._destination.dest, explicitDest))) { + if (this._destination.page) { + return; + } + forceReplace = true; + } + if (this._popStateInProgress && !forceReplace) { + return; + } + this._pushOrReplaceState({ + dest: explicitDest, + hash, + page: pageNumber, + rotation: this.linkService.rotation + }, forceReplace); + if (!this._popStateInProgress) { + this._popStateInProgress = true; + Promise.resolve().then(() => { + this._popStateInProgress = false; + }); + } + } + pushPage(pageNumber) { + if (!this._initialized) { + return; + } + if (!this._isValidPage(pageNumber)) { + console.error(`PDFHistory.pushPage: "${pageNumber}" is not a valid page number.`); + return; + } + if (this._destination?.page === pageNumber) { + return; + } + if (this._popStateInProgress) { + return; + } + this._pushOrReplaceState({ + dest: null, + hash: `page=${pageNumber}`, + page: pageNumber, + rotation: this.linkService.rotation + }); + if (!this._popStateInProgress) { + this._popStateInProgress = true; + Promise.resolve().then(() => { + this._popStateInProgress = false; + }); + } + } + pushCurrentPosition() { + if (!this._initialized || this._popStateInProgress) { + return; + } + this._tryPushCurrentPosition(); + } + back() { + if (!this._initialized || this._popStateInProgress) { + return; + } + const state = window.history.state; + if (this._isValidState(state) && state.uid > 0) { + window.history.back(); + } + } + forward() { + if (!this._initialized || this._popStateInProgress) { + return; + } + const state = window.history.state; + if (this._isValidState(state) && state.uid < this._maxUid) { + window.history.forward(); + } + } + get popStateInProgress() { + return this._initialized && (this._popStateInProgress || this._blockHashChange > 0); + } + get initialBookmark() { + return this._initialized ? this._initialBookmark : null; + } + get initialRotation() { + return this._initialized ? this._initialRotation : null; + } + _pushOrReplaceState(destination, forceReplace = false) { + const shouldReplace = forceReplace || !this._destination; + const newState = { + fingerprint: this._fingerprint, + uid: shouldReplace ? this._uid : this._uid + 1, + destination + }; + this._updateInternalState(destination, newState.uid); + let newUrl; + if (this._updateUrl && destination?.hash) { + const baseUrl = document.location.href.split("#")[0]; + if (!baseUrl.startsWith("file://")) { + newUrl = `${baseUrl}#${destination.hash}`; + } + } + if (shouldReplace) { + window.history.replaceState(newState, "", newUrl); + } else { + window.history.pushState(newState, "", newUrl); + } + } + _tryPushCurrentPosition(temporary = false) { + if (!this._position) { + return; + } + let position = this._position; + if (temporary) { + position = Object.assign(Object.create(null), this._position); + position.temporary = true; + } + if (!this._destination) { + this._pushOrReplaceState(position); + return; + } + if (this._destination.temporary) { + this._pushOrReplaceState(position, true); + return; + } + if (this._destination.hash === position.hash) { + return; + } + if (!this._destination.page && (POSITION_UPDATED_THRESHOLD <= 0 || this._numPositionUpdates <= POSITION_UPDATED_THRESHOLD)) { + return; + } + let forceReplace = false; + if (this._destination.page >= position.first && this._destination.page <= position.page) { + if (this._destination.dest !== undefined || !this._destination.first) { + return; + } + forceReplace = true; + } + this._pushOrReplaceState(position, forceReplace); + } + _isValidPage(val) { + return Number.isInteger(val) && val > 0 && val <= this.linkService.pagesCount; + } + _isValidState(state, checkReload = false) { + if (!state) { + return false; + } + if (state.fingerprint !== this._fingerprint) { + if (checkReload) { + if (typeof state.fingerprint !== "string" || state.fingerprint.length !== this._fingerprint.length) { + return false; + } + const [perfEntry] = performance.getEntriesByType("navigation"); + if (perfEntry?.type !== "reload") { + return false; + } + } else { + return false; + } + } + if (!Number.isInteger(state.uid) || state.uid < 0) { + return false; + } + if (state.destination === null || typeof state.destination !== "object") { + return false; + } + return true; + } + _updateInternalState(destination, uid, removeTemporary = false) { + if (this._updateViewareaTimeout) { + clearTimeout(this._updateViewareaTimeout); + this._updateViewareaTimeout = null; + } + if (removeTemporary && destination?.temporary) { + delete destination.temporary; + } + this._destination = destination; + this._uid = uid; + this._maxUid = Math.max(this._maxUid, uid); + this._numPositionUpdates = 0; + } + _parseCurrentHash(checkNameddest = false) { + const hash = unescape(getCurrentHash()).substring(1); + const params = parseQueryString(hash); + const nameddest = params.get("nameddest") || ""; + let page = params.get("page") | 0; + if (!this._isValidPage(page) || checkNameddest && nameddest.length > 0) { + page = null; + } + return { + hash, + page, + rotation: this.linkService.rotation + }; + } + _updateViewarea({ + location + }) { + if (this._updateViewareaTimeout) { + clearTimeout(this._updateViewareaTimeout); + this._updateViewareaTimeout = null; + } + this._position = { + hash: location.pdfOpenParams.substring(1), + page: this.linkService.page, + first: location.pageNumber, + rotation: location.rotation + }; + if (this._popStateInProgress) { + return; + } + if (POSITION_UPDATED_THRESHOLD > 0 && this._isPagesLoaded && this._destination && !this._destination.page) { + this._numPositionUpdates++; + } + if (UPDATE_VIEWAREA_TIMEOUT > 0) { + this._updateViewareaTimeout = setTimeout(() => { + if (!this._popStateInProgress) { + this._tryPushCurrentPosition(true); + } + this._updateViewareaTimeout = null; + }, UPDATE_VIEWAREA_TIMEOUT); + } + } + _popState({ + state + }) { + const newHash = getCurrentHash(), + hashChanged = this._currentHash !== newHash; + this._currentHash = newHash; + if (!state) { + this._uid++; + const { + hash, + page, + rotation + } = this._parseCurrentHash(); + this._pushOrReplaceState({ + hash, + page, + rotation + }, true); + return; + } + if (!this._isValidState(state)) { + return; + } + this._popStateInProgress = true; + if (hashChanged) { + this._blockHashChange++; + waitOnEventOrTimeout({ + target: window, + name: "hashchange", + delay: HASH_CHANGE_TIMEOUT + }).then(() => { + this._blockHashChange--; + }); + } + const destination = state.destination; + this._updateInternalState(destination, state.uid, true); + if (isValidRotation(destination.rotation)) { + this.linkService.rotation = destination.rotation; + } + if (destination.dest) { + this.linkService.goToDestination(destination.dest); + } else if (destination.hash) { + this.linkService.setHash(destination.hash); + } else if (destination.page) { + this.linkService.page = destination.page; + } + Promise.resolve().then(() => { + this._popStateInProgress = false; + }); + } + _pageHide() { + if (!this._destination || this._destination.temporary) { + this._tryPushCurrentPosition(); + } + } + _bindEvents() { + if (this._boundEvents) { + return; + } + this._boundEvents = { + updateViewarea: this._updateViewarea.bind(this), + popState: this._popState.bind(this), + pageHide: this._pageHide.bind(this) + }; + this.eventBus._on("updateviewarea", this._boundEvents.updateViewarea); + window.addEventListener("popstate", this._boundEvents.popState); + window.addEventListener("pagehide", this._boundEvents.pageHide); + } + _unbindEvents() { + if (!this._boundEvents) { + return; + } + this.eventBus._off("updateviewarea", this._boundEvents.updateViewarea); + window.removeEventListener("popstate", this._boundEvents.popState); + window.removeEventListener("pagehide", this._boundEvents.pageHide); + this._boundEvents = null; + } +} +function isDestHashesEqual(destHash, pushHash) { + if (typeof destHash !== "string" || typeof pushHash !== "string") { + return false; + } + if (destHash === pushHash) { + return true; + } + const nameddest = parseQueryString(destHash).get("nameddest"); + if (nameddest === pushHash) { + return true; + } + return false; +} +function isDestArraysEqual(firstDest, secondDest) { + function isEntryEqual(first, second) { + if (typeof first !== typeof second) { + return false; + } + if (Array.isArray(first) || Array.isArray(second)) { + return false; + } + if (first !== null && typeof first === "object" && second !== null) { + if (Object.keys(first).length !== Object.keys(second).length) { + return false; + } + for (const key in first) { + if (!isEntryEqual(first[key], second[key])) { + return false; + } + } + return true; + } + return first === second || Number.isNaN(first) && Number.isNaN(second); + } + if (!(Array.isArray(firstDest) && Array.isArray(secondDest))) { + return false; + } + if (firstDest.length !== secondDest.length) { + return false; + } + for (let i = 0, ii = firstDest.length; i < ii; i++) { + if (!isEntryEqual(firstDest[i], secondDest[i])) { + return false; + } + } + return true; +} + +;// CONCATENATED MODULE: ./web/pdf_layer_viewer.js + +class PDFLayerViewer extends BaseTreeViewer { + constructor(options) { + super(options); + this.eventBus._on("optionalcontentconfigchanged", evt => { + this.#updateLayers(evt.promise); + }); + this.eventBus._on("resetlayers", () => { + this.#updateLayers(); + }); + this.eventBus._on("togglelayerstree", this._toggleAllTreeItems.bind(this)); + } + reset() { + super.reset(); + this._optionalContentConfig = null; + this._optionalContentHash = null; + } + _dispatchEvent(layersCount) { + this.eventBus.dispatch("layersloaded", { + source: this, + layersCount + }); + } + _bindLink(element, { + groupId, + input + }) { + const setVisibility = () => { + this._optionalContentConfig.setVisibility(groupId, input.checked); + this._optionalContentHash = this._optionalContentConfig.getHash(); + this.eventBus.dispatch("optionalcontentconfig", { + source: this, + promise: Promise.resolve(this._optionalContentConfig) + }); + }; + element.onclick = evt => { + if (evt.target === input) { + setVisibility(); + return true; + } else if (evt.target !== element) { + return true; + } + input.checked = !input.checked; + setVisibility(); + return false; + }; + } + async _setNestedName(element, { + name = null + }) { + if (typeof name === "string") { + element.textContent = this._normalizeTextContent(name); + return; + } + element.textContent = await this._l10n.get("pdfjs-additional-layers"); + element.style.fontStyle = "italic"; + } + _addToggleButton(div, { + name = null + }) { + super._addToggleButton(div, name === null); + } + _toggleAllTreeItems() { + if (!this._optionalContentConfig) { + return; + } + super._toggleAllTreeItems(); + } + render({ + optionalContentConfig, + pdfDocument + }) { + if (this._optionalContentConfig) { + this.reset(); + } + this._optionalContentConfig = optionalContentConfig || null; + this._pdfDocument = pdfDocument || null; + const groups = optionalContentConfig?.getOrder(); + if (!groups) { + this._dispatchEvent(0); + return; + } + this._optionalContentHash = optionalContentConfig.getHash(); + const fragment = document.createDocumentFragment(), + queue = [{ + parent: fragment, + groups + }]; + let layersCount = 0, + hasAnyNesting = false; + while (queue.length > 0) { + const levelData = queue.shift(); + for (const groupId of levelData.groups) { + const div = document.createElement("div"); + div.className = "treeItem"; + const element = document.createElement("a"); + div.append(element); + if (typeof groupId === "object") { + hasAnyNesting = true; + this._addToggleButton(div, groupId); + this._setNestedName(element, groupId); + const itemsDiv = document.createElement("div"); + itemsDiv.className = "treeItems"; + div.append(itemsDiv); + queue.push({ + parent: itemsDiv, + groups: groupId.order + }); + } else { + const group = optionalContentConfig.getGroup(groupId); + const input = document.createElement("input"); + this._bindLink(element, { + groupId, + input + }); + input.type = "checkbox"; + input.checked = group.visible; + const label = document.createElement("label"); + label.textContent = this._normalizeTextContent(group.name); + label.append(input); + element.append(label); + layersCount++; + } + levelData.parent.append(div); + } + } + this._finishRendering(fragment, layersCount, hasAnyNesting); + } + async #updateLayers(promise = null) { + if (!this._optionalContentConfig) { + return; + } + const pdfDocument = this._pdfDocument; + const optionalContentConfig = await (promise || pdfDocument.getOptionalContentConfig()); + if (pdfDocument !== this._pdfDocument) { + return; + } + if (promise) { + if (optionalContentConfig.getHash() === this._optionalContentHash) { + return; + } + } else { + this.eventBus.dispatch("optionalcontentconfig", { + source: this, + promise: Promise.resolve(optionalContentConfig) + }); + } + this.render({ + optionalContentConfig, + pdfDocument: this._pdfDocument + }); + } +} + +;// CONCATENATED MODULE: ./web/pdf_outline_viewer.js + + + +class PDFOutlineViewer extends BaseTreeViewer { + constructor(options) { + super(options); + this.linkService = options.linkService; + this.downloadManager = options.downloadManager; + this.eventBus._on("toggleoutlinetree", this._toggleAllTreeItems.bind(this)); + this.eventBus._on("currentoutlineitem", this._currentOutlineItem.bind(this)); + this.eventBus._on("pagechanging", evt => { + this._currentPageNumber = evt.pageNumber; + }); + this.eventBus._on("pagesloaded", evt => { + this._isPagesLoaded = !!evt.pagesCount; + if (this._currentOutlineItemCapability && !this._currentOutlineItemCapability.settled) { + this._currentOutlineItemCapability.resolve(this._isPagesLoaded); + } + }); + this.eventBus._on("sidebarviewchanged", evt => { + this._sidebarView = evt.view; + }); + } + reset() { + super.reset(); + this._outline = null; + this._pageNumberToDestHashCapability = null; + this._currentPageNumber = 1; + this._isPagesLoaded = null; + if (this._currentOutlineItemCapability && !this._currentOutlineItemCapability.settled) { + this._currentOutlineItemCapability.resolve(false); + } + this._currentOutlineItemCapability = null; + } + _dispatchEvent(outlineCount) { + this._currentOutlineItemCapability = new PromiseCapability(); + if (outlineCount === 0 || this._pdfDocument?.loadingParams.disableAutoFetch) { + this._currentOutlineItemCapability.resolve(false); + } else if (this._isPagesLoaded !== null) { + this._currentOutlineItemCapability.resolve(this._isPagesLoaded); + } + this.eventBus.dispatch("outlineloaded", { + source: this, + outlineCount, + currentOutlineItemPromise: this._currentOutlineItemCapability.promise + }); + } + _bindLink(element, { + url, + newWindow, + action, + attachment, + dest, + setOCGState + }) { + const { + linkService + } = this; + if (url) { + linkService.addLinkAttributes(element, url, newWindow); + return; + } + if (action) { + element.href = linkService.getAnchorUrl(""); + element.onclick = () => { + linkService.executeNamedAction(action); + return false; + }; + return; + } + if (attachment) { + element.href = linkService.getAnchorUrl(""); + element.onclick = () => { + this.downloadManager.openOrDownloadData(attachment.content, attachment.filename); + return false; + }; + return; + } + if (setOCGState) { + element.href = linkService.getAnchorUrl(""); + element.onclick = () => { + linkService.executeSetOCGState(setOCGState); + return false; + }; + return; + } + element.href = linkService.getDestinationHash(dest); + element.onclick = evt => { + this._updateCurrentTreeItem(evt.target.parentNode); + if (dest) { + linkService.goToDestination(dest); + } + return false; + }; + } + _setStyles(element, { + bold, + italic + }) { + if (bold) { + element.style.fontWeight = "bold"; + } + if (italic) { + element.style.fontStyle = "italic"; + } + } + _addToggleButton(div, { + count, + items + }) { + let hidden = false; + if (count < 0) { + let totalCount = items.length; + if (totalCount > 0) { + const queue = [...items]; + while (queue.length > 0) { + const { + count: nestedCount, + items: nestedItems + } = queue.shift(); + if (nestedCount > 0 && nestedItems.length > 0) { + totalCount += nestedItems.length; + queue.push(...nestedItems); + } + } + } + if (Math.abs(count) === totalCount) { + hidden = true; + } + } + super._addToggleButton(div, hidden); + } + _toggleAllTreeItems() { + if (!this._outline) { + return; + } + super._toggleAllTreeItems(); + } + render({ + outline, + pdfDocument + }) { + if (this._outline) { + this.reset(); + } + this._outline = outline || null; + this._pdfDocument = pdfDocument || null; + if (!outline) { + this._dispatchEvent(0); + return; + } + const fragment = document.createDocumentFragment(); + const queue = [{ + parent: fragment, + items: outline + }]; + let outlineCount = 0, + hasAnyNesting = false; + while (queue.length > 0) { + const levelData = queue.shift(); + for (const item of levelData.items) { + const div = document.createElement("div"); + div.className = "treeItem"; + const element = document.createElement("a"); + this._bindLink(element, item); + this._setStyles(element, item); + element.textContent = this._normalizeTextContent(item.title); + div.append(element); + if (item.items.length > 0) { + hasAnyNesting = true; + this._addToggleButton(div, item); + const itemsDiv = document.createElement("div"); + itemsDiv.className = "treeItems"; + div.append(itemsDiv); + queue.push({ + parent: itemsDiv, + items: item.items + }); + } + levelData.parent.append(div); + outlineCount++; + } + } + this._finishRendering(fragment, outlineCount, hasAnyNesting); + } + async _currentOutlineItem() { + if (!this._isPagesLoaded) { + throw new Error("_currentOutlineItem: All pages have not been loaded."); + } + if (!this._outline || !this._pdfDocument) { + return; + } + const pageNumberToDestHash = await this._getPageNumberToDestHash(this._pdfDocument); + if (!pageNumberToDestHash) { + return; + } + this._updateCurrentTreeItem(null); + if (this._sidebarView !== SidebarView.OUTLINE) { + return; + } + for (let i = this._currentPageNumber; i > 0; i--) { + const destHash = pageNumberToDestHash.get(i); + if (!destHash) { + continue; + } + const linkElement = this.container.querySelector(`a[href="${destHash}"]`); + if (!linkElement) { + continue; + } + this._scrollToCurrentTreeItem(linkElement.parentNode); + break; + } + } + async _getPageNumberToDestHash(pdfDocument) { + if (this._pageNumberToDestHashCapability) { + return this._pageNumberToDestHashCapability.promise; + } + this._pageNumberToDestHashCapability = new PromiseCapability(); + const pageNumberToDestHash = new Map(), + pageNumberNesting = new Map(); + const queue = [{ + nesting: 0, + items: this._outline + }]; + while (queue.length > 0) { + const levelData = queue.shift(), + currentNesting = levelData.nesting; + for (const { + dest, + items + } of levelData.items) { + let explicitDest, pageNumber; + if (typeof dest === "string") { + explicitDest = await pdfDocument.getDestination(dest); + if (pdfDocument !== this._pdfDocument) { + return null; + } + } else { + explicitDest = dest; + } + if (Array.isArray(explicitDest)) { + const [destRef] = explicitDest; + if (typeof destRef === "object" && destRef !== null) { + pageNumber = this.linkService._cachedPageNumber(destRef); + if (!pageNumber) { + try { + pageNumber = (await pdfDocument.getPageIndex(destRef)) + 1; + if (pdfDocument !== this._pdfDocument) { + return null; + } + this.linkService.cachePageRef(pageNumber, destRef); + } catch {} + } + } else if (Number.isInteger(destRef)) { + pageNumber = destRef + 1; + } + if (Number.isInteger(pageNumber) && (!pageNumberToDestHash.has(pageNumber) || currentNesting > pageNumberNesting.get(pageNumber))) { + const destHash = this.linkService.getDestinationHash(dest); + pageNumberToDestHash.set(pageNumber, destHash); + pageNumberNesting.set(pageNumber, currentNesting); + } + } + if (items.length > 0) { + queue.push({ + nesting: currentNesting + 1, + items + }); + } + } + } + this._pageNumberToDestHashCapability.resolve(pageNumberToDestHash.size > 0 ? pageNumberToDestHash : null); + return this._pageNumberToDestHashCapability.promise; + } +} + +;// CONCATENATED MODULE: ./web/pdf_presentation_mode.js + + +const DELAY_BEFORE_HIDING_CONTROLS = 3000; +const ACTIVE_SELECTOR = "pdfPresentationMode"; +const CONTROLS_SELECTOR = "pdfPresentationModeControls"; +const MOUSE_SCROLL_COOLDOWN_TIME = 50; +const PAGE_SWITCH_THRESHOLD = 0.1; +const SWIPE_MIN_DISTANCE_THRESHOLD = 50; +const SWIPE_ANGLE_THRESHOLD = Math.PI / 6; +class PDFPresentationMode { + #state = PresentationModeState.UNKNOWN; + #args = null; + constructor({ + container, + pdfViewer, + eventBus + }) { + this.container = container; + this.pdfViewer = pdfViewer; + this.eventBus = eventBus; + this.contextMenuOpen = false; + this.mouseScrollTimeStamp = 0; + this.mouseScrollDelta = 0; + this.touchSwipeState = null; + } + async request() { + const { + container, + pdfViewer + } = this; + if (this.active || !pdfViewer.pagesCount || !container.requestFullscreen) { + return false; + } + this.#addFullscreenChangeListeners(); + this.#notifyStateChange(PresentationModeState.CHANGING); + const promise = container.requestFullscreen(); + this.#args = { + pageNumber: pdfViewer.currentPageNumber, + scaleValue: pdfViewer.currentScaleValue, + scrollMode: pdfViewer.scrollMode, + spreadMode: null, + annotationEditorMode: null + }; + if (pdfViewer.spreadMode !== SpreadMode.NONE && !(pdfViewer.pageViewsReady && pdfViewer.hasEqualPageSizes)) { + console.warn("Ignoring Spread modes when entering PresentationMode, " + "since the document may contain varying page sizes."); + this.#args.spreadMode = pdfViewer.spreadMode; + } + if (pdfViewer.annotationEditorMode !== AnnotationEditorType.DISABLE) { + this.#args.annotationEditorMode = pdfViewer.annotationEditorMode; + } + try { + await promise; + pdfViewer.focus(); + return true; + } catch { + this.#removeFullscreenChangeListeners(); + this.#notifyStateChange(PresentationModeState.NORMAL); + } + return false; + } + get active() { + return this.#state === PresentationModeState.CHANGING || this.#state === PresentationModeState.FULLSCREEN; + } + #mouseWheel(evt) { + if (!this.active) { + return; + } + evt.preventDefault(); + const delta = normalizeWheelEventDelta(evt); + const currentTime = Date.now(); + const storedTime = this.mouseScrollTimeStamp; + if (currentTime > storedTime && currentTime - storedTime < MOUSE_SCROLL_COOLDOWN_TIME) { + return; + } + if (this.mouseScrollDelta > 0 && delta < 0 || this.mouseScrollDelta < 0 && delta > 0) { + this.#resetMouseScrollState(); + } + this.mouseScrollDelta += delta; + if (Math.abs(this.mouseScrollDelta) >= PAGE_SWITCH_THRESHOLD) { + const totalDelta = this.mouseScrollDelta; + this.#resetMouseScrollState(); + const success = totalDelta > 0 ? this.pdfViewer.previousPage() : this.pdfViewer.nextPage(); + if (success) { + this.mouseScrollTimeStamp = currentTime; + } + } + } + #notifyStateChange(state) { + this.#state = state; + this.eventBus.dispatch("presentationmodechanged", { + source: this, + state + }); + } + #enter() { + this.#notifyStateChange(PresentationModeState.FULLSCREEN); + this.container.classList.add(ACTIVE_SELECTOR); + setTimeout(() => { + this.pdfViewer.scrollMode = ScrollMode.PAGE; + if (this.#args.spreadMode !== null) { + this.pdfViewer.spreadMode = SpreadMode.NONE; + } + this.pdfViewer.currentPageNumber = this.#args.pageNumber; + this.pdfViewer.currentScaleValue = "page-fit"; + if (this.#args.annotationEditorMode !== null) { + this.pdfViewer.annotationEditorMode = { + mode: AnnotationEditorType.NONE + }; + } + }, 0); + this.#addWindowListeners(); + this.#showControls(); + this.contextMenuOpen = false; + window.getSelection().removeAllRanges(); + } + #exit() { + const pageNumber = this.pdfViewer.currentPageNumber; + this.container.classList.remove(ACTIVE_SELECTOR); + setTimeout(() => { + this.#removeFullscreenChangeListeners(); + this.#notifyStateChange(PresentationModeState.NORMAL); + this.pdfViewer.scrollMode = this.#args.scrollMode; + if (this.#args.spreadMode !== null) { + this.pdfViewer.spreadMode = this.#args.spreadMode; + } + this.pdfViewer.currentScaleValue = this.#args.scaleValue; + this.pdfViewer.currentPageNumber = pageNumber; + if (this.#args.annotationEditorMode !== null) { + this.pdfViewer.annotationEditorMode = { + mode: this.#args.annotationEditorMode + }; + } + this.#args = null; + }, 0); + this.#removeWindowListeners(); + this.#hideControls(); + this.#resetMouseScrollState(); + this.contextMenuOpen = false; + } + #mouseDown(evt) { + if (this.contextMenuOpen) { + this.contextMenuOpen = false; + evt.preventDefault(); + return; + } + if (evt.button !== 0) { + return; + } + if (evt.target.href && evt.target.parentNode?.hasAttribute("data-internal-link")) { + return; + } + evt.preventDefault(); + if (evt.shiftKey) { + this.pdfViewer.previousPage(); + } else { + this.pdfViewer.nextPage(); + } + } + #contextMenu() { + this.contextMenuOpen = true; + } + #showControls() { + if (this.controlsTimeout) { + clearTimeout(this.controlsTimeout); + } else { + this.container.classList.add(CONTROLS_SELECTOR); + } + this.controlsTimeout = setTimeout(() => { + this.container.classList.remove(CONTROLS_SELECTOR); + delete this.controlsTimeout; + }, DELAY_BEFORE_HIDING_CONTROLS); + } + #hideControls() { + if (!this.controlsTimeout) { + return; + } + clearTimeout(this.controlsTimeout); + this.container.classList.remove(CONTROLS_SELECTOR); + delete this.controlsTimeout; + } + #resetMouseScrollState() { + this.mouseScrollTimeStamp = 0; + this.mouseScrollDelta = 0; + } + #touchSwipe(evt) { + if (!this.active) { + return; + } + if (evt.touches.length > 1) { + this.touchSwipeState = null; + return; + } + switch (evt.type) { + case "touchstart": + this.touchSwipeState = { + startX: evt.touches[0].pageX, + startY: evt.touches[0].pageY, + endX: evt.touches[0].pageX, + endY: evt.touches[0].pageY + }; + break; + case "touchmove": + if (this.touchSwipeState === null) { + return; + } + this.touchSwipeState.endX = evt.touches[0].pageX; + this.touchSwipeState.endY = evt.touches[0].pageY; + evt.preventDefault(); + break; + case "touchend": + if (this.touchSwipeState === null) { + return; + } + let delta = 0; + const dx = this.touchSwipeState.endX - this.touchSwipeState.startX; + const dy = this.touchSwipeState.endY - this.touchSwipeState.startY; + const absAngle = Math.abs(Math.atan2(dy, dx)); + if (Math.abs(dx) > SWIPE_MIN_DISTANCE_THRESHOLD && (absAngle <= SWIPE_ANGLE_THRESHOLD || absAngle >= Math.PI - SWIPE_ANGLE_THRESHOLD)) { + delta = dx; + } else if (Math.abs(dy) > SWIPE_MIN_DISTANCE_THRESHOLD && Math.abs(absAngle - Math.PI / 2) <= SWIPE_ANGLE_THRESHOLD) { + delta = dy; + } + if (delta > 0) { + this.pdfViewer.previousPage(); + } else if (delta < 0) { + this.pdfViewer.nextPage(); + } + break; + } + } + #addWindowListeners() { + this.showControlsBind = this.#showControls.bind(this); + this.mouseDownBind = this.#mouseDown.bind(this); + this.mouseWheelBind = this.#mouseWheel.bind(this); + this.resetMouseScrollStateBind = this.#resetMouseScrollState.bind(this); + this.contextMenuBind = this.#contextMenu.bind(this); + this.touchSwipeBind = this.#touchSwipe.bind(this); + window.addEventListener("mousemove", this.showControlsBind); + window.addEventListener("mousedown", this.mouseDownBind); + window.addEventListener("wheel", this.mouseWheelBind, { + passive: false + }); + window.addEventListener("keydown", this.resetMouseScrollStateBind); + window.addEventListener("contextmenu", this.contextMenuBind); + window.addEventListener("touchstart", this.touchSwipeBind); + window.addEventListener("touchmove", this.touchSwipeBind); + window.addEventListener("touchend", this.touchSwipeBind); + } + #removeWindowListeners() { + window.removeEventListener("mousemove", this.showControlsBind); + window.removeEventListener("mousedown", this.mouseDownBind); + window.removeEventListener("wheel", this.mouseWheelBind, { + passive: false + }); + window.removeEventListener("keydown", this.resetMouseScrollStateBind); + window.removeEventListener("contextmenu", this.contextMenuBind); + window.removeEventListener("touchstart", this.touchSwipeBind); + window.removeEventListener("touchmove", this.touchSwipeBind); + window.removeEventListener("touchend", this.touchSwipeBind); + delete this.showControlsBind; + delete this.mouseDownBind; + delete this.mouseWheelBind; + delete this.resetMouseScrollStateBind; + delete this.contextMenuBind; + delete this.touchSwipeBind; + } + #fullscreenChange() { + if (document.fullscreenElement) { + this.#enter(); + } else { + this.#exit(); + } + } + #addFullscreenChangeListeners() { + this.fullscreenChangeBind = this.#fullscreenChange.bind(this); + window.addEventListener("fullscreenchange", this.fullscreenChangeBind); + } + #removeFullscreenChangeListeners() { + window.removeEventListener("fullscreenchange", this.fullscreenChangeBind); + delete this.fullscreenChangeBind; + } +} + +;// CONCATENATED MODULE: ./web/pdf_rendering_queue.js + + +const CLEANUP_TIMEOUT = 30000; +class PDFRenderingQueue { + constructor() { + this.pdfViewer = null; + this.pdfThumbnailViewer = null; + this.onIdle = null; + this.highestPriorityPage = null; + this.idleTimeout = null; + this.printing = false; + this.isThumbnailViewEnabled = false; + Object.defineProperty(this, "hasViewer", { + value: () => !!this.pdfViewer + }); + } + setViewer(pdfViewer) { + this.pdfViewer = pdfViewer; + } + setThumbnailViewer(pdfThumbnailViewer) { + this.pdfThumbnailViewer = pdfThumbnailViewer; + } + isHighestPriority(view) { + return this.highestPriorityPage === view.renderingId; + } + renderHighestPriority(currentlyVisiblePages) { + if (this.idleTimeout) { + clearTimeout(this.idleTimeout); + this.idleTimeout = null; + } + if (this.pdfViewer.forceRendering(currentlyVisiblePages)) { + return; + } + if (this.isThumbnailViewEnabled && this.pdfThumbnailViewer?.forceRendering()) { + return; + } + if (this.printing) { + return; + } + if (this.onIdle) { + this.idleTimeout = setTimeout(this.onIdle.bind(this), CLEANUP_TIMEOUT); + } + } + getHighestPriority(visible, views, scrolledDown, preRenderExtra = false) { + const visibleViews = visible.views, + numVisible = visibleViews.length; + if (numVisible === 0) { + return null; + } + for (let i = 0; i < numVisible; i++) { + const view = visibleViews[i].view; + if (!this.isViewFinished(view)) { + return view; + } + } + const firstId = visible.first.id, + lastId = visible.last.id; + if (lastId - firstId + 1 > numVisible) { + const visibleIds = visible.ids; + for (let i = 1, ii = lastId - firstId; i < ii; i++) { + const holeId = scrolledDown ? firstId + i : lastId - i; + if (visibleIds.has(holeId)) { + continue; + } + const holeView = views[holeId - 1]; + if (!this.isViewFinished(holeView)) { + return holeView; + } + } + } + let preRenderIndex = scrolledDown ? lastId : firstId - 2; + let preRenderView = views[preRenderIndex]; + if (preRenderView && !this.isViewFinished(preRenderView)) { + return preRenderView; + } + if (preRenderExtra) { + preRenderIndex += scrolledDown ? 1 : -1; + preRenderView = views[preRenderIndex]; + if (preRenderView && !this.isViewFinished(preRenderView)) { + return preRenderView; + } + } + return null; + } + isViewFinished(view) { + return view.renderingState === RenderingStates.FINISHED; + } + renderView(view) { + switch (view.renderingState) { + case RenderingStates.FINISHED: + return false; + case RenderingStates.PAUSED: + this.highestPriorityPage = view.renderingId; + view.resume(); + break; + case RenderingStates.RUNNING: + this.highestPriorityPage = view.renderingId; + break; + case RenderingStates.INITIAL: + this.highestPriorityPage = view.renderingId; + view.draw().finally(() => { + this.renderHighestPriority(); + }).catch(reason => { + if (reason instanceof RenderingCancelledException) { + return; + } + console.error(`renderView: "${reason}"`); + }); + break; + } + return true; + } +} + +;// CONCATENATED MODULE: ./web/pdf_scripting_manager.js + + +class PDFScriptingManager { + #closeCapability = null; + #destroyCapability = null; + #docProperties = null; + #eventBus = null; + #externalServices = null; + #pdfDocument = null; + #pdfViewer = null; + #ready = false; + #sandboxBundleSrc = null; + #scripting = null; + #willPrintCapability = null; + constructor({ + eventBus, + sandboxBundleSrc = null, + externalServices = null, + docProperties = null + }) { + this.#eventBus = eventBus; + this.#sandboxBundleSrc = sandboxBundleSrc; + this.#externalServices = externalServices; + this.#docProperties = docProperties; + } + setViewer(pdfViewer) { + this.#pdfViewer = pdfViewer; + } + async setDocument(pdfDocument) { + if (this.#pdfDocument) { + await this.#destroyScripting(); + } + this.#pdfDocument = pdfDocument; + if (!pdfDocument) { + return; + } + const [objects, calculationOrder, docActions] = await Promise.all([pdfDocument.getFieldObjects(), pdfDocument.getCalculationOrderIds(), pdfDocument.getJSActions()]); + if (!objects && !docActions) { + await this.#destroyScripting(); + return; + } + if (pdfDocument !== this.#pdfDocument) { + return; + } + try { + this.#scripting = this.#initScripting(); + } catch (error) { + console.error(`setDocument: "${error.message}".`); + await this.#destroyScripting(); + return; + } + this._internalEvents.set("updatefromsandbox", event => { + if (event?.source === window) { + this.#updateFromSandbox(event.detail); + } + }); + this._internalEvents.set("dispatcheventinsandbox", event => { + this.#scripting?.dispatchEventInSandbox(event.detail); + }); + this._internalEvents.set("pagechanging", ({ + pageNumber, + previous + }) => { + if (pageNumber === previous) { + return; + } + this.#dispatchPageClose(previous); + this.#dispatchPageOpen(pageNumber); + }); + this._internalEvents.set("pagerendered", ({ + pageNumber + }) => { + if (!this._pageOpenPending.has(pageNumber)) { + return; + } + if (pageNumber !== this.#pdfViewer.currentPageNumber) { + return; + } + this.#dispatchPageOpen(pageNumber); + }); + this._internalEvents.set("pagesdestroy", async () => { + await this.#dispatchPageClose(this.#pdfViewer.currentPageNumber); + await this.#scripting?.dispatchEventInSandbox({ + id: "doc", + name: "WillClose" + }); + this.#closeCapability?.resolve(); + }); + for (const [name, listener] of this._internalEvents) { + this.#eventBus._on(name, listener); + } + try { + const docProperties = await this.#docProperties(pdfDocument); + if (pdfDocument !== this.#pdfDocument) { + return; + } + await this.#scripting.createSandbox({ + objects, + calculationOrder, + appInfo: { + platform: navigator.platform, + language: navigator.language + }, + docInfo: { + ...docProperties, + actions: docActions + } + }); + this.#eventBus.dispatch("sandboxcreated", { + source: this + }); + } catch (error) { + console.error(`setDocument: "${error.message}".`); + await this.#destroyScripting(); + return; + } + await this.#scripting?.dispatchEventInSandbox({ + id: "doc", + name: "Open" + }); + await this.#dispatchPageOpen(this.#pdfViewer.currentPageNumber, true); + Promise.resolve().then(() => { + if (pdfDocument === this.#pdfDocument) { + this.#ready = true; + } + }); + } + async dispatchWillSave() { + return this.#scripting?.dispatchEventInSandbox({ + id: "doc", + name: "WillSave" + }); + } + async dispatchDidSave() { + return this.#scripting?.dispatchEventInSandbox({ + id: "doc", + name: "DidSave" + }); + } + async dispatchWillPrint() { + if (!this.#scripting) { + return; + } + await this.#willPrintCapability?.promise; + this.#willPrintCapability = new PromiseCapability(); + try { + await this.#scripting.dispatchEventInSandbox({ + id: "doc", + name: "WillPrint" + }); + } catch (ex) { + this.#willPrintCapability.resolve(); + this.#willPrintCapability = null; + throw ex; + } + await this.#willPrintCapability.promise; + } + async dispatchDidPrint() { + return this.#scripting?.dispatchEventInSandbox({ + id: "doc", + name: "DidPrint" + }); + } + get destroyPromise() { + return this.#destroyCapability?.promise || null; + } + get ready() { + return this.#ready; + } + get _internalEvents() { + return shadow(this, "_internalEvents", new Map()); + } + get _pageOpenPending() { + return shadow(this, "_pageOpenPending", new Set()); + } + get _visitedPages() { + return shadow(this, "_visitedPages", new Map()); + } + async #updateFromSandbox(detail) { + const pdfViewer = this.#pdfViewer; + const isInPresentationMode = pdfViewer.isInPresentationMode || pdfViewer.isChangingPresentationMode; + const { + id, + siblings, + command, + value + } = detail; + if (!id) { + switch (command) { + case "clear": + console.clear(); + break; + case "error": + console.error(value); + break; + case "layout": + if (!isInPresentationMode) { + const modes = apiPageLayoutToViewerModes(value); + pdfViewer.spreadMode = modes.spreadMode; + } + break; + case "page-num": + pdfViewer.currentPageNumber = value + 1; + break; + case "print": + await pdfViewer.pagesPromise; + this.#eventBus.dispatch("print", { + source: this + }); + break; + case "println": + console.log(value); + break; + case "zoom": + if (!isInPresentationMode) { + pdfViewer.currentScaleValue = value; + } + break; + case "SaveAs": + this.#eventBus.dispatch("download", { + source: this + }); + break; + case "FirstPage": + pdfViewer.currentPageNumber = 1; + break; + case "LastPage": + pdfViewer.currentPageNumber = pdfViewer.pagesCount; + break; + case "NextPage": + pdfViewer.nextPage(); + break; + case "PrevPage": + pdfViewer.previousPage(); + break; + case "ZoomViewIn": + if (!isInPresentationMode) { + pdfViewer.increaseScale(); + } + break; + case "ZoomViewOut": + if (!isInPresentationMode) { + pdfViewer.decreaseScale(); + } + break; + case "WillPrintFinished": + this.#willPrintCapability?.resolve(); + this.#willPrintCapability = null; + break; + } + return; + } + if (isInPresentationMode && detail.focus) { + return; + } + delete detail.id; + delete detail.siblings; + const ids = siblings ? [id, ...siblings] : [id]; + for (const elementId of ids) { + const element = document.querySelector(`[data-element-id="${elementId}"]`); + if (element) { + element.dispatchEvent(new CustomEvent("updatefromsandbox", { + detail + })); + } else { + this.#pdfDocument?.annotationStorage.setValue(elementId, detail); + } + } + } + async #dispatchPageOpen(pageNumber, initialize = false) { + const pdfDocument = this.#pdfDocument, + visitedPages = this._visitedPages; + if (initialize) { + this.#closeCapability = new PromiseCapability(); + } + if (!this.#closeCapability) { + return; + } + const pageView = this.#pdfViewer.getPageView(pageNumber - 1); + if (pageView?.renderingState !== RenderingStates.FINISHED) { + this._pageOpenPending.add(pageNumber); + return; + } + this._pageOpenPending.delete(pageNumber); + const actionsPromise = (async () => { + const actions = await (!visitedPages.has(pageNumber) ? pageView.pdfPage?.getJSActions() : null); + if (pdfDocument !== this.#pdfDocument) { + return; + } + await this.#scripting?.dispatchEventInSandbox({ + id: "page", + name: "PageOpen", + pageNumber, + actions + }); + })(); + visitedPages.set(pageNumber, actionsPromise); + } + async #dispatchPageClose(pageNumber) { + const pdfDocument = this.#pdfDocument, + visitedPages = this._visitedPages; + if (!this.#closeCapability) { + return; + } + if (this._pageOpenPending.has(pageNumber)) { + return; + } + const actionsPromise = visitedPages.get(pageNumber); + if (!actionsPromise) { + return; + } + visitedPages.set(pageNumber, null); + await actionsPromise; + if (pdfDocument !== this.#pdfDocument) { + return; + } + await this.#scripting?.dispatchEventInSandbox({ + id: "page", + name: "PageClose", + pageNumber + }); + } + #initScripting() { + this.#destroyCapability = new PromiseCapability(); + if (this.#scripting) { + throw new Error("#initScripting: Scripting already exists."); + } + return this.#externalServices.createScripting({ + sandboxBundleSrc: this.#sandboxBundleSrc + }); + } + async #destroyScripting() { + if (!this.#scripting) { + this.#pdfDocument = null; + this.#destroyCapability?.resolve(); + return; + } + if (this.#closeCapability) { + await Promise.race([this.#closeCapability.promise, new Promise(resolve => { + setTimeout(resolve, 1000); + })]).catch(() => {}); + this.#closeCapability = null; + } + this.#pdfDocument = null; + try { + await this.#scripting.destroySandbox(); + } catch {} + this.#willPrintCapability?.reject(new Error("Scripting destroyed.")); + this.#willPrintCapability = null; + for (const [name, listener] of this._internalEvents) { + this.#eventBus._off(name, listener); + } + this._internalEvents.clear(); + this._pageOpenPending.clear(); + this._visitedPages.clear(); + this.#scripting = null; + this.#ready = false; + this.#destroyCapability?.resolve(); + } +} + +;// CONCATENATED MODULE: ./web/pdf_sidebar.js + +const SIDEBAR_WIDTH_VAR = "--sidebar-width"; +const SIDEBAR_MIN_WIDTH = 200; +const SIDEBAR_RESIZING_CLASS = "sidebarResizing"; +const UI_NOTIFICATION_CLASS = "pdfSidebarNotification"; +class PDFSidebar { + #isRTL = false; + #mouseMoveBound = this.#mouseMove.bind(this); + #mouseUpBound = this.#mouseUp.bind(this); + #outerContainerWidth = null; + #width = null; + constructor({ + elements, + eventBus, + l10n + }) { + this.isOpen = false; + this.active = SidebarView.THUMBS; + this.isInitialViewSet = false; + this.isInitialEventDispatched = false; + this.onToggled = null; + this.onUpdateThumbnails = null; + this.outerContainer = elements.outerContainer; + this.sidebarContainer = elements.sidebarContainer; + this.toggleButton = elements.toggleButton; + this.resizer = elements.resizer; + this.thumbnailButton = elements.thumbnailButton; + this.outlineButton = elements.outlineButton; + this.attachmentsButton = elements.attachmentsButton; + this.layersButton = elements.layersButton; + this.thumbnailView = elements.thumbnailView; + this.outlineView = elements.outlineView; + this.attachmentsView = elements.attachmentsView; + this.layersView = elements.layersView; + this._outlineOptionsContainer = elements.outlineOptionsContainer; + this._currentOutlineItemButton = elements.currentOutlineItemButton; + this.eventBus = eventBus; + this.#isRTL = l10n.getDirection() === "rtl"; + this.#addEventListeners(); + } + reset() { + this.isInitialViewSet = false; + this.isInitialEventDispatched = false; + this.#hideUINotification(true); + this.switchView(SidebarView.THUMBS); + this.outlineButton.disabled = false; + this.attachmentsButton.disabled = false; + this.layersButton.disabled = false; + this._currentOutlineItemButton.disabled = true; + } + get visibleView() { + return this.isOpen ? this.active : SidebarView.NONE; + } + setInitialView(view = SidebarView.NONE) { + if (this.isInitialViewSet) { + return; + } + this.isInitialViewSet = true; + if (view === SidebarView.NONE || view === SidebarView.UNKNOWN) { + this.#dispatchEvent(); + return; + } + this.switchView(view, true); + if (!this.isInitialEventDispatched) { + this.#dispatchEvent(); + } + } + switchView(view, forceOpen = false) { + const isViewChanged = view !== this.active; + let forceRendering = false; + switch (view) { + case SidebarView.NONE: + if (this.isOpen) { + this.close(); + } + return; + case SidebarView.THUMBS: + if (this.isOpen && isViewChanged) { + forceRendering = true; + } + break; + case SidebarView.OUTLINE: + if (this.outlineButton.disabled) { + return; + } + break; + case SidebarView.ATTACHMENTS: + if (this.attachmentsButton.disabled) { + return; + } + break; + case SidebarView.LAYERS: + if (this.layersButton.disabled) { + return; + } + break; + default: + console.error(`PDFSidebar.switchView: "${view}" is not a valid view.`); + return; + } + this.active = view; + toggleCheckedBtn(this.thumbnailButton, view === SidebarView.THUMBS, this.thumbnailView); + toggleCheckedBtn(this.outlineButton, view === SidebarView.OUTLINE, this.outlineView); + toggleCheckedBtn(this.attachmentsButton, view === SidebarView.ATTACHMENTS, this.attachmentsView); + toggleCheckedBtn(this.layersButton, view === SidebarView.LAYERS, this.layersView); + this._outlineOptionsContainer.classList.toggle("hidden", view !== SidebarView.OUTLINE); + if (forceOpen && !this.isOpen) { + this.open(); + return; + } + if (forceRendering) { + this.onUpdateThumbnails(); + this.onToggled(); + } + if (isViewChanged) { + this.#dispatchEvent(); + } + } + open() { + if (this.isOpen) { + return; + } + this.isOpen = true; + toggleExpandedBtn(this.toggleButton, true); + this.outerContainer.classList.add("sidebarMoving", "sidebarOpen"); + if (this.active === SidebarView.THUMBS) { + this.onUpdateThumbnails(); + } + this.onToggled(); + this.#dispatchEvent(); + this.#hideUINotification(); + } + close() { + if (!this.isOpen) { + return; + } + this.isOpen = false; + toggleExpandedBtn(this.toggleButton, false); + this.outerContainer.classList.add("sidebarMoving"); + this.outerContainer.classList.remove("sidebarOpen"); + this.onToggled(); + this.#dispatchEvent(); + } + toggle() { + if (this.isOpen) { + this.close(); + } else { + this.open(); + } + } + #dispatchEvent() { + if (this.isInitialViewSet) { + this.isInitialEventDispatched ||= true; + } + this.eventBus.dispatch("sidebarviewchanged", { + source: this, + view: this.visibleView + }); + } + #showUINotification() { + this.toggleButton.setAttribute("data-l10n-id", "pdfjs-toggle-sidebar-notification-button"); + if (!this.isOpen) { + this.toggleButton.classList.add(UI_NOTIFICATION_CLASS); + } + } + #hideUINotification(reset = false) { + if (this.isOpen || reset) { + this.toggleButton.classList.remove(UI_NOTIFICATION_CLASS); + } + if (reset) { + this.toggleButton.setAttribute("data-l10n-id", "pdfjs-toggle-sidebar-button"); + } + } + #addEventListeners() { + this.sidebarContainer.addEventListener("transitionend", evt => { + if (evt.target === this.sidebarContainer) { + this.outerContainer.classList.remove("sidebarMoving"); + } + }); + this.toggleButton.addEventListener("click", () => { + this.toggle(); + }); + this.thumbnailButton.addEventListener("click", () => { + this.switchView(SidebarView.THUMBS); + }); + this.outlineButton.addEventListener("click", () => { + this.switchView(SidebarView.OUTLINE); + }); + this.outlineButton.addEventListener("dblclick", () => { + this.eventBus.dispatch("toggleoutlinetree", { + source: this + }); + }); + this.attachmentsButton.addEventListener("click", () => { + this.switchView(SidebarView.ATTACHMENTS); + }); + this.layersButton.addEventListener("click", () => { + this.switchView(SidebarView.LAYERS); + }); + this.layersButton.addEventListener("dblclick", () => { + this.eventBus.dispatch("resetlayers", { + source: this + }); + }); + this._currentOutlineItemButton.addEventListener("click", () => { + this.eventBus.dispatch("currentoutlineitem", { + source: this + }); + }); + const onTreeLoaded = (count, button, view) => { + button.disabled = !count; + if (count) { + this.#showUINotification(); + } else if (this.active === view) { + this.switchView(SidebarView.THUMBS); + } + }; + this.eventBus._on("outlineloaded", evt => { + onTreeLoaded(evt.outlineCount, this.outlineButton, SidebarView.OUTLINE); + evt.currentOutlineItemPromise.then(enabled => { + if (!this.isInitialViewSet) { + return; + } + this._currentOutlineItemButton.disabled = !enabled; + }); + }); + this.eventBus._on("attachmentsloaded", evt => { + onTreeLoaded(evt.attachmentsCount, this.attachmentsButton, SidebarView.ATTACHMENTS); + }); + this.eventBus._on("layersloaded", evt => { + onTreeLoaded(evt.layersCount, this.layersButton, SidebarView.LAYERS); + }); + this.eventBus._on("presentationmodechanged", evt => { + if (evt.state === PresentationModeState.NORMAL && this.visibleView === SidebarView.THUMBS) { + this.onUpdateThumbnails(); + } + }); + this.resizer.addEventListener("mousedown", evt => { + if (evt.button !== 0) { + return; + } + this.outerContainer.classList.add(SIDEBAR_RESIZING_CLASS); + window.addEventListener("mousemove", this.#mouseMoveBound); + window.addEventListener("mouseup", this.#mouseUpBound); + }); + this.eventBus._on("resize", evt => { + if (evt.source !== window) { + return; + } + this.#outerContainerWidth = null; + if (!this.#width) { + return; + } + if (!this.isOpen) { + this.#updateWidth(this.#width); + return; + } + this.outerContainer.classList.add(SIDEBAR_RESIZING_CLASS); + const updated = this.#updateWidth(this.#width); + Promise.resolve().then(() => { + this.outerContainer.classList.remove(SIDEBAR_RESIZING_CLASS); + if (updated) { + this.eventBus.dispatch("resize", { + source: this + }); + } + }); + }); + } + get outerContainerWidth() { + return this.#outerContainerWidth ||= this.outerContainer.clientWidth; + } + #updateWidth(width = 0) { + const maxWidth = Math.floor(this.outerContainerWidth / 2); + if (width > maxWidth) { + width = maxWidth; + } + if (width < SIDEBAR_MIN_WIDTH) { + width = SIDEBAR_MIN_WIDTH; + } + if (width === this.#width) { + return false; + } + this.#width = width; + docStyle.setProperty(SIDEBAR_WIDTH_VAR, `${width}px`); + return true; + } + #mouseMove(evt) { + let width = evt.clientX; + if (this.#isRTL) { + width = this.outerContainerWidth - width; + } + this.#updateWidth(width); + } + #mouseUp(evt) { + this.outerContainer.classList.remove(SIDEBAR_RESIZING_CLASS); + this.eventBus.dispatch("resize", { + source: this + }); + window.removeEventListener("mousemove", this.#mouseMoveBound); + window.removeEventListener("mouseup", this.#mouseUpBound); + } +} + +;// CONCATENATED MODULE: ./web/pdf_thumbnail_view.js + + +const DRAW_UPSCALE_FACTOR = 2; +const MAX_NUM_SCALING_STEPS = 3; +const THUMBNAIL_WIDTH = 98; +class TempImageFactory { + static #tempCanvas = null; + static getCanvas(width, height) { + const tempCanvas = this.#tempCanvas ||= document.createElement("canvas"); + tempCanvas.width = width; + tempCanvas.height = height; + const ctx = tempCanvas.getContext("2d", { + alpha: false + }); + ctx.save(); + ctx.fillStyle = "rgb(255, 255, 255)"; + ctx.fillRect(0, 0, width, height); + ctx.restore(); + return [tempCanvas, tempCanvas.getContext("2d")]; + } + static destroyCanvas() { + const tempCanvas = this.#tempCanvas; + if (tempCanvas) { + tempCanvas.width = 0; + tempCanvas.height = 0; + } + this.#tempCanvas = null; + } +} +class PDFThumbnailView { + constructor({ + container, + eventBus, + id, + defaultViewport, + optionalContentConfigPromise, + linkService, + renderingQueue, + pageColors + }) { + this.id = id; + this.renderingId = "thumbnail" + id; + this.pageLabel = null; + this.pdfPage = null; + this.rotation = 0; + this.viewport = defaultViewport; + this.pdfPageRotate = defaultViewport.rotation; + this._optionalContentConfigPromise = optionalContentConfigPromise || null; + this.pageColors = pageColors || null; + this.eventBus = eventBus; + this.linkService = linkService; + this.renderingQueue = renderingQueue; + this.renderTask = null; + this.renderingState = RenderingStates.INITIAL; + this.resume = null; + const anchor = document.createElement("a"); + anchor.href = linkService.getAnchorUrl("#page=" + id); + anchor.setAttribute("data-l10n-id", "pdfjs-thumb-page-title"); + anchor.setAttribute("data-l10n-args", this.#pageL10nArgs); + anchor.onclick = function () { + linkService.goToPage(id); + return false; + }; + this.anchor = anchor; + const div = document.createElement("div"); + div.className = "thumbnail"; + div.setAttribute("data-page-number", this.id); + this.div = div; + this.#updateDims(); + const img = document.createElement("div"); + img.className = "thumbnailImage"; + this._placeholderImg = img; + div.append(img); + anchor.append(div); + container.append(anchor); + } + #updateDims() { + const { + width, + height + } = this.viewport; + const ratio = width / height; + this.canvasWidth = THUMBNAIL_WIDTH; + this.canvasHeight = this.canvasWidth / ratio | 0; + this.scale = this.canvasWidth / width; + const { + style + } = this.div; + style.setProperty("--thumbnail-width", `${this.canvasWidth}px`); + style.setProperty("--thumbnail-height", `${this.canvasHeight}px`); + } + setPdfPage(pdfPage) { + this.pdfPage = pdfPage; + this.pdfPageRotate = pdfPage.rotate; + const totalRotation = (this.rotation + this.pdfPageRotate) % 360; + this.viewport = pdfPage.getViewport({ + scale: 1, + rotation: totalRotation + }); + this.reset(); + } + reset() { + this.cancelRendering(); + this.renderingState = RenderingStates.INITIAL; + this.div.removeAttribute("data-loaded"); + this.image?.replaceWith(this._placeholderImg); + this.#updateDims(); + if (this.image) { + this.image.removeAttribute("src"); + delete this.image; + } + } + update({ + rotation = null + }) { + if (typeof rotation === "number") { + this.rotation = rotation; + } + const totalRotation = (this.rotation + this.pdfPageRotate) % 360; + this.viewport = this.viewport.clone({ + scale: 1, + rotation: totalRotation + }); + this.reset(); + } + cancelRendering() { + if (this.renderTask) { + this.renderTask.cancel(); + this.renderTask = null; + } + this.resume = null; + } + _getPageDrawContext(upscaleFactor = 1) { + const canvas = document.createElement("canvas"); + const ctx = canvas.getContext("2d", { + alpha: false + }); + const outputScale = new OutputScale(); + canvas.width = upscaleFactor * this.canvasWidth * outputScale.sx | 0; + canvas.height = upscaleFactor * this.canvasHeight * outputScale.sy | 0; + const transform = outputScale.scaled ? [outputScale.sx, 0, 0, outputScale.sy, 0, 0] : null; + return { + ctx, + canvas, + transform + }; + } + _convertCanvasToImage(canvas) { + if (this.renderingState !== RenderingStates.FINISHED) { + throw new Error("_convertCanvasToImage: Rendering has not finished."); + } + const reducedCanvas = this._reduceImage(canvas); + const image = document.createElement("img"); + image.className = "thumbnailImage"; + image.setAttribute("data-l10n-id", "pdfjs-thumb-page-canvas"); + image.setAttribute("data-l10n-args", this.#pageL10nArgs); + image.src = reducedCanvas.toDataURL(); + this.image = image; + this.div.setAttribute("data-loaded", true); + this._placeholderImg.replaceWith(image); + reducedCanvas.width = 0; + reducedCanvas.height = 0; + } + async #finishRenderTask(renderTask, canvas, error = null) { + if (renderTask === this.renderTask) { + this.renderTask = null; + } + if (error instanceof RenderingCancelledException) { + return; + } + this.renderingState = RenderingStates.FINISHED; + this._convertCanvasToImage(canvas); + if (error) { + throw error; + } + } + async draw() { + if (this.renderingState !== RenderingStates.INITIAL) { + console.error("Must be in new state before drawing"); + return undefined; + } + const { + pdfPage + } = this; + if (!pdfPage) { + this.renderingState = RenderingStates.FINISHED; + throw new Error("pdfPage is not loaded"); + } + this.renderingState = RenderingStates.RUNNING; + const { + ctx, + canvas, + transform + } = this._getPageDrawContext(DRAW_UPSCALE_FACTOR); + const drawViewport = this.viewport.clone({ + scale: DRAW_UPSCALE_FACTOR * this.scale + }); + const renderContinueCallback = cont => { + if (!this.renderingQueue.isHighestPriority(this)) { + this.renderingState = RenderingStates.PAUSED; + this.resume = () => { + this.renderingState = RenderingStates.RUNNING; + cont(); + }; + return; + } + cont(); + }; + const renderContext = { + canvasContext: ctx, + transform, + viewport: drawViewport, + optionalContentConfigPromise: this._optionalContentConfigPromise, + pageColors: this.pageColors + }; + const renderTask = this.renderTask = pdfPage.render(renderContext); + renderTask.onContinue = renderContinueCallback; + const resultPromise = renderTask.promise.then(() => this.#finishRenderTask(renderTask, canvas), error => this.#finishRenderTask(renderTask, canvas, error)); + resultPromise.finally(() => { + canvas.width = 0; + canvas.height = 0; + this.eventBus.dispatch("thumbnailrendered", { + source: this, + pageNumber: this.id, + pdfPage: this.pdfPage + }); + }); + return resultPromise; + } + setImage(pageView) { + if (this.renderingState !== RenderingStates.INITIAL) { + return; + } + const { + thumbnailCanvas: canvas, + pdfPage, + scale + } = pageView; + if (!canvas) { + return; + } + if (!this.pdfPage) { + this.setPdfPage(pdfPage); + } + if (scale < this.scale) { + return; + } + this.renderingState = RenderingStates.FINISHED; + this._convertCanvasToImage(canvas); + } + _reduceImage(img) { + const { + ctx, + canvas + } = this._getPageDrawContext(); + if (img.width <= 2 * canvas.width) { + ctx.drawImage(img, 0, 0, img.width, img.height, 0, 0, canvas.width, canvas.height); + return canvas; + } + let reducedWidth = canvas.width << MAX_NUM_SCALING_STEPS; + let reducedHeight = canvas.height << MAX_NUM_SCALING_STEPS; + const [reducedImage, reducedImageCtx] = TempImageFactory.getCanvas(reducedWidth, reducedHeight); + while (reducedWidth > img.width || reducedHeight > img.height) { + reducedWidth >>= 1; + reducedHeight >>= 1; + } + reducedImageCtx.drawImage(img, 0, 0, img.width, img.height, 0, 0, reducedWidth, reducedHeight); + while (reducedWidth > 2 * canvas.width) { + reducedImageCtx.drawImage(reducedImage, 0, 0, reducedWidth, reducedHeight, 0, 0, reducedWidth >> 1, reducedHeight >> 1); + reducedWidth >>= 1; + reducedHeight >>= 1; + } + ctx.drawImage(reducedImage, 0, 0, reducedWidth, reducedHeight, 0, 0, canvas.width, canvas.height); + return canvas; + } + get #pageL10nArgs() { + return JSON.stringify({ + page: this.pageLabel ?? this.id + }); + } + setPageLabel(label) { + this.pageLabel = typeof label === "string" ? label : null; + this.anchor.setAttribute("data-l10n-args", this.#pageL10nArgs); + if (this.renderingState !== RenderingStates.FINISHED) { + return; + } + this.image?.setAttribute("data-l10n-args", this.#pageL10nArgs); + } +} + +;// CONCATENATED MODULE: ./web/pdf_thumbnail_viewer.js + + +const THUMBNAIL_SCROLL_MARGIN = -19; +const THUMBNAIL_SELECTED_CLASS = "selected"; +class PDFThumbnailViewer { + constructor({ + container, + eventBus, + linkService, + renderingQueue, + pageColors + }) { + this.container = container; + this.eventBus = eventBus; + this.linkService = linkService; + this.renderingQueue = renderingQueue; + this.pageColors = pageColors || null; + this.scroll = watchScroll(this.container, this._scrollUpdated.bind(this)); + this._resetView(); + } + _scrollUpdated() { + this.renderingQueue.renderHighestPriority(); + } + getThumbnail(index) { + return this._thumbnails[index]; + } + _getVisibleThumbs() { + return getVisibleElements({ + scrollEl: this.container, + views: this._thumbnails + }); + } + scrollThumbnailIntoView(pageNumber) { + if (!this.pdfDocument) { + return; + } + const thumbnailView = this._thumbnails[pageNumber - 1]; + if (!thumbnailView) { + console.error('scrollThumbnailIntoView: Invalid "pageNumber" parameter.'); + return; + } + if (pageNumber !== this._currentPageNumber) { + const prevThumbnailView = this._thumbnails[this._currentPageNumber - 1]; + prevThumbnailView.div.classList.remove(THUMBNAIL_SELECTED_CLASS); + thumbnailView.div.classList.add(THUMBNAIL_SELECTED_CLASS); + } + const { + first, + last, + views + } = this._getVisibleThumbs(); + if (views.length > 0) { + let shouldScroll = false; + if (pageNumber <= first.id || pageNumber >= last.id) { + shouldScroll = true; + } else { + for (const { + id, + percent + } of views) { + if (id !== pageNumber) { + continue; + } + shouldScroll = percent < 100; + break; + } + } + if (shouldScroll) { + scrollIntoView(thumbnailView.div, { + top: THUMBNAIL_SCROLL_MARGIN + }); + } + } + this._currentPageNumber = pageNumber; + } + get pagesRotation() { + return this._pagesRotation; + } + set pagesRotation(rotation) { + if (!isValidRotation(rotation)) { + throw new Error("Invalid thumbnails rotation angle."); + } + if (!this.pdfDocument) { + return; + } + if (this._pagesRotation === rotation) { + return; + } + this._pagesRotation = rotation; + const updateArgs = { + rotation + }; + for (const thumbnail of this._thumbnails) { + thumbnail.update(updateArgs); + } + } + cleanup() { + for (const thumbnail of this._thumbnails) { + if (thumbnail.renderingState !== RenderingStates.FINISHED) { + thumbnail.reset(); + } + } + TempImageFactory.destroyCanvas(); + } + _resetView() { + this._thumbnails = []; + this._currentPageNumber = 1; + this._pageLabels = null; + this._pagesRotation = 0; + this.container.textContent = ""; + } + setDocument(pdfDocument) { + if (this.pdfDocument) { + this._cancelRendering(); + this._resetView(); + } + this.pdfDocument = pdfDocument; + if (!pdfDocument) { + return; + } + const firstPagePromise = pdfDocument.getPage(1); + const optionalContentConfigPromise = pdfDocument.getOptionalContentConfig(); + firstPagePromise.then(firstPdfPage => { + const pagesCount = pdfDocument.numPages; + const viewport = firstPdfPage.getViewport({ + scale: 1 + }); + for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) { + const thumbnail = new PDFThumbnailView({ + container: this.container, + eventBus: this.eventBus, + id: pageNum, + defaultViewport: viewport.clone(), + optionalContentConfigPromise, + linkService: this.linkService, + renderingQueue: this.renderingQueue, + pageColors: this.pageColors + }); + this._thumbnails.push(thumbnail); + } + this._thumbnails[0]?.setPdfPage(firstPdfPage); + const thumbnailView = this._thumbnails[this._currentPageNumber - 1]; + thumbnailView.div.classList.add(THUMBNAIL_SELECTED_CLASS); + }).catch(reason => { + console.error("Unable to initialize thumbnail viewer", reason); + }); + } + _cancelRendering() { + for (const thumbnail of this._thumbnails) { + thumbnail.cancelRendering(); + } + } + setPageLabels(labels) { + if (!this.pdfDocument) { + return; + } + if (!labels) { + this._pageLabels = null; + } else if (!(Array.isArray(labels) && this.pdfDocument.numPages === labels.length)) { + this._pageLabels = null; + console.error("PDFThumbnailViewer_setPageLabels: Invalid page labels."); + } else { + this._pageLabels = labels; + } + for (let i = 0, ii = this._thumbnails.length; i < ii; i++) { + this._thumbnails[i].setPageLabel(this._pageLabels?.[i] ?? null); + } + } + async #ensurePdfPageLoaded(thumbView) { + if (thumbView.pdfPage) { + return thumbView.pdfPage; + } + try { + const pdfPage = await this.pdfDocument.getPage(thumbView.id); + if (!thumbView.pdfPage) { + thumbView.setPdfPage(pdfPage); + } + return pdfPage; + } catch (reason) { + console.error("Unable to get page for thumb view", reason); + return null; + } + } + #getScrollAhead(visible) { + if (visible.first?.id === 1) { + return true; + } else if (visible.last?.id === this._thumbnails.length) { + return false; + } + return this.scroll.down; + } + forceRendering() { + const visibleThumbs = this._getVisibleThumbs(); + const scrollAhead = this.#getScrollAhead(visibleThumbs); + const thumbView = this.renderingQueue.getHighestPriority(visibleThumbs, this._thumbnails, scrollAhead); + if (thumbView) { + this.#ensurePdfPageLoaded(thumbView).then(() => { + this.renderingQueue.renderView(thumbView); + }); + return true; + } + return false; + } +} + +;// CONCATENATED MODULE: ./node_modules/@fluent/bundle/esm/types.js +class FluentType { + constructor(value) { + this.value = value; + } + valueOf() { + return this.value; + } +} +class FluentNone extends FluentType { + constructor(value = "???") { + super(value); + } + toString(scope) { + return `{${this.value}}`; + } +} +class FluentNumber extends FluentType { + constructor(value, opts = {}) { + super(value); + this.opts = opts; + } + toString(scope) { + try { + const nf = scope.memoizeIntlObject(Intl.NumberFormat, this.opts); + return nf.format(this.value); + } catch (err) { + scope.reportError(err); + return this.value.toString(10); + } + } +} +class FluentDateTime extends FluentType { + constructor(value, opts = {}) { + super(value); + this.opts = opts; + } + toString(scope) { + try { + const dtf = scope.memoizeIntlObject(Intl.DateTimeFormat, this.opts); + return dtf.format(this.value); + } catch (err) { + scope.reportError(err); + return new Date(this.value).toISOString(); + } + } +} +;// CONCATENATED MODULE: ./node_modules/@fluent/bundle/esm/resolver.js + +const MAX_PLACEABLES = 100; +const FSI = "\u2068"; +const PDI = "\u2069"; +function match(scope, selector, key) { + if (key === selector) { + return true; + } + if (key instanceof FluentNumber && selector instanceof FluentNumber && key.value === selector.value) { + return true; + } + if (selector instanceof FluentNumber && typeof key === "string") { + let category = scope.memoizeIntlObject(Intl.PluralRules, selector.opts).select(selector.value); + if (key === category) { + return true; + } + } + return false; +} +function getDefault(scope, variants, star) { + if (variants[star]) { + return resolvePattern(scope, variants[star].value); + } + scope.reportError(new RangeError("No default")); + return new FluentNone(); +} +function getArguments(scope, args) { + const positional = []; + const named = Object.create(null); + for (const arg of args) { + if (arg.type === "narg") { + named[arg.name] = resolveExpression(scope, arg.value); + } else { + positional.push(resolveExpression(scope, arg)); + } + } + return { + positional, + named + }; +} +function resolveExpression(scope, expr) { + switch (expr.type) { + case "str": + return expr.value; + case "num": + return new FluentNumber(expr.value, { + minimumFractionDigits: expr.precision + }); + case "var": + return resolveVariableReference(scope, expr); + case "mesg": + return resolveMessageReference(scope, expr); + case "term": + return resolveTermReference(scope, expr); + case "func": + return resolveFunctionReference(scope, expr); + case "select": + return resolveSelectExpression(scope, expr); + default: + return new FluentNone(); + } +} +function resolveVariableReference(scope, { + name +}) { + let arg; + if (scope.params) { + if (Object.prototype.hasOwnProperty.call(scope.params, name)) { + arg = scope.params[name]; + } else { + return new FluentNone(`$${name}`); + } + } else if (scope.args && Object.prototype.hasOwnProperty.call(scope.args, name)) { + arg = scope.args[name]; + } else { + scope.reportError(new ReferenceError(`Unknown variable: $${name}`)); + return new FluentNone(`$${name}`); + } + if (arg instanceof FluentType) { + return arg; + } + switch (typeof arg) { + case "string": + return arg; + case "number": + return new FluentNumber(arg); + case "object": + if (arg instanceof Date) { + return new FluentDateTime(arg.getTime()); + } + default: + scope.reportError(new TypeError(`Variable type not supported: $${name}, ${typeof arg}`)); + return new FluentNone(`$${name}`); + } +} +function resolveMessageReference(scope, { + name, + attr +}) { + const message = scope.bundle._messages.get(name); + if (!message) { + scope.reportError(new ReferenceError(`Unknown message: ${name}`)); + return new FluentNone(name); + } + if (attr) { + const attribute = message.attributes[attr]; + if (attribute) { + return resolvePattern(scope, attribute); + } + scope.reportError(new ReferenceError(`Unknown attribute: ${attr}`)); + return new FluentNone(`${name}.${attr}`); + } + if (message.value) { + return resolvePattern(scope, message.value); + } + scope.reportError(new ReferenceError(`No value: ${name}`)); + return new FluentNone(name); +} +function resolveTermReference(scope, { + name, + attr, + args +}) { + const id = `-${name}`; + const term = scope.bundle._terms.get(id); + if (!term) { + scope.reportError(new ReferenceError(`Unknown term: ${id}`)); + return new FluentNone(id); + } + if (attr) { + const attribute = term.attributes[attr]; + if (attribute) { + scope.params = getArguments(scope, args).named; + const resolved = resolvePattern(scope, attribute); + scope.params = null; + return resolved; + } + scope.reportError(new ReferenceError(`Unknown attribute: ${attr}`)); + return new FluentNone(`${id}.${attr}`); + } + scope.params = getArguments(scope, args).named; + const resolved = resolvePattern(scope, term.value); + scope.params = null; + return resolved; +} +function resolveFunctionReference(scope, { + name, + args +}) { + let func = scope.bundle._functions[name]; + if (!func) { + scope.reportError(new ReferenceError(`Unknown function: ${name}()`)); + return new FluentNone(`${name}()`); + } + if (typeof func !== "function") { + scope.reportError(new TypeError(`Function ${name}() is not callable`)); + return new FluentNone(`${name}()`); + } + try { + let resolved = getArguments(scope, args); + return func(resolved.positional, resolved.named); + } catch (err) { + scope.reportError(err); + return new FluentNone(`${name}()`); + } +} +function resolveSelectExpression(scope, { + selector, + variants, + star +}) { + let sel = resolveExpression(scope, selector); + if (sel instanceof FluentNone) { + return getDefault(scope, variants, star); + } + for (const variant of variants) { + const key = resolveExpression(scope, variant.key); + if (match(scope, sel, key)) { + return resolvePattern(scope, variant.value); + } + } + return getDefault(scope, variants, star); +} +function resolveComplexPattern(scope, ptn) { + if (scope.dirty.has(ptn)) { + scope.reportError(new RangeError("Cyclic reference")); + return new FluentNone(); + } + scope.dirty.add(ptn); + const result = []; + const useIsolating = scope.bundle._useIsolating && ptn.length > 1; + for (const elem of ptn) { + if (typeof elem === "string") { + result.push(scope.bundle._transform(elem)); + continue; + } + scope.placeables++; + if (scope.placeables > MAX_PLACEABLES) { + scope.dirty.delete(ptn); + throw new RangeError(`Too many placeables expanded: ${scope.placeables}, ` + `max allowed is ${MAX_PLACEABLES}`); + } + if (useIsolating) { + result.push(FSI); + } + result.push(resolveExpression(scope, elem).toString(scope)); + if (useIsolating) { + result.push(PDI); + } + } + scope.dirty.delete(ptn); + return result.join(""); +} +function resolvePattern(scope, value) { + if (typeof value === "string") { + return scope.bundle._transform(value); + } + return resolveComplexPattern(scope, value); +} +;// CONCATENATED MODULE: ./node_modules/@fluent/bundle/esm/scope.js +class Scope { + constructor(bundle, errors, args) { + this.dirty = new WeakSet(); + this.params = null; + this.placeables = 0; + this.bundle = bundle; + this.errors = errors; + this.args = args; + } + reportError(error) { + if (!this.errors || !(error instanceof Error)) { + throw error; + } + this.errors.push(error); + } + memoizeIntlObject(ctor, opts) { + let cache = this.bundle._intls.get(ctor); + if (!cache) { + cache = {}; + this.bundle._intls.set(ctor, cache); + } + let id = JSON.stringify(opts); + if (!cache[id]) { + cache[id] = new ctor(this.bundle.locales, opts); + } + return cache[id]; + } +} +;// CONCATENATED MODULE: ./node_modules/@fluent/bundle/esm/builtins.js + +function values(opts, allowed) { + const unwrapped = Object.create(null); + for (const [name, opt] of Object.entries(opts)) { + if (allowed.includes(name)) { + unwrapped[name] = opt.valueOf(); + } + } + return unwrapped; +} +const NUMBER_ALLOWED = ["unitDisplay", "currencyDisplay", "useGrouping", "minimumIntegerDigits", "minimumFractionDigits", "maximumFractionDigits", "minimumSignificantDigits", "maximumSignificantDigits"]; +function NUMBER(args, opts) { + let arg = args[0]; + if (arg instanceof FluentNone) { + return new FluentNone(`NUMBER(${arg.valueOf()})`); + } + if (arg instanceof FluentNumber) { + return new FluentNumber(arg.valueOf(), { + ...arg.opts, + ...values(opts, NUMBER_ALLOWED) + }); + } + if (arg instanceof FluentDateTime) { + return new FluentNumber(arg.valueOf(), { + ...values(opts, NUMBER_ALLOWED) + }); + } + throw new TypeError("Invalid argument to NUMBER"); +} +const DATETIME_ALLOWED = ["dateStyle", "timeStyle", "fractionalSecondDigits", "dayPeriod", "hour12", "weekday", "era", "year", "month", "day", "hour", "minute", "second", "timeZoneName"]; +function DATETIME(args, opts) { + let arg = args[0]; + if (arg instanceof FluentNone) { + return new FluentNone(`DATETIME(${arg.valueOf()})`); + } + if (arg instanceof FluentDateTime) { + return new FluentDateTime(arg.valueOf(), { + ...arg.opts, + ...values(opts, DATETIME_ALLOWED) + }); + } + if (arg instanceof FluentNumber) { + return new FluentDateTime(arg.valueOf(), { + ...values(opts, DATETIME_ALLOWED) + }); + } + throw new TypeError("Invalid argument to DATETIME"); +} +;// CONCATENATED MODULE: ./node_modules/@fluent/bundle/esm/memoizer.js +const cache = new Map(); +function getMemoizerForLocale(locales) { + const stringLocale = Array.isArray(locales) ? locales.join(" ") : locales; + let memoizer = cache.get(stringLocale); + if (memoizer === undefined) { + memoizer = new Map(); + cache.set(stringLocale, memoizer); + } + return memoizer; +} +;// CONCATENATED MODULE: ./node_modules/@fluent/bundle/esm/bundle.js + + + + + +class FluentBundle { + constructor(locales, { + functions, + useIsolating = true, + transform = v => v + } = {}) { + this._terms = new Map(); + this._messages = new Map(); + this.locales = Array.isArray(locales) ? locales : [locales]; + this._functions = { + NUMBER: NUMBER, + DATETIME: DATETIME, + ...functions + }; + this._useIsolating = useIsolating; + this._transform = transform; + this._intls = getMemoizerForLocale(locales); + } + hasMessage(id) { + return this._messages.has(id); + } + getMessage(id) { + return this._messages.get(id); + } + addResource(res, { + allowOverrides = false + } = {}) { + const errors = []; + for (let i = 0; i < res.body.length; i++) { + let entry = res.body[i]; + if (entry.id.startsWith("-")) { + if (allowOverrides === false && this._terms.has(entry.id)) { + errors.push(new Error(`Attempt to override an existing term: "${entry.id}"`)); + continue; + } + this._terms.set(entry.id, entry); + } else { + if (allowOverrides === false && this._messages.has(entry.id)) { + errors.push(new Error(`Attempt to override an existing message: "${entry.id}"`)); + continue; + } + this._messages.set(entry.id, entry); + } + } + return errors; + } + formatPattern(pattern, args = null, errors = null) { + if (typeof pattern === "string") { + return this._transform(pattern); + } + let scope = new Scope(this, errors, args); + try { + let value = resolveComplexPattern(scope, pattern); + return value.toString(scope); + } catch (err) { + if (scope.errors && err instanceof Error) { + scope.errors.push(err); + return new FluentNone().toString(scope); + } + throw err; + } + } +} +;// CONCATENATED MODULE: ./node_modules/@fluent/bundle/esm/resource.js +const RE_MESSAGE_START = /^(-?[a-zA-Z][\w-]*) *= */gm; +const RE_ATTRIBUTE_START = /\.([a-zA-Z][\w-]*) *= */y; +const RE_VARIANT_START = /\*?\[/y; +const RE_NUMBER_LITERAL = /(-?[0-9]+(?:\.([0-9]+))?)/y; +const RE_IDENTIFIER = /([a-zA-Z][\w-]*)/y; +const RE_REFERENCE = /([$-])?([a-zA-Z][\w-]*)(?:\.([a-zA-Z][\w-]*))?/y; +const RE_FUNCTION_NAME = /^[A-Z][A-Z0-9_-]*$/; +const RE_TEXT_RUN = /([^{}\n\r]+)/y; +const RE_STRING_RUN = /([^\\"\n\r]*)/y; +const RE_STRING_ESCAPE = /\\([\\"])/y; +const RE_UNICODE_ESCAPE = /\\u([a-fA-F0-9]{4})|\\U([a-fA-F0-9]{6})/y; +const RE_LEADING_NEWLINES = /^\n+/; +const RE_TRAILING_SPACES = / +$/; +const RE_BLANK_LINES = / *\r?\n/g; +const RE_INDENT = /( *)$/; +const TOKEN_BRACE_OPEN = /{\s*/y; +const TOKEN_BRACE_CLOSE = /\s*}/y; +const TOKEN_BRACKET_OPEN = /\[\s*/y; +const TOKEN_BRACKET_CLOSE = /\s*] */y; +const TOKEN_PAREN_OPEN = /\s*\(\s*/y; +const TOKEN_ARROW = /\s*->\s*/y; +const TOKEN_COLON = /\s*:\s*/y; +const TOKEN_COMMA = /\s*,?\s*/y; +const TOKEN_BLANK = /\s+/y; +class FluentResource { + constructor(source) { + this.body = []; + RE_MESSAGE_START.lastIndex = 0; + let cursor = 0; + while (true) { + let next = RE_MESSAGE_START.exec(source); + if (next === null) { + break; + } + cursor = RE_MESSAGE_START.lastIndex; + try { + this.body.push(parseMessage(next[1])); + } catch (err) { + if (err instanceof SyntaxError) { + continue; + } + throw err; + } + } + function test(re) { + re.lastIndex = cursor; + return re.test(source); + } + function consumeChar(char, errorClass) { + if (source[cursor] === char) { + cursor++; + return true; + } + if (errorClass) { + throw new errorClass(`Expected ${char}`); + } + return false; + } + function consumeToken(re, errorClass) { + if (test(re)) { + cursor = re.lastIndex; + return true; + } + if (errorClass) { + throw new errorClass(`Expected ${re.toString()}`); + } + return false; + } + function match(re) { + re.lastIndex = cursor; + let result = re.exec(source); + if (result === null) { + throw new SyntaxError(`Expected ${re.toString()}`); + } + cursor = re.lastIndex; + return result; + } + function match1(re) { + return match(re)[1]; + } + function parseMessage(id) { + let value = parsePattern(); + let attributes = parseAttributes(); + if (value === null && Object.keys(attributes).length === 0) { + throw new SyntaxError("Expected message value or attributes"); + } + return { + id, + value, + attributes + }; + } + function parseAttributes() { + let attrs = Object.create(null); + while (test(RE_ATTRIBUTE_START)) { + let name = match1(RE_ATTRIBUTE_START); + let value = parsePattern(); + if (value === null) { + throw new SyntaxError("Expected attribute value"); + } + attrs[name] = value; + } + return attrs; + } + function parsePattern() { + let first; + if (test(RE_TEXT_RUN)) { + first = match1(RE_TEXT_RUN); + } + if (source[cursor] === "{" || source[cursor] === "}") { + return parsePatternElements(first ? [first] : [], Infinity); + } + let indent = parseIndent(); + if (indent) { + if (first) { + return parsePatternElements([first, indent], indent.length); + } + indent.value = trim(indent.value, RE_LEADING_NEWLINES); + return parsePatternElements([indent], indent.length); + } + if (first) { + return trim(first, RE_TRAILING_SPACES); + } + return null; + } + function parsePatternElements(elements = [], commonIndent) { + while (true) { + if (test(RE_TEXT_RUN)) { + elements.push(match1(RE_TEXT_RUN)); + continue; + } + if (source[cursor] === "{") { + elements.push(parsePlaceable()); + continue; + } + if (source[cursor] === "}") { + throw new SyntaxError("Unbalanced closing brace"); + } + let indent = parseIndent(); + if (indent) { + elements.push(indent); + commonIndent = Math.min(commonIndent, indent.length); + continue; + } + break; + } + let lastIndex = elements.length - 1; + let lastElement = elements[lastIndex]; + if (typeof lastElement === "string") { + elements[lastIndex] = trim(lastElement, RE_TRAILING_SPACES); + } + let baked = []; + for (let element of elements) { + if (element instanceof Indent) { + element = element.value.slice(0, element.value.length - commonIndent); + } + if (element) { + baked.push(element); + } + } + return baked; + } + function parsePlaceable() { + consumeToken(TOKEN_BRACE_OPEN, SyntaxError); + let selector = parseInlineExpression(); + if (consumeToken(TOKEN_BRACE_CLOSE)) { + return selector; + } + if (consumeToken(TOKEN_ARROW)) { + let variants = parseVariants(); + consumeToken(TOKEN_BRACE_CLOSE, SyntaxError); + return { + type: "select", + selector, + ...variants + }; + } + throw new SyntaxError("Unclosed placeable"); + } + function parseInlineExpression() { + if (source[cursor] === "{") { + return parsePlaceable(); + } + if (test(RE_REFERENCE)) { + let [, sigil, name, attr = null] = match(RE_REFERENCE); + if (sigil === "$") { + return { + type: "var", + name + }; + } + if (consumeToken(TOKEN_PAREN_OPEN)) { + let args = parseArguments(); + if (sigil === "-") { + return { + type: "term", + name, + attr, + args + }; + } + if (RE_FUNCTION_NAME.test(name)) { + return { + type: "func", + name, + args + }; + } + throw new SyntaxError("Function names must be all upper-case"); + } + if (sigil === "-") { + return { + type: "term", + name, + attr, + args: [] + }; + } + return { + type: "mesg", + name, + attr + }; + } + return parseLiteral(); + } + function parseArguments() { + let args = []; + while (true) { + switch (source[cursor]) { + case ")": + cursor++; + return args; + case undefined: + throw new SyntaxError("Unclosed argument list"); + } + args.push(parseArgument()); + consumeToken(TOKEN_COMMA); + } + } + function parseArgument() { + let expr = parseInlineExpression(); + if (expr.type !== "mesg") { + return expr; + } + if (consumeToken(TOKEN_COLON)) { + return { + type: "narg", + name: expr.name, + value: parseLiteral() + }; + } + return expr; + } + function parseVariants() { + let variants = []; + let count = 0; + let star; + while (test(RE_VARIANT_START)) { + if (consumeChar("*")) { + star = count; + } + let key = parseVariantKey(); + let value = parsePattern(); + if (value === null) { + throw new SyntaxError("Expected variant value"); + } + variants[count++] = { + key, + value + }; + } + if (count === 0) { + return null; + } + if (star === undefined) { + throw new SyntaxError("Expected default variant"); + } + return { + variants, + star + }; + } + function parseVariantKey() { + consumeToken(TOKEN_BRACKET_OPEN, SyntaxError); + let key; + if (test(RE_NUMBER_LITERAL)) { + key = parseNumberLiteral(); + } else { + key = { + type: "str", + value: match1(RE_IDENTIFIER) + }; + } + consumeToken(TOKEN_BRACKET_CLOSE, SyntaxError); + return key; + } + function parseLiteral() { + if (test(RE_NUMBER_LITERAL)) { + return parseNumberLiteral(); + } + if (source[cursor] === '"') { + return parseStringLiteral(); + } + throw new SyntaxError("Invalid expression"); + } + function parseNumberLiteral() { + let [, value, fraction = ""] = match(RE_NUMBER_LITERAL); + let precision = fraction.length; + return { + type: "num", + value: parseFloat(value), + precision + }; + } + function parseStringLiteral() { + consumeChar('"', SyntaxError); + let value = ""; + while (true) { + value += match1(RE_STRING_RUN); + if (source[cursor] === "\\") { + value += parseEscapeSequence(); + continue; + } + if (consumeChar('"')) { + return { + type: "str", + value + }; + } + throw new SyntaxError("Unclosed string literal"); + } + } + function parseEscapeSequence() { + if (test(RE_STRING_ESCAPE)) { + return match1(RE_STRING_ESCAPE); + } + if (test(RE_UNICODE_ESCAPE)) { + let [, codepoint4, codepoint6] = match(RE_UNICODE_ESCAPE); + let codepoint = parseInt(codepoint4 || codepoint6, 16); + return codepoint <= 0xd7ff || 0xe000 <= codepoint ? String.fromCodePoint(codepoint) : "�"; + } + throw new SyntaxError("Unknown escape sequence"); + } + function parseIndent() { + let start = cursor; + consumeToken(TOKEN_BLANK); + switch (source[cursor]) { + case ".": + case "[": + case "*": + case "}": + case undefined: + return false; + case "{": + return makeIndent(source.slice(start, cursor)); + } + if (source[cursor - 1] === " ") { + return makeIndent(source.slice(start, cursor)); + } + return false; + } + function trim(text, re) { + return text.replace(re, ""); + } + function makeIndent(blank) { + let value = blank.replace(RE_BLANK_LINES, "\n"); + let length = RE_INDENT.exec(blank)[1].length; + return new Indent(value, length); + } + } +} +class Indent { + constructor(value, length) { + this.value = value; + this.length = length; + } +} +;// CONCATENATED MODULE: ./node_modules/@fluent/bundle/esm/index.js + + + +;// CONCATENATED MODULE: ./node_modules/@fluent/dom/esm/overlay.js +const reOverlay = /<|&#?\w+;/; +const TEXT_LEVEL_ELEMENTS = { + "http://www.w3.org/1999/xhtml": ["em", "strong", "small", "s", "cite", "q", "dfn", "abbr", "data", "time", "code", "var", "samp", "kbd", "sub", "sup", "i", "b", "u", "mark", "bdi", "bdo", "span", "br", "wbr"] +}; +const LOCALIZABLE_ATTRIBUTES = { + "http://www.w3.org/1999/xhtml": { + global: ["title", "aria-label", "aria-valuetext"], + a: ["download"], + area: ["download", "alt"], + input: ["alt", "placeholder"], + menuitem: ["label"], + menu: ["label"], + optgroup: ["label"], + option: ["label"], + track: ["label"], + img: ["alt"], + textarea: ["placeholder"], + th: ["abbr"] + }, + "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul": { + global: ["accesskey", "aria-label", "aria-valuetext", "label", "title", "tooltiptext"], + description: ["value"], + key: ["key", "keycode"], + label: ["value"], + textbox: ["placeholder", "value"] + } +}; +function translateElement(element, translation) { + const { + value + } = translation; + if (typeof value === "string") { + if (element.localName === "title" && element.namespaceURI === "http://www.w3.org/1999/xhtml") { + element.textContent = value; + } else if (!reOverlay.test(value)) { + element.textContent = value; + } else { + const templateElement = element.ownerDocument.createElementNS("http://www.w3.org/1999/xhtml", "template"); + templateElement.innerHTML = value; + overlayChildNodes(templateElement.content, element); + } + } + overlayAttributes(translation, element); +} +function overlayChildNodes(fromFragment, toElement) { + for (const childNode of fromFragment.childNodes) { + if (childNode.nodeType === childNode.TEXT_NODE) { + continue; + } + if (childNode.hasAttribute("data-l10n-name")) { + const sanitized = getNodeForNamedElement(toElement, childNode); + fromFragment.replaceChild(sanitized, childNode); + continue; + } + if (isElementAllowed(childNode)) { + const sanitized = createSanitizedElement(childNode); + fromFragment.replaceChild(sanitized, childNode); + continue; + } + console.warn(`An element of forbidden type "${childNode.localName}" was found in ` + "the translation. Only safe text-level elements and elements with " + "data-l10n-name are allowed."); + fromFragment.replaceChild(createTextNodeFromTextContent(childNode), childNode); + } + toElement.textContent = ""; + toElement.appendChild(fromFragment); +} +function hasAttribute(attributes, name) { + if (!attributes) { + return false; + } + for (let attr of attributes) { + if (attr.name === name) { + return true; + } + } + return false; +} +function overlayAttributes(fromElement, toElement) { + const explicitlyAllowed = toElement.hasAttribute("data-l10n-attrs") ? toElement.getAttribute("data-l10n-attrs").split(",").map(i => i.trim()) : null; + for (const attr of Array.from(toElement.attributes)) { + if (isAttrNameLocalizable(attr.name, toElement, explicitlyAllowed) && !hasAttribute(fromElement.attributes, attr.name)) { + toElement.removeAttribute(attr.name); + } + } + if (!fromElement.attributes) { + return; + } + for (const attr of Array.from(fromElement.attributes)) { + if (isAttrNameLocalizable(attr.name, toElement, explicitlyAllowed) && toElement.getAttribute(attr.name) !== attr.value) { + toElement.setAttribute(attr.name, attr.value); + } + } +} +function getNodeForNamedElement(sourceElement, translatedChild) { + const childName = translatedChild.getAttribute("data-l10n-name"); + const sourceChild = sourceElement.querySelector(`[data-l10n-name="${childName}"]`); + if (!sourceChild) { + console.warn(`An element named "${childName}" wasn't found in the source.`); + return createTextNodeFromTextContent(translatedChild); + } + if (sourceChild.localName !== translatedChild.localName) { + console.warn(`An element named "${childName}" was found in the translation ` + `but its type ${translatedChild.localName} didn't match the ` + `element found in the source (${sourceChild.localName}).`); + return createTextNodeFromTextContent(translatedChild); + } + sourceElement.removeChild(sourceChild); + const clone = sourceChild.cloneNode(false); + return shallowPopulateUsing(translatedChild, clone); +} +function createSanitizedElement(element) { + const clone = element.ownerDocument.createElement(element.localName); + return shallowPopulateUsing(element, clone); +} +function createTextNodeFromTextContent(element) { + return element.ownerDocument.createTextNode(element.textContent); +} +function isElementAllowed(element) { + const allowed = TEXT_LEVEL_ELEMENTS[element.namespaceURI]; + return allowed && allowed.includes(element.localName); +} +function isAttrNameLocalizable(name, element, explicitlyAllowed = null) { + if (explicitlyAllowed && explicitlyAllowed.includes(name)) { + return true; + } + const allowed = LOCALIZABLE_ATTRIBUTES[element.namespaceURI]; + if (!allowed) { + return false; + } + const attrName = name.toLowerCase(); + const elemName = element.localName; + if (allowed.global.includes(attrName)) { + return true; + } + if (!allowed[elemName]) { + return false; + } + if (allowed[elemName].includes(attrName)) { + return true; + } + if (element.namespaceURI === "http://www.w3.org/1999/xhtml" && elemName === "input" && attrName === "value") { + const type = element.type.toLowerCase(); + if (type === "submit" || type === "button" || type === "reset") { + return true; + } + } + return false; +} +function shallowPopulateUsing(fromElement, toElement) { + toElement.textContent = fromElement.textContent; + overlayAttributes(fromElement, toElement); + return toElement; +} +;// CONCATENATED MODULE: ./node_modules/cached-iterable/src/cached_iterable.mjs +class CachedIterable extends Array { + static from(iterable) { + if (iterable instanceof this) { + return iterable; + } + return new this(iterable); + } +} +;// CONCATENATED MODULE: ./node_modules/cached-iterable/src/cached_sync_iterable.mjs + +class CachedSyncIterable extends CachedIterable { + constructor(iterable) { + super(); + if (Symbol.iterator in Object(iterable)) { + this.iterator = iterable[Symbol.iterator](); + } else { + throw new TypeError("Argument must implement the iteration protocol."); + } + } + [Symbol.iterator]() { + const cached = this; + let cur = 0; + return { + next() { + if (cached.length <= cur) { + cached.push(cached.iterator.next()); + } + return cached[cur++]; + } + }; + } + touchNext(count = 1) { + let idx = 0; + while (idx++ < count) { + const last = this[this.length - 1]; + if (last && last.done) { + break; + } + this.push(this.iterator.next()); + } + return this[this.length - 1]; + } +} +;// CONCATENATED MODULE: ./node_modules/cached-iterable/src/cached_async_iterable.mjs + +class CachedAsyncIterable extends CachedIterable { + constructor(iterable) { + super(); + if (Symbol.asyncIterator in Object(iterable)) { + this.iterator = iterable[Symbol.asyncIterator](); + } else if (Symbol.iterator in Object(iterable)) { + this.iterator = iterable[Symbol.iterator](); + } else { + throw new TypeError("Argument must implement the iteration protocol."); + } + } + [Symbol.asyncIterator]() { + const cached = this; + let cur = 0; + return { + async next() { + if (cached.length <= cur) { + cached.push(cached.iterator.next()); + } + return cached[cur++]; + } + }; + } + async touchNext(count = 1) { + let idx = 0; + while (idx++ < count) { + const last = this[this.length - 1]; + if (last && (await last).done) { + break; + } + this.push(this.iterator.next()); + } + return this[this.length - 1]; + } +} +;// CONCATENATED MODULE: ./node_modules/cached-iterable/src/index.mjs + + +;// CONCATENATED MODULE: ./node_modules/@fluent/dom/esm/localization.js + +class Localization { + constructor(resourceIds = [], generateBundles) { + this.resourceIds = resourceIds; + this.generateBundles = generateBundles; + this.onChange(true); + } + addResourceIds(resourceIds, eager = false) { + this.resourceIds.push(...resourceIds); + this.onChange(eager); + return this.resourceIds.length; + } + removeResourceIds(resourceIds) { + this.resourceIds = this.resourceIds.filter(r => !resourceIds.includes(r)); + this.onChange(); + return this.resourceIds.length; + } + async formatWithFallback(keys, method) { + const translations = []; + let hasAtLeastOneBundle = false; + for await (const bundle of this.bundles) { + hasAtLeastOneBundle = true; + const missingIds = keysFromBundle(method, bundle, keys, translations); + if (missingIds.size === 0) { + break; + } + if (typeof console !== "undefined") { + const locale = bundle.locales[0]; + const ids = Array.from(missingIds).join(", "); + console.warn(`[fluent] Missing translations in ${locale}: ${ids}`); + } + } + if (!hasAtLeastOneBundle && typeof console !== "undefined") { + console.warn(`[fluent] Request for keys failed because no resource bundles got generated. + keys: ${JSON.stringify(keys)}. + resourceIds: ${JSON.stringify(this.resourceIds)}.`); + } + return translations; + } + formatMessages(keys) { + return this.formatWithFallback(keys, messageFromBundle); + } + formatValues(keys) { + return this.formatWithFallback(keys, valueFromBundle); + } + async formatValue(id, args) { + const [val] = await this.formatValues([{ + id, + args + }]); + return val; + } + handleEvent() { + this.onChange(); + } + onChange(eager = false) { + this.bundles = CachedAsyncIterable.from(this.generateBundles(this.resourceIds)); + if (eager) { + this.bundles.touchNext(2); + } + } +} +function valueFromBundle(bundle, errors, message, args) { + if (message.value) { + return bundle.formatPattern(message.value, args, errors); + } + return null; +} +function messageFromBundle(bundle, errors, message, args) { + const formatted = { + value: null, + attributes: null + }; + if (message.value) { + formatted.value = bundle.formatPattern(message.value, args, errors); + } + let attrNames = Object.keys(message.attributes); + if (attrNames.length > 0) { + formatted.attributes = new Array(attrNames.length); + for (let [i, name] of attrNames.entries()) { + let value = bundle.formatPattern(message.attributes[name], args, errors); + formatted.attributes[i] = { + name, + value + }; + } + } + return formatted; +} +function keysFromBundle(method, bundle, keys, translations) { + const messageErrors = []; + const missingIds = new Set(); + keys.forEach(({ + id, + args + }, i) => { + if (translations[i] !== undefined) { + return; + } + let message = bundle.getMessage(id); + if (message) { + messageErrors.length = 0; + translations[i] = method(bundle, messageErrors, message, args); + if (messageErrors.length > 0 && typeof console !== "undefined") { + const locale = bundle.locales[0]; + const errors = messageErrors.join(", "); + console.warn(`[fluent][resolver] errors in ${locale}/${id}: ${errors}.`); + } + } else { + missingIds.add(id); + } + }); + return missingIds; +} +;// CONCATENATED MODULE: ./node_modules/@fluent/dom/esm/dom_localization.js + + +const L10NID_ATTR_NAME = "data-l10n-id"; +const L10NARGS_ATTR_NAME = "data-l10n-args"; +const L10N_ELEMENT_QUERY = `[${L10NID_ATTR_NAME}]`; +class DOMLocalization extends Localization { + constructor(resourceIds, generateBundles) { + super(resourceIds, generateBundles); + this.roots = new Set(); + this.pendingrAF = null; + this.pendingElements = new Set(); + this.windowElement = null; + this.mutationObserver = null; + this.observerConfig = { + attributes: true, + characterData: false, + childList: true, + subtree: true, + attributeFilter: [L10NID_ATTR_NAME, L10NARGS_ATTR_NAME] + }; + } + onChange(eager = false) { + super.onChange(eager); + if (this.roots) { + this.translateRoots(); + } + } + setAttributes(element, id, args) { + element.setAttribute(L10NID_ATTR_NAME, id); + if (args) { + element.setAttribute(L10NARGS_ATTR_NAME, JSON.stringify(args)); + } else { + element.removeAttribute(L10NARGS_ATTR_NAME); + } + return element; + } + getAttributes(element) { + return { + id: element.getAttribute(L10NID_ATTR_NAME), + args: JSON.parse(element.getAttribute(L10NARGS_ATTR_NAME) || null) + }; + } + connectRoot(newRoot) { + for (const root of this.roots) { + if (root === newRoot || root.contains(newRoot) || newRoot.contains(root)) { + throw new Error("Cannot add a root that overlaps with existing root."); + } + } + if (this.windowElement) { + if (this.windowElement !== newRoot.ownerDocument.defaultView) { + throw new Error(`Cannot connect a root: + DOMLocalization already has a root from a different window.`); + } + } else { + this.windowElement = newRoot.ownerDocument.defaultView; + this.mutationObserver = new this.windowElement.MutationObserver(mutations => this.translateMutations(mutations)); + } + this.roots.add(newRoot); + this.mutationObserver.observe(newRoot, this.observerConfig); + } + disconnectRoot(root) { + this.roots.delete(root); + this.pauseObserving(); + if (this.roots.size === 0) { + this.mutationObserver = null; + this.windowElement = null; + this.pendingrAF = null; + this.pendingElements.clear(); + return true; + } + this.resumeObserving(); + return false; + } + translateRoots() { + const roots = Array.from(this.roots); + return Promise.all(roots.map(root => this.translateFragment(root))); + } + pauseObserving() { + if (!this.mutationObserver) { + return; + } + this.translateMutations(this.mutationObserver.takeRecords()); + this.mutationObserver.disconnect(); + } + resumeObserving() { + if (!this.mutationObserver) { + return; + } + for (const root of this.roots) { + this.mutationObserver.observe(root, this.observerConfig); + } + } + translateMutations(mutations) { + for (const mutation of mutations) { + switch (mutation.type) { + case "attributes": + if (mutation.target.hasAttribute("data-l10n-id")) { + this.pendingElements.add(mutation.target); + } + break; + case "childList": + for (const addedNode of mutation.addedNodes) { + if (addedNode.nodeType === addedNode.ELEMENT_NODE) { + if (addedNode.childElementCount) { + for (const element of this.getTranslatables(addedNode)) { + this.pendingElements.add(element); + } + } else if (addedNode.hasAttribute(L10NID_ATTR_NAME)) { + this.pendingElements.add(addedNode); + } + } + } + break; + } + } + if (this.pendingElements.size > 0) { + if (this.pendingrAF === null) { + this.pendingrAF = this.windowElement.requestAnimationFrame(() => { + this.translateElements(Array.from(this.pendingElements)); + this.pendingElements.clear(); + this.pendingrAF = null; + }); + } + } + } + translateFragment(frag) { + return this.translateElements(this.getTranslatables(frag)); + } + async translateElements(elements) { + if (!elements.length) { + return undefined; + } + const keys = elements.map(this.getKeysForElement); + const translations = await this.formatMessages(keys); + return this.applyTranslations(elements, translations); + } + applyTranslations(elements, translations) { + this.pauseObserving(); + for (let i = 0; i < elements.length; i++) { + if (translations[i] !== undefined) { + translateElement(elements[i], translations[i]); + } + } + this.resumeObserving(); + } + getTranslatables(element) { + const nodes = Array.from(element.querySelectorAll(L10N_ELEMENT_QUERY)); + if (typeof element.hasAttribute === "function" && element.hasAttribute(L10NID_ATTR_NAME)) { + nodes.push(element); + } + return nodes; + } + getKeysForElement(element) { + return { + id: element.getAttribute(L10NID_ATTR_NAME), + args: JSON.parse(element.getAttribute(L10NARGS_ATTR_NAME) || null) + }; + } +} +;// CONCATENATED MODULE: ./node_modules/@fluent/dom/esm/index.js + + +;// CONCATENATED MODULE: ./web/l10n.js +class L10n { + #dir; + #lang; + #l10n; + constructor({ + lang, + isRTL + }, l10n = null) { + this.#lang = L10n.#fixupLangCode(lang); + this.#l10n = l10n; + this.#dir = isRTL ?? L10n.#isRTL(this.#lang) ? "rtl" : "ltr"; + } + _setL10n(l10n) { + this.#l10n = l10n; + } + getLanguage() { + return this.#lang; + } + getDirection() { + return this.#dir; + } + async get(ids, args = null, fallback) { + if (Array.isArray(ids)) { + ids = ids.map(id => ({ + id + })); + const messages = await this.#l10n.formatMessages(ids); + return messages.map(message => message.value); + } + const messages = await this.#l10n.formatMessages([{ + id: ids, + args + }]); + return messages?.[0].value || fallback; + } + async translate(element) { + try { + this.#l10n.connectRoot(element); + await this.#l10n.translateRoots(); + } catch {} + } + pause() { + this.#l10n.pauseObserving(); + } + resume() { + this.#l10n.resumeObserving(); + } + static #fixupLangCode(langCode) { + const PARTIAL_LANG_CODES = { + en: "en-US", + es: "es-ES", + fy: "fy-NL", + ga: "ga-IE", + gu: "gu-IN", + hi: "hi-IN", + hy: "hy-AM", + nb: "nb-NO", + ne: "ne-NP", + nn: "nn-NO", + pa: "pa-IN", + pt: "pt-PT", + sv: "sv-SE", + zh: "zh-CN" + }; + return PARTIAL_LANG_CODES[langCode?.toLowerCase()] || langCode; + } + static #isRTL(lang) { + const shortCode = lang.split("-", 1)[0]; + return ["ar", "he", "fa", "ps", "ur"].includes(shortCode); + } +} + +;// CONCATENATED MODULE: ./web/l10n_utils.js + + + + +class ConstL10n extends L10n { + constructor(lang) { + super({ + lang + }); + this._setL10n(new DOMLocalization([], ConstL10n.#generateBundles.bind(ConstL10n, lang))); + } + static async *#generateBundles(lang) { + let text; + text = 'pdfjs-previous-button =\n .title = Previous Page\npdfjs-previous-button-label = Previous\npdfjs-next-button =\n .title = Next Page\npdfjs-next-button-label = Next\npdfjs-page-input =\n .title = Page\npdfjs-of-pages = of { $pagesCount }\npdfjs-page-of-pages = ({ $pageNumber } of { $pagesCount })\npdfjs-zoom-out-button =\n .title = Zoom Out\npdfjs-zoom-out-button-label = Zoom Out\npdfjs-zoom-in-button =\n .title = Zoom In\npdfjs-zoom-in-button-label = Zoom In\npdfjs-zoom-select =\n .title = Zoom\npdfjs-presentation-mode-button =\n .title = Switch to Presentation Mode\npdfjs-presentation-mode-button-label = Presentation Mode\npdfjs-open-file-button =\n .title = Open File\npdfjs-open-file-button-label = Open\npdfjs-print-button =\n .title = Print\npdfjs-print-button-label = Print\npdfjs-save-button =\n .title = Save\npdfjs-save-button-label = Save\npdfjs-download-button =\n .title = Download\npdfjs-download-button-label = Download\npdfjs-bookmark-button =\n .title = Current Page (View URL from Current Page)\npdfjs-bookmark-button-label = Current Page\npdfjs-open-in-app-button =\n .title = Open in app\npdfjs-open-in-app-button-label = Open in app\npdfjs-tools-button =\n .title = Tools\npdfjs-tools-button-label = Tools\npdfjs-first-page-button =\n .title = Go to First Page\npdfjs-first-page-button-label = Go to First Page\npdfjs-last-page-button =\n .title = Go to Last Page\npdfjs-last-page-button-label = Go to Last Page\npdfjs-page-rotate-cw-button =\n .title = Rotate Clockwise\npdfjs-page-rotate-cw-button-label = Rotate Clockwise\npdfjs-page-rotate-ccw-button =\n .title = Rotate Counterclockwise\npdfjs-page-rotate-ccw-button-label = Rotate Counterclockwise\npdfjs-cursor-text-select-tool-button =\n .title = Enable Text Selection Tool\npdfjs-cursor-text-select-tool-button-label = Text Selection Tool\npdfjs-cursor-hand-tool-button =\n .title = Enable Hand Tool\npdfjs-cursor-hand-tool-button-label = Hand Tool\npdfjs-scroll-page-button =\n .title = Use Page Scrolling\npdfjs-scroll-page-button-label = Page Scrolling\npdfjs-scroll-vertical-button =\n .title = Use Vertical Scrolling\npdfjs-scroll-vertical-button-label = Vertical Scrolling\npdfjs-scroll-horizontal-button =\n .title = Use Horizontal Scrolling\npdfjs-scroll-horizontal-button-label = Horizontal Scrolling\npdfjs-scroll-wrapped-button =\n .title = Use Wrapped Scrolling\npdfjs-scroll-wrapped-button-label = Wrapped Scrolling\npdfjs-spread-none-button =\n .title = Do not join page spreads\npdfjs-spread-none-button-label = No Spreads\npdfjs-spread-odd-button =\n .title = Join page spreads starting with odd-numbered pages\npdfjs-spread-odd-button-label = Odd Spreads\npdfjs-spread-even-button =\n .title = Join page spreads starting with even-numbered pages\npdfjs-spread-even-button-label = Even Spreads\npdfjs-document-properties-button =\n .title = Document Properties\u2026\npdfjs-document-properties-button-label = Document Properties\u2026\npdfjs-document-properties-file-name = File name:\npdfjs-document-properties-file-size = File size:\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = Title:\npdfjs-document-properties-author = Author:\npdfjs-document-properties-subject = Subject:\npdfjs-document-properties-keywords = Keywords:\npdfjs-document-properties-creation-date = Creation Date:\npdfjs-document-properties-modification-date = Modification Date:\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Creator:\npdfjs-document-properties-producer = PDF Producer:\npdfjs-document-properties-version = PDF Version:\npdfjs-document-properties-page-count = Page Count:\npdfjs-document-properties-page-size = Page Size:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = portrait\npdfjs-document-properties-page-size-orientation-landscape = landscape\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\npdfjs-document-properties-page-size-dimension-string = { $width } \xD7 { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } \xD7 { $height } { $unit } ({ $name }, { $orientation })\npdfjs-document-properties-linearized = Fast Web View:\npdfjs-document-properties-linearized-yes = Yes\npdfjs-document-properties-linearized-no = No\npdfjs-document-properties-close-button = Close\npdfjs-print-progress-message = Preparing document for printing\u2026\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Cancel\npdfjs-printing-not-supported = Warning: Printing is not fully supported by this browser.\npdfjs-printing-not-ready = Warning: The PDF is not fully loaded for printing.\npdfjs-toggle-sidebar-button =\n .title = Toggle Sidebar\npdfjs-toggle-sidebar-notification-button =\n .title = Toggle Sidebar (document contains outline/attachments/layers)\npdfjs-toggle-sidebar-button-label = Toggle Sidebar\npdfjs-document-outline-button =\n .title = Show Document Outline (double-click to expand/collapse all items)\npdfjs-document-outline-button-label = Document Outline\npdfjs-attachments-button =\n .title = Show Attachments\npdfjs-attachments-button-label = Attachments\npdfjs-layers-button =\n .title = Show Layers (double-click to reset all layers to the default state)\npdfjs-layers-button-label = Layers\npdfjs-thumbs-button =\n .title = Show Thumbnails\npdfjs-thumbs-button-label = Thumbnails\npdfjs-current-outline-item-button =\n .title = Find Current Outline Item\npdfjs-current-outline-item-button-label = Current Outline Item\npdfjs-findbar-button =\n .title = Find in Document\npdfjs-findbar-button-label = Find\npdfjs-additional-layers = Additional Layers\npdfjs-thumb-page-title =\n .title = Page { $page }\npdfjs-thumb-page-canvas =\n .aria-label = Thumbnail of Page { $page }\npdfjs-find-input =\n .title = Find\n .placeholder = Find in document\u2026\npdfjs-find-previous-button =\n .title = Find the previous occurrence of the phrase\npdfjs-find-previous-button-label = Previous\npdfjs-find-next-button =\n .title = Find the next occurrence of the phrase\npdfjs-find-next-button-label = Next\npdfjs-find-highlight-checkbox = Highlight All\npdfjs-find-match-case-checkbox-label = Match Case\npdfjs-find-match-diacritics-checkbox-label = Match Diacritics\npdfjs-find-entire-word-checkbox-label = Whole Words\npdfjs-find-reached-top = Reached top of document, continued from bottom\npdfjs-find-reached-bottom = Reached end of document, continued from top\npdfjs-find-match-count =\n { $total ->\n [one] { $current } of { $total } match\n *[other] { $current } of { $total } matches\n }\npdfjs-find-match-count-limit =\n { $limit ->\n [one] More than { $limit } match\n *[other] More than { $limit } matches\n }\npdfjs-find-not-found = Phrase not found\npdfjs-page-scale-width = Page Width\npdfjs-page-scale-fit = Page Fit\npdfjs-page-scale-auto = Automatic Zoom\npdfjs-page-scale-actual = Actual Size\npdfjs-page-scale-percent = { $scale }%\npdfjs-page-landmark =\n .aria-label = Page { $page }\npdfjs-loading-error = An error occurred while loading the PDF.\npdfjs-invalid-file-error = Invalid or corrupted PDF file.\npdfjs-missing-file-error = Missing PDF file.\npdfjs-unexpected-response-error = Unexpected server response.\npdfjs-rendering-error = An error occurred while rendering the page.\npdfjs-annotation-date-string = { $date }, { $time }\npdfjs-text-annotation-type =\n .alt = [{ $type } Annotation]\npdfjs-password-label = Enter the password to open this PDF file.\npdfjs-password-invalid = Invalid password. Please try again.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Cancel\npdfjs-web-fonts-disabled = Web fonts are disabled: unable to use embedded PDF fonts.\npdfjs-editor-free-text-button =\n .title = Text\npdfjs-editor-free-text-button-label = Text\npdfjs-editor-ink-button =\n .title = Draw\npdfjs-editor-ink-button-label = Draw\npdfjs-editor-stamp-button =\n .title = Add or edit images\npdfjs-editor-stamp-button-label = Add or edit images\npdfjs-editor-free-text-color-input = Color\npdfjs-editor-free-text-size-input = Size\npdfjs-editor-ink-color-input = Color\npdfjs-editor-ink-thickness-input = Thickness\npdfjs-editor-ink-opacity-input = Opacity\npdfjs-editor-stamp-add-image-button =\n .title = Add image\npdfjs-editor-stamp-add-image-button-label = Add image\npdfjs-free-text =\n .aria-label = Text Editor\npdfjs-free-text-default-content = Start typing\u2026\npdfjs-ink =\n .aria-label = Draw Editor\npdfjs-ink-canvas =\n .aria-label = User-created image\npdfjs-editor-alt-text-button-label = Alt text\npdfjs-editor-alt-text-edit-button-label = Edit alt text\npdfjs-editor-alt-text-dialog-label = Choose an option\npdfjs-editor-alt-text-dialog-description = Alt text (alternative text) helps when people can\u2019t see the image or when it doesn\u2019t load.\npdfjs-editor-alt-text-add-description-label = Add a description\npdfjs-editor-alt-text-add-description-description = Aim for 1-2 sentences that describe the subject, setting, or actions.\npdfjs-editor-alt-text-mark-decorative-label = Mark as decorative\npdfjs-editor-alt-text-mark-decorative-description = This is used for ornamental images, like borders or watermarks.\npdfjs-editor-alt-text-cancel-button = Cancel\npdfjs-editor-alt-text-save-button = Save\npdfjs-editor-alt-text-decorative-tooltip = Marked as decorative\npdfjs-editor-alt-text-textarea =\n .placeholder = For example, \u201CA young man sits down at a table to eat a meal\u201D\npdfjs-editor-resizer-label-top-left = Top left corner \u2014 resize\npdfjs-editor-resizer-label-top-middle = Top middle \u2014 resize\npdfjs-editor-resizer-label-top-right = Top right corner \u2014 resize\npdfjs-editor-resizer-label-middle-right = Middle right \u2014 resize\npdfjs-editor-resizer-label-bottom-right = Bottom right corner \u2014 resize\npdfjs-editor-resizer-label-bottom-middle = Bottom middle \u2014 resize\npdfjs-editor-resizer-label-bottom-left = Bottom left corner \u2014 resize\npdfjs-editor-resizer-label-middle-left = Middle left \u2014 resize'; + const resource = new FluentResource(text); + const bundle = new FluentBundle(lang); + const errors = bundle.addResource(resource); + if (errors.length) { + console.error("L10n errors", errors); + } + yield bundle; + } + static get instance() { + return shadow(this, "instance", new ConstL10n("en-US")); + } +} +const NullL10n = { + getLanguage() { + return ConstL10n.instance.getLanguage(); + }, + getDirection() { + return ConstL10n.instance.getDirection(); + }, + async get(ids, args = null, fallback) { + return ConstL10n.instance.get(ids, args, fallback); + }, + async translate(element) { + return ConstL10n.instance.translate(element); + }, + pause() { + return ConstL10n.instance.pause(); + }, + resume() { + return ConstL10n.instance.resume(); + } +}; + +;// CONCATENATED MODULE: ./web/annotation_editor_layer_builder.js + + +class AnnotationEditorLayerBuilder { + #annotationLayer = null; + #uiManager; + constructor(options) { + this.pageDiv = options.pageDiv; + this.pdfPage = options.pdfPage; + this.accessibilityManager = options.accessibilityManager; + this.l10n = options.l10n || NullL10n; + this.annotationEditorLayer = null; + this.div = null; + this._cancelled = false; + this.#uiManager = options.uiManager; + this.#annotationLayer = options.annotationLayer || null; + } + async render(viewport, intent = "display") { + if (intent !== "display") { + return; + } + if (this._cancelled) { + return; + } + const clonedViewport = viewport.clone({ + dontFlip: true + }); + if (this.div) { + this.annotationEditorLayer.update({ + viewport: clonedViewport + }); + this.show(); + return; + } + const div = this.div = document.createElement("div"); + div.className = "annotationEditorLayer"; + div.tabIndex = 0; + div.hidden = true; + div.dir = this.#uiManager.direction; + this.pageDiv.append(div); + this.annotationEditorLayer = new AnnotationEditorLayer({ + uiManager: this.#uiManager, + div, + accessibilityManager: this.accessibilityManager, + pageIndex: this.pdfPage.pageNumber - 1, + l10n: this.l10n, + viewport: clonedViewport, + annotationLayer: this.#annotationLayer + }); + const parameters = { + viewport: clonedViewport, + div, + annotations: null, + intent + }; + this.annotationEditorLayer.render(parameters); + this.show(); + } + cancel() { + this._cancelled = true; + if (!this.div) { + return; + } + this.pageDiv = null; + this.annotationEditorLayer.destroy(); + this.div.remove(); + } + hide() { + if (!this.div) { + return; + } + this.div.hidden = true; + } + show() { + if (!this.div || this.annotationEditorLayer.isEmpty) { + return; + } + this.div.hidden = false; + } +} + +;// CONCATENATED MODULE: ./web/annotation_layer_builder.js + + +class AnnotationLayerBuilder { + #onPresentationModeChanged = null; + constructor({ + pageDiv, + pdfPage, + linkService, + downloadManager, + annotationStorage = null, + imageResourcesPath = "", + renderForms = true, + enableScripting = false, + hasJSActionsPromise = null, + fieldObjectsPromise = null, + annotationCanvasMap = null, + accessibilityManager = null + }) { + this.pageDiv = pageDiv; + this.pdfPage = pdfPage; + this.linkService = linkService; + this.downloadManager = downloadManager; + this.imageResourcesPath = imageResourcesPath; + this.renderForms = renderForms; + this.annotationStorage = annotationStorage; + this.enableScripting = enableScripting; + this._hasJSActionsPromise = hasJSActionsPromise || Promise.resolve(false); + this._fieldObjectsPromise = fieldObjectsPromise || Promise.resolve(null); + this._annotationCanvasMap = annotationCanvasMap; + this._accessibilityManager = accessibilityManager; + this.annotationLayer = null; + this.div = null; + this._cancelled = false; + this._eventBus = linkService.eventBus; + } + async render(viewport, intent = "display") { + if (this.div) { + if (this._cancelled || !this.annotationLayer) { + return; + } + this.annotationLayer.update({ + viewport: viewport.clone({ + dontFlip: true + }) + }); + return; + } + const [annotations, hasJSActions, fieldObjects] = await Promise.all([this.pdfPage.getAnnotations({ + intent + }), this._hasJSActionsPromise, this._fieldObjectsPromise]); + if (this._cancelled) { + return; + } + const div = this.div = document.createElement("div"); + div.className = "annotationLayer"; + this.pageDiv.append(div); + if (annotations.length === 0) { + this.hide(); + return; + } + this.annotationLayer = new AnnotationLayer({ + div, + accessibilityManager: this._accessibilityManager, + annotationCanvasMap: this._annotationCanvasMap, + page: this.pdfPage, + viewport: viewport.clone({ + dontFlip: true + }) + }); + await this.annotationLayer.render({ + annotations, + imageResourcesPath: this.imageResourcesPath, + renderForms: this.renderForms, + linkService: this.linkService, + downloadManager: this.downloadManager, + annotationStorage: this.annotationStorage, + enableScripting: this.enableScripting, + hasJSActions, + fieldObjects + }); + if (this.linkService.isInPresentationMode) { + this.#updatePresentationModeState(PresentationModeState.FULLSCREEN); + } + if (!this.#onPresentationModeChanged) { + this.#onPresentationModeChanged = evt => { + this.#updatePresentationModeState(evt.state); + }; + this._eventBus?._on("presentationmodechanged", this.#onPresentationModeChanged); + } + } + cancel() { + this._cancelled = true; + if (this.#onPresentationModeChanged) { + this._eventBus?._off("presentationmodechanged", this.#onPresentationModeChanged); + this.#onPresentationModeChanged = null; + } + } + hide() { + if (!this.div) { + return; + } + this.div.hidden = true; + } + #updatePresentationModeState(state) { + if (!this.div) { + return; + } + let disableFormElements = false; + switch (state) { + case PresentationModeState.FULLSCREEN: + disableFormElements = true; + break; + case PresentationModeState.NORMAL: + break; + default: + return; + } + for (const section of this.div.childNodes) { + if (section.hasAttribute("data-internal-link")) { + continue; + } + section.inert = disableFormElements; + } + } +} + +;// CONCATENATED MODULE: ./web/struct_tree_layer_builder.js + +const PDF_ROLE_TO_HTML_ROLE = { + Document: null, + DocumentFragment: null, + Part: "group", + Sect: "group", + Div: "group", + Aside: "note", + NonStruct: "none", + P: null, + H: "heading", + Title: null, + FENote: "note", + Sub: "group", + Lbl: null, + Span: null, + Em: null, + Strong: null, + Link: "link", + Annot: "note", + Form: "form", + Ruby: null, + RB: null, + RT: null, + RP: null, + Warichu: null, + WT: null, + WP: null, + L: "list", + LI: "listitem", + LBody: null, + Table: "table", + TR: "row", + TH: "columnheader", + TD: "cell", + THead: "columnheader", + TBody: null, + TFoot: null, + Caption: null, + Figure: "figure", + Formula: null, + Artifact: null +}; +const HEADING_PATTERN = /^H(\d+)$/; +class StructTreeLayerBuilder { + #treeDom = undefined; + get renderingDone() { + return this.#treeDom !== undefined; + } + render(structTree) { + if (this.#treeDom !== undefined) { + return this.#treeDom; + } + const treeDom = this.#walk(structTree); + treeDom?.classList.add("structTree"); + return this.#treeDom = treeDom; + } + hide() { + if (this.#treeDom && !this.#treeDom.hidden) { + this.#treeDom.hidden = true; + } + } + show() { + if (this.#treeDom?.hidden) { + this.#treeDom.hidden = false; + } + } + #setAttributes(structElement, htmlElement) { + const { + alt, + id, + lang + } = structElement; + if (alt !== undefined) { + htmlElement.setAttribute("aria-label", removeNullCharacters(alt)); + } + if (id !== undefined) { + htmlElement.setAttribute("aria-owns", id); + } + if (lang !== undefined) { + htmlElement.setAttribute("lang", removeNullCharacters(lang, true)); + } + } + #walk(node) { + if (!node) { + return null; + } + const element = document.createElement("span"); + if ("role" in node) { + const { + role + } = node; + const match = role.match(HEADING_PATTERN); + if (match) { + element.setAttribute("role", "heading"); + element.setAttribute("aria-level", match[1]); + } else if (PDF_ROLE_TO_HTML_ROLE[role]) { + element.setAttribute("role", PDF_ROLE_TO_HTML_ROLE[role]); + } + } + this.#setAttributes(node, element); + if (node.children) { + if (node.children.length === 1 && "id" in node.children[0]) { + this.#setAttributes(node.children[0], element); + } else { + for (const kid of node.children) { + element.append(this.#walk(kid)); + } + } + } + return element; + } +} + +;// CONCATENATED MODULE: ./web/text_accessibility.js + +class TextAccessibilityManager { + #enabled = false; + #textChildren = null; + #textNodes = new Map(); + #waitingElements = new Map(); + setTextMapping(textDivs) { + this.#textChildren = textDivs; + } + static #compareElementPositions(e1, e2) { + const rect1 = e1.getBoundingClientRect(); + const rect2 = e2.getBoundingClientRect(); + if (rect1.width === 0 && rect1.height === 0) { + return +1; + } + if (rect2.width === 0 && rect2.height === 0) { + return -1; + } + const top1 = rect1.y; + const bot1 = rect1.y + rect1.height; + const mid1 = rect1.y + rect1.height / 2; + const top2 = rect2.y; + const bot2 = rect2.y + rect2.height; + const mid2 = rect2.y + rect2.height / 2; + if (mid1 <= top2 && mid2 >= bot1) { + return -1; + } + if (mid2 <= top1 && mid1 >= bot2) { + return +1; + } + const centerX1 = rect1.x + rect1.width / 2; + const centerX2 = rect2.x + rect2.width / 2; + return centerX1 - centerX2; + } + enable() { + if (this.#enabled) { + throw new Error("TextAccessibilityManager is already enabled."); + } + if (!this.#textChildren) { + throw new Error("Text divs and strings have not been set."); + } + this.#enabled = true; + this.#textChildren = this.#textChildren.slice(); + this.#textChildren.sort(TextAccessibilityManager.#compareElementPositions); + if (this.#textNodes.size > 0) { + const textChildren = this.#textChildren; + for (const [id, nodeIndex] of this.#textNodes) { + const element = document.getElementById(id); + if (!element) { + this.#textNodes.delete(id); + continue; + } + this.#addIdToAriaOwns(id, textChildren[nodeIndex]); + } + } + for (const [element, isRemovable] of this.#waitingElements) { + this.addPointerInTextLayer(element, isRemovable); + } + this.#waitingElements.clear(); + } + disable() { + if (!this.#enabled) { + return; + } + this.#waitingElements.clear(); + this.#textChildren = null; + this.#enabled = false; + } + removePointerInTextLayer(element) { + if (!this.#enabled) { + this.#waitingElements.delete(element); + return; + } + const children = this.#textChildren; + if (!children || children.length === 0) { + return; + } + const { + id + } = element; + const nodeIndex = this.#textNodes.get(id); + if (nodeIndex === undefined) { + return; + } + const node = children[nodeIndex]; + this.#textNodes.delete(id); + let owns = node.getAttribute("aria-owns"); + if (owns?.includes(id)) { + owns = owns.split(" ").filter(x => x !== id).join(" "); + if (owns) { + node.setAttribute("aria-owns", owns); + } else { + node.removeAttribute("aria-owns"); + node.setAttribute("role", "presentation"); + } + } + } + #addIdToAriaOwns(id, node) { + const owns = node.getAttribute("aria-owns"); + if (!owns?.includes(id)) { + node.setAttribute("aria-owns", owns ? `${owns} ${id}` : id); + } + node.removeAttribute("role"); + } + addPointerInTextLayer(element, isRemovable) { + const { + id + } = element; + if (!id) { + return null; + } + if (!this.#enabled) { + this.#waitingElements.set(element, isRemovable); + return null; + } + if (isRemovable) { + this.removePointerInTextLayer(element); + } + const children = this.#textChildren; + if (!children || children.length === 0) { + return null; + } + const index = binarySearchFirstItem(children, node => TextAccessibilityManager.#compareElementPositions(element, node) < 0); + const nodeIndex = Math.max(0, index - 1); + const child = children[nodeIndex]; + this.#addIdToAriaOwns(id, child); + this.#textNodes.set(id, nodeIndex); + const parent = child.parentNode; + return parent?.classList.contains("markedContent") ? parent.id : null; + } + moveElementInDOM(container, element, contentElement, isRemovable) { + const id = this.addPointerInTextLayer(contentElement, isRemovable); + if (!container.hasChildNodes()) { + container.append(element); + return id; + } + const children = Array.from(container.childNodes).filter(node => node !== element); + if (children.length === 0) { + return id; + } + const elementToCompare = contentElement || element; + const index = binarySearchFirstItem(children, node => TextAccessibilityManager.#compareElementPositions(elementToCompare, node) < 0); + if (index === 0) { + children[0].before(element); + } else { + children[index - 1].after(element); + } + return id; + } +} + +;// CONCATENATED MODULE: ./web/text_highlighter.js +class TextHighlighter { + constructor({ + findController, + eventBus, + pageIndex + }) { + this.findController = findController; + this.matches = []; + this.eventBus = eventBus; + this.pageIdx = pageIndex; + this._onUpdateTextLayerMatches = null; + this.textDivs = null; + this.textContentItemsStr = null; + this.enabled = false; + } + setTextMapping(divs, texts) { + this.textDivs = divs; + this.textContentItemsStr = texts; + } + enable() { + if (!this.textDivs || !this.textContentItemsStr) { + throw new Error("Text divs and strings have not been set."); + } + if (this.enabled) { + throw new Error("TextHighlighter is already enabled."); + } + this.enabled = true; + if (!this._onUpdateTextLayerMatches) { + this._onUpdateTextLayerMatches = evt => { + if (evt.pageIndex === this.pageIdx || evt.pageIndex === -1) { + this._updateMatches(); + } + }; + this.eventBus._on("updatetextlayermatches", this._onUpdateTextLayerMatches); + } + this._updateMatches(); + } + disable() { + if (!this.enabled) { + return; + } + this.enabled = false; + if (this._onUpdateTextLayerMatches) { + this.eventBus._off("updatetextlayermatches", this._onUpdateTextLayerMatches); + this._onUpdateTextLayerMatches = null; + } + this._updateMatches(true); + } + _convertMatches(matches, matchesLength) { + if (!matches) { + return []; + } + const { + textContentItemsStr + } = this; + let i = 0, + iIndex = 0; + const end = textContentItemsStr.length - 1; + const result = []; + for (let m = 0, mm = matches.length; m < mm; m++) { + let matchIdx = matches[m]; + while (i !== end && matchIdx >= iIndex + textContentItemsStr[i].length) { + iIndex += textContentItemsStr[i].length; + i++; + } + if (i === textContentItemsStr.length) { + console.error("Could not find a matching mapping"); + } + const match = { + begin: { + divIdx: i, + offset: matchIdx - iIndex + } + }; + matchIdx += matchesLength[m]; + while (i !== end && matchIdx > iIndex + textContentItemsStr[i].length) { + iIndex += textContentItemsStr[i].length; + i++; + } + match.end = { + divIdx: i, + offset: matchIdx - iIndex + }; + result.push(match); + } + return result; + } + _renderMatches(matches) { + if (matches.length === 0) { + return; + } + const { + findController, + pageIdx + } = this; + const { + textContentItemsStr, + textDivs + } = this; + const isSelectedPage = pageIdx === findController.selected.pageIdx; + const selectedMatchIdx = findController.selected.matchIdx; + const highlightAll = findController.state.highlightAll; + let prevEnd = null; + const infinity = { + divIdx: -1, + offset: undefined + }; + function beginText(begin, className) { + const divIdx = begin.divIdx; + textDivs[divIdx].textContent = ""; + return appendTextToDiv(divIdx, 0, begin.offset, className); + } + function appendTextToDiv(divIdx, fromOffset, toOffset, className) { + let div = textDivs[divIdx]; + if (div.nodeType === Node.TEXT_NODE) { + const span = document.createElement("span"); + div.before(span); + span.append(div); + textDivs[divIdx] = span; + div = span; + } + const content = textContentItemsStr[divIdx].substring(fromOffset, toOffset); + const node = document.createTextNode(content); + if (className) { + const span = document.createElement("span"); + span.className = `${className} appended`; + span.append(node); + div.append(span); + return className.includes("selected") ? span.offsetLeft : 0; + } + div.append(node); + return 0; + } + let i0 = selectedMatchIdx, + i1 = i0 + 1; + if (highlightAll) { + i0 = 0; + i1 = matches.length; + } else if (!isSelectedPage) { + return; + } + let lastDivIdx = -1; + let lastOffset = -1; + for (let i = i0; i < i1; i++) { + const match = matches[i]; + const begin = match.begin; + if (begin.divIdx === lastDivIdx && begin.offset === lastOffset) { + continue; + } + lastDivIdx = begin.divIdx; + lastOffset = begin.offset; + const end = match.end; + const isSelected = isSelectedPage && i === selectedMatchIdx; + const highlightSuffix = isSelected ? " selected" : ""; + let selectedLeft = 0; + if (!prevEnd || begin.divIdx !== prevEnd.divIdx) { + if (prevEnd !== null) { + appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset); + } + beginText(begin); + } else { + appendTextToDiv(prevEnd.divIdx, prevEnd.offset, begin.offset); + } + if (begin.divIdx === end.divIdx) { + selectedLeft = appendTextToDiv(begin.divIdx, begin.offset, end.offset, "highlight" + highlightSuffix); + } else { + selectedLeft = appendTextToDiv(begin.divIdx, begin.offset, infinity.offset, "highlight begin" + highlightSuffix); + for (let n0 = begin.divIdx + 1, n1 = end.divIdx; n0 < n1; n0++) { + textDivs[n0].className = "highlight middle" + highlightSuffix; + } + beginText(end, "highlight end" + highlightSuffix); + } + prevEnd = end; + if (isSelected) { + findController.scrollMatchIntoView({ + element: textDivs[begin.divIdx], + selectedLeft, + pageIndex: pageIdx, + matchIndex: selectedMatchIdx + }); + } + } + if (prevEnd) { + appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset); + } + } + _updateMatches(reset = false) { + if (!this.enabled && !reset) { + return; + } + const { + findController, + matches, + pageIdx + } = this; + const { + textContentItemsStr, + textDivs + } = this; + let clearedUntilDivIdx = -1; + for (const match of matches) { + const begin = Math.max(clearedUntilDivIdx, match.begin.divIdx); + for (let n = begin, end = match.end.divIdx; n <= end; n++) { + const div = textDivs[n]; + div.textContent = textContentItemsStr[n]; + div.className = ""; + } + clearedUntilDivIdx = match.end.divIdx + 1; + } + if (!findController?.highlightMatches || reset) { + return; + } + const pageMatches = findController.pageMatches[pageIdx] || null; + const pageMatchesLength = findController.pageMatchesLength[pageIdx] || null; + this.matches = this._convertMatches(pageMatches, pageMatchesLength); + this._renderMatches(this.matches); + } +} + +;// CONCATENATED MODULE: ./web/text_layer_builder.js + + +class TextLayerBuilder { + #enablePermissions = false; + #rotation = 0; + #scale = 0; + #textContentSource = null; + constructor({ + highlighter = null, + accessibilityManager = null, + isOffscreenCanvasSupported = true, + enablePermissions = false + }) { + this.textContentItemsStr = []; + this.renderingDone = false; + this.textDivs = []; + this.textDivProperties = new WeakMap(); + this.textLayerRenderTask = null; + this.highlighter = highlighter; + this.accessibilityManager = accessibilityManager; + this.isOffscreenCanvasSupported = isOffscreenCanvasSupported; + this.#enablePermissions = enablePermissions === true; + this.onAppend = null; + this.div = document.createElement("div"); + this.div.className = "textLayer"; + } + #finishRendering() { + this.renderingDone = true; + const endOfContent = document.createElement("div"); + endOfContent.className = "endOfContent"; + this.div.append(endOfContent); + this.#bindMouse(); + } + get numTextDivs() { + return this.textDivs.length; + } + async render(viewport) { + if (!this.#textContentSource) { + throw new Error('No "textContentSource" parameter specified.'); + } + const scale = viewport.scale * (globalThis.devicePixelRatio || 1); + const { + rotation + } = viewport; + if (this.renderingDone) { + const mustRotate = rotation !== this.#rotation; + const mustRescale = scale !== this.#scale; + if (mustRotate || mustRescale) { + this.hide(); + updateTextLayer({ + container: this.div, + viewport, + textDivs: this.textDivs, + textDivProperties: this.textDivProperties, + isOffscreenCanvasSupported: this.isOffscreenCanvasSupported, + mustRescale, + mustRotate + }); + this.#scale = scale; + this.#rotation = rotation; + } + this.show(); + return; + } + this.cancel(); + this.highlighter?.setTextMapping(this.textDivs, this.textContentItemsStr); + this.accessibilityManager?.setTextMapping(this.textDivs); + this.textLayerRenderTask = renderTextLayer({ + textContentSource: this.#textContentSource, + container: this.div, + viewport, + textDivs: this.textDivs, + textDivProperties: this.textDivProperties, + textContentItemsStr: this.textContentItemsStr, + isOffscreenCanvasSupported: this.isOffscreenCanvasSupported + }); + await this.textLayerRenderTask.promise; + this.#finishRendering(); + this.#scale = scale; + this.#rotation = rotation; + this.onAppend(this.div); + this.highlighter?.enable(); + this.accessibilityManager?.enable(); + } + hide() { + if (!this.div.hidden && this.renderingDone) { + this.highlighter?.disable(); + this.div.hidden = true; + } + } + show() { + if (this.div.hidden && this.renderingDone) { + this.div.hidden = false; + this.highlighter?.enable(); + } + } + cancel() { + if (this.textLayerRenderTask) { + this.textLayerRenderTask.cancel(); + this.textLayerRenderTask = null; + } + this.highlighter?.disable(); + this.accessibilityManager?.disable(); + this.textContentItemsStr.length = 0; + this.textDivs.length = 0; + this.textDivProperties = new WeakMap(); + } + setTextContentSource(source) { + this.cancel(); + this.#textContentSource = source; + } + #bindMouse() { + const { + div + } = this; + div.addEventListener("mousedown", evt => { + const end = div.querySelector(".endOfContent"); + if (!end) { + return; + } + let adjustTop = evt.target !== div; + adjustTop &&= getComputedStyle(end).getPropertyValue("-moz-user-select") !== "none"; + if (adjustTop) { + const divBounds = div.getBoundingClientRect(); + const r = Math.max(0, (evt.pageY - divBounds.top) / divBounds.height); + end.style.top = (r * 100).toFixed(2) + "%"; + } + end.classList.add("active"); + }); + div.addEventListener("mouseup", () => { + const end = div.querySelector(".endOfContent"); + if (!end) { + return; + } + end.style.top = ""; + end.classList.remove("active"); + }); + div.addEventListener("copy", event => { + if (!this.#enablePermissions) { + const selection = document.getSelection(); + event.clipboardData.setData("text/plain", removeNullCharacters(normalizeUnicode(selection.toString()))); + } + event.preventDefault(); + event.stopPropagation(); + }); + } +} + +;// CONCATENATED MODULE: ./web/xfa_layer_builder.js + +class XfaLayerBuilder { + constructor({ + pdfPage, + annotationStorage = null, + linkService, + xfaHtml = null + }) { + this.pdfPage = pdfPage; + this.annotationStorage = annotationStorage; + this.linkService = linkService; + this.xfaHtml = xfaHtml; + this.div = null; + this._cancelled = false; + } + async render(viewport, intent = "display") { + if (intent === "print") { + const parameters = { + viewport: viewport.clone({ + dontFlip: true + }), + div: this.div, + xfaHtml: this.xfaHtml, + annotationStorage: this.annotationStorage, + linkService: this.linkService, + intent + }; + this.div = document.createElement("div"); + parameters.div = this.div; + return XfaLayer.render(parameters); + } + const xfaHtml = await this.pdfPage.getXfa(); + if (this._cancelled || !xfaHtml) { + return { + textDivs: [] + }; + } + const parameters = { + viewport: viewport.clone({ + dontFlip: true + }), + div: this.div, + xfaHtml, + annotationStorage: this.annotationStorage, + linkService: this.linkService, + intent + }; + if (this.div) { + return XfaLayer.update(parameters); + } + this.div = document.createElement("div"); + parameters.div = this.div; + return XfaLayer.render(parameters); + } + cancel() { + this._cancelled = true; + } + hide() { + if (!this.div) { + return; + } + this.div.hidden = true; + } +} + +;// CONCATENATED MODULE: ./web/pdf_page_view.js + + + + + + + + + + + + +const MAX_CANVAS_PIXELS = compatibilityParams.maxCanvasPixels || 16777216; +const DEFAULT_LAYER_PROPERTIES = null; +class PDFPageView { + #annotationMode = AnnotationMode.ENABLE_FORMS; + #hasRestrictedScaling = false; + #layerProperties = null; + #loadingId = null; + #previousRotation = null; + #renderError = null; + #renderingState = RenderingStates.INITIAL; + #textLayerMode = TextLayerMode.ENABLE; + #useThumbnailCanvas = { + directDrawing: true, + initialOptionalContent: true, + regularAnnotations: true + }; + #viewportMap = new WeakMap(); + constructor(options) { + const container = options.container; + const defaultViewport = options.defaultViewport; + this.id = options.id; + this.renderingId = "page" + this.id; + this.#layerProperties = options.layerProperties || DEFAULT_LAYER_PROPERTIES; + this.pdfPage = null; + this.pageLabel = null; + this.rotation = 0; + this.scale = options.scale || DEFAULT_SCALE; + this.viewport = defaultViewport; + this.pdfPageRotate = defaultViewport.rotation; + this._optionalContentConfigPromise = options.optionalContentConfigPromise || null; + this.#textLayerMode = options.textLayerMode ?? TextLayerMode.ENABLE; + this.#annotationMode = options.annotationMode ?? AnnotationMode.ENABLE_FORMS; + this.imageResourcesPath = options.imageResourcesPath || ""; + this.isOffscreenCanvasSupported = options.isOffscreenCanvasSupported ?? true; + this.maxCanvasPixels = options.maxCanvasPixels ?? MAX_CANVAS_PIXELS; + this.pageColors = options.pageColors || null; + this.eventBus = options.eventBus; + this.renderingQueue = options.renderingQueue; + this.l10n = options.l10n || NullL10n; + this.renderTask = null; + this.resume = null; + this._isStandalone = !this.renderingQueue?.hasViewer(); + this._container = container; + this._annotationCanvasMap = null; + this.annotationLayer = null; + this.annotationEditorLayer = null; + this.textLayer = null; + this.zoomLayer = null; + this.xfaLayer = null; + this.structTreeLayer = null; + const div = document.createElement("div"); + div.className = "page"; + div.setAttribute("data-page-number", this.id); + div.setAttribute("role", "region"); + div.setAttribute("data-l10n-id", "pdfjs-page-landmark"); + div.setAttribute("data-l10n-args", JSON.stringify({ + page: this.id + })); + this.div = div; + this.#setDimensions(); + container?.append(div); + if (this._isStandalone) { + container?.style.setProperty("--scale-factor", this.scale * PixelsPerInch.PDF_TO_CSS_UNITS); + const { + optionalContentConfigPromise + } = options; + if (optionalContentConfigPromise) { + optionalContentConfigPromise.then(optionalContentConfig => { + if (optionalContentConfigPromise !== this._optionalContentConfigPromise) { + return; + } + this.#useThumbnailCanvas.initialOptionalContent = optionalContentConfig.hasInitialVisibility; + }); + } + if (this.l10n === NullL10n) { + this.l10n.translate(this.div); + } + } + } + get renderingState() { + return this.#renderingState; + } + set renderingState(state) { + if (state === this.#renderingState) { + return; + } + this.#renderingState = state; + if (this.#loadingId) { + clearTimeout(this.#loadingId); + this.#loadingId = null; + } + switch (state) { + case RenderingStates.PAUSED: + this.div.classList.remove("loading"); + break; + case RenderingStates.RUNNING: + this.div.classList.add("loadingIcon"); + this.#loadingId = setTimeout(() => { + this.div.classList.add("loading"); + this.#loadingId = null; + }, 0); + break; + case RenderingStates.INITIAL: + case RenderingStates.FINISHED: + this.div.classList.remove("loadingIcon", "loading"); + break; + } + } + #setDimensions() { + const { + viewport + } = this; + if (this.pdfPage) { + if (this.#previousRotation === viewport.rotation) { + return; + } + this.#previousRotation = viewport.rotation; + } + setLayerDimensions(this.div, viewport, true, false); + } + setPdfPage(pdfPage) { + if (this._isStandalone && (this.pageColors?.foreground === "CanvasText" || this.pageColors?.background === "Canvas")) { + this._container?.style.setProperty("--hcm-highligh-filter", pdfPage.filterFactory.addHighlightHCMFilter("CanvasText", "Canvas", "HighlightText", "Highlight")); + } + this.pdfPage = pdfPage; + this.pdfPageRotate = pdfPage.rotate; + const totalRotation = (this.rotation + this.pdfPageRotate) % 360; + this.viewport = pdfPage.getViewport({ + scale: this.scale * PixelsPerInch.PDF_TO_CSS_UNITS, + rotation: totalRotation + }); + this.#setDimensions(); + this.reset(); + } + destroy() { + this.reset(); + this.pdfPage?.cleanup(); + } + get _textHighlighter() { + return shadow(this, "_textHighlighter", new TextHighlighter({ + pageIndex: this.id - 1, + eventBus: this.eventBus, + findController: this.#layerProperties.findController + })); + } + async #renderAnnotationLayer() { + let error = null; + try { + await this.annotationLayer.render(this.viewport, "display"); + } catch (ex) { + console.error(`#renderAnnotationLayer: "${ex}".`); + error = ex; + } finally { + this.eventBus.dispatch("annotationlayerrendered", { + source: this, + pageNumber: this.id, + error + }); + } + } + async #renderAnnotationEditorLayer() { + let error = null; + try { + await this.annotationEditorLayer.render(this.viewport, "display"); + } catch (ex) { + console.error(`#renderAnnotationEditorLayer: "${ex}".`); + error = ex; + } finally { + this.eventBus.dispatch("annotationeditorlayerrendered", { + source: this, + pageNumber: this.id, + error + }); + } + } + async #renderXfaLayer() { + let error = null; + try { + const result = await this.xfaLayer.render(this.viewport, "display"); + if (result?.textDivs && this._textHighlighter) { + this.#buildXfaTextContentItems(result.textDivs); + } + } catch (ex) { + console.error(`#renderXfaLayer: "${ex}".`); + error = ex; + } finally { + if (this.xfaLayer?.div) { + this.l10n.pause(); + this.div.append(this.xfaLayer.div); + this.l10n.resume(); + } + this.eventBus.dispatch("xfalayerrendered", { + source: this, + pageNumber: this.id, + error + }); + } + } + async #renderTextLayer() { + const { + pdfPage, + textLayer, + viewport + } = this; + if (!textLayer) { + return; + } + let error = null; + try { + if (!textLayer.renderingDone) { + const readableStream = pdfPage.streamTextContent({ + includeMarkedContent: true, + disableNormalization: true + }); + textLayer.setTextContentSource(readableStream); + } + await textLayer.render(viewport); + } catch (ex) { + if (ex instanceof AbortException) { + return; + } + console.error(`#renderTextLayer: "${ex}".`); + error = ex; + } + this.eventBus.dispatch("textlayerrendered", { + source: this, + pageNumber: this.id, + numTextDivs: textLayer.numTextDivs, + error + }); + this.#renderStructTreeLayer(); + } + async #renderStructTreeLayer() { + if (!this.textLayer) { + return; + } + this.structTreeLayer ||= new StructTreeLayerBuilder(); + const tree = await (!this.structTreeLayer.renderingDone ? this.pdfPage.getStructTree() : null); + const treeDom = this.structTreeLayer?.render(tree); + if (treeDom) { + this.l10n.pause(); + this.canvas?.append(treeDom); + this.l10n.resume(); + } + this.structTreeLayer?.show(); + } + async #buildXfaTextContentItems(textDivs) { + const text = await this.pdfPage.getTextContent(); + const items = []; + for (const item of text.items) { + items.push(item.str); + } + this._textHighlighter.setTextMapping(textDivs, items); + this._textHighlighter.enable(); + } + _resetZoomLayer(removeFromDOM = false) { + if (!this.zoomLayer) { + return; + } + const zoomLayerCanvas = this.zoomLayer.firstChild; + this.#viewportMap.delete(zoomLayerCanvas); + zoomLayerCanvas.width = 0; + zoomLayerCanvas.height = 0; + if (removeFromDOM) { + this.zoomLayer.remove(); + } + this.zoomLayer = null; + } + reset({ + keepZoomLayer = false, + keepAnnotationLayer = false, + keepAnnotationEditorLayer = false, + keepXfaLayer = false, + keepTextLayer = false + } = {}) { + this.cancelRendering({ + keepAnnotationLayer, + keepAnnotationEditorLayer, + keepXfaLayer, + keepTextLayer + }); + this.renderingState = RenderingStates.INITIAL; + const div = this.div; + const childNodes = div.childNodes, + zoomLayerNode = keepZoomLayer && this.zoomLayer || null, + annotationLayerNode = keepAnnotationLayer && this.annotationLayer?.div || null, + annotationEditorLayerNode = keepAnnotationEditorLayer && this.annotationEditorLayer?.div || null, + xfaLayerNode = keepXfaLayer && this.xfaLayer?.div || null, + textLayerNode = keepTextLayer && this.textLayer?.div || null; + for (let i = childNodes.length - 1; i >= 0; i--) { + const node = childNodes[i]; + switch (node) { + case zoomLayerNode: + case annotationLayerNode: + case annotationEditorLayerNode: + case xfaLayerNode: + case textLayerNode: + continue; + } + node.remove(); + } + div.removeAttribute("data-loaded"); + if (annotationLayerNode) { + this.annotationLayer.hide(); + } + if (annotationEditorLayerNode) { + this.annotationEditorLayer.hide(); + } + if (xfaLayerNode) { + this.xfaLayer.hide(); + } + if (textLayerNode) { + this.textLayer.hide(); + } + this.structTreeLayer?.hide(); + if (!zoomLayerNode) { + if (this.canvas) { + this.#viewportMap.delete(this.canvas); + this.canvas.width = 0; + this.canvas.height = 0; + delete this.canvas; + } + this._resetZoomLayer(); + } + } + update({ + scale = 0, + rotation = null, + optionalContentConfigPromise = null, + drawingDelay = -1 + }) { + this.scale = scale || this.scale; + if (typeof rotation === "number") { + this.rotation = rotation; + } + if (optionalContentConfigPromise instanceof Promise) { + this._optionalContentConfigPromise = optionalContentConfigPromise; + optionalContentConfigPromise.then(optionalContentConfig => { + if (optionalContentConfigPromise !== this._optionalContentConfigPromise) { + return; + } + this.#useThumbnailCanvas.initialOptionalContent = optionalContentConfig.hasInitialVisibility; + }); + } + this.#useThumbnailCanvas.directDrawing = true; + const totalRotation = (this.rotation + this.pdfPageRotate) % 360; + this.viewport = this.viewport.clone({ + scale: this.scale * PixelsPerInch.PDF_TO_CSS_UNITS, + rotation: totalRotation + }); + this.#setDimensions(); + if (this._isStandalone) { + this._container?.style.setProperty("--scale-factor", this.viewport.scale); + } + if (this.canvas) { + let onlyCssZoom = false; + if (this.#hasRestrictedScaling) { + if (this.maxCanvasPixels === 0) { + onlyCssZoom = true; + } else if (this.maxCanvasPixels > 0) { + const { + width, + height + } = this.viewport; + const { + sx, + sy + } = this.outputScale; + onlyCssZoom = (Math.floor(width) * sx | 0) * (Math.floor(height) * sy | 0) > this.maxCanvasPixels; + } + } + const postponeDrawing = !onlyCssZoom && drawingDelay >= 0 && drawingDelay < 1000; + if (postponeDrawing || onlyCssZoom) { + if (postponeDrawing && this.renderingState !== RenderingStates.FINISHED) { + this.cancelRendering({ + keepZoomLayer: true, + keepAnnotationLayer: true, + keepAnnotationEditorLayer: true, + keepXfaLayer: true, + keepTextLayer: true, + cancelExtraDelay: drawingDelay + }); + this.renderingState = RenderingStates.FINISHED; + this.#useThumbnailCanvas.directDrawing = false; + } + this.cssTransform({ + target: this.canvas, + redrawAnnotationLayer: true, + redrawAnnotationEditorLayer: true, + redrawXfaLayer: true, + redrawTextLayer: !postponeDrawing, + hideTextLayer: postponeDrawing + }); + if (postponeDrawing) { + return; + } + this.eventBus.dispatch("pagerendered", { + source: this, + pageNumber: this.id, + cssTransform: true, + timestamp: performance.now(), + error: this.#renderError + }); + return; + } + if (!this.zoomLayer && !this.canvas.hidden) { + this.zoomLayer = this.canvas.parentNode; + this.zoomLayer.style.position = "absolute"; + } + } + if (this.zoomLayer) { + this.cssTransform({ + target: this.zoomLayer.firstChild + }); + } + this.reset({ + keepZoomLayer: true, + keepAnnotationLayer: true, + keepAnnotationEditorLayer: true, + keepXfaLayer: true, + keepTextLayer: true + }); + } + cancelRendering({ + keepAnnotationLayer = false, + keepAnnotationEditorLayer = false, + keepXfaLayer = false, + keepTextLayer = false, + cancelExtraDelay = 0 + } = {}) { + if (this.renderTask) { + this.renderTask.cancel(cancelExtraDelay); + this.renderTask = null; + } + this.resume = null; + if (this.textLayer && (!keepTextLayer || !this.textLayer.div)) { + this.textLayer.cancel(); + this.textLayer = null; + } + if (this.structTreeLayer && !this.textLayer) { + this.structTreeLayer = null; + } + if (this.annotationLayer && (!keepAnnotationLayer || !this.annotationLayer.div)) { + this.annotationLayer.cancel(); + this.annotationLayer = null; + this._annotationCanvasMap = null; + } + if (this.annotationEditorLayer && (!keepAnnotationEditorLayer || !this.annotationEditorLayer.div)) { + this.annotationEditorLayer.cancel(); + this.annotationEditorLayer = null; + } + if (this.xfaLayer && (!keepXfaLayer || !this.xfaLayer.div)) { + this.xfaLayer.cancel(); + this.xfaLayer = null; + this._textHighlighter?.disable(); + } + } + cssTransform({ + target, + redrawAnnotationLayer = false, + redrawAnnotationEditorLayer = false, + redrawXfaLayer = false, + redrawTextLayer = false, + hideTextLayer = false + }) { + if (!target.hasAttribute("zooming")) { + target.setAttribute("zooming", true); + const { + style + } = target; + style.width = style.height = ""; + } + const originalViewport = this.#viewportMap.get(target); + if (this.viewport !== originalViewport) { + const relativeRotation = this.viewport.rotation - originalViewport.rotation; + const absRotation = Math.abs(relativeRotation); + let scaleX = 1, + scaleY = 1; + if (absRotation === 90 || absRotation === 270) { + const { + width, + height + } = this.viewport; + scaleX = height / width; + scaleY = width / height; + } + target.style.transform = `rotate(${relativeRotation}deg) scale(${scaleX}, ${scaleY})`; + } + if (redrawAnnotationLayer && this.annotationLayer) { + this.#renderAnnotationLayer(); + } + if (redrawAnnotationEditorLayer && this.annotationEditorLayer) { + this.#renderAnnotationEditorLayer(); + } + if (redrawXfaLayer && this.xfaLayer) { + this.#renderXfaLayer(); + } + if (this.textLayer) { + if (hideTextLayer) { + this.textLayer.hide(); + this.structTreeLayer?.hide(); + } else if (redrawTextLayer) { + this.#renderTextLayer(); + } + } + } + get width() { + return this.viewport.width; + } + get height() { + return this.viewport.height; + } + getPagePoint(x, y) { + return this.viewport.convertToPdfPoint(x, y); + } + async #finishRenderTask(renderTask, error = null) { + if (renderTask === this.renderTask) { + this.renderTask = null; + } + if (error instanceof RenderingCancelledException) { + this.#renderError = null; + return; + } + this.#renderError = error; + this.renderingState = RenderingStates.FINISHED; + this._resetZoomLayer(true); + this.#useThumbnailCanvas.regularAnnotations = !renderTask.separateAnnots; + this.eventBus.dispatch("pagerendered", { + source: this, + pageNumber: this.id, + cssTransform: false, + timestamp: performance.now(), + error: this.#renderError + }); + if (error) { + throw error; + } + } + async draw() { + if (this.renderingState !== RenderingStates.INITIAL) { + console.error("Must be in new state before drawing"); + this.reset(); + } + const { + div, + l10n, + pageColors, + pdfPage, + viewport + } = this; + if (!pdfPage) { + this.renderingState = RenderingStates.FINISHED; + throw new Error("pdfPage is not loaded"); + } + this.renderingState = RenderingStates.RUNNING; + const canvasWrapper = document.createElement("div"); + canvasWrapper.classList.add("canvasWrapper"); + div.append(canvasWrapper); + if (!this.textLayer && this.#textLayerMode !== TextLayerMode.DISABLE && !pdfPage.isPureXfa) { + this._accessibilityManager ||= new TextAccessibilityManager(); + this.textLayer = new TextLayerBuilder({ + highlighter: this._textHighlighter, + accessibilityManager: this._accessibilityManager, + isOffscreenCanvasSupported: this.isOffscreenCanvasSupported, + enablePermissions: this.#textLayerMode === TextLayerMode.ENABLE_PERMISSIONS + }); + this.textLayer.onAppend = textLayerDiv => { + this.l10n.pause(); + this.div.append(textLayerDiv); + this.l10n.resume(); + }; + } + if (!this.annotationLayer && this.#annotationMode !== AnnotationMode.DISABLE) { + const { + annotationStorage, + downloadManager, + enableScripting, + fieldObjectsPromise, + hasJSActionsPromise, + linkService + } = this.#layerProperties; + this._annotationCanvasMap ||= new Map(); + this.annotationLayer = new AnnotationLayerBuilder({ + pageDiv: div, + pdfPage, + annotationStorage, + imageResourcesPath: this.imageResourcesPath, + renderForms: this.#annotationMode === AnnotationMode.ENABLE_FORMS, + linkService, + downloadManager, + enableScripting, + hasJSActionsPromise, + fieldObjectsPromise, + annotationCanvasMap: this._annotationCanvasMap, + accessibilityManager: this._accessibilityManager + }); + } + const renderContinueCallback = cont => { + showCanvas?.(false); + if (this.renderingQueue && !this.renderingQueue.isHighestPriority(this)) { + this.renderingState = RenderingStates.PAUSED; + this.resume = () => { + this.renderingState = RenderingStates.RUNNING; + cont(); + }; + return; + } + cont(); + }; + const { + width, + height + } = viewport; + const canvas = document.createElement("canvas"); + canvas.setAttribute("role", "presentation"); + canvas.hidden = true; + const hasHCM = !!(pageColors?.background && pageColors?.foreground); + let showCanvas = isLastShow => { + if (!hasHCM || isLastShow) { + canvas.hidden = false; + showCanvas = null; + } + }; + canvasWrapper.append(canvas); + this.canvas = canvas; + const ctx = canvas.getContext("2d", { + alpha: false + }); + const outputScale = this.outputScale = new OutputScale(); + if (this.maxCanvasPixels === 0) { + const invScale = 1 / this.scale; + outputScale.sx *= invScale; + outputScale.sy *= invScale; + this.#hasRestrictedScaling = true; + } else if (this.maxCanvasPixels > 0) { + const pixelsInViewport = width * height; + const maxScale = Math.sqrt(this.maxCanvasPixels / pixelsInViewport); + if (outputScale.sx > maxScale || outputScale.sy > maxScale) { + outputScale.sx = maxScale; + outputScale.sy = maxScale; + this.#hasRestrictedScaling = true; + } else { + this.#hasRestrictedScaling = false; + } + } + const sfx = approximateFraction(outputScale.sx); + const sfy = approximateFraction(outputScale.sy); + canvas.width = roundToDivide(width * outputScale.sx, sfx[0]); + canvas.height = roundToDivide(height * outputScale.sy, sfy[0]); + const { + style + } = canvas; + style.width = roundToDivide(width, sfx[1]) + "px"; + style.height = roundToDivide(height, sfy[1]) + "px"; + this.#viewportMap.set(canvas, viewport); + const transform = outputScale.scaled ? [outputScale.sx, 0, 0, outputScale.sy, 0, 0] : null; + const renderContext = { + canvasContext: ctx, + transform, + viewport, + annotationMode: this.#annotationMode, + optionalContentConfigPromise: this._optionalContentConfigPromise, + annotationCanvasMap: this._annotationCanvasMap, + pageColors + }; + const renderTask = this.renderTask = this.pdfPage.render(renderContext); + renderTask.onContinue = renderContinueCallback; + const resultPromise = renderTask.promise.then(async () => { + showCanvas?.(true); + await this.#finishRenderTask(renderTask); + this.#renderTextLayer(); + if (this.annotationLayer) { + await this.#renderAnnotationLayer(); + } + if (!this.annotationEditorLayer) { + const { + annotationEditorUIManager + } = this.#layerProperties; + if (!annotationEditorUIManager) { + return; + } + this.annotationEditorLayer = new AnnotationEditorLayerBuilder({ + uiManager: annotationEditorUIManager, + pageDiv: div, + pdfPage, + l10n, + accessibilityManager: this._accessibilityManager, + annotationLayer: this.annotationLayer?.annotationLayer + }); + } + this.#renderAnnotationEditorLayer(); + }, error => { + if (!(error instanceof RenderingCancelledException)) { + showCanvas?.(true); + } + return this.#finishRenderTask(renderTask, error); + }); + if (pdfPage.isPureXfa) { + if (!this.xfaLayer) { + const { + annotationStorage, + linkService + } = this.#layerProperties; + this.xfaLayer = new XfaLayerBuilder({ + pdfPage, + annotationStorage, + linkService + }); + } + this.#renderXfaLayer(); + } + div.setAttribute("data-loaded", true); + this.eventBus.dispatch("pagerender", { + source: this, + pageNumber: this.id + }); + return resultPromise; + } + setPageLabel(label) { + this.pageLabel = typeof label === "string" ? label : null; + this.div.setAttribute("data-l10n-args", JSON.stringify({ + page: this.pageLabel ?? this.id + })); + if (this.pageLabel !== null) { + this.div.setAttribute("data-page-label", this.pageLabel); + } else { + this.div.removeAttribute("data-page-label"); + } + } + get thumbnailCanvas() { + const { + directDrawing, + initialOptionalContent, + regularAnnotations + } = this.#useThumbnailCanvas; + return directDrawing && initialOptionalContent && regularAnnotations ? this.canvas : null; + } +} + +;// CONCATENATED MODULE: ./web/pdf_viewer.js + + + + + + +const DEFAULT_CACHE_SIZE = 10; +const PagesCountLimit = { + FORCE_SCROLL_MODE_PAGE: 15000, + FORCE_LAZY_PAGE_INIT: 7500, + PAUSE_EAGER_PAGE_INIT: 250 +}; +function isValidAnnotationEditorMode(mode) { + return Object.values(AnnotationEditorType).includes(mode) && mode !== AnnotationEditorType.DISABLE; +} +class PDFPageViewBuffer { + #buf = new Set(); + #size = 0; + constructor(size) { + this.#size = size; + } + push(view) { + const buf = this.#buf; + if (buf.has(view)) { + buf.delete(view); + } + buf.add(view); + if (buf.size > this.#size) { + this.#destroyFirstView(); + } + } + resize(newSize, idsToKeep = null) { + this.#size = newSize; + const buf = this.#buf; + if (idsToKeep) { + const ii = buf.size; + let i = 1; + for (const view of buf) { + if (idsToKeep.has(view.id)) { + buf.delete(view); + buf.add(view); + } + if (++i > ii) { + break; + } + } + } + while (buf.size > this.#size) { + this.#destroyFirstView(); + } + } + has(view) { + return this.#buf.has(view); + } + [Symbol.iterator]() { + return this.#buf.keys(); + } + #destroyFirstView() { + const firstView = this.#buf.keys().next().value; + firstView?.destroy(); + this.#buf.delete(firstView); + } +} +class PDFViewer { + #buffer = null; + #altTextManager = null; + #annotationEditorMode = AnnotationEditorType.NONE; + #annotationEditorUIManager = null; + #annotationMode = AnnotationMode.ENABLE_FORMS; + #containerTopLeft = null; + #copyCallbackBound = null; + #enablePermissions = false; + #getAllTextInProgress = false; + #hiddenCopyElement = null; + #interruptCopyCondition = false; + #previousContainerHeight = 0; + #resizeObserver = new ResizeObserver(this.#resizeObserverCallback.bind(this)); + #scrollModePageState = null; + #onVisibilityChange = null; + #scaleTimeoutId = null; + #textLayerMode = TextLayerMode.ENABLE; + constructor(options) { + const viewerVersion = '4.0.189'; + if (version !== viewerVersion) { + throw new Error(`The API version "${version}" does not match the Viewer version "${viewerVersion}".`); + } + this.container = options.container; + this.viewer = options.viewer || options.container.firstElementChild; + if (this.container?.tagName !== "DIV" || this.viewer?.tagName !== "DIV") { + throw new Error("Invalid `container` and/or `viewer` option."); + } + if (this.container.offsetParent && getComputedStyle(this.container).position !== "absolute") { + throw new Error("The `container` must be absolutely positioned."); + } + this.#resizeObserver.observe(this.container); + this.eventBus = options.eventBus; + this.linkService = options.linkService || new SimpleLinkService(); + this.downloadManager = options.downloadManager || null; + this.findController = options.findController || null; + this.#altTextManager = options.altTextManager || null; + if (this.findController) { + this.findController.onIsPageVisible = pageNumber => this._getVisiblePages().ids.has(pageNumber); + } + this._scriptingManager = options.scriptingManager || null; + this.#textLayerMode = options.textLayerMode ?? TextLayerMode.ENABLE; + this.#annotationMode = options.annotationMode ?? AnnotationMode.ENABLE_FORMS; + this.#annotationEditorMode = options.annotationEditorMode ?? AnnotationEditorType.NONE; + this.imageResourcesPath = options.imageResourcesPath || ""; + this.enablePrintAutoRotate = options.enablePrintAutoRotate || false; + this.removePageBorders = options.removePageBorders || false; + this.isOffscreenCanvasSupported = options.isOffscreenCanvasSupported ?? true; + this.maxCanvasPixels = options.maxCanvasPixels; + this.l10n = options.l10n || NullL10n; + this.#enablePermissions = options.enablePermissions || false; + this.pageColors = options.pageColors || null; + this.defaultRenderingQueue = !options.renderingQueue; + if (this.defaultRenderingQueue) { + this.renderingQueue = new PDFRenderingQueue(); + this.renderingQueue.setViewer(this); + } else { + this.renderingQueue = options.renderingQueue; + } + this.scroll = watchScroll(this.container, this._scrollUpdate.bind(this)); + this.presentationModeState = PresentationModeState.UNKNOWN; + this._onBeforeDraw = this._onAfterDraw = null; + this._resetView(); + if (this.removePageBorders) { + this.viewer.classList.add("removePageBorders"); + } + this.#updateContainerHeightCss(); + this.eventBus._on("thumbnailrendered", ({ + pageNumber, + pdfPage + }) => { + const pageView = this._pages[pageNumber - 1]; + if (!this.#buffer.has(pageView)) { + pdfPage?.cleanup(); + } + }); + if (this.l10n === NullL10n) { + this.l10n.translate(this.container); + } + } + get pagesCount() { + return this._pages.length; + } + getPageView(index) { + return this._pages[index]; + } + getCachedPageViews() { + return new Set(this.#buffer); + } + get pageViewsReady() { + return this._pagesCapability.settled && this._pages.every(pageView => pageView?.pdfPage); + } + get renderForms() { + return this.#annotationMode === AnnotationMode.ENABLE_FORMS; + } + get enableScripting() { + return !!this._scriptingManager; + } + get currentPageNumber() { + return this._currentPageNumber; + } + set currentPageNumber(val) { + if (!Number.isInteger(val)) { + throw new Error("Invalid page number."); + } + if (!this.pdfDocument) { + return; + } + if (!this._setCurrentPageNumber(val, true)) { + console.error(`currentPageNumber: "${val}" is not a valid page.`); + } + } + _setCurrentPageNumber(val, resetCurrentPageView = false) { + if (this._currentPageNumber === val) { + if (resetCurrentPageView) { + this.#resetCurrentPageView(); + } + return true; + } + if (!(0 < val && val <= this.pagesCount)) { + return false; + } + const previous = this._currentPageNumber; + this._currentPageNumber = val; + this.eventBus.dispatch("pagechanging", { + source: this, + pageNumber: val, + pageLabel: this._pageLabels?.[val - 1] ?? null, + previous + }); + if (resetCurrentPageView) { + this.#resetCurrentPageView(); + } + return true; + } + get currentPageLabel() { + return this._pageLabels?.[this._currentPageNumber - 1] ?? null; + } + set currentPageLabel(val) { + if (!this.pdfDocument) { + return; + } + let page = val | 0; + if (this._pageLabels) { + const i = this._pageLabels.indexOf(val); + if (i >= 0) { + page = i + 1; + } + } + if (!this._setCurrentPageNumber(page, true)) { + console.error(`currentPageLabel: "${val}" is not a valid page.`); + } + } + get currentScale() { + return this._currentScale !== UNKNOWN_SCALE ? this._currentScale : DEFAULT_SCALE; + } + set currentScale(val) { + if (isNaN(val)) { + throw new Error("Invalid numeric scale."); + } + if (!this.pdfDocument) { + return; + } + this.#setScale(val, { + noScroll: false + }); + } + get currentScaleValue() { + return this._currentScaleValue; + } + set currentScaleValue(val) { + if (!this.pdfDocument) { + return; + } + this.#setScale(val, { + noScroll: false + }); + } + get pagesRotation() { + return this._pagesRotation; + } + set pagesRotation(rotation) { + if (!isValidRotation(rotation)) { + throw new Error("Invalid pages rotation angle."); + } + if (!this.pdfDocument) { + return; + } + rotation %= 360; + if (rotation < 0) { + rotation += 360; + } + if (this._pagesRotation === rotation) { + return; + } + this._pagesRotation = rotation; + const pageNumber = this._currentPageNumber; + this.refresh(true, { + rotation + }); + if (this._currentScaleValue) { + this.#setScale(this._currentScaleValue, { + noScroll: true + }); + } + this.eventBus.dispatch("rotationchanging", { + source: this, + pagesRotation: rotation, + pageNumber + }); + if (this.defaultRenderingQueue) { + this.update(); + } + } + get firstPagePromise() { + return this.pdfDocument ? this._firstPageCapability.promise : null; + } + get onePageRendered() { + return this.pdfDocument ? this._onePageRenderedCapability.promise : null; + } + get pagesPromise() { + return this.pdfDocument ? this._pagesCapability.promise : null; + } + get _layerProperties() { + const self = this; + return shadow(this, "_layerProperties", { + get annotationEditorUIManager() { + return self.#annotationEditorUIManager; + }, + get annotationStorage() { + return self.pdfDocument?.annotationStorage; + }, + get downloadManager() { + return self.downloadManager; + }, + get enableScripting() { + return !!self._scriptingManager; + }, + get fieldObjectsPromise() { + return self.pdfDocument?.getFieldObjects(); + }, + get findController() { + return self.findController; + }, + get hasJSActionsPromise() { + return self.pdfDocument?.hasJSActions(); + }, + get linkService() { + return self.linkService; + } + }); + } + #initializePermissions(permissions) { + const params = { + annotationEditorMode: this.#annotationEditorMode, + annotationMode: this.#annotationMode, + textLayerMode: this.#textLayerMode + }; + if (!permissions) { + return params; + } + if (!permissions.includes(PermissionFlag.COPY) && this.#textLayerMode === TextLayerMode.ENABLE) { + params.textLayerMode = TextLayerMode.ENABLE_PERMISSIONS; + } + if (!permissions.includes(PermissionFlag.MODIFY_CONTENTS)) { + params.annotationEditorMode = AnnotationEditorType.DISABLE; + } + if (!permissions.includes(PermissionFlag.MODIFY_ANNOTATIONS) && !permissions.includes(PermissionFlag.FILL_INTERACTIVE_FORMS) && this.#annotationMode === AnnotationMode.ENABLE_FORMS) { + params.annotationMode = AnnotationMode.ENABLE; + } + return params; + } + #onePageRenderedOrForceFetch() { + if (document.visibilityState === "hidden" || !this.container.offsetParent || this._getVisiblePages().views.length === 0) { + return Promise.resolve(); + } + const visibilityChangePromise = new Promise(resolve => { + this.#onVisibilityChange = () => { + if (document.visibilityState !== "hidden") { + return; + } + resolve(); + document.removeEventListener("visibilitychange", this.#onVisibilityChange); + this.#onVisibilityChange = null; + }; + document.addEventListener("visibilitychange", this.#onVisibilityChange); + }); + return Promise.race([this._onePageRenderedCapability.promise, visibilityChangePromise]); + } + async getAllText() { + const texts = []; + const buffer = []; + for (let pageNum = 1, pagesCount = this.pdfDocument.numPages; pageNum <= pagesCount; ++pageNum) { + if (this.#interruptCopyCondition) { + return null; + } + buffer.length = 0; + const page = await this.pdfDocument.getPage(pageNum); + const { + items + } = await page.getTextContent(); + for (const item of items) { + if (item.str) { + buffer.push(item.str); + } + if (item.hasEOL) { + buffer.push("\n"); + } + } + texts.push(removeNullCharacters(buffer.join(""))); + } + return texts.join("\n"); + } + #copyCallback(textLayerMode, event) { + const selection = document.getSelection(); + const { + focusNode, + anchorNode + } = selection; + if (anchorNode && focusNode && selection.containsNode(this.#hiddenCopyElement)) { + if (this.#getAllTextInProgress || textLayerMode === TextLayerMode.ENABLE_PERMISSIONS) { + event.preventDefault(); + event.stopPropagation(); + return; + } + this.#getAllTextInProgress = true; + const savedCursor = this.container.style.cursor; + this.container.style.cursor = "wait"; + const interruptCopy = ev => this.#interruptCopyCondition = ev.key === "Escape"; + window.addEventListener("keydown", interruptCopy); + this.getAllText().then(async text => { + if (text !== null) { + await navigator.clipboard.writeText(text); + } + }).catch(reason => { + console.warn(`Something goes wrong when extracting the text: ${reason.message}`); + }).finally(() => { + this.#getAllTextInProgress = false; + this.#interruptCopyCondition = false; + window.removeEventListener("keydown", interruptCopy); + this.container.style.cursor = savedCursor; + }); + event.preventDefault(); + event.stopPropagation(); + } + } + setDocument(pdfDocument) { + if (this.pdfDocument) { + this.eventBus.dispatch("pagesdestroy", { + source: this + }); + this._cancelRendering(); + this._resetView(); + this.findController?.setDocument(null); + this._scriptingManager?.setDocument(null); + if (this.#annotationEditorUIManager) { + this.#annotationEditorUIManager.destroy(); + this.#annotationEditorUIManager = null; + } + } + this.pdfDocument = pdfDocument; + if (!pdfDocument) { + return; + } + const pagesCount = pdfDocument.numPages; + const firstPagePromise = pdfDocument.getPage(1); + const optionalContentConfigPromise = pdfDocument.getOptionalContentConfig(); + const permissionsPromise = this.#enablePermissions ? pdfDocument.getPermissions() : Promise.resolve(); + if (pagesCount > PagesCountLimit.FORCE_SCROLL_MODE_PAGE) { + console.warn("Forcing PAGE-scrolling for performance reasons, given the length of the document."); + const mode = this._scrollMode = ScrollMode.PAGE; + this.eventBus.dispatch("scrollmodechanged", { + source: this, + mode + }); + } + this._pagesCapability.promise.then(() => { + this.eventBus.dispatch("pagesloaded", { + source: this, + pagesCount + }); + }, () => {}); + this._onBeforeDraw = evt => { + const pageView = this._pages[evt.pageNumber - 1]; + if (!pageView) { + return; + } + this.#buffer.push(pageView); + }; + this.eventBus._on("pagerender", this._onBeforeDraw); + this._onAfterDraw = evt => { + if (evt.cssTransform || this._onePageRenderedCapability.settled) { + return; + } + this._onePageRenderedCapability.resolve({ + timestamp: evt.timestamp + }); + this.eventBus._off("pagerendered", this._onAfterDraw); + this._onAfterDraw = null; + if (this.#onVisibilityChange) { + document.removeEventListener("visibilitychange", this.#onVisibilityChange); + this.#onVisibilityChange = null; + } + }; + this.eventBus._on("pagerendered", this._onAfterDraw); + Promise.all([firstPagePromise, permissionsPromise]).then(([firstPdfPage, permissions]) => { + if (pdfDocument !== this.pdfDocument) { + return; + } + this._firstPageCapability.resolve(firstPdfPage); + this._optionalContentConfigPromise = optionalContentConfigPromise; + const { + annotationEditorMode, + annotationMode, + textLayerMode + } = this.#initializePermissions(permissions); + if (textLayerMode !== TextLayerMode.DISABLE) { + const element = this.#hiddenCopyElement = document.createElement("div"); + element.id = "hiddenCopyElement"; + this.viewer.before(element); + } + if (annotationEditorMode !== AnnotationEditorType.DISABLE) { + const mode = annotationEditorMode; + if (pdfDocument.isPureXfa) { + console.warn("Warning: XFA-editing is not implemented."); + } else if (isValidAnnotationEditorMode(mode)) { + this.#annotationEditorUIManager = new AnnotationEditorUIManager(this.container, this.viewer, this.#altTextManager, this.eventBus, pdfDocument, this.pageColors); + if (mode !== AnnotationEditorType.NONE) { + this.#annotationEditorUIManager.updateMode(mode); + } + } else { + console.error(`Invalid AnnotationEditor mode: ${mode}`); + } + } + const viewerElement = this._scrollMode === ScrollMode.PAGE ? null : this.viewer; + const scale = this.currentScale; + const viewport = firstPdfPage.getViewport({ + scale: scale * PixelsPerInch.PDF_TO_CSS_UNITS + }); + this.viewer.style.setProperty("--scale-factor", viewport.scale); + if (this.pageColors?.foreground === "CanvasText" || this.pageColors?.background === "Canvas") { + this.viewer.style.setProperty("--hcm-highligh-filter", pdfDocument.filterFactory.addHighlightHCMFilter("CanvasText", "Canvas", "HighlightText", "Highlight")); + } + for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) { + const pageView = new PDFPageView({ + container: viewerElement, + eventBus: this.eventBus, + id: pageNum, + scale, + defaultViewport: viewport.clone(), + optionalContentConfigPromise, + renderingQueue: this.renderingQueue, + textLayerMode, + annotationMode, + imageResourcesPath: this.imageResourcesPath, + isOffscreenCanvasSupported: this.isOffscreenCanvasSupported, + maxCanvasPixels: this.maxCanvasPixels, + pageColors: this.pageColors, + l10n: this.l10n, + layerProperties: this._layerProperties + }); + this._pages.push(pageView); + } + const firstPageView = this._pages[0]; + if (firstPageView) { + firstPageView.setPdfPage(firstPdfPage); + this.linkService.cachePageRef(1, firstPdfPage.ref); + } + if (this._scrollMode === ScrollMode.PAGE) { + this.#ensurePageViewVisible(); + } else if (this._spreadMode !== SpreadMode.NONE) { + this._updateSpreadMode(); + } + this.#onePageRenderedOrForceFetch().then(async () => { + this.findController?.setDocument(pdfDocument); + this._scriptingManager?.setDocument(pdfDocument); + if (this.#hiddenCopyElement) { + this.#copyCallbackBound = this.#copyCallback.bind(this, textLayerMode); + document.addEventListener("copy", this.#copyCallbackBound); + } + if (this.#annotationEditorUIManager) { + this.eventBus.dispatch("annotationeditormodechanged", { + source: this, + mode: this.#annotationEditorMode + }); + } + if (pdfDocument.loadingParams.disableAutoFetch || pagesCount > PagesCountLimit.FORCE_LAZY_PAGE_INIT) { + this._pagesCapability.resolve(); + return; + } + let getPagesLeft = pagesCount - 1; + if (getPagesLeft <= 0) { + this._pagesCapability.resolve(); + return; + } + for (let pageNum = 2; pageNum <= pagesCount; ++pageNum) { + const promise = pdfDocument.getPage(pageNum).then(pdfPage => { + const pageView = this._pages[pageNum - 1]; + if (!pageView.pdfPage) { + pageView.setPdfPage(pdfPage); + } + this.linkService.cachePageRef(pageNum, pdfPage.ref); + if (--getPagesLeft === 0) { + this._pagesCapability.resolve(); + } + }, reason => { + console.error(`Unable to get page ${pageNum} to initialize viewer`, reason); + if (--getPagesLeft === 0) { + this._pagesCapability.resolve(); + } + }); + if (pageNum % PagesCountLimit.PAUSE_EAGER_PAGE_INIT === 0) { + await promise; + } + } + }); + this.eventBus.dispatch("pagesinit", { + source: this + }); + pdfDocument.getMetadata().then(({ + info + }) => { + if (pdfDocument !== this.pdfDocument) { + return; + } + if (info.Language) { + this.viewer.lang = info.Language; + } + }); + if (this.defaultRenderingQueue) { + this.update(); + } + }).catch(reason => { + console.error("Unable to initialize viewer", reason); + this._pagesCapability.reject(reason); + }); + } + setPageLabels(labels) { + if (!this.pdfDocument) { + return; + } + if (!labels) { + this._pageLabels = null; + } else if (!(Array.isArray(labels) && this.pdfDocument.numPages === labels.length)) { + this._pageLabels = null; + console.error(`setPageLabels: Invalid page labels.`); + } else { + this._pageLabels = labels; + } + for (let i = 0, ii = this._pages.length; i < ii; i++) { + this._pages[i].setPageLabel(this._pageLabels?.[i] ?? null); + } + } + _resetView() { + this._pages = []; + this._currentPageNumber = 1; + this._currentScale = UNKNOWN_SCALE; + this._currentScaleValue = null; + this._pageLabels = null; + this.#buffer = new PDFPageViewBuffer(DEFAULT_CACHE_SIZE); + this._location = null; + this._pagesRotation = 0; + this._optionalContentConfigPromise = null; + this._firstPageCapability = new PromiseCapability(); + this._onePageRenderedCapability = new PromiseCapability(); + this._pagesCapability = new PromiseCapability(); + this._scrollMode = ScrollMode.VERTICAL; + this._previousScrollMode = ScrollMode.UNKNOWN; + this._spreadMode = SpreadMode.NONE; + this.#scrollModePageState = { + previousPageNumber: 1, + scrollDown: true, + pages: [] + }; + if (this._onBeforeDraw) { + this.eventBus._off("pagerender", this._onBeforeDraw); + this._onBeforeDraw = null; + } + if (this._onAfterDraw) { + this.eventBus._off("pagerendered", this._onAfterDraw); + this._onAfterDraw = null; + } + if (this.#onVisibilityChange) { + document.removeEventListener("visibilitychange", this.#onVisibilityChange); + this.#onVisibilityChange = null; + } + this.viewer.textContent = ""; + this._updateScrollMode(); + this.viewer.removeAttribute("lang"); + if (this.#hiddenCopyElement) { + document.removeEventListener("copy", this.#copyCallbackBound); + this.#copyCallbackBound = null; + this.#hiddenCopyElement.remove(); + this.#hiddenCopyElement = null; + } + } + #ensurePageViewVisible() { + if (this._scrollMode !== ScrollMode.PAGE) { + throw new Error("#ensurePageViewVisible: Invalid scrollMode value."); + } + const pageNumber = this._currentPageNumber, + state = this.#scrollModePageState, + viewer = this.viewer; + viewer.textContent = ""; + state.pages.length = 0; + if (this._spreadMode === SpreadMode.NONE && !this.isInPresentationMode) { + const pageView = this._pages[pageNumber - 1]; + viewer.append(pageView.div); + state.pages.push(pageView); + } else { + const pageIndexSet = new Set(), + parity = this._spreadMode - 1; + if (parity === -1) { + pageIndexSet.add(pageNumber - 1); + } else if (pageNumber % 2 !== parity) { + pageIndexSet.add(pageNumber - 1); + pageIndexSet.add(pageNumber); + } else { + pageIndexSet.add(pageNumber - 2); + pageIndexSet.add(pageNumber - 1); + } + const spread = document.createElement("div"); + spread.className = "spread"; + if (this.isInPresentationMode) { + const dummyPage = document.createElement("div"); + dummyPage.className = "dummyPage"; + spread.append(dummyPage); + } + for (const i of pageIndexSet) { + const pageView = this._pages[i]; + if (!pageView) { + continue; + } + spread.append(pageView.div); + state.pages.push(pageView); + } + viewer.append(spread); + } + state.scrollDown = pageNumber >= state.previousPageNumber; + state.previousPageNumber = pageNumber; + } + _scrollUpdate() { + if (this.pagesCount === 0) { + return; + } + this.update(); + } + #scrollIntoView(pageView, pageSpot = null) { + const { + div, + id + } = pageView; + if (this._currentPageNumber !== id) { + this._setCurrentPageNumber(id); + } + if (this._scrollMode === ScrollMode.PAGE) { + this.#ensurePageViewVisible(); + this.update(); + } + if (!pageSpot && !this.isInPresentationMode) { + const left = div.offsetLeft + div.clientLeft, + right = left + div.clientWidth; + const { + scrollLeft, + clientWidth + } = this.container; + if (this._scrollMode === ScrollMode.HORIZONTAL || left < scrollLeft || right > scrollLeft + clientWidth) { + pageSpot = { + left: 0, + top: 0 + }; + } + } + scrollIntoView(div, pageSpot); + if (!this._currentScaleValue && this._location) { + this._location = null; + } + } + #isSameScale(newScale) { + return newScale === this._currentScale || Math.abs(newScale - this._currentScale) < 1e-15; + } + #setScaleUpdatePages(newScale, newValue, { + noScroll = false, + preset = false, + drawingDelay = -1 + }) { + this._currentScaleValue = newValue.toString(); + if (this.#isSameScale(newScale)) { + if (preset) { + this.eventBus.dispatch("scalechanging", { + source: this, + scale: newScale, + presetValue: newValue + }); + } + return; + } + this.viewer.style.setProperty("--scale-factor", newScale * PixelsPerInch.PDF_TO_CSS_UNITS); + const postponeDrawing = drawingDelay >= 0 && drawingDelay < 1000; + this.refresh(true, { + scale: newScale, + drawingDelay: postponeDrawing ? drawingDelay : -1 + }); + if (postponeDrawing) { + this.#scaleTimeoutId = setTimeout(() => { + this.#scaleTimeoutId = null; + this.refresh(); + }, drawingDelay); + } + this._currentScale = newScale; + if (!noScroll) { + let page = this._currentPageNumber, + dest; + if (this._location && !(this.isInPresentationMode || this.isChangingPresentationMode)) { + page = this._location.pageNumber; + dest = [null, { + name: "XYZ" + }, this._location.left, this._location.top, null]; + } + this.scrollPageIntoView({ + pageNumber: page, + destArray: dest, + allowNegativeOffset: true + }); + } + this.eventBus.dispatch("scalechanging", { + source: this, + scale: newScale, + presetValue: preset ? newValue : undefined + }); + if (this.defaultRenderingQueue) { + this.update(); + } + } + get #pageWidthScaleFactor() { + if (this._spreadMode !== SpreadMode.NONE && this._scrollMode !== ScrollMode.HORIZONTAL) { + return 2; + } + return 1; + } + #setScale(value, options) { + let scale = parseFloat(value); + if (scale > 0) { + options.preset = false; + this.#setScaleUpdatePages(scale, value, options); + } else { + const currentPage = this._pages[this._currentPageNumber - 1]; + if (!currentPage) { + return; + } + let hPadding = SCROLLBAR_PADDING, + vPadding = VERTICAL_PADDING; + if (this.isInPresentationMode) { + hPadding = vPadding = 4; + if (this._spreadMode !== SpreadMode.NONE) { + hPadding *= 2; + } + } else if (this.removePageBorders) { + hPadding = vPadding = 0; + } else if (this._scrollMode === ScrollMode.HORIZONTAL) { + [hPadding, vPadding] = [vPadding, hPadding]; + } + const pageWidthScale = (this.container.clientWidth - hPadding) / currentPage.width * currentPage.scale / this.#pageWidthScaleFactor; + const pageHeightScale = (this.container.clientHeight - vPadding) / currentPage.height * currentPage.scale; + switch (value) { + case "page-actual": + scale = 1; + break; + case "page-width": + scale = pageWidthScale; + break; + case "page-height": + scale = pageHeightScale; + break; + case "page-fit": + scale = Math.min(pageWidthScale, pageHeightScale); + break; + case "auto": + const horizontalScale = isPortraitOrientation(currentPage) ? pageWidthScale : Math.min(pageHeightScale, pageWidthScale); + scale = Math.min(MAX_AUTO_SCALE, horizontalScale); + break; + default: + console.error(`#setScale: "${value}" is an unknown zoom value.`); + return; + } + options.preset = true; + this.#setScaleUpdatePages(scale, value, options); + } + } + #resetCurrentPageView() { + const pageView = this._pages[this._currentPageNumber - 1]; + if (this.isInPresentationMode) { + this.#setScale(this._currentScaleValue, { + noScroll: true + }); + } + this.#scrollIntoView(pageView); + } + pageLabelToPageNumber(label) { + if (!this._pageLabels) { + return null; + } + const i = this._pageLabels.indexOf(label); + if (i < 0) { + return null; + } + return i + 1; + } + scrollPageIntoView({ + pageNumber, + destArray = null, + allowNegativeOffset = false, + ignoreDestinationZoom = false + }) { + if (!this.pdfDocument) { + return; + } + const pageView = Number.isInteger(pageNumber) && this._pages[pageNumber - 1]; + if (!pageView) { + console.error(`scrollPageIntoView: "${pageNumber}" is not a valid pageNumber parameter.`); + return; + } + if (this.isInPresentationMode || !destArray) { + this._setCurrentPageNumber(pageNumber, true); + return; + } + let x = 0, + y = 0; + let width = 0, + height = 0, + widthScale, + heightScale; + const changeOrientation = pageView.rotation % 180 !== 0; + const pageWidth = (changeOrientation ? pageView.height : pageView.width) / pageView.scale / PixelsPerInch.PDF_TO_CSS_UNITS; + const pageHeight = (changeOrientation ? pageView.width : pageView.height) / pageView.scale / PixelsPerInch.PDF_TO_CSS_UNITS; + let scale = 0; + switch (destArray[1].name) { + case "XYZ": + x = destArray[2]; + y = destArray[3]; + scale = destArray[4]; + x = x !== null ? x : 0; + y = y !== null ? y : pageHeight; + break; + case "Fit": + case "FitB": + scale = "page-fit"; + break; + case "FitH": + case "FitBH": + y = destArray[2]; + scale = "page-width"; + if (y === null && this._location) { + x = this._location.left; + y = this._location.top; + } else if (typeof y !== "number" || y < 0) { + y = pageHeight; + } + break; + case "FitV": + case "FitBV": + x = destArray[2]; + width = pageWidth; + height = pageHeight; + scale = "page-height"; + break; + case "FitR": + x = destArray[2]; + y = destArray[3]; + width = destArray[4] - x; + height = destArray[5] - y; + let hPadding = SCROLLBAR_PADDING, + vPadding = VERTICAL_PADDING; + if (this.removePageBorders) { + hPadding = vPadding = 0; + } + widthScale = (this.container.clientWidth - hPadding) / width / PixelsPerInch.PDF_TO_CSS_UNITS; + heightScale = (this.container.clientHeight - vPadding) / height / PixelsPerInch.PDF_TO_CSS_UNITS; + scale = Math.min(Math.abs(widthScale), Math.abs(heightScale)); + break; + default: + console.error(`scrollPageIntoView: "${destArray[1].name}" is not a valid destination type.`); + return; + } + if (!ignoreDestinationZoom) { + if (scale && scale !== this._currentScale) { + this.currentScaleValue = scale; + } else if (this._currentScale === UNKNOWN_SCALE) { + this.currentScaleValue = DEFAULT_SCALE_VALUE; + } + } + if (scale === "page-fit" && !destArray[4]) { + this.#scrollIntoView(pageView); + return; + } + const boundingRect = [pageView.viewport.convertToViewportPoint(x, y), pageView.viewport.convertToViewportPoint(x + width, y + height)]; + let left = Math.min(boundingRect[0][0], boundingRect[1][0]); + let top = Math.min(boundingRect[0][1], boundingRect[1][1]); + if (!allowNegativeOffset) { + left = Math.max(left, 0); + top = Math.max(top, 0); + } + this.#scrollIntoView(pageView, { + left, + top + }); + } + _updateLocation(firstPage) { + const currentScale = this._currentScale; + const currentScaleValue = this._currentScaleValue; + const normalizedScaleValue = parseFloat(currentScaleValue) === currentScale ? Math.round(currentScale * 10000) / 100 : currentScaleValue; + const pageNumber = firstPage.id; + const currentPageView = this._pages[pageNumber - 1]; + const container = this.container; + const topLeft = currentPageView.getPagePoint(container.scrollLeft - firstPage.x, container.scrollTop - firstPage.y); + const intLeft = Math.round(topLeft[0]); + const intTop = Math.round(topLeft[1]); + let pdfOpenParams = `#page=${pageNumber}`; + if (!this.isInPresentationMode) { + pdfOpenParams += `&zoom=${normalizedScaleValue},${intLeft},${intTop}`; + } + this._location = { + pageNumber, + scale: normalizedScaleValue, + top: intTop, + left: intLeft, + rotation: this._pagesRotation, + pdfOpenParams + }; + } + update() { + const visible = this._getVisiblePages(); + const visiblePages = visible.views, + numVisiblePages = visiblePages.length; + if (numVisiblePages === 0) { + return; + } + const newCacheSize = Math.max(DEFAULT_CACHE_SIZE, 2 * numVisiblePages + 1); + this.#buffer.resize(newCacheSize, visible.ids); + this.renderingQueue.renderHighestPriority(visible); + const isSimpleLayout = this._spreadMode === SpreadMode.NONE && (this._scrollMode === ScrollMode.PAGE || this._scrollMode === ScrollMode.VERTICAL); + const currentId = this._currentPageNumber; + let stillFullyVisible = false; + for (const page of visiblePages) { + if (page.percent < 100) { + break; + } + if (page.id === currentId && isSimpleLayout) { + stillFullyVisible = true; + break; + } + } + this._setCurrentPageNumber(stillFullyVisible ? currentId : visiblePages[0].id); + this._updateLocation(visible.first); + this.eventBus.dispatch("updateviewarea", { + source: this, + location: this._location + }); + } + containsElement(element) { + return this.container.contains(element); + } + focus() { + this.container.focus(); + } + get _isContainerRtl() { + return getComputedStyle(this.container).direction === "rtl"; + } + get isInPresentationMode() { + return this.presentationModeState === PresentationModeState.FULLSCREEN; + } + get isChangingPresentationMode() { + return this.presentationModeState === PresentationModeState.CHANGING; + } + get isHorizontalScrollbarEnabled() { + return this.isInPresentationMode ? false : this.container.scrollWidth > this.container.clientWidth; + } + get isVerticalScrollbarEnabled() { + return this.isInPresentationMode ? false : this.container.scrollHeight > this.container.clientHeight; + } + _getVisiblePages() { + const views = this._scrollMode === ScrollMode.PAGE ? this.#scrollModePageState.pages : this._pages, + horizontal = this._scrollMode === ScrollMode.HORIZONTAL, + rtl = horizontal && this._isContainerRtl; + return getVisibleElements({ + scrollEl: this.container, + views, + sortByVisibility: true, + horizontal, + rtl + }); + } + cleanup() { + for (const pageView of this._pages) { + if (pageView.renderingState !== RenderingStates.FINISHED) { + pageView.reset(); + } + } + } + _cancelRendering() { + for (const pageView of this._pages) { + pageView.cancelRendering(); + } + } + async #ensurePdfPageLoaded(pageView) { + if (pageView.pdfPage) { + return pageView.pdfPage; + } + try { + const pdfPage = await this.pdfDocument.getPage(pageView.id); + if (!pageView.pdfPage) { + pageView.setPdfPage(pdfPage); + } + if (!this.linkService._cachedPageNumber?.(pdfPage.ref)) { + this.linkService.cachePageRef(pageView.id, pdfPage.ref); + } + return pdfPage; + } catch (reason) { + console.error("Unable to get page for page view", reason); + return null; + } + } + #getScrollAhead(visible) { + if (visible.first?.id === 1) { + return true; + } else if (visible.last?.id === this.pagesCount) { + return false; + } + switch (this._scrollMode) { + case ScrollMode.PAGE: + return this.#scrollModePageState.scrollDown; + case ScrollMode.HORIZONTAL: + return this.scroll.right; + } + return this.scroll.down; + } + forceRendering(currentlyVisiblePages) { + const visiblePages = currentlyVisiblePages || this._getVisiblePages(); + const scrollAhead = this.#getScrollAhead(visiblePages); + const preRenderExtra = this._spreadMode !== SpreadMode.NONE && this._scrollMode !== ScrollMode.HORIZONTAL; + const pageView = this.renderingQueue.getHighestPriority(visiblePages, this._pages, scrollAhead, preRenderExtra); + if (pageView) { + this.#ensurePdfPageLoaded(pageView).then(() => { + this.renderingQueue.renderView(pageView); + }); + return true; + } + return false; + } + get hasEqualPageSizes() { + const firstPageView = this._pages[0]; + for (let i = 1, ii = this._pages.length; i < ii; ++i) { + const pageView = this._pages[i]; + if (pageView.width !== firstPageView.width || pageView.height !== firstPageView.height) { + return false; + } + } + return true; + } + getPagesOverview() { + let initialOrientation; + return this._pages.map(pageView => { + const viewport = pageView.pdfPage.getViewport({ + scale: 1 + }); + const orientation = isPortraitOrientation(viewport); + if (initialOrientation === undefined) { + initialOrientation = orientation; + } else if (this.enablePrintAutoRotate && orientation !== initialOrientation) { + return { + width: viewport.height, + height: viewport.width, + rotation: (viewport.rotation - 90) % 360 + }; + } + return { + width: viewport.width, + height: viewport.height, + rotation: viewport.rotation + }; + }); + } + get optionalContentConfigPromise() { + if (!this.pdfDocument) { + return Promise.resolve(null); + } + if (!this._optionalContentConfigPromise) { + console.error("optionalContentConfigPromise: Not initialized yet."); + return this.pdfDocument.getOptionalContentConfig(); + } + return this._optionalContentConfigPromise; + } + set optionalContentConfigPromise(promise) { + if (!(promise instanceof Promise)) { + throw new Error(`Invalid optionalContentConfigPromise: ${promise}`); + } + if (!this.pdfDocument) { + return; + } + if (!this._optionalContentConfigPromise) { + return; + } + this._optionalContentConfigPromise = promise; + this.refresh(false, { + optionalContentConfigPromise: promise + }); + this.eventBus.dispatch("optionalcontentconfigchanged", { + source: this, + promise + }); + } + get scrollMode() { + return this._scrollMode; + } + set scrollMode(mode) { + if (this._scrollMode === mode) { + return; + } + if (!isValidScrollMode(mode)) { + throw new Error(`Invalid scroll mode: ${mode}`); + } + if (this.pagesCount > PagesCountLimit.FORCE_SCROLL_MODE_PAGE) { + return; + } + this._previousScrollMode = this._scrollMode; + this._scrollMode = mode; + this.eventBus.dispatch("scrollmodechanged", { + source: this, + mode + }); + this._updateScrollMode(this._currentPageNumber); + } + _updateScrollMode(pageNumber = null) { + const scrollMode = this._scrollMode, + viewer = this.viewer; + viewer.classList.toggle("scrollHorizontal", scrollMode === ScrollMode.HORIZONTAL); + viewer.classList.toggle("scrollWrapped", scrollMode === ScrollMode.WRAPPED); + if (!this.pdfDocument || !pageNumber) { + return; + } + if (scrollMode === ScrollMode.PAGE) { + this.#ensurePageViewVisible(); + } else if (this._previousScrollMode === ScrollMode.PAGE) { + this._updateSpreadMode(); + } + if (this._currentScaleValue && isNaN(this._currentScaleValue)) { + this.#setScale(this._currentScaleValue, { + noScroll: true + }); + } + this._setCurrentPageNumber(pageNumber, true); + this.update(); + } + get spreadMode() { + return this._spreadMode; + } + set spreadMode(mode) { + if (this._spreadMode === mode) { + return; + } + if (!isValidSpreadMode(mode)) { + throw new Error(`Invalid spread mode: ${mode}`); + } + this._spreadMode = mode; + this.eventBus.dispatch("spreadmodechanged", { + source: this, + mode + }); + this._updateSpreadMode(this._currentPageNumber); + } + _updateSpreadMode(pageNumber = null) { + if (!this.pdfDocument) { + return; + } + const viewer = this.viewer, + pages = this._pages; + if (this._scrollMode === ScrollMode.PAGE) { + this.#ensurePageViewVisible(); + } else { + viewer.textContent = ""; + if (this._spreadMode === SpreadMode.NONE) { + for (const pageView of this._pages) { + viewer.append(pageView.div); + } + } else { + const parity = this._spreadMode - 1; + let spread = null; + for (let i = 0, ii = pages.length; i < ii; ++i) { + if (spread === null) { + spread = document.createElement("div"); + spread.className = "spread"; + viewer.append(spread); + } else if (i % 2 === parity) { + spread = spread.cloneNode(false); + viewer.append(spread); + } + spread.append(pages[i].div); + } + } + } + if (!pageNumber) { + return; + } + if (this._currentScaleValue && isNaN(this._currentScaleValue)) { + this.#setScale(this._currentScaleValue, { + noScroll: true + }); + } + this._setCurrentPageNumber(pageNumber, true); + this.update(); + } + _getPageAdvance(currentPageNumber, previous = false) { + switch (this._scrollMode) { + case ScrollMode.WRAPPED: + { + const { + views + } = this._getVisiblePages(), + pageLayout = new Map(); + for (const { + id, + y, + percent, + widthPercent + } of views) { + if (percent === 0 || widthPercent < 100) { + continue; + } + let yArray = pageLayout.get(y); + if (!yArray) { + pageLayout.set(y, yArray ||= []); + } + yArray.push(id); + } + for (const yArray of pageLayout.values()) { + const currentIndex = yArray.indexOf(currentPageNumber); + if (currentIndex === -1) { + continue; + } + const numPages = yArray.length; + if (numPages === 1) { + break; + } + if (previous) { + for (let i = currentIndex - 1, ii = 0; i >= ii; i--) { + const currentId = yArray[i], + expectedId = yArray[i + 1] - 1; + if (currentId < expectedId) { + return currentPageNumber - expectedId; + } + } + } else { + for (let i = currentIndex + 1, ii = numPages; i < ii; i++) { + const currentId = yArray[i], + expectedId = yArray[i - 1] + 1; + if (currentId > expectedId) { + return expectedId - currentPageNumber; + } + } + } + if (previous) { + const firstId = yArray[0]; + if (firstId < currentPageNumber) { + return currentPageNumber - firstId + 1; + } + } else { + const lastId = yArray[numPages - 1]; + if (lastId > currentPageNumber) { + return lastId - currentPageNumber + 1; + } + } + break; + } + break; + } + case ScrollMode.HORIZONTAL: + { + break; + } + case ScrollMode.PAGE: + case ScrollMode.VERTICAL: + { + if (this._spreadMode === SpreadMode.NONE) { + break; + } + const parity = this._spreadMode - 1; + if (previous && currentPageNumber % 2 !== parity) { + break; + } else if (!previous && currentPageNumber % 2 === parity) { + break; + } + const { + views + } = this._getVisiblePages(), + expectedId = previous ? currentPageNumber - 1 : currentPageNumber + 1; + for (const { + id, + percent, + widthPercent + } of views) { + if (id !== expectedId) { + continue; + } + if (percent > 0 && widthPercent === 100) { + return 2; + } + break; + } + break; + } + } + return 1; + } + nextPage() { + const currentPageNumber = this._currentPageNumber, + pagesCount = this.pagesCount; + if (currentPageNumber >= pagesCount) { + return false; + } + const advance = this._getPageAdvance(currentPageNumber, false) || 1; + this.currentPageNumber = Math.min(currentPageNumber + advance, pagesCount); + return true; + } + previousPage() { + const currentPageNumber = this._currentPageNumber; + if (currentPageNumber <= 1) { + return false; + } + const advance = this._getPageAdvance(currentPageNumber, true) || 1; + this.currentPageNumber = Math.max(currentPageNumber - advance, 1); + return true; + } + increaseScale({ + drawingDelay, + scaleFactor, + steps + } = {}) { + if (!this.pdfDocument) { + return; + } + let newScale = this._currentScale; + if (scaleFactor > 1) { + newScale = Math.round(newScale * scaleFactor * 100) / 100; + } else { + steps ??= 1; + do { + newScale = Math.ceil((newScale * DEFAULT_SCALE_DELTA).toFixed(2) * 10) / 10; + } while (--steps > 0 && newScale < MAX_SCALE); + } + this.#setScale(Math.min(MAX_SCALE, newScale), { + noScroll: false, + drawingDelay + }); + } + decreaseScale({ + drawingDelay, + scaleFactor, + steps + } = {}) { + if (!this.pdfDocument) { + return; + } + let newScale = this._currentScale; + if (scaleFactor > 0 && scaleFactor < 1) { + newScale = Math.round(newScale * scaleFactor * 100) / 100; + } else { + steps ??= 1; + do { + newScale = Math.floor((newScale / DEFAULT_SCALE_DELTA).toFixed(2) * 10) / 10; + } while (--steps > 0 && newScale > MIN_SCALE); + } + this.#setScale(Math.max(MIN_SCALE, newScale), { + noScroll: false, + drawingDelay + }); + } + #updateContainerHeightCss(height = this.container.clientHeight) { + if (height !== this.#previousContainerHeight) { + this.#previousContainerHeight = height; + docStyle.setProperty("--viewer-container-height", `${height}px`); + } + } + #resizeObserverCallback(entries) { + for (const entry of entries) { + if (entry.target === this.container) { + this.#updateContainerHeightCss(Math.floor(entry.borderBoxSize[0].blockSize)); + this.#containerTopLeft = null; + break; + } + } + } + get containerTopLeft() { + return this.#containerTopLeft ||= [this.container.offsetTop, this.container.offsetLeft]; + } + get annotationEditorMode() { + return this.#annotationEditorUIManager ? this.#annotationEditorMode : AnnotationEditorType.DISABLE; + } + set annotationEditorMode({ + mode, + editId = null, + isFromKeyboard = false + }) { + if (!this.#annotationEditorUIManager) { + throw new Error(`The AnnotationEditor is not enabled.`); + } + if (this.#annotationEditorMode === mode) { + return; + } + if (!isValidAnnotationEditorMode(mode)) { + throw new Error(`Invalid AnnotationEditor mode: ${mode}`); + } + if (!this.pdfDocument) { + return; + } + this.#annotationEditorMode = mode; + this.eventBus.dispatch("annotationeditormodechanged", { + source: this, + mode + }); + this.#annotationEditorUIManager.updateMode(mode, editId, isFromKeyboard); + } + set annotationEditorParams({ + type, + value + }) { + if (!this.#annotationEditorUIManager) { + throw new Error(`The AnnotationEditor is not enabled.`); + } + this.#annotationEditorUIManager.updateParams(type, value); + } + refresh(noUpdate = false, updateArgs = Object.create(null)) { + if (!this.pdfDocument) { + return; + } + for (const pageView of this._pages) { + pageView.update(updateArgs); + } + if (this.#scaleTimeoutId !== null) { + clearTimeout(this.#scaleTimeoutId); + this.#scaleTimeoutId = null; + } + if (!noUpdate) { + this.update(); + } + } +} + +;// CONCATENATED MODULE: ./web/secondary_toolbar.js + + +class SecondaryToolbar { + constructor(options, eventBus) { + this.toolbar = options.toolbar; + this.toggleButton = options.toggleButton; + this.buttons = [{ + element: options.presentationModeButton, + eventName: "presentationmode", + close: true + }, { + element: options.printButton, + eventName: "print", + close: true + }, { + element: options.downloadButton, + eventName: "download", + close: true + }, { + element: options.viewBookmarkButton, + eventName: null, + close: true + }, { + element: options.firstPageButton, + eventName: "firstpage", + close: true + }, { + element: options.lastPageButton, + eventName: "lastpage", + close: true + }, { + element: options.pageRotateCwButton, + eventName: "rotatecw", + close: false + }, { + element: options.pageRotateCcwButton, + eventName: "rotateccw", + close: false + }, { + element: options.cursorSelectToolButton, + eventName: "switchcursortool", + eventDetails: { + tool: CursorTool.SELECT + }, + close: true + }, { + element: options.cursorHandToolButton, + eventName: "switchcursortool", + eventDetails: { + tool: CursorTool.HAND + }, + close: true + }, { + element: options.scrollPageButton, + eventName: "switchscrollmode", + eventDetails: { + mode: ScrollMode.PAGE + }, + close: true + }, { + element: options.scrollVerticalButton, + eventName: "switchscrollmode", + eventDetails: { + mode: ScrollMode.VERTICAL + }, + close: true + }, { + element: options.scrollHorizontalButton, + eventName: "switchscrollmode", + eventDetails: { + mode: ScrollMode.HORIZONTAL + }, + close: true + }, { + element: options.scrollWrappedButton, + eventName: "switchscrollmode", + eventDetails: { + mode: ScrollMode.WRAPPED + }, + close: true + }, { + element: options.spreadNoneButton, + eventName: "switchspreadmode", + eventDetails: { + mode: SpreadMode.NONE + }, + close: true + }, { + element: options.spreadOddButton, + eventName: "switchspreadmode", + eventDetails: { + mode: SpreadMode.ODD + }, + close: true + }, { + element: options.spreadEvenButton, + eventName: "switchspreadmode", + eventDetails: { + mode: SpreadMode.EVEN + }, + close: true + }, { + element: options.documentPropertiesButton, + eventName: "documentproperties", + close: true + }]; + this.buttons.push({ + element: options.openFileButton, + eventName: "openfile", + close: true + }); + this.items = { + firstPage: options.firstPageButton, + lastPage: options.lastPageButton, + pageRotateCw: options.pageRotateCwButton, + pageRotateCcw: options.pageRotateCcwButton + }; + this.eventBus = eventBus; + this.opened = false; + this.#bindClickListeners(); + this.#bindCursorToolsListener(options); + this.#bindScrollModeListener(options); + this.#bindSpreadModeListener(options); + this.reset(); + } + get isOpen() { + return this.opened; + } + setPageNumber(pageNumber) { + this.pageNumber = pageNumber; + this.#updateUIState(); + } + setPagesCount(pagesCount) { + this.pagesCount = pagesCount; + this.#updateUIState(); + } + reset() { + this.pageNumber = 0; + this.pagesCount = 0; + this.#updateUIState(); + this.eventBus.dispatch("secondarytoolbarreset", { + source: this + }); + } + #updateUIState() { + this.items.firstPage.disabled = this.pageNumber <= 1; + this.items.lastPage.disabled = this.pageNumber >= this.pagesCount; + this.items.pageRotateCw.disabled = this.pagesCount === 0; + this.items.pageRotateCcw.disabled = this.pagesCount === 0; + } + #bindClickListeners() { + this.toggleButton.addEventListener("click", this.toggle.bind(this)); + for (const { + element, + eventName, + close, + eventDetails + } of this.buttons) { + element.addEventListener("click", evt => { + if (eventName !== null) { + this.eventBus.dispatch(eventName, { + source: this, + ...eventDetails + }); + } + if (close) { + this.close(); + } + this.eventBus.dispatch("reporttelemetry", { + source: this, + details: { + type: "buttons", + data: { + id: element.id + } + } + }); + }); + } + } + #bindCursorToolsListener({ + cursorSelectToolButton, + cursorHandToolButton + }) { + this.eventBus._on("cursortoolchanged", ({ + tool + }) => { + toggleCheckedBtn(cursorSelectToolButton, tool === CursorTool.SELECT); + toggleCheckedBtn(cursorHandToolButton, tool === CursorTool.HAND); + }); + } + #bindScrollModeListener({ + scrollPageButton, + scrollVerticalButton, + scrollHorizontalButton, + scrollWrappedButton, + spreadNoneButton, + spreadOddButton, + spreadEvenButton + }) { + const scrollModeChanged = ({ + mode + }) => { + toggleCheckedBtn(scrollPageButton, mode === ScrollMode.PAGE); + toggleCheckedBtn(scrollVerticalButton, mode === ScrollMode.VERTICAL); + toggleCheckedBtn(scrollHorizontalButton, mode === ScrollMode.HORIZONTAL); + toggleCheckedBtn(scrollWrappedButton, mode === ScrollMode.WRAPPED); + const forceScrollModePage = this.pagesCount > PagesCountLimit.FORCE_SCROLL_MODE_PAGE; + scrollPageButton.disabled = forceScrollModePage; + scrollVerticalButton.disabled = forceScrollModePage; + scrollHorizontalButton.disabled = forceScrollModePage; + scrollWrappedButton.disabled = forceScrollModePage; + const isHorizontal = mode === ScrollMode.HORIZONTAL; + spreadNoneButton.disabled = isHorizontal; + spreadOddButton.disabled = isHorizontal; + spreadEvenButton.disabled = isHorizontal; + }; + this.eventBus._on("scrollmodechanged", scrollModeChanged); + this.eventBus._on("secondarytoolbarreset", evt => { + if (evt.source === this) { + scrollModeChanged({ + mode: ScrollMode.VERTICAL + }); + } + }); + } + #bindSpreadModeListener({ + spreadNoneButton, + spreadOddButton, + spreadEvenButton + }) { + const spreadModeChanged = ({ + mode + }) => { + toggleCheckedBtn(spreadNoneButton, mode === SpreadMode.NONE); + toggleCheckedBtn(spreadOddButton, mode === SpreadMode.ODD); + toggleCheckedBtn(spreadEvenButton, mode === SpreadMode.EVEN); + }; + this.eventBus._on("spreadmodechanged", spreadModeChanged); + this.eventBus._on("secondarytoolbarreset", evt => { + if (evt.source === this) { + spreadModeChanged({ + mode: SpreadMode.NONE + }); + } + }); + } + open() { + if (this.opened) { + return; + } + this.opened = true; + toggleExpandedBtn(this.toggleButton, true, this.toolbar); + } + close() { + if (!this.opened) { + return; + } + this.opened = false; + toggleExpandedBtn(this.toggleButton, false, this.toolbar); + } + toggle() { + if (this.opened) { + this.close(); + } else { + this.open(); + } + } +} + +;// CONCATENATED MODULE: ./web/toolbar.js + + +const PAGE_NUMBER_LOADING_INDICATOR = "visiblePageIsLoading"; +class Toolbar { + constructor(options, eventBus) { + this.toolbar = options.container; + this.eventBus = eventBus; + this.buttons = [{ + element: options.previous, + eventName: "previouspage" + }, { + element: options.next, + eventName: "nextpage" + }, { + element: options.zoomIn, + eventName: "zoomin" + }, { + element: options.zoomOut, + eventName: "zoomout" + }, { + element: options.print, + eventName: "print" + }, { + element: options.download, + eventName: "download" + }, { + element: options.editorFreeTextButton, + eventName: "switchannotationeditormode", + eventDetails: { + get mode() { + const { + classList + } = options.editorFreeTextButton; + return classList.contains("toggled") ? AnnotationEditorType.NONE : AnnotationEditorType.FREETEXT; + } + } + }, { + element: options.editorInkButton, + eventName: "switchannotationeditormode", + eventDetails: { + get mode() { + const { + classList + } = options.editorInkButton; + return classList.contains("toggled") ? AnnotationEditorType.NONE : AnnotationEditorType.INK; + } + } + }, { + element: options.editorStampButton, + eventName: "switchannotationeditormode", + eventDetails: { + get mode() { + const { + classList + } = options.editorStampButton; + return classList.contains("toggled") ? AnnotationEditorType.NONE : AnnotationEditorType.STAMP; + } + } + }]; + this.buttons.push({ + element: options.openFile, + eventName: "openfile" + }); + this.items = { + numPages: options.numPages, + pageNumber: options.pageNumber, + scaleSelect: options.scaleSelect, + customScaleOption: options.customScaleOption, + previous: options.previous, + next: options.next, + zoomIn: options.zoomIn, + zoomOut: options.zoomOut + }; + this.#bindListeners(options); + this.reset(); + } + setPageNumber(pageNumber, pageLabel) { + this.pageNumber = pageNumber; + this.pageLabel = pageLabel; + this.#updateUIState(false); + } + setPagesCount(pagesCount, hasPageLabels) { + this.pagesCount = pagesCount; + this.hasPageLabels = hasPageLabels; + this.#updateUIState(true); + } + setPageScale(pageScaleValue, pageScale) { + this.pageScaleValue = (pageScaleValue || pageScale).toString(); + this.pageScale = pageScale; + this.#updateUIState(false); + } + reset() { + this.pageNumber = 0; + this.pageLabel = null; + this.hasPageLabels = false; + this.pagesCount = 0; + this.pageScaleValue = DEFAULT_SCALE_VALUE; + this.pageScale = DEFAULT_SCALE; + this.#updateUIState(true); + this.updateLoadingIndicatorState(); + this.eventBus.dispatch("toolbarreset", { + source: this + }); + } + #bindListeners(options) { + const { + pageNumber, + scaleSelect + } = this.items; + const self = this; + for (const { + element, + eventName, + eventDetails + } of this.buttons) { + element.addEventListener("click", evt => { + if (eventName !== null) { + this.eventBus.dispatch(eventName, { + source: this, + ...eventDetails, + isFromKeyboard: evt.detail === 0 + }); + } + }); + } + pageNumber.addEventListener("click", function () { + this.select(); + }); + pageNumber.addEventListener("change", function () { + self.eventBus.dispatch("pagenumberchanged", { + source: self, + value: this.value + }); + }); + scaleSelect.addEventListener("change", function () { + if (this.value === "custom") { + return; + } + self.eventBus.dispatch("scalechanged", { + source: self, + value: this.value + }); + }); + scaleSelect.addEventListener("click", function (evt) { + const target = evt.target; + if (this.value === self.pageScaleValue && target.tagName.toUpperCase() === "OPTION") { + this.blur(); + } + }); + scaleSelect.oncontextmenu = noContextMenu; + this.#bindEditorToolsListener(options); + } + #bindEditorToolsListener({ + editorFreeTextButton, + editorFreeTextParamsToolbar, + editorInkButton, + editorInkParamsToolbar, + editorStampButton, + editorStampParamsToolbar + }) { + const editorModeChanged = ({ + mode + }) => { + toggleCheckedBtn(editorFreeTextButton, mode === AnnotationEditorType.FREETEXT, editorFreeTextParamsToolbar); + toggleCheckedBtn(editorInkButton, mode === AnnotationEditorType.INK, editorInkParamsToolbar); + toggleCheckedBtn(editorStampButton, mode === AnnotationEditorType.STAMP, editorStampParamsToolbar); + const isDisable = mode === AnnotationEditorType.DISABLE; + editorFreeTextButton.disabled = isDisable; + editorInkButton.disabled = isDisable; + editorStampButton.disabled = isDisable; + }; + this.eventBus._on("annotationeditormodechanged", editorModeChanged); + this.eventBus._on("toolbarreset", evt => { + if (evt.source === this) { + editorModeChanged({ + mode: AnnotationEditorType.DISABLE + }); + } + }); + } + #updateUIState(resetNumPages = false) { + const { + pageNumber, + pagesCount, + pageScaleValue, + pageScale, + items + } = this; + if (resetNumPages) { + if (this.hasPageLabels) { + items.pageNumber.type = "text"; + items.numPages.setAttribute("data-l10n-id", "pdfjs-page-of-pages"); + } else { + items.pageNumber.type = "number"; + items.numPages.setAttribute("data-l10n-id", "pdfjs-of-pages"); + items.numPages.setAttribute("data-l10n-args", JSON.stringify({ + pagesCount + })); + } + items.pageNumber.max = pagesCount; + } + if (this.hasPageLabels) { + items.pageNumber.value = this.pageLabel; + items.numPages.setAttribute("data-l10n-args", JSON.stringify({ + pageNumber, + pagesCount + })); + } else { + items.pageNumber.value = pageNumber; + } + items.previous.disabled = pageNumber <= 1; + items.next.disabled = pageNumber >= pagesCount; + items.zoomOut.disabled = pageScale <= MIN_SCALE; + items.zoomIn.disabled = pageScale >= MAX_SCALE; + let predefinedValueFound = false; + for (const option of items.scaleSelect.options) { + if (option.value !== pageScaleValue) { + option.selected = false; + continue; + } + option.selected = true; + predefinedValueFound = true; + } + if (!predefinedValueFound) { + items.customScaleOption.selected = true; + items.customScaleOption.setAttribute("data-l10n-args", JSON.stringify({ + scale: Math.round(pageScale * 10000) / 100 + })); + } + } + updateLoadingIndicatorState(loading = false) { + const { + pageNumber + } = this.items; + pageNumber.classList.toggle(PAGE_NUMBER_LOADING_INDICATOR, loading); + } +} + +;// CONCATENATED MODULE: ./web/view_history.js +const DEFAULT_VIEW_HISTORY_CACHE_SIZE = 20; +class ViewHistory { + constructor(fingerprint, cacheSize = DEFAULT_VIEW_HISTORY_CACHE_SIZE) { + this.fingerprint = fingerprint; + this.cacheSize = cacheSize; + this._initializedPromise = this._readFromStorage().then(databaseStr => { + const database = JSON.parse(databaseStr || "{}"); + let index = -1; + if (!Array.isArray(database.files)) { + database.files = []; + } else { + while (database.files.length >= this.cacheSize) { + database.files.shift(); + } + for (let i = 0, ii = database.files.length; i < ii; i++) { + const branch = database.files[i]; + if (branch.fingerprint === this.fingerprint) { + index = i; + break; + } + } + } + if (index === -1) { + index = database.files.push({ + fingerprint: this.fingerprint + }) - 1; + } + this.file = database.files[index]; + this.database = database; + }); + } + async _writeToStorage() { + const databaseStr = JSON.stringify(this.database); + localStorage.setItem("pdfjs.history", databaseStr); + } + async _readFromStorage() { + return localStorage.getItem("pdfjs.history"); + } + async set(name, val) { + await this._initializedPromise; + this.file[name] = val; + return this._writeToStorage(); + } + async setMultiple(properties) { + await this._initializedPromise; + for (const name in properties) { + this.file[name] = properties[name]; + } + return this._writeToStorage(); + } + async get(name, defaultValue) { + await this._initializedPromise; + const val = this.file[name]; + return val !== undefined ? val : defaultValue; + } + async getMultiple(properties) { + await this._initializedPromise; + const values = Object.create(null); + for (const name in properties) { + const val = this.file[name]; + values[name] = val !== undefined ? val : properties[name]; + } + return values; + } +} + +;// CONCATENATED MODULE: ./web/app.js + + + + + + + + + + + + + + + + + + + + + + + + + + +const FORCE_PAGES_LOADED_TIMEOUT = 10000; +const WHEEL_ZOOM_DISABLED_TIMEOUT = 1000; +const ViewOnLoad = { + UNKNOWN: -1, + PREVIOUS: 0, + INITIAL: 1 +}; +class DefaultExternalServices { + constructor() { + throw new Error("Cannot initialize DefaultExternalServices."); + } + static updateFindControlState(data) {} + static updateFindMatchesCount(data) {} + static initPassiveLoading(callbacks) {} + static reportTelemetry(data) {} + static createDownloadManager() { + throw new Error("Not implemented: createDownloadManager"); + } + static createPreferences() { + throw new Error("Not implemented: createPreferences"); + } + static async createL10n() { + throw new Error("Not implemented: createL10n"); + } + static createScripting(options) { + throw new Error("Not implemented: createScripting"); + } + static updateEditorStates(data) { + throw new Error("Not implemented: updateEditorStates"); + } + static getNimbusExperimentData() { + return shadow(this, "getNimbusExperimentData", Promise.resolve(null)); + } +} +const PDFViewerApplication = { + initialBookmark: document.location.hash.substring(1), + _initializedCapability: new PromiseCapability(), + appConfig: null, + pdfDocument: null, + pdfLoadingTask: null, + printService: null, + pdfViewer: null, + pdfThumbnailViewer: null, + pdfRenderingQueue: null, + pdfPresentationMode: null, + pdfDocumentProperties: null, + pdfLinkService: null, + pdfHistory: null, + pdfSidebar: null, + pdfOutlineViewer: null, + pdfAttachmentViewer: null, + pdfLayerViewer: null, + pdfCursorTools: null, + pdfScriptingManager: null, + store: null, + downloadManager: null, + overlayManager: null, + preferences: null, + toolbar: null, + secondaryToolbar: null, + eventBus: null, + l10n: null, + annotationEditorParams: null, + isInitialViewSet: false, + downloadComplete: false, + isViewerEmbedded: window.parent !== window, + url: "", + baseUrl: "", + _downloadUrl: "", + externalServices: DefaultExternalServices, + _boundEvents: Object.create(null), + documentInfo: null, + metadata: null, + _contentDispositionFilename: null, + _contentLength: null, + _saveInProgress: false, + _wheelUnusedTicks: 0, + _wheelUnusedFactor: 1, + _touchUnusedTicks: 0, + _touchUnusedFactor: 1, + _PDFBug: null, + _hasAnnotationEditors: false, + _title: document.title, + _printAnnotationStoragePromise: null, + _touchInfo: null, + _isCtrlKeyDown: false, + _nimbusDataPromise: null, + async initialize(appConfig) { + let l10nPromise; + this.appConfig = appConfig; + try { + await this.preferences.initializedPromise; + } catch (ex) { + console.error(`initialize: "${ex.message}".`); + } + if (AppOptions.get("pdfBugEnabled")) { + await this._parseHashParams(); + } + l10nPromise = this.externalServices.createL10n(); + this.l10n = await l10nPromise; + document.getElementsByTagName("html")[0].dir = this.l10n.getDirection(); + this.l10n.translate(appConfig.appContainer || document.documentElement); + if (this.isViewerEmbedded && AppOptions.get("externalLinkTarget") === LinkTarget.NONE) { + AppOptions.set("externalLinkTarget", LinkTarget.TOP); + } + await this._initializeViewerComponents(); + this.bindEvents(); + this.bindWindowEvents(); + this._initializedCapability.resolve(); + }, + async _parseHashParams() { + const hash = document.location.hash.substring(1); + if (!hash) { + return; + } + const { + mainContainer, + viewerContainer + } = this.appConfig, + params = parseQueryString(hash); + if (params.get("disableworker") === "true") { + try { + await loadFakeWorker(); + } catch (ex) { + console.error(`_parseHashParams: "${ex.message}".`); + } + } + if (params.has("disablerange")) { + AppOptions.set("disableRange", params.get("disablerange") === "true"); + } + if (params.has("disablestream")) { + AppOptions.set("disableStream", params.get("disablestream") === "true"); + } + if (params.has("disableautofetch")) { + AppOptions.set("disableAutoFetch", params.get("disableautofetch") === "true"); + } + if (params.has("disablefontface")) { + AppOptions.set("disableFontFace", params.get("disablefontface") === "true"); + } + if (params.has("disablehistory")) { + AppOptions.set("disableHistory", params.get("disablehistory") === "true"); + } + if (params.has("verbosity")) { + AppOptions.set("verbosity", params.get("verbosity") | 0); + } + if (params.has("textlayer")) { + switch (params.get("textlayer")) { + case "off": + AppOptions.set("textLayerMode", TextLayerMode.DISABLE); + break; + case "visible": + case "shadow": + case "hover": + viewerContainer.classList.add(`textLayer-${params.get("textlayer")}`); + try { + await loadPDFBug(this); + this._PDFBug.loadCSS(); + } catch (ex) { + console.error(`_parseHashParams: "${ex.message}".`); + } + break; + } + } + if (params.has("pdfbug")) { + AppOptions.set("pdfBug", true); + AppOptions.set("fontExtraProperties", true); + const enabled = params.get("pdfbug").split(","); + try { + await loadPDFBug(this); + this._PDFBug.init(mainContainer, enabled); + } catch (ex) { + console.error(`_parseHashParams: "${ex.message}".`); + } + } + if (params.has("locale")) { + AppOptions.set("locale", params.get("locale")); + } + }, + async _initializeViewerComponents() { + const { + appConfig, + externalServices, + l10n + } = this; + const eventBus = AppOptions.get("isInAutomation") ? new AutomationEventBus() : new EventBus(); + this.eventBus = eventBus; + this.overlayManager = new OverlayManager(); + const pdfRenderingQueue = new PDFRenderingQueue(); + pdfRenderingQueue.onIdle = this._cleanup.bind(this); + this.pdfRenderingQueue = pdfRenderingQueue; + const pdfLinkService = new PDFLinkService({ + eventBus, + externalLinkTarget: AppOptions.get("externalLinkTarget"), + externalLinkRel: AppOptions.get("externalLinkRel"), + ignoreDestinationZoom: AppOptions.get("ignoreDestinationZoom") + }); + this.pdfLinkService = pdfLinkService; + const downloadManager = externalServices.createDownloadManager(); + this.downloadManager = downloadManager; + const findController = new PDFFindController({ + linkService: pdfLinkService, + eventBus, + updateMatchesCountOnProgress: true + }); + this.findController = findController; + const pdfScriptingManager = new PDFScriptingManager({ + eventBus, + sandboxBundleSrc: AppOptions.get("sandboxBundleSrc"), + externalServices, + docProperties: this._scriptingDocProperties.bind(this) + }); + this.pdfScriptingManager = pdfScriptingManager; + const container = appConfig.mainContainer, + viewer = appConfig.viewerContainer; + const annotationEditorMode = AppOptions.get("annotationEditorMode"); + const isOffscreenCanvasSupported = AppOptions.get("isOffscreenCanvasSupported") && FeatureTest.isOffscreenCanvasSupported; + const pageColors = AppOptions.get("forcePageColors") || window.matchMedia("(forced-colors: active)").matches ? { + background: AppOptions.get("pageColorsBackground"), + foreground: AppOptions.get("pageColorsForeground") + } : null; + const altTextManager = appConfig.altTextDialog ? new AltTextManager(appConfig.altTextDialog, container, this.overlayManager, eventBus) : null; + const pdfViewer = new PDFViewer({ + container, + viewer, + eventBus, + renderingQueue: pdfRenderingQueue, + linkService: pdfLinkService, + downloadManager, + altTextManager, + findController, + scriptingManager: AppOptions.get("enableScripting") && pdfScriptingManager, + l10n, + textLayerMode: AppOptions.get("textLayerMode"), + annotationMode: AppOptions.get("annotationMode"), + annotationEditorMode, + imageResourcesPath: AppOptions.get("imageResourcesPath"), + enablePrintAutoRotate: AppOptions.get("enablePrintAutoRotate"), + isOffscreenCanvasSupported, + maxCanvasPixels: AppOptions.get("maxCanvasPixels"), + enablePermissions: AppOptions.get("enablePermissions"), + pageColors + }); + this.pdfViewer = pdfViewer; + pdfRenderingQueue.setViewer(pdfViewer); + pdfLinkService.setViewer(pdfViewer); + pdfScriptingManager.setViewer(pdfViewer); + if (appConfig.sidebar?.thumbnailView) { + this.pdfThumbnailViewer = new PDFThumbnailViewer({ + container: appConfig.sidebar.thumbnailView, + eventBus, + renderingQueue: pdfRenderingQueue, + linkService: pdfLinkService, + pageColors + }); + pdfRenderingQueue.setThumbnailViewer(this.pdfThumbnailViewer); + } + if (!this.isViewerEmbedded && !AppOptions.get("disableHistory")) { + this.pdfHistory = new PDFHistory({ + linkService: pdfLinkService, + eventBus + }); + pdfLinkService.setHistory(this.pdfHistory); + } + if (!this.supportsIntegratedFind && appConfig.findBar) { + this.findBar = new PDFFindBar(appConfig.findBar, eventBus); + } + if (appConfig.annotationEditorParams) { + if (annotationEditorMode !== AnnotationEditorType.DISABLE) { + if (!isOffscreenCanvasSupported) { + appConfig.toolbar?.editorStampButton?.classList.add("hidden"); + } + this.annotationEditorParams = new AnnotationEditorParams(appConfig.annotationEditorParams, eventBus); + } else { + for (const id of ["editorModeButtons", "editorModeSeparator"]) { + document.getElementById(id)?.classList.add("hidden"); + } + } + } + if (appConfig.documentProperties) { + this.pdfDocumentProperties = new PDFDocumentProperties(appConfig.documentProperties, this.overlayManager, eventBus, l10n, () => this._docFilename); + } + if (appConfig.secondaryToolbar?.cursorHandToolButton) { + this.pdfCursorTools = new PDFCursorTools({ + container, + eventBus, + cursorToolOnLoad: AppOptions.get("cursorToolOnLoad") + }); + } + if (appConfig.toolbar) { + this.toolbar = new Toolbar(appConfig.toolbar, eventBus); + } + if (appConfig.secondaryToolbar) { + this.secondaryToolbar = new SecondaryToolbar(appConfig.secondaryToolbar, eventBus); + } + if (this.supportsFullscreen && appConfig.secondaryToolbar?.presentationModeButton) { + this.pdfPresentationMode = new PDFPresentationMode({ + container, + pdfViewer, + eventBus + }); + } + if (appConfig.passwordOverlay) { + this.passwordPrompt = new PasswordPrompt(appConfig.passwordOverlay, this.overlayManager, this.isViewerEmbedded); + } + if (appConfig.sidebar?.outlineView) { + this.pdfOutlineViewer = new PDFOutlineViewer({ + container: appConfig.sidebar.outlineView, + eventBus, + l10n, + linkService: pdfLinkService, + downloadManager + }); + } + if (appConfig.sidebar?.attachmentsView) { + this.pdfAttachmentViewer = new PDFAttachmentViewer({ + container: appConfig.sidebar.attachmentsView, + eventBus, + l10n, + downloadManager + }); + } + if (appConfig.sidebar?.layersView) { + this.pdfLayerViewer = new PDFLayerViewer({ + container: appConfig.sidebar.layersView, + eventBus, + l10n + }); + } + if (appConfig.sidebar) { + this.pdfSidebar = new PDFSidebar({ + elements: appConfig.sidebar, + eventBus, + l10n + }); + this.pdfSidebar.onToggled = this.forceRendering.bind(this); + this.pdfSidebar.onUpdateThumbnails = () => { + for (const pageView of pdfViewer.getCachedPageViews()) { + if (pageView.renderingState === RenderingStates.FINISHED) { + this.pdfThumbnailViewer.getThumbnail(pageView.id - 1)?.setImage(pageView); + } + } + this.pdfThumbnailViewer.scrollThumbnailIntoView(pdfViewer.currentPageNumber); + }; + } + }, + async run(config) { + this.preferences = this.externalServices.createPreferences(); + await this.initialize(config); + const { + appConfig, + eventBus + } = this; + let file; + const queryString = document.location.search.substring(1); + const params = parseQueryString(queryString); + file = params.get("file") ?? AppOptions.get("defaultUrl"); + validateFileURL(file); + const fileInput = appConfig.openFileInput; + fileInput.value = null; + fileInput.addEventListener("change", function (evt) { + const { + files + } = evt.target; + if (!files || files.length === 0) { + return; + } + eventBus.dispatch("fileinputchange", { + source: this, + fileInput: evt.target + }); + }); + appConfig.mainContainer.addEventListener("dragover", function (evt) { + evt.preventDefault(); + evt.dataTransfer.dropEffect = evt.dataTransfer.effectAllowed === "copy" ? "copy" : "move"; + }); + appConfig.mainContainer.addEventListener("drop", function (evt) { + evt.preventDefault(); + const { + files + } = evt.dataTransfer; + if (!files || files.length === 0) { + return; + } + eventBus.dispatch("fileinputchange", { + source: this, + fileInput: evt.dataTransfer + }); + }); + if (!AppOptions.get("supportsDocumentFonts")) { + AppOptions.set("disableFontFace", true); + this.l10n.get("pdfjs-web-fonts-disabled").then(msg => { + console.warn(msg); + }); + } + if (!this.supportsPrinting) { + appConfig.toolbar?.print?.classList.add("hidden"); + appConfig.secondaryToolbar?.printButton.classList.add("hidden"); + } + if (!this.supportsFullscreen) { + appConfig.secondaryToolbar?.presentationModeButton.classList.add("hidden"); + } + if (this.supportsIntegratedFind) { + appConfig.toolbar?.viewFind?.classList.add("hidden"); + } + appConfig.mainContainer.addEventListener("transitionend", function (evt) { + if (evt.target === this) { + eventBus.dispatch("resize", { + source: this + }); + } + }, true); + if (file) { + this.open({ + url: file + }); + } else { + this._hideViewBookmark(); + } + }, + get initialized() { + return this._initializedCapability.settled; + }, + get initializedPromise() { + return this._initializedCapability.promise; + }, + zoomIn(steps, scaleFactor) { + if (this.pdfViewer.isInPresentationMode) { + return; + } + this.pdfViewer.increaseScale({ + drawingDelay: AppOptions.get("defaultZoomDelay"), + steps, + scaleFactor + }); + }, + zoomOut(steps, scaleFactor) { + if (this.pdfViewer.isInPresentationMode) { + return; + } + this.pdfViewer.decreaseScale({ + drawingDelay: AppOptions.get("defaultZoomDelay"), + steps, + scaleFactor + }); + }, + zoomReset() { + if (this.pdfViewer.isInPresentationMode) { + return; + } + this.pdfViewer.currentScaleValue = DEFAULT_SCALE_VALUE; + }, + get pagesCount() { + return this.pdfDocument ? this.pdfDocument.numPages : 0; + }, + get page() { + return this.pdfViewer.currentPageNumber; + }, + set page(val) { + this.pdfViewer.currentPageNumber = val; + }, + get supportsPrinting() { + return PDFPrintServiceFactory.instance.supportsPrinting; + }, + get supportsFullscreen() { + return shadow(this, "supportsFullscreen", document.fullscreenEnabled); + }, + get supportsPinchToZoom() { + return shadow(this, "supportsPinchToZoom", AppOptions.get("supportsPinchToZoom")); + }, + get supportsIntegratedFind() { + return shadow(this, "supportsIntegratedFind", AppOptions.get("supportsIntegratedFind")); + }, + get loadingBar() { + const barElement = document.getElementById("loadingBar"); + const bar = barElement ? new ProgressBar(barElement) : null; + return shadow(this, "loadingBar", bar); + }, + get supportsMouseWheelZoomCtrlKey() { + return shadow(this, "supportsMouseWheelZoomCtrlKey", AppOptions.get("supportsMouseWheelZoomCtrlKey")); + }, + get supportsMouseWheelZoomMetaKey() { + return shadow(this, "supportsMouseWheelZoomMetaKey", AppOptions.get("supportsMouseWheelZoomMetaKey")); + }, + initPassiveLoading(file) { + throw new Error("Not implemented: initPassiveLoading"); + }, + setTitleUsingUrl(url = "", downloadUrl = null) { + this.url = url; + this.baseUrl = url.split("#", 1)[0]; + if (downloadUrl) { + this._downloadUrl = downloadUrl === url ? this.baseUrl : downloadUrl.split("#", 1)[0]; + } + if (isDataScheme(url)) { + this._hideViewBookmark(); + } + let title = pdfjs_getPdfFilenameFromUrl(url, ""); + if (!title) { + try { + title = decodeURIComponent(getFilenameFromUrl(url)) || url; + } catch { + title = url; + } + } + this.setTitle(title); + }, + setTitle(title = this._title) { + this._title = title; + if (this.isViewerEmbedded) { + return; + } + const editorIndicator = this._hasAnnotationEditors && !this.pdfRenderingQueue.printing; + document.title = `${editorIndicator ? "* " : ""}${title}`; + }, + get _docFilename() { + return this._contentDispositionFilename || pdfjs_getPdfFilenameFromUrl(this.url); + }, + _hideViewBookmark() { + const { + secondaryToolbar + } = this.appConfig; + secondaryToolbar?.viewBookmarkButton.classList.add("hidden"); + if (secondaryToolbar?.presentationModeButton.classList.contains("hidden")) { + document.getElementById("viewBookmarkSeparator")?.classList.add("hidden"); + } + }, + async close() { + this._unblockDocumentLoadEvent(); + this._hideViewBookmark(); + if (!this.pdfLoadingTask) { + return; + } + if (this.pdfDocument?.annotationStorage.size > 0 && this._annotationStorageModified) { + try { + await this.save(); + } catch {} + } + const promises = []; + promises.push(this.pdfLoadingTask.destroy()); + this.pdfLoadingTask = null; + if (this.pdfDocument) { + this.pdfDocument = null; + this.pdfThumbnailViewer?.setDocument(null); + this.pdfViewer.setDocument(null); + this.pdfLinkService.setDocument(null); + this.pdfDocumentProperties?.setDocument(null); + } + this.pdfLinkService.externalLinkEnabled = true; + this.store = null; + this.isInitialViewSet = false; + this.downloadComplete = false; + this.url = ""; + this.baseUrl = ""; + this._downloadUrl = ""; + this.documentInfo = null; + this.metadata = null; + this._contentDispositionFilename = null; + this._contentLength = null; + this._saveInProgress = false; + this._hasAnnotationEditors = false; + promises.push(this.pdfScriptingManager.destroyPromise, this.passwordPrompt.close()); + this.setTitle(); + this.pdfSidebar?.reset(); + this.pdfOutlineViewer?.reset(); + this.pdfAttachmentViewer?.reset(); + this.pdfLayerViewer?.reset(); + this.pdfHistory?.reset(); + this.findBar?.reset(); + this.toolbar?.reset(); + this.secondaryToolbar?.reset(); + this._PDFBug?.cleanup(); + await Promise.all(promises); + }, + async open(args) { + if (this.pdfLoadingTask) { + await this.close(); + } + const workerParams = AppOptions.getAll(OptionKind.WORKER); + Object.assign(GlobalWorkerOptions, workerParams); + if (args.url) { + this.setTitleUsingUrl(args.originalUrl || args.url, args.url); + } + const apiParams = AppOptions.getAll(OptionKind.API); + const loadingTask = getDocument({ + ...apiParams, + ...args + }); + this.pdfLoadingTask = loadingTask; + loadingTask.onPassword = (updateCallback, reason) => { + if (this.isViewerEmbedded) { + this._unblockDocumentLoadEvent(); + } + this.pdfLinkService.externalLinkEnabled = false; + this.passwordPrompt.setUpdateCallback(updateCallback, reason); + this.passwordPrompt.open(); + }; + loadingTask.onProgress = ({ + loaded, + total + }) => { + this.progress(loaded / total); + }; + return loadingTask.promise.then(pdfDocument => { + this.load(pdfDocument); + }, reason => { + if (loadingTask !== this.pdfLoadingTask) { + return undefined; + } + let key = "pdfjs-loading-error"; + if (reason instanceof InvalidPDFException) { + key = "pdfjs-invalid-file-error"; + } else if (reason instanceof MissingPDFException) { + key = "pdfjs-missing-file-error"; + } else if (reason instanceof UnexpectedResponseException) { + key = "pdfjs-unexpected-response-error"; + } + return this.l10n.get(key).then(msg => { + this._documentError(msg, { + message: reason?.message + }); + throw reason; + }); + }); + }, + _ensureDownloadComplete() { + if (this.pdfDocument && this.downloadComplete) { + return; + } + throw new Error("PDF document not downloaded."); + }, + async download(options = {}) { + const url = this._downloadUrl, + filename = this._docFilename; + try { + this._ensureDownloadComplete(); + const data = await this.pdfDocument.getData(); + const blob = new Blob([data], { + type: "application/pdf" + }); + await this.downloadManager.download(blob, url, filename, options); + } catch { + await this.downloadManager.downloadUrl(url, filename, options); + } + }, + async save(options = {}) { + if (this._saveInProgress) { + return; + } + this._saveInProgress = true; + await this.pdfScriptingManager.dispatchWillSave(); + const url = this._downloadUrl, + filename = this._docFilename; + try { + this._ensureDownloadComplete(); + const data = await this.pdfDocument.saveDocument(); + const blob = new Blob([data], { + type: "application/pdf" + }); + await this.downloadManager.download(blob, url, filename, options); + } catch (reason) { + console.error(`Error when saving the document: ${reason.message}`); + await this.download(options); + } finally { + await this.pdfScriptingManager.dispatchDidSave(); + this._saveInProgress = false; + } + if (this._hasAnnotationEditors) { + this.externalServices.reportTelemetry({ + type: "editing", + data: { + type: "save" + } + }); + } + }, + downloadOrSave(options = {}) { + if (this.pdfDocument?.annotationStorage.size > 0) { + this.save(options); + } else { + this.download(options); + } + }, + openInExternalApp() { + this.downloadOrSave({ + openInExternalApp: true + }); + }, + _documentError(message, moreInfo = null) { + this._unblockDocumentLoadEvent(); + this._otherError(message, moreInfo); + this.eventBus.dispatch("documenterror", { + source: this, + message, + reason: moreInfo?.message ?? null + }); + }, + _otherError(message, moreInfo = null) { + const moreInfoText = [`PDF.js v${version || "?"} (build: ${build || "?"})`]; + if (moreInfo) { + moreInfoText.push(`Message: ${moreInfo.message}`); + if (moreInfo.stack) { + moreInfoText.push(`Stack: ${moreInfo.stack}`); + } else { + if (moreInfo.filename) { + moreInfoText.push(`File: ${moreInfo.filename}`); + } + if (moreInfo.lineNumber) { + moreInfoText.push(`Line: ${moreInfo.lineNumber}`); + } + } + } + console.error(`${message}\n\n${moreInfoText.join("\n")}`); + }, + progress(level) { + if (!this.loadingBar || this.downloadComplete) { + return; + } + const percent = Math.round(level * 100); + if (percent <= this.loadingBar.percent) { + return; + } + this.loadingBar.percent = percent; + if (this.pdfDocument?.loadingParams.disableAutoFetch ?? AppOptions.get("disableAutoFetch")) { + this.loadingBar.setDisableAutoFetch(); + } + }, + load(pdfDocument) { + this.pdfDocument = pdfDocument; + pdfDocument.getDownloadInfo().then(({ + length + }) => { + this._contentLength = length; + this.downloadComplete = true; + this.loadingBar?.hide(); + firstPagePromise.then(() => { + this.eventBus.dispatch("documentloaded", { + source: this + }); + }); + }); + const pageLayoutPromise = pdfDocument.getPageLayout().catch(() => {}); + const pageModePromise = pdfDocument.getPageMode().catch(() => {}); + const openActionPromise = pdfDocument.getOpenAction().catch(() => {}); + this.toolbar?.setPagesCount(pdfDocument.numPages, false); + this.secondaryToolbar?.setPagesCount(pdfDocument.numPages); + this.pdfLinkService.setDocument(pdfDocument); + this.pdfDocumentProperties?.setDocument(pdfDocument); + const pdfViewer = this.pdfViewer; + pdfViewer.setDocument(pdfDocument); + const { + firstPagePromise, + onePageRendered, + pagesPromise + } = pdfViewer; + this.pdfThumbnailViewer?.setDocument(pdfDocument); + const storedPromise = (this.store = new ViewHistory(pdfDocument.fingerprints[0])).getMultiple({ + page: null, + zoom: DEFAULT_SCALE_VALUE, + scrollLeft: "0", + scrollTop: "0", + rotation: null, + sidebarView: SidebarView.UNKNOWN, + scrollMode: ScrollMode.UNKNOWN, + spreadMode: SpreadMode.UNKNOWN + }).catch(() => {}); + firstPagePromise.then(pdfPage => { + this.loadingBar?.setWidth(this.appConfig.viewerContainer); + this._initializeAnnotationStorageCallbacks(pdfDocument); + Promise.all([animationStarted, storedPromise, pageLayoutPromise, pageModePromise, openActionPromise]).then(async ([timeStamp, stored, pageLayout, pageMode, openAction]) => { + const viewOnLoad = AppOptions.get("viewOnLoad"); + this._initializePdfHistory({ + fingerprint: pdfDocument.fingerprints[0], + viewOnLoad, + initialDest: openAction?.dest + }); + const initialBookmark = this.initialBookmark; + const zoom = AppOptions.get("defaultZoomValue"); + let hash = zoom ? `zoom=${zoom}` : null; + let rotation = null; + let sidebarView = AppOptions.get("sidebarViewOnLoad"); + let scrollMode = AppOptions.get("scrollModeOnLoad"); + let spreadMode = AppOptions.get("spreadModeOnLoad"); + if (stored?.page && viewOnLoad !== ViewOnLoad.INITIAL) { + hash = `page=${stored.page}&zoom=${zoom || stored.zoom},` + `${stored.scrollLeft},${stored.scrollTop}`; + rotation = parseInt(stored.rotation, 10); + if (sidebarView === SidebarView.UNKNOWN) { + sidebarView = stored.sidebarView | 0; + } + if (scrollMode === ScrollMode.UNKNOWN) { + scrollMode = stored.scrollMode | 0; + } + if (spreadMode === SpreadMode.UNKNOWN) { + spreadMode = stored.spreadMode | 0; + } + } + if (pageMode && sidebarView === SidebarView.UNKNOWN) { + sidebarView = apiPageModeToSidebarView(pageMode); + } + if (pageLayout && scrollMode === ScrollMode.UNKNOWN && spreadMode === SpreadMode.UNKNOWN) { + const modes = apiPageLayoutToViewerModes(pageLayout); + spreadMode = modes.spreadMode; + } + this.setInitialView(hash, { + rotation, + sidebarView, + scrollMode, + spreadMode + }); + this.eventBus.dispatch("documentinit", { + source: this + }); + if (!this.isViewerEmbedded) { + pdfViewer.focus(); + } + await Promise.race([pagesPromise, new Promise(resolve => { + setTimeout(resolve, FORCE_PAGES_LOADED_TIMEOUT); + })]); + if (!initialBookmark && !hash) { + return; + } + if (pdfViewer.hasEqualPageSizes) { + return; + } + this.initialBookmark = initialBookmark; + pdfViewer.currentScaleValue = pdfViewer.currentScaleValue; + this.setInitialView(hash); + }).catch(() => { + this.setInitialView(); + }).then(function () { + pdfViewer.update(); + }); + }); + pagesPromise.then(() => { + this._unblockDocumentLoadEvent(); + this._initializeAutoPrint(pdfDocument, openActionPromise); + }, reason => { + this.l10n.get("pdfjs-loading-error").then(msg => { + this._documentError(msg, { + message: reason?.message + }); + }); + }); + onePageRendered.then(data => { + this.externalServices.reportTelemetry({ + type: "pageInfo", + timestamp: data.timestamp + }); + if (this.pdfOutlineViewer) { + pdfDocument.getOutline().then(outline => { + if (pdfDocument !== this.pdfDocument) { + return; + } + this.pdfOutlineViewer.render({ + outline, + pdfDocument + }); + }); + } + if (this.pdfAttachmentViewer) { + pdfDocument.getAttachments().then(attachments => { + if (pdfDocument !== this.pdfDocument) { + return; + } + this.pdfAttachmentViewer.render({ + attachments + }); + }); + } + if (this.pdfLayerViewer) { + pdfViewer.optionalContentConfigPromise.then(optionalContentConfig => { + if (pdfDocument !== this.pdfDocument) { + return; + } + this.pdfLayerViewer.render({ + optionalContentConfig, + pdfDocument + }); + }); + } + }); + this._initializePageLabels(pdfDocument); + this._initializeMetadata(pdfDocument); + }, + async _scriptingDocProperties(pdfDocument) { + if (!this.documentInfo) { + await new Promise(resolve => { + this.eventBus._on("metadataloaded", resolve, { + once: true + }); + }); + if (pdfDocument !== this.pdfDocument) { + return null; + } + } + if (!this._contentLength) { + await new Promise(resolve => { + this.eventBus._on("documentloaded", resolve, { + once: true + }); + }); + if (pdfDocument !== this.pdfDocument) { + return null; + } + } + return { + ...this.documentInfo, + baseURL: this.baseUrl, + filesize: this._contentLength, + filename: this._docFilename, + metadata: this.metadata?.getRaw(), + authors: this.metadata?.get("dc:creator"), + numPages: this.pagesCount, + URL: this.url + }; + }, + async _initializeAutoPrint(pdfDocument, openActionPromise) { + const [openAction, jsActions] = await Promise.all([openActionPromise, this.pdfViewer.enableScripting ? null : pdfDocument.getJSActions()]); + if (pdfDocument !== this.pdfDocument) { + return; + } + let triggerAutoPrint = openAction?.action === "Print"; + if (jsActions) { + console.warn("Warning: JavaScript support is not enabled"); + for (const name in jsActions) { + if (triggerAutoPrint) { + break; + } + switch (name) { + case "WillClose": + case "WillSave": + case "DidSave": + case "WillPrint": + case "DidPrint": + continue; + } + triggerAutoPrint = jsActions[name].some(js => AutoPrintRegExp.test(js)); + } + } + if (triggerAutoPrint) { + this.triggerPrinting(); + } + }, + async _initializeMetadata(pdfDocument) { + const { + info, + metadata, + contentDispositionFilename, + contentLength + } = await pdfDocument.getMetadata(); + if (pdfDocument !== this.pdfDocument) { + return; + } + this.documentInfo = info; + this.metadata = metadata; + this._contentDispositionFilename ??= contentDispositionFilename; + this._contentLength ??= contentLength; + console.log(`PDF ${pdfDocument.fingerprints[0]} [${info.PDFFormatVersion} ` + `${(info.Producer || "-").trim()} / ${(info.Creator || "-").trim()}] ` + `(PDF.js: ${version || "?"} [${build || "?"}])`); + let pdfTitle = info.Title; + const metadataTitle = metadata?.get("dc:title"); + if (metadataTitle) { + if (metadataTitle !== "Untitled" && !/[\uFFF0-\uFFFF]/g.test(metadataTitle)) { + pdfTitle = metadataTitle; + } + } + if (pdfTitle) { + this.setTitle(`${pdfTitle} - ${this._contentDispositionFilename || this._title}`); + } else if (this._contentDispositionFilename) { + this.setTitle(this._contentDispositionFilename); + } + if (info.IsXFAPresent && !info.IsAcroFormPresent && !pdfDocument.isPureXfa) { + if (pdfDocument.loadingParams.enableXfa) { + console.warn("Warning: XFA Foreground documents are not supported"); + } else { + console.warn("Warning: XFA support is not enabled"); + } + } else if ((info.IsAcroFormPresent || info.IsXFAPresent) && !this.pdfViewer.renderForms) { + console.warn("Warning: Interactive form support is not enabled"); + } + if (info.IsSignaturesPresent) { + console.warn("Warning: Digital signatures validation is not supported"); + } + this.eventBus.dispatch("metadataloaded", { + source: this + }); + }, + async _initializePageLabels(pdfDocument) { + const labels = await pdfDocument.getPageLabels(); + if (pdfDocument !== this.pdfDocument) { + return; + } + if (!labels || AppOptions.get("disablePageLabels")) { + return; + } + const numLabels = labels.length; + let standardLabels = 0, + emptyLabels = 0; + for (let i = 0; i < numLabels; i++) { + const label = labels[i]; + if (label === (i + 1).toString()) { + standardLabels++; + } else if (label === "") { + emptyLabels++; + } else { + break; + } + } + if (standardLabels >= numLabels || emptyLabels >= numLabels) { + return; + } + const { + pdfViewer, + pdfThumbnailViewer, + toolbar + } = this; + pdfViewer.setPageLabels(labels); + pdfThumbnailViewer?.setPageLabels(labels); + toolbar?.setPagesCount(numLabels, true); + toolbar?.setPageNumber(pdfViewer.currentPageNumber, pdfViewer.currentPageLabel); + }, + _initializePdfHistory({ + fingerprint, + viewOnLoad, + initialDest = null + }) { + if (!this.pdfHistory) { + return; + } + this.pdfHistory.initialize({ + fingerprint, + resetHistory: viewOnLoad === ViewOnLoad.INITIAL, + updateUrl: AppOptions.get("historyUpdateUrl") + }); + if (this.pdfHistory.initialBookmark) { + this.initialBookmark = this.pdfHistory.initialBookmark; + this.initialRotation = this.pdfHistory.initialRotation; + } + if (initialDest && !this.initialBookmark && viewOnLoad === ViewOnLoad.UNKNOWN) { + this.initialBookmark = JSON.stringify(initialDest); + this.pdfHistory.push({ + explicitDest: initialDest, + pageNumber: null + }); + } + }, + _initializeAnnotationStorageCallbacks(pdfDocument) { + if (pdfDocument !== this.pdfDocument) { + return; + } + const { + annotationStorage + } = pdfDocument; + annotationStorage.onSetModified = () => { + window.addEventListener("beforeunload", beforeUnload); + this._annotationStorageModified = true; + }; + annotationStorage.onResetModified = () => { + window.removeEventListener("beforeunload", beforeUnload); + delete this._annotationStorageModified; + }; + annotationStorage.onAnnotationEditor = typeStr => { + this._hasAnnotationEditors = !!typeStr; + this.setTitle(); + if (typeStr) { + this.externalServices.reportTelemetry({ + type: "editing", + data: { + type: typeStr + } + }); + } + }; + }, + setInitialView(storedHash, { + rotation, + sidebarView, + scrollMode, + spreadMode + } = {}) { + const setRotation = angle => { + if (isValidRotation(angle)) { + this.pdfViewer.pagesRotation = angle; + } + }; + const setViewerModes = (scroll, spread) => { + if (isValidScrollMode(scroll)) { + this.pdfViewer.scrollMode = scroll; + } + if (isValidSpreadMode(spread)) { + this.pdfViewer.spreadMode = spread; + } + }; + this.isInitialViewSet = true; + this.pdfSidebar?.setInitialView(sidebarView); + setViewerModes(scrollMode, spreadMode); + if (this.initialBookmark) { + setRotation(this.initialRotation); + delete this.initialRotation; + this.pdfLinkService.setHash(this.initialBookmark); + this.initialBookmark = null; + } else if (storedHash) { + setRotation(rotation); + this.pdfLinkService.setHash(storedHash); + } + this.toolbar?.setPageNumber(this.pdfViewer.currentPageNumber, this.pdfViewer.currentPageLabel); + this.secondaryToolbar?.setPageNumber(this.pdfViewer.currentPageNumber); + if (!this.pdfViewer.currentScaleValue) { + this.pdfViewer.currentScaleValue = DEFAULT_SCALE_VALUE; + } + }, + _cleanup() { + if (!this.pdfDocument) { + return; + } + this.pdfViewer.cleanup(); + this.pdfThumbnailViewer?.cleanup(); + this.pdfDocument.cleanup(AppOptions.get("fontExtraProperties")); + }, + forceRendering() { + this.pdfRenderingQueue.printing = !!this.printService; + this.pdfRenderingQueue.isThumbnailViewEnabled = this.pdfSidebar?.visibleView === SidebarView.THUMBS; + this.pdfRenderingQueue.renderHighestPriority(); + }, + beforePrint() { + this._printAnnotationStoragePromise = this.pdfScriptingManager.dispatchWillPrint().catch(() => {}).then(() => { + return this.pdfDocument?.annotationStorage.print; + }); + if (this.printService) { + return; + } + if (!this.supportsPrinting) { + this.l10n.get("pdfjs-printing-not-supported").then(msg => { + this._otherError(msg); + }); + return; + } + if (!this.pdfViewer.pageViewsReady) { + this.l10n.get("pdfjs-printing-not-ready").then(msg => { + window.alert(msg); + }); + return; + } + const pagesOverview = this.pdfViewer.getPagesOverview(); + const printContainer = this.appConfig.printContainer; + const printResolution = AppOptions.get("printResolution"); + const optionalContentConfigPromise = this.pdfViewer.optionalContentConfigPromise; + const printService = PDFPrintServiceFactory.instance.createPrintService(this.pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise, this._printAnnotationStoragePromise); + this.printService = printService; + this.forceRendering(); + this.setTitle(); + printService.layout(); + if (this._hasAnnotationEditors) { + this.externalServices.reportTelemetry({ + type: "editing", + data: { + type: "print" + } + }); + } + }, + afterPrint() { + if (this._printAnnotationStoragePromise) { + this._printAnnotationStoragePromise.then(() => { + this.pdfScriptingManager.dispatchDidPrint(); + }); + this._printAnnotationStoragePromise = null; + } + if (this.printService) { + this.printService.destroy(); + this.printService = null; + this.pdfDocument?.annotationStorage.resetModified(); + } + this.forceRendering(); + this.setTitle(); + }, + rotatePages(delta) { + this.pdfViewer.pagesRotation += delta; + }, + requestPresentationMode() { + this.pdfPresentationMode?.request(); + }, + triggerPrinting() { + if (!this.supportsPrinting) { + return; + } + window.print(); + }, + bindEvents() { + const { + eventBus, + _boundEvents + } = this; + _boundEvents.beforePrint = this.beforePrint.bind(this); + _boundEvents.afterPrint = this.afterPrint.bind(this); + eventBus._on("resize", webViewerResize); + eventBus._on("hashchange", webViewerHashchange); + eventBus._on("beforeprint", _boundEvents.beforePrint); + eventBus._on("afterprint", _boundEvents.afterPrint); + eventBus._on("pagerender", webViewerPageRender); + eventBus._on("pagerendered", webViewerPageRendered); + eventBus._on("updateviewarea", webViewerUpdateViewarea); + eventBus._on("pagechanging", webViewerPageChanging); + eventBus._on("scalechanging", webViewerScaleChanging); + eventBus._on("rotationchanging", webViewerRotationChanging); + eventBus._on("sidebarviewchanged", webViewerSidebarViewChanged); + eventBus._on("pagemode", webViewerPageMode); + eventBus._on("namedaction", webViewerNamedAction); + eventBus._on("presentationmodechanged", webViewerPresentationModeChanged); + eventBus._on("presentationmode", webViewerPresentationMode); + eventBus._on("switchannotationeditormode", webViewerSwitchAnnotationEditorMode); + eventBus._on("switchannotationeditorparams", webViewerSwitchAnnotationEditorParams); + eventBus._on("print", webViewerPrint); + eventBus._on("download", webViewerDownload); + eventBus._on("openinexternalapp", webViewerOpenInExternalApp); + eventBus._on("firstpage", webViewerFirstPage); + eventBus._on("lastpage", webViewerLastPage); + eventBus._on("nextpage", webViewerNextPage); + eventBus._on("previouspage", webViewerPreviousPage); + eventBus._on("zoomin", webViewerZoomIn); + eventBus._on("zoomout", webViewerZoomOut); + eventBus._on("zoomreset", webViewerZoomReset); + eventBus._on("pagenumberchanged", webViewerPageNumberChanged); + eventBus._on("scalechanged", webViewerScaleChanged); + eventBus._on("rotatecw", webViewerRotateCw); + eventBus._on("rotateccw", webViewerRotateCcw); + eventBus._on("optionalcontentconfig", webViewerOptionalContentConfig); + eventBus._on("switchscrollmode", webViewerSwitchScrollMode); + eventBus._on("scrollmodechanged", webViewerScrollModeChanged); + eventBus._on("switchspreadmode", webViewerSwitchSpreadMode); + eventBus._on("spreadmodechanged", webViewerSpreadModeChanged); + eventBus._on("documentproperties", webViewerDocumentProperties); + eventBus._on("findfromurlhash", webViewerFindFromUrlHash); + eventBus._on("updatefindmatchescount", webViewerUpdateFindMatchesCount); + eventBus._on("updatefindcontrolstate", webViewerUpdateFindControlState); + if (AppOptions.get("pdfBug")) { + _boundEvents.reportPageStatsPDFBug = reportPageStatsPDFBug; + eventBus._on("pagerendered", _boundEvents.reportPageStatsPDFBug); + eventBus._on("pagechanging", _boundEvents.reportPageStatsPDFBug); + } + eventBus._on("fileinputchange", webViewerFileInputChange); + eventBus._on("openfile", webViewerOpenFile); + }, + bindWindowEvents() { + const { + eventBus, + _boundEvents + } = this; + function addWindowResolutionChange(evt = null) { + if (evt) { + webViewerResolutionChange(evt); + } + const mediaQueryList = window.matchMedia(`(resolution: ${window.devicePixelRatio || 1}dppx)`); + mediaQueryList.addEventListener("change", addWindowResolutionChange, { + once: true + }); + _boundEvents.removeWindowResolutionChange ||= function () { + mediaQueryList.removeEventListener("change", addWindowResolutionChange); + _boundEvents.removeWindowResolutionChange = null; + }; + } + addWindowResolutionChange(); + _boundEvents.windowResize = () => { + eventBus.dispatch("resize", { + source: window + }); + }; + _boundEvents.windowHashChange = () => { + eventBus.dispatch("hashchange", { + source: window, + hash: document.location.hash.substring(1) + }); + }; + _boundEvents.windowBeforePrint = () => { + eventBus.dispatch("beforeprint", { + source: window + }); + }; + _boundEvents.windowAfterPrint = () => { + eventBus.dispatch("afterprint", { + source: window + }); + }; + _boundEvents.windowUpdateFromSandbox = event => { + eventBus.dispatch("updatefromsandbox", { + source: window, + detail: event.detail + }); + }; + window.addEventListener("visibilitychange", webViewerVisibilityChange); + window.addEventListener("wheel", webViewerWheel, { + passive: false + }); + window.addEventListener("touchstart", webViewerTouchStart, { + passive: false + }); + window.addEventListener("touchmove", webViewerTouchMove, { + passive: false + }); + window.addEventListener("touchend", webViewerTouchEnd, { + passive: false + }); + window.addEventListener("click", webViewerClick); + window.addEventListener("keydown", webViewerKeyDown); + window.addEventListener("keyup", webViewerKeyUp); + window.addEventListener("resize", _boundEvents.windowResize); + window.addEventListener("hashchange", _boundEvents.windowHashChange); + window.addEventListener("beforeprint", _boundEvents.windowBeforePrint); + window.addEventListener("afterprint", _boundEvents.windowAfterPrint); + window.addEventListener("updatefromsandbox", _boundEvents.windowUpdateFromSandbox); + }, + unbindEvents() { + const { + eventBus, + _boundEvents + } = this; + eventBus._off("resize", webViewerResize); + eventBus._off("hashchange", webViewerHashchange); + eventBus._off("beforeprint", _boundEvents.beforePrint); + eventBus._off("afterprint", _boundEvents.afterPrint); + eventBus._off("pagerender", webViewerPageRender); + eventBus._off("pagerendered", webViewerPageRendered); + eventBus._off("updateviewarea", webViewerUpdateViewarea); + eventBus._off("pagechanging", webViewerPageChanging); + eventBus._off("scalechanging", webViewerScaleChanging); + eventBus._off("rotationchanging", webViewerRotationChanging); + eventBus._off("sidebarviewchanged", webViewerSidebarViewChanged); + eventBus._off("pagemode", webViewerPageMode); + eventBus._off("namedaction", webViewerNamedAction); + eventBus._off("presentationmodechanged", webViewerPresentationModeChanged); + eventBus._off("presentationmode", webViewerPresentationMode); + eventBus._off("print", webViewerPrint); + eventBus._off("download", webViewerDownload); + eventBus._off("openinexternalapp", webViewerOpenInExternalApp); + eventBus._off("firstpage", webViewerFirstPage); + eventBus._off("lastpage", webViewerLastPage); + eventBus._off("nextpage", webViewerNextPage); + eventBus._off("previouspage", webViewerPreviousPage); + eventBus._off("zoomin", webViewerZoomIn); + eventBus._off("zoomout", webViewerZoomOut); + eventBus._off("zoomreset", webViewerZoomReset); + eventBus._off("pagenumberchanged", webViewerPageNumberChanged); + eventBus._off("scalechanged", webViewerScaleChanged); + eventBus._off("rotatecw", webViewerRotateCw); + eventBus._off("rotateccw", webViewerRotateCcw); + eventBus._off("optionalcontentconfig", webViewerOptionalContentConfig); + eventBus._off("switchscrollmode", webViewerSwitchScrollMode); + eventBus._off("scrollmodechanged", webViewerScrollModeChanged); + eventBus._off("switchspreadmode", webViewerSwitchSpreadMode); + eventBus._off("spreadmodechanged", webViewerSpreadModeChanged); + eventBus._off("documentproperties", webViewerDocumentProperties); + eventBus._off("findfromurlhash", webViewerFindFromUrlHash); + eventBus._off("updatefindmatchescount", webViewerUpdateFindMatchesCount); + eventBus._off("updatefindcontrolstate", webViewerUpdateFindControlState); + if (_boundEvents.reportPageStatsPDFBug) { + eventBus._off("pagerendered", _boundEvents.reportPageStatsPDFBug); + eventBus._off("pagechanging", _boundEvents.reportPageStatsPDFBug); + _boundEvents.reportPageStatsPDFBug = null; + } + eventBus._off("fileinputchange", webViewerFileInputChange); + eventBus._off("openfile", webViewerOpenFile); + _boundEvents.beforePrint = null; + _boundEvents.afterPrint = null; + }, + unbindWindowEvents() { + const { + _boundEvents + } = this; + window.removeEventListener("visibilitychange", webViewerVisibilityChange); + window.removeEventListener("wheel", webViewerWheel, { + passive: false + }); + window.removeEventListener("touchstart", webViewerTouchStart, { + passive: false + }); + window.removeEventListener("touchmove", webViewerTouchMove, { + passive: false + }); + window.removeEventListener("touchend", webViewerTouchEnd, { + passive: false + }); + window.removeEventListener("click", webViewerClick); + window.removeEventListener("keydown", webViewerKeyDown); + window.removeEventListener("keyup", webViewerKeyUp); + window.removeEventListener("resize", _boundEvents.windowResize); + window.removeEventListener("hashchange", _boundEvents.windowHashChange); + window.removeEventListener("beforeprint", _boundEvents.windowBeforePrint); + window.removeEventListener("afterprint", _boundEvents.windowAfterPrint); + window.removeEventListener("updatefromsandbox", _boundEvents.windowUpdateFromSandbox); + _boundEvents.removeWindowResolutionChange?.(); + _boundEvents.windowResize = null; + _boundEvents.windowHashChange = null; + _boundEvents.windowBeforePrint = null; + _boundEvents.windowAfterPrint = null; + _boundEvents.windowUpdateFromSandbox = null; + }, + _accumulateTicks(ticks, prop) { + if (this[prop] > 0 && ticks < 0 || this[prop] < 0 && ticks > 0) { + this[prop] = 0; + } + this[prop] += ticks; + const wholeTicks = Math.trunc(this[prop]); + this[prop] -= wholeTicks; + return wholeTicks; + }, + _accumulateFactor(previousScale, factor, prop) { + if (factor === 1) { + return 1; + } + if (this[prop] > 1 && factor < 1 || this[prop] < 1 && factor > 1) { + this[prop] = 1; + } + const newFactor = Math.floor(previousScale * factor * this[prop] * 100) / (100 * previousScale); + this[prop] = factor / newFactor; + return newFactor; + }, + _centerAtPos(previousScale, x, y) { + const { + pdfViewer + } = this; + const scaleDiff = pdfViewer.currentScale / previousScale - 1; + if (scaleDiff !== 0) { + const [top, left] = pdfViewer.containerTopLeft; + pdfViewer.container.scrollLeft += (x - left) * scaleDiff; + pdfViewer.container.scrollTop += (y - top) * scaleDiff; + } + }, + _unblockDocumentLoadEvent() { + document.blockUnblockOnload?.(false); + this._unblockDocumentLoadEvent = () => {}; + }, + get scriptingReady() { + return this.pdfScriptingManager.ready; + } +}; +{ + //const HOSTED_VIEWER_ORIGINS = ["null", "http://mozilla.github.io", "https://mozilla.github.io"]; + var validateFileURL = function (file) { + if (!file) { + return; + } + try { + // const viewerOrigin = new URL(window.location.href).origin || "null"; + // if (HOSTED_VIEWER_ORIGINS.includes(viewerOrigin)) { + // return; + // } + // const fileOrigin = new URL(file, window.location.href).origin; + // if (fileOrigin !== viewerOrigin) { + // throw new Error("file origin does not match viewer's"); + // } + } catch (ex) { + PDFViewerApplication.l10n.get("pdfjs-loading-error").then(msg => { + PDFViewerApplication._documentError(msg, { + message: ex?.message + }); + }); + throw ex; + } + }; +} +async function loadFakeWorker() { + GlobalWorkerOptions.workerSrc ||= AppOptions.get("workerSrc"); + await import(/* webpackIgnore: true */ PDFWorker.workerSrc); +} +async function loadPDFBug(self) { + const { + debuggerScriptPath + } = self.appConfig; + const { + PDFBug + } = await import(/* webpackIgnore: true */ debuggerScriptPath); + self._PDFBug = PDFBug; +} +function reportPageStatsPDFBug({ + pageNumber +}) { + if (!globalThis.Stats?.enabled) { + return; + } + const pageView = PDFViewerApplication.pdfViewer.getPageView(pageNumber - 1); + globalThis.Stats.add(pageNumber, pageView?.pdfPage?.stats); +} +function webViewerPageRender({ + pageNumber +}) { + if (pageNumber === PDFViewerApplication.page) { + PDFViewerApplication.toolbar?.updateLoadingIndicatorState(true); + } +} +function webViewerPageRendered({ + pageNumber, + error +}) { + if (pageNumber === PDFViewerApplication.page) { + PDFViewerApplication.toolbar?.updateLoadingIndicatorState(false); + } + if (PDFViewerApplication.pdfSidebar?.visibleView === SidebarView.THUMBS) { + const pageView = PDFViewerApplication.pdfViewer.getPageView(pageNumber - 1); + const thumbnailView = PDFViewerApplication.pdfThumbnailViewer?.getThumbnail(pageNumber - 1); + if (pageView) { + thumbnailView?.setImage(pageView); + } + } + if (error) { + PDFViewerApplication.l10n.get("pdfjs-rendering-error").then(msg => { + PDFViewerApplication._otherError(msg, error); + }); + } +} +function webViewerPageMode({ + mode +}) { + let view; + switch (mode) { + case "thumbs": + view = SidebarView.THUMBS; + break; + case "bookmarks": + case "outline": + view = SidebarView.OUTLINE; + break; + case "attachments": + view = SidebarView.ATTACHMENTS; + break; + case "layers": + view = SidebarView.LAYERS; + break; + case "none": + view = SidebarView.NONE; + break; + default: + console.error('Invalid "pagemode" hash parameter: ' + mode); + return; + } + PDFViewerApplication.pdfSidebar?.switchView(view, true); +} +function webViewerNamedAction(evt) { + switch (evt.action) { + case "GoToPage": + PDFViewerApplication.appConfig.toolbar?.pageNumber.select(); + break; + case "Find": + if (!PDFViewerApplication.supportsIntegratedFind) { + PDFViewerApplication?.findBar.toggle(); + } + break; + case "Print": + PDFViewerApplication.triggerPrinting(); + break; + case "SaveAs": + PDFViewerApplication.downloadOrSave(); + break; + } +} +function webViewerPresentationModeChanged(evt) { + PDFViewerApplication.pdfViewer.presentationModeState = evt.state; +} +function webViewerSidebarViewChanged({ + view +}) { + PDFViewerApplication.pdfRenderingQueue.isThumbnailViewEnabled = view === SidebarView.THUMBS; + if (PDFViewerApplication.isInitialViewSet) { + PDFViewerApplication.store?.set("sidebarView", view).catch(() => {}); + } +} +function webViewerUpdateViewarea({ + location +}) { + if (PDFViewerApplication.isInitialViewSet) { + PDFViewerApplication.store?.setMultiple({ + page: location.pageNumber, + zoom: location.scale, + scrollLeft: location.left, + scrollTop: location.top, + rotation: location.rotation + }).catch(() => {}); + } + if (PDFViewerApplication.appConfig.secondaryToolbar) { + const href = PDFViewerApplication.pdfLinkService.getAnchorUrl(location.pdfOpenParams); + PDFViewerApplication.appConfig.secondaryToolbar.viewBookmarkButton.href = href; + } +} +function webViewerScrollModeChanged(evt) { + if (PDFViewerApplication.isInitialViewSet && !PDFViewerApplication.pdfViewer.isInPresentationMode) { + PDFViewerApplication.store?.set("scrollMode", evt.mode).catch(() => {}); + } +} +function webViewerSpreadModeChanged(evt) { + if (PDFViewerApplication.isInitialViewSet && !PDFViewerApplication.pdfViewer.isInPresentationMode) { + PDFViewerApplication.store?.set("spreadMode", evt.mode).catch(() => {}); + } +} +function webViewerResize() { + const { + pdfDocument, + pdfViewer, + pdfRenderingQueue + } = PDFViewerApplication; + if (pdfRenderingQueue.printing && window.matchMedia("print").matches) { + return; + } + if (!pdfDocument) { + return; + } + const currentScaleValue = pdfViewer.currentScaleValue; + if (currentScaleValue === "auto" || currentScaleValue === "page-fit" || currentScaleValue === "page-width") { + pdfViewer.currentScaleValue = currentScaleValue; + } + pdfViewer.update(); +} +function webViewerHashchange(evt) { + const hash = evt.hash; + if (!hash) { + return; + } + if (!PDFViewerApplication.isInitialViewSet) { + PDFViewerApplication.initialBookmark = hash; + } else if (!PDFViewerApplication.pdfHistory?.popStateInProgress) { + PDFViewerApplication.pdfLinkService.setHash(hash); + } +} +{ + var webViewerFileInputChange = function (evt) { + if (PDFViewerApplication.pdfViewer?.isInPresentationMode) { + return; + } + const file = evt.fileInput.files[0]; + PDFViewerApplication.open({ + url: URL.createObjectURL(file), + originalUrl: file.name + }); + }; + var webViewerOpenFile = function (evt) { + const fileInput = PDFViewerApplication.appConfig.openFileInput; + fileInput.click(); + }; +} +function webViewerPresentationMode() { + PDFViewerApplication.requestPresentationMode(); +} +function webViewerSwitchAnnotationEditorMode(evt) { + PDFViewerApplication.pdfViewer.annotationEditorMode = evt; +} +function webViewerSwitchAnnotationEditorParams(evt) { + PDFViewerApplication.pdfViewer.annotationEditorParams = evt; +} +function webViewerPrint() { + PDFViewerApplication.triggerPrinting(); +} +function webViewerDownload() { + PDFViewerApplication.downloadOrSave(); +} +function webViewerOpenInExternalApp() { + PDFViewerApplication.openInExternalApp(); +} +function webViewerFirstPage() { + PDFViewerApplication.page = 1; +} +function webViewerLastPage() { + PDFViewerApplication.page = PDFViewerApplication.pagesCount; +} +function webViewerNextPage() { + PDFViewerApplication.pdfViewer.nextPage(); +} +function webViewerPreviousPage() { + PDFViewerApplication.pdfViewer.previousPage(); +} +function webViewerZoomIn() { + PDFViewerApplication.zoomIn(); +} +function webViewerZoomOut() { + PDFViewerApplication.zoomOut(); +} +function webViewerZoomReset() { + PDFViewerApplication.zoomReset(); +} +function webViewerPageNumberChanged(evt) { + const pdfViewer = PDFViewerApplication.pdfViewer; + if (evt.value !== "") { + PDFViewerApplication.pdfLinkService.goToPage(evt.value); + } + if (evt.value !== pdfViewer.currentPageNumber.toString() && evt.value !== pdfViewer.currentPageLabel) { + PDFViewerApplication.toolbar?.setPageNumber(pdfViewer.currentPageNumber, pdfViewer.currentPageLabel); + } +} +function webViewerScaleChanged(evt) { + PDFViewerApplication.pdfViewer.currentScaleValue = evt.value; +} +function webViewerRotateCw() { + PDFViewerApplication.rotatePages(90); +} +function webViewerRotateCcw() { + PDFViewerApplication.rotatePages(-90); +} +function webViewerOptionalContentConfig(evt) { + PDFViewerApplication.pdfViewer.optionalContentConfigPromise = evt.promise; +} +function webViewerSwitchScrollMode(evt) { + PDFViewerApplication.pdfViewer.scrollMode = evt.mode; +} +function webViewerSwitchSpreadMode(evt) { + PDFViewerApplication.pdfViewer.spreadMode = evt.mode; +} +function webViewerDocumentProperties() { + PDFViewerApplication.pdfDocumentProperties?.open(); +} +function webViewerFindFromUrlHash(evt) { + PDFViewerApplication.eventBus.dispatch("find", { + source: evt.source, + type: "", + query: evt.query, + caseSensitive: false, + entireWord: false, + highlightAll: true, + findPrevious: false, + matchDiacritics: true + }); +} +function webViewerUpdateFindMatchesCount({ + matchesCount +}) { + if (PDFViewerApplication.supportsIntegratedFind) { + PDFViewerApplication.externalServices.updateFindMatchesCount(matchesCount); + } else { + PDFViewerApplication.findBar.updateResultsCount(matchesCount); + } +} +function webViewerUpdateFindControlState({ + state, + previous, + matchesCount, + rawQuery +}) { + if (PDFViewerApplication.supportsIntegratedFind) { + PDFViewerApplication.externalServices.updateFindControlState({ + result: state, + findPrevious: previous, + matchesCount, + rawQuery + }); + } else { + PDFViewerApplication.findBar?.updateUIState(state, previous, matchesCount); + } +} +function webViewerScaleChanging(evt) { + PDFViewerApplication.toolbar?.setPageScale(evt.presetValue, evt.scale); + PDFViewerApplication.pdfViewer.update(); +} +function webViewerRotationChanging(evt) { + if (PDFViewerApplication.pdfThumbnailViewer) { + PDFViewerApplication.pdfThumbnailViewer.pagesRotation = evt.pagesRotation; + } + PDFViewerApplication.forceRendering(); + PDFViewerApplication.pdfViewer.currentPageNumber = evt.pageNumber; +} +function webViewerPageChanging({ + pageNumber, + pageLabel +}) { + PDFViewerApplication.toolbar?.setPageNumber(pageNumber, pageLabel); + PDFViewerApplication.secondaryToolbar?.setPageNumber(pageNumber); + if (PDFViewerApplication.pdfSidebar?.visibleView === SidebarView.THUMBS) { + PDFViewerApplication.pdfThumbnailViewer?.scrollThumbnailIntoView(pageNumber); + } + const currentPage = PDFViewerApplication.pdfViewer.getPageView(pageNumber - 1); + PDFViewerApplication.toolbar?.updateLoadingIndicatorState(currentPage?.renderingState === RenderingStates.RUNNING); +} +function webViewerResolutionChange(evt) { + PDFViewerApplication.pdfViewer.refresh(); +} +function webViewerVisibilityChange(evt) { + if (document.visibilityState === "visible") { + setZoomDisabledTimeout(); + } +} +let zoomDisabledTimeout = null; +function setZoomDisabledTimeout() { + if (zoomDisabledTimeout) { + clearTimeout(zoomDisabledTimeout); + } + zoomDisabledTimeout = setTimeout(function () { + zoomDisabledTimeout = null; + }, WHEEL_ZOOM_DISABLED_TIMEOUT); +} +function webViewerWheel(evt) { + const { + pdfViewer, + supportsMouseWheelZoomCtrlKey, + supportsMouseWheelZoomMetaKey, + supportsPinchToZoom + } = PDFViewerApplication; + if (pdfViewer.isInPresentationMode) { + return; + } + const deltaMode = evt.deltaMode; + let scaleFactor = Math.exp(-evt.deltaY / 100); + const isBuiltInMac = false; + const isPinchToZoom = evt.ctrlKey && !PDFViewerApplication._isCtrlKeyDown && deltaMode === WheelEvent.DOM_DELTA_PIXEL && evt.deltaX === 0 && (Math.abs(scaleFactor - 1) < 0.05 || isBuiltInMac) && evt.deltaZ === 0; + if (isPinchToZoom || evt.ctrlKey && supportsMouseWheelZoomCtrlKey || evt.metaKey && supportsMouseWheelZoomMetaKey) { + evt.preventDefault(); + if (zoomDisabledTimeout || document.visibilityState === "hidden" || PDFViewerApplication.overlayManager.active) { + return; + } + const previousScale = pdfViewer.currentScale; + if (isPinchToZoom && supportsPinchToZoom) { + scaleFactor = PDFViewerApplication._accumulateFactor(previousScale, scaleFactor, "_wheelUnusedFactor"); + if (scaleFactor < 1) { + PDFViewerApplication.zoomOut(null, scaleFactor); + } else if (scaleFactor > 1) { + PDFViewerApplication.zoomIn(null, scaleFactor); + } else { + return; + } + } else { + const delta = normalizeWheelEventDirection(evt); + let ticks = 0; + if (deltaMode === WheelEvent.DOM_DELTA_LINE || deltaMode === WheelEvent.DOM_DELTA_PAGE) { + if (Math.abs(delta) >= 1) { + ticks = Math.sign(delta); + } else { + ticks = PDFViewerApplication._accumulateTicks(delta, "_wheelUnusedTicks"); + } + } else { + const PIXELS_PER_LINE_SCALE = 30; + ticks = PDFViewerApplication._accumulateTicks(delta / PIXELS_PER_LINE_SCALE, "_wheelUnusedTicks"); + } + if (ticks < 0) { + PDFViewerApplication.zoomOut(-ticks); + } else if (ticks > 0) { + PDFViewerApplication.zoomIn(ticks); + } else { + return; + } + } + PDFViewerApplication._centerAtPos(previousScale, evt.clientX, evt.clientY); + } else { + setZoomDisabledTimeout(); + } +} +function webViewerTouchStart(evt) { + if (PDFViewerApplication.pdfViewer.isInPresentationMode || evt.touches.length < 2) { + return; + } + evt.preventDefault(); + if (evt.touches.length !== 2 || PDFViewerApplication.overlayManager.active) { + PDFViewerApplication._touchInfo = null; + return; + } + let [touch0, touch1] = evt.touches; + if (touch0.identifier > touch1.identifier) { + [touch0, touch1] = [touch1, touch0]; + } + PDFViewerApplication._touchInfo = { + touch0X: touch0.pageX, + touch0Y: touch0.pageY, + touch1X: touch1.pageX, + touch1Y: touch1.pageY + }; +} +function webViewerTouchMove(evt) { + if (!PDFViewerApplication._touchInfo || evt.touches.length !== 2) { + return; + } + const { + pdfViewer, + _touchInfo, + supportsPinchToZoom + } = PDFViewerApplication; + let [touch0, touch1] = evt.touches; + if (touch0.identifier > touch1.identifier) { + [touch0, touch1] = [touch1, touch0]; + } + const { + pageX: page0X, + pageY: page0Y + } = touch0; + const { + pageX: page1X, + pageY: page1Y + } = touch1; + const { + touch0X: pTouch0X, + touch0Y: pTouch0Y, + touch1X: pTouch1X, + touch1Y: pTouch1Y + } = _touchInfo; + if (Math.abs(pTouch0X - page0X) <= 1 && Math.abs(pTouch0Y - page0Y) <= 1 && Math.abs(pTouch1X - page1X) <= 1 && Math.abs(pTouch1Y - page1Y) <= 1) { + return; + } + _touchInfo.touch0X = page0X; + _touchInfo.touch0Y = page0Y; + _touchInfo.touch1X = page1X; + _touchInfo.touch1Y = page1Y; + if (pTouch0X === page0X && pTouch0Y === page0Y) { + const v1X = pTouch1X - page0X; + const v1Y = pTouch1Y - page0Y; + const v2X = page1X - page0X; + const v2Y = page1Y - page0Y; + const det = v1X * v2Y - v1Y * v2X; + if (Math.abs(det) > 0.02 * Math.hypot(v1X, v1Y) * Math.hypot(v2X, v2Y)) { + return; + } + } else if (pTouch1X === page1X && pTouch1Y === page1Y) { + const v1X = pTouch0X - page1X; + const v1Y = pTouch0Y - page1Y; + const v2X = page0X - page1X; + const v2Y = page0Y - page1Y; + const det = v1X * v2Y - v1Y * v2X; + if (Math.abs(det) > 0.02 * Math.hypot(v1X, v1Y) * Math.hypot(v2X, v2Y)) { + return; + } + } else { + const diff0X = page0X - pTouch0X; + const diff1X = page1X - pTouch1X; + const diff0Y = page0Y - pTouch0Y; + const diff1Y = page1Y - pTouch1Y; + const dotProduct = diff0X * diff1X + diff0Y * diff1Y; + if (dotProduct >= 0) { + return; + } + } + evt.preventDefault(); + const distance = Math.hypot(page0X - page1X, page0Y - page1Y) || 1; + const pDistance = Math.hypot(pTouch0X - pTouch1X, pTouch0Y - pTouch1Y) || 1; + const previousScale = pdfViewer.currentScale; + if (supportsPinchToZoom) { + const newScaleFactor = PDFViewerApplication._accumulateFactor(previousScale, distance / pDistance, "_touchUnusedFactor"); + if (newScaleFactor < 1) { + PDFViewerApplication.zoomOut(null, newScaleFactor); + } else if (newScaleFactor > 1) { + PDFViewerApplication.zoomIn(null, newScaleFactor); + } else { + return; + } + } else { + const PIXELS_PER_LINE_SCALE = 30; + const ticks = PDFViewerApplication._accumulateTicks((distance - pDistance) / PIXELS_PER_LINE_SCALE, "_touchUnusedTicks"); + if (ticks < 0) { + PDFViewerApplication.zoomOut(-ticks); + } else if (ticks > 0) { + PDFViewerApplication.zoomIn(ticks); + } else { + return; + } + } + PDFViewerApplication._centerAtPos(previousScale, (page0X + page1X) / 2, (page0Y + page1Y) / 2); +} +function webViewerTouchEnd(evt) { + if (!PDFViewerApplication._touchInfo) { + return; + } + evt.preventDefault(); + PDFViewerApplication._touchInfo = null; + PDFViewerApplication._touchUnusedTicks = 0; + PDFViewerApplication._touchUnusedFactor = 1; +} +function webViewerClick(evt) { + if (!PDFViewerApplication.secondaryToolbar?.isOpen) { + return; + } + const appConfig = PDFViewerApplication.appConfig; + if (PDFViewerApplication.pdfViewer.containsElement(evt.target) || appConfig.toolbar?.container.contains(evt.target) && evt.target !== appConfig.secondaryToolbar?.toggleButton) { + PDFViewerApplication.secondaryToolbar.close(); + } +} +function webViewerKeyUp(evt) { + if (evt.key === "Control") { + PDFViewerApplication._isCtrlKeyDown = false; + } +} +function webViewerKeyDown(evt) { + PDFViewerApplication._isCtrlKeyDown = evt.key === "Control"; + if (PDFViewerApplication.overlayManager.active) { + return; + } + const { + eventBus, + pdfViewer + } = PDFViewerApplication; + const isViewerInPresentationMode = pdfViewer.isInPresentationMode; + let handled = false, + ensureViewerFocused = false; + const cmd = (evt.ctrlKey ? 1 : 0) | (evt.altKey ? 2 : 0) | (evt.shiftKey ? 4 : 0) | (evt.metaKey ? 8 : 0); + if (cmd === 1 || cmd === 8 || cmd === 5 || cmd === 12) { + switch (evt.keyCode) { + case 70: + if (!PDFViewerApplication.supportsIntegratedFind && !evt.shiftKey) { + PDFViewerApplication.findBar?.open(); + handled = true; + } + break; + case 71: + if (!PDFViewerApplication.supportsIntegratedFind) { + const { + state + } = PDFViewerApplication.findController; + if (state) { + const newState = { + source: window, + type: "again", + findPrevious: cmd === 5 || cmd === 12 + }; + eventBus.dispatch("find", { + ...state, + ...newState + }); + } + handled = true; + } + break; + case 61: + case 107: + case 187: + case 171: + PDFViewerApplication.zoomIn(); + handled = true; + break; + case 173: + case 109: + case 189: + PDFViewerApplication.zoomOut(); + handled = true; + break; + case 48: + case 96: + if (!isViewerInPresentationMode) { + setTimeout(function () { + PDFViewerApplication.zoomReset(); + }); + handled = false; + } + break; + case 38: + if (isViewerInPresentationMode || PDFViewerApplication.page > 1) { + PDFViewerApplication.page = 1; + handled = true; + ensureViewerFocused = true; + } + break; + case 40: + if (isViewerInPresentationMode || PDFViewerApplication.page < PDFViewerApplication.pagesCount) { + PDFViewerApplication.page = PDFViewerApplication.pagesCount; + handled = true; + ensureViewerFocused = true; + } + break; + } + } + if (cmd === 1 || cmd === 8) { + switch (evt.keyCode) { + case 83: + eventBus.dispatch("download", { + source: window + }); + handled = true; + break; + case 79: + { + eventBus.dispatch("openfile", { + source: window + }); + handled = true; + } + break; + } + } + if (cmd === 3 || cmd === 10) { + switch (evt.keyCode) { + case 80: + PDFViewerApplication.requestPresentationMode(); + handled = true; + PDFViewerApplication.externalServices.reportTelemetry({ + type: "buttons", + data: { + id: "presentationModeKeyboard" + } + }); + break; + case 71: + if (PDFViewerApplication.appConfig.toolbar) { + PDFViewerApplication.appConfig.toolbar.pageNumber.select(); + handled = true; + } + break; + } + } + if (handled) { + if (ensureViewerFocused && !isViewerInPresentationMode) { + pdfViewer.focus(); + } + evt.preventDefault(); + return; + } + const curElement = getActiveOrFocusedElement(); + const curElementTagName = curElement?.tagName.toUpperCase(); + if (curElementTagName === "INPUT" || curElementTagName === "TEXTAREA" || curElementTagName === "SELECT" || curElementTagName === "BUTTON" && (evt.keyCode === 13 || evt.keyCode === 32) || curElement?.isContentEditable) { + if (evt.keyCode !== 27) { + return; + } + } + if (cmd === 0) { + let turnPage = 0, + turnOnlyIfPageFit = false; + switch (evt.keyCode) { + case 38: + case 33: + if (pdfViewer.isVerticalScrollbarEnabled) { + turnOnlyIfPageFit = true; + } + turnPage = -1; + break; + case 8: + if (!isViewerInPresentationMode) { + turnOnlyIfPageFit = true; + } + turnPage = -1; + break; + case 37: + if (pdfViewer.isHorizontalScrollbarEnabled) { + turnOnlyIfPageFit = true; + } + case 75: + case 80: + turnPage = -1; + break; + case 27: + if (PDFViewerApplication.secondaryToolbar?.isOpen) { + PDFViewerApplication.secondaryToolbar.close(); + handled = true; + } + if (!PDFViewerApplication.supportsIntegratedFind && PDFViewerApplication.findBar?.opened) { + PDFViewerApplication.findBar.close(); + handled = true; + } + break; + case 40: + case 34: + if (pdfViewer.isVerticalScrollbarEnabled) { + turnOnlyIfPageFit = true; + } + turnPage = 1; + break; + case 13: + case 32: + if (!isViewerInPresentationMode) { + turnOnlyIfPageFit = true; + } + turnPage = 1; + break; + case 39: + if (pdfViewer.isHorizontalScrollbarEnabled) { + turnOnlyIfPageFit = true; + } + case 74: + case 78: + turnPage = 1; + break; + case 36: + if (isViewerInPresentationMode || PDFViewerApplication.page > 1) { + PDFViewerApplication.page = 1; + handled = true; + ensureViewerFocused = true; + } + break; + case 35: + if (isViewerInPresentationMode || PDFViewerApplication.page < PDFViewerApplication.pagesCount) { + PDFViewerApplication.page = PDFViewerApplication.pagesCount; + handled = true; + ensureViewerFocused = true; + } + break; + case 83: + PDFViewerApplication.pdfCursorTools?.switchTool(CursorTool.SELECT); + break; + case 72: + PDFViewerApplication.pdfCursorTools?.switchTool(CursorTool.HAND); + break; + case 82: + PDFViewerApplication.rotatePages(90); + break; + case 115: + PDFViewerApplication.pdfSidebar?.toggle(); + break; + } + if (turnPage !== 0 && (!turnOnlyIfPageFit || pdfViewer.currentScaleValue === "page-fit")) { + if (turnPage > 0) { + pdfViewer.nextPage(); + } else { + pdfViewer.previousPage(); + } + handled = true; + } + } + if (cmd === 4) { + switch (evt.keyCode) { + case 13: + case 32: + if (!isViewerInPresentationMode && pdfViewer.currentScaleValue !== "page-fit") { + break; + } + pdfViewer.previousPage(); + handled = true; + break; + case 82: + PDFViewerApplication.rotatePages(-90); + break; + } + } + if (!handled && !isViewerInPresentationMode) { + if (evt.keyCode >= 33 && evt.keyCode <= 40 || evt.keyCode === 32 && curElementTagName !== "BUTTON") { + ensureViewerFocused = true; + } + } + if (ensureViewerFocused && !pdfViewer.containsElement(curElement)) { + pdfViewer.focus(); + } + if (handled) { + evt.preventDefault(); + } +} +function beforeUnload(evt) { + evt.preventDefault(); + evt.returnValue = ""; + return false; +} +function webViewerAnnotationEditorStatesChanged(data) { + PDFViewerApplication.externalServices.updateEditorStates(data); +} +function webViewerReportTelemetry({ + details +}) { + PDFViewerApplication.externalServices.reportTelemetry(details); +} +const PDFPrintServiceFactory = { + instance: { + supportsPrinting: false, + createPrintService() { + throw new Error("Not implemented: createPrintService"); + } + } +}; + +;// CONCATENATED MODULE: ./web/preferences.js + +class BasePreferences { + #defaults = Object.freeze({ + "annotationEditorMode": 0, + "annotationMode": 2, + "cursorToolOnLoad": 0, + "defaultZoomDelay": 400, + "defaultZoomValue": "", + "disablePageLabels": false, + "enablePermissions": false, + "enablePrintAutoRotate": true, + "enableScripting": true, + "externalLinkTarget": 0, + "historyUpdateUrl": false, + "ignoreDestinationZoom": false, + "forcePageColors": false, + "pageColorsBackground": "Canvas", + "pageColorsForeground": "CanvasText", + "pdfBugEnabled": false, + "sidebarViewOnLoad": -1, + "scrollModeOnLoad": -1, + "spreadModeOnLoad": -1, + "textLayerMode": 1, + "viewOnLoad": 0, + "disableAutoFetch": false, + "disableFontFace": false, + "disableRange": false, + "disableStream": false, + "enableXfa": true + }); + #prefs = Object.create(null); + #initializedPromise = null; + constructor() { + if (this.constructor === BasePreferences) { + throw new Error("Cannot initialize BasePreferences."); + } + this.#initializedPromise = this._readFromStorage(this.#defaults).then(({ + browserPrefs, + prefs + }) => { + const BROWSER_PREFS = { + "canvasMaxAreaInBytes": -1, + "isInAutomation": false, + "supportsDocumentFonts": true, + "supportsIntegratedFind": false, + "supportsMouseWheelZoomCtrlKey": true, + "supportsMouseWheelZoomMetaKey": true, + "supportsPinchToZoom": true + }; + const options = Object.create(null); + for (const [name, defaultVal] of Object.entries(BROWSER_PREFS)) { + const prefVal = browserPrefs?.[name]; + options[name] = typeof prefVal === typeof defaultVal ? prefVal : defaultVal; + } + for (const [name, defaultVal] of Object.entries(this.#defaults)) { + const prefVal = prefs?.[name]; + options[name] = this.#prefs[name] = typeof prefVal === typeof defaultVal ? prefVal : defaultVal; + } + AppOptions.setAll(options, true); + }); + } + async _writeToStorage(prefObj) { + throw new Error("Not implemented: _writeToStorage"); + } + async _readFromStorage(prefObj) { + throw new Error("Not implemented: _readFromStorage"); + } + async reset() { + await this.#initializedPromise; + const prefs = this.#prefs; + this.#prefs = Object.create(null); + return this._writeToStorage(this.#defaults).catch(reason => { + this.#prefs = prefs; + throw reason; + }); + } + async set(name, value) { + await this.#initializedPromise; + const defaultValue = this.#defaults[name], + prefs = this.#prefs; + if (defaultValue === undefined) { + throw new Error(`Set preference: "${name}" is undefined.`); + } else if (value === undefined) { + throw new Error("Set preference: no value is specified."); + } + const valueType = typeof value, + defaultType = typeof defaultValue; + if (valueType !== defaultType) { + if (valueType === "number" && defaultType === "string") { + value = value.toString(); + } else { + throw new Error(`Set preference: "${value}" is a ${valueType}, expected a ${defaultType}.`); + } + } else if (valueType === "number" && !Number.isInteger(value)) { + throw new Error(`Set preference: "${value}" must be an integer.`); + } + this.#prefs[name] = value; + return this._writeToStorage(this.#prefs).catch(reason => { + this.#prefs = prefs; + throw reason; + }); + } + async get(name) { + await this.#initializedPromise; + const defaultValue = this.#defaults[name]; + if (defaultValue === undefined) { + throw new Error(`Get preference: "${name}" is undefined.`); + } + return this.#prefs[name] ?? defaultValue; + } + get initializedPromise() { + return this.#initializedPromise; + } +} + +;// CONCATENATED MODULE: ./web/download_manager.js + +; +function download(blobUrl, filename) { + const a = document.createElement("a"); + if (!a.click) { + throw new Error('DownloadManager: "a.click()" is not supported.'); + } + a.href = blobUrl; + a.target = "_parent"; + if ("download" in a) { + a.download = filename; + } + (document.body || document.documentElement).append(a); + a.click(); + a.remove(); +} +class DownloadManager { + #openBlobUrls = new WeakMap(); + downloadUrl(url, filename, _options) { + if (!createValidAbsoluteUrl(url, "http://example.com")) { + console.error(`downloadUrl - not a valid URL: ${url}`); + return; + } + download(url + "#pdfjs.action=download", filename); + } + downloadData(data, filename, contentType) { + const blobUrl = URL.createObjectURL(new Blob([data], { + type: contentType + })); + download(blobUrl, filename); + } + openOrDownloadData(data, filename, dest = null) { + const isPdfData = isPdfFile(filename); + const contentType = isPdfData ? "application/pdf" : ""; + if (isPdfData) { + let blobUrl = this.#openBlobUrls.get(data); + if (!blobUrl) { + blobUrl = URL.createObjectURL(new Blob([data], { + type: contentType + })); + this.#openBlobUrls.set(data, blobUrl); + } + let viewerUrl; + viewerUrl = "?file=" + encodeURIComponent(blobUrl + "#" + filename); + if (dest) { + viewerUrl += `#${escape(dest)}`; + } + try { + window.open(viewerUrl); + return true; + } catch (ex) { + console.error(`openOrDownloadData: ${ex}`); + URL.revokeObjectURL(blobUrl); + this.#openBlobUrls.delete(data); + } + } + this.downloadData(data, filename, contentType); + return false; + } + download(blob, url, filename, _options) { + const blobUrl = URL.createObjectURL(blob); + download(blobUrl, filename); + } +} + +;// CONCATENATED MODULE: ./web/genericl10n.js + + + +class GenericL10n extends L10n { + constructor(lang) { + super({ + lang + }); + this._setL10n(new DOMLocalization([], GenericL10n.#generateBundles.bind(GenericL10n, "en-US", this.getLanguage()))); + } + static async *#generateBundles(defaultLang, baseLang) { + const { + baseURL, + paths + } = await this.#getPaths(); + const langs = baseLang === defaultLang ? [baseLang] : [baseLang, defaultLang]; + for (const lang of langs) { + const bundle = await this.#createBundle(lang, baseURL, paths); + if (bundle) { + yield bundle; + } + } + } + static async #createBundle(lang, baseURL, paths) { + const path = paths[lang]; + if (!path) { + return null; + } + const url = new URL(path, baseURL); + const data = await fetch(url); + const text = await data.text(); + const resource = new FluentResource(text); + const bundle = new FluentBundle(lang); + const errors = bundle.addResource(resource); + if (errors.length) { + console.error("L10n errors", errors); + } + return bundle; + } + static async #getPaths() { + const { + href + } = document.querySelector(`link[type="application/l10n"]`); + const data = await fetch(href); + const paths = await data.json(); + return { + baseURL: href.replace(/[^/]*$/, "") || "./", + paths + }; + } +} + +;// CONCATENATED MODULE: ./web/generic_scripting.js + +async function docProperties(pdfDocument) { + const url = "", + baseUrl = url.split("#")[0]; + let { + info, + metadata, + contentDispositionFilename, + contentLength + } = await pdfDocument.getMetadata(); + if (!contentLength) { + const { + length + } = await pdfDocument.getDownloadInfo(); + contentLength = length; + } + return { + ...info, + baseURL: baseUrl, + filesize: contentLength, + filename: contentDispositionFilename || getPdfFilenameFromUrl(url), + metadata: metadata?.getRaw(), + authors: metadata?.get("dc:creator"), + numPages: pdfDocument.numPages, + URL: url + }; +} +class GenericScripting { + constructor(sandboxBundleSrc) { + this._ready = new Promise((resolve, reject) => { + const sandbox = import(/* webpackIgnore: true */ sandboxBundleSrc); + sandbox.then(pdfjsSandbox => { + resolve(pdfjsSandbox.QuickJSSandbox()); + }).catch(reject); + }); + } + async createSandbox(data) { + const sandbox = await this._ready; + sandbox.create(data); + } + async dispatchEventInSandbox(event) { + const sandbox = await this._ready; + setTimeout(() => sandbox.dispatchEvent(event), 0); + } + async destroySandbox() { + const sandbox = await this._ready; + sandbox.nukeSandbox(); + } +} + +;// CONCATENATED MODULE: ./web/genericcom.js + + + + + + +; +const GenericCom = {}; +class GenericPreferences extends BasePreferences { + async _writeToStorage(prefObj) { + localStorage.setItem("pdfjs.preferences", JSON.stringify(prefObj)); + } + async _readFromStorage(prefObj) { + return { + prefs: JSON.parse(localStorage.getItem("pdfjs.preferences")) + }; + } +} +class GenericExternalServices extends DefaultExternalServices { + static createDownloadManager() { + return new DownloadManager(); + } + static createPreferences() { + return new GenericPreferences(); + } + static async createL10n() { + return new GenericL10n(AppOptions.get("locale") || "en-US"); + } + static createScripting({ + sandboxBundleSrc + }) { + return new GenericScripting(sandboxBundleSrc); + } +} +PDFViewerApplication.externalServices = GenericExternalServices; + +;// CONCATENATED MODULE: ./web/print_utils.js + + + +function getXfaHtmlForPrinting(printContainer, pdfDocument) { + const xfaHtml = pdfDocument.allXfaHtml; + const linkService = new SimpleLinkService(); + const scale = Math.round(PixelsPerInch.PDF_TO_CSS_UNITS * 100) / 100; + for (const xfaPage of xfaHtml.children) { + const page = document.createElement("div"); + page.className = "xfaPrintedPage"; + printContainer.append(page); + const builder = new XfaLayerBuilder({ + pdfPage: null, + annotationStorage: pdfDocument.annotationStorage, + linkService, + xfaHtml: xfaPage + }); + const viewport = getXfaPageViewport(xfaPage, { + scale + }); + builder.render(viewport, "print"); + page.append(builder.div); + } +} + +;// CONCATENATED MODULE: ./web/pdf_print_service.js + + + +let activeService = null; +let dialog = null; +let overlayManager = null; +function renderPage(activeServiceOnEntry, pdfDocument, pageNumber, size, printResolution, optionalContentConfigPromise, printAnnotationStoragePromise) { + const scratchCanvas = activeService.scratchCanvas; + const PRINT_UNITS = printResolution / PixelsPerInch.PDF; + scratchCanvas.width = Math.floor(size.width * PRINT_UNITS); + scratchCanvas.height = Math.floor(size.height * PRINT_UNITS); + const ctx = scratchCanvas.getContext("2d"); + ctx.save(); + ctx.fillStyle = "rgb(255, 255, 255)"; + ctx.fillRect(0, 0, scratchCanvas.width, scratchCanvas.height); + ctx.restore(); + return Promise.all([pdfDocument.getPage(pageNumber), printAnnotationStoragePromise]).then(function ([pdfPage, printAnnotationStorage]) { + const renderContext = { + canvasContext: ctx, + transform: [PRINT_UNITS, 0, 0, PRINT_UNITS, 0, 0], + viewport: pdfPage.getViewport({ + scale: 1, + rotation: size.rotation + }), + intent: "print", + annotationMode: AnnotationMode.ENABLE_STORAGE, + optionalContentConfigPromise, + printAnnotationStorage + }; + return pdfPage.render(renderContext).promise; + }); +} +class PDFPrintService { + constructor(pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise = null, printAnnotationStoragePromise = null) { + this.pdfDocument = pdfDocument; + this.pagesOverview = pagesOverview; + this.printContainer = printContainer; + this._printResolution = printResolution || 150; + this._optionalContentConfigPromise = optionalContentConfigPromise || pdfDocument.getOptionalContentConfig(); + this._printAnnotationStoragePromise = printAnnotationStoragePromise || Promise.resolve(); + this.currentPage = -1; + this.scratchCanvas = document.createElement("canvas"); + } + layout() { + this.throwIfInactive(); + const body = document.querySelector("body"); + body.setAttribute("data-pdfjsprinting", true); + const { + width, + height + } = this.pagesOverview[0]; + const hasEqualPageSizes = this.pagesOverview.every(size => size.width === width && size.height === height); + if (!hasEqualPageSizes) { + console.warn("Not all pages have the same size. The printed result may be incorrect!"); + } + this.pageStyleSheet = document.createElement("style"); + this.pageStyleSheet.textContent = `@page { size: ${width}pt ${height}pt;}`; + body.append(this.pageStyleSheet); + } + destroy() { + if (activeService !== this) { + return; + } + this.printContainer.textContent = ""; + const body = document.querySelector("body"); + body.removeAttribute("data-pdfjsprinting"); + if (this.pageStyleSheet) { + this.pageStyleSheet.remove(); + this.pageStyleSheet = null; + } + this.scratchCanvas.width = this.scratchCanvas.height = 0; + this.scratchCanvas = null; + activeService = null; + ensureOverlay().then(function () { + if (overlayManager.active === dialog) { + overlayManager.close(dialog); + } + }); + } + renderPages() { + if (this.pdfDocument.isPureXfa) { + getXfaHtmlForPrinting(this.printContainer, this.pdfDocument); + return Promise.resolve(); + } + const pageCount = this.pagesOverview.length; + const renderNextPage = (resolve, reject) => { + this.throwIfInactive(); + if (++this.currentPage >= pageCount) { + renderProgress(pageCount, pageCount); + resolve(); + return; + } + const index = this.currentPage; + renderProgress(index, pageCount); + renderPage(this, this.pdfDocument, index + 1, this.pagesOverview[index], this._printResolution, this._optionalContentConfigPromise, this._printAnnotationStoragePromise).then(this.useRenderedPage.bind(this)).then(function () { + renderNextPage(resolve, reject); + }, reject); + }; + return new Promise(renderNextPage); + } + useRenderedPage() { + this.throwIfInactive(); + const img = document.createElement("img"); + const scratchCanvas = this.scratchCanvas; + if ("toBlob" in scratchCanvas) { + scratchCanvas.toBlob(function (blob) { + img.src = URL.createObjectURL(blob); + }); + } else { + img.src = scratchCanvas.toDataURL(); + } + const wrapper = document.createElement("div"); + wrapper.className = "printedPage"; + wrapper.append(img); + this.printContainer.append(wrapper); + return new Promise(function (resolve, reject) { + img.onload = resolve; + img.onerror = reject; + }); + } + performPrint() { + this.throwIfInactive(); + return new Promise(resolve => { + setTimeout(() => { + if (!this.active) { + resolve(); + return; + } + print.call(window); + setTimeout(resolve, 20); + }, 0); + }); + } + get active() { + return this === activeService; + } + throwIfInactive() { + if (!this.active) { + throw new Error("This print request was cancelled or completed."); + } + } +} +const print = window.print; +window.print = function () { + if (activeService) { + console.warn("Ignored window.print() because of a pending print job."); + return; + } + ensureOverlay().then(function () { + if (activeService) { + overlayManager.open(dialog); + } + }); + try { + dispatchEvent("beforeprint"); + } finally { + if (!activeService) { + console.error("Expected print service to be initialized."); + ensureOverlay().then(function () { + if (overlayManager.active === dialog) { + overlayManager.close(dialog); + } + }); + return; + } + const activeServiceOnEntry = activeService; + activeService.renderPages().then(function () { + return activeServiceOnEntry.performPrint(); + }).catch(function () {}).then(function () { + if (activeServiceOnEntry.active) { + abort(); + } + }); + } +}; +function dispatchEvent(eventType) { + const event = new CustomEvent(eventType, { + bubbles: false, + cancelable: false, + detail: "custom" + }); + window.dispatchEvent(event); +} +function abort() { + if (activeService) { + activeService.destroy(); + dispatchEvent("afterprint"); + } +} +function renderProgress(index, total) { + dialog ||= document.getElementById("printServiceDialog"); + const progress = Math.round(100 * index / total); + const progressBar = dialog.querySelector("progress"); + const progressPerc = dialog.querySelector(".relative-progress"); + progressBar.value = progress; + progressPerc.setAttribute("data-l10n-args", JSON.stringify({ + progress + })); +} +window.addEventListener("keydown", function (event) { + if (event.keyCode === 80 && (event.ctrlKey || event.metaKey) && !event.altKey && (!event.shiftKey || window.chrome || window.opera)) { + window.print(); + event.preventDefault(); + event.stopImmediatePropagation(); + } +}, true); +if ("onbeforeprint" in window) { + const stopPropagationIfNeeded = function (event) { + if (event.detail !== "custom") { + event.stopImmediatePropagation(); + } + }; + window.addEventListener("beforeprint", stopPropagationIfNeeded); + window.addEventListener("afterprint", stopPropagationIfNeeded); +} +let overlayPromise; +function ensureOverlay() { + if (!overlayPromise) { + overlayManager = PDFViewerApplication.overlayManager; + if (!overlayManager) { + throw new Error("The overlay manager has not yet been initialized."); + } + dialog ||= document.getElementById("printServiceDialog"); + overlayPromise = overlayManager.register(dialog, true); + document.getElementById("printCancel").onclick = abort; + dialog.addEventListener("close", abort); + } + return overlayPromise; +} +PDFPrintServiceFactory.instance = { + supportsPrinting: true, + createPrintService(pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise, printAnnotationStoragePromise) { + if (activeService) { + throw new Error("The print service is created and active."); + } + activeService = new PDFPrintService(pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise, printAnnotationStoragePromise); + return activeService; + } +}; + +;// CONCATENATED MODULE: ./web/viewer.js + + + + + + +const pdfjsVersion = '4.0.189'; +const pdfjsBuild = '50f52b43a'; +const AppConstants = { + LinkTarget: LinkTarget, + RenderingStates: RenderingStates, + ScrollMode: ScrollMode, + SpreadMode: SpreadMode +}; +window.PDFViewerApplication = PDFViewerApplication; +window.PDFViewerApplicationConstants = AppConstants; +window.PDFViewerApplicationOptions = AppOptions; +function getViewerConfiguration() { + return { + appContainer: document.body, + mainContainer: document.getElementById("viewerContainer"), + viewerContainer: document.getElementById("viewer"), + toolbar: { + container: document.getElementById("toolbarViewer"), + numPages: document.getElementById("numPages"), + pageNumber: document.getElementById("pageNumber"), + scaleSelect: document.getElementById("scaleSelect"), + customScaleOption: document.getElementById("customScaleOption"), + previous: document.getElementById("previous"), + next: document.getElementById("next"), + zoomIn: document.getElementById("zoomIn"), + zoomOut: document.getElementById("zoomOut"), + viewFind: document.getElementById("viewFind"), + openFile: document.getElementById("openFile"), + print: document.getElementById("print"), + editorFreeTextButton: document.getElementById("editorFreeText"), + editorFreeTextParamsToolbar: document.getElementById("editorFreeTextParamsToolbar"), + editorInkButton: document.getElementById("editorInk"), + editorInkParamsToolbar: document.getElementById("editorInkParamsToolbar"), + editorStampButton: document.getElementById("editorStamp"), + editorStampParamsToolbar: document.getElementById("editorStampParamsToolbar"), + download: document.getElementById("download") + }, + secondaryToolbar: { + toolbar: document.getElementById("secondaryToolbar"), + toggleButton: document.getElementById("secondaryToolbarToggle"), + presentationModeButton: document.getElementById("presentationMode"), + openFileButton: document.getElementById("secondaryOpenFile"), + printButton: document.getElementById("secondaryPrint"), + downloadButton: document.getElementById("secondaryDownload"), + viewBookmarkButton: document.getElementById("viewBookmark"), + firstPageButton: document.getElementById("firstPage"), + lastPageButton: document.getElementById("lastPage"), + pageRotateCwButton: document.getElementById("pageRotateCw"), + pageRotateCcwButton: document.getElementById("pageRotateCcw"), + cursorSelectToolButton: document.getElementById("cursorSelectTool"), + cursorHandToolButton: document.getElementById("cursorHandTool"), + scrollPageButton: document.getElementById("scrollPage"), + scrollVerticalButton: document.getElementById("scrollVertical"), + scrollHorizontalButton: document.getElementById("scrollHorizontal"), + scrollWrappedButton: document.getElementById("scrollWrapped"), + spreadNoneButton: document.getElementById("spreadNone"), + spreadOddButton: document.getElementById("spreadOdd"), + spreadEvenButton: document.getElementById("spreadEven"), + documentPropertiesButton: document.getElementById("documentProperties") + }, + sidebar: { + outerContainer: document.getElementById("outerContainer"), + sidebarContainer: document.getElementById("sidebarContainer"), + toggleButton: document.getElementById("sidebarToggle"), + resizer: document.getElementById("sidebarResizer"), + thumbnailButton: document.getElementById("viewThumbnail"), + outlineButton: document.getElementById("viewOutline"), + attachmentsButton: document.getElementById("viewAttachments"), + layersButton: document.getElementById("viewLayers"), + thumbnailView: document.getElementById("thumbnailView"), + outlineView: document.getElementById("outlineView"), + attachmentsView: document.getElementById("attachmentsView"), + layersView: document.getElementById("layersView"), + outlineOptionsContainer: document.getElementById("outlineOptionsContainer"), + currentOutlineItemButton: document.getElementById("currentOutlineItem") + }, + findBar: { + bar: document.getElementById("findbar"), + toggleButton: document.getElementById("viewFind"), + findField: document.getElementById("findInput"), + highlightAllCheckbox: document.getElementById("findHighlightAll"), + caseSensitiveCheckbox: document.getElementById("findMatchCase"), + matchDiacriticsCheckbox: document.getElementById("findMatchDiacritics"), + entireWordCheckbox: document.getElementById("findEntireWord"), + findMsg: document.getElementById("findMsg"), + findResultsCount: document.getElementById("findResultsCount"), + findPreviousButton: document.getElementById("findPrevious"), + findNextButton: document.getElementById("findNext") + }, + passwordOverlay: { + dialog: document.getElementById("passwordDialog"), + label: document.getElementById("passwordText"), + input: document.getElementById("password"), + submitButton: document.getElementById("passwordSubmit"), + cancelButton: document.getElementById("passwordCancel") + }, + documentProperties: { + dialog: document.getElementById("documentPropertiesDialog"), + closeButton: document.getElementById("documentPropertiesClose"), + fields: { + fileName: document.getElementById("fileNameField"), + fileSize: document.getElementById("fileSizeField"), + title: document.getElementById("titleField"), + author: document.getElementById("authorField"), + subject: document.getElementById("subjectField"), + keywords: document.getElementById("keywordsField"), + creationDate: document.getElementById("creationDateField"), + modificationDate: document.getElementById("modificationDateField"), + creator: document.getElementById("creatorField"), + producer: document.getElementById("producerField"), + version: document.getElementById("versionField"), + pageCount: document.getElementById("pageCountField"), + pageSize: document.getElementById("pageSizeField"), + linearized: document.getElementById("linearizedField") + } + }, + altTextDialog: { + dialog: document.getElementById("altTextDialog"), + optionDescription: document.getElementById("descriptionButton"), + optionDecorative: document.getElementById("decorativeButton"), + textarea: document.getElementById("descriptionTextarea"), + cancelButton: document.getElementById("altTextCancel"), + saveButton: document.getElementById("altTextSave") + }, + annotationEditorParams: { + editorFreeTextFontSize: document.getElementById("editorFreeTextFontSize"), + editorFreeTextColor: document.getElementById("editorFreeTextColor"), + editorInkColor: document.getElementById("editorInkColor"), + editorInkThickness: document.getElementById("editorInkThickness"), + editorInkOpacity: document.getElementById("editorInkOpacity"), + editorStampAddImage: document.getElementById("editorStampAddImage") + }, + printContainer: document.getElementById("printContainer"), + openFileInput: document.getElementById("fileInput"), + debuggerScriptPath: "./debugger.mjs" + }; +} +function webViewerLoad() { + const config = getViewerConfiguration(); + const event = new CustomEvent("webviewerloaded", { + bubbles: true, + cancelable: true, + detail: { + source: window + } + }); + try { + parent.document.dispatchEvent(event); + } catch (ex) { + console.error(`webviewerloaded: ${ex}`); + document.dispatchEvent(event); + } + PDFViewerApplication.run(config); +} +document.blockUnblockOnload?.(true); +if (document.readyState === "interactive" || document.readyState === "complete") { + webViewerLoad(); +} else { + document.addEventListener("DOMContentLoaded", webViewerLoad, true); +} + +var __webpack_exports__PDFViewerApplication = __webpack_exports__.PDFViewerApplication; +var __webpack_exports__PDFViewerApplicationConstants = __webpack_exports__.PDFViewerApplicationConstants; +var __webpack_exports__PDFViewerApplicationOptions = __webpack_exports__.PDFViewerApplicationOptions; +export { __webpack_exports__PDFViewerApplication as PDFViewerApplication, __webpack_exports__PDFViewerApplicationConstants as PDFViewerApplicationConstants, __webpack_exports__PDFViewerApplicationOptions as PDFViewerApplicationOptions }; + +//# sourceMappingURL=viewer.mjs.map \ No newline at end of file diff --git a/qdntz/加载PDF/pdfjs-4.0.189-dist/web/viewer.mjs.map b/qdntz/加载PDF/pdfjs-4.0.189-dist/web/viewer.mjs.map new file mode 100644 index 0000000..3fe77fb --- /dev/null +++ b/qdntz/加载PDF/pdfjs-4.0.189-dist/web/viewer.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"viewer.mjs","mappings":"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","sources":["webpack://pdf.js/webpack/bootstrap","webpack://pdf.js/webpack/runtime/define property getters","webpack://pdf.js/webpack/runtime/hasOwnProperty shorthand","webpack://pdf.js/web/ui_utils.js","webpack://pdf.js/web/pdfjs.js","webpack://pdf.js/web/app_options.js","webpack://pdf.js/web/event_utils.js","webpack://pdf.js/web/pdf_link_service.js","webpack://pdf.js/web/alt_text_manager.js","webpack://pdf.js/web/annotation_editor_params.js","webpack://pdf.js/web/overlay_manager.js","webpack://pdf.js/web/password_prompt.js","webpack://pdf.js/web/base_tree_viewer.js","webpack://pdf.js/web/pdf_attachment_viewer.js","webpack://pdf.js/web/grab_to_pan.js","webpack://pdf.js/web/pdf_cursor_tools.js","webpack://pdf.js/web/pdf_document_properties.js","webpack://pdf.js/web/pdf_find_utils.js","webpack://pdf.js/web/pdf_find_controller.js","webpack://pdf.js/web/pdf_find_bar.js","webpack://pdf.js/web/pdf_history.js","webpack://pdf.js/web/pdf_layer_viewer.js","webpack://pdf.js/web/pdf_outline_viewer.js","webpack://pdf.js/web/pdf_presentation_mode.js","webpack://pdf.js/web/pdf_rendering_queue.js","webpack://pdf.js/web/pdf_scripting_manager.js","webpack://pdf.js/web/pdf_sidebar.js","webpack://pdf.js/web/pdf_thumbnail_view.js","webpack://pdf.js/web/pdf_thumbnail_viewer.js","webpack://pdf.js/node_modules/@fluent/bundle/esm/types.js","webpack://pdf.js/node_modules/@fluent/bundle/esm/resolver.js","webpack://pdf.js/node_modules/@fluent/bundle/esm/scope.js","webpack://pdf.js/node_modules/@fluent/bundle/esm/builtins.js","webpack://pdf.js/node_modules/@fluent/bundle/esm/memoizer.js","webpack://pdf.js/node_modules/@fluent/bundle/esm/bundle.js","webpack://pdf.js/node_modules/@fluent/bundle/esm/resource.js","webpack://pdf.js/node_modules/@fluent/bundle/esm/index.js","webpack://pdf.js/node_modules/@fluent/dom/esm/overlay.js","webpack://pdf.js/node_modules/cached-iterable/src/cached_iterable.mjs","webpack://pdf.js/node_modules/cached-iterable/src/cached_sync_iterable.mjs","webpack://pdf.js/node_modules/cached-iterable/src/cached_async_iterable.mjs","webpack://pdf.js/node_modules/cached-iterable/src/index.mjs","webpack://pdf.js/node_modules/@fluent/dom/esm/localization.js","webpack://pdf.js/node_modules/@fluent/dom/esm/dom_localization.js","webpack://pdf.js/node_modules/@fluent/dom/esm/index.js","webpack://pdf.js/web/l10n.js","webpack://pdf.js/web/l10n_utils.js","webpack://pdf.js/web/annotation_editor_layer_builder.js","webpack://pdf.js/web/annotation_layer_builder.js","webpack://pdf.js/web/struct_tree_layer_builder.js","webpack://pdf.js/web/text_accessibility.js","webpack://pdf.js/web/text_highlighter.js","webpack://pdf.js/web/text_layer_builder.js","webpack://pdf.js/web/xfa_layer_builder.js","webpack://pdf.js/web/pdf_page_view.js","webpack://pdf.js/web/pdf_viewer.js","webpack://pdf.js/web/secondary_toolbar.js","webpack://pdf.js/web/toolbar.js","webpack://pdf.js/web/view_history.js","webpack://pdf.js/web/app.js","webpack://pdf.js/web/preferences.js","webpack://pdf.js/web/download_manager.js","webpack://pdf.js/web/genericl10n.js","webpack://pdf.js/web/generic_scripting.js","webpack://pdf.js/web/genericcom.js","webpack://pdf.js/web/print_utils.js","webpack://pdf.js/web/pdf_print_service.js","webpack://pdf.js/web/viewer.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DEFAULT_SCALE_VALUE = \"auto\";\nconst DEFAULT_SCALE = 1.0;\nconst DEFAULT_SCALE_DELTA = 1.1;\nconst MIN_SCALE = 0.1;\nconst MAX_SCALE = 10.0;\nconst UNKNOWN_SCALE = 0;\nconst MAX_AUTO_SCALE = 1.25;\nconst SCROLLBAR_PADDING = 40;\nconst VERTICAL_PADDING = 5;\n\nconst RenderingStates = {\n INITIAL: 0,\n RUNNING: 1,\n PAUSED: 2,\n FINISHED: 3,\n};\n\nconst PresentationModeState = {\n UNKNOWN: 0,\n NORMAL: 1,\n CHANGING: 2,\n FULLSCREEN: 3,\n};\n\nconst SidebarView = {\n UNKNOWN: -1,\n NONE: 0,\n THUMBS: 1, // Default value.\n OUTLINE: 2,\n ATTACHMENTS: 3,\n LAYERS: 4,\n};\n\nconst TextLayerMode = {\n DISABLE: 0,\n ENABLE: 1,\n ENABLE_PERMISSIONS: 2,\n};\n\nconst ScrollMode = {\n UNKNOWN: -1,\n VERTICAL: 0, // Default value.\n HORIZONTAL: 1,\n WRAPPED: 2,\n PAGE: 3,\n};\n\nconst SpreadMode = {\n UNKNOWN: -1,\n NONE: 0, // Default value.\n ODD: 1,\n EVEN: 2,\n};\n\nconst CursorTool = {\n SELECT: 0, // The default value.\n HAND: 1,\n ZOOM: 2,\n};\n\n// Used by `PDFViewerApplication`, and by the API unit-tests.\nconst AutoPrintRegExp = /\\bprint\\s*\\(/;\n\n/**\n * Scale factors for the canvas, necessary with HiDPI displays.\n */\nclass OutputScale {\n constructor() {\n const pixelRatio = window.devicePixelRatio || 1;\n\n /**\n * @type {number} Horizontal scale.\n */\n this.sx = pixelRatio;\n\n /**\n * @type {number} Vertical scale.\n */\n this.sy = pixelRatio;\n }\n\n /**\n * @type {boolean} Returns `true` when scaling is required, `false` otherwise.\n */\n get scaled() {\n return this.sx !== 1 || this.sy !== 1;\n }\n}\n\n/**\n * Scrolls specified element into view of its parent.\n * @param {HTMLElement} element - The element to be visible.\n * @param {Object} [spot] - An object with optional top and left properties,\n * specifying the offset from the top left edge.\n * @param {number} [spot.left]\n * @param {number} [spot.top]\n * @param {boolean} [scrollMatches] - When scrolling search results into view,\n * ignore elements that either: Contains marked content identifiers,\n * or have the CSS-rule `overflow: hidden;` set. The default value is `false`.\n */\nfunction scrollIntoView(element, spot, scrollMatches = false) {\n // Assuming offsetParent is available (it's not available when viewer is in\n // hidden iframe or object). We have to scroll: if the offsetParent is not set\n // producing the error. See also animationStarted.\n let parent = element.offsetParent;\n if (!parent) {\n console.error(\"offsetParent is not set -- cannot scroll\");\n return;\n }\n let offsetY = element.offsetTop + element.clientTop;\n let offsetX = element.offsetLeft + element.clientLeft;\n while (\n (parent.clientHeight === parent.scrollHeight &&\n parent.clientWidth === parent.scrollWidth) ||\n (scrollMatches &&\n (parent.classList.contains(\"markedContent\") ||\n getComputedStyle(parent).overflow === \"hidden\"))\n ) {\n offsetY += parent.offsetTop;\n offsetX += parent.offsetLeft;\n\n parent = parent.offsetParent;\n if (!parent) {\n return; // no need to scroll\n }\n }\n if (spot) {\n if (spot.top !== undefined) {\n offsetY += spot.top;\n }\n if (spot.left !== undefined) {\n offsetX += spot.left;\n parent.scrollLeft = offsetX;\n }\n }\n parent.scrollTop = offsetY;\n}\n\n/**\n * Helper function to start monitoring the scroll event and converting them into\n * PDF.js friendly one: with scroll debounce and scroll direction.\n */\nfunction watchScroll(viewAreaElement, callback) {\n const debounceScroll = function (evt) {\n if (rAF) {\n return;\n }\n // schedule an invocation of scroll for next animation frame.\n rAF = window.requestAnimationFrame(function viewAreaElementScrolled() {\n rAF = null;\n\n const currentX = viewAreaElement.scrollLeft;\n const lastX = state.lastX;\n if (currentX !== lastX) {\n state.right = currentX > lastX;\n }\n state.lastX = currentX;\n const currentY = viewAreaElement.scrollTop;\n const lastY = state.lastY;\n if (currentY !== lastY) {\n state.down = currentY > lastY;\n }\n state.lastY = currentY;\n callback(state);\n });\n };\n\n const state = {\n right: true,\n down: true,\n lastX: viewAreaElement.scrollLeft,\n lastY: viewAreaElement.scrollTop,\n _eventHandler: debounceScroll,\n };\n\n let rAF = null;\n viewAreaElement.addEventListener(\"scroll\", debounceScroll, true);\n return state;\n}\n\n/**\n * Helper function to parse query string (e.g. ?param1=value¶m2=...).\n * @param {string} query\n * @returns {Map}\n */\nfunction parseQueryString(query) {\n const params = new Map();\n for (const [key, value] of new URLSearchParams(query)) {\n params.set(key.toLowerCase(), value);\n }\n return params;\n}\n\nconst InvisibleCharactersRegExp = /[\\x00-\\x1F]/g;\n\n/**\n * @param {string} str\n * @param {boolean} [replaceInvisible]\n */\nfunction removeNullCharacters(str, replaceInvisible = false) {\n if (!InvisibleCharactersRegExp.test(str)) {\n return str;\n }\n if (replaceInvisible) {\n return str.replaceAll(InvisibleCharactersRegExp, m => {\n return m === \"\\x00\" ? \"\" : \" \";\n });\n }\n return str.replaceAll(\"\\x00\", \"\");\n}\n\n/**\n * Use binary search to find the index of the first item in a given array which\n * passes a given condition. The items are expected to be sorted in the sense\n * that if the condition is true for one item in the array, then it is also true\n * for all following items.\n *\n * @returns {number} Index of the first array element to pass the test,\n * or |items.length| if no such element exists.\n */\nfunction binarySearchFirstItem(items, condition, start = 0) {\n let minIndex = start;\n let maxIndex = items.length - 1;\n\n if (maxIndex < 0 || !condition(items[maxIndex])) {\n return items.length;\n }\n if (condition(items[minIndex])) {\n return minIndex;\n }\n\n while (minIndex < maxIndex) {\n const currentIndex = (minIndex + maxIndex) >> 1;\n const currentItem = items[currentIndex];\n if (condition(currentItem)) {\n maxIndex = currentIndex;\n } else {\n minIndex = currentIndex + 1;\n }\n }\n return minIndex; /* === maxIndex */\n}\n\n/**\n * Approximates float number as a fraction using Farey sequence (max order\n * of 8).\n * @param {number} x - Positive float number.\n * @returns {Array} Estimated fraction: the first array item is a numerator,\n * the second one is a denominator.\n */\nfunction approximateFraction(x) {\n // Fast paths for int numbers or their inversions.\n if (Math.floor(x) === x) {\n return [x, 1];\n }\n const xinv = 1 / x;\n const limit = 8;\n if (xinv > limit) {\n return [1, limit];\n } else if (Math.floor(xinv) === xinv) {\n return [1, xinv];\n }\n\n const x_ = x > 1 ? xinv : x;\n // a/b and c/d are neighbours in Farey sequence.\n let a = 0,\n b = 1,\n c = 1,\n d = 1;\n // Limiting search to order 8.\n while (true) {\n // Generating next term in sequence (order of q).\n const p = a + c,\n q = b + d;\n if (q > limit) {\n break;\n }\n if (x_ <= p / q) {\n c = p;\n d = q;\n } else {\n a = p;\n b = q;\n }\n }\n let result;\n // Select closest of the neighbours to x.\n if (x_ - a / b < c / d - x_) {\n result = x_ === x ? [a, b] : [b, a];\n } else {\n result = x_ === x ? [c, d] : [d, c];\n }\n return result;\n}\n\nfunction roundToDivide(x, div) {\n const r = x % div;\n return r === 0 ? x : Math.round(x - r + div);\n}\n\n/**\n * @typedef {Object} GetPageSizeInchesParameters\n * @property {number[]} view\n * @property {number} userUnit\n * @property {number} rotate\n */\n\n/**\n * @typedef {Object} PageSize\n * @property {number} width - In inches.\n * @property {number} height - In inches.\n */\n\n/**\n * Gets the size of the specified page, converted from PDF units to inches.\n * @param {GetPageSizeInchesParameters} params\n * @returns {PageSize}\n */\nfunction getPageSizeInches({ view, userUnit, rotate }) {\n const [x1, y1, x2, y2] = view;\n // We need to take the page rotation into account as well.\n const changeOrientation = rotate % 180 !== 0;\n\n const width = ((x2 - x1) / 72) * userUnit;\n const height = ((y2 - y1) / 72) * userUnit;\n\n return {\n width: changeOrientation ? height : width,\n height: changeOrientation ? width : height,\n };\n}\n\n/**\n * Helper function for getVisibleElements.\n *\n * @param {number} index - initial guess at the first visible element\n * @param {Array} views - array of pages, into which `index` is an index\n * @param {number} top - the top of the scroll pane\n * @returns {number} less than or equal to `index` that is definitely at or\n * before the first visible element in `views`, but not by too much. (Usually,\n * this will be the first element in the first partially visible row in\n * `views`, although sometimes it goes back one row further.)\n */\nfunction backtrackBeforeAllVisibleElements(index, views, top) {\n // binarySearchFirstItem's assumption is that the input is ordered, with only\n // one index where the conditions flips from false to true: [false ...,\n // true...]. With vertical scrolling and spreads, it is possible to have\n // [false ..., true, false, true ...]. With wrapped scrolling we can have a\n // similar sequence, with many more mixed true and false in the middle.\n //\n // So there is no guarantee that the binary search yields the index of the\n // first visible element. It could have been any of the other visible elements\n // that were preceded by a hidden element.\n\n // Of course, if either this element or the previous (hidden) element is also\n // the first element, there's nothing to worry about.\n if (index < 2) {\n return index;\n }\n\n // That aside, the possible cases are represented below.\n //\n // **** = fully hidden\n // A*B* = mix of partially visible and/or hidden pages\n // CDEF = fully visible\n //\n // (1) Binary search could have returned A, in which case we can stop.\n // (2) Binary search could also have returned B, in which case we need to\n // check the whole row.\n // (3) Binary search could also have returned C, in which case we need to\n // check the whole previous row.\n //\n // There's one other possibility:\n //\n // **** = fully hidden\n // ABCD = mix of fully and/or partially visible pages\n //\n // (4) Binary search could only have returned A.\n\n // Initially assume that we need to find the beginning of the current row\n // (case 1, 2, or 4), which means finding a page that is above the current\n // page's top. If the found page is partially visible, we're definitely not in\n // case 3, and this assumption is correct.\n let elt = views[index].div;\n let pageTop = elt.offsetTop + elt.clientTop;\n\n if (pageTop >= top) {\n // The found page is fully visible, so we're actually either in case 3 or 4,\n // and unfortunately we can't tell the difference between them without\n // scanning the entire previous row, so we just conservatively assume that\n // we do need to backtrack to that row. In both cases, the previous page is\n // in the previous row, so use its top instead.\n elt = views[index - 1].div;\n pageTop = elt.offsetTop + elt.clientTop;\n }\n\n // Now we backtrack to the first page that still has its bottom below\n // `pageTop`, which is the top of a page in the first visible row (unless\n // we're in case 4, in which case it's the row before that).\n // `index` is found by binary search, so the page at `index - 1` is\n // invisible and we can start looking for potentially visible pages from\n // `index - 2`. (However, if this loop terminates on its first iteration,\n // which is the case when pages are stacked vertically, `index` should remain\n // unchanged, so we use a distinct loop variable.)\n for (let i = index - 2; i >= 0; --i) {\n elt = views[i].div;\n if (elt.offsetTop + elt.clientTop + elt.clientHeight <= pageTop) {\n // We have reached the previous row, so stop now.\n // This loop is expected to terminate relatively quickly because the\n // number of pages per row is expected to be small.\n break;\n }\n index = i;\n }\n return index;\n}\n\n/**\n * @typedef {Object} GetVisibleElementsParameters\n * @property {HTMLElement} scrollEl - A container that can possibly scroll.\n * @property {Array} views - Objects with a `div` property that contains an\n * HTMLElement, which should all be descendants of `scrollEl` satisfying the\n * relevant layout assumptions.\n * @property {boolean} sortByVisibility - If `true`, the returned elements are\n * sorted in descending order of the percent of their padding box that is\n * visible. The default value is `false`.\n * @property {boolean} horizontal - If `true`, the elements are assumed to be\n * laid out horizontally instead of vertically. The default value is `false`.\n * @property {boolean} rtl - If `true`, the `scrollEl` container is assumed to\n * be in right-to-left mode. The default value is `false`.\n */\n\n/**\n * Generic helper to find out what elements are visible within a scroll pane.\n *\n * Well, pretty generic. There are some assumptions placed on the elements\n * referenced by `views`:\n * - If `horizontal`, no left of any earlier element is to the right of the\n * left of any later element.\n * - Otherwise, `views` can be split into contiguous rows where, within a row,\n * no top of any element is below the bottom of any other element, and\n * between rows, no bottom of any element in an earlier row is below the\n * top of any element in a later row.\n *\n * (Here, top, left, etc. all refer to the padding edge of the element in\n * question. For pages, that ends up being equivalent to the bounding box of the\n * rendering canvas. Earlier and later refer to index in `views`, not page\n * layout.)\n *\n * @param {GetVisibleElementsParameters} params\n * @returns {Object} `{ first, last, views: [{ id, x, y, view, percent }] }`\n */\nfunction getVisibleElements({\n scrollEl,\n views,\n sortByVisibility = false,\n horizontal = false,\n rtl = false,\n}) {\n const top = scrollEl.scrollTop,\n bottom = top + scrollEl.clientHeight;\n const left = scrollEl.scrollLeft,\n right = left + scrollEl.clientWidth;\n\n // Throughout this \"generic\" function, comments will assume we're working with\n // PDF document pages, which is the most important and complex case. In this\n // case, the visible elements we're actually interested is the page canvas,\n // which is contained in a wrapper which adds no padding/border/margin, which\n // is itself contained in `view.div` which adds no padding (but does add a\n // border). So, as specified in this function's doc comment, this function\n // does all of its work on the padding edge of the provided views, starting at\n // offsetLeft/Top (which includes margin) and adding clientLeft/Top (which is\n // the border). Adding clientWidth/Height gets us the bottom-right corner of\n // the padding edge.\n function isElementBottomAfterViewTop(view) {\n const element = view.div;\n const elementBottom =\n element.offsetTop + element.clientTop + element.clientHeight;\n return elementBottom > top;\n }\n function isElementNextAfterViewHorizontally(view) {\n const element = view.div;\n const elementLeft = element.offsetLeft + element.clientLeft;\n const elementRight = elementLeft + element.clientWidth;\n return rtl ? elementLeft < right : elementRight > left;\n }\n\n const visible = [],\n ids = new Set(),\n numViews = views.length;\n let firstVisibleElementInd = binarySearchFirstItem(\n views,\n horizontal\n ? isElementNextAfterViewHorizontally\n : isElementBottomAfterViewTop\n );\n\n // Please note the return value of the `binarySearchFirstItem` function when\n // no valid element is found (hence the `firstVisibleElementInd` check below).\n if (\n firstVisibleElementInd > 0 &&\n firstVisibleElementInd < numViews &&\n !horizontal\n ) {\n // In wrapped scrolling (or vertical scrolling with spreads), with some page\n // sizes, isElementBottomAfterViewTop doesn't satisfy the binary search\n // condition: there can be pages with bottoms above the view top between\n // pages with bottoms below. This function detects and corrects that error;\n // see it for more comments.\n firstVisibleElementInd = backtrackBeforeAllVisibleElements(\n firstVisibleElementInd,\n views,\n top\n );\n }\n\n // lastEdge acts as a cutoff for us to stop looping, because we know all\n // subsequent pages will be hidden.\n //\n // When using wrapped scrolling or vertical scrolling with spreads, we can't\n // simply stop the first time we reach a page below the bottom of the view;\n // the tops of subsequent pages on the same row could still be visible. In\n // horizontal scrolling, we don't have that issue, so we can stop as soon as\n // we pass `right`, without needing the code below that handles the -1 case.\n let lastEdge = horizontal ? right : -1;\n\n for (let i = firstVisibleElementInd; i < numViews; i++) {\n const view = views[i],\n element = view.div;\n const currentWidth = element.offsetLeft + element.clientLeft;\n const currentHeight = element.offsetTop + element.clientTop;\n const viewWidth = element.clientWidth,\n viewHeight = element.clientHeight;\n const viewRight = currentWidth + viewWidth;\n const viewBottom = currentHeight + viewHeight;\n\n if (lastEdge === -1) {\n // As commented above, this is only needed in non-horizontal cases.\n // Setting lastEdge to the bottom of the first page that is partially\n // visible ensures that the next page fully below lastEdge is on the\n // next row, which has to be fully hidden along with all subsequent rows.\n if (viewBottom >= bottom) {\n lastEdge = viewBottom;\n }\n } else if ((horizontal ? currentWidth : currentHeight) > lastEdge) {\n break;\n }\n\n if (\n viewBottom <= top ||\n currentHeight >= bottom ||\n viewRight <= left ||\n currentWidth >= right\n ) {\n continue;\n }\n\n const hiddenHeight =\n Math.max(0, top - currentHeight) + Math.max(0, viewBottom - bottom);\n const hiddenWidth =\n Math.max(0, left - currentWidth) + Math.max(0, viewRight - right);\n\n const fractionHeight = (viewHeight - hiddenHeight) / viewHeight,\n fractionWidth = (viewWidth - hiddenWidth) / viewWidth;\n const percent = (fractionHeight * fractionWidth * 100) | 0;\n\n visible.push({\n id: view.id,\n x: currentWidth,\n y: currentHeight,\n view,\n percent,\n widthPercent: (fractionWidth * 100) | 0,\n });\n ids.add(view.id);\n }\n\n const first = visible[0],\n last = visible.at(-1);\n\n if (sortByVisibility) {\n visible.sort(function (a, b) {\n const pc = a.percent - b.percent;\n if (Math.abs(pc) > 0.001) {\n return -pc;\n }\n return a.id - b.id; // ensure stability\n });\n }\n return { first, last, views: visible, ids };\n}\n\nfunction normalizeWheelEventDirection(evt) {\n let delta = Math.hypot(evt.deltaX, evt.deltaY);\n const angle = Math.atan2(evt.deltaY, evt.deltaX);\n if (-0.25 * Math.PI < angle && angle < 0.75 * Math.PI) {\n // All that is left-up oriented has to change the sign.\n delta = -delta;\n }\n return delta;\n}\n\nfunction normalizeWheelEventDelta(evt) {\n const deltaMode = evt.deltaMode; // Avoid being affected by bug 1392460.\n let delta = normalizeWheelEventDirection(evt);\n\n const MOUSE_PIXELS_PER_LINE = 30;\n const MOUSE_LINES_PER_PAGE = 30;\n\n // Converts delta to per-page units\n if (deltaMode === WheelEvent.DOM_DELTA_PIXEL) {\n delta /= MOUSE_PIXELS_PER_LINE * MOUSE_LINES_PER_PAGE;\n } else if (deltaMode === WheelEvent.DOM_DELTA_LINE) {\n delta /= MOUSE_LINES_PER_PAGE;\n }\n return delta;\n}\n\nfunction isValidRotation(angle) {\n return Number.isInteger(angle) && angle % 90 === 0;\n}\n\nfunction isValidScrollMode(mode) {\n return (\n Number.isInteger(mode) &&\n Object.values(ScrollMode).includes(mode) &&\n mode !== ScrollMode.UNKNOWN\n );\n}\n\nfunction isValidSpreadMode(mode) {\n return (\n Number.isInteger(mode) &&\n Object.values(SpreadMode).includes(mode) &&\n mode !== SpreadMode.UNKNOWN\n );\n}\n\nfunction isPortraitOrientation(size) {\n return size.width <= size.height;\n}\n\n/**\n * Promise that is resolved when DOM window becomes visible.\n */\nconst animationStarted = new Promise(function (resolve) {\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"LIB\") &&\n typeof window === \"undefined\"\n ) {\n // Prevent \"ReferenceError: window is not defined\" errors when running the\n // unit-tests in Node.js environments.\n setTimeout(resolve, 20);\n return;\n }\n window.requestAnimationFrame(resolve);\n});\n\nconst docStyle =\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"LIB\") &&\n typeof document === \"undefined\"\n ? null\n : document.documentElement.style;\n\nfunction clamp(v, min, max) {\n return Math.min(Math.max(v, min), max);\n}\n\nclass ProgressBar {\n #classList = null;\n\n #disableAutoFetchTimeout = null;\n\n #percent = 0;\n\n #style = null;\n\n #visible = true;\n\n constructor(bar) {\n this.#classList = bar.classList;\n this.#style = bar.style;\n }\n\n get percent() {\n return this.#percent;\n }\n\n set percent(val) {\n this.#percent = clamp(val, 0, 100);\n\n if (isNaN(val)) {\n this.#classList.add(\"indeterminate\");\n return;\n }\n this.#classList.remove(\"indeterminate\");\n\n this.#style.setProperty(\"--progressBar-percent\", `${this.#percent}%`);\n }\n\n setWidth(viewer) {\n if (!viewer) {\n return;\n }\n const container = viewer.parentNode;\n const scrollbarWidth = container.offsetWidth - viewer.offsetWidth;\n if (scrollbarWidth > 0) {\n this.#style.setProperty(\n \"--progressBar-end-offset\",\n `${scrollbarWidth}px`\n );\n }\n }\n\n setDisableAutoFetch(delay = /* ms = */ 5000) {\n if (isNaN(this.#percent)) {\n return;\n }\n if (this.#disableAutoFetchTimeout) {\n clearTimeout(this.#disableAutoFetchTimeout);\n }\n this.show();\n\n this.#disableAutoFetchTimeout = setTimeout(() => {\n this.#disableAutoFetchTimeout = null;\n this.hide();\n }, delay);\n }\n\n hide() {\n if (!this.#visible) {\n return;\n }\n this.#visible = false;\n this.#classList.add(\"hidden\");\n }\n\n show() {\n if (this.#visible) {\n return;\n }\n this.#visible = true;\n this.#classList.remove(\"hidden\");\n }\n}\n\n/**\n * Get the active or focused element in current DOM.\n *\n * Recursively search for the truly active or focused element in case there are\n * shadow DOMs.\n *\n * @returns {Element} the truly active or focused element.\n */\nfunction getActiveOrFocusedElement() {\n let curRoot = document;\n let curActiveOrFocused =\n curRoot.activeElement || curRoot.querySelector(\":focus\");\n\n while (curActiveOrFocused?.shadowRoot) {\n curRoot = curActiveOrFocused.shadowRoot;\n curActiveOrFocused =\n curRoot.activeElement || curRoot.querySelector(\":focus\");\n }\n\n return curActiveOrFocused;\n}\n\n/**\n * Converts API PageLayout values to the format used by `BaseViewer`.\n * @param {string} layout - The API PageLayout value.\n * @returns {Object}\n */\nfunction apiPageLayoutToViewerModes(layout) {\n let scrollMode = ScrollMode.VERTICAL,\n spreadMode = SpreadMode.NONE;\n\n switch (layout) {\n case \"SinglePage\":\n scrollMode = ScrollMode.PAGE;\n break;\n case \"OneColumn\":\n break;\n case \"TwoPageLeft\":\n scrollMode = ScrollMode.PAGE;\n /* falls through */\n case \"TwoColumnLeft\":\n spreadMode = SpreadMode.ODD;\n break;\n case \"TwoPageRight\":\n scrollMode = ScrollMode.PAGE;\n /* falls through */\n case \"TwoColumnRight\":\n spreadMode = SpreadMode.EVEN;\n break;\n }\n return { scrollMode, spreadMode };\n}\n\n/**\n * Converts API PageMode values to the format used by `PDFSidebar`.\n * NOTE: There's also a \"FullScreen\" parameter which is not possible to support,\n * since the Fullscreen API used in browsers requires that entering\n * fullscreen mode only occurs as a result of a user-initiated event.\n * @param {string} mode - The API PageMode value.\n * @returns {number} A value from {SidebarView}.\n */\nfunction apiPageModeToSidebarView(mode) {\n switch (mode) {\n case \"UseNone\":\n return SidebarView.NONE;\n case \"UseThumbs\":\n return SidebarView.THUMBS;\n case \"UseOutlines\":\n return SidebarView.OUTLINE;\n case \"UseAttachments\":\n return SidebarView.ATTACHMENTS;\n case \"UseOC\":\n return SidebarView.LAYERS;\n }\n return SidebarView.NONE; // Default value.\n}\n\nfunction toggleCheckedBtn(button, toggle, view = null) {\n button.classList.toggle(\"toggled\", toggle);\n button.setAttribute(\"aria-checked\", toggle);\n\n view?.classList.toggle(\"hidden\", !toggle);\n}\n\nfunction toggleExpandedBtn(button, toggle, view = null) {\n button.classList.toggle(\"toggled\", toggle);\n button.setAttribute(\"aria-expanded\", toggle);\n\n view?.classList.toggle(\"hidden\", !toggle);\n}\n\nexport {\n animationStarted,\n apiPageLayoutToViewerModes,\n apiPageModeToSidebarView,\n approximateFraction,\n AutoPrintRegExp,\n backtrackBeforeAllVisibleElements, // only exported for testing\n binarySearchFirstItem,\n CursorTool,\n DEFAULT_SCALE,\n DEFAULT_SCALE_DELTA,\n DEFAULT_SCALE_VALUE,\n docStyle,\n getActiveOrFocusedElement,\n getPageSizeInches,\n getVisibleElements,\n isPortraitOrientation,\n isValidRotation,\n isValidScrollMode,\n isValidSpreadMode,\n MAX_AUTO_SCALE,\n MAX_SCALE,\n MIN_SCALE,\n normalizeWheelEventDelta,\n normalizeWheelEventDirection,\n OutputScale,\n parseQueryString,\n PresentationModeState,\n ProgressBar,\n removeNullCharacters,\n RenderingStates,\n roundToDivide,\n SCROLLBAR_PADDING,\n scrollIntoView,\n ScrollMode,\n SidebarView,\n SpreadMode,\n TextLayerMode,\n toggleCheckedBtn,\n toggleExpandedBtn,\n UNKNOWN_SCALE,\n VERTICAL_PADDING,\n watchScroll,\n};\n","/* Copyright 2016 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst {\n AbortException,\n AnnotationEditorLayer,\n AnnotationEditorParamsType,\n AnnotationEditorType,\n AnnotationEditorUIManager,\n AnnotationLayer,\n AnnotationMode,\n build,\n CMapCompressionType,\n createValidAbsoluteUrl,\n DOMSVGFactory,\n FeatureTest,\n getDocument,\n getFilenameFromUrl,\n getPdfFilenameFromUrl,\n getXfaPageViewport,\n GlobalWorkerOptions,\n ImageKind,\n InvalidPDFException,\n isDataScheme,\n isPdfFile,\n MissingPDFException,\n noContextMenu,\n normalizeUnicode,\n OPS,\n PasswordResponses,\n PDFDataRangeTransport,\n PDFDateString,\n PDFWorker,\n PermissionFlag,\n PixelsPerInch,\n PromiseCapability,\n RenderingCancelledException,\n renderTextLayer,\n setLayerDimensions,\n shadow,\n UnexpectedResponseException,\n updateTextLayer,\n Util,\n VerbosityLevel,\n version,\n XfaLayer,\n} = globalThis.pdfjsLib;\n\nexport {\n AbortException,\n AnnotationEditorLayer,\n AnnotationEditorParamsType,\n AnnotationEditorType,\n AnnotationEditorUIManager,\n AnnotationLayer,\n AnnotationMode,\n build,\n CMapCompressionType,\n createValidAbsoluteUrl,\n DOMSVGFactory,\n FeatureTest,\n getDocument,\n getFilenameFromUrl,\n getPdfFilenameFromUrl,\n getXfaPageViewport,\n GlobalWorkerOptions,\n ImageKind,\n InvalidPDFException,\n isDataScheme,\n isPdfFile,\n MissingPDFException,\n noContextMenu,\n normalizeUnicode,\n OPS,\n PasswordResponses,\n PDFDataRangeTransport,\n PDFDateString,\n PDFWorker,\n PermissionFlag,\n PixelsPerInch,\n PromiseCapability,\n RenderingCancelledException,\n renderTextLayer,\n setLayerDimensions,\n shadow,\n UnexpectedResponseException,\n updateTextLayer,\n Util,\n VerbosityLevel,\n version,\n XfaLayer,\n};\n","/* Copyright 2018 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst compatibilityParams = Object.create(null);\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"LIB\") &&\n typeof navigator === \"undefined\"\n ) {\n globalThis.navigator = Object.create(null);\n }\n const userAgent = navigator.userAgent || \"\";\n const platform = navigator.platform || \"\";\n const maxTouchPoints = navigator.maxTouchPoints || 1;\n\n const isAndroid = /Android/.test(userAgent);\n const isIOS =\n /\\b(iPad|iPhone|iPod)(?=;)/.test(userAgent) ||\n (platform === \"MacIntel\" && maxTouchPoints > 1);\n\n // Limit canvas size to 5 mega-pixels on mobile.\n // Support: Android, iOS\n (function checkCanvasSizeLimitation() {\n if (isIOS || isAndroid) {\n compatibilityParams.maxCanvasPixels = 5242880;\n }\n })();\n}\n\nconst OptionKind = {\n BROWSER: 0x01,\n VIEWER: 0x02,\n API: 0x04,\n WORKER: 0x08,\n PREFERENCE: 0x80,\n};\n\n/**\n * NOTE: These options are used to generate the `default_preferences.json` file,\n * see `OptionKind.PREFERENCE`, hence the values below must use only\n * primitive types and cannot rely on any imported types.\n */\nconst defaultOptions = {\n canvasMaxAreaInBytes: {\n /** @type {number} */\n value: -1,\n kind: OptionKind.BROWSER + OptionKind.API,\n },\n isInAutomation: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.BROWSER,\n },\n supportsDocumentFonts: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.BROWSER,\n },\n supportsIntegratedFind: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.BROWSER,\n },\n supportsMouseWheelZoomCtrlKey: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.BROWSER,\n },\n supportsMouseWheelZoomMetaKey: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.BROWSER,\n },\n supportsPinchToZoom: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.BROWSER,\n },\n\n annotationEditorMode: {\n /** @type {number} */\n value: 0,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n annotationMode: {\n /** @type {number} */\n value: 2,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n cursorToolOnLoad: {\n /** @type {number} */\n value: 0,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n defaultZoomDelay: {\n /** @type {number} */\n value: 400,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n defaultZoomValue: {\n /** @type {string} */\n value: \"\",\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n disableHistory: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER,\n },\n disablePageLabels: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enablePermissions: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enablePrintAutoRotate: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableScripting: {\n /** @type {boolean} */\n value: typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"CHROME\"),\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n externalLinkRel: {\n /** @type {string} */\n value: \"noopener noreferrer nofollow\",\n kind: OptionKind.VIEWER,\n },\n externalLinkTarget: {\n /** @type {number} */\n value: 0,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n historyUpdateUrl: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n ignoreDestinationZoom: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n imageResourcesPath: {\n /** @type {string} */\n value:\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")\n ? \"resource://pdf.js/web/images/\"\n : \"./images/\",\n kind: OptionKind.VIEWER,\n },\n maxCanvasPixels: {\n /** @type {number} */\n value: 16777216,\n kind: OptionKind.VIEWER,\n },\n forcePageColors: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n pageColorsBackground: {\n /** @type {string} */\n value: \"Canvas\",\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n pageColorsForeground: {\n /** @type {string} */\n value: \"CanvasText\",\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n pdfBugEnabled: {\n /** @type {boolean} */\n value: typeof PDFJSDev === \"undefined\",\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n printResolution: {\n /** @type {number} */\n value: 150,\n kind: OptionKind.VIEWER,\n },\n sidebarViewOnLoad: {\n /** @type {number} */\n value: -1,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n scrollModeOnLoad: {\n /** @type {number} */\n value: -1,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n spreadModeOnLoad: {\n /** @type {number} */\n value: -1,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n textLayerMode: {\n /** @type {number} */\n value: 1,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n viewOnLoad: {\n /** @type {boolean} */\n value: 0,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n\n cMapPacked: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.API,\n },\n cMapUrl: {\n /** @type {string} */\n value:\n // eslint-disable-next-line no-nested-ternary\n typeof PDFJSDev === \"undefined\"\n ? \"../external/bcmaps/\"\n : PDFJSDev.test(\"MOZCENTRAL\")\n ? \"resource://pdf.js/web/cmaps/\"\n : \"../web/cmaps/\",\n kind: OptionKind.API,\n },\n disableAutoFetch: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API + OptionKind.PREFERENCE,\n },\n disableFontFace: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API + OptionKind.PREFERENCE,\n },\n disableRange: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API + OptionKind.PREFERENCE,\n },\n disableStream: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API + OptionKind.PREFERENCE,\n },\n docBaseUrl: {\n /** @type {string} */\n value: \"\",\n kind: OptionKind.API,\n },\n enableXfa: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.API + OptionKind.PREFERENCE,\n },\n fontExtraProperties: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API,\n },\n isEvalSupported: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.API,\n },\n isOffscreenCanvasSupported: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.API,\n },\n maxImageSize: {\n /** @type {number} */\n value: -1,\n kind: OptionKind.API,\n },\n pdfBug: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API,\n },\n standardFontDataUrl: {\n /** @type {string} */\n value:\n // eslint-disable-next-line no-nested-ternary\n typeof PDFJSDev === \"undefined\"\n ? \"../external/standard_fonts/\"\n : PDFJSDev.test(\"MOZCENTRAL\")\n ? \"resource://pdf.js/web/standard_fonts/\"\n : \"../web/standard_fonts/\",\n kind: OptionKind.API,\n },\n verbosity: {\n /** @type {number} */\n value: 1,\n kind: OptionKind.API,\n },\n\n workerPort: {\n /** @type {Object} */\n value: null,\n kind: OptionKind.WORKER,\n },\n workerSrc: {\n /** @type {string} */\n value:\n // eslint-disable-next-line no-nested-ternary\n typeof PDFJSDev === \"undefined\"\n ? \"../src/pdf.worker.js\"\n : PDFJSDev.test(\"MOZCENTRAL\")\n ? \"resource://pdf.js/build/pdf.worker.mjs\"\n : \"../build/pdf.worker.mjs\",\n kind: OptionKind.WORKER,\n },\n};\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n defaultOptions.defaultUrl = {\n /** @type {string} */\n value: \"compressed.tracemonkey-pldi-09.pdf\",\n kind: OptionKind.VIEWER,\n };\n defaultOptions.disablePreferences = {\n /** @type {boolean} */\n value: typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\"),\n kind: OptionKind.VIEWER,\n };\n defaultOptions.locale = {\n /** @type {string} */\n value: navigator.language || \"en-US\",\n kind: OptionKind.VIEWER,\n };\n defaultOptions.sandboxBundleSrc = {\n /** @type {string} */\n value:\n typeof PDFJSDev === \"undefined\"\n ? \"../build/dev-sandbox/pdf.sandbox.mjs\"\n : \"../build/pdf.sandbox.mjs\",\n kind: OptionKind.VIEWER,\n };\n} else if (PDFJSDev.test(\"CHROME\")) {\n defaultOptions.defaultUrl = {\n /** @type {string} */\n value: \"\",\n kind: OptionKind.VIEWER,\n };\n defaultOptions.disableTelemetry = {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n };\n defaultOptions.sandboxBundleSrc = {\n /** @type {string} */\n value: \"../build/pdf.sandbox.js\",\n kind: OptionKind.VIEWER,\n };\n}\n\nconst userOptions = Object.create(null);\n\nclass AppOptions {\n constructor() {\n throw new Error(\"Cannot initialize AppOptions.\");\n }\n\n static get(name) {\n const userOption = userOptions[name];\n if (userOption !== undefined) {\n return userOption;\n }\n const defaultOption = defaultOptions[name];\n if (defaultOption !== undefined) {\n return compatibilityParams[name] ?? defaultOption.value;\n }\n return undefined;\n }\n\n static getAll(kind = null) {\n const options = Object.create(null);\n for (const name in defaultOptions) {\n const defaultOption = defaultOptions[name];\n if (kind) {\n if (!(kind & defaultOption.kind)) {\n continue;\n }\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"LIB\")) &&\n kind === OptionKind.PREFERENCE\n ) {\n if (defaultOption.kind & OptionKind.BROWSER) {\n throw new Error(`Invalid kind for preference: ${name}`);\n }\n const value = defaultOption.value,\n valueType = typeof value;\n\n if (\n valueType === \"boolean\" ||\n valueType === \"string\" ||\n (valueType === \"number\" && Number.isInteger(value))\n ) {\n options[name] = value;\n continue;\n }\n throw new Error(`Invalid type for preference: ${name}`);\n }\n }\n const userOption = userOptions[name];\n options[name] =\n userOption !== undefined\n ? userOption\n : compatibilityParams[name] ?? defaultOption.value;\n }\n return options;\n }\n\n static set(name, value) {\n userOptions[name] = value;\n }\n\n static setAll(options, init = false) {\n if ((typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) && init) {\n if (this.get(\"disablePreferences\")) {\n // Give custom implementations of the default viewer a simpler way to\n // opt-out of having the `Preferences` override existing `AppOptions`.\n return;\n }\n if (Object.keys(userOptions).length) {\n console.warn(\n \"setAll: The Preferences may override manually set AppOptions; \" +\n 'please use the \"disablePreferences\"-option in order to prevent that.'\n );\n }\n }\n\n for (const name in options) {\n userOptions[name] = options[name];\n }\n }\n\n static remove(name) {\n delete userOptions[name];\n }\n}\n\nexport { AppOptions, compatibilityParams, OptionKind };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst WaitOnType = {\n EVENT: \"event\",\n TIMEOUT: \"timeout\",\n};\n\n/**\n * @typedef {Object} WaitOnEventOrTimeoutParameters\n * @property {Object} target - The event target, can for example be:\n * `window`, `document`, a DOM element, or an {EventBus} instance.\n * @property {string} name - The name of the event.\n * @property {number} delay - The delay, in milliseconds, after which the\n * timeout occurs (if the event wasn't already dispatched).\n */\n\n/**\n * Allows waiting for an event or a timeout, whichever occurs first.\n * Can be used to ensure that an action always occurs, even when an event\n * arrives late or not at all.\n *\n * @param {WaitOnEventOrTimeoutParameters}\n * @returns {Promise} A promise that is resolved with a {WaitOnType} value.\n */\nfunction waitOnEventOrTimeout({ target, name, delay = 0 }) {\n return new Promise(function (resolve, reject) {\n if (\n typeof target !== \"object\" ||\n !(name && typeof name === \"string\") ||\n !(Number.isInteger(delay) && delay >= 0)\n ) {\n throw new Error(\"waitOnEventOrTimeout - invalid parameters.\");\n }\n\n function handler(type) {\n if (target instanceof EventBus) {\n target._off(name, eventHandler);\n } else {\n target.removeEventListener(name, eventHandler);\n }\n\n if (timeout) {\n clearTimeout(timeout);\n }\n resolve(type);\n }\n\n const eventHandler = handler.bind(null, WaitOnType.EVENT);\n if (target instanceof EventBus) {\n target._on(name, eventHandler);\n } else {\n target.addEventListener(name, eventHandler);\n }\n\n const timeoutHandler = handler.bind(null, WaitOnType.TIMEOUT);\n const timeout = setTimeout(timeoutHandler, delay);\n });\n}\n\n/**\n * Simple event bus for an application. Listeners are attached using the `on`\n * and `off` methods. To raise an event, the `dispatch` method shall be used.\n */\nclass EventBus {\n #listeners = Object.create(null);\n\n /**\n * @param {string} eventName\n * @param {function} listener\n * @param {Object} [options]\n */\n on(eventName, listener, options = null) {\n this._on(eventName, listener, {\n external: true,\n once: options?.once,\n });\n }\n\n /**\n * @param {string} eventName\n * @param {function} listener\n * @param {Object} [options]\n */\n off(eventName, listener, options = null) {\n this._off(eventName, listener, {\n external: true,\n once: options?.once,\n });\n }\n\n /**\n * @param {string} eventName\n * @param {Object} data\n */\n dispatch(eventName, data) {\n const eventListeners = this.#listeners[eventName];\n if (!eventListeners || eventListeners.length === 0) {\n return;\n }\n let externalListeners;\n // Making copy of the listeners array in case if it will be modified\n // during dispatch.\n for (const { listener, external, once } of eventListeners.slice(0)) {\n if (once) {\n this._off(eventName, listener);\n }\n if (external) {\n (externalListeners ||= []).push(listener);\n continue;\n }\n listener(data);\n }\n // Dispatch any \"external\" listeners *after* the internal ones, to give the\n // viewer components time to handle events and update their state first.\n if (externalListeners) {\n for (const listener of externalListeners) {\n listener(data);\n }\n externalListeners = null;\n }\n }\n\n /**\n * @ignore\n */\n _on(eventName, listener, options = null) {\n const eventListeners = (this.#listeners[eventName] ||= []);\n eventListeners.push({\n listener,\n external: options?.external === true,\n once: options?.once === true,\n });\n }\n\n /**\n * @ignore\n */\n _off(eventName, listener, options = null) {\n const eventListeners = this.#listeners[eventName];\n if (!eventListeners) {\n return;\n }\n for (let i = 0, ii = eventListeners.length; i < ii; i++) {\n if (eventListeners[i].listener === listener) {\n eventListeners.splice(i, 1);\n return;\n }\n }\n }\n}\n\n/**\n * NOTE: Only used to support various PDF viewer tests in `mozilla-central`.\n */\nclass AutomationEventBus extends EventBus {\n dispatch(eventName, data) {\n if (typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: AutomationEventBus.dispatch\");\n }\n super.dispatch(eventName, data);\n\n const detail = Object.create(null);\n if (data) {\n for (const key in data) {\n const value = data[key];\n if (key === \"source\") {\n if (value === window || value === document) {\n return; // No need to re-dispatch (already) global events.\n }\n continue; // Ignore the `source` property.\n }\n detail[key] = value;\n }\n }\n const event = new CustomEvent(eventName, {\n bubbles: true,\n cancelable: true,\n detail,\n });\n document.dispatchEvent(event);\n }\n}\n\nexport { AutomationEventBus, EventBus, waitOnEventOrTimeout, WaitOnType };\n","/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./event_utils\").EventBus} EventBus */\n/** @typedef {import(\"./interfaces\").IPDFLinkService} IPDFLinkService */\n\nimport { parseQueryString } from \"./ui_utils.js\";\n\nconst DEFAULT_LINK_REL = \"noopener noreferrer nofollow\";\n\nconst LinkTarget = {\n NONE: 0, // Default value.\n SELF: 1,\n BLANK: 2,\n PARENT: 3,\n TOP: 4,\n};\n\n/**\n * @typedef {Object} ExternalLinkParameters\n * @property {string} url - An absolute URL.\n * @property {LinkTarget} [target] - The link target. The default value is\n * `LinkTarget.NONE`.\n * @property {string} [rel] - The link relationship. The default value is\n * `DEFAULT_LINK_REL`.\n * @property {boolean} [enabled] - Whether the link should be enabled. The\n * default value is true.\n */\n\n/**\n * Adds various attributes (href, title, target, rel) to hyperlinks.\n * @param {HTMLAnchorElement} link - The link element.\n * @param {ExternalLinkParameters} params\n */\nfunction addLinkAttributes(link, { url, target, rel, enabled = true } = {}) {\n if (!url || typeof url !== \"string\") {\n throw new Error('A valid \"url\" parameter must provided.');\n }\n\n if (enabled) {\n link.href = link.title = url;\n } else {\n link.href = \"\";\n link.title = `Disabled: ${url}`;\n link.onclick = () => {\n return false;\n };\n }\n\n let targetStr = \"\"; // LinkTarget.NONE\n switch (target) {\n case LinkTarget.NONE:\n break;\n case LinkTarget.SELF:\n targetStr = \"_self\";\n break;\n case LinkTarget.BLANK:\n targetStr = \"_blank\";\n break;\n case LinkTarget.PARENT:\n targetStr = \"_parent\";\n break;\n case LinkTarget.TOP:\n targetStr = \"_top\";\n break;\n }\n link.target = targetStr;\n\n link.rel = typeof rel === \"string\" ? rel : DEFAULT_LINK_REL;\n}\n\n/**\n * @typedef {Object} PDFLinkServiceOptions\n * @property {EventBus} eventBus - The application event bus.\n * @property {number} [externalLinkTarget] - Specifies the `target` attribute\n * for external links. Must use one of the values from {LinkTarget}.\n * Defaults to using no target.\n * @property {string} [externalLinkRel] - Specifies the `rel` attribute for\n * external links. Defaults to stripping the referrer.\n * @property {boolean} [ignoreDestinationZoom] - Ignores the zoom argument,\n * thus preserving the current zoom level in the viewer, when navigating\n * to internal destinations. The default value is `false`.\n */\n\n/**\n * Performs navigation functions inside PDF, such as opening specified page,\n * or destination.\n * @implements {IPDFLinkService}\n */\nclass PDFLinkService {\n #pagesRefCache = new Map();\n\n /**\n * @param {PDFLinkServiceOptions} options\n */\n constructor({\n eventBus,\n externalLinkTarget = null,\n externalLinkRel = null,\n ignoreDestinationZoom = false,\n } = {}) {\n this.eventBus = eventBus;\n this.externalLinkTarget = externalLinkTarget;\n this.externalLinkRel = externalLinkRel;\n this.externalLinkEnabled = true;\n this._ignoreDestinationZoom = ignoreDestinationZoom;\n\n this.baseUrl = null;\n this.pdfDocument = null;\n this.pdfViewer = null;\n this.pdfHistory = null;\n }\n\n setDocument(pdfDocument, baseUrl = null) {\n this.baseUrl = baseUrl;\n this.pdfDocument = pdfDocument;\n this.#pagesRefCache.clear();\n }\n\n setViewer(pdfViewer) {\n this.pdfViewer = pdfViewer;\n }\n\n setHistory(pdfHistory) {\n this.pdfHistory = pdfHistory;\n }\n\n /**\n * @type {number}\n */\n get pagesCount() {\n return this.pdfDocument ? this.pdfDocument.numPages : 0;\n }\n\n /**\n * @type {number}\n */\n get page() {\n return this.pdfViewer.currentPageNumber;\n }\n\n /**\n * @param {number} value\n */\n set page(value) {\n this.pdfViewer.currentPageNumber = value;\n }\n\n /**\n * @type {number}\n */\n get rotation() {\n return this.pdfViewer.pagesRotation;\n }\n\n /**\n * @param {number} value\n */\n set rotation(value) {\n this.pdfViewer.pagesRotation = value;\n }\n\n /**\n * @type {boolean}\n */\n get isInPresentationMode() {\n return this.pdfViewer.isInPresentationMode;\n }\n\n #goToDestinationHelper(rawDest, namedDest = null, explicitDest) {\n // Dest array looks like that: \n const destRef = explicitDest[0];\n let pageNumber;\n\n if (typeof destRef === \"object\" && destRef !== null) {\n pageNumber = this._cachedPageNumber(destRef);\n\n if (!pageNumber) {\n // Fetch the page reference if it's not yet available. This could\n // only occur during loading, before all pages have been resolved.\n this.pdfDocument\n .getPageIndex(destRef)\n .then(pageIndex => {\n this.cachePageRef(pageIndex + 1, destRef);\n this.#goToDestinationHelper(rawDest, namedDest, explicitDest);\n })\n .catch(() => {\n console.error(\n `PDFLinkService.#goToDestinationHelper: \"${destRef}\" is not ` +\n `a valid page reference, for dest=\"${rawDest}\".`\n );\n });\n return;\n }\n } else if (Number.isInteger(destRef)) {\n pageNumber = destRef + 1;\n } else {\n console.error(\n `PDFLinkService.#goToDestinationHelper: \"${destRef}\" is not ` +\n `a valid destination reference, for dest=\"${rawDest}\".`\n );\n return;\n }\n if (!pageNumber || pageNumber < 1 || pageNumber > this.pagesCount) {\n console.error(\n `PDFLinkService.#goToDestinationHelper: \"${pageNumber}\" is not ` +\n `a valid page number, for dest=\"${rawDest}\".`\n );\n return;\n }\n\n if (this.pdfHistory) {\n // Update the browser history before scrolling the new destination into\n // view, to be able to accurately capture the current document position.\n this.pdfHistory.pushCurrentPosition();\n this.pdfHistory.push({ namedDest, explicitDest, pageNumber });\n }\n\n this.pdfViewer.scrollPageIntoView({\n pageNumber,\n destArray: explicitDest,\n ignoreDestinationZoom: this._ignoreDestinationZoom,\n });\n }\n\n /**\n * This method will, when available, also update the browser history.\n *\n * @param {string|Array} dest - The named, or explicit, PDF destination.\n */\n async goToDestination(dest) {\n if (!this.pdfDocument) {\n return;\n }\n let namedDest, explicitDest;\n if (typeof dest === \"string\") {\n namedDest = dest;\n explicitDest = await this.pdfDocument.getDestination(dest);\n } else {\n namedDest = null;\n explicitDest = await dest;\n }\n if (!Array.isArray(explicitDest)) {\n console.error(\n `PDFLinkService.goToDestination: \"${explicitDest}\" is not ` +\n `a valid destination array, for dest=\"${dest}\".`\n );\n return;\n }\n this.#goToDestinationHelper(dest, namedDest, explicitDest);\n }\n\n /**\n * This method will, when available, also update the browser history.\n *\n * @param {number|string} val - The page number, or page label.\n */\n goToPage(val) {\n if (!this.pdfDocument) {\n return;\n }\n const pageNumber =\n (typeof val === \"string\" && this.pdfViewer.pageLabelToPageNumber(val)) ||\n val | 0;\n if (\n !(\n Number.isInteger(pageNumber) &&\n pageNumber > 0 &&\n pageNumber <= this.pagesCount\n )\n ) {\n console.error(`PDFLinkService.goToPage: \"${val}\" is not a valid page.`);\n return;\n }\n\n if (this.pdfHistory) {\n // Update the browser history before scrolling the new page into view,\n // to be able to accurately capture the current document position.\n this.pdfHistory.pushCurrentPosition();\n this.pdfHistory.pushPage(pageNumber);\n }\n\n this.pdfViewer.scrollPageIntoView({ pageNumber });\n }\n\n /**\n * Wrapper around the `addLinkAttributes` helper function.\n * @param {HTMLAnchorElement} link\n * @param {string} url\n * @param {boolean} [newWindow]\n */\n addLinkAttributes(link, url, newWindow = false) {\n addLinkAttributes(link, {\n url,\n target: newWindow ? LinkTarget.BLANK : this.externalLinkTarget,\n rel: this.externalLinkRel,\n enabled: this.externalLinkEnabled,\n });\n }\n\n /**\n * @param {string|Array} dest - The PDF destination object.\n * @returns {string} The hyperlink to the PDF object.\n */\n getDestinationHash(dest) {\n if (typeof dest === \"string\") {\n if (dest.length > 0) {\n return this.getAnchorUrl(\"#\" + escape(dest));\n }\n } else if (Array.isArray(dest)) {\n const str = JSON.stringify(dest);\n if (str.length > 0) {\n return this.getAnchorUrl(\"#\" + escape(str));\n }\n }\n return this.getAnchorUrl(\"\");\n }\n\n /**\n * Prefix the full url on anchor links to make sure that links are resolved\n * relative to the current URL instead of the one defined in .\n * @param {string} anchor - The anchor hash, including the #.\n * @returns {string} The hyperlink to the PDF object.\n */\n getAnchorUrl(anchor) {\n return this.baseUrl ? this.baseUrl + anchor : anchor;\n }\n\n /**\n * @param {string} hash\n */\n setHash(hash) {\n if (!this.pdfDocument) {\n return;\n }\n let pageNumber, dest;\n if (hash.includes(\"=\")) {\n const params = parseQueryString(hash);\n if (params.has(\"search\")) {\n const query = params.get(\"search\").replaceAll('\"', \"\"),\n phrase = params.get(\"phrase\") === \"true\";\n\n this.eventBus.dispatch(\"findfromurlhash\", {\n source: this,\n query: phrase ? query : query.match(/\\S+/g),\n });\n }\n // borrowing syntax from \"Parameters for Opening PDF Files\"\n if (params.has(\"page\")) {\n pageNumber = params.get(\"page\") | 0 || 1;\n }\n if (params.has(\"zoom\")) {\n // Build the destination array.\n const zoomArgs = params.get(\"zoom\").split(\",\"); // scale,left,top\n const zoomArg = zoomArgs[0];\n const zoomArgNumber = parseFloat(zoomArg);\n\n if (!zoomArg.includes(\"Fit\")) {\n // If the zoomArg is a number, it has to get divided by 100. If it's\n // a string, it should stay as it is.\n dest = [\n null,\n { name: \"XYZ\" },\n zoomArgs.length > 1 ? zoomArgs[1] | 0 : null,\n zoomArgs.length > 2 ? zoomArgs[2] | 0 : null,\n zoomArgNumber ? zoomArgNumber / 100 : zoomArg,\n ];\n } else if (zoomArg === \"Fit\" || zoomArg === \"FitB\") {\n dest = [null, { name: zoomArg }];\n } else if (\n zoomArg === \"FitH\" ||\n zoomArg === \"FitBH\" ||\n zoomArg === \"FitV\" ||\n zoomArg === \"FitBV\"\n ) {\n dest = [\n null,\n { name: zoomArg },\n zoomArgs.length > 1 ? zoomArgs[1] | 0 : null,\n ];\n } else if (zoomArg === \"FitR\") {\n if (zoomArgs.length !== 5) {\n console.error(\n 'PDFLinkService.setHash: Not enough parameters for \"FitR\".'\n );\n } else {\n dest = [\n null,\n { name: zoomArg },\n zoomArgs[1] | 0,\n zoomArgs[2] | 0,\n zoomArgs[3] | 0,\n zoomArgs[4] | 0,\n ];\n }\n } else {\n console.error(\n `PDFLinkService.setHash: \"${zoomArg}\" is not a valid zoom value.`\n );\n }\n }\n if (dest) {\n this.pdfViewer.scrollPageIntoView({\n pageNumber: pageNumber || this.page,\n destArray: dest,\n allowNegativeOffset: true,\n });\n } else if (pageNumber) {\n this.page = pageNumber; // simple page\n }\n if (params.has(\"pagemode\")) {\n this.eventBus.dispatch(\"pagemode\", {\n source: this,\n mode: params.get(\"pagemode\"),\n });\n }\n // Ensure that this parameter is *always* handled last, in order to\n // guarantee that it won't be overridden (e.g. by the \"page\" parameter).\n if (params.has(\"nameddest\")) {\n this.goToDestination(params.get(\"nameddest\"));\n }\n } else {\n // Named (or explicit) destination.\n dest = unescape(hash);\n try {\n dest = JSON.parse(dest);\n\n if (!Array.isArray(dest)) {\n // Avoid incorrectly rejecting a valid named destination, such as\n // e.g. \"4.3\" or \"true\", because `JSON.parse` converted its type.\n dest = dest.toString();\n }\n } catch {}\n\n if (\n typeof dest === \"string\" ||\n PDFLinkService.#isValidExplicitDestination(dest)\n ) {\n this.goToDestination(dest);\n return;\n }\n console.error(\n `PDFLinkService.setHash: \"${unescape(\n hash\n )}\" is not a valid destination.`\n );\n }\n }\n\n /**\n * @param {string} action\n */\n executeNamedAction(action) {\n // See PDF reference, table 8.45 - Named action\n switch (action) {\n case \"GoBack\":\n this.pdfHistory?.back();\n break;\n\n case \"GoForward\":\n this.pdfHistory?.forward();\n break;\n\n case \"NextPage\":\n this.pdfViewer.nextPage();\n break;\n\n case \"PrevPage\":\n this.pdfViewer.previousPage();\n break;\n\n case \"LastPage\":\n this.page = this.pagesCount;\n break;\n\n case \"FirstPage\":\n this.page = 1;\n break;\n\n default:\n break; // No action according to spec\n }\n\n this.eventBus.dispatch(\"namedaction\", {\n source: this,\n action,\n });\n }\n\n /**\n * @param {Object} action\n */\n async executeSetOCGState(action) {\n const pdfDocument = this.pdfDocument;\n const optionalContentConfig =\n await this.pdfViewer.optionalContentConfigPromise;\n\n if (pdfDocument !== this.pdfDocument) {\n return; // The document was closed while the optional content resolved.\n }\n let operator;\n\n for (const elem of action.state) {\n switch (elem) {\n case \"ON\":\n case \"OFF\":\n case \"Toggle\":\n operator = elem;\n continue;\n }\n switch (operator) {\n case \"ON\":\n optionalContentConfig.setVisibility(elem, true);\n break;\n case \"OFF\":\n optionalContentConfig.setVisibility(elem, false);\n break;\n case \"Toggle\":\n const group = optionalContentConfig.getGroup(elem);\n if (group) {\n optionalContentConfig.setVisibility(elem, !group.visible);\n }\n break;\n }\n }\n\n this.pdfViewer.optionalContentConfigPromise = Promise.resolve(\n optionalContentConfig\n );\n }\n\n /**\n * @param {number} pageNum - page number.\n * @param {Object} pageRef - reference to the page.\n */\n cachePageRef(pageNum, pageRef) {\n if (!pageRef) {\n return;\n }\n const refStr =\n pageRef.gen === 0 ? `${pageRef.num}R` : `${pageRef.num}R${pageRef.gen}`;\n this.#pagesRefCache.set(refStr, pageNum);\n }\n\n /**\n * @ignore\n */\n _cachedPageNumber(pageRef) {\n if (!pageRef) {\n return null;\n }\n const refStr =\n pageRef.gen === 0 ? `${pageRef.num}R` : `${pageRef.num}R${pageRef.gen}`;\n return this.#pagesRefCache.get(refStr) || null;\n }\n\n static #isValidExplicitDestination(dest) {\n if (!Array.isArray(dest)) {\n return false;\n }\n const destLength = dest.length;\n if (destLength < 2) {\n return false;\n }\n const page = dest[0];\n if (\n !(\n typeof page === \"object\" &&\n Number.isInteger(page.num) &&\n Number.isInteger(page.gen)\n ) &&\n !(Number.isInteger(page) && page >= 0)\n ) {\n return false;\n }\n const zoom = dest[1];\n if (!(typeof zoom === \"object\" && typeof zoom.name === \"string\")) {\n return false;\n }\n let allowNull = true;\n switch (zoom.name) {\n case \"XYZ\":\n if (destLength !== 5) {\n return false;\n }\n break;\n case \"Fit\":\n case \"FitB\":\n return destLength === 2;\n case \"FitH\":\n case \"FitBH\":\n case \"FitV\":\n case \"FitBV\":\n if (destLength !== 3) {\n return false;\n }\n break;\n case \"FitR\":\n if (destLength !== 6) {\n return false;\n }\n allowNull = false;\n break;\n default:\n return false;\n }\n for (let i = 2; i < destLength; i++) {\n const param = dest[i];\n if (!(typeof param === \"number\" || (allowNull && param === null))) {\n return false;\n }\n }\n return true;\n }\n}\n\n/**\n * @implements {IPDFLinkService}\n */\nclass SimpleLinkService {\n constructor() {\n this.externalLinkEnabled = true;\n }\n\n /**\n * @type {number}\n */\n get pagesCount() {\n return 0;\n }\n\n /**\n * @type {number}\n */\n get page() {\n return 0;\n }\n\n /**\n * @param {number} value\n */\n set page(value) {}\n\n /**\n * @type {number}\n */\n get rotation() {\n return 0;\n }\n\n /**\n * @param {number} value\n */\n set rotation(value) {}\n\n /**\n * @type {boolean}\n */\n get isInPresentationMode() {\n return false;\n }\n\n /**\n * @param {string|Array} dest - The named, or explicit, PDF destination.\n */\n async goToDestination(dest) {}\n\n /**\n * @param {number|string} val - The page number, or page label.\n */\n goToPage(val) {}\n\n /**\n * @param {HTMLAnchorElement} link\n * @param {string} url\n * @param {boolean} [newWindow]\n */\n addLinkAttributes(link, url, newWindow = false) {\n addLinkAttributes(link, { url, enabled: this.externalLinkEnabled });\n }\n\n /**\n * @param dest - The PDF destination object.\n * @returns {string} The hyperlink to the PDF object.\n */\n getDestinationHash(dest) {\n return \"#\";\n }\n\n /**\n * @param hash - The PDF parameters/hash.\n * @returns {string} The hyperlink to the PDF object.\n */\n getAnchorUrl(hash) {\n return \"#\";\n }\n\n /**\n * @param {string} hash\n */\n setHash(hash) {}\n\n /**\n * @param {string} action\n */\n executeNamedAction(action) {}\n\n /**\n * @param {Object} action\n */\n executeSetOCGState(action) {}\n\n /**\n * @param {number} pageNum - page number.\n * @param {Object} pageRef - reference to the page.\n */\n cachePageRef(pageNum, pageRef) {}\n}\n\nexport { LinkTarget, PDFLinkService, SimpleLinkService };\n","/* Copyright 2023 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DOMSVGFactory, shadow } from \"pdfjs-lib\";\n\nclass AltTextManager {\n #boundUpdateUIState = this.#updateUIState.bind(this);\n\n #boundSetPosition = this.#setPosition.bind(this);\n\n #boundOnClick = this.#onClick.bind(this);\n\n #currentEditor = null;\n\n #cancelButton;\n\n #dialog;\n\n #eventBus;\n\n #hasUsedPointer = false;\n\n #optionDescription;\n\n #optionDecorative;\n\n #overlayManager;\n\n #saveButton;\n\n #textarea;\n\n #uiManager;\n\n #previousAltText = null;\n\n #svgElement = null;\n\n #rectElement = null;\n\n #container;\n\n #telemetryData = null;\n\n constructor(\n {\n dialog,\n optionDescription,\n optionDecorative,\n textarea,\n cancelButton,\n saveButton,\n },\n container,\n overlayManager,\n eventBus\n ) {\n this.#dialog = dialog;\n this.#optionDescription = optionDescription;\n this.#optionDecorative = optionDecorative;\n this.#textarea = textarea;\n this.#cancelButton = cancelButton;\n this.#saveButton = saveButton;\n this.#overlayManager = overlayManager;\n this.#eventBus = eventBus;\n this.#container = container;\n\n dialog.addEventListener(\"close\", this.#close.bind(this));\n dialog.addEventListener(\"contextmenu\", event => {\n if (event.target !== this.#textarea) {\n event.preventDefault();\n }\n });\n cancelButton.addEventListener(\"click\", this.#finish.bind(this));\n saveButton.addEventListener(\"click\", this.#save.bind(this));\n optionDescription.addEventListener(\"change\", this.#boundUpdateUIState);\n optionDecorative.addEventListener(\"change\", this.#boundUpdateUIState);\n\n this.#overlayManager.register(dialog);\n }\n\n get _elements() {\n return shadow(this, \"_elements\", [\n this.#optionDescription,\n this.#optionDecorative,\n this.#textarea,\n this.#saveButton,\n this.#cancelButton,\n ]);\n }\n\n #createSVGElement() {\n if (this.#svgElement) {\n return;\n }\n\n // We create a mask to add to the dialog backdrop: the idea is to have a\n // darken background everywhere except on the editor to clearly see the\n // picture to describe.\n\n const svgFactory = new DOMSVGFactory();\n const svg = (this.#svgElement = svgFactory.createElement(\"svg\"));\n svg.setAttribute(\"width\", \"0\");\n svg.setAttribute(\"height\", \"0\");\n const defs = svgFactory.createElement(\"defs\");\n svg.append(defs);\n const mask = svgFactory.createElement(\"mask\");\n defs.append(mask);\n mask.setAttribute(\"id\", \"alttext-manager-mask\");\n mask.setAttribute(\"maskContentUnits\", \"objectBoundingBox\");\n let rect = svgFactory.createElement(\"rect\");\n mask.append(rect);\n rect.setAttribute(\"fill\", \"white\");\n rect.setAttribute(\"width\", \"1\");\n rect.setAttribute(\"height\", \"1\");\n rect.setAttribute(\"x\", \"0\");\n rect.setAttribute(\"y\", \"0\");\n\n rect = this.#rectElement = svgFactory.createElement(\"rect\");\n mask.append(rect);\n rect.setAttribute(\"fill\", \"black\");\n this.#dialog.append(svg);\n }\n\n async editAltText(uiManager, editor) {\n if (this.#currentEditor || !editor) {\n return;\n }\n\n this.#createSVGElement();\n\n this.#hasUsedPointer = false;\n for (const element of this._elements) {\n element.addEventListener(\"click\", this.#boundOnClick);\n }\n\n const { altText, decorative } = editor.altTextData;\n if (decorative === true) {\n this.#optionDecorative.checked = true;\n this.#optionDescription.checked = false;\n } else {\n this.#optionDecorative.checked = false;\n this.#optionDescription.checked = true;\n }\n this.#previousAltText = this.#textarea.value = altText?.trim() || \"\";\n this.#updateUIState();\n\n this.#currentEditor = editor;\n this.#uiManager = uiManager;\n this.#uiManager.removeEditListeners();\n this.#eventBus._on(\"resize\", this.#boundSetPosition);\n\n try {\n await this.#overlayManager.open(this.#dialog);\n this.#setPosition();\n } catch (ex) {\n this.#close();\n throw ex;\n }\n }\n\n #setPosition() {\n if (!this.#currentEditor) {\n return;\n }\n const dialog = this.#dialog;\n const { style } = dialog;\n const {\n x: containerX,\n y: containerY,\n width: containerW,\n height: containerH,\n } = this.#container.getBoundingClientRect();\n const { innerWidth: windowW, innerHeight: windowH } = window;\n const { width: dialogW, height: dialogH } = dialog.getBoundingClientRect();\n const { x, y, width, height } = this.#currentEditor.getClientDimensions();\n const MARGIN = 10;\n const isLTR = this.#uiManager.direction === \"ltr\";\n\n const xs = Math.max(x, containerX);\n const xe = Math.min(x + width, containerX + containerW);\n const ys = Math.max(y, containerY);\n const ye = Math.min(y + height, containerY + containerH);\n this.#rectElement.setAttribute(\"width\", `${(xe - xs) / windowW}`);\n this.#rectElement.setAttribute(\"height\", `${(ye - ys) / windowH}`);\n this.#rectElement.setAttribute(\"x\", `${xs / windowW}`);\n this.#rectElement.setAttribute(\"y\", `${ys / windowH}`);\n\n let left = null;\n let top = Math.max(y, 0);\n top += Math.min(windowH - (top + dialogH), 0);\n\n if (isLTR) {\n // Prefer to position the dialog \"after\" (so on the right) the editor.\n if (x + width + MARGIN + dialogW < windowW) {\n left = x + width + MARGIN;\n } else if (x > dialogW + MARGIN) {\n left = x - dialogW - MARGIN;\n }\n } else if (x > dialogW + MARGIN) {\n left = x - dialogW - MARGIN;\n } else if (x + width + MARGIN + dialogW < windowW) {\n left = x + width + MARGIN;\n }\n\n if (left === null) {\n top = null;\n left = Math.max(x, 0);\n left += Math.min(windowW - (left + dialogW), 0);\n if (y > dialogH + MARGIN) {\n top = y - dialogH - MARGIN;\n } else if (y + height + MARGIN + dialogH < windowH) {\n top = y + height + MARGIN;\n }\n }\n\n if (top !== null) {\n dialog.classList.add(\"positioned\");\n if (isLTR) {\n style.left = `${left}px`;\n } else {\n style.right = `${windowW - left - dialogW}px`;\n }\n style.top = `${top}px`;\n } else {\n dialog.classList.remove(\"positioned\");\n style.left = \"\";\n style.top = \"\";\n }\n }\n\n #finish() {\n if (this.#overlayManager.active === this.#dialog) {\n this.#overlayManager.close(this.#dialog);\n }\n }\n\n #close() {\n this.#eventBus.dispatch(\"reporttelemetry\", {\n source: this,\n details: {\n type: \"editing\",\n subtype: this.#currentEditor.editorType,\n data: this.#telemetryData || {\n action: \"alt_text_cancel\",\n alt_text_keyboard: !this.#hasUsedPointer,\n },\n },\n });\n this.#telemetryData = null;\n\n this.#removeOnClickListeners();\n this.#uiManager?.addEditListeners();\n this.#eventBus._off(\"resize\", this.#boundSetPosition);\n this.#currentEditor.altTextFinish();\n this.#currentEditor = null;\n this.#uiManager = null;\n }\n\n #updateUIState() {\n this.#textarea.disabled = this.#optionDecorative.checked;\n }\n\n #save() {\n const altText = this.#textarea.value.trim();\n const decorative = this.#optionDecorative.checked;\n this.#currentEditor.altTextData = {\n altText,\n decorative,\n };\n this.#telemetryData = {\n action: \"alt_text_save\",\n alt_text_description: !!altText,\n alt_text_edit:\n !!this.#previousAltText && this.#previousAltText !== altText,\n alt_text_decorative: decorative,\n alt_text_keyboard: !this.#hasUsedPointer,\n };\n this.#finish();\n }\n\n #onClick(evt) {\n if (evt.detail === 0) {\n return; // The keyboard was used.\n }\n this.#hasUsedPointer = true;\n this.#removeOnClickListeners();\n }\n\n #removeOnClickListeners() {\n for (const element of this._elements) {\n element.removeEventListener(\"click\", this.#boundOnClick);\n }\n }\n\n destroy() {\n this.#uiManager = null; // Avoid re-adding the edit listeners.\n this.#finish();\n this.#svgElement?.remove();\n this.#svgElement = this.#rectElement = null;\n }\n}\n\nexport { AltTextManager };\n","/* Copyright 2022 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AnnotationEditorParamsType } from \"pdfjs-lib\";\n\nclass AnnotationEditorParams {\n /**\n * @param {AnnotationEditorParamsOptions} options\n * @param {EventBus} eventBus\n */\n constructor(options, eventBus) {\n this.eventBus = eventBus;\n this.#bindListeners(options);\n }\n\n #bindListeners({\n editorFreeTextFontSize,\n editorFreeTextColor,\n editorInkColor,\n editorInkThickness,\n editorInkOpacity,\n editorStampAddImage,\n }) {\n const dispatchEvent = (typeStr, value) => {\n this.eventBus.dispatch(\"switchannotationeditorparams\", {\n source: this,\n type: AnnotationEditorParamsType[typeStr],\n value,\n });\n };\n editorFreeTextFontSize.addEventListener(\"input\", function () {\n dispatchEvent(\"FREETEXT_SIZE\", this.valueAsNumber);\n });\n editorFreeTextColor.addEventListener(\"input\", function () {\n dispatchEvent(\"FREETEXT_COLOR\", this.value);\n });\n editorInkColor.addEventListener(\"input\", function () {\n dispatchEvent(\"INK_COLOR\", this.value);\n });\n editorInkThickness.addEventListener(\"input\", function () {\n dispatchEvent(\"INK_THICKNESS\", this.valueAsNumber);\n });\n editorInkOpacity.addEventListener(\"input\", function () {\n dispatchEvent(\"INK_OPACITY\", this.valueAsNumber);\n });\n editorStampAddImage.addEventListener(\"click\", () => {\n dispatchEvent(\"CREATE\");\n });\n\n this.eventBus._on(\"annotationeditorparamschanged\", evt => {\n for (const [type, value] of evt.details) {\n switch (type) {\n case AnnotationEditorParamsType.FREETEXT_SIZE:\n editorFreeTextFontSize.value = value;\n break;\n case AnnotationEditorParamsType.FREETEXT_COLOR:\n editorFreeTextColor.value = value;\n break;\n case AnnotationEditorParamsType.INK_COLOR:\n editorInkColor.value = value;\n break;\n case AnnotationEditorParamsType.INK_THICKNESS:\n editorInkThickness.value = value;\n break;\n case AnnotationEditorParamsType.INK_OPACITY:\n editorInkOpacity.value = value;\n break;\n }\n }\n });\n }\n}\n\nexport { AnnotationEditorParams };\n","/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nclass OverlayManager {\n #overlays = new WeakMap();\n\n #active = null;\n\n get active() {\n return this.#active;\n }\n\n /**\n * @param {HTMLDialogElement} dialog - The overlay's DOM element.\n * @param {boolean} [canForceClose] - Indicates if opening the overlay closes\n * an active overlay. The default is `false`.\n * @returns {Promise} A promise that is resolved when the overlay has been\n * registered.\n */\n async register(dialog, canForceClose = false) {\n if (typeof dialog !== \"object\") {\n throw new Error(\"Not enough parameters.\");\n } else if (this.#overlays.has(dialog)) {\n throw new Error(\"The overlay is already registered.\");\n }\n this.#overlays.set(dialog, { canForceClose });\n\n dialog.addEventListener(\"cancel\", evt => {\n this.#active = null;\n });\n }\n\n /**\n * @param {HTMLDialogElement} dialog - The overlay's DOM element.\n * @returns {Promise} A promise that is resolved when the overlay has been\n * opened.\n */\n async open(dialog) {\n if (!this.#overlays.has(dialog)) {\n throw new Error(\"The overlay does not exist.\");\n } else if (this.#active) {\n if (this.#active === dialog) {\n throw new Error(\"The overlay is already active.\");\n } else if (this.#overlays.get(dialog).canForceClose) {\n await this.close();\n } else {\n throw new Error(\"Another overlay is currently active.\");\n }\n }\n this.#active = dialog;\n dialog.showModal();\n }\n\n /**\n * @param {HTMLDialogElement} dialog - The overlay's DOM element.\n * @returns {Promise} A promise that is resolved when the overlay has been\n * closed.\n */\n async close(dialog = this.#active) {\n if (!this.#overlays.has(dialog)) {\n throw new Error(\"The overlay does not exist.\");\n } else if (!this.#active) {\n throw new Error(\"The overlay is currently not active.\");\n } else if (this.#active !== dialog) {\n throw new Error(\"Another overlay is currently active.\");\n }\n dialog.close();\n this.#active = null;\n }\n}\n\nexport { OverlayManager };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { PasswordResponses, PromiseCapability } from \"pdfjs-lib\";\n\n/**\n * @typedef {Object} PasswordPromptOptions\n * @property {HTMLDialogElement} dialog - The overlay's DOM element.\n * @property {HTMLParagraphElement} label - Label containing instructions for\n * entering the password.\n * @property {HTMLInputElement} input - Input field for entering the password.\n * @property {HTMLButtonElement} submitButton - Button for submitting the\n * password.\n * @property {HTMLButtonElement} cancelButton - Button for cancelling password\n * entry.\n */\n\nclass PasswordPrompt {\n #activeCapability = null;\n\n #updateCallback = null;\n\n #reason = null;\n\n /**\n * @param {PasswordPromptOptions} options\n * @param {OverlayManager} overlayManager - Manager for the viewer overlays.\n * @param {boolean} [isViewerEmbedded] - If the viewer is embedded, in e.g.\n * an ";targetNode.className+=" pdfobject-container";targetNode.style.position="relative";targetNode.style.overflow="auto";targetNode.innerHTML=iframe;return targetNode.getElementsByTagName("iframe")[0]};generateEmbedElement=function(targetNode,targetSelector,url,pdfOpenFragment,width,height,id){var style="";if(targetSelector&&targetSelector!==document.body){style="width: "+width+"; height: "+height+";"}else{style="position: absolute; top: 0; right: 0; bottom: 0; left: 0; width: 100%; height: 100%;"}targetNode.className+=" pdfobject-container";targetNode.innerHTML="";return targetNode.getElementsByTagName("embed")[0]};embed=function(url,targetSelector,options){if(typeof url!=="string"){return embedError("URL is not valid")}targetSelector=typeof targetSelector!=="undefined"?targetSelector:false;options=typeof options!=="undefined"?options:{};var id=options.id&&typeof options.id==="string"?"id='"+options.id+"'":"",page=options.page?options.page:false,pdfOpenParams=options.pdfOpenParams?options.pdfOpenParams:{},fallbackLink=typeof options.fallbackLink!=="undefined"?options.fallbackLink:true,width=options.width?options.width:"100%",height=options.height?options.height:"100%",forcePDFJS=typeof options.forcePDFJS==="boolean"?options.forcePDFJS:false,PDFJS_URL=options.PDFJS_URL?options.PDFJS_URL:false,targetNode=getTargetElement(targetSelector),fallbackHTML="",pdfOpenFragment="",fallbackHTML_default="

This browser does not support inline PDFs. Please download the PDF to view it: Download PDF

";if(!targetNode){return embedError("Target element cannot be determined")}if(page){pdfOpenParams.page=page}pdfOpenFragment=buildFragmentString(pdfOpenParams);if(forcePDFJS&&PDFJS_URL){return generatePDFJSiframe(targetNode,url,pdfOpenFragment,PDFJS_URL,id)}else if(supportsPDFs){return generateEmbedElement(targetNode,targetSelector,url,pdfOpenFragment,width,height,id)}else{if(PDFJS_URL){return generatePDFJSiframe(targetNode,url,pdfOpenFragment,PDFJS_URL,id)}else if(fallbackLink){fallbackHTML=typeof fallbackLink==="string"?fallbackLink:fallbackHTML_default;targetNode.innerHTML=fallbackHTML.replace(/\[url\]/g,url)}return embedError("This browser does not support embedded PDFs")}};return{embed:function(a,b,c){return embed(a,b,c)},pdfobjectversion:function(){return pdfobjectversion}(),supportsPDFs:function(){return supportsPDFs}()}}); \ No newline at end of file diff --git a/qdntz/加载PDF/tzzc/黔东南州产业大招商政策摘编(2023版).pdf b/qdntz/加载PDF/tzzc/黔东南州产业大招商政策摘编(2023版).pdf new file mode 100644 index 0000000..8852b98 Binary files /dev/null and b/qdntz/加载PDF/tzzc/黔东南州产业大招商政策摘编(2023版).pdf differ diff --git a/qdntz/黔东南州产业大招商政策摘编(2023版).pdf b/qdntz/黔东南州产业大招商政策摘编(2023版).pdf new file mode 100644 index 0000000..8852b98 Binary files /dev/null and b/qdntz/黔东南州产业大招商政策摘编(2023版).pdf differ diff --git a/qdntz/黔东南州产业大招商项目信息管理平台应用推广培训.pdf b/qdntz/黔东南州产业大招商项目信息管理平台应用推广培训.pdf new file mode 100644 index 0000000..5a1d288 Binary files /dev/null and b/qdntz/黔东南州产业大招商项目信息管理平台应用推广培训.pdf differ diff --git a/qt/list.html b/qt/list.html new file mode 100644 index 0000000..48312ff --- /dev/null +++ b/qt/list.html @@ -0,0 +1,113 @@ + + + + + + + 投资黔东南 + + + + +
+
+ +
+
+ + + +
+ 其它N个产业 +
+ +
+
+ +
+
+ +
+
+ + + +
+
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/qt/show-qt.html b/qt/show-qt.html new file mode 100644 index 0000000..4a575d5 --- /dev/null +++ b/qt/show-qt.html @@ -0,0 +1,245 @@ + + + + + + + 投资黔东南 + + + + + + + +
+
+ +
+
+ + + +
+
+ +
+
+
+ +
+
+
+
+ + + \ No newline at end of file diff --git a/sp/list.html b/sp/list.html new file mode 100644 index 0000000..f425037 --- /dev/null +++ b/sp/list.html @@ -0,0 +1,113 @@ + + + + + + + 投资黔东南 + + + + +
+
+ +
+
+ + + +
+ 特色食品 +
+ +
+
+ +
+
+ +
+
+ + + +
+
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/sp/show-sp.html b/sp/show-sp.html new file mode 100644 index 0000000..f10735a --- /dev/null +++ b/sp/show-sp.html @@ -0,0 +1,245 @@ + + + + + + + 投资黔东南 + + + + + + + +
+
+ +
+
+ + + +
+
+ +
+
+
+ +
+
+
+
+ + + \ No newline at end of file diff --git a/wh/list.html b/wh/list.html new file mode 100644 index 0000000..9893ffe --- /dev/null +++ b/wh/list.html @@ -0,0 +1,116 @@ + + + + + + + 投资黔东南 + + + + +
+
+ +
+
+ + + +
+ 文化旅游康养 +
+ +
+
+ +
+
+ +
+
+ + + +
+ +
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/wh/show-wh.html b/wh/show-wh.html new file mode 100644 index 0000000..55940a5 --- /dev/null +++ b/wh/show-wh.html @@ -0,0 +1,246 @@ + + + + + + + 投资黔东南 + + + + + + + +
+
+ +
+
+ + + +
+
+ +
+
+
+ +
+
+
+
+ + + \ No newline at end of file diff --git a/yy/list.html b/yy/list.html new file mode 100644 index 0000000..59ac266 --- /dev/null +++ b/yy/list.html @@ -0,0 +1,113 @@ + + + + + + + 投资黔东南 + + + + +
+
+ +
+
+ + + +
+ 大健康医药制造 +
+ +
+
+ +
+
+ +
+
+ + + +
+
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/yy/show-yy.html b/yy/show-yy.html new file mode 100644 index 0000000..215f8b4 --- /dev/null +++ b/yy/show-yy.html @@ -0,0 +1,245 @@ + + + + + + + 投资黔东南 + + + + + + + +
+
+ +
+
+ + + +
+
+ +
+
+
+ +
+
+
+
+ + + \ No newline at end of file diff --git a/zs/list.html b/zs/list.html new file mode 100644 index 0000000..6569871 --- /dev/null +++ b/zs/list.html @@ -0,0 +1,113 @@ + + + + + + + 投资黔东南 + + + + +
+
+ +
+
+ + + +
+ 再生资源循环材料 +
+ +
+
+ +
+
+ +
+
+ + + +
+
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/zs/show-zs.html b/zs/show-zs.html new file mode 100644 index 0000000..9476314 --- /dev/null +++ b/zs/show-zs.html @@ -0,0 +1,246 @@ + + + + + + + 投资黔东南 + + + + + + + +
+
+ +
+
+ + + +
+
+ +
+
+
+ +
+
+
+
+ + + \ No newline at end of file