From 7bd65895645f43e5e75058fbe6b0b11bfbfab7c7 Mon Sep 17 00:00:00 2001 From: dyzulk <66510723+dyzulk@users.noreply.github.com> Date: Mon, 12 Jan 2026 07:57:04 +0700 Subject: [PATCH] Initial commit: Premium Gold Theme with Dynamic QR and Multi-language support --- alogin.html | 57 +++ api.json | 11 + css/style.css | 708 +++++++++++++++++++++++++++++++++ error.html | 55 +++ errors.txt | 104 +++++ favicon.ico | Bin 0 -> 178553 bytes img/favicon.ico | Bin 0 -> 178553 bytes img/logo-icon.png | Bin 0 -> 1541 bytes img/logo-twinpath.svg | 32 ++ img/password.svg | 1 + img/user.svg | 1 + js/config.js | 64 +++ js/html5-qrcode.min.js | 1 + js/languages.js | 158 ++++++++ js/md5.js | 217 ++++++++++ js/qr-scanner.js | 212 ++++++++++ js/script.js | 255 ++++++++++++ login.html | 205 ++++++++++ logout.html | 68 ++++ md5.js | 217 ++++++++++ radvert.html | 62 +++ redirect.html | 12 + rlogin.html | 55 +++ status.html | 158 ++++++++ svg/alert-circle.svg | 1 + svg/check-circle.svg | 1 + svg/clock.svg | 1 + svg/copy.svg | 4 + svg/download-cloud.svg | 1 + svg/external-link.svg | 5 + svg/eye-off.svg | 1 + svg/eye.svg | 1 + svg/help-circle.svg | 5 + svg/image.svg | 1 + svg/languages.svg | 5 + svg/lock.svg | 1 + svg/log-out.svg | 1 + svg/scan-line.svg | 1 + svg/ticket.svg | 1 + svg/upload-cloud.svg | 1 + svg/user.svg | 1 + svg/wifi.svg | 1 + xml/WISPAccessGatewayParam.xsd | 101 +++++ xml/alogin.html | 18 + xml/error.html | 12 + xml/flogout.html | 11 + xml/login.html | 22 + xml/logout.html | 11 + xml/rlogin.html | 15 + 49 files changed, 2876 insertions(+) create mode 100644 alogin.html create mode 100644 api.json create mode 100644 css/style.css create mode 100644 error.html create mode 100644 errors.txt create mode 100644 favicon.ico create mode 100644 img/favicon.ico create mode 100644 img/logo-icon.png create mode 100644 img/logo-twinpath.svg create mode 100644 img/password.svg create mode 100644 img/user.svg create mode 100644 js/config.js create mode 100644 js/html5-qrcode.min.js create mode 100644 js/languages.js create mode 100644 js/md5.js create mode 100644 js/qr-scanner.js create mode 100644 js/script.js create mode 100644 login.html create mode 100644 logout.html create mode 100644 md5.js create mode 100644 radvert.html create mode 100644 redirect.html create mode 100644 rlogin.html create mode 100644 status.html create mode 100644 svg/alert-circle.svg create mode 100644 svg/check-circle.svg create mode 100644 svg/clock.svg create mode 100644 svg/copy.svg create mode 100644 svg/download-cloud.svg create mode 100644 svg/external-link.svg create mode 100644 svg/eye-off.svg create mode 100644 svg/eye.svg create mode 100644 svg/help-circle.svg create mode 100644 svg/image.svg create mode 100644 svg/languages.svg create mode 100644 svg/lock.svg create mode 100644 svg/log-out.svg create mode 100644 svg/scan-line.svg create mode 100644 svg/ticket.svg create mode 100644 svg/upload-cloud.svg create mode 100644 svg/user.svg create mode 100644 svg/wifi.svg create mode 100644 xml/WISPAccessGatewayParam.xsd create mode 100644 xml/alogin.html create mode 100644 xml/error.html create mode 100644 xml/flogout.html create mode 100644 xml/login.html create mode 100644 xml/logout.html create mode 100644 xml/rlogin.html diff --git a/alogin.html b/alogin.html new file mode 100644 index 0000000..509cf09 --- /dev/null +++ b/alogin.html @@ -0,0 +1,57 @@ + + + + + + + + Redirect + + + + + +
+
+
+
+
+ +
+ +
+ +
+ +
+
+ + EN +
+
+
EN
+
ID
+
+
+
+

+ + Success +

+

+ You are now connected to the network. +

+

Redirecting...

+
+ + +
+ + + diff --git a/api.json b/api.json new file mode 100644 index 0000000..7074b29 --- /dev/null +++ b/api.json @@ -0,0 +1,11 @@ +{ + "captive": $(if logged-in == 'yes')false$(else)true$(endif), + "user-portal-url": "$(link-login-only)", +$(if session-timeout-secs != 0) + "seconds-remaining": $(session-timeout-secs), +$(endif) +$(if remain-bytes-total) + "bytes-remaining": $(remain-bytes-total), +$(endif) + "can-extend-session": true +} diff --git a/css/style.css b/css/style.css new file mode 100644 index 0000000..6ce5927 --- /dev/null +++ b/css/style.css @@ -0,0 +1,708 @@ +/* Vercel-inspired Design System */ +:root { + --bg-primary: #000000; + --bg-secondary: #0a0a0a; + --fg-primary: #ededed; + --fg-secondary: #a1a1a1; + --accent: #fff; + --accent-glow: 0 0 40px -10px rgba(255, 255, 255, 0.3); + --border: #333; + --border-hover: #555; + --font-sans: 'Geist Sans', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; + --font-mono: 'Geist Mono', 'Fira Code', monospace; + --radius: 8px; + --transition: all 0.2s ease; +} + +/* Base Reset */ +* { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +body { + background-color: var(--bg-primary); + color: var(--fg-primary); + font-family: var(--font-sans); + line-height: 1.5; + min-height: 100vh; + display: flex; + flex-direction: column; + overflow-x: hidden; /* Prevent horizontal scroll from orbs */ +} + +/* Ambient Background Orbs */ +.ambient-bg { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: -1; + overflow: hidden; + pointer-events: none; + background: radial-gradient(circle at 50% 50%, #0a0a0a 0%, #000 100%); +} + +.orb { + position: absolute; + border-radius: 50%; + filter: blur(100px); + opacity: 0.12; + transition: var(--transition); +} + +.orb-1 { + width: 500px; + height: 500px; + background: #fff; + top: -100px; + right: -100px; + animation: float1 30s infinite alternate ease-in-out; +} + +.orb-2 { + width: 400px; + height: 400px; + background: #444; + bottom: -100px; + left: -50px; + animation: float2 25s infinite alternate ease-in-out; +} + +.orb-3 { + width: 300px; + height: 300px; + background: #222; + top: 40%; + left: 20%; + animation: float3 20s infinite alternate ease-in-out; +} + +@keyframes float1 { + 0% { transform: translate(0, 0) rotate(0deg); } + 100% { transform: translate(-200px, 200px) rotate(90deg); } +} + +@keyframes float2 { + 0% { transform: translate(0, 0) scale(1); } + 100% { transform: translate(150px, -150px) scale(1.2); } +} + +@keyframes float3 { + 0% { transform: translate(0, 0); } + 100% { transform: translate(100px, 100px); } +} + +.loading-spinner { + width: 24px; + height: 24px; + border: 2px solid rgba(255, 255, 255, 0.1); + border-top-color: #50e3c2; + border-radius: 50%; + animation: spin 0.8s linear infinite; +} + +@keyframes spin { + to { transform: rotate(360deg); } +} + +/* Typography */ +h1, h2, h3, h4, h5, h6 { + font-weight: 700; + letter-spacing: -0.04em; + color: var(--fg-primary); +} + +a { + color: var(--fg-primary); + text-decoration: none; + transition: var(--transition); +} + +a:hover { + text-decoration: underline; +} + +/* Components */ +.container { + max-width: 480px; + margin: 0 auto; + padding: 2rem 1.5rem; /* Increased vertical padding to prevent edge sticking */ + width: 100%; + min-height: 100vh; + display: flex; + flex-direction: column; +} + +.card { + background: var(--bg-secondary); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: 1.5rem; + margin-bottom: 1.5rem; + transition: var(--transition); +} + +.card:hover { + border-color: var(--border-hover); +} + +.btn { + display: inline-flex; + align-items: center; + justify-content: center; + width: 100%; + padding: 0.75rem 1rem; + border-radius: var(--radius); + font-weight: 500; + font-size: 0.875rem; + cursor: pointer; + transition: var(--transition); + border: 1px solid transparent; + text-decoration: none !important; + user-select: none; +} + +.btn-primary { + background: var(--fg-primary); + color: var(--bg-primary); + font-weight: 600; +} + +.btn-primary:hover { + background: #ccc; + box-shadow: var(--accent-glow); +} + +.btn-outline { + background: transparent; + border-color: var(--border); + color: var(--fg-secondary); +} + +.btn-outline:hover { + border-color: var(--fg-primary); + color: var(--fg-primary); +} + +.btn-outline:hover img { + filter: brightness(0) invert(1); +} + +/* Inputs */ +.input-group { + margin-bottom: 1rem; +} + +.input-label { + display: block; + font-size: 0.75rem; + color: var(--fg-secondary); + margin-bottom: 0.5rem; + text-transform: uppercase; + letter-spacing: 0.05em; +} + +.input-field { + width: 100%; + padding: 0.75rem; + background: #000; + border: 1px solid var(--border); + border-radius: var(--radius); + color: var(--fg-primary); + font-family: var(--font-mono); + font-size: 0.875rem; + transition: var(--transition); +} + +.input-field:focus { + outline: none; + border-color: var(--fg-primary); + box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.1); +} + +/* Global Autofill Styling for all inputs/selects/textareas */ +input:-webkit-autofill, +input:-webkit-autofill:hover, +input:-webkit-autofill:focus, +select:-webkit-autofill, +select:-webkit-autofill:hover, +select:-webkit-autofill:focus, +textarea:-webkit-autofill, +textarea:-webkit-autofill:hover, +textarea:-webkit-autofill:focus { + -webkit-text-fill-color: var(--fg-primary) !important; + -webkit-box-shadow: 0 0 0px 1000px #000 inset !important; + transition: background-color 5000s ease-in-out 0s; +} + +/* Tabs */ +.tabs { + display: flex; + margin-bottom: 1.5rem; + border-bottom: 1px solid var(--border); +} + +.tab-btn { + flex: 1; + text-align: center; + padding: 0.75rem; + cursor: pointer; + color: var(--fg-secondary); + border-bottom: 2px solid transparent; + font-size: 0.875rem; + transition: var(--transition); + display: flex; + align-items: center; + justify-content: center; + gap: 8px; +} + +.tab-btn.active { + color: var(--fg-primary); + border-bottom-color: var(--fg-primary); +} + +/* Header */ +.header { + text-align: center; + margin-bottom: 2rem; +} + +.logo-text { + font-size: 2rem; + background: linear-gradient(to bottom right, #fff 50%, #666 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + margin-bottom: 0.5rem; + display: none; /* Hide text logo if image is used */ +} + +.logo-img { + max-width: 150px; /* Adjust size as needed */ + height: auto; + margin-bottom: 1rem; + display: block; + margin-left: auto; + margin-right: auto; +} + +.status-badge { + display: inline-block; + font-size: 0.75rem; + padding: 0.25rem 0.75rem; + border-radius: 999px; + background: rgba(255, 255, 255, 0.1); + color: var(--fg-secondary); + border: 1px solid var(--border); +} + +/* Custom Language Dropdown */ +.lang-dropdown { + position: absolute; + top: 1rem; + right: 1.5rem; + z-index: 100; +} + +.lang-btn { + display: flex; + align-items: center; + gap: 8px; + background: var(--bg-secondary); + border: 1px solid var(--border); + padding: 6px 12px; + border-radius: 6px; + cursor: pointer; + transition: var(--transition); + color: var(--fg-primary); + font-size: 11px; + font-weight: 600; + text-transform: uppercase; + user-select: none; +} + +.lang-btn:hover { + border-color: var(--border-hover); +} + +.lang-btn img { + width: 14px; + height: 14px; + opacity: 0.7; +} + +.lang-menu { + position: absolute; + top: calc(100% + 8px); /* More space */ + right: 0; + background: var(--bg-secondary); + border: 1px solid var(--border); + border-radius: 8px; + overflow: hidden; + display: none; + min-width: 100px; /* Slightly wider */ + box-shadow: 0 10px 25px rgba(0,0,0,0.8); /* Deeper shadow */ + animation: fadeInScale 0.15s ease-out; +} + +.lang-menu.show { + display: block; +} + +.lang-option { + padding: 10px 16px; /* Larger hit area */ + font-size: 11px; + cursor: pointer; + transition: var(--transition); + color: var(--fg-secondary); + font-weight: 600; + text-transform: uppercase; +} + +.lang-option:hover { + background: rgba(255,255,255,0.08); /* Brighter hover */ + color: var(--fg-primary); +} + +.lang-option.active { + display: none; /* Hide active language from list to keep it 'relevant' */ +} + +@keyframes fadeInScale { + from { opacity: 0; transform: scale(0.95); } + to { opacity: 1; transform: scale(1); } +} + +@media (max-width: 480px) { + .container { + padding: 1rem; + justify-content: flex-start; /* Start from top on smaller mobile to prevent clipping */ + padding-top: 2rem; + } + .lang-dropdown { + top: 0.75rem; + right: 1rem; + } + .pricing-grid { + grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); + } +} + +@media (max-height: 700px) { + .container { + justify-content: flex-start; + padding-top: 1rem; + } + .header { + margin-bottom: 1rem; + } +} + +/* Sections */ +.hidden { + display: none; +} + +/* Pricing Grid */ +.text-time { + color: #50e3c2 !important; +} + +.text-quota { + color: #3b82f6 !important; +} + +.pricing-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 0.75rem; + margin-top: 0.75rem; +} + +.pricing-card { + text-align: center; + padding: 1rem 0.5rem; + background: var(--bg-secondary); + border: 1px solid var(--border); + border-radius: var(--radius); + transition: var(--transition); +} + +.pricing-card:hover { + border-color: var(--border-hover); +} + +.price { + font-size: 1.25rem; + font-weight: 700; + color: var(--fg-primary); +} + +.duration { + font-size: 0.75rem; + color: var(--fg-secondary); +} + +/* Footer */ +footer { + text-align: center; + margin-top: 6rem; /* Even more separation from buttons */ + padding-top: 2rem; + padding-bottom: 2rem; + color: var(--fg-tertiary); + font-size: 0.75rem; + border-top: 1px solid rgba(255, 255, 255, 0.15); /* Slightly more visible line */ + width: 100%; +} + +/* QR Scanner Modal */ +#qr-scanner-modal { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: #000; + z-index: 1000; + display: none; + flex-direction: column; + align-items: center; + justify-content: flex-start; /* Change from center to avoid clipping */ + padding: 2rem 0; /* Add padding for scroll room */ + overflow-y: auto; /* Enable scrolling */ +} + +#reader { + width: 100%; + max-width: 500px; +} + +.close-modal { + position: fixed; /* Change from absolute to fixed */ + top: 1rem; + right: 1.5rem; + background: rgba(0,0,0,0.5); /* Add subtle bg for better visibility on images */ + border-radius: 50%; + width: 40px; + height: 40px; + display: flex; + align-items: center; + justify-content: center; + border: none; + color: #fff; + font-size: 1.5rem; + cursor: pointer; + z-index: 1010; /* Ensure it stays on top */ +} + +/* Dashboard Refinement */ +.greeting-text { + font-size: 1.125rem; + font-weight: 600; + margin-bottom: 0.5rem; + color: var(--fg-primary); +} + +.sub-greeting { + font-size: 0.875rem; + color: var(--fg-secondary); + margin-bottom: 1.5rem; +} + +.progress-container { + width: 100%; + height: 6px; + background: #1a1a1a; + border-radius: 3px; + margin-top: 0.5rem; + overflow: hidden; +} + +.progress-bar { + height: 100%; + border-radius: 3px; + transition: width 1s ease-in-out; +} + +.progress-time { background: #50e3c2; } +.progress-quota { background: #0070f3; } + +.dashboard-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 1rem; + margin-bottom: 1.5rem; +} + +.dashboard-item { + background: rgba(255, 255, 255, 0.03); + padding: 1rem; + border-radius: var(--radius); + border: 1px solid var(--border); +} + +.dashboard-item .label { + font-size: 0.75rem; + text-transform: uppercase; + color: var(--fg-secondary); + letter-spacing: 0.05em; + margin-bottom: 0.5rem; + display: flex; + align-items: center; +} + +.dashboard-item .value { + font-size: 0.875rem; + font-weight: 600; +} + +.btn-disabled { + opacity: 0.5; + cursor: not-allowed !important; + pointer-events: none; +} + +/* Icons & Input Wrappers */ +.icon { + width: 20px; + height: 20px; + vertical-align: middle; + display: inline-block; +} + +.input-wrapper { + position: relative; +} + +.input-icon-img { + position: absolute; + left: 12px; + top: 50%; + transform: translateY(-50%); + width: 16px; + height: 16px; + opacity: 0.5; + pointer-events: none; +} + +.input-with-icon { + padding-left: 36px !important; +} + +.password-toggle { + position: absolute; + right: 12px; + top: 50%; + transform: translateY(-50%); + background: none; + border: none; + padding: 0; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + opacity: 0.7; + transition: var(--transition); + color: var(--fg-secondary); +} + +.password-toggle:hover { + opacity: 1; + color: var(--fg-primary); +} + +.password-toggle img { + width: 18px; + height: 18px; +} + +.input-with-toggle { + padding-right: 40px !important; +} + +.tab-btn img { + width: 16px; + height: 16px; + opacity: 0.7; +} +.tab-btn.active img { + opacity: 1; +} + +/* Utility */ +.text-center { text-align: center; } +.mt-4 { margin-top: 1rem; } +.mb-4 { margin-bottom: 1rem; } +.text-sm { font-size: 0.875rem; } +.opacity-50 { opacity: 0.5; } +.flex-center { display: flex; align-items: center; justify-content: center; } + +.scanner-controls { + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + width: 100%; + padding: 1rem; +} + +#qr-confirm-overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0,0,0,0.85); + backdrop-filter: blur(8px); + display: flex; + align-items: center; + justify-content: center; + padding: 2rem; + z-index: 10; +} + +#qr-confirm-overlay.hidden { + display: none; +} + +.confirm-card { + background: var(--bg-secondary); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: 1.5rem; + width: 100%; + max-width: 320px; + animation: fadeInScale 0.2s ease-out; +} + +.confirm-details { + background: #000; + border: 1px solid var(--border); + border-radius: 6px; + padding: 1rem; +} + +.confirm-item { + display: flex; + flex-direction: column; + gap: 4px; +} + +.confirm-label { + font-size: 0.7rem; + color: var(--fg-secondary); + text-transform: uppercase; + letter-spacing: 0.05em; +} + +.confirm-value { + font-family: var(--font-mono); + font-size: 1.125rem; + color: var(--fg-primary); + word-break: break-all; +} + + diff --git a/error.html b/error.html new file mode 100644 index 0000000..c1aa3d8 --- /dev/null +++ b/error.html @@ -0,0 +1,55 @@ + + + + + + + Error + + + + + +
+
+
+
+
+
+ +
+ +
+ +
+
+ + EN +
+
+
EN
+
ID
+
+
+
+

+ + Connection Failed +

+ +
+ $(error) +
+ + +
+ + +
+ + + diff --git a/errors.txt b/errors.txt new file mode 100644 index 0000000..1cf9092 --- /dev/null +++ b/errors.txt @@ -0,0 +1,104 @@ +# This file contains error messages which are shown to user, when http/https +# login is used. +# These messages can be changed to make user interface more friendly, including +# translations to different languages. +# +# Various variables can be used here as well. Most frequently used ones are: +# $(error-orig) - original error message from hotspot +# $(ip) - ip address of a client +# $(username) - username of client trying to log in + +# internal-error +# It should never happen. If it will, error page will be shown +# displaying this error message (error-orig will describe what has happened) + +internal-error = internal error ($(error-orig)) + +# config-error +# Should never happen if hotspot is configured properly. + +config-error = configuration error ($(error-orig)) + +# not-logged-in +# Will happen, if status or logout page is requested by user, +# which actually is not logged in + +not-logged-in = you are not logged in (ip $(ip)) + +# ippool-empty +# IP address for user is to be assigned from ip pool, but there are no more +# addresses in that pool + +ippool-empty = cannot assign ip address - no more free addresses from pool + +# shutting-down +# When shutdown is executed, new clients are not accepted + +shutting-down = hotspot service is shutting down + +# user-session-limit +# If user profile has limit of shared-users, then this error will be shown +# after reaching this limit + +user-session-limit = no more sessions are allowed for user $(username) + +# license-session-limit +# Depending on licence number of active hotspot clients is limited to +# one or another amount. If this limit is reached, following error is displayed. + +license-session-limit = session limit reached ($(error-orig)) + +# wrong-mac-username +# If username looks like MAC address (12:34:56:78:9a:bc), but is not +# a MAC address of this client, login is rejected + +wrong-mac-username = invalid username ($(username)): this MAC address is not yours + +# chap-missing +# If http-chap login method is used, but hotspot program does not receive +# back encrypted password, this error message is shown. +# Possible reasons of failure: +# - JavaScript is not enabled in web browser; +# - login.html page is not valid; +# - challenge value has expired on server (more than 1h of inactivity); +# - http-chap login method is recently removed; +# If JavaScript is enabled and login.html page is valid, +# then retrying to login usually fixes this problem. + +chap-missing = web browser did not send challenge response (try again, enable JavaScript) + +# invalid-username +# Most general case of invalid username or password. If RADIUS server +# has sent an error string with Access-Reject message, then it will +# override this setting. + +invalid-username = invalid username or password + +# invalid-mac +# Local users (on hotspot server) can be bound to some MAC address. If login +# from different MAC is tried, this error message will be shown. + +invalid-mac = user $(username) is not allowed to log in from this MAC address + +# uptime-limit, traffic-limit +# For local hotspot users in case if limits are reached + +uptime-limit = user $(username) has reached uptime limit +traffic-limit = user $(username) has reached traffic limit + +# radius-timeout +# User is authenticated by RADIUS server, but no response is received from it, +# following error will be shown. + +radius-timeout = RADIUS server is not responding + +# auth-in-progress +# Authorization in progress. Client already has issued an authorization request +# which is not yet complete. + +auth-in-progress = already authorizing, retry later + +# radius-reply +# Radius server returned some custom error message + +radius-reply = $(error-orig) diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..082320ae51c71937c14e462e48dbb9ba56df8f0f GIT binary patch literal 178553 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 literal 0 HcmV?d00001 diff --git a/img/favicon.ico b/img/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..082320ae51c71937c14e462e48dbb9ba56df8f0f GIT binary patch literal 178553 zcmeFa2b@*awLgAQqb9K>`kpcE88xQ7U&>3~i|_eQF-0(miXy%Ds#F2#O{oGRHc%MK zz%UGbXhR)(N2E(fP((UNFX#XL?tS(-`}A|?-hm-fe$`ypu>IzVjXVy64vui7R;T!3X8*G5B2fyAp|C|Jr>0<3!?@|B*;M z@q~Q+)4wDVoBx(bJoS|M{nGe;_e7$4b@TIY;rrVYiO!wP&);4w@yn*g5N zlzru<#82@Wx57K}eVh^rJjcVolptQ?&!`&Z?;BmC!oblrE1no#tD=!rtCEpbyRtE+ zb`@hxovH$|>sB+e>sB|$)~f-iX^gF3^F&VlS_1+1jjCR5Ab#T#z!+V#0>J!@T9qBY zqkbd1p7}fVYhKE!Uvpq)wX!ENtCuzKJBIj;8uB;PvxwiTiD$y^@p;tm$Y-f>Vq~?_ zMrO4#hW#7%?_}4jW-J)c$C%xti!rzNt42=4T4G$;bvPaXo@Hd!7XapOIDSWtXX*QI z8=r64XzW-x-&j8}#~9n7hJ_pc#)vAV0Q?R6ckJK8xPTY_#-0^RjZapuG&W3`XgvqV zGraQi#t4G=ol;^Pi{9>UtQ_%y@nOzrV?whA;x~3Im}l%WY@1IXr*X9tim(Ku!_%!XW)0f*uK>` z`NikP+}B^lSjrg7GX@!p2fb-5es_S8)2ODPl}_u73jZ`RDm*P9yJ0nB`+~W~r|Um7 zzSy?anA*ODF}z|)3qKCL3VtbP3@!f;Bcr_hjiKfKX^d}H*Vr;^8t63-<6UBmZB#?z z2l!Pq8c8~vv>saS@5az_|FC}tzm-+5k};-!6=On+2FB>x<$)g)zb1{;@9;N@pGELY=@TE6DKT(J*%Ftm-_V~0c#-&h7QbWCNzuAW zsY~FQfghA9eji}qkTNC2b6CHl;f44mjjZ3O^xO$N%RunmeM%1$^h`YiRhNJ|6Z%K| z4s@Q6o`J5Za3A>QRq*a!z-6IpOnqbP9I1D*HCeZH5A;ucp?@wz_v{6{n$w`xeK;q; zQ};pEG69z*Zz^5nqmMkgP3kvGH&M^wKG09RPbT2L%b z`&6{_0>?DEhQgh#f4yT7`us9w)6&J&%G&x^9}95?pblL%a;UL>(l}#gmv+YL(Ibq! zZXE>v#?(>tH+3|}0#Gt%>j28Ib|2SR7QFeoapu@jW8d1<#-^#0jKjNj7d# zarVS<-N+x%3(wKO;Ptr1 zbxgj}WyaQJ$_DedIhKs_PaET#*E0@&ycxECnQ>s#dV@4v_;x?Z3&5YSi?oTrm*6*L zS9Q5GE~qP zJ{*e}NAOq_pE<{(%fG2(E`xV7L3{d83G*Jj*Iqdm^FA)RgpNhx>@s9yFYfUweJtpH z;T9FCahltcrMUuW8>xVXrw4WA2s3w>1bWfsoN0gQ3w zOZ;%5_*3}F!dEt9P+>FO^w9ir#TPh_d$G2$F?XV|@59yNJgr?zW81u0#=7y@Moxp8 z@TZs~(fL#P&^CYSwkIiEn9nh%S2yG2!OsmI8G$0O`vtrC~`O-yW@jC;It+Qu<7cL6Eq`bOqiHtL3 zF2?dRG@1;r^gR6K*Tio!*4myw$GC9rtid>7_2^+jXH#D=P9y#q_wZoeYW3*hBIevM zdAyKAM_zzB9JsLJ95Wwe`XR!H=Kp4PYb$<}W8XG^wsG#%NrBIgCgm8TY69of9l+1D zj;#=@?G^XlyK;6t#;)s*Xc#QXEoWfY+ z!r8ONu4Rh^t@-;qmn=XouBs(75XxN_x+c%D%;%8F+Y zc>wSX<8ShzI>*)F?l@4yn_A47_gZ@?_aCh>)?^Jw%z0YK_S)=`B5v~NPZ3MmdMoNV zn4`7*cNHfvu97q%e&)Z?!#I2Lgt2wb3}fxsOdpt47UEXV=enRf^3P3 zQ&p~5;KPc&Oq$?Xmb@=>Doa0j+xTeGSP^?ux60Vqj9WFm6=h2(7vu{W$J#Nbg$w4Z zwdbH-n%w#&IMUAR``Hp7T;Sd%)`d=zddspWf*!hEwP~X9=NiP%O%U5&&|~OiXySQ}N?PphW79O6T)=ZQL2P{wAP3KZ z7+!%pXOJG6xO|-)JPYs5IRA(88H!&3F3jgJpFz##X!(&K{`BC&K@;U;Ja+-lkpuW4 zfcI9wXCXdF6Y_=gIa24(v*3+2kdG#Sdw6fcwLX}q;9OC4fR(3s#G9wUzeTPft42j} zMn3jd1)nisv89I7jzqBgf(4rx05B@|5BwbvET9h^HKK!8ud#QvF)D;`xgMj)>>y z7<|V;{Oe%m0b}r#m2>eKLo_Yi@@>lna+gPtCo2wrDTDr!0&5)F+)N}be8*wuHKTYc zY5BHkkpZ7;r}FtcWALR#I^|pD0}G~W1ugLGWzO4vqfG~n#iE56hn>4DbotiuSgH=m zn|l_z_PjF=QMo>Q9L_Q5F)NpmYa*}ovISFGHx>4J{7ZF_V`^ngZQDZDSuvkkK>4W7WBNxE=_$Kv@T}u~<(K$meF=65kW~P>j>chx&{o zOuij+ksO2XIO5YnmknM|d8MgwVDm%)77BX(p z^P+ZaA4m&r9C75^Zw%zC2~F!8+vd&^!(v`jr-Q?02-$YhL(R`=ahIH%xAG+JaVWV~ z=P+7$<=Z_5k^4pdllibuQM18=v`}LhO&z8C=03C_PwCHZ(E|CVcyi(9sc`vrkAXSJ zrSHEZ^b>11>@mnW4mF0baUj-`xgvAEL5;^L7wMx#W;Mt|D_b6zyPVUrt1$<4ubiU@ zAA_l9HCkBD@0lwIoBZbU=LL9hPIN75 ztyw$8gZR93;k>a1wn@r^t)nO_oc~~rk~&yxwPes+sNw1@~Umi<4`$H-*ISiK{}0XSRJ*8%f)^8yqt^UJRqN$ z&(8NaPfnhdIa&Bq@B{hmoGat!?Qvd2t!1`YGjIZPt2|iy&iXkaFTQyMdkl&e*7J*e zv7RHfX~D6L#@vp$zqk|bg>kTsp0cK7P}H$wj6!GOnfct*U7VBKG-HaGA5`Pqk~dAr z(2+g6#4nPksDG%7bzRHrApe~4gkzqLV-Vxuv)hn~IU({1Z9Wg)i}Prlvrz|Y6UQ~F zBV^mM-FSBT-5-w267%+IoI4jUFmf@^%- zHD7Z+hxUXA>q?hryeD+Ccmsbp-%OdNeCWEC&rY36IZ+4aA30yX1H8oJ*#1w9>780j zS;6O%jg>eT;~ax)9H`Np(Y1}x&%7UPJfC0r!^G)%=y|Ta5VqX(L#V&TH?1pbCHSo5 zz0EUojfpK9iuqsKILopO&u`XTatwas zz7nIBvAi`K;C8cox3(x~QK}V>pP|oP2JtDGK+cBp=!IaPm_)EgbXA z9D~m|9JIg~MpiE^a8KD4b zIPmNxc3RKxsg+2T7A{}Pj}{tFSu!EU;N~e`U5jTgk>Q!s=Qtem`Vr#@kZemc+Le&=-vSb@=T~$9FBLyx(ZU*s#!sFxq*1;- zy4KXUm7hBTeLEP>{jhp=K0gmUs}AHT$^~S*_)hTCdAs(>B^RD?q(Tdqo|3xuJm|0! zkOBXrIG+DjKKn4OMyWFgP>g?W99I(qoq03hopoAI06GJ#IxW26UQdR9i(_OJtSPHe zApu{LYs&x?36B681EvA?``2uF>r?#aRh;u&!LdC6L}niakS9JB>&#<(v6#2mdiYdKCU zZ!YrZ%%_LchG=s$YV7K)=KN$$f~wo`;=#EdOVxzoY}bvr>ya)32b(eWc7O*24u}U6 zIQXn;r5$4jE`AR_SS0f6R*u)6`?qirh6imP!NUtlgm$L3&g{2 zz|#O(>!|ANY7htIey@)`HV%Aiq|}^}Qy$XF3qkd4K6=5$3&g=66b=OatCxEK=S3oS z;*%34F4D;h9z6Ke0Z=!j%nRB&T8RUpAIS%c01prcS=CXWTfJOcG4_xgy@dnTEEP4q zP%vI-3!Eg7hkXRF*^}QVE(*#EsmMeCFGzmSZG*ZluzuVOd-(|F>>Fe37dd_j+WbHW z4$uq8M zVf_2;JgnjY`|QvQA^dQi>PL?Kf<1n7P9POtxW4pbK%J|1ZluV_M2h;+?L&(>BFxiS zJ>}eU5-whF*W85Kh$vowj+Azl{)GbRW70=potkZHE82YuLiK{)(?Z#ZVEyQrBlDfF zEF@k4ZdfNj0Rc3|-e4YDBGhth1c5N@#MYCRswKO@6YKs_4)D#m3p?J{8uCBed z(lLHD&sI=82!Fvl7j5}Yy5EHHbG`F+^c_>RD=2dj$NqI|jR~kxW{ov_1MuKn)|Q#m zthzZb4hj}aSo7~{?CKnb1D8w`)J705?1{l1VC;Lq@e5qw;$zg$G9G5%&(r2SHfw1E zaZo^Bu*c8&3&$LWtkVg@gXJ?xdsz@XcyS=>wKxa9c1)(I%@g&LXU_;eaN{7=SVGK2 zIp&)EaZs50QR1MM#s^Xm*gJvs>>ML|GN}4X9S5qG*C7u{@B(tJvM!4_h=B*Eub}3y zZGTDm(aG{c5DsKre|u4T$J%lp#Eu^h;_`y-KdSM|a||4a8U!_N{R|wq^g>))sbYyB z9B^F#`w>oR@uKKW7>xt19@^psfBonjf0}r~g@*TpL=G0m?q!Pw56tM& zR`jjmdo~|Tg{60{tz6bTR+C-1%584k_O(d^qq z8$lj$@If3LSTcci8XUV0KJ{(n4XdvArtrw-`W|$5AK=`zK*XSSvQsU8ftZ3?SMW* z9YtL%Yn5koZHxCi3YdlSZ1f-!J(&VxYwA$SHfxyG!G5G%t2Pen?O3WmGeNZmIm*F}9 z)?u-)`Sgyhh3&9pL(99-rsTG1j#^?_Q_6AjU|(R?qjP=9@lW@Q_xR`BsZ+*MtaWha zn!NdVr5Eh_sen4FBzS>ipWgWuJkLJsdCp^;D~7)>)(x;GoQE0%d6_l#!ncAiX^r3H z1&*C|?=y3aoW<+F0s9rRm;1ce?HYaJoAHx~8)MGTSo7&xjfSsG1n`2A3F?r^ts9G8 zuwsn(!|`&x#Im993A*cJ7rxy)Z^#-z&5u?%;Mm8bW}iKY)%O(M_O4nXVyC%%UITB* zUUt-l>&A_-*M?a6M>Q9rpKW=N<5%?s-~ksN9J*2Pg1dgG6u!fnY`d=&pOZE9tT80t zvj$p?foIZ*JR$rgk#BI>O1w9=L3Pw&&bRfO$@d2~Z4m1LW@Bxb>f=Y5XAeEuH%#Ua z^m)3lIV$J){c6B`>cBLaV7*>8);4f|1T{uV=nky0;@TJXWY*s&ow#m*z8-s_DSIJt zK_9Y=kyW=cYTBpDbrBf1qC0zlbA18zCi_0C-`$S>&SGr}b0}7f?U#$zc|cyX2F_cv z-^32R#ziLAjdV zu~p={BH|+o4?(q<5)Zm8$ZPfzWM6jnYE%b(4(fCE7QAwWc`Qw5?cO13=xJA!t<-Tq zpJ7%HyAP%KE`C_#f6%*bjHwG1E}0L=gFi{xQMS@LYkrf57Xot8&bm8St(S`zh^su* zqpLN6d?w*@j2wb>W8+LcVDm25Urq1wim<7Ae5qmy^278_=!0qMGc|VV6WY!!tdHaR zQR0G!@RzWbh+|iImQ?2@ytS-8I1qR!DQeca-ib2FgL2PalJmh2)a&B;HQLh;lzr++ zdsjSxv2!g8*WA$$ravqIzOn2XSsA!)FV=_g{~Y_`ci}H_?0!B2eMTJuctPb_l%2HK zNnzZm$+zXf9}mr>!G!-0@}tWA~tui*gWr#_sCb=3T>0IqjH zd_=#NvO@fb7z%OJ)b=k!&v6~PZ7+n+p!tpk;RSpAW)Df?z<~!-Co0{D^YALqiC(h$ z8qZJGt~7GnHHYrk;xXWX2X(*L$4KY^Ck}+aNuLuwoe;hfc)~h|;UNi`2(K;IWCFV1)(ui7h=VMw1KYiPu^21=(1y?M z*%|UI`ylf@rPqb;kG{0zV+#iY51LF^dNLj_q&hF*T?6FL3qf{*Ynr&8kG`ln=$}k# z^`bEseW<-Y4RUx`+bC$yu`39OudO_qm46M-yCth1eb?6ctd)>@!mS&nJP-#HUv6mi zlqMebeYi@jVPhX~_Cnx6KH$OFpKES~E>PoFXN&$iPsHE_%7()>C_BNJ(y15pc?mgw zu6glU_mTu2hy(Ut)_obS%jO#URhdJqegFywT$?)w>qF^JS}~P{gR7?>{nlA}WkT5n z{cQ4rrXPs|_J2NgNcL10`VhQMTfrX4B2Lu!fO`PYKcuhCSlW_>2t1@yKl-h0OobOH zC+t5>e~mhybk6J15qwZa^kJtC|xPGwrBmSPP$_srrRQS_-s*R3e}1@JwtPoLMnJMttw z%Y}{xG24VvC^(e+2VJx-j)8N`95DO7-s&@ z@&h#-c=Uq6gRU3VbqxI&zzbqMooD@-h6ig+pbsxZ;lame5O^RilE}Mx@DLyq1+kUZ zdP3kJa6Ms)yx{hmEF1_tcykQ#dBNXKBqI|TKYEF4Yv8U0FQkHp0A7fxAGyYQzhnGj z?VR5_-_5cey%5({ z#)~D)URkN=M~B}O8A~iezU2Xc8b8l}0PF_XIB@WTKOO@8$HL-;RAfTh%H0_EA2@c` z_=$t3Z5(KLu=cj_S!bS#Oa$1!$%?>>U65rT?MxfZ_wl0>`i6 zAQfIH8v1b&#tpi2>=H&*d_k;#{-CU*&j4{ieb5%L8E_F`%S2)ELgB;`7vVc?0Uxvj zJRs<9_9z&Mvwpl^wuFNZ-j}@>9>LgQBa2T1?1yf=5LZ72>V?ARg$t02{ebC!CK&%C z!>g7|VEl>URd{|rF}#{R_I!zin>)+%jgAcx5C5`%6`k|t2ybSeh^GK=0IWU{V2_|a z5&RnFmSwL9(I>*{7jZvoj>-cv02@(rbP_dqm%Vj(th=%6uk5-^SIxFoqsn@9H^l9k z5ZpV0{S%!1Bg{3@m$5GTBw!OD15h4)1HOZ^)i*)!pFn)*2XUhV=2^cDXaHCSyqpGz z`dx8G9ZFbjmOq}%bx*{Pg(GimyI$iT+E>C_JMG?6MfI2P#Szz#D>#koWxz=Tz`Y7L z>Kud{?0W$`Rd^ir8MAvjC4wnCFBvRzemDx!OX=VxZ{HiKzb(DA2RM2hAooL)xcN5l zGYcSVWn$LI*t$v6-6k(x=lXjV@bhiri2Q@vi3T`dvhYJZ1>z`3FQtQ*ii-Y*&aMx; z2K)dw_XC#6`Vv>IRe|u73@@caf9pD1zfMhmL*|yDkI4O)V=oWfoR;{J^X(2kvT)>I zhm@TDj<1*0IuCu#i+fKk-M93&am1H~r{whaY2c_l>M}B{8h1y1P9gA;W#{7K$$_6p zzcTIm8@MU6N!G6T)oZxc#-x##t`q%D+?wjCdGXZrHlDFJ-WPDu+`djpUk^GefU9Ny}o?~6B=sRiS z(xJoCBy*}?j)fnswkS~EV)Ih+z5wgjr+0eA*o-~IxZZ+mfC(SZ$rJnjOlVS1T^XsVo?1RbyG5SE*ZU4LG*~>`Z@Mg z(GS)hian_6R+Ve1cJ8qL%{8=KV?`c|+lx)cyYYMhyO!C7BNI>lykz1jCH;+f#HE*L z1GDQ_7khlN4v$r-szzDteT9BR{LZY`I$3Khi72kYo71bCz)`yOw~Zgx_xjiP`q%QM zk(V?)1>uNz;NB+rZ}dS7T^?&v-n9145jfKLNa83x`a4!_R{?k_75y!7R88!~r1O!) z!#=TIle+uE9Oph+l8>aU5l89ZCCp`_R@AQ!(1({o@sx~Siq_v@IFf6b8=+@$b%Seo zg$$ZC;zA$wv}G+EPtm@B#E-0(^yeiXJVp5evF%*A{tm(s^%B>BXE&&BOlXGv1=q`c z)l?0+#F3MalIJCsWP!>ENXh|6An+f^bB+<9>gPK@j z#Cwh@b60_v{BT5Ea6i8#gWeLp>O8EUG1_sawzVnyxA?Z&laN$Yd zhd2twQ%qh8#Zxl++g~pU9M$vU=+MsXSl`!7*el|X>leH_8~O-)+WXI4x_HU*ztIyw z;YOVU>w1&pC5O*Myjg(#L%Cjvz9r7~=S=)Tx4ZWSrhHidot5o_qfgkI*7km$)DD_$GBVKrDs*V%f8S{Y?~1z%}<>cANJ{_9v_R| zSgHpW@54P)xxci3-3fCg{<%268v9gbj(o_TNIH-68INGSJaMxXc?sF~RQ8Kdx^(B_ ze2lAxt)HNy+&CiM7QFeoV|}T@4SUAY7h(^gt+Qqb-r{}PM_@Jj#t}EF{v;GnT3v-* zYw2B!;8~v&s+S}$5jWh&R;`;=&(5Ak%tLU0cJA#IKXZ@2Q5t{8=Q;~wq$I#u=is=vmV zx>ZDejXIkL?L2d6lsD0*TGZ-z^WXaZ-%h@A<43J)@Z%+)+HJv4Qg0JC+;f}z94opK z52B~mu)(r7h1Nqyjg9+hPi@~q^fC12nxxGqZgSf;Lk}~%*PQx3d%P@u?@jPWWn<&i ziI(rk|L(OUV+FPktcujdC@94h2 z8XIL|CVGv~&IQd8jI2`H>{qg0@C3grz{EZK&SllEWUL#H-c?xRN}BLs?~C!s$uiHP zVmT*{eDLHWbJp6JB-Ti|^*8fst49xWti|RSKAx8+`tY$|4G%RoUJIE(k3NxGQNE)q zmLuPcd#Se7qfvdIIA9;Ib>rEWu9E0wPPtVF^B?T*Cv2eRTT1;yytu(n=4Afg!VlL6 z1g;SX;w33_OWD`O-20tl;KBXu=k|G3*et$QW8<}u3G}3~^8~to&D^(qo!y|C=>4U> ztIpIboAclcLZ+6WXCrO5Iw*rv+cp<^%<{Q490^&|@|8BOyf~uFdGI4}6tTw2)Zbi( zHUEvC4qMCT{CvwM;HH~Fy~{(5OX;JPBR(+W4fvQ={{{_5(9`S%=k9fW+9{bR5CkK6!r*&-Q*{hxXM=jjYpHvWqrx1Cw@gsX) zc=*X@Ju^QuwZqFkIjMbO-8=m}j>f_b#ztMuz7eAkcZoPAAg`MV*;+Ny*(*=shJ4B1 zNsQNctq%4g$$zs?s9!1LIG#fJg|oQ)0;jAaUlCJ4U&EJkk{j( zc!}5SUpKo~7vZz}_1DO%Tge!Q-m|pn;~LvA7JW`>>k0JF$01iDK8MdxZfx8zSDD^< zIU7ITejDMs3B9_imqtImiIz`D9Ed(mzya-=>Sd_oh`sCBn{PP!(|B+M9>f9^%-Oueo-WiE95WBaE41fXbt;Jd=XzYm|MMVDsau$X5;i}Sm;C%CQ|1&8sWb58 z#Em9zuDk$sxd%tYmFY7%@FUi0M)XMwSj$Zuu{W9(V`KcPPt<70AY(CwH~lPoVpeqG zs0i^A*SUMvx(BXl4d*4|h&Ed9BQN!JXXH#PiF`BpM#m5Nig^jf{|-Ki!%H6Bl#E_7 z?VL;A-1$fP*~#ifOMIxld!irT279ht;0gb~gkH^SvPT#rpofM3NZjZU zIOkOO`djphDp1dWAYPKXD*w&iR=--}h<*9Spl2id^>IFfhvFk%bH9RRL*B7^aXIi) zAYSs(O$E^3-ad5!{iq5ca~v;w@A4onHs|GnM@q@qP47)?>TCA@%^%oD_>b-!lZCIV z%u9}*G>$dq0eFh)y`c0r`q{DHE#-!Ld2qghG1@Z3CA5LF(A$nZ{u!502Pyl;_xL}N z7dP{k7H%9ecXfOL=X!kL#0N(O*5ANUCVcGKy}KaC+6S@I>mnyY9uhf#jxUS%#Q*qz z0Q+Ckza~y356QVp+ppGiQy?#yzCarEw-Y~Feo_O%Vsmpa>PdvUJ zRsnq>eR^MA3z=iT8*k5>Wbs5@?FW8-CEhdR6UW)NCscS|*CBU>#7kBWHQ%0L8lIwT zTmkgA13$!>PcBZ*&zbX01)P_Y@k+sb0pRDdjiZSEa?;(^O9j^7p*SKxQNH}ZZ~ju#+se*G$y{_^;3WFfZSvqJ z6i=p&i^WUH``;E1DIJxyQr1HdJLqo{sp1>mLYPk+B~33=TH$nUD&VfUg>*eu{Ee!sLpJY8-5?PuST@GJd& zfm!gGz70_L;rVgE9)OJ_2QQ^V=F*po^V+#&@D!@Q_W&=C6E`mW5JzPJUq~Ejc#7)1 zS7dl8LVr8zm>BnZ@bm@dQp#cu)9Tac=us$p^$|xVA4wch?!E&0n>{ScW|n_CfwP4l z_K=djY#qHEDQnP2#V>hy$suz-y-fpoDcJvx?+a*gisgF;#k&!_WXE!skQbN*oIH-R z#Erm@-RqDz0*_F>boe%2!>$!y1~?56dMQ3H75P~1G;%1*fRhG*dj-!BFD4Kt?!)YT zspE*(@Bxa$Pb!`P*aSEQ99=FfU!V|q=`v!uQ-Do?3_y9{=R4#X9f%+O*kiu94d;CG z`evLvo7XoQXPSt(ak_y47X~_;uPGz><~3z!k9kd*Vjt4#fP8?}hZIdo!}^foqt=mG zt5O0rpf0F<6V^FA1gHcU1XzVy&_k$GKacwKE6y5qyN^cD8WFkX$Y%|kwT{idkA&(k z72NAa^>cCcaxwe4$i6p0{W*jCbh00w?1@+N3VN8G2OI*d1`GyNMqkB;u;%L~_E)r_ zW@2oE+7@2pT%ae1><3%j!v8Ix#qR)pf%A=kGXS~f#H@i2s)M&_;=fLZG;pu|@~*jz zqJzSB(Ah-?tKU}?4g7n`nl#Y+H}d)nU?cF}5Aaw{!&2Sl!cQnUz{g#g=76zp?do%h|>E?F?`v+CP7wqB5Jj_s?i2mT*bG$8%~ zw*c=0EZjS25G4!OMkih8vM>Pn7kbFV|6@2G@ZdiQIut2cD8lv`y{%!BYaRgpe@7WW zef3SieP4jJ{wbUewojz=kbVxQ!}VyN{q<2Aau|K#E8T>3Fb@Iu8+H84Yts%W8Bk|o zo5OWdI1SQZ7Xt0G887Q`+f|W;s62*m+_n+;e+c-m3^*g!BWW_A=<%;73o+v7t7D(f z0RO;!nZa^RkN-NSRAr$+zN#5Ne+6<$gMj;0&NWrRbO@J)Ypj#B-agk+E{V85H)IgzKcQny;F4F6oL`+a9`pt#D-_HT$g3C-_|#{ka~2|H$>tE*e~QS@73M zqc9)muqi4psLt@C!)Vo~Pn)wCgIK~d--DiYa(|V=_f;MECmm9jg#evY2=;k$ z%f`mcuIXv9{g*vVE3?9{O>+rLthmO_~ zv7J_;%C|U&5pm6OobQ1V>@w)@8 zUSgv66xTeP!1d1uKi*!h+&){qoILC7LTF&wh9F&}-VfGE z;c;8Rb4fuo0D6Uvn%}pFkO5(j(Z^KuSwkO;C>o?i7JTe8*25;FB+e1aQ64I>_Gqx0%ak#PO^Pf zC;qRJEL^4dIfw?-HQVORLO=T&f(A1XhpGJrbiYa1myu~1|KUL)Rggo(nac=icSi~zv>xK0DV+c zd{y|GtR42F0r7nHAK{wPTu_r5gF^TxiWs{?55G@P-zADy5h4i^}(V#$fp=j9W zAR5U1BRV3FUS8~9!hJ|p&nvesk~F9dnljhwU%#EKEC~EtG$1V$&i&5U#y(s2Sk+*t zb29cBvJgZA<|w##(5PzVkcX&i>|MEx;$iC{$^u^7x`;IJ-;>JLN#J+dV>h^LgN1*! zW;vv{i=s`zeWXH=1=2#$A>Le%9}S4x-OCos{h#oA%$t6(-Pub}j}L4)Fli7V3(-2s zXP>axbhtLMkczLW<_Z?Q?add797XO#k*B6E;@)-KJBNp*hcr3h9?9IVOUi+%j{@l6 zkpU$WkOi!f^;@qm`)J0H1uK5`^gIfQ7hLvP#CT%g0LFnPR3?3Gd69W?{-*uAnfM(A zqu|pDJrzq9${T_PM-JPz7I+ppij2Vmr?kmS-W%x5QTW+p=B}-Io?yEWBnuM%AvCaT zgP%Q6?-5rfBtr+r&%oi7HcjFG^+NA(6R_7dUvr-d?#IPFE9PSF2l|NCXYhZ%me5P= zXX>Oucn*WKVm^p|sN!$(`f1RF_oWOFXY0lxM}a+8fO_k5mM*%CeQ>ZpjnMhbU0V=; z-qXfEX%Iq(WMskDPx9ur*=L>mNgUp_L+n39Tu8VedMGn5&;9#0VZS}@Gs9es{TY51 zud&Y+dvt~nG#J~Urr67u{Xi9+c;>-9Ho0$| zlmA_Gh^WO7{UAO4LwtH0#kLFaa!JJfq?RvQ`)OEX!?-v)?sLceHa^T5EpX29TAwlX z0N?v!$H!uiDbCe}`$?vK2JR_O+$-)f_}BfL>NWQeWR8e+ne&jdJNM-&OIPu}>>o`X zX6t_)@A`GHEKqKO`*DWILW(+xe$==ob-a7Yn0zJqxjyv6VA02y^iX(FXX1c41MYoB z9j0o-LhUnf&%KG(PaY>^$M1Lf9{0GKNO{8Nr+0cq%-87m<=!I8hYk{Ze-Z!DYoAFE ze>$LFg-rvy_lc>CQrAgtyFlD?zZJ1pjmgLQ*goH~QOL!@xBH2CTH;y#U!D0L=TGMJ z>IU2+-xsrPn6dDhtl^Hmc-3$6%!7Mqab7>OYFXgEwP&u3dT`B{kwWJS+!OyM4WjAb zrGdo1>H!6OC)1xcwoa0^nK~y6d);lxn=1M%yT^V6dYAi;>FF>VvL-M&U^834^`g zxF?dR+YZR*xn+U-Xr6QJrKf(MxThVO+PXoojU9xr@Uk#|+N*U!jf zBvUu+#D5{m0&vebN$fwR_LkA~IQf}-)XwPI*4lqc;YOW_qw}Zbex%NMP&2n3LSiJ@!rMrQuawl;rEL@dGz@P?;Hc|@*M1U=a}!+ z^d9fU{ex&@iTm6(&AdJVKEHGE0&9O{Z$AK22kCMUQzr%YqD?^-eC+e$_Xc2pzmpuU zjayt(pK@QjNiR2o?se@2sqlo)(a+qFJ3;JkC+w{U_g*^ib2GcO!+ulycw76vn%t50 zi?Qb*r>EV$6FocBU<{_GMAD)Ns!| zkX8==K=?WIclNDaZTXmdP96s~!ydPSJ!Y*j{85#|2&O}FvS9UNjHE%7Ja~Ez!j_lB zzH05n-rgLGj(c8jUoh90(7e8}J%5hpf7WO5J?`7fz0^gn13XQ>79i-L^S!*L&&7Q} z!{mv3bQ1T6 z%5B$N>>KIEJzsO5z=Uq{-k9h)ig41Rh?er~HV<&`EP7bx>?cJ9qX3(5j;&wa0UE}HM) zWrcTjrrdGAJ?@oCn?l>7o`LtJt>zxJ0{77Q$>g_f{?~0pFdYK%AG+^=qKTIV+^c~5 z713t#P-Etq2l;9yd`z(qq_#(m`*TP4?G^D4=O=936aNY{Jp_56ZsH!8Tk@s_$`hYp z@2cgZ)|0qhH7dig?>L{2vBko-`o+#A=`s;63;w>U-@a=enm~`o(Mja{EbN7}!-xMk zHs-6ikNiUHg-O4IhmLneBM}Sq>?~}zJAStDugL;%KdNSVu_w34RR;Vn?ZKoLjf|1d zWyG=m415;m6&Rzr<2FZLDOP?PxHjjWz4G9c1snhD*Ba2XHI6I*_oHf-6MNmd=TA8{ z@)h^4iWA%Nb8=ofUVfXt$?8$VLh}lTx&JhD9_>gT_C!7Txwbbro{xJWtwwHwbhPss z&^^>YZV)t}UJ9Obiz^FapIt}K+z=Xs&>^!%8SG1*<;`mm_o%a9JZJ!Xam2RJKRn!g zPu;-yVCe^M2hKtJ%L4c2ecOMYMAvzU14PahaR%pmt!Kam^VsVrBF>u*6WdQ9Caur2go5ktH1 zFJJq}fn}S+Wx=m5N$DlIe-iMm_PHs5EYMzL)vbsaX{N)EQ~LbKo}HNEYGTamZ|}RV z@NS(2uD(DX;5Cs04Bq?IqyzNGtk*hl^-2=)c*FK9)+rhefZqnyW) zb3F8w#x|@0+$$e8JeL$M3*mI|(@FOJRoKr<(ZI9UP?S!B41fmN4XUD!V3Fm^Dcq9b z2l#qhZuH&HbbX_jeoWOQ^93{^y7ZDtZ(I^ z@T$&YA9~zG%?!| z_bB}H%!B*6Glq+zfvQR3*|G~(jG$r#%~$n_otc~U$Gwt=U>a~N;dBW0kthqn_}BIn z@YP4bI*Gr@d3Ej|%R}Lo*Jq9$g%8?Q_^Pyf?s;wfvy9<#UaBQ|8@w#-a?z~O3yc{e zbdu=H@4JVgl7lEZU_S@?LoOf<^162rdx^Sf!1{v8tzUx8u4L?lKcaB%cV;Zdyr8{;i4*ntk^8NCC0{xuKnN`-h|l?QwSfDyRdg zfjxv*^DSRGFqWg;7+tG^lLn+kfL*Y4lJZk^J)~bda~M`miMgcE`32KY4WL1wPV$ij z3;*2bEO4(gMS}v!0{oaI?++BQy#vSayNTD4)n0&}Z-AI+vp)^+F8xKucA3=?8_>oo zIfz9AO%^B<$;d;BbO@IP>8pD1ABzr}Ecn_6T^~IoYAIHYcILW-J;r?Eis6HW?h?6b z=p`O*J;e7!ZQzLaMI7b8zoJE?EEG-q%stwC_i0O67Brm%8d0yVpPb|Hd5BkGkNb2L z`vd2_=E}=xF)}}U7Ws)qm@D+zU&@w=NIF0U3St{ll!YMsJk;7h*VI3X|Mhbk>@)q+ zQMJlro%sw$j7+?;?qu>SjScS8EMw#&eA`zJzQjD{+`g~Me5~Sq_c@XVS3wp6Y=c`T z+4z_Hst3zL(4MNwHfTC2z&?`(V_l2U7B&{~>#9tw#R`d$4~rPNnV?tN>V}iC&1v#g z<^Ju&xf{alLK3pzW1mR_&iy)SoWScMKBhf}&qR9>6(b+O{N@DsPK-T5X%Nd#O2sY| zJbt$D&wZUedpj4NERY6MJG5}b$kaEMJ%-Jpz1T7f^NElRw;tka9-pjPVT^sTrfCn5 z2MVj9FLXMnd_~aNo5vVx?Qd`5KY#{-b|D2n$%>J+bw0$Yh>u~9`TsHXE88(L{^y{B z`C7!tuq&dL&rwUS=i0REB4nR!{Bs{lZ7<4X=@27+4w_?_(XEZK0>1r<;U?gk`6KET z+U&82k(Um6N7TuQ&+)S+uy$^F#vo%nYE-=Vr#xtQcV9=+Ar+kzBm?SwDGOfwyJ!$V zhjiL!=WoG=LpKRpnK>oWfbUTrcx};9yB4?)tlbWwLnIBf__+}5v;V&1g)a*h9s_(; zcRtU04cjbn9drh+1L;uoWMPQ8FK#d$G`nyWWWlb-&~q5B>&RNkFdC#u7SfbU68Mj# zflDVP|MTcbUb274URqb;szH03J_8{QBGT=-s8bs=(X#4DpwX`{hl5z&}^5l~G0sq8(0`M5%0KkU^@#t{FK7%$f zWWlUUI)M1?F#vF1oNxsY*K+qtV4k12Lq)xgX?Q<9nXe$Ef5G)JpQ6KgwAVK^ODf6VlKhI?W$D(O) zjbtIxJ{S31(lOw@EO9UJU-^Z^P$&MWhuQ+pNg7;RSqRQ0MbAGMLHm3TIByHMMd5#V z)zaJoUgv*ae*@4xJ`JK|;YKbA^?K(3-C>`<0T8@T8t4b`t;vCqeW`?dfR_Y(g)?s+|=tONg~1$7bafoYQ!4P10c#z!*k^H<1MT@SpM1>6Ei zC>UP#IXC*nYs6oP4@!IJK)(pSX>r5{0W`QCebvIvB^^KvJpk|%g>(Dt)H{BJ0G@SS zq+|gxTJgSsjes+N7&_^C^i>NSKcB%o&n7@Wz+=GuEr0~B6Fg(xnIEbH-}|66{ZfZ- zN;)83F8&apGGH)Z72ptJh4X+b{yB{6z%C>&3s;cSJC8bmLx9zQ!GOwuhXFS!oJ;(d zOk`B?*EdA|C7S|&I%i-1#~%CowtV~gX8pRe{eCg~^2XH-4BWuLzd8mw+XF0?Z(lp~ z!yfzn+jQNc>ztqBGoAT4Xpmxw2YH2~SmNPdCIraW@&967aRR*!Tu?DFx<-~H6Yj6Kj(fb;GeD!l+zjyY1xAs5q-w$L=9p|1o z*?2AX)vUw4m7~DBzhib?^SydF1I7vn+z%W7*Z)@&uL1RgAqW4%#*9z5W#+1nxtk_5Qbc!AWyB5Ae0c2a!BL9tq$BlLrdK2a!A=_<+2i;3BTc z56eOK-hd|ncL*K;?MF52B>91S0iHLCC%>|Dbz?X942?hb($4y6b1NFJHW# zt%?_}zAlh_VDDWPt`7oufV@$-xkOO^15(27MFnOS2 zG0^*WfRTV>0MX;oK0EtwIrzfrkdSF{d0NAp3U>4H>jLLun_+6vPqxalunH>h0cZ4uL(VnoIOx-FX%6Iz@5+mF9CMi^mfzVzYm^2AB53e|6eo@&@QCY zFStH*fyXA;Jkg-mPSCzF;4bpOIMP1}J&8fU`$(U>`=s2O&H_AHlK- zy1a*7o4O#5+L zpjQ9GNFIpr4J=)7o%n}EFjkDP3Ax~bA4ok=TgC&if-6s?as}%A)$mlk#rT9(te{u3rM2k-f>;%P73} zrp_A{A9!LzM8l zyZ50_Z!w+b?rVz&B5gtl52T_CuDXAizP!;@$RF+m?SDu5Pj6OA=m63m^d{T^$aK&? z9ehv(bwRpw2G^N?I1==~L+OA__P0DNHaKq`DtNPa=Ob-{I#KOBcR5ITVNU&#Iw zI3H567>{vm1ZhP2p(!t)Ogf%Z=b`d2M?6X@Mr(cF91d_mnGP}de8MCA&K zNdE9ftf=Y^dX24L<0kBj@jbxu;QcWQ*(MZ0|FB5LimBue{r!UFi2p$QGJgl{4-5JS z^cJ;s!oQdKEMb4?Vts?i-}VFGxif z*mDUNL4VSIlBB(}e_oV52Obc;H5?sM`W{ofex=FkL{}pAV-$c_JPUq}wK3 zb6t=&|InKsP_)<2>8wYOIhSw_{m8FG(_iU@czjT3HlYZ{is{ZDrbQRT_YbeIAH4)c zc9omadum%zCM=iXFt_NP+(5swcFO&8plOK`1Q3WyORbb&>GwSQu) z{eTn?@SFxdxK{q5WlyBe$U@u@2(?sgs#cS3y{G&~j%`d`Vv zel~rBe?|Y0G+L82!Z?8aXv2W})gIWi!B{@zJ& zt!nYWtk*gj$3NXq7D$o@uB|RWuUfg!i0>X?*G?B)3;!@K50J)ZPo6NAyf;w910pVj zE?E4|8`zWnIRBj#4_r%KVD{~f;DPvja8-3dDzzp7egSRJlvdGtfHXdF;4@=(k1l3R zP*LOv){e;(`@M1((PV4^c_7_<5GPhdzgXwqD!%)x#Iy(W8Ltcf&|H%c5F;eR0|!6e zBH~E;0rUsZYs2_>&P?nrd&xF?r!tEvl%-dsW~9x&;- zaoQv!yM8sv1JEneJGM3s@7js~y6k|T9;k_V15^LI&xNK7%w7gw`d=Tq;A;7Yad?0< zK7Zyk_F4YG7+o9rVXjqzJ(%COhjHrA7yNg$EePR(!qf%9^e-GfxE}q(xIFOX;lsxK z{=E$J(Gfh51zuR5G1xeN`pY!&K>B0FX!@toCKOWM=xXSKxIA!V&n{znr#7-z68Io6 zM;zo2P!B}bou!Wt;_dBJIJ)3^^AF?l0CU6>Tf7J!s32fm<2wF1VqYGReqRy{>}ywld>G#RD#z z@D+;{BY6PUUgU_!jyAF|r^mS{&PnCH*3myloFWgTq6-}KFEm{cKWA`N{lgUI5~6s3 z4&T`mCyd4Ky=mnI$OntwW{&unzduMmz<*SZXo8tj5cy^5fkMy)9{Q)M3sSKO*O`A9 zhX+m^_!K$f&cY6e93kTTHDgBl=ZHh~faw>;;)A$7Fsm4W^tW^Y{R3U^hh0O?N&iqD zD5AQcfO83Pc;Fyv#ByJ0E^GjG0Q&PATW1I4h$DGGlk;);(sXq+d=Thkbix0x+ zuK!Qtflxk(s5iQ9<`U4?qFVHv(e7o)5jU=9`hyjWiOm|yxn}5l$2^guzsnY={IawK zUDn1at;kDBRDpnLVN=nBBovW%`a+%PYrc8cL1In@mmTwTR zuL*fzGUpA~tis&SWhYHdo4#=>a>S?^6aFA-&!%-?j(A6~FW}+<)|86+bV2+0JP_s| z+Vq!u-bU(!g2o8x&;^JyCbxRYSTgu6W9bL)0N(b%vLWvpGrP4D>k?Soy$Eyi%ZBi? zURZ|rmVNLp{{ODA_}u}bj(Zf=GkAF*-nvz;g_zc%m2vztZygAUeEzhVBR2EHj1A|# z9+D$gx&Yt3jC#Vg*`w@w0|yTjTo*X$A5#~kViO7&E7Av<_;Mp-|3_;L*4H}WqIi7; za(86+PGe@*c497O>+Bhb!_K=ttAAI1kDu8*b1M4cREI9t=&$ra99@9VQqDO4&$$54 z{6A>PWSm7tZr-&u6Xgn*ZCmc!BtR z%C9B+iuU?Bgbz69vtrm_(|k-qOu9t)6fuL`2mXd>Kx%0q@oLA*aXr(yFoS7T+Z^ZsW9c^Km#*in+pmyY^#>|M27 ztPhdBGT}G0e95=&kiSKJvEa?VGKT;ji${OO3(kw@+C8q2XHKRECir50zn;da zFAnl2Bky@&<9bmqtkeFJ)hqBlr_adWI(y={vGo0S#5y9ej}H9?6XNqhI1gZ7Qz`$7 z{yc~1f~)2qg7(;t0zS`3$nsgD!-HGCM}50&=zE}986*GAKE`RR)8V1ZoBNvoKMX%% zdZ$->X>apFxGtc*nAN?LacuuS{$%7m5AEEJx{y~a8$-F5v`5}g(@Xp<&Ka-D%n&{W z;|2eHl#M?yk>%#5v&ty)Hv81(r+3bC5(_ZRV7ekC0cyTs30FNthp`9q=31 z#dGJ3b>p)|eYuDBV$FeEubd8D;G}pP|D67g8mEN>MQiRFK+QBbL5+*PeHv+ zMaXe$tj*dLiw?A>`ET?F-PL+Ul`Amk7h~`Na|W~<2R3hrbx+m+iMkN*Dfw+;i$=zt z6-y1qD-QaLaa}MrV_ah!AQs^|CJ`r?^ww#wu2ZxLUix2ST~N7{F{gJoybK5pE#x|^uni|l-g?G&A59!9 zY=yM>I=%g_y*xnLXG145r^MV7HHzn6>REVCVZ+BDeyJ>YjWs|!7R>YiENWrzD{%ZbqEhoA6U8|+CLmt=~*Kl50F37#0M^2z~5yIP8{&?!z1z#?-A0 zI!yP+rJ@1P_|D}^7m-_;W{jzaxla0)1zDd0d!L1SZkRG&~IH z$XpYGXK{a*y=9!B{^jCz=lYKKv{8=okz9i*;_CQ?%w4!)$=26F@)W znRE6R&Yt0;`0}UXS?cy33+9UT!K6Lc1ZI_CCpw0`!V$@8z0Zj3(f7FKXb-dG2(q;yJ^EO;5840bKf)m|H+z_@Db{Z z`UOFEMSqP4)V!j#Ao^xjoW;40QiT6UO@1dhq#AAP$|=tD7(F zWqwHOV<2(>emX$CS1?`RpufcjB@1Q~lJE~n`_Z+^8yj+|Q~h&$)Rp`nbNQodSHQgA zK;gp^cM9KrXa1kD8DoPHh$lR>_u&J7`j^4{VgFcpUEcGvjUQotvaz@y6_zgWrN5>N(rpuje+b$$zq4k{h``()@g?eL(L-fS{VK-%H+mZE z!NWtxrTd!yKfHT~F|A`u$o=!6Mf`drhb{n*%g7hx zOSO!=?j6M(m>ZXVwCCLWtR5Xroln~95K(ia>JRaqyw^G)ulosa8A*G7j1k*1Flz*KU((E5D7>GQ5$Xprm z#JQPCnD3w3;pL=qd-MDEjHo{h=K;<+QI6y0bvf@duU`*QM?^c5_iB6p`2dVb#DwFr zL{8sRXJGL_e0^Z?L1>H+?jH`T_zZLa!Sn&c&ME2w+LGD5x`gKTNPEuBOl{x7nAGw` z(NB->xn*5{&Hsy9>p^b{{aer)RQd|E-v>6W=TAo7Q{?tA@5|iI$SS2pPMEQr=eu}= zJ;F9kpNyEWs*Lm0e6ss&@j<-0Gm8fbs0(cRC&vTH`US%(mNce!ZXKE1V+{voXnd18 z(e;t=5qQwYS~+rvF%mw7@Gl_4$@Vp&+%r~S%%Jm@-?g|Wb9=)PlYn02H|BTtu3YAc z@A-Yv4-kIL*hc8L4Eqo?r{t(TDJUN#sSBL+PhJZqkvu zbnfe~irn7L#rctRAoZEsTQ?zF#D+HQRXs9nKWJlt!xymq0@9v28gWneoQ(N=79a4Q z$nAXyJRPn7=NQB1mt|~F0DF*xE*Mrp(cJHxx=o;6 z8Q-ifa(iniHoi3F`=Y<*o4t`|t7L4MH7z=~2fT_r8}QEWh+LD9dqsQw9LxixJ#&L` z^NDKSku_Vi_oUIP%%LKVap(5P$y6qfcDHQs9He} z{ap8BJj(ew&ONBOlK$rDqesZXj%VX*vF@WyGu(%9fs^K5UP!Mlh`V1x253)6Cm*Q% zA?ZJ^ac$8b*^M7XN4|gJ^UsXj_AQLe8fDNkb(RB<>T~WhX+eK#RE@H*`Ok@XkFp#M ziVsj<1lf(sL5Ta}8F}6V`#!EoUGp98~J0je)}#(0#;$ z`UL^HAfv+5g8mL32-FAh?SZ8Wzys4ewK9&Newl}xj_Ni2F8W6~;1}V8g?v`gg!S~) zy_tx+ljDI>_)Zx!M{``{nK)1653*kT(+%rHJRwtO+I71QUDlFw4*&S4`$RpG z(D{P)+I)iIfe3vNNPqHz#RCQK4P5@Aq(6DUhYzgS(Cr%}#|P8{vwLeH4tSgwHGRt7U<0p*-tAUEl$J z4*U^J`!wqUhdxL?XW*rOVd;WrMP2dI58lFDnty#ZX?^{b&H)QU1IC4!+9*EWjw%@4nK_Cy{ zGcH}=d9CIWJoaCgfBpK}_=nN-_pu2n_yrmGE^Yk!$*keVlnc%wDUX^ zz5UMoKj#g&M%2Lr*P||o&KzK)Aaq6yoa6B6Du;-7+t4=v2~7FONYSQO;6QkSb)Q^6 z=*t7w$|e+&UrC@BZ$Q)rr|0M7Z51AwEA#zZmJWy!5Ab!r^ zYWjym%l`xPC&b``tDp<$t1Uqu-Y-W;I$HjqnQzK_t$h+XLev&@?;!Khq;nK}1!6^; z{xNx=uyq0Cn)Sh}Mq{0a&w3m30DC;qAEXXoj6bh`_oQ-!tSRN1C)wvBf)B2-O(<+# z;G}=i&;|4b81Dz=2+0G=A0!WO?sxH^0kLz0oLgkf!JKt09w;=MaP9rWq2(0K{m$vP z32|dZkt0OBZ`EbNjO#w3!yiPvF%mi>*&HEr54Ik_TwpAFaP4A6$NH4ed4>3SBSC-i zKp-E);DJd4Reh1|JlHe;Ae{q#d9?IOp|l*8F4gIl`%!i@-W4_z}*& zR}p?eDmEc7Ul2b=NS7`cTJG;s_LUA$XDcqy?LrJ5NJSUGmiyJCs~q7$pBy21fb+gn z+B89oD!)&ikxY(o-NbBBdn)P{Ej=LZK~c8}srrYK{^Wr)^Ff+*fy@zNEtr`jB;EC6 z--oM=u`ks$IKNCjkadJB^p6ByvyT|pm2>@wQwNX-V)zBA=z>&iLK@~0ob*qg2O@Jv zN%BFce+YkIM%Ol2Gd{uKev3MA9l40>gbsLC@W6zZ8w!75({$%&_3!bTeZ<(`fi<08 z9iVt11|M99v7(p$g`f*ku?cSf5Io>quZa3W=7MOy0nR!k*aP!@=9R*LxghF#>oX2J z;N*dLHo@%&2ED#k{-KN!g6SW?2flv6wet_1^bV*wNb~yTLbnN5(LWplyH5z`12aBU zzF}aTaBcj;f zBZxSke!dy+`{fL-rA;W3x*(v|1T?=A!~@Z~z=sd6qD=^m6|J}-z$c^*P>^C@lLF-o zuCXpK^M|DUc@O=sr7lP%Rt(e!8m$%0-RDAz5#rf|pxDs;e!64D(&s??BZ2f!l@G3> zE=adci1rESBWQjBuLFI92)`he{9$Ub;$hH!QzZR0zaZKs{0sPpg`x|Jq<;w7mzV^Q zzMqo!uyd?@fsbEs!#^yFa|shc`;LH%1>u2o>w>E~mvF;Byoh>q(*ExN*a7MQ1!gQ5 zrUx{ea8+Z)RQyAW=I(jsucUu?81#Q?NSPAf1KpR~v{yV3( z{li08v-Sjlv?tsF7!NSg$phEFE})+f-!}-h1NwY|W)lMQ1%)0fjtA}U(CAMdCn5utx26S%>C`S4dMpiDJ z-~n3ea2H+=23&FTK)Q9o_3t0X@D1rdvMx2U)=2q?h2kGx0lfzU?ozbpSskSR5GN1( z0Pp46^rs#uLb@OooAA}FHOU3Ne`wRbw2*&Af1b$$1dR`Vir2Fx-4*?99w_R%;Kp2n zHRn7V`=I?40Gbn|?$>Fru7{R=Ql~%pfjmGxpxFY&3qEneSIIvtg0Z5j*5nFe$Eg58 z`;nCu{hwFl_B{^)4}jh}&=$}i(0oG01GYZ6;U5-!PATcUQFN`z8PI(&;D>;O1y!E& zrMde}=yqufO3O27PoMB5fEgR=^tXASsN00E$Xvos=z+$d`CXFk(D&d0%6~G)kg}!@ zQ0LMm7#lJ_fE-crV*t}9)X&l;TytIU)$|XKqy8)t@YwK5&lDrg!3UP?CqsMnSTe^_|_;YIihM*u4Ty+QjY0Cy^yXH+d|(SKN_ zc=kRHU%apB0WC%(KVS~I`1b%$0XhOE0yY7_4<*h65IYp@dBx~hF{=Nm{(s0hbH@r& z68=VK8A>$=C0VV@F0sap7{_u*=+yvSuEHLGMM5SlrkW_re$k#u5vtj5j6A9yr z^L3|7&ewlB=Y0Ji$DOb5-s60ITfX!4&7GaEi@9Gr|9#`t4Gi4Czzq!Cz`zX*Tpt+d z?0ig*eamf;*SERtsoUPV?XlZlyY0E#-uHU$*%EhtZj0!@941S!{Oa zBl(XG`&#{58{Sg7`jvMddZ^t)T^?@s%Ai_x79PESSDA(_|1#!|R);6Px$@GPpPkRC zz4gt`Kdye)dx`(L>w{wbZeG^;;r#!)<*!eDcJE(*+;sTaU$5zL_V|v0)z;0aS#?MG zI(bJoA1hViTMs|F;GW;i`{}}a)_uMCubSR@{LfFXYn{0BiT|Cy_m9Q?_~8Hhw}1c6 zxs_MiPMw&@|8RQoJI{S%*T+9!S*zN8@7=Wa<{n+Pboo=_*i(!DugmK{Ui$T#f2;NO zrE@FVefi5h4JY)vH}B}t+p;T+d+58pyS`Pr?Bep3fAhOyCG^zW3>e-rUgh@i(>pY9OQ-kx_bNBG@44SSSnKy^&%OI{o9q=i_vM}F*Q3}QbvIVK zt^F^q>@MDN(|z zv);S^cYlqqb(~h=zWbMU`Qx9u?Oym_@2<)|(&Yb@z4UK`{$p%T%UKVepK$owO>@Wf zdhLlhcmBVXpZ)lk+w%H%JNEmW7qjZ+)iC~Aclh1C{`x> z{Ql4jzkTtU^&LLEQt_@i-@Ug*MwOmj{?>H+-2QE+>^yyI(?wT$JaPLkXCM5&>)fYr zgWHZ*AGM%Li*D`yoIk!=)A?VY`I}?iFW>!emxDu|`S0%!oq2ce)){Lr{_T%>TkijE zmrv`yykhjl-<|nde(P8Aau$rt?=-aci;q9IyW_2|?*G60Km7Lp4n5et!`;h_X^GOi zzJBT9yYi1U+H>#sk7W05(xu74iO2f1ulme)pFCdf?Nxh!a{r=LiGCHj^{abn@s(rM zAN*FSuIG=h{nO3goAa|X9j9i!(Dk8=S+_j-$01jKzGLN}=FjGr>yq(Q;^C#a{oDWS z*zr04)4AlXEBAcwvwFXN`go_?bGIEUcB$dn3y=T!rzf-j{@nf-T0HT7hlh@2e6RET z+a~;bsptMMrQh~r|KA(sp4@e3{;#Xg9D8enR{PGkYkuFQ!&ScCyZx@y=d+f-`_ePd z?f=i}1AaB*+cmQ5+;+V6?Rg!B|Dx;5!+w5%xNY*2D<3B=wQm0X)8{YLFZtW!KiGcY zH(xZ$EqPz{Q;Unu>^kPy@#fPi<^6s`wVN;9{iE79=f8CJPj9|3_$aJf|P`E#C| ze0!Cuvi9Fs{N&%R?5SU}00R+X*w&I6tAD}K|ZAG}xc^#3I~4JvVY*z&Ae4Zi=gpU-=_)20P?KibOp z&vida{Iz1E<=YaC=bi6#^P~sg%|E>7)JK;loV)$pr=|Ayx%}&1UK0oW& z!kR~({A1tz)-Pr>-&pSWmW%aoJ9DsD$B#;M`0zsedr$x3@Vyy-{qBF1_{PuQ*-&l7 z+y8$JUme%v`@N5((vkuqf(nAt-GU+#f(Q~4BLt*NdW;Tfq;qtLl$6v)N;BzZQ|a31 zF$R1e-=E*_5B!4{_jAXo>zs2Pmk6Af&S*vK2@16`&aSAuw%r3#0t>{Xm>AAedYiW( z-5{P*UyM;1kwOA4lTDWh!%Vkr`7*W*4dFUpTqV69N9^*-j10_$K1_YqivC5_cienj z1e53q`x!S`5z!ch!$pIo^=$2~ifK(EgU-LMtwxe|@;LhwTN2uxqTvZ2kdVgm8ePIG zSQb`do7pKz`v!jgdWuV0l3R(LyQwlZ!yHMZO>{t&Uuenudx9)j8z-~J9(8E@Q{McY@H7?J z7h*VK;<7Osmv_SG+3Lb08%#sAE6w`T#~Uer^GF}Xo$vk{eZp_6WBOQL3$R-89(>+@ znV_}~(|L~iBiH2nHtqEeEJQcn*52!i4CR7OY5@PRsr0>Bt&jV$($T1Z}q~JzL9y^Wjtx-Oe3er*>C$%yBUn0 zSS>`(rFQ1$?N|D5PAGJs$TsOis4PaD;kndgzTdf`aQ1~q3ZQXW4V6Cn6CzaEE3#U7 z%Hta+ByNuUh5rl1?k$Kjp>T-{@=s8Bp)L)^l-hy7D?B)tu={;3U+X7O7mScVaWP9I z0jJc8{;5|+N9q+3?n{wBT6urjAQ`ad^&n&sj3x-mx7d?`ASjpB|D*#S2trSMSXO~K z<|<9i+9S6^Im~tMeAGGN15QK-i2Ra&r%1k8{e91~dRum-ByBY?+sW`PEX#9^d-yH# ztnO8Ff`x62Z>vi{1+~7$<4R#HD$DxbfyT zsdD@$tlaj+lCI_^_}Z-wnX44*fC4r0Y%z@}L%R*(FA+4+$7S zQ#3*7Wsv+rXnD;r$P;7$X_&Qdxq)TJ&ZOg5@JdO7j}N6K-qpif#BH4jfP=mU4jMy^ zjXq^;AFwT04pf1)e_0~H-#fW9TODpH1@KMcew#3`U`+g9&~@(|EzgrGQc`8v`8L(_0^8Ll8@H~wK&IId_gTJ z_`MtyrUC=goqioa0|quu?L=7!ac$U`(;L0o{_E(oP0aA(68Off0Zv7MUxGa1*Ew@eINdKzn4m_tRMCyyWm7suE{h_fZcb>6)zh`tb;?xu~^9ua2Ebla=> zd*V@1z8VZIc;VgZQpSrWeY4WpT!$dRX0v`hAG$Pf>nq7lq*mgi?5cFhS?^N43QFO9 zSj7-n5|#iikGVkO?~9B3Nd)yS6(zCU!|!w4Vae5ksje*INOX`fA=m2ZuqB`zbySSsw}De3mr%3chpovN!Lp z;Sx@=&Zeom;j|&22c= z>x09fZe;WEWB|WJwZ)WnYHg9yy^h&{h7EsI|04!E@cPf?CHJFy-JHK4pD+_LF{k_D zTAF?LszjSm=!J!D12jDPHCt9gNT40>PntlyfMENllnjbyK!vhG8VMoF-M(ag$FQYB z$aV<_yeaas*-ZJJ^_=jlk}wd=Cj|uiG-YY8^px8OIp1lp50B2)@;<5>6_;~GGwv?en?1qaFvBJM1z*oM8ycF7Dd2{;JZMik9vkkIL;21V zZfHnsR|ZN?OnMBG39NKN1AdcdW!swsU-wqHQOljM($jnJ+Fq|;Yw!ZQt-{(A2HvH+ zjFUq+i35F39wsPU%81s-_;zvpv)wj7KvH&UKroOX3Fl1$0RrwvEbf@Ufkt)vDh zXhzQ8PTd+|A9p$GE5^OI%J1G~$hx$JC0wdCuZZ6c@usFe$mKD!b_5IXY(17*&^_{8 zQw@A^sduaL@wn-#?w!3~FFSNNG%+soQ@sXoA4X%z<{t!bqhtT|bDwcRdi*n~r`V-Y zf9%vrz@3PC%fk8=lFQKB_hc}t5o6lY#DN50@xV*^6WvF<@6=jU1BANZ)gAGQ@M}Jt zpR7sA#$X{bM)mIp=rIfB4N0&g5A=GsPfssQOdn5TJNEi;k0?-cQ0DO5_J5vGec@O94G8IOT?3+eS|-M?~&Q#-NR zACUh2mS3I-Ecd4Gx8y`b*jJ&TS!SrDGPA!Y&13IF6dxaM9nM0xVA5g%wMCJ^(f6x5a(M zP`J<*4^UK|Uv~+8CGdT0P z{wGoum~t@3H#5q@`H=1aVfVRG>FrSOG>&f!mwAwVb|%p|uea*&jrG&lm|q02UolBy z=)Y`OY<4u%dxmsAvab&VixHyMN0&i15+1yl4LDdSJuFN|{lg)iLbyZ?ykL@92K ztR)7b+{n7hcA_zWE_{S7DkZBcuHG&W0YCJ*@;K>0zwDg5DcY72$J&lmDAWiRU9xq*7%O! zhvocKuEpnRTA!Z_ZeOrtpD3n1#_~tB1PZ_UOvo{^X_5p;_=h^egYlAl^w9s1%;j)V zF(=CQLstjPnB)-^*f?<6nc$KB>Tt@NR~QzW|33UgY#2Qc?e#zJbDbLJnJr9}!#G`@ z9F6BGpll(ljzo`t0}o?n1WA01V;|@Qoj+05F32L$QF#FTS#Sa00$g$!`xCB6+C>u(;}YSg+%;mrKcA34?X;?#I61cipt zb!d3kh~||U#EW9X8|6?}ms1Ffw5BnRd%T-jqpC42(41nZInmY=AP6s}@={T}HJ!>m zjJBF(idZ{a?gv>pa(N5FO=8x)F=U;yzg-}Mz=^1JI7Vh2oaUE$4ba|*!_d1baH(N* zn)crB^&Rgm^qM5??*gKl)x9;_=8unPfOom1yy|8=KU9+vE;I>B5PA@(>dy{pL9h+e ze9wg3dRkhKKR!K__1`C?VfT4t3+zW>a0uKV=5Q1!p40}%GFZrA zVr-s<1OnMuCrGQa`J`Dc8qBwl17{gXHof|cBPedKJA1(44jk>c5VRd5XDK|mmhSu~ z#+x}m9XUmqAa~yC^lz7DdlXGHSm3zIX-b>%O!Jwl*ZGreqD1ra058E=&_;DS=3n+bQz!u~(dHLhJW z7YpA?-vst$sH$oi+{~BL8oq;X{)b0{`{ARVU*EW9+R^Yo}!#ndod z(rLnb+5BBvd}*M#Rla&Wx!$Vrc!eOE5^$Bm;qkbN{q<3PxX)O zi;h52;|5?I#gn4i%Vz;;)ub5C#&qOb9$;l}kNp+Qj$;BXu2-J}(WAel^6cjd;fny? zg6gI(#)^%RquJR>!nr3DK6|6}?O61s^z6oS1IM)o1}+|&y|0#{<*z5tq!mT>_HUGf zcQ#n?eLAbdlAkYtE0+$WUrnkD!ZqaU@%M{1CGA!sc?=<-)(dymZO^mAY=q4@BgPC# zD32RrE@_@!5;$a@XmEsiM6e74u*;^e-%x0RJRU=iVi zgVOy8&(c9t-jVaa#yXlI4=z|OoVMOC?`)932M-soTQso8Q~}iwUc7aXn~?j2N@(Xu z_*s|n;cSc=cDh!%wd;C4PK*htE zuxV$*&0^GoJTNu3ApHEIm1eHM)ZgVYVvHOv(f>9`P(*Pg(e)K(p3U2%f8&(zWFBM^ zdpMP_@&^)1&rRu9|9n?Upvq@>f=y{)9)Z{96Ss)GEbq2 zc>2ApCV5ER>6@#)1K<4k@=w&DTZF33cgY*ih3GOZEG#lR{AcK?+2TE278f*CRHB}% zsyg0!3ya1{)ajMo3=d*oU_=mrnNJ4UPw44l)T-MZMQN72t??^Me^Zn(hfjEX4kKM| z$7QK+?|j8Bq}Qw$!nF2mFR!l-2@>QlxiyA`vn5aMjbFN7I%(%*nFAnoKbO5aC_|fd zyK-w~W@!BC=3n}Q6!`}|(w;UUxK?$8X2J;0xs_@4r+m^Ait10fk6iK`SWc!#UClxJ zz8-2|qQ|gu==zHRb8Qfh6Zu)aa@4BM(!i$X7fd~@C>XZl8K%sdP!RTSEB{D@sISGn z=Z{lUcGGV2Wcz7$cYYRDjxe94?tnCj&3^aQr3V6?sCY->sh1_^eb!U}u-guo+DKHp zeEKHIK)1W;Y~}3r`Kqg~SZlEl(-4812p|z%n&0SJ{Z-x39MDrqS0$TOJCP1*^F=Bk zJ}1-fuC&CL{$xdPi%Cw`)|cf5CtJnFj?u<+)&0F~?=YG&qdV-xX6I04H5u`8MNw{~ zAsq%e9sUUS(&y+4_Sy9bYi(8cYuY)fFY3sP_dID2^vP&BFY!T#`Rvk#w47UORe{TFH~(=3bZbweMaqC@Dwlkl#B|X$l}u{V54_Sjw*r^(trw>;OEY_LRQi3+P zw{2@Uo(if;FK`qzmZViz`CTqGz>)xvNqvvi#!a}xhbPP&Y#Bc=_tanTy|$-kxK+oy zR12@u2GLKDXwePsdS}t48j$ddfEZu-9SuhUnA%x~|HClzO*})=fwaKN-hNC9FaK!c z!Nsf&H}{5-Nwj-IU`iYt>wH6jTI8A9e0$wzKqppYbk&F9cQ6%fdV zRJ(kbeAxkUUS84!AbeHifwUlwD1`K3D zzkXF~(5XC|g?#n-P@o+!A4Z#_AUZg*%f-C6U;Mq>-@2`;G2Y2IOB(zsj6yeNWR%|n zkjlPO)u(TjvyF5FpPZaH?}|wId-?02)4N%eQgZ||e?B5Y7aE{e!kZkiZ;V)MY!Nag z{yS8;aShE`XIm68!$1=6h8ub4kCXXWUNh4u6ZV|buWhkKsH5}1$9i!Lv?y4!;g5_( z{0W~oD(hN_%bPl>dpNC3y?7qLh~|(%Ot_~c4NwBY zZSnEuX%tVD(Z3}$A1mwKAPV^A!Abh9K9S>>m*D4g;nM|2%yadX&ns%PcyBeKS_&v~ zM$IY6Ie)lzeIPe$Ukp(44p1f9t7>cylxnMe4^(pllBHO(8gFbWEDTE&yLM`Kbjmp- zxECub+o}>7OG-W&U2LohA99TX6z}s(s~q+$%foItX7qmXS9Ok<>ejCzx$=8CGNOYm z1-!}7M29_wiOcrcTV1~}3`uoH0t?F(dWNG6$^3K9gG^#!<{v&~eO7bXX|uDUr=ogy zH&!>|b)JeZ6951gNZ&*i$uH|5M@iPDkLXkr623cmi0;VdCchTx1B7qt^ukKSs8+_e%D38f{iynVvo-^<&hJBj1%p*nfzh@9yjztX9{ zp+00|J0?3g;T|jBwp7p1>||F8R5N}T71_IJ3797#ri|veKniLK6mPz5L0}YNv_MRm zP?UP<;@!4$G1SmUehZL%W~Nbbpb(wyc%0SEf?WQ&Im6epGfdPRq6u6oW-x~C0^$9L#orJ8{e#_&c3-kD*Wf@c6Z)B9vHOx+~==ZmgA?j;? zj7%MK5%G}sGVR)1`Obf!uxa9XtT)v>@ifd_LWyOiFkR#>pjl1LqO!JqOboFvZCF_I zED_aO+xE+DLUbv=|Atz<_-X6p!{pcNt%Llju)!9T5ChIk-@qMmL#)1&^p}67 zbaE_gY6>}{&a;(f6`c>U<(aS7kTm|4-`tj4QNh@RvVRdU%&D9)wFx}mrt_paix#l9 zYCdEmvW$fdx>l%gwiE`0^CoAz^?|x^!c$9(c9NjKEAD4XAkpJ58drE6PgTq+0@7EZtb{U{xbOI3}+=>v71rrW|UV?4y_l`&)xQ^@&}^9&SYiv zBs-~dA)L>D)px{E=pF$k9&?7%wxFwX0^>Q{39LHrm&VZLLR)4|2OSW|v(4fz&CK^OqG(#axV z9T2dUtA+=l#1d}U&6~Qqyd5Nc>az7&S>)PFVNS*)0zHulv9-HjnL`mkzFG+RTHH+B zLyp}>8MJkd8OT@WVr>Bf@(Wp(l}))9?DVnRW@p`onw{l$_mte*?z&(f7o}0+EMjAf zdG$&NNfeGr<5q7QrJ(B8ygjNgLzs>C*!W z^fs#bbWac0^gf6Nd~ZhmVgLX}e)Y`7r6V9;V6hJx<-5L-{w0B@xpAB4S4KkT%mIYk zxVBRVsUFi?Ov%O>nk&0hw$}3DZ^TR1V52 zy}gcff^_ZL&CUPL%V(gD+}xAk?a4HaxP&xph%GmNd4qf;4V2Lq>%<=)mQZ_c7tn@G z+WvLyf@$$F%>8pLL193C5!EN;zfbjI4ptQ&f7)G3Lc=aT9}@8^dw*jp#Y^9%bge&L z^`n!pvFFy84=ze}2bPIG+C4>=MUD%cNegRq26>29WDSH%_yET1nMON8#4-=l{yT9}{uUAOl)qo@;(45*&a(3Nw;Igk%TK0} z&3`f25ggy8OAiE*qLx8ZjUTVsSpS+vs5W8ngji4Q4r^NZBvj8J>AcSY z>^ucvj_(7j`Wz|ovG{$j+3ZgB^xsLl-fUm*m!L(7(e@J{!AIyFZ^C$W|}V#?>g8u`bqr9xtlXrhI;%c9pv z-~1>?!?{3a7vB`rYf1WT|KalKcPnq_-wXh0$mmnO+&kLRvVxSxu9H8xw|4-|`2LQs zQg|7`BYZ2A=jYAvFs~s@+URQ_I!ZI3`9IPX>N~H!d{CbwBi{ww)xgLEup!yz-k?c= zo|%}`li&6)FU6p5C4;&-_9}eqXF9bnJahP^{?_rTDDyoT@m_**+ zv$Txq&eN&vsI~>e_tBZCL?6Pu^m1s${Wy`OZ|NdAyZjmF+<#JxTaw0Ew4j+ERJGaS zsKz9Nhp=r_h_W{k>`(Q7syZ;AOwQPyJp#%M-YT$^0!TDYpDWq1t9GY(wpiWN^j*$l z22Q%nKB3qTE?qzr`&d3ZYsbSNGB>_#10%(UUFhj=Xh_gE%lG3RIQ{}J(#O}6^!IN_ zx%qK96wxaS?Yhweji7(oA#iN{R?5Y5hZYF#;ZDu(KL{%jF;HX_)m6#i_c7^cHV1Mq zQ)A;~Rj&vOh*G4g&D`W{-MXWaq>6$ui4mY+y_1Tx7CY-qRs7SHd_B9Hc7KwZBOQiO4J*wT_oi8(C1qPmJpz(q50|IXO91SWiY^ zla`Myfyi9&#<6SPOA9(W$~2X`_+^G#Nt6c)*cM>nr+C>Ph0$hHGNvaFjQB@y+uK;(7o z>I;9|=3O<30AOg`8PkXjg&+UnJinp9>(AAiWn)0TB=EmV)f}ub{3`e+eX>VdcIUtV zW!aeK_o78pi&~&oK()gr{pnLi=DcQJ-vW@Z*%{9hfD`v??5ED0zg~*FHKE+79J^k# zvDw)P^OjRk0KZVHZ#D;#6&nVPS`vc?+ly5etk!c65M0KBQ!{$5tA=68OnX!G$kd7o z60g&0tNP*o^w&eK?2+*qDHhM~0EYd!i}2=20IJD_Sk+(a($h5ne}jSDv8yUOdz8sA zQq|Dpy#&Zcgtnlm^sRqcE}$L{dPYVbHw@0yBAKE^@WaTvYvIfZT%u-`DYXb8RH^p< zANtw7P7H>79dKNBTA-R#<&d;0vjy`z#4 zZ@Fh<>RlQ8!(a3y{Su?OUiZhCJ{_PmU?jTddEC4`liMj4|JuTCSv+~ZF)b~r4D!BSOX=b+lg zGgM0(0>}*MyZi3t1JS{OJbTbn?yWt$jbYG_keQi_fkqVKV#8!Xnt;WP%yhcH>l`FMZQk>v zn+x(i0dfY^1;6qN3Jmmp^SaUSH+v9^9ne-jLL}hFJ(^i%5e8X~GN9USd;kgEV0G@! z=ANBLhgrQxjND~Wv$T)T93B3x`nJQ9mZPKe+Dh+S5v;D*(f-ATwA%y=yxWT^m1)}O zmPn4gW-^J2JG7?nrG`+kA>SLE`>m0IFBM9?qL$6AB=-&WA@vZbZZ6CkAsqe+*LYTV zf}g)M_zvqa{S^Q5k>X_^C*-W3zDZjlqK8u=xVWl7@!zcX)$!PwJ~_fx|V?hj$4;(?~+qOF9x*g{~l0&?IAHkfVLD z6P5AkW=V>eT zi~|wm$mi(PSYVyVU-BCt_T*)Ne5ZEQ1y%lT5#%!=(()r`47h^pfEpsyb-9xse~=xx zqq-m_CH!BT2fqdV)UR#L5O6>a0a#CZZp{FV2S$kf){nL1J1o)SD*1rEcT|p`z=qSd zAL4lPE(ZOZ@E63RXFv4jR+aT$xw^5vQz;gL#FcA%C)FgPBEf9Wq;DW+kO1rIg5fmz zVJBLAPx}`b`l{gEM*Yir+x1(1F(lY7uD3T8(R4fbdn|i_qidFT`uluM`ctZ1J_+9I z1nqWezmhuI2HJPJRei2-)k_ng+dfWo#h8W8VH`Cm{snf?DLa2344(sdKMzf+Rs8`j zS0rMLdz|DdM+}ste6(B!97bmQNh;8lwx}V>o!_7b$YQPkdXH}8;5UjJk$PEZ<9RV; zif%a2Z`^Nrp1YpyHzg?{p)v5QE&J=?nRwP0oKRvbmKw{VuFt=n{uuK*cfYH~4*^#` zdc9ShtZyg=B5+@{owkEzqMC=q#A@;;3!D|ao-VA26x0ut_0-+p-eHvNB$G#xMfIT! zGR2UwzEsa$FZ=ylw32|$5KxjUIwFX2iX=c8tE@Ov#5grn6Jkf5VP!rFN=J>p0~=q5 zB|U~m?ZuGp#ELi3Y(Yq%-C6`Kg4i*fzg6MECW|5M9I|R+fka-`n|A{2)CKz9393U( zlA>fW|7psRQ7e=-7o|M`jubF_m3;`SMdXOmwnv~%k^=92S*j>*i2xJ{B0~l*xrB(>QWdC(o zYk)hd2Hg4#xS0C<^U?)oYBunCse;0%H70o!hXG08!41U&C4d?2-HCYf)>#Kh^G}+L z=fMrmuqR^3W5F7L10!y_g#DZwCN}}*@2aT{xgvr0fh3=|G&6?+(Ny4g%lN6HO298F zNb>qc=!U^ZSmr74peIX^oxVIf*yj*r(GcoP6rdK>XWVy`7weC@zwBLJ^QlN-lk7Uv zBU$chBpaw#-C~(X6NuTtUN3c^-@ec47zYm%;m?bJ%K+SnTcsD$;v}m6O@(auWVb9d z3iaa=mVOzG*3UoRz5#~@yI6tpZgtPko)ZJ(2eW)KK{Pn@IWxfh+UG$Z*yK6G08)?& za2hp?;ua$w7YyAn*glokyLZZt5lsR3d+Z7qGv2t>$Pijd1R66YfF1F9edy~MRti|R>mx_mHAwip*MEd{nyrvf2^%9=Y52! z0YwT7GYdvuE3y7jMj<>eHAM`=AAzeINaqVDxIPHJseOsrTUrJ)euNDc!M+f|+km1m zz?VAkZ-wgWzFGBn_*PwD{Ka7~Ll#=pWqogbCv|;Ce(%3$)XljM5TO$HcQ6LfO;QDd zg)Wx~Fw|EfP!d!l2C6{`a$ms&)SUa*!U;ZoNFpES^=XDLQ!rLm#qP>pUgGMP;2DBRa8CMN8gJD6-g3e_V|KLon$>cVSbh6~8RV1N>< zC^!|i4cJOHy!j{4p`CL(*gwc+tgsfpzC-zMo<-)>W#9cZh7*nZ%i6Cvy8^-YyU*Bv zfzj=kbOvHbJPM$;dL^En5vI@s%$sSRaJhy0FEqQ$1JGq}lAVQ}(Vg&n35Vn0k`%{H zM-;40u&BPMYkCQY?O$JYp%XqK?Gu}+@`JV@TCbIo5S4>!Np$uOPv%-%GJ!%Y4-?zO zMkH=%ld-u0`R`H1<8gLP%Wl_20_rvT ziZ~X4Kb!h2Nih9Yrtm9ItMv8jIhEtyvdyxYfAR}c^!9Wq{X--u@=^U-9%M!rF1U>(4iCKNrC?mr~UyE#)C?~)zsY{ zO6Ui~8_JQFs&f@z2(U7E(+)1^MOSM>#uNM+vR~a!%v#(ytmQ6H=i)d3Q+#Y}HrwllANd}k`c)!=%WM4=gPi+k2=Pj- z9K{#WD>$y@=DX#0nbLa*>!OB4Z)n|pGF}dH{x43Y>$8V8EPWFU50=hvGS?zeQK;d5 zf@6CTP<6^^mn4`l!rJ*l=`Q`sH?hdAIGkUR`KkZTJ8qrt2+P`%0QIYF61eS-Ba=EB zIs0d^%z_Xa!eP!u8SCKr^~Gd>Zkcu=1Q<_|?Ef54LV*v1xe-Yfjn>hTz|n=Uk^q^@ z>06NSoDZo0BP$@9-sc{y6-6dRPfD7yt6MvE-Pt_;zEDMB*iKzyJ6$D7@Juh{uLVk| zRx>Y|02B<+2!XSzxC{#|Bk&e1QugM~1iCGxK~)IJq9h_B6$;BFS@nJ@wczo) z<{rpkcXG=G7?xqfEMEBC&YehMVc}(im*;*^`}1v)>T_V6B^nNZgvtPi+Xqf$+wfeC zY(Ds*5sKz*$n9$syGQ~NK+dHI04UYq26Y{fQg&b$x}FOZ4-8wFytoXbV~ke)!Y(bEgjuv`@rq*@?LQ zlvG8b?1~Tj{)4K2YjDlS__c?y&o~K=YQPS)n1Vq!Sz;PvtNVXkl=jo9n~}!<5HFM} zge`CTiW;TY0KA;Z?0bx2+hi&VJnmsWO^P!LVF#;cFoIW<%C^DK7U35>U(^-0jTg!$ z0feXhx@e`m=HenpA~ov}%Fk9%Pl#QSJj+yh7OWKexU>G*!)xVK#CYERCpfT&z;k!V zt{Wjo$;B0rV%tRr`AFQ2xt(0fMPweVLQ5FtLxfH3;OtA>zi1mU_*MRo$eXcek%*24 zdu2f${iX`Cx4IqWLVyTB4@b?>y=o!2OJMVDSvNxw$;!u{0t|HI4;ZxSAlG|BN-org z44BkAV}poDpWYe2gT$|Qbdu8q8UA46RC;xl>cd3KaIQzj{Ja(PLIrmBs8zTP;00tw zgKk`t*BTlnwez*ykUPRaUJMX)QDX9gD)I+50&3wgU|iAFSBCSUN81iKk<#)ELKw-& zon9$SpaK*ho+KmI+7N3*#{j=^(EbO%4V(LVrZy$Gzy-Z3ubEs_CV-b0!oF~8OhS_} zT+j51n=fB266E!5UwD z7ZCdPa94xW7;~1cQ-0TWg;i zs2qzDmevhVp(G4^fGS@Jp9pLyGmnh}TvQ|0J>_^j&kO@t6TB6rNDgMd^R0%QbBP0G zG%Qae7m?!T`9+%uNh(p!uLqQL)TWs8AZvDCzQ^Gzv-f#c?_wAe6;r#P{d|ZFa0RU> zor@BnK1afzX%f;YcVl@mlD!E`?Jb7uD9~`Z%aI%HiTHf8j0#MXMFr!@QjNE>Y^TSB z_D~U^E|49}iM^IOd94R|Xsc4zYKdS#qNC>UvWwPR@_CWz`{Q}jzitzQIJTVwqsz~u z&^^fZo<7%f_p|hS&&h*t+ufg$@Z`aqt+udZ{F7>Etzm$~o>#^zK?DwY=WMB^$iTUM z%z1@}e#Nxl4QNg%vVO}uKzfXUQY|W4+sc`+V}_o13l=T$Pb(CFwgV#>M!rIr>@LX_ zDQBR4-n7QOt96KY;L^Y{2qM?`6U&K02ho&0X#!@A(lrpMFF=tyLoy1-x@Ww+4OtIL z53ZpYL|fyzuYL!*dm*5_oHfqv7wZW>u-_M77d^BU!czUB-o1UZ=vx;D(BlwV?8*Nl zwQ#gsGl=mg#|9F&v&B5Y#RDYB@^^`CSNL121B8W*bj2TOLuzhZvux_+7HkI9?AELl zzT#}>Uo3|=Z7F2999BB@O-yVn}|Mx(^8GEo=aj^4c{ z+$S|trqucKtvK%(Ml@JCzoKTixm{;FSZ7p>Lk&O*xaM}dCjJU7r*E3HnK4U zVs}TRbMSCe5`V$1*_HO3q!R^_ERl*a^d8bQ z%#z1+wB7!7h$KYoY93&{?JbEniNC9JDMV!6Hldla6XlXxcrscJuy{c%VnldWY#MF* z<3~p}am($UR9*ea=+?DLP(Wfu329j3E03=-sG`n*PAbBMPw)59z*JUu{y-$Wt0re( zRcO(Rqq7|eRSHV^(&{RIjZJ_~>^737FAo5^A0PX9)sfKX)*lg+K1#GxD}SP`PpP$L z+X+Y)#C+e>MWJqDJWxirYAEViTuiD~0Xb{$>b#Fs9_~0(c-bHk7L|1##7QE|DM<(n zq!Y~&EC#?bdt@NCuBovkn6~Kix%m?NBZxE;p_SGlrYD>Xmi7q4 zcLBqRrD|yOz8GQ_;-gglPBa(OavMy$NhCu%MZ~!E9vBtewoBZvv>Ph2WXbrsJL-MY zhaLMMq*;j)7?n@C$!jFmZ6~;E$ZwQPb^qOd%QY|Gm{)Cs^m6zC}DEvo%Qi$0&atAA=kTI(#3`ZEVg6h pg>@%kv6FK6sx~qIZLO=o?S->@6kyg2;D0?JP*c%*QLStq@_%MpeX0Ne literal 0 HcmV?d00001 diff --git a/img/logo-icon.png b/img/logo-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8dae70b8d359962fcf74c456a310a77ec4fd0062 GIT binary patch literal 1541 zcmV+g2KxDlP)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H11(Hcb zK~z|Ut(RGBRCN@_e`n@)0ouZ}P+Fk0QwjxJK$cPg5fFkAu@<2`2oaG*6P`pPJ{VII zU(}fJ0wN_!BG6D21|$svB9S0V%T|Rhv{8XlN=vbOr_20(n3+5G&P<0woQIkFpL4$R zo#mTz?}$7xBPyK8LQu=Z6WI%P2QU-6Kg`7XcLTz5RC5kmT~w6UW)VTci7XVSfKSzKUz@}a zi(;cDs2TlL{e&WWa;%W00k;2NWCI>mtR`Z}-Hxv0C}f;~AF5IQ@1 zsJq`10xO2Z%t-^Hg=(2Gz{`u$dFQQczS{m9xl1!xJU@+|o<2VP;uLlDEy1e}r6@41zxy6aIyVo@9{`P^^-zHn}>SRVG#87;)f~AYo2@A8**51vY z!cyH=DOmqz7Skq=qOHA~&$pdn^M={9wmJFi%hQG=`WL8m;*{Kcqfo@-UU92|sTqmP znx4e*U#hSt+lU$x&e$=-xKMH%1t_H`xqO$*XA(#p8BOM-k$m&rC0<%Ifwa^(E|%Ou zDepLZRU0*7O`n{bAMD2A>T_}V`aR~%N@m)WQ5-2QCw=^Il12|>=+H>6T&qO@m&?V~ z>vd$$NFshj6k|pYrSOOAy!J{4v9W`>T2|YyKoP+@amw=i{)FOm_HzA39rNd=lAbo4 zV?S3gDLtNX_Ba$!UfH1gT`8+&&a7k-6Jm%6*En{(oE15lXqttaY7H=n7x{?PMW$r-+vjImWM#&!*=f1x3b{*aYRQ&P;%uisVT8c z%}nG@Z8P`kS^;?UZzuQaTFIW7M5;ZGU(eRi;LmTK#=lrGH zR8>3BtQOkZog6K`2?)KtE|YK5qYk>ed#S8$q^;G-yxDd{goOBL6OWfyGk@tj_`2Xb zH8pkUWSyP8=8cD7PqDG}y#+jK?qdIet8Cq}fbeiDhmQV<?t-r+OiPMD(omY&!)GtiM0*pN5>x=DZXirXTa)<$XvD0!@p(zn+ySavYUL! z;4rprKgZG~>7=H_vA^gV$4^y;#A;7nwddd^j~WtA(V;TzDK?(VN@m}ItDHDp6;w~g zoum0z9gH|w<^Y2tG#1TI<3@Qs^$%JpxpJ44xtZ+RbCKWA{}VtS&}{+9Tl>AsBsJaV zF6AZDR^+9{wcAWgxxV6c54Mk2p^e5hR_L9iZNqeX;LFW7$z`rkP8fJRLW z6f1#Pff5T!6@=P?A*(iwCN$PStYZZQy9Jc2T36_>pmK}>gU;2TShtTy+}$L^hZ z%PmTw)F5p&SdIif&jn`g-)^rpWYzj;yjbPvj_z6mxc?n{U#mCne;pSa5Sb~+2xBG2 rs-N`H+k%N_PYNE!Z)HZ<0SRs00000NkvXXu0mjf2lm^u literal 0 HcmV?d00001 diff --git a/img/logo-twinpath.svg b/img/logo-twinpath.svg new file mode 100644 index 0000000..d0f9626 --- /dev/null +++ b/img/logo-twinpath.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + TwinpathNet + + + + + + + + + + + diff --git a/img/password.svg b/img/password.svg new file mode 100644 index 0000000..7a65989 --- /dev/null +++ b/img/password.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/user.svg b/img/user.svg new file mode 100644 index 0000000..ac6e551 --- /dev/null +++ b/img/user.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/js/config.js b/js/config.js new file mode 100644 index 0000000..c5d2981 --- /dev/null +++ b/js/config.js @@ -0,0 +1,64 @@ +const brandConfig = { + brandName: "TwinpathNet", + portalUrl: "http://welcome.dyzulk.com/login", + creditName: "dyzulk.com", + creditUrl: "https://dyzulk.com", + assets: { + logo: "img/logo-twinpath.svg", + icon_ticket: "svg/ticket.svg", + icon_user: "svg/user.svg", + icon_lock: "svg/lock.svg", + icon_scan: "svg/scan-line.svg", + icon_image: "svg/image.svg", + icon_external: "svg/external-link.svg", + icon_copy: "svg/copy.svg", + icon_logout: "svg/log-out.svg", + icon_success: "svg/check-circle.svg", + icon_error: "svg/alert-circle.svg", + icon_clock: "svg/clock.svg", + icon_upload: "svg/upload-cloud.svg", + icon_download: "svg/download-cloud.svg", + icon_wifi: "svg/wifi.svg" + } +}; + +function applyBranding() { + // Update Document Title + const currentTitle = document.title; + if (currentTitle.includes('TwinpathNet')) { + document.title = currentTitle.replace('TwinpathNet', brandConfig.brandName); + } else if (!currentTitle.includes(brandConfig.brandName)) { + document.title = `${brandConfig.brandName} > ${currentTitle}`; + } + + // Update Elements with data-brand-name + document.querySelectorAll('[data-brand-name]').forEach(el => { + el.innerText = brandConfig.brandName; + if (el.tagName === 'IMG') el.alt = brandConfig.brandName; + }); + + // Update Elements with data-brand-credit + document.querySelectorAll('[data-brand-credit]').forEach(el => { + el.innerText = brandConfig.creditName; + }); + + // Update Links with data-brand-link + document.querySelectorAll('[data-brand-link="credit"]').forEach(el => { + el.href = brandConfig.creditUrl; + }); + + // Update Assets (Images/Icons) + document.querySelectorAll('[data-asset]').forEach(el => { + const assetKey = el.getAttribute('data-asset'); + if (brandConfig.assets[assetKey]) { + el.src = brandConfig.assets[assetKey]; + } + }); +} + +// Apply branding as soon as possible +if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', applyBranding); +} else { + applyBranding(); +} diff --git a/js/html5-qrcode.min.js b/js/html5-qrcode.min.js new file mode 100644 index 0000000..18db263 --- /dev/null +++ b/js/html5-qrcode.min.js @@ -0,0 +1 @@ +var __Html5QrcodeLibrary__;(()=>{var t={449:function(t,e,r){!function(t){"use strict";function e(t){return null==t}var n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])};var i,o=function(t){function e(e){var r,n,i,o=this.constructor,s=t.call(this,e)||this;return Object.defineProperty(s,"name",{value:o.name,enumerable:!1}),r=s,n=o.prototype,(i=Object.setPrototypeOf)?i(r,n):r.__proto__=n,function(t,e){void 0===e&&(e=t.constructor);var r=Error.captureStackTrace;r&&r(t,e)}(s),s}return function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}(e,t),e}(Error);class s extends o{constructor(t=undefined){super(t),this.message=t}getKind(){return this.constructor.kind}}s.kind="Exception";class a extends s{}a.kind="ArgumentException";class c extends s{}c.kind="IllegalArgumentException";class l{constructor(t){if(this.binarizer=t,null===t)throw new c("Binarizer must be non-null.")}getWidth(){return this.binarizer.getWidth()}getHeight(){return this.binarizer.getHeight()}getBlackRow(t,e){return this.binarizer.getBlackRow(t,e)}getBlackMatrix(){return null!==this.matrix&&void 0!==this.matrix||(this.matrix=this.binarizer.getBlackMatrix()),this.matrix}isCropSupported(){return this.binarizer.getLuminanceSource().isCropSupported()}crop(t,e,r,n){const i=this.binarizer.getLuminanceSource().crop(t,e,r,n);return new l(this.binarizer.createBinarizer(i))}isRotateSupported(){return this.binarizer.getLuminanceSource().isRotateSupported()}rotateCounterClockwise(){const t=this.binarizer.getLuminanceSource().rotateCounterClockwise();return new l(this.binarizer.createBinarizer(t))}rotateCounterClockwise45(){const t=this.binarizer.getLuminanceSource().rotateCounterClockwise45();return new l(this.binarizer.createBinarizer(t))}toString(){try{return this.getBlackMatrix().toString()}catch(t){return""}}}class h extends s{static getChecksumInstance(){return new h}}h.kind="ChecksumException";class u{constructor(t){this.source=t}getLuminanceSource(){return this.source}getWidth(){return this.source.getWidth()}getHeight(){return this.source.getHeight()}}class d{static arraycopy(t,e,r,n,i){for(;i--;)r[n++]=t[e++]}static currentTimeMillis(){return Date.now()}}class f extends s{}f.kind="IndexOutOfBoundsException";class g extends f{constructor(t=undefined,e=undefined){super(e),this.index=t,this.message=e}}g.kind="ArrayIndexOutOfBoundsException";class w{static fill(t,e){for(let r=0,n=t.length;rr)throw new c("fromIndex("+e+") > toIndex("+r+")");if(e<0)throw new g(e);if(r>t)throw new g(r)}static asList(...t){return t}static create(t,e,r){return Array.from({length:t}).map((t=>Array.from({length:e}).fill(r)))}static createInt32Array(t,e,r){return Array.from({length:t}).map((t=>Int32Array.from({length:e}).fill(r)))}static equals(t,e){if(!t)return!1;if(!e)return!1;if(!t.length)return!1;if(!e.length)return!1;if(t.length!==e.length)return!1;for(let r=0,n=t.length;r>1,s=r(e,t[o]);if(s>0)n=o+1;else{if(!(s<0))return o;i=o-1}}return-n-1}static numberComparator(t,e){return t-e}}class m{static numberOfTrailingZeros(t){let e;if(0===t)return 32;let r=31;return e=t<<16,0!==e&&(r-=16,t=e),e=t<<8,0!==e&&(r-=8,t=e),e=t<<4,0!==e&&(r-=4,t=e),e=t<<2,0!==e&&(r-=2,t=e),r-(t<<1>>>31)}static numberOfLeadingZeros(t){if(0===t)return 32;let e=1;return t>>>16==0&&(e+=16,t<<=16),t>>>24==0&&(e+=8,t<<=8),t>>>28==0&&(e+=4,t<<=4),t>>>30==0&&(e+=2,t<<=2),e-=t>>>31,e}static toHexString(t){return t.toString(16)}static toBinaryString(t){return String(parseInt(String(t),2))}static bitCount(t){return t=(t=(858993459&(t-=t>>>1&1431655765))+(t>>>2&858993459))+(t>>>4)&252645135,63&(t+=t>>>8)+(t>>>16)}static truncDivision(t,e){return Math.trunc(t/e)}static parseInt(t,e=undefined){return parseInt(t,e)}}m.MIN_VALUE_32_BITS=-2147483648,m.MAX_VALUE=Number.MAX_SAFE_INTEGER;class p{constructor(t,e){void 0===t?(this.size=0,this.bits=new Int32Array(1)):(this.size=t,this.bits=null==e?p.makeArray(t):e)}getSize(){return this.size}getSizeInBytes(){return Math.floor((this.size+7)/8)}ensureCapacity(t){if(t>32*this.bits.length){const e=p.makeArray(t);d.arraycopy(this.bits,0,e,0,this.bits.length),this.bits=e}}get(t){return 0!=(this.bits[Math.floor(t/32)]&1<<(31&t))}set(t){this.bits[Math.floor(t/32)]|=1<<(31&t)}flip(t){this.bits[Math.floor(t/32)]^=1<<(31&t)}getNextSet(t){const e=this.size;if(t>=e)return e;const r=this.bits;let n=Math.floor(t/32),i=r[n];i&=~((1<<(31&t))-1);const o=r.length;for(;0===i;){if(++n===o)return e;i=r[n]}const s=32*n+m.numberOfTrailingZeros(i);return s>e?e:s}getNextUnset(t){const e=this.size;if(t>=e)return e;const r=this.bits;let n=Math.floor(t/32),i=~r[n];i&=~((1<<(31&t))-1);const o=r.length;for(;0===i;){if(++n===o)return e;i=~r[n]}const s=32*n+m.numberOfTrailingZeros(i);return s>e?e:s}setBulk(t,e){this.bits[Math.floor(t/32)]=e}setRange(t,e){if(ethis.size)throw new c;if(e===t)return;e--;const r=Math.floor(t/32),n=Math.floor(e/32),i=this.bits;for(let o=r;o<=n;o++){const s=(2<<(or?0:31&t));i[o]|=s}}clear(){const t=this.bits.length,e=this.bits;for(let r=0;rthis.size)throw new c;if(e===t)return!0;e--;const n=Math.floor(t/32),i=Math.floor(e/32),o=this.bits;for(let s=n;s<=i;s++){const a=(2<<(sn?0:31&t))&4294967295;if((o[s]&a)!==(r?a:0))return!1}return!0}appendBit(t){this.ensureCapacity(this.size+1),t&&(this.bits[Math.floor(this.size/32)]|=1<<(31&this.size)),this.size++}appendBits(t,e){if(e<0||e>32)throw new c("Num bits must be between 0 and 32");this.ensureCapacity(this.size+e);for(let r=e;r>0;r--)this.appendBit(1==(t>>r-1&1))}appendBitArray(t){const e=t.size;this.ensureCapacity(this.size+e);for(let r=0;r>1&1431655765|(1431655765&r)<<1,r=r>>2&858993459|(858993459&r)<<2,r=r>>4&252645135|(252645135&r)<<4,r=r>>8&16711935|(16711935&r)<<8,r=r>>16&65535|(65535&r)<<16,t[e-i]=r}if(this.size!==32*r){const e=32*r-this.size;let n=t[0]>>>e;for(let i=1;i>>e}t[r-1]=n}this.bits=t}static makeArray(t){return new Int32Array(Math.floor((t+31)/32))}equals(t){if(!(t instanceof p))return!1;const e=t;return this.size===e.size&&w.equals(this.bits,e.bits)}hashCode(){return 31*this.size+w.hashCode(this.bits)}toString(){let t="";for(let e=0,r=this.size;e=900)throw new E("incorect value");const e=I.VALUES_TO_ECI.get(t);if(void 0===e)throw new E("incorect value");return e}static getCharacterSetECIByName(t){const e=I.NAME_TO_ECI.get(t);if(void 0===e)throw new E("incorect value");return e}equals(t){if(!(t instanceof I))return!1;const e=t;return this.getName()===e.getName()}}I.VALUE_IDENTIFIER_TO_ECI=new Map,I.VALUES_TO_ECI=new Map,I.NAME_TO_ECI=new Map,I.Cp437=new I(A.Cp437,Int32Array.from([0,2]),"Cp437"),I.ISO8859_1=new I(A.ISO8859_1,Int32Array.from([1,3]),"ISO-8859-1","ISO88591","ISO8859_1"),I.ISO8859_2=new I(A.ISO8859_2,4,"ISO-8859-2","ISO88592","ISO8859_2"),I.ISO8859_3=new I(A.ISO8859_3,5,"ISO-8859-3","ISO88593","ISO8859_3"),I.ISO8859_4=new I(A.ISO8859_4,6,"ISO-8859-4","ISO88594","ISO8859_4"),I.ISO8859_5=new I(A.ISO8859_5,7,"ISO-8859-5","ISO88595","ISO8859_5"),I.ISO8859_6=new I(A.ISO8859_6,8,"ISO-8859-6","ISO88596","ISO8859_6"),I.ISO8859_7=new I(A.ISO8859_7,9,"ISO-8859-7","ISO88597","ISO8859_7"),I.ISO8859_8=new I(A.ISO8859_8,10,"ISO-8859-8","ISO88598","ISO8859_8"),I.ISO8859_9=new I(A.ISO8859_9,11,"ISO-8859-9","ISO88599","ISO8859_9"),I.ISO8859_10=new I(A.ISO8859_10,12,"ISO-8859-10","ISO885910","ISO8859_10"),I.ISO8859_11=new I(A.ISO8859_11,13,"ISO-8859-11","ISO885911","ISO8859_11"),I.ISO8859_13=new I(A.ISO8859_13,15,"ISO-8859-13","ISO885913","ISO8859_13"),I.ISO8859_14=new I(A.ISO8859_14,16,"ISO-8859-14","ISO885914","ISO8859_14"),I.ISO8859_15=new I(A.ISO8859_15,17,"ISO-8859-15","ISO885915","ISO8859_15"),I.ISO8859_16=new I(A.ISO8859_16,18,"ISO-8859-16","ISO885916","ISO8859_16"),I.SJIS=new I(A.SJIS,20,"SJIS","Shift_JIS"),I.Cp1250=new I(A.Cp1250,21,"Cp1250","windows-1250"),I.Cp1251=new I(A.Cp1251,22,"Cp1251","windows-1251"),I.Cp1252=new I(A.Cp1252,23,"Cp1252","windows-1252"),I.Cp1256=new I(A.Cp1256,24,"Cp1256","windows-1256"),I.UnicodeBigUnmarked=new I(A.UnicodeBigUnmarked,25,"UnicodeBigUnmarked","UTF-16BE","UnicodeBig"),I.UTF8=new I(A.UTF8,26,"UTF8","UTF-8"),I.ASCII=new I(A.ASCII,Int32Array.from([27,170]),"ASCII","US-ASCII"),I.Big5=new I(A.Big5,28,"Big5"),I.GB18030=new I(A.GB18030,29,"GB18030","GB2312","EUC_CN","GBK"),I.EUC_KR=new I(A.EUC_KR,30,"EUC_KR","EUC-KR");class S extends s{}S.kind="UnsupportedOperationException";class _{static decode(t,e){const r=this.encodingName(e);return this.customDecoder?this.customDecoder(t,r):"undefined"==typeof TextDecoder||this.shouldDecodeOnFallback(r)?this.decodeFallback(t,r):new TextDecoder(r).decode(t)}static shouldDecodeOnFallback(t){return!_.isBrowser()&&"ISO-8859-1"===t}static encode(t,e){const r=this.encodingName(e);return this.customEncoder?this.customEncoder(t,r):"undefined"==typeof TextEncoder?this.encodeFallback(t):(new TextEncoder).encode(t)}static isBrowser(){return"undefined"!=typeof window&&"[object Window]"==={}.toString.call(window)}static encodingName(t){return"string"==typeof t?t:t.getName()}static encodingCharacterSet(t){return t instanceof I?t:I.getCharacterSetECIByName(t)}static decodeFallback(t,e){const r=this.encodingCharacterSet(e);if(_.isDecodeFallbackSupported(r)){let e="";for(let r=0,n=t.length;r3&&239===t[0]&&187===t[1]&&191===t[2];for(let e=0;e0?0==(128&r)?o=!1:s--:0!=(128&r)&&(0==(64&r)?o=!1:(s++,0==(32&r)?a++:(s++,0==(16&r)?c++:(s++,0==(8&r)?l++:o=!1))))),n&&(r>127&&r<160?n=!1:r>159&&(r<192||215===r||247===r)&&m++),i&&(h>0?r<64||127===r||r>252?i=!1:h--:128===r||160===r||r>239?i=!1:r>160&&r<224?(u++,f=0,d++,d>g&&(g=d)):r>127?(h++,d=0,f++,f>w&&(w=f)):(d=0,f=0))}return o&&s>0&&(o=!1),i&&h>0&&(i=!1),o&&(p||a+c+l>0)?T.UTF8:i&&(T.ASSUME_SHIFT_JIS||g>=3||w>=3)?T.SHIFT_JIS:n&&i?2===g&&2===u||10*m>=r?T.SHIFT_JIS:T.ISO88591:n?T.ISO88591:i?T.SHIFT_JIS:o?T.UTF8:T.PLATFORM_DEFAULT_ENCODING}static format(t,...e){let r=-1;return t.replace(/%(-)?(0?[0-9]+)?([.][0-9]+)?([#][0-9]+)?([scfpexd%])/g,(function(t,n,i,o,s,a){if("%%"===t)return"%";if(void 0===e[++r])return;t=o?parseInt(o.substr(1)):void 0;let c,l=s?parseInt(s.substr(1)):void 0;switch(a){case"s":c=e[r];break;case"c":c=e[r][0];break;case"f":c=parseFloat(e[r]).toFixed(t);break;case"p":c=parseFloat(e[r]).toPrecision(t);break;case"e":c=parseFloat(e[r]).toExponential(t);break;case"x":c=parseInt(e[r]).toString(l||16);break;case"d":c=parseFloat(parseInt(e[r],l||10).toPrecision(t)).toFixed(0)}c="object"==typeof c?JSON.stringify(c):(+c).toString(l);let h=parseInt(i),u=i&&i[0]+""=="0"?"0":" ";for(;c.lengtho){if(-1===s)s=i-o;else if(i-o!==s)throw new c("row lengths do not match");o=i,a++}l++}else if(t.substring(l,l+e.length)===e)l+=e.length,n[i]=!0,i++;else{if(t.substring(l,l+r.length)!==r)throw new c("illegal character encountered: "+t.substring(l));l+=r.length,n[i]=!1,i++}if(i>o){if(-1===s)s=i-o;else if(i-o!==s)throw new c("row lengths do not match");a++}const h=new N(s,a);for(let t=0;t>>(31&t)&1)}set(t,e){const r=e*this.rowSize+Math.floor(t/32);this.bits[r]|=1<<(31&t)&4294967295}unset(t,e){const r=e*this.rowSize+Math.floor(t/32);this.bits[r]&=~(1<<(31&t)&4294967295)}flip(t,e){const r=e*this.rowSize+Math.floor(t/32);this.bits[r]^=1<<(31&t)&4294967295}xor(t){if(this.width!==t.getWidth()||this.height!==t.getHeight()||this.rowSize!==t.getRowSize())throw new c("input matrix dimensions do not match");const e=new p(Math.floor(this.width/32)+1),r=this.rowSize,n=this.bits;for(let i=0,o=this.height;ithis.height||i>this.width)throw new c("The region must fit inside the matrix");const s=this.rowSize,a=this.bits;for(let r=e;ra&&(a=t),32*es){let t=31;for(;c>>>t==0;)t--;32*e+t>s&&(s=32*e+t)}}}return s=0&&0===e[r];)r--;if(r<0)return null;const n=Math.floor(r/t);let i=32*Math.floor(r%t);const o=e[r];let s=31;for(;o>>>s==0;)s--;return i+=s,Int32Array.from([i,n])}getWidth(){return this.width}getHeight(){return this.height}getRowSize(){return this.rowSize}equals(t){if(!(t instanceof N))return!1;const e=t;return this.width===e.width&&this.height===e.height&&this.rowSize===e.rowSize&&w.equals(this.bits,e.bits)}hashCode(){let t=this.width;return t=31*t+this.width,t=31*t+this.height,t=31*t+this.rowSize,t=31*t+w.hashCode(this.bits),t}toString(t="X ",e=" ",r="\n"){return this.buildToString(t,e,r)}buildToString(t,e,r){let n=new y;for(let i=0,o=this.height;i>M.LUMINANCE_SHIFT]++;const s=M.estimateBlackPoint(o);if(n<3)for(let t=0;t>M.LUMINANCE_SHIFT]++}const o=M.estimateBlackPoint(i),s=t.getMatrix();for(let t=0;ti&&(n=o,i=t[o]),t[o]>r&&(r=t[o]);let o=0,s=0;for(let r=0;rs&&(o=r,s=i)}if(n>o){const t=n;n=o,o=t}if(o-n<=e/16)throw new D;let a=o-1,c=-1;for(let e=o-1;e>n;e--){const i=e-n,s=i*i*(o-e)*(r-t[e]);s>c&&(a=e,c=s)}return a<=R.MINIMUM_DIMENSION&&r>=R.MINIMUM_DIMENSION){const n=t.getMatrix();let i=e>>R.BLOCK_SIZE_POWER;0!=(e&R.BLOCK_SIZE_MASK)&&i++;let o=r>>R.BLOCK_SIZE_POWER;0!=(r&R.BLOCK_SIZE_MASK)&&o++;const s=R.calculateBlackPoints(n,i,o,e,r),a=new N(e,r);R.calculateThresholdForBlock(n,i,o,e,r,s,a),this.matrix=a}else this.matrix=super.getBlackMatrix();return this.matrix}createBinarizer(t){return new R(t)}static calculateThresholdForBlock(t,e,r,n,i,o,s){const a=i-R.BLOCK_SIZE,c=n-R.BLOCK_SIZE;for(let i=0;ia&&(l=a);const h=R.cap(i,2,r-3);for(let r=0;rc&&(i=c);const a=R.cap(r,2,e-3);let u=0;for(let t=-2;t<=2;t++){const e=o[h+t];u+=e[a-2]+e[a-1]+e[a]+e[a+1]+e[a+2]}const d=u/25;R.thresholdBlock(t,i,l,d,n,s)}}}static cap(t,e,r){return tr?r:t}static thresholdBlock(t,e,r,n,i,o){for(let s=0,a=r*i+e;so&&(r=o);for(let o=0;os&&(e=s);let c=0,l=255,h=0;for(let i=0,o=r*n+e;ih&&(h=r)}if(h-l>R.MIN_DYNAMIC_RANGE)for(i++,o+=n;i>2*R.BLOCK_SIZE_POWER;if(h-l<=R.MIN_DYNAMIC_RANGE&&(u=l/2,i>0&&o>0)){const t=(a[i-1][o]+2*a[i][o-1]+a[i-1][o-1])/4;l>10,n[r]=i}return n}getRow(t,e){if(t<0||t>=this.getHeight())throw new c("Requested row is outside the image: "+t);const r=this.getWidth(),n=t*r;return null===e?e=this.buffer.slice(n,n+r):(e.lengthnew L(t.deviceId,t.label)))}))}findDeviceById(t){return v(this,void 0,void 0,(function*(){const e=yield this.listVideoInputDevices();return e?e.find((e=>e.deviceId===t)):null}))}decodeFromInputVideoDevice(t,e){return v(this,void 0,void 0,(function*(){return yield this.decodeOnceFromVideoDevice(t,e)}))}decodeOnceFromVideoDevice(t,e){return v(this,void 0,void 0,(function*(){let r;this.reset(),r=t?{deviceId:{exact:t}}:{facingMode:"environment"};const n={video:r};return yield this.decodeOnceFromConstraints(n,e)}))}decodeOnceFromConstraints(t,e){return v(this,void 0,void 0,(function*(){const r=yield navigator.mediaDevices.getUserMedia(t);return yield this.decodeOnceFromStream(r,e)}))}decodeOnceFromStream(t,e){return v(this,void 0,void 0,(function*(){this.reset();const r=yield this.attachStreamToVideo(t,e);return yield this.decodeOnce(r)}))}decodeFromInputVideoDeviceContinuously(t,e,r){return v(this,void 0,void 0,(function*(){return yield this.decodeFromVideoDevice(t,e,r)}))}decodeFromVideoDevice(t,e,r){return v(this,void 0,void 0,(function*(){let n;n=t?{deviceId:{exact:t}}:{facingMode:"environment"};const i={video:n};return yield this.decodeFromConstraints(i,e,r)}))}decodeFromConstraints(t,e,r){return v(this,void 0,void 0,(function*(){const n=yield navigator.mediaDevices.getUserMedia(t);return yield this.decodeFromStream(n,e,r)}))}decodeFromStream(t,e,r){return v(this,void 0,void 0,(function*(){this.reset();const n=yield this.attachStreamToVideo(t,e);return yield this.decodeContinuously(n,r)}))}stopAsyncDecode(){this._stopAsyncDecode=!0}stopContinuousDecode(){this._stopContinuousDecode=!0}attachStreamToVideo(t,e){return v(this,void 0,void 0,(function*(){const r=this.prepareVideoElement(e);return this.addVideoSource(r,t),this.videoElement=r,this.stream=t,yield this.playVideoOnLoadAsync(r),r}))}playVideoOnLoadAsync(t){return new Promise(((e,r)=>this.playVideoOnLoad(t,(()=>e()))))}playVideoOnLoad(t,e){this.videoEndedListener=()=>this.stopStreams(),this.videoCanPlayListener=()=>this.tryPlayVideo(t),t.addEventListener("ended",this.videoEndedListener),t.addEventListener("canplay",this.videoCanPlayListener),t.addEventListener("playing",e),this.tryPlayVideo(t)}isVideoPlaying(t){return t.currentTime>0&&!t.paused&&!t.ended&&t.readyState>2}tryPlayVideo(t){return v(this,void 0,void 0,(function*(){if(this.isVideoPlaying(t))console.warn("Trying to play video that is already playing.");else try{yield t.play()}catch(t){console.warn("It was not possible to play the video.")}}))}getMediaElement(t,e){const r=document.getElementById(t);if(!r)throw new a(`element with id '${t}' not found`);if(r.nodeName.toLowerCase()!==e.toLowerCase())throw new a(`element with id '${t}' must be an ${e} element`);return r}decodeFromImage(t,e){if(!t&&!e)throw new a("either imageElement with a src set or an url must be provided");return e&&!t?this.decodeFromImageUrl(e):this.decodeFromImageElement(t)}decodeFromVideo(t,e){if(!t&&!e)throw new a("Either an element with a src set or an URL must be provided");return e&&!t?this.decodeFromVideoUrl(e):this.decodeFromVideoElement(t)}decodeFromVideoContinuously(t,e,r){if(void 0===t&&void 0===e)throw new a("Either an element with a src set or an URL must be provided");return e&&!t?this.decodeFromVideoUrlContinuously(e,r):this.decodeFromVideoElementContinuously(t,r)}decodeFromImageElement(t){if(!t)throw new a("An image element must be provided.");this.reset();const e=this.prepareImageElement(t);let r;return this.imageElement=e,r=this.isImageLoaded(e)?this.decodeOnce(e,!1,!0):this._decodeOnLoadImage(e),r}decodeFromVideoElement(t){const e=this._decodeFromVideoElementSetup(t);return this._decodeOnLoadVideo(e)}decodeFromVideoElementContinuously(t,e){const r=this._decodeFromVideoElementSetup(t);return this._decodeOnLoadVideoContinuously(r,e)}_decodeFromVideoElementSetup(t){if(!t)throw new a("A video element must be provided.");this.reset();const e=this.prepareVideoElement(t);return this.videoElement=e,e}decodeFromImageUrl(t){if(!t)throw new a("An URL must be provided.");this.reset();const e=this.prepareImageElement();this.imageElement=e;const r=this._decodeOnLoadImage(e);return e.src=t,r}decodeFromVideoUrl(t){if(!t)throw new a("An URL must be provided.");this.reset();const e=this.prepareVideoElement(),r=this.decodeFromVideoElement(e);return e.src=t,r}decodeFromVideoUrlContinuously(t,e){if(!t)throw new a("An URL must be provided.");this.reset();const r=this.prepareVideoElement(),n=this.decodeFromVideoElementContinuously(r,e);return r.src=t,n}_decodeOnLoadImage(t){return new Promise(((e,r)=>{this.imageLoadedListener=()=>this.decodeOnce(t,!1,!0).then(e,r),t.addEventListener("load",this.imageLoadedListener)}))}_decodeOnLoadVideo(t){return v(this,void 0,void 0,(function*(){return yield this.playVideoOnLoadAsync(t),yield this.decodeOnce(t)}))}_decodeOnLoadVideoContinuously(t,e){return v(this,void 0,void 0,(function*(){yield this.playVideoOnLoadAsync(t),this.decodeContinuously(t,e)}))}isImageLoaded(t){return!!t.complete&&0!==t.naturalWidth}prepareImageElement(t){let e;return void 0===t&&(e=document.createElement("img"),e.width=200,e.height=200),"string"==typeof t&&(e=this.getMediaElement(t,"img")),t instanceof HTMLImageElement&&(e=t),e}prepareVideoElement(t){let e;return t||"undefined"==typeof document||(e=document.createElement("video"),e.width=200,e.height=200),"string"==typeof t&&(e=this.getMediaElement(t,"video")),t instanceof HTMLVideoElement&&(e=t),e.setAttribute("autoplay","true"),e.setAttribute("muted","true"),e.setAttribute("playsinline","true"),e}decodeOnce(t,e=!0,r=!0){this._stopAsyncDecode=!1;const n=(i,o)=>{if(this._stopAsyncDecode)return o(new D("Video stream has ended before any code could be detected.")),void(this._stopAsyncDecode=void 0);try{i(this.decode(t))}catch(t){if(e&&t instanceof D||(t instanceof h||t instanceof E)&&r)return setTimeout(n,this._timeBetweenDecodingAttempts,i,o);o(t)}};return new Promise(((t,e)=>n(t,e)))}decodeContinuously(t,e){this._stopContinuousDecode=!1;const r=()=>{if(this._stopContinuousDecode)this._stopContinuousDecode=void 0;else try{const n=this.decode(t);e(n,null),setTimeout(r,this.timeBetweenScansMillis)}catch(t){e(null,t),(t instanceof h||t instanceof E||t instanceof D)&&setTimeout(r,this._timeBetweenDecodingAttempts)}};r()}decode(t){const e=this.createBinaryBitmap(t);return this.decodeBitmap(e)}_isHTMLVideoElement(t){return 0!==t.videoWidth}drawFrameOnCanvas(t,e,r){e||(e={sx:0,sy:0,sWidth:t.videoWidth,sHeight:t.videoHeight,dx:0,dy:0,dWidth:t.videoWidth,dHeight:t.videoHeight}),r||(r=this.captureCanvasContext),r.drawImage(t,e.sx,e.sy,e.sWidth,e.sHeight,e.dx,e.dy,e.dWidth,e.dHeight)}drawImageOnCanvas(t,e,r=this.captureCanvasContext){e||(e={sx:0,sy:0,sWidth:t.naturalWidth,sHeight:t.naturalHeight,dx:0,dy:0,dWidth:t.naturalWidth,dHeight:t.naturalHeight}),r||(r=this.captureCanvasContext),r.drawImage(t,e.sx,e.sy,e.sWidth,e.sHeight,e.dx,e.dy,e.dWidth,e.dHeight)}createBinaryBitmap(t){this.getCaptureCanvasContext(t),this._isHTMLVideoElement(t)?this.drawFrameOnCanvas(t):this.drawImageOnCanvas(t);const e=this.getCaptureCanvas(t),r=new B(e),n=new R(r);return new l(n)}getCaptureCanvasContext(t){if(!this.captureCanvasContext){const e=this.getCaptureCanvas(t).getContext("2d");this.captureCanvasContext=e}return this.captureCanvasContext}getCaptureCanvas(t){if(!this.captureCanvas){const e=this.createCaptureCanvas(t);this.captureCanvas=e}return this.captureCanvas}decodeBitmap(t){return this.reader.decode(t,this._hints)}createCaptureCanvas(t){if("undefined"==typeof document)return this._destroyCaptureCanvas(),null;const e=document.createElement("canvas");let r,n;return void 0!==t&&(t instanceof HTMLVideoElement?(r=t.videoWidth,n=t.videoHeight):t instanceof HTMLImageElement&&(r=t.naturalWidth||t.width,n=t.naturalHeight||t.height)),e.style.width=r+"px",e.style.height=n+"px",e.width=r,e.height=n,e}stopStreams(){this.stream&&(this.stream.getVideoTracks().forEach((t=>t.stop())),this.stream=void 0),!1===this._stopAsyncDecode&&this.stopAsyncDecode(),!1===this._stopContinuousDecode&&this.stopContinuousDecode()}reset(){this.stopStreams(),this._destroyVideoElement(),this._destroyImageElement(),this._destroyCaptureCanvas()}_destroyVideoElement(){this.videoElement&&(void 0!==this.videoEndedListener&&this.videoElement.removeEventListener("ended",this.videoEndedListener),void 0!==this.videoPlayingEventListener&&this.videoElement.removeEventListener("playing",this.videoPlayingEventListener),void 0!==this.videoCanPlayListener&&this.videoElement.removeEventListener("loadedmetadata",this.videoCanPlayListener),this.cleanVideoSource(this.videoElement),this.videoElement=void 0)}_destroyImageElement(){this.imageElement&&(void 0!==this.imageLoadedListener&&this.imageElement.removeEventListener("load",this.imageLoadedListener),this.imageElement.src=void 0,this.imageElement.removeAttribute("src"),this.imageElement=void 0)}_destroyCaptureCanvas(){this.captureCanvasContext=void 0,this.captureCanvas=void 0}addVideoSource(t,e){try{t.srcObject=e}catch(r){t.src=URL.createObjectURL(e)}}cleanVideoSource(t){try{t.srcObject=null}catch(e){t.src=""}this.videoElement.removeAttribute("src")}}class x{constructor(t,e,r=(null==e?0:8*e.length),n,i,o=d.currentTimeMillis()){this.text=t,this.rawBytes=e,this.numBits=r,this.resultPoints=n,this.format=i,this.timestamp=o,this.text=t,this.rawBytes=e,this.numBits=null==r?null==e?0:8*e.length:r,this.resultPoints=n,this.format=i,this.resultMetadata=null,this.timestamp=null==o?d.currentTimeMillis():o}getText(){return this.text}getRawBytes(){return this.rawBytes}getNumBits(){return this.numBits}getResultPoints(){return this.resultPoints}getBarcodeFormat(){return this.format}getResultMetadata(){return this.resultMetadata}putMetadata(t,e){null===this.resultMetadata&&(this.resultMetadata=new Map),this.resultMetadata.set(t,e)}putAllMetadata(t){null!==t&&(null===this.resultMetadata?this.resultMetadata=t:this.resultMetadata=new Map(t))}addResultPoints(t){const e=this.resultPoints;if(null===e)this.resultPoints=t;else if(null!==t&&t.length>0){const r=new Array(e.length+t.length);d.arraycopy(e,0,r,0,e.length),d.arraycopy(t,0,r,e.length,t.length),this.resultPoints=r}}getTimestamp(){return this.timestamp}toString(){return this.text}}!function(t){t[t.AZTEC=0]="AZTEC",t[t.CODABAR=1]="CODABAR",t[t.CODE_39=2]="CODE_39",t[t.CODE_93=3]="CODE_93",t[t.CODE_128=4]="CODE_128",t[t.DATA_MATRIX=5]="DATA_MATRIX",t[t.EAN_8=6]="EAN_8",t[t.EAN_13=7]="EAN_13",t[t.ITF=8]="ITF",t[t.MAXICODE=9]="MAXICODE",t[t.PDF_417=10]="PDF_417",t[t.QR_CODE=11]="QR_CODE",t[t.RSS_14=12]="RSS_14",t[t.RSS_EXPANDED=13]="RSS_EXPANDED",t[t.UPC_A=14]="UPC_A",t[t.UPC_E=15]="UPC_E",t[t.UPC_EAN_EXTENSION=16]="UPC_EAN_EXTENSION"}(P||(P={}));var k,U=P;!function(t){t[t.OTHER=0]="OTHER",t[t.ORIENTATION=1]="ORIENTATION",t[t.BYTE_SEGMENTS=2]="BYTE_SEGMENTS",t[t.ERROR_CORRECTION_LEVEL=3]="ERROR_CORRECTION_LEVEL",t[t.ISSUE_NUMBER=4]="ISSUE_NUMBER",t[t.SUGGESTED_PRICE=5]="SUGGESTED_PRICE",t[t.POSSIBLE_COUNTRY=6]="POSSIBLE_COUNTRY",t[t.UPC_EAN_EXTENSION=7]="UPC_EAN_EXTENSION",t[t.PDF417_EXTRA_METADATA=8]="PDF417_EXTRA_METADATA",t[t.STRUCTURED_APPEND_SEQUENCE=9]="STRUCTURED_APPEND_SEQUENCE",t[t.STRUCTURED_APPEND_PARITY=10]="STRUCTURED_APPEND_PARITY"}(k||(k={}));var H,V,z,G,Y,X,W=k;class j{constructor(t,e,r,n,i=-1,o=-1){this.rawBytes=t,this.text=e,this.byteSegments=r,this.ecLevel=n,this.structuredAppendSequenceNumber=i,this.structuredAppendParity=o,this.numBits=null==t?0:8*t.length}getRawBytes(){return this.rawBytes}getNumBits(){return this.numBits}setNumBits(t){this.numBits=t}getText(){return this.text}getByteSegments(){return this.byteSegments}getECLevel(){return this.ecLevel}getErrorsCorrected(){return this.errorsCorrected}setErrorsCorrected(t){this.errorsCorrected=t}getErasures(){return this.erasures}setErasures(t){this.erasures=t}getOther(){return this.other}setOther(t){this.other=t}hasStructuredAppend(){return this.structuredAppendParity>=0&&this.structuredAppendSequenceNumber>=0}getStructuredAppendParity(){return this.structuredAppendParity}getStructuredAppendSequenceNumber(){return this.structuredAppendSequenceNumber}}class Z{exp(t){return this.expTable[t]}log(t){if(0===t)throw new c;return this.logTable[t]}static addOrSubtract(t,e){return t^e}}class Q{constructor(t,e){if(0===e.length)throw new c;this.field=t;const r=e.length;if(r>1&&0===e[0]){let t=1;for(;tr.length){const t=e;e=r,r=t}let n=new Int32Array(r.length);const i=r.length-e.length;d.arraycopy(r,0,n,0,i);for(let t=i;t=t.getDegree()&&!n.isZero();){const i=n.getDegree()-t.getDegree(),s=e.multiply(n.getCoefficient(n.getDegree()),o),a=t.multiplyByMonomial(i,s),c=e.buildMonomial(i,s);r=r.addOrSubtract(c),n=n.addOrSubtract(a)}return[r,n]}toString(){let t="";for(let e=this.getDegree();e>=0;e--){let r=this.getCoefficient(e);if(0!==r){if(r<0?(t+=" - ",r=-r):t.length>0&&(t+=" + "),0===e||1!==r){const e=this.field.log(r);0===e?t+="1":1===e?t+="a":(t+="a^",t+=e)}0!==e&&(1===e?t+="x":(t+="x^",t+=e))}}return t}}class K extends s{}K.kind="ArithmeticException";class q extends Z{constructor(t,e,r){super(),this.primitive=t,this.size=e,this.generatorBase=r;const n=new Int32Array(e);let i=1;for(let r=0;r=e&&(i^=t,i&=e-1);this.expTable=n;const o=new Int32Array(e);for(let t=0;t=(r/2|0);){let t=i,e=s;if(i=o,s=a,i.isZero())throw new J("r_{i-1} was zero");o=t;let r=n.getZero();const c=i.getCoefficient(i.getDegree()),l=n.inverse(c);for(;o.getDegree()>=i.getDegree()&&!o.isZero();){const t=o.getDegree()-i.getDegree(),e=n.multiply(o.getCoefficient(o.getDegree()),l);r=r.addOrSubtract(n.buildMonomial(t,e)),o=o.addOrSubtract(i.multiplyByMonomial(t,e))}if(a=r.multiply(s).addOrSubtract(e),o.getDegree()>=i.getDegree())throw new $("Division algorithm failed to reduce polynomial?")}const c=a.getCoefficient(0);if(0===c)throw new J("sigmaTilde(0) was zero");const l=n.inverse(c);return[a.multiplyScalar(l),o.multiplyScalar(l)]}findErrorLocations(t){const e=t.getDegree();if(1===e)return Int32Array.from([t.getCoefficient(1)]);const r=new Int32Array(e);let n=0;const i=this.field;for(let o=1;o1,h,h+r-1),h+=r-1;else for(let t=r-1;t>=0;--t)l[h++]=0!=(e&1<=8?et.readCode(t,e,8):et.readCode(t,e,r)<<8-r}static convertBoolArrayToByteArray(t){let e=new Uint8Array((t.length+7)/8);for(let r=0;r","?","[","]","{","}","CTRL_UL"],et.DIGIT_TABLE=["CTRL_PS"," ","0","1","2","3","4","5","6","7","8","9",",",".","CTRL_UL","CTRL_US"];class rt{constructor(){}static round(t){return NaN===t?0:t<=Number.MIN_SAFE_INTEGER?Number.MIN_SAFE_INTEGER:t>=Number.MAX_SAFE_INTEGER?Number.MAX_SAFE_INTEGER:t+(t<0?-.5:.5)|0}static distance(t,e,r,n){const i=t-r,o=e-n;return Math.sqrt(i*i+o*o)}static sum(t){let e=0;for(let r=0,n=t.length;r!==n;r++)e+=t[r];return e}}class nt{static floatToIntBits(t){return t}}nt.MAX_VALUE=Number.MAX_SAFE_INTEGER;class it{constructor(t,e){this.x=t,this.y=e}getX(){return this.x}getY(){return this.y}equals(t){if(t instanceof it){const e=t;return this.x===e.x&&this.y===e.y}return!1}hashCode(){return 31*nt.floatToIntBits(this.x)+nt.floatToIntBits(this.y)}toString(){return"("+this.x+","+this.y+")"}static orderBestPatterns(t){const e=this.distance(t[0],t[1]),r=this.distance(t[1],t[2]),n=this.distance(t[0],t[2]);let i,o,s;if(r>=e&&r>=n?(o=t[0],i=t[1],s=t[2]):n>=r&&n>=e?(o=t[1],i=t[0],s=t[2]):(o=t[2],i=t[0],s=t[1]),this.crossProductZ(i,o,s)<0){const t=i;i=s,s=t}t[0]=i,t[1]=o,t[2]=s}static distance(t,e){return rt.distance(t.x,t.y,e.x,e.y)}static crossProductZ(t,e,r){const n=e.x,i=e.y;return(r.x-n)*(t.y-i)-(r.y-i)*(t.x-n)}}class ot{constructor(t,e){this.bits=t,this.points=e}getBits(){return this.bits}getPoints(){return this.points}}class st extends ot{constructor(t,e,r,n,i){super(t,e),this.compact=r,this.nbDatablocks=n,this.nbLayers=i}getNbLayers(){return this.nbLayers}getNbDatablocks(){return this.nbDatablocks}isCompact(){return this.compact}}class at{constructor(t,e,r,n){this.image=t,this.height=t.getHeight(),this.width=t.getWidth(),null==e&&(e=at.INIT_SIZE),null==r&&(r=t.getWidth()/2|0),null==n&&(n=t.getHeight()/2|0);const i=e/2|0;if(this.leftInit=r-i,this.rightInit=r+i,this.upInit=n-i,this.downInit=n+i,this.upInit<0||this.leftInit<0||this.downInit>=this.height||this.rightInit>=this.width)throw new D}detect(){let t=this.leftInit,e=this.rightInit,r=this.upInit,n=this.downInit,i=!1,o=!0,s=!1,a=!1,c=!1,l=!1,h=!1;const u=this.width,d=this.height;for(;o;){o=!1;let f=!0;for(;(f||!a)&&e=u){i=!0;break}let g=!0;for(;(g||!c)&&n=d){i=!0;break}let w=!0;for(;(w||!l)&&t>=0;)w=this.containsBlackPoint(r,n,t,!1),w?(t--,o=!0,l=!0):l||t--;if(t<0){i=!0;break}let m=!0;for(;(m||!h)&&r>=0;)m=this.containsBlackPoint(t,e,r,!0),m?(r--,o=!0,h=!0):h||r--;if(r<0){i=!0;break}o&&(s=!0)}if(!i&&s){const i=e-t;let o=null;for(let e=1;null===o&&er||s<-1||s>n)throw new D;i=!1,-1===o?(e[t]=0,i=!0):o===r&&(e[t]=r-1,i=!0),-1===s?(e[t+1]=0,i=!0):s===n&&(e[t+1]=n-1,i=!0)}i=!0;for(let t=e.length-2;t>=0&&i;t-=2){const o=Math.floor(e[t]),s=Math.floor(e[t+1]);if(o<-1||o>r||s<-1||s>n)throw new D;i=!1,-1===o?(e[t]=0,i=!0):o===r&&(e[t]=r-1,i=!0),-1===s?(e[t+1]=0,i=!0):s===n&&(e[t+1]=n-1,i=!0)}}}class lt{constructor(t,e,r,n,i,o,s,a,c){this.a11=t,this.a21=e,this.a31=r,this.a12=n,this.a22=i,this.a32=o,this.a13=s,this.a23=a,this.a33=c}static quadrilateralToQuadrilateral(t,e,r,n,i,o,s,a,c,l,h,u,d,f,g,w){const m=lt.quadrilateralToSquare(t,e,r,n,i,o,s,a);return lt.squareToQuadrilateral(c,l,h,u,d,f,g,w).times(m)}transformPoints(t){const e=t.length,r=this.a11,n=this.a12,i=this.a13,o=this.a21,s=this.a22,a=this.a23,c=this.a31,l=this.a32,h=this.a33;for(let u=0;u>1&127):(n<<=10,n+=(e>>2&992)+(e>>1&31))}let i=this.getCorrectedParameterData(n,this.compact);this.compact?(this.nbLayers=1+(i>>6),this.nbDataBlocks=1+(63&i)):(this.nbLayers=1+(i>>11),this.nbDataBlocks=1+(2047&i))}getRotation(t,e){let r=0;t.forEach(((t,n,i)=>{r=(t>>e-2<<1)+(1&t)+(r<<3)})),r=((1&r)<<11)+(r>>1);for(let t=0;t<4;t++)if(m.bitCount(r^this.EXPECTED_CORNER_BITS[t])<=2)return t;throw new D}getCorrectedParameterData(t,e){let r,n;e?(r=7,n=2):(r=10,n=4);let i=r-n,o=new Int32Array(r);for(let e=r-1;e>=0;--e)o[e]=15&t,t>>=4;try{new tt(q.AZTEC_PARAM).decode(o,i)}catch(t){throw new D}let s=0;for(let t=0;t2){let r=this.distancePoint(c,t)*this.nbCenterLayers/(this.distancePoint(i,e)*(this.nbCenterLayers+2));if(r<.75||r>1.25||!this.isWhiteOrBlackRectangle(t,s,a,c))break}e=t,r=s,n=a,i=c,o=!o}if(5!==this.nbCenterLayers&&7!==this.nbCenterLayers)throw new D;this.compact=5===this.nbCenterLayers;let s=new it(e.getX()+.5,e.getY()-.5),a=new it(r.getX()+.5,r.getY()+.5),c=new it(n.getX()-.5,n.getY()+.5),l=new it(i.getX()-.5,i.getY()-.5);return this.expandSquare([s,a,c,l],2*this.nbCenterLayers-3,2*this.nbCenterLayers)}getMatrixCenter(){let t,e,r,n;try{let i=new at(this.image).detect();t=i[0],e=i[1],r=i[2],n=i[3]}catch(i){let o=this.image.getWidth()/2,s=this.image.getHeight()/2;t=this.getFirstDifferent(new dt(o+7,s-7),!1,1,-1).toResultPoint(),e=this.getFirstDifferent(new dt(o+7,s+7),!1,1,1).toResultPoint(),r=this.getFirstDifferent(new dt(o-7,s+7),!1,-1,1).toResultPoint(),n=this.getFirstDifferent(new dt(o-7,s-7),!1,-1,-1).toResultPoint()}let i=rt.round((t.getX()+n.getX()+e.getX()+r.getX())/4),o=rt.round((t.getY()+n.getY()+e.getY()+r.getY())/4);try{let s=new at(this.image,15,i,o).detect();t=s[0],e=s[1],r=s[2],n=s[3]}catch(s){t=this.getFirstDifferent(new dt(i+7,o-7),!1,1,-1).toResultPoint(),e=this.getFirstDifferent(new dt(i+7,o+7),!1,1,1).toResultPoint(),r=this.getFirstDifferent(new dt(i-7,o+7),!1,-1,1).toResultPoint(),n=this.getFirstDifferent(new dt(i-7,o-7),!1,-1,-1).toResultPoint()}return i=rt.round((t.getX()+n.getX()+e.getX()+r.getX())/4),o=rt.round((t.getY()+n.getY()+e.getY()+r.getY())/4),new dt(i,o)}getMatrixCornerPoints(t){return this.expandSquare(t,2*this.nbCenterLayers,this.getDimension())}sampleGrid(t,e,r,n,i){let o=ut.getInstance(),s=this.getDimension(),a=s/2-this.nbCenterLayers,c=s/2+this.nbCenterLayers;return o.sampleGrid(t,s,s,a,a,c,a,c,c,a,c,e.getX(),e.getY(),r.getX(),r.getY(),n.getX(),n.getY(),i.getX(),i.getY())}sampleLine(t,e,r){let n=0,i=this.distanceResultPoint(t,e),o=i/r,s=t.getX(),a=t.getY(),c=o*(e.getX()-t.getX())/i,l=o*(e.getY()-t.getY())/i;for(let t=0;t.1&&h<.9?0:h<=.1===c?1:-1}getFirstDifferent(t,e,r,n){let i=t.getX()+r,o=t.getY()+n;for(;this.isValid(i,o)&&this.image.get(i,o)===e;)i+=r,o+=n;for(i-=r,o-=n;this.isValid(i,o)&&this.image.get(i,o)===e;)i+=r;for(i-=r;this.isValid(i,o)&&this.image.get(i,o)===e;)o+=n;return o-=n,new dt(i,o)}expandSquare(t,e,r){let n=r/(2*e),i=t[0].getX()-t[2].getX(),o=t[0].getY()-t[2].getY(),s=(t[0].getX()+t[2].getX())/2,a=(t[0].getY()+t[2].getY())/2,c=new it(s+n*i,a+n*o),l=new it(s-n*i,a-n*o);return i=t[1].getX()-t[3].getX(),o=t[1].getY()-t[3].getY(),s=(t[1].getX()+t[3].getX())/2,a=(t[1].getY()+t[3].getY())/2,[c,new it(s+n*i,a+n*o),l,new it(s-n*i,a-n*o)]}isValid(t,e){return t>=0&&t0&&e{r.foundPossibleResultPoint(t)}))}}reset(){}}class wt{decode(t,e){try{return this.doDecode(t,e)}catch(r){if(e&&!0===e.get(C.TRY_HARDER)&&t.isRotateSupported()){const r=t.rotateCounterClockwise(),n=this.doDecode(r,e),i=n.getResultMetadata();let o=270;null!==i&&!0===i.get(W.ORIENTATION)&&(o+=i.get(W.ORIENTATION)%360),n.putMetadata(W.ORIENTATION,o);const s=n.getResultPoints();if(null!==s){const t=r.getHeight();for(let e=0;e>(o?8:5));let a;a=o?n:15;const c=Math.trunc(n/2);for(let o=0;o=n)break;try{i=t.getBlackRow(l,i)}catch(t){continue}for(let t=0;t<2;t++){if(1===t&&(i.reverse(),e&&!0===e.get(C.NEED_RESULT_POINT_CALLBACK))){const t=new Map;e.forEach(((e,r)=>t.set(r,e))),t.delete(C.NEED_RESULT_POINT_CALLBACK),e=t}try{const n=this.decodeRow(l,i,e);if(1===t){n.putMetadata(W.ORIENTATION,180);const t=n.getResultPoints();null!==t&&(t[0]=new it(r-t[0].getX()-1,t[0].getY()),t[1]=new it(r-t[1].getX()-1,t[1].getY()))}return n}catch(t){}}}throw new D}static recordPattern(t,e,r){const n=r.length;for(let t=0;t=i)throw new D;let o=!t.get(e),s=0,a=e;for(;a0&&n>=0;)t.get(--e)!==i&&(n--,i=!i);if(n>=0)throw new D;wt.recordPattern(t,e+1,r)}static patternMatchVariance(t,e,r){const n=t.length;let i=0,o=0;for(let r=0;ro?n-o:o-n;if(c>r)return Number.POSITIVE_INFINITY;a+=c}return a/i}}class mt extends wt{static findStartPattern(t){const e=t.getSize(),r=t.getNextSet(0);let n=0,i=Int32Array.from([0,0,0,0,0,0]),o=r,s=!1;for(let a=r;a=0&&t.isRange(Math.max(0,o-(a-o)/2),o,!1))return Int32Array.from([o,a,r]);o+=i[0]+i[1],i=i.slice(2,i.length-1),i[n-1]=0,i[n]=0,n--}else n++;i[n]=1,s=!s}throw new D}static decodeCode(t,e,r){wt.recordPattern(t,r,e);let n=mt.MAX_AVG_VARIANCE,i=-1;for(let t=0;t=0)return i;throw new D}decodeRow(t,e,r){const n=r&&!0===r.get(C.ASSUME_GS1),i=mt.findStartPattern(e),o=i[2];let s=0;const a=new Uint8Array(20);let c;switch(a[s++]=o,o){case mt.CODE_START_A:c=mt.CODE_CODE_A;break;case mt.CODE_START_B:c=mt.CODE_CODE_B;break;case mt.CODE_START_C:c=mt.CODE_CODE_C;break;default:throw new E}let l=!1,u=!1,d="",f=i[0],g=i[1];const w=Int32Array.from([0,0,0,0,0,0]);let m=0,p=0,A=o,I=0,S=!0,_=!1,T=!1;for(;!l;){const t=u;switch(u=!1,m=p,p=mt.decodeCode(e,w,g),a[s++]=p,p!==mt.CODE_STOP&&(S=!0),p!==mt.CODE_STOP&&(I++,A+=I*p),f=g,g+=w.reduce(((t,e)=>t+e),0),p){case mt.CODE_START_A:case mt.CODE_START_B:case mt.CODE_START_C:throw new E}switch(c){case mt.CODE_CODE_A:if(p<64)d+=T===_?String.fromCharCode(" ".charCodeAt(0)+p):String.fromCharCode(" ".charCodeAt(0)+p+128),T=!1;else if(p<96)d+=T===_?String.fromCharCode(p-64):String.fromCharCode(p+64),T=!1;else switch(p!==mt.CODE_STOP&&(S=!1),p){case mt.CODE_FNC_1:n&&(0===d.length?d+="]C1":d+=String.fromCharCode(29));break;case mt.CODE_FNC_2:case mt.CODE_FNC_3:break;case mt.CODE_FNC_4_A:!_&&T?(_=!0,T=!1):_&&T?(_=!1,T=!1):T=!0;break;case mt.CODE_SHIFT:u=!0,c=mt.CODE_CODE_B;break;case mt.CODE_CODE_B:c=mt.CODE_CODE_B;break;case mt.CODE_CODE_C:c=mt.CODE_CODE_C;break;case mt.CODE_STOP:l=!0}break;case mt.CODE_CODE_B:if(p<96)d+=T===_?String.fromCharCode(" ".charCodeAt(0)+p):String.fromCharCode(" ".charCodeAt(0)+p+128),T=!1;else switch(p!==mt.CODE_STOP&&(S=!1),p){case mt.CODE_FNC_1:n&&(0===d.length?d+="]C1":d+=String.fromCharCode(29));break;case mt.CODE_FNC_2:case mt.CODE_FNC_3:break;case mt.CODE_FNC_4_B:!_&&T?(_=!0,T=!1):_&&T?(_=!1,T=!1):T=!0;break;case mt.CODE_SHIFT:u=!0,c=mt.CODE_CODE_A;break;case mt.CODE_CODE_A:c=mt.CODE_CODE_A;break;case mt.CODE_CODE_C:c=mt.CODE_CODE_C;break;case mt.CODE_STOP:l=!0}break;case mt.CODE_CODE_C:if(p<100)p<10&&(d+="0"),d+=p;else switch(p!==mt.CODE_STOP&&(S=!1),p){case mt.CODE_FNC_1:n&&(0===d.length?d+="]C1":d+=String.fromCharCode(29));break;case mt.CODE_CODE_A:c=mt.CODE_CODE_A;break;case mt.CODE_CODE_B:c=mt.CODE_CODE_B;break;case mt.CODE_STOP:l=!0}}t&&(c=c===mt.CODE_CODE_A?mt.CODE_CODE_B:mt.CODE_CODE_A)}const y=g-f;if(g=e.getNextUnset(g),!e.isRange(g,Math.min(e.getSize(),g+(g-f)/2),!1))throw new D;if(A-=I*m,A%103!==m)throw new h;const N=d.length;if(0===N)throw new D;N>0&&S&&(d=c===mt.CODE_CODE_C?d.substring(0,N-2):d.substring(0,N-1));const M=(i[1]+i[0])/2,R=f+y/2,O=a.length,b=new Uint8Array(O);for(let t=0;tn&&(i=e);n=i,e=0;let o=0,s=0;for(let i=0;in&&(s|=1<0;i++){let r=t[i];if(r>n&&(e--,2*r>=o))return-1}return s}}while(e>3);return-1}static patternToChar(t){for(let e=0;e="A"&&i<="Z"))throw new E;o=String.fromCharCode(i.charCodeAt(0)+32);break;case"$":if(!(i>="A"&&i<="Z"))throw new E;o=String.fromCharCode(i.charCodeAt(0)-64);break;case"%":if(i>="A"&&i<="E")o=String.fromCharCode(i.charCodeAt(0)-38);else if(i>="F"&&i<="J")o=String.fromCharCode(i.charCodeAt(0)-11);else if(i>="K"&&i<="O")o=String.fromCharCode(i.charCodeAt(0)+16);else if(i>="P"&&i<="T")o=String.fromCharCode(i.charCodeAt(0)+43);else if("U"===i)o="\0";else if("V"===i)o="@";else if("W"===i)o="`";else{if("X"!==i&&"Y"!==i&&"Z"!==i)throw new E;o=""}break;case"/":if(i>="A"&&i<="O")o=String.fromCharCode(i.charCodeAt(0)-32);else{if("Z"!==i)throw new E;o=":"}}r+=o,n++}else r+=e}return r}}pt.ALPHABET_STRING="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%",pt.CHARACTER_ENCODINGS=[52,289,97,352,49,304,112,37,292,100,265,73,328,25,280,88,13,268,76,28,259,67,322,19,274,82,7,262,70,22,385,193,448,145,400,208,133,388,196,168,162,138,42],pt.ASTERISK_ENCODING=148;class At extends wt{constructor(){super(...arguments),this.narrowLineWidth=-1}decodeRow(t,e,r){let n=this.decodeStart(e),i=this.decodeEnd(e),o=new y;At.decodeMiddle(e,n[1],i[0],o);let s=o.toString(),a=null;null!=r&&(a=r.get(C.ALLOWED_LENGTHS)),null==a&&(a=At.DEFAULT_ALLOWED_LENGTHS);let c=s.length,l=!1,h=0;for(let t of a){if(c===t){l=!0;break}t>h&&(h=t)}if(!l&&c>h&&(l=!0),!l)throw new E;const u=[new it(n[1],t),new it(i[0],t)];return new x(s,null,0,u,U.ITF,(new Date).getTime())}static decodeMiddle(t,e,r,n){let i=new Int32Array(10),o=new Int32Array(5),s=new Int32Array(5);for(i.fill(0),o.fill(0),s.fill(0);e0&&n>=0&&!t.get(n);n--)r--;if(0!==r)throw new D}static skipWhiteSpace(t){const e=t.getSize(),r=t.getNextSet(0);if(r===e)throw new D;return r}decodeEnd(t){t.reverse();try{let e,r=At.skipWhiteSpace(t);try{e=At.findGuardPattern(t,r,At.END_PATTERN_REVERSED[0])}catch(n){n instanceof D&&(e=At.findGuardPattern(t,r,At.END_PATTERN_REVERSED[1]))}this.validateQuietZone(t,e[0]);let n=e[0];return e[0]=t.getSize()-e[1],e[1]=t.getSize()-n,e}finally{t.reverse()}}static findGuardPattern(t,e,r){let n=r.length,i=new Int32Array(n),o=t.getSize(),s=!1,a=0,c=e;i.fill(0);for(let l=e;l=0)return r%10;throw new D}}At.PATTERNS=[Int32Array.from([1,1,2,2,1]),Int32Array.from([2,1,1,1,2]),Int32Array.from([1,2,1,1,2]),Int32Array.from([2,2,1,1,1]),Int32Array.from([1,1,2,1,2]),Int32Array.from([2,1,2,1,1]),Int32Array.from([1,2,2,1,1]),Int32Array.from([1,1,1,2,2]),Int32Array.from([2,1,1,2,1]),Int32Array.from([1,2,1,2,1]),Int32Array.from([1,1,3,3,1]),Int32Array.from([3,1,1,1,3]),Int32Array.from([1,3,1,1,3]),Int32Array.from([3,3,1,1,1]),Int32Array.from([1,1,3,1,3]),Int32Array.from([3,1,3,1,1]),Int32Array.from([1,3,3,1,1]),Int32Array.from([1,1,1,3,3]),Int32Array.from([3,1,1,3,1]),Int32Array.from([1,3,1,3,1])],At.MAX_AVG_VARIANCE=.38,At.MAX_INDIVIDUAL_VARIANCE=.5,At.DEFAULT_ALLOWED_LENGTHS=[6,8,10,12,14],At.START_PATTERN=Int32Array.from([1,1,1,1]),At.END_PATTERN_REVERSED=[Int32Array.from([1,1,2]),Int32Array.from([1,1,3])];class Ct extends wt{constructor(){super(...arguments),this.decodeRowStringBuffer=""}static findStartGuardPattern(t){let e,r=!1,n=0,i=Int32Array.from([0,0,0]);for(;!r;){i=Int32Array.from([0,0,0]),e=Ct.findGuardPattern(t,n,!1,this.START_END_PATTERN,i);let o=e[0];n=e[1];let s=o-(n-o);s>=0&&(r=t.isRange(s,o,!1))}return e}static checkChecksum(t){return Ct.checkStandardUPCEANChecksum(t)}static checkStandardUPCEANChecksum(t){let e=t.length;if(0===e)return!1;let r=parseInt(t.charAt(e-1),10);return Ct.getStandardUPCEANChecksum(t.substring(0,e-1))===r}static getStandardUPCEANChecksum(t){let e=t.length,r=0;for(let n=e-1;n>=0;n-=2){let e=t.charAt(n).charCodeAt(0)-"0".charCodeAt(0);if(e<0||e>9)throw new E;r+=e}r*=3;for(let n=e-2;n>=0;n-=2){let e=t.charAt(n).charCodeAt(0)-"0".charCodeAt(0);if(e<0||e>9)throw new E;r+=e}return(1e3-r)%10}static decodeEnd(t,e){return Ct.findGuardPattern(t,e,!1,Ct.START_END_PATTERN,new Int32Array(Ct.START_END_PATTERN.length).fill(0))}static findGuardPatternWithoutCounters(t,e,r,n){return this.findGuardPattern(t,e,r,n,new Int32Array(n.length))}static findGuardPattern(t,e,r,n,i){let o=t.getSize(),s=0,a=e=r?t.getNextUnset(e):t.getNextSet(e),c=n.length,l=r;for(let r=e;r=0)return o;throw new D}}Ct.MAX_AVG_VARIANCE=.48,Ct.MAX_INDIVIDUAL_VARIANCE=.7,Ct.START_END_PATTERN=Int32Array.from([1,1,1]),Ct.MIDDLE_PATTERN=Int32Array.from([1,1,1,1,1]),Ct.END_PATTERN=Int32Array.from([1,1,1,1,1,1]),Ct.L_PATTERNS=[Int32Array.from([3,2,1,1]),Int32Array.from([2,2,2,1]),Int32Array.from([2,1,2,2]),Int32Array.from([1,4,1,1]),Int32Array.from([1,1,3,2]),Int32Array.from([1,2,3,1]),Int32Array.from([1,1,1,4]),Int32Array.from([1,3,1,2]),Int32Array.from([1,2,1,3]),Int32Array.from([3,1,1,2])];class Et{constructor(){this.CHECK_DIGIT_ENCODINGS=[24,20,18,17,12,6,3,10,9,5],this.decodeMiddleCounters=Int32Array.from([0,0,0,0]),this.decodeRowStringBuffer=""}decodeRow(t,e,r){let n=this.decodeRowStringBuffer,i=this.decodeMiddle(e,r,n),o=n.toString(),s=Et.parseExtensionString(o),a=[new it((r[0]+r[1])/2,t),new it(i,t)],c=new x(o,null,0,a,U.UPC_EAN_EXTENSION,(new Date).getTime());return null!=s&&c.putAllMetadata(s),c}decodeMiddle(t,e,r){let n=this.decodeMiddleCounters;n[0]=0,n[1]=0,n[2]=0,n[3]=0;let i=t.getSize(),o=e[1],s=0;for(let e=0;e<5&&o=10&&(s|=1<<4-e),4!==e&&(o=t.getNextSet(o),o=t.getNextUnset(o))}if(5!==r.length)throw new D;let a=this.determineCheckDigit(s);if(Et.extensionChecksum(r.toString())!==a)throw new D;return o}static extensionChecksum(t){let e=t.length,r=0;for(let n=e-2;n>=0;n-=2)r+=t.charAt(n).charCodeAt(0)-"0".charCodeAt(0);r*=3;for(let n=e-1;n>=0;n-=2)r+=t.charAt(n).charCodeAt(0)-"0".charCodeAt(0);return r*=3,r%10}determineCheckDigit(t){for(let e=0;e<10;e++)if(t===this.CHECK_DIGIT_ENCODINGS[e])return e;throw new D}static parseExtensionString(t){if(5!==t.length)return null;let e=Et.parseExtension5String(t);return null==e?null:new Map([[W.SUGGESTED_PRICE,e]])}static parseExtension5String(t){let e;switch(t.charAt(0)){case"0":e="£";break;case"5":e="$";break;case"9":switch(t){case"90000":return null;case"99991":return"0.00";case"99990":return"Used"}e="";break;default:e=""}let r=parseInt(t.substring(1)),n=r%100;return e+(r/100).toString()+"."+(n<10?"0"+n:n.toString())}}class It{constructor(){this.decodeMiddleCounters=Int32Array.from([0,0,0,0]),this.decodeRowStringBuffer=""}decodeRow(t,e,r){let n=this.decodeRowStringBuffer,i=this.decodeMiddle(e,r,n),o=n.toString(),s=It.parseExtensionString(o),a=[new it((r[0]+r[1])/2,t),new it(i,t)],c=new x(o,null,0,a,U.UPC_EAN_EXTENSION,(new Date).getTime());return null!=s&&c.putAllMetadata(s),c}decodeMiddle(t,e,r){let n=this.decodeMiddleCounters;n[0]=0,n[1]=0,n[2]=0,n[3]=0;let i=t.getSize(),o=e[1],s=0;for(let e=0;e<2&&o=10&&(s|=1<<1-e),1!==e&&(o=t.getNextSet(o),o=t.getNextUnset(o))}if(2!==r.length)throw new D;if(parseInt(r.toString())%4!==s)throw new D;return o}static parseExtensionString(t){return 2!==t.length?null:new Map([[W.ISSUE_NUMBER,parseInt(t)]])}}class St{static decodeRow(t,e,r){let n=Ct.findGuardPattern(e,r,!1,this.EXTENSION_START_PATTERN,new Int32Array(this.EXTENSION_START_PATTERN.length).fill(0));try{return(new Et).decodeRow(t,e,n)}catch(r){return(new It).decodeRow(t,e,n)}}}St.EXTENSION_START_PATTERN=Int32Array.from([1,1,2]);class _t extends Ct{constructor(){super(),this.decodeRowStringBuffer="",_t.L_AND_G_PATTERNS=_t.L_PATTERNS.map((t=>Int32Array.from(t)));for(let t=10;t<20;t++){let e=_t.L_PATTERNS[t-10],r=new Int32Array(e.length);for(let t=0;t=e.getSize()||!e.isRange(l,u,!1))throw new D;let d=a.toString();if(d.length<8)throw new E;if(!_t.checkChecksum(d))throw new h;let f=(n[1]+n[0])/2,g=(c[1]+c[0])/2,w=this.getBarcodeFormat(),m=[new it(f,t),new it(g,t)],p=new x(d,null,0,m,w,(new Date).getTime()),A=0;try{let r=St.decodeRow(t,e,c[1]);p.putMetadata(W.UPC_EAN_EXTENSION,r.getText()),p.putAllMetadata(r.getResultMetadata()),p.addResultPoints(r.getResultPoints()),A=r.getText().length}catch(t){}let I=null==r?null:r.get(C.ALLOWED_EAN_EXTENSIONS);if(null!=I){let t=!1;for(let e in I)if(A.toString()===e){t=!0;break}if(!t)throw new D}return p}decodeEnd(t,e){return _t.findGuardPattern(t,e,!1,_t.START_END_PATTERN,new Int32Array(_t.START_END_PATTERN.length).fill(0))}static checkChecksum(t){return _t.checkStandardUPCEANChecksum(t)}static checkStandardUPCEANChecksum(t){let e=t.length;if(0===e)return!1;let r=parseInt(t.charAt(e-1),10);return _t.getStandardUPCEANChecksum(t.substring(0,e-1))===r}static getStandardUPCEANChecksum(t){let e=t.length,r=0;for(let n=e-1;n>=0;n-=2){let e=t.charAt(n).charCodeAt(0)-"0".charCodeAt(0);if(e<0||e>9)throw new E;r+=e}r*=3;for(let n=e-2;n>=0;n-=2){let e=t.charAt(n).charCodeAt(0)-"0".charCodeAt(0);if(e<0||e>9)throw new E;r+=e}return(1e3-r)%10}}class Tt extends _t{constructor(){super(),this.decodeMiddleCounters=Int32Array.from([0,0,0,0])}decodeMiddle(t,e,r){let n=this.decodeMiddleCounters;n[0]=0,n[1]=0,n[2]=0,n[3]=0;let i=t.getSize(),o=e[1],s=0;for(let e=0;e<6&&o=10&&(s|=1<<5-e)}r=Tt.determineFirstDigit(r,s),o=_t.findGuardPattern(t,o,!0,_t.MIDDLE_PATTERN,new Int32Array(_t.MIDDLE_PATTERN.length).fill(0))[1];for(let e=0;e<6&&ot));n[0]=0,n[1]=0,n[2]=0,n[3]=0;const i=t.getSize();let o=e[1],s=0;for(let e=0;e<6&&o=10&&(s|=1<<5-e)}return{rowOffset:o,resultString:Dt.determineNumSysAndCheckDigit(r,s)}}decodeEnd(t,e){return Dt.findGuardPatternWithoutCounters(t,e,!0,Dt.MIDDLE_END_PATTERN)}checkChecksum(t){return _t.checkChecksum(Dt.convertUPCEtoUPCA(t))}static determineNumSysAndCheckDigit(t,e){for(let r=0;r<=1;r++)for(let n=0;n<10;n++)if(e===this.NUMSYS_AND_CHECK_DIGIT_PATTERNS[r][n])return String.fromCharCode("0".charCodeAt(0)+r)+t+String.fromCharCode("0".charCodeAt(0)+n);throw D.getNotFoundInstance()}getBarcodeFormat(){return U.UPC_E}static convertUPCEtoUPCA(t){const e=t.slice(1,7).split("").map((t=>t.charCodeAt(0))),r=new y;r.append(t.charAt(0));let n=e[5];switch(n){case 0:case 1:case 2:r.appendChars(e,0,2),r.append(n),r.append("0000"),r.appendChars(e,2,3);break;case 3:r.appendChars(e,0,3),r.append("00000"),r.appendChars(e,3,2);break;case 4:r.appendChars(e,0,4),r.append("00000"),r.append(e[4]);break;default:r.appendChars(e,0,5),r.append("0000"),r.append(n)}return t.length>=8&&r.append(t.charAt(7)),r.toString()}}Dt.MIDDLE_END_PATTERN=Int32Array.from([1,1,1,1,1,1]),Dt.NUMSYS_AND_CHECK_DIGIT_PATTERNS=[Int32Array.from([56,52,50,49,44,38,35,42,41,37]),Int32Array.from([7,11,13,14,19,25,28,21,22,26])];class Mt extends wt{constructor(t){super();let r=null==t?null:t.get(C.POSSIBLE_FORMATS),n=[];e(r)?(n.push(new Tt),n.push(new Nt),n.push(new yt),n.push(new Dt)):(r.indexOf(U.EAN_13)>-1&&n.push(new Tt),r.indexOf(U.UPC_A)>-1&&n.push(new Nt),r.indexOf(U.EAN_8)>-1&&n.push(new yt),r.indexOf(U.UPC_E)>-1&&n.push(new Dt)),this.readers=n}decodeRow(t,e,r){for(let n of this.readers)try{const i=n.decodeRow(t,e,r),o=i.getBarcodeFormat()===U.EAN_13&&"0"===i.getText().charAt(0),s=null==r?null:r.get(C.POSSIBLE_FORMATS),a=null==s||s.includes(U.UPC_A);if(o&&a){const t=i.getRawBytes(),e=new x(i.getText().substring(1),t,t?t.length:null,i.getResultPoints(),U.UPC_A);return e.putAllMetadata(i.getResultMetadata()),e}return i}catch(t){}throw new D}reset(){for(let t of this.readers)t.reset()}}class Rt extends wt{constructor(){super(),this.decodeFinderCounters=new Int32Array(4),this.dataCharacterCounters=new Int32Array(8),this.oddRoundingErrors=new Array(4),this.evenRoundingErrors=new Array(4),this.oddCounts=new Array(this.dataCharacterCounters.length/2),this.evenCounts=new Array(this.dataCharacterCounters.length/2)}getDecodeFinderCounters(){return this.decodeFinderCounters}getDataCharacterCounters(){return this.dataCharacterCounters}getOddRoundingErrors(){return this.oddRoundingErrors}getEvenRoundingErrors(){return this.evenRoundingErrors}getOddCounts(){return this.oddCounts}getEvenCounts(){return this.evenCounts}parseFinderValue(t,e){for(let r=0;rn&&(n=e[i],r=i);t[r]++}static decrement(t,e){let r=0,n=e[0];for(let i=1;i=Rt.MIN_FINDER_PATTERN_RATIO&&r<=Rt.MAX_FINDER_PATTERN_RATIO){let e=Number.MAX_SAFE_INTEGER,r=Number.MIN_SAFE_INTEGER;for(let n of t)n>r&&(r=n),n=s-a-1&&(t-=Bt.combins(n-c-(s-a),s-a-2)),s-a-1>1){let r=0;for(let t=n-c-(s-a-2);t>e;t--)r+=Bt.combins(n-c-t-1,s-a-3);t-=r*(s-1-a)}else n-c>e&&t--;i+=t}n-=c}return i}static combins(t,e){let r,n;t-e>e?(n=e,r=t-e):(n=t-e,r=e);let i=1,o=1;for(let e=t;e>r;e--)i*=e,o<=n&&(i/=o,o++);for(;o<=n;)i/=o,o++;return i}}class Lt{static buildBitArray(t){let e=2*t.length-1;null==t[t.length-1].getRightChar()&&(e-=1);let r=new p(12*e),n=0,i=t[0].getRightChar().getValue();for(let t=11;t>=0;--t)0!=(i&1<=0;--t)0!=(o&1<=0;--e)0!=(t&1<10||r<0||r>10)throw new E;this.firstDigit=e,this.secondDigit=r}getFirstDigit(){return this.firstDigit}getSecondDigit(){return this.secondDigit}getValue(){return 10*this.firstDigit+this.secondDigit}isFirstDigitFNC1(){return this.firstDigit===kt.FNC1}isSecondDigitFNC1(){return this.secondDigit===kt.FNC1}isAnyFNC1(){return this.firstDigit===kt.FNC1||this.secondDigit===kt.FNC1}}kt.FNC1=10;class Ut{constructor(){}static parseFieldsInGeneralPurpose(t){if(!t)return null;if(t.length<2)throw new D;let e=t.substring(0,2);for(let r of Ut.TWO_DIGIT_DATA_LENGTH)if(r[0]===e)return r[1]===Ut.VARIABLE_LENGTH?Ut.processVariableAI(2,r[2],t):Ut.processFixedAI(2,r[1],t);if(t.length<3)throw new D;let r=t.substring(0,3);for(let e of Ut.THREE_DIGIT_DATA_LENGTH)if(e[0]===r)return e[1]===Ut.VARIABLE_LENGTH?Ut.processVariableAI(3,e[2],t):Ut.processFixedAI(3,e[1],t);for(let e of Ut.THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH)if(e[0]===r)return e[1]===Ut.VARIABLE_LENGTH?Ut.processVariableAI(4,e[2],t):Ut.processFixedAI(4,e[1],t);if(t.length<4)throw new D;let n=t.substring(0,4);for(let e of Ut.FOUR_DIGIT_DATA_LENGTH)if(e[0]===n)return e[1]===Ut.VARIABLE_LENGTH?Ut.processVariableAI(4,e[2],t):Ut.processFixedAI(4,e[1],t);throw new D}static processFixedAI(t,e,r){if(r.lengththis.information.getSize())return t+4<=this.information.getSize();for(let e=t;ethis.information.getSize()){let e=this.extractNumericValueFromBitArray(t,4);return new kt(this.information.getSize(),0===e?kt.FNC1:e-1,kt.FNC1)}let e=this.extractNumericValueFromBitArray(t,7);return new kt(t+7,(e-8)/11,(e-8)%11)}extractNumericValueFromBitArray(t,e){return Ht.extractNumericValueFromBitArray(this.information,t,e)}static extractNumericValueFromBitArray(t,e,r){let n=0;for(let i=0;ithis.information.getSize())return!1;let e=this.extractNumericValueFromBitArray(t,5);if(e>=5&&e<16)return!0;if(t+7>this.information.getSize())return!1;let r=this.extractNumericValueFromBitArray(t,7);if(r>=64&&r<116)return!0;if(t+8>this.information.getSize())return!1;let n=this.extractNumericValueFromBitArray(t,8);return n>=232&&n<253}decodeIsoIec646(t){let e=this.extractNumericValueFromBitArray(t,5);if(15===e)return new Ft(t+5,Ft.FNC1);if(e>=5&&e<15)return new Ft(t+5,"0"+(e-5));let r,n=this.extractNumericValueFromBitArray(t,7);if(n>=64&&n<90)return new Ft(t+7,""+(n+1));if(n>=90&&n<116)return new Ft(t+7,""+(n+7));switch(this.extractNumericValueFromBitArray(t,8)){case 232:r="!";break;case 233:r='"';break;case 234:r="%";break;case 235:r="&";break;case 236:r="'";break;case 237:r="(";break;case 238:r=")";break;case 239:r="*";break;case 240:r="+";break;case 241:r=",";break;case 242:r="-";break;case 243:r=".";break;case 244:r="/";break;case 245:r=":";break;case 246:r=";";break;case 247:r="<";break;case 248:r="=";break;case 249:r=">";break;case 250:r="?";break;case 251:r="_";break;case 252:r=" ";break;default:throw new E}return new Ft(t+8,r)}isStillAlpha(t){if(t+5>this.information.getSize())return!1;let e=this.extractNumericValueFromBitArray(t,5);if(e>=5&&e<16)return!0;if(t+6>this.information.getSize())return!1;let r=this.extractNumericValueFromBitArray(t,6);return r>=16&&r<63}decodeAlphanumeric(t){let e=this.extractNumericValueFromBitArray(t,5);if(15===e)return new Ft(t+5,Ft.FNC1);if(e>=5&&e<15)return new Ft(t+5,"0"+(e-5));let r,n=this.extractNumericValueFromBitArray(t,6);if(n>=32&&n<58)return new Ft(t+6,""+(n+33));switch(n){case 58:r="*";break;case 59:r=",";break;case 60:r="-";break;case 61:r=".";break;case 62:r="/";break;default:throw new $("Decoding invalid alphanumeric value: "+n)}return new Ft(t+6,r)}isAlphaTo646ToAlphaLatch(t){if(t+1>this.information.getSize())return!1;for(let e=0;e<5&&e+tthis.information.getSize())return!1;for(let e=t;ethis.information.getSize())return!1;for(let e=0;e<4&&e+t{e.forEach((e=>{t.getLeftChar().getValue()===e.getLeftChar().getValue()&&t.getRightChar().getValue()===e.getRightChar().getValue()&&t.getFinderPatter().getValue()===e.getFinderPatter().getValue()&&(r=!0)}))})),r}}class ee extends Rt{constructor(t){super(...arguments),this.pairs=new Array(ee.MAX_PAIRS),this.rows=new Array,this.startEnd=[2],this.verbose=!0===t}decodeRow(t,e,r){this.pairs.length=0,this.startFromEven=!1;try{return ee.constructResult(this.decodeRow2pairs(t,e))}catch(t){this.verbose&&console.log(t)}return this.pairs.length=0,this.startFromEven=!0,ee.constructResult(this.decodeRow2pairs(t,e))}reset(){this.pairs.length=0,this.rows.length=0}decodeRow2pairs(t,e){let r,n=!1;for(;!n;)try{this.pairs.push(this.retrieveNextPair(e,this.pairs,t))}catch(t){if(t instanceof D){if(!this.pairs.length)throw new D;n=!0}}if(this.checkChecksum())return this.pairs;if(r=!!this.rows.length,this.storeRow(t,!1),r){let t=this.checkRowsBoolean(!1);if(null!=t)return t;if(t=this.checkRowsBoolean(!0),null!=t)return t}throw new D}checkRowsBoolean(t){if(this.rows.length>25)return this.rows.length=0,null;this.pairs.length=0,t&&(this.rows=this.rows.reverse());let e=null;try{e=this.checkRows(new Array,0)}catch(t){this.verbose&&console.log(t)}return t&&(this.rows=this.rows.reverse()),e}checkRows(t,e){for(let r=e;re.length)continue;let r=!0;for(let n=0;nt){i=e.isEquivalent(this.pairs);break}n=e.isEquivalent(this.pairs),r++}i||n||ee.isPartialRow(this.pairs,this.rows)||(this.rows.push(r,new te(this.pairs,t,e)),this.removePartialRows(this.pairs,this.rows))}removePartialRows(t,e){for(let r of e)if(r.getPairs().length!==t.length)for(let e of r.getPairs())for(let r of t)if($t.equals(e,r))break}static isPartialRow(t,e){for(let r of e){let e=!0;for(let n of t){let t=!1;for(let e of r.getPairs())if(n.equals(e)){t=!0;break}if(!t){e=!1;break}}if(e)return!0}return!1}getRows(){return this.rows}static constructResult(t){let e=Jt(Lt.buildBitArray(t)).parseInformation(),r=t[0].getFinderPattern().getResultPoints(),n=t[t.length-1].getFinderPattern().getResultPoints(),i=[r[0],r[1],n[0],n[1]];return new x(e,null,null,i,U.RSS_EXPANDED,null)}checkChecksum(){let t=this.pairs.get(0),e=t.getLeftChar(),r=t.getRightChar();if(null==r)return!1;let n=r.getChecksumPortion(),i=2;for(let t=1;t=0?r:this.isEmptyPair(e)?0:e[e.length-1].getFinderPattern().getStartEnd()[1];let s=e.length%2!=0;this.startFromEven&&(s=!s);let a=!1;for(;i=0&&!t.get(e);)e--;e++,n=this.startEnd[0]-e,i=e,o=this.startEnd[1]}else i=this.startEnd[0],o=t.getNextUnset(this.startEnd[1]+1),n=o-this.startEnd[1];let s,a=this.getDecodeFinderCounters();d.arraycopy(a,0,a,1,a.length-1),a[0]=n;try{s=this.parseFinderValue(a,ee.FINDER_PATTERNS)}catch(t){return null}return new bt(s,[i,o],i,o,e)}decodeDataCharacter(t,e,r,n){let i=this.getDataCharacterCounters();for(let t=0;t.3)throw new D;let a=this.getOddCounts(),c=this.getEvenCounts(),l=this.getOddRoundingErrors(),h=this.getEvenRoundingErrors();for(let t=0;t8){if(e>8.7)throw new D;r=8}let n=t/2;0==(1&t)?(a[n]=r,l[n]=e-r):(c[n]=r,h[n]=e-r)}this.adjustOddEvenCounts(17);let u=4*e.getValue()+(r?0:2)+(n?0:1)-1,d=0,f=0;for(let t=a.length-1;t>=0;t--){if(ee.isNotA1left(e,r,n)){let e=ee.WEIGHTS[u][2*t];f+=a[t]*e}d+=a[t]}let g=0;for(let t=c.length-1;t>=0;t--)if(ee.isNotA1left(e,r,n)){let e=ee.WEIGHTS[u][2*t+1];g+=c[t]*e}let w=f+g;if(0!=(1&d)||d>13||d<4)throw new D;let m=(13-d)/2,p=ee.SYMBOL_WIDEST[m],A=9-p,C=Bt.getRSSvalue(a,p,!0),E=Bt.getRSSvalue(c,A,!1),I=ee.EVEN_TOTAL_SUBSET[m],S=ee.GSUM[m];return new Ot(C*I+E+S,w)}static isNotA1left(t,e,r){return!(0==t.getValue()&&e&&r)}adjustOddEvenCounts(t){let e=rt.sum(new Int32Array(this.getOddCounts())),r=rt.sum(new Int32Array(this.getEvenCounts())),n=!1,i=!1;e>13?i=!0:e<4&&(n=!0);let o=!1,s=!1;r>13?s=!0:r<4&&(o=!0);let a=e+r-t,c=1==(1&e),l=0==(1&r);if(1==a)if(c){if(l)throw new D;i=!0}else{if(!l)throw new D;s=!0}else if(-1==a)if(c){if(l)throw new D;n=!0}else{if(!l)throw new D;o=!0}else{if(0!=a)throw new D;if(c){if(!l)throw new D;e1)for(let e of this.possibleRightPairs)if(e.getCount()>1&&ne.checkChecksum(t,e))return ne.constructResult(t,e);throw new D}static addOrTally(t,e){if(null==e)return;let r=!1;for(let n of t)if(n.getValue()===e.getValue()){n.incrementCount(),r=!0;break}r||t.push(e)}reset(){this.possibleLeftPairs.length=0,this.possibleRightPairs.length=0}static constructResult(t,e){let r=4537077*t.getValue()+e.getValue(),n=new String(r).toString(),i=new y;for(let t=13-n.length;t>0;t--)i.append("0");i.append(n);let o=0;for(let t=0;t<13;t++){let e=i.charAt(t).charCodeAt(0)-"0".charCodeAt(0);o+=0==(1&t)?3*e:e}o=10-o%10,10===o&&(o=0),i.append(o.toString());let s=t.getFinderPattern().getResultPoints(),a=e.getFinderPattern().getResultPoints();return new x(i.toString(),null,0,[s[0],s[1],a[0],a[1]],U.RSS_14,(new Date).getTime())}static checkChecksum(t,e){let r=(t.getChecksumPortion()+16*e.getChecksumPortion())%79,n=9*t.getFinderPattern().getValue()+e.getFinderPattern().getValue();return n>72&&n--,n>8&&n--,r===n}decodePair(t,e,r,n){try{let i=this.findFinderPattern(t,e),o=this.parseFoundFinderPattern(t,r,e,i),s=null==n?null:n.get(C.NEED_RESULT_POINT_CALLBACK);if(null!=s){let n=(i[0]+i[1])/2;e&&(n=t.getSize()-1-n),s.foundPossibleResultPoint(new it(n,r))}let a=this.decodeDataCharacter(t,o,!0),c=this.decodeDataCharacter(t,o,!1);return new re(1597*a.getValue()+c.getValue(),a.getChecksumPortion()+4*c.getChecksumPortion(),o)}catch(t){return null}}decodeDataCharacter(t,e,r){let n=this.getDataCharacterCounters();for(let t=0;t8&&(r=8);let i=Math.floor(t/2);0==(1&t)?(s[i]=r,c[i]=e-r):(a[i]=r,l[i]=e-r)}this.adjustOddEvenCounts(r,i);let h=0,u=0;for(let t=s.length-1;t>=0;t--)u*=9,u+=s[t],h+=s[t];let d=0,f=0;for(let t=a.length-1;t>=0;t--)d*=9,d+=a[t],f+=a[t];let g=u+3*d;if(r){if(0!=(1&h)||h>12||h<4)throw new D;let t=(12-h)/2,e=ne.OUTSIDE_ODD_WIDEST[t],r=9-e,n=Bt.getRSSvalue(s,e,!1),i=Bt.getRSSvalue(a,r,!0),o=ne.OUTSIDE_EVEN_TOTAL_SUBSET[t],c=ne.OUTSIDE_GSUM[t];return new Ot(n*o+i+c,g)}{if(0!=(1&f)||f>10||f<4)throw new D;let t=(10-f)/2,e=ne.INSIDE_ODD_WIDEST[t],r=9-e,n=Bt.getRSSvalue(s,e,!0),i=Bt.getRSSvalue(a,r,!1),o=ne.INSIDE_ODD_TOTAL_SUBSET[t],c=ne.INSIDE_GSUM[t];return new Ot(i*o+n+c,g)}}findFinderPattern(t,e){let r=this.getDecodeFinderCounters();r[0]=0,r[1]=0,r[2]=0,r[3]=0;let n=t.getSize(),i=!1,o=0;for(;o=0&&i!==t.get(o);)o--;o++;const s=n[0]-o,a=this.getDecodeFinderCounters(),c=new Int32Array(a.length);d.arraycopy(a,0,c,1,a.length-1),c[0]=s;const l=this.parseFinderValue(c,ne.FINDER_PATTERNS);let h=o,u=n[1];return r&&(h=t.getSize()-1-h,u=t.getSize()-1-u),new bt(l,[o,n[1]],h,u,e)}adjustOddEvenCounts(t,e){let r=rt.sum(new Int32Array(this.getOddCounts())),n=rt.sum(new Int32Array(this.getEvenCounts())),i=!1,o=!1,s=!1,a=!1;t?(r>12?o=!0:r<4&&(i=!0),n>12?a=!0:n<4&&(s=!0)):(r>11?o=!0:r<5&&(i=!0),n>10?a=!0:n<4&&(s=!0));let c=r+n-e,l=(1&r)==(t?1:0),h=1==(1&n);if(1===c)if(l){if(h)throw new D;o=!0}else{if(!h)throw new D;a=!0}else if(-1===c)if(l){if(h)throw new D;i=!0}else{if(!h)throw new D;s=!0}else{if(0!==c)throw new D;if(l){if(!h)throw new D;rt.reset()))}}class oe{constructor(t,e,r){this.ecCodewords=t,this.ecBlocks=[e],r&&this.ecBlocks.push(r)}getECCodewords(){return this.ecCodewords}getECBlocks(){return this.ecBlocks}}class se{constructor(t,e){this.count=t,this.dataCodewords=e}getCount(){return this.count}getDataCodewords(){return this.dataCodewords}}class ae{constructor(t,e,r,n,i,o){this.versionNumber=t,this.symbolSizeRows=e,this.symbolSizeColumns=r,this.dataRegionSizeRows=n,this.dataRegionSizeColumns=i,this.ecBlocks=o;let s=0;const a=o.getECCodewords(),c=o.getECBlocks();for(let t of c)s+=t.getCount()*(t.getDataCodewords()+a);this.totalCodewords=s}getVersionNumber(){return this.versionNumber}getSymbolSizeRows(){return this.symbolSizeRows}getSymbolSizeColumns(){return this.symbolSizeColumns}getDataRegionSizeRows(){return this.dataRegionSizeRows}getDataRegionSizeColumns(){return this.dataRegionSizeColumns}getTotalCodewords(){return this.totalCodewords}getECBlocks(){return this.ecBlocks}static getVersionForDimensions(t,e){if(0!=(1&t)||0!=(1&e))throw new E;for(let r of ae.VERSIONS)if(r.symbolSizeRows===t&&r.symbolSizeColumns===e)return r;throw new E}toString(){return""+this.versionNumber}static buildVersions(){return[new ae(1,10,10,8,8,new oe(5,new se(1,3))),new ae(2,12,12,10,10,new oe(7,new se(1,5))),new ae(3,14,14,12,12,new oe(10,new se(1,8))),new ae(4,16,16,14,14,new oe(12,new se(1,12))),new ae(5,18,18,16,16,new oe(14,new se(1,18))),new ae(6,20,20,18,18,new oe(18,new se(1,22))),new ae(7,22,22,20,20,new oe(20,new se(1,30))),new ae(8,24,24,22,22,new oe(24,new se(1,36))),new ae(9,26,26,24,24,new oe(28,new se(1,44))),new ae(10,32,32,14,14,new oe(36,new se(1,62))),new ae(11,36,36,16,16,new oe(42,new se(1,86))),new ae(12,40,40,18,18,new oe(48,new se(1,114))),new ae(13,44,44,20,20,new oe(56,new se(1,144))),new ae(14,48,48,22,22,new oe(68,new se(1,174))),new ae(15,52,52,24,24,new oe(42,new se(2,102))),new ae(16,64,64,14,14,new oe(56,new se(2,140))),new ae(17,72,72,16,16,new oe(36,new se(4,92))),new ae(18,80,80,18,18,new oe(48,new se(4,114))),new ae(19,88,88,20,20,new oe(56,new se(4,144))),new ae(20,96,96,22,22,new oe(68,new se(4,174))),new ae(21,104,104,24,24,new oe(56,new se(6,136))),new ae(22,120,120,18,18,new oe(68,new se(6,175))),new ae(23,132,132,20,20,new oe(62,new se(8,163))),new ae(24,144,144,22,22,new oe(62,new se(8,156),new se(2,155))),new ae(25,8,18,6,16,new oe(7,new se(1,5))),new ae(26,8,32,6,14,new oe(11,new se(1,10))),new ae(27,12,26,10,24,new oe(14,new se(1,16))),new ae(28,12,36,10,16,new oe(18,new se(1,22))),new ae(29,16,36,14,16,new oe(24,new se(1,32))),new ae(30,16,48,14,22,new oe(28,new se(1,49)))]}}ae.VERSIONS=ae.buildVersions();class ce{constructor(t){const e=t.getHeight();if(e<8||e>144||0!=(1&e))throw new E;this.version=ce.readVersion(t),this.mappingBitMatrix=this.extractDataRegion(t),this.readMappingMatrix=new N(this.mappingBitMatrix.getWidth(),this.mappingBitMatrix.getHeight())}getVersion(){return this.version}static readVersion(t){const e=t.getHeight(),r=t.getWidth();return ae.getVersionForDimensions(e,r)}readCodewords(){const t=new Int8Array(this.version.getTotalCodewords());let e=0,r=4,n=0;const i=this.mappingBitMatrix.getHeight(),o=this.mappingBitMatrix.getWidth();let s=!1,a=!1,c=!1,l=!1;do{if(r!==i||0!==n||s)if(r!==i-2||0!==n||0==(3&o)||a)if(r!==i+4||2!==n||0!=(7&o)||c)if(r!==i-2||0!==n||4!=(7&o)||l){do{r=0&&!this.readMappingMatrix.get(n,r)&&(t[e++]=255&this.readUtah(r,n,i,o)),r-=2,n+=2}while(r>=0&&n=0&&n=0);r+=3,n+=1}else t[e++]=255&this.readCorner4(i,o),r-=2,n+=2,l=!0;else t[e++]=255&this.readCorner3(i,o),r-=2,n+=2,c=!0;else t[e++]=255&this.readCorner2(i,o),r-=2,n+=2,a=!0;else t[e++]=255&this.readCorner1(i,o),r-=2,n+=2,s=!0}while(r7?e-1:e;o[n].codewords[i]=t[h++]}if(h!==t.length)throw new c;return o}getNumDataCodewords(){return this.numDataCodewords}getCodewords(){return this.codewords}}class he{constructor(t){this.bytes=t,this.byteOffset=0,this.bitOffset=0}getBitOffset(){return this.bitOffset}getByteOffset(){return this.byteOffset}readBits(t){if(t<1||t>32||t>this.available())throw new c(""+t);let e=0,r=this.bitOffset,n=this.byteOffset;const i=this.bytes;if(r>0){const o=8-r,s=t>8-s<>a,t-=s,r+=s,8===r&&(r=0,n++)}if(t>0){for(;t>=8;)e=e<<8|255&i[n],n++,t-=8;if(t>0){const o=8-t,s=255>>o<>o,r+=t}}return this.bitOffset=r,this.byteOffset=n,e}available(){return 8*(this.bytes.length-this.byteOffset)-this.bitOffset}}!function(t){t[t.PAD_ENCODE=0]="PAD_ENCODE",t[t.ASCII_ENCODE=1]="ASCII_ENCODE",t[t.C40_ENCODE=2]="C40_ENCODE",t[t.TEXT_ENCODE=3]="TEXT_ENCODE",t[t.ANSIX12_ENCODE=4]="ANSIX12_ENCODE",t[t.EDIFACT_ENCODE=5]="EDIFACT_ENCODE",t[t.BASE256_ENCODE=6]="BASE256_ENCODE"}(V||(V={}));class ue{static decode(t){const e=new he(t),r=new y,n=new y,i=new Array;let o=V.ASCII_ENCODE;do{if(o===V.ASCII_ENCODE)o=this.decodeAsciiSegment(e,r,n);else{switch(o){case V.C40_ENCODE:this.decodeC40Segment(e,r);break;case V.TEXT_ENCODE:this.decodeTextSegment(e,r);break;case V.ANSIX12_ENCODE:this.decodeAnsiX12Segment(e,r);break;case V.EDIFACT_ENCODE:this.decodeEdifactSegment(e,r);break;case V.BASE256_ENCODE:this.decodeBase256Segment(e,r,i);break;default:throw new E}o=V.ASCII_ENCODE}}while(o!==V.PAD_ENCODE&&e.available()>0);return n.length()>0&&r.append(n.toString()),new j(t,r.toString(),0===i.length?null:i,null)}static decodeAsciiSegment(t,e,r){let n=!1;do{let i=t.readBits(8);if(0===i)throw new E;if(i<=128)return n&&(i+=128),e.append(String.fromCharCode(i-1)),V.ASCII_ENCODE;if(129===i)return V.PAD_ENCODE;if(i<=229){const t=i-130;t<10&&e.append("0"),e.append(""+t)}else switch(i){case 230:return V.C40_ENCODE;case 231:return V.BASE256_ENCODE;case 232:e.append(String.fromCharCode(29));break;case 233:case 234:case 241:break;case 235:n=!0;break;case 236:e.append("[)>05"),r.insert(0,"");break;case 237:e.append("[)>06"),r.insert(0,"");break;case 238:return V.ANSIX12_ENCODE;case 239:return V.TEXT_ENCODE;case 240:return V.EDIFACT_ENCODE;default:if(254!==i||0!==t.available())throw new E}}while(t.available()>0);return V.ASCII_ENCODE}static decodeC40Segment(t,e){let r=!1;const n=[];let i=0;do{if(8===t.available())return;const o=t.readBits(8);if(254===o)return;this.parseTwoBytes(o,t.readBits(8),n);for(let t=0;t<3;t++){const o=n[t];switch(i){case 0:if(o<3)i=o+1;else{if(!(o0)}static decodeTextSegment(t,e){let r=!1,n=[],i=0;do{if(8===t.available())return;const o=t.readBits(8);if(254===o)return;this.parseTwoBytes(o,t.readBits(8),n);for(let t=0;t<3;t++){const o=n[t];switch(i){case 0:if(o<3)i=o+1;else{if(!(o0)}static decodeAnsiX12Segment(t,e){const r=[];do{if(8===t.available())return;const n=t.readBits(8);if(254===n)return;this.parseTwoBytes(n,t.readBits(8),r);for(let t=0;t<3;t++){const n=r[t];switch(n){case 0:e.append("\r");break;case 1:e.append("*");break;case 2:e.append(">");break;case 3:e.append(" ");break;default:if(n<14)e.append(String.fromCharCode(n+44));else{if(!(n<40))throw new E;e.append(String.fromCharCode(n+51))}}}}while(t.available()>0)}static parseTwoBytes(t,e,r){let n=(t<<8)+e-1,i=Math.floor(n/1600);r[0]=i,n-=1600*i,i=Math.floor(n/40),r[1]=i,r[2]=n-40*i}static decodeEdifactSegment(t,e){do{if(t.available()<=16)return;for(let r=0;r<4;r++){let r=t.readBits(6);if(31===r){const e=8-t.getBitOffset();return void(8!==e&&t.readBits(e))}0==(32&r)&&(r|=64),e.append(String.fromCharCode(r))}}while(t.available()>0)}static decodeBase256Segment(t,e,r){let n=1+t.getByteOffset();const i=this.unrandomize255State(t.readBits(8),n++);let o;if(o=0===i?t.available()/8|0:i<250?i:250*(i-249)+this.unrandomize255State(t.readBits(8),n++),o<0)throw new E;const s=new Uint8Array(o);for(let e=0;e=0?r:r+256}}ue.C40_BASIC_SET_CHARS=["*","*","*"," ","0","1","2","3","4","5","6","7","8","9","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"],ue.C40_SHIFT2_SET_CHARS=["!",'"',"#","$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","?","@","[","\\","]","^","_"],ue.TEXT_BASIC_SET_CHARS=["*","*","*"," ","0","1","2","3","4","5","6","7","8","9","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"],ue.TEXT_SHIFT2_SET_CHARS=ue.C40_SHIFT2_SET_CHARS,ue.TEXT_SHIFT3_SET_CHARS=["`","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","{","|","}","~",String.fromCharCode(127)];class de{constructor(){this.rsDecoder=new tt(q.DATA_MATRIX_FIELD_256)}decode(t){const e=new ce(t),r=e.getVersion(),n=e.readCodewords(),i=le.getDataBlocks(n,r);let o=0;for(let t of i)o+=t.getNumDataCodewords();const s=new Uint8Array(o),a=i.length;for(let t=0;ts&&(l=s,h[0]=e,h[1]=r,h[2]=n,h[3]=i),l>a&&(l=a,h[0]=r,h[1]=n,h[2]=i,h[3]=e),l>c&&(h[0]=n,h[1]=i,h[2]=e,h[3]=r),h}detectSolid2(t){let e=t[0],r=t[1],n=t[2],i=t[3],o=this.transitionsBetween(e,i),s=fe.shiftPoint(r,n,4*(o+1)),a=fe.shiftPoint(n,r,4*(o+1));return this.transitionsBetween(s,e)this.transitionsBetween(a,h)+this.transitionsBetween(c,h)?l:h:l:this.isValid(h)?h:null}shiftToModuleCenter(t){let e=t[0],r=t[1],n=t[2],i=t[3],o=this.transitionsBetween(e,i)+1,s=this.transitionsBetween(n,i)+1,a=fe.shiftPoint(e,r,4*s),c=fe.shiftPoint(n,r,4*o);o=this.transitionsBetween(a,i)+1,s=this.transitionsBetween(c,i)+1,1==(1&o)&&(o+=1),1==(1&s)&&(s+=1);let l,h,u=(e.getX()+r.getX()+n.getX()+i.getX())/4,d=(e.getY()+r.getY()+n.getY()+i.getY())/4;return e=fe.moveAway(e,u,d),r=fe.moveAway(r,u,d),n=fe.moveAway(n,u,d),i=fe.moveAway(i,u,d),a=fe.shiftPoint(e,r,4*s),a=fe.shiftPoint(a,i,4*o),l=fe.shiftPoint(r,e,4*s),l=fe.shiftPoint(l,n,4*o),c=fe.shiftPoint(n,i,4*s),c=fe.shiftPoint(c,r,4*o),h=fe.shiftPoint(i,n,4*s),h=fe.shiftPoint(h,e,4*o),[a,l,c,h]}isValid(t){return t.getX()>=0&&t.getX()0&&t.getY()Math.abs(i-r);if(s){let t=r;r=n,n=t,t=i,i=o,o=t}let a=Math.abs(i-r),c=Math.abs(o-n),l=-a/2,h=n0){if(e===o)break;e+=h,l-=a}}return d}}class ge{constructor(){this.decoder=new de}decode(t,e=null){let r,n;if(null!=e&&e.has(C.PURE_BARCODE)){const e=ge.extractPureBits(t.getBlackMatrix());r=this.decoder.decode(e),n=ge.NO_POINTS}else{const e=new fe(t.getBlackMatrix()).detect();r=this.decoder.decode(e.getBits()),n=e.getPoints()}const i=r.getRawBytes(),o=new x(r.getText(),i,8*i.length,n,U.DATA_MATRIX,d.currentTimeMillis()),s=r.getByteSegments();null!=s&&o.putMetadata(W.BYTE_SEGMENTS,s);const a=r.getECLevel();return null!=a&&o.putMetadata(W.ERROR_CORRECTION_LEVEL,a),o}reset(){}static extractPureBits(t){const e=t.getTopLeftOnBit(),r=t.getBottomRightOnBit();if(null==e||null==r)throw new D;const n=this.moduleSize(e,t);let i=e[1];const o=r[1];let s=e[0];const a=(r[0]-s+1)/n,c=(o-i+1)/n;if(a<=0||c<=0)throw new D;const l=n/2;i+=l,s+=l;const h=new N(a,c);for(let e=0;e=we.FOR_BITS.size)throw new c;return we.FOR_BITS.get(t)}}we.FOR_BITS=new Map,we.FOR_VALUE=new Map,we.L=new we(z.L,"L",1),we.M=new we(z.M,"M",0),we.Q=new we(z.Q,"Q",3),we.H=new we(z.H,"H",2);class me{constructor(t){this.errorCorrectionLevel=we.forBits(t>>3&3),this.dataMask=7&t}static numBitsDiffering(t,e){return m.bitCount(t^e)}static decodeFormatInformation(t,e){const r=me.doDecodeFormatInformation(t,e);return null!==r?r:me.doDecodeFormatInformation(t^me.FORMAT_INFO_MASK_QR,e^me.FORMAT_INFO_MASK_QR)}static doDecodeFormatInformation(t,e){let r=Number.MAX_SAFE_INTEGER,n=0;for(const i of me.FORMAT_INFO_DECODE_LOOKUP){const o=i[0];if(o===t||o===e)return new me(i[1]);let s=me.numBitsDiffering(t,o);s40)throw new c;return Ce.VERSIONS[t-1]}static decodeVersionInformation(t){let e=Number.MAX_SAFE_INTEGER,r=0;for(let n=0;n6&&(e.setRegion(t-11,0,3,6),e.setRegion(0,t-11,6,3)),e}toString(){return""+this.versionNumber}}Ce.VERSION_DECODE_INFO=Int32Array.from([31892,34236,39577,42195,48118,51042,55367,58893,63784,68472,70749,76311,79154,84390,87683,92361,96236,102084,102881,110507,110734,117786,119615,126325,127568,133589,136944,141498,145311,150283,152622,158308,161089,167017]),Ce.VERSIONS=[new Ce(1,new Int32Array(0),new pe(7,new Ae(1,19)),new pe(10,new Ae(1,16)),new pe(13,new Ae(1,13)),new pe(17,new Ae(1,9))),new Ce(2,Int32Array.from([6,18]),new pe(10,new Ae(1,34)),new pe(16,new Ae(1,28)),new pe(22,new Ae(1,22)),new pe(28,new Ae(1,16))),new Ce(3,Int32Array.from([6,22]),new pe(15,new Ae(1,55)),new pe(26,new Ae(1,44)),new pe(18,new Ae(2,17)),new pe(22,new Ae(2,13))),new Ce(4,Int32Array.from([6,26]),new pe(20,new Ae(1,80)),new pe(18,new Ae(2,32)),new pe(26,new Ae(2,24)),new pe(16,new Ae(4,9))),new Ce(5,Int32Array.from([6,30]),new pe(26,new Ae(1,108)),new pe(24,new Ae(2,43)),new pe(18,new Ae(2,15),new Ae(2,16)),new pe(22,new Ae(2,11),new Ae(2,12))),new Ce(6,Int32Array.from([6,34]),new pe(18,new Ae(2,68)),new pe(16,new Ae(4,27)),new pe(24,new Ae(4,19)),new pe(28,new Ae(4,15))),new Ce(7,Int32Array.from([6,22,38]),new pe(20,new Ae(2,78)),new pe(18,new Ae(4,31)),new pe(18,new Ae(2,14),new Ae(4,15)),new pe(26,new Ae(4,13),new Ae(1,14))),new Ce(8,Int32Array.from([6,24,42]),new pe(24,new Ae(2,97)),new pe(22,new Ae(2,38),new Ae(2,39)),new pe(22,new Ae(4,18),new Ae(2,19)),new pe(26,new Ae(4,14),new Ae(2,15))),new Ce(9,Int32Array.from([6,26,46]),new pe(30,new Ae(2,116)),new pe(22,new Ae(3,36),new Ae(2,37)),new pe(20,new Ae(4,16),new Ae(4,17)),new pe(24,new Ae(4,12),new Ae(4,13))),new Ce(10,Int32Array.from([6,28,50]),new pe(18,new Ae(2,68),new Ae(2,69)),new pe(26,new Ae(4,43),new Ae(1,44)),new pe(24,new Ae(6,19),new Ae(2,20)),new pe(28,new Ae(6,15),new Ae(2,16))),new Ce(11,Int32Array.from([6,30,54]),new pe(20,new Ae(4,81)),new pe(30,new Ae(1,50),new Ae(4,51)),new pe(28,new Ae(4,22),new Ae(4,23)),new pe(24,new Ae(3,12),new Ae(8,13))),new Ce(12,Int32Array.from([6,32,58]),new pe(24,new Ae(2,92),new Ae(2,93)),new pe(22,new Ae(6,36),new Ae(2,37)),new pe(26,new Ae(4,20),new Ae(6,21)),new pe(28,new Ae(7,14),new Ae(4,15))),new Ce(13,Int32Array.from([6,34,62]),new pe(26,new Ae(4,107)),new pe(22,new Ae(8,37),new Ae(1,38)),new pe(24,new Ae(8,20),new Ae(4,21)),new pe(22,new Ae(12,11),new Ae(4,12))),new Ce(14,Int32Array.from([6,26,46,66]),new pe(30,new Ae(3,115),new Ae(1,116)),new pe(24,new Ae(4,40),new Ae(5,41)),new pe(20,new Ae(11,16),new Ae(5,17)),new pe(24,new Ae(11,12),new Ae(5,13))),new Ce(15,Int32Array.from([6,26,48,70]),new pe(22,new Ae(5,87),new Ae(1,88)),new pe(24,new Ae(5,41),new Ae(5,42)),new pe(30,new Ae(5,24),new Ae(7,25)),new pe(24,new Ae(11,12),new Ae(7,13))),new Ce(16,Int32Array.from([6,26,50,74]),new pe(24,new Ae(5,98),new Ae(1,99)),new pe(28,new Ae(7,45),new Ae(3,46)),new pe(24,new Ae(15,19),new Ae(2,20)),new pe(30,new Ae(3,15),new Ae(13,16))),new Ce(17,Int32Array.from([6,30,54,78]),new pe(28,new Ae(1,107),new Ae(5,108)),new pe(28,new Ae(10,46),new Ae(1,47)),new pe(28,new Ae(1,22),new Ae(15,23)),new pe(28,new Ae(2,14),new Ae(17,15))),new Ce(18,Int32Array.from([6,30,56,82]),new pe(30,new Ae(5,120),new Ae(1,121)),new pe(26,new Ae(9,43),new Ae(4,44)),new pe(28,new Ae(17,22),new Ae(1,23)),new pe(28,new Ae(2,14),new Ae(19,15))),new Ce(19,Int32Array.from([6,30,58,86]),new pe(28,new Ae(3,113),new Ae(4,114)),new pe(26,new Ae(3,44),new Ae(11,45)),new pe(26,new Ae(17,21),new Ae(4,22)),new pe(26,new Ae(9,13),new Ae(16,14))),new Ce(20,Int32Array.from([6,34,62,90]),new pe(28,new Ae(3,107),new Ae(5,108)),new pe(26,new Ae(3,41),new Ae(13,42)),new pe(30,new Ae(15,24),new Ae(5,25)),new pe(28,new Ae(15,15),new Ae(10,16))),new Ce(21,Int32Array.from([6,28,50,72,94]),new pe(28,new Ae(4,116),new Ae(4,117)),new pe(26,new Ae(17,42)),new pe(28,new Ae(17,22),new Ae(6,23)),new pe(30,new Ae(19,16),new Ae(6,17))),new Ce(22,Int32Array.from([6,26,50,74,98]),new pe(28,new Ae(2,111),new Ae(7,112)),new pe(28,new Ae(17,46)),new pe(30,new Ae(7,24),new Ae(16,25)),new pe(24,new Ae(34,13))),new Ce(23,Int32Array.from([6,30,54,78,102]),new pe(30,new Ae(4,121),new Ae(5,122)),new pe(28,new Ae(4,47),new Ae(14,48)),new pe(30,new Ae(11,24),new Ae(14,25)),new pe(30,new Ae(16,15),new Ae(14,16))),new Ce(24,Int32Array.from([6,28,54,80,106]),new pe(30,new Ae(6,117),new Ae(4,118)),new pe(28,new Ae(6,45),new Ae(14,46)),new pe(30,new Ae(11,24),new Ae(16,25)),new pe(30,new Ae(30,16),new Ae(2,17))),new Ce(25,Int32Array.from([6,32,58,84,110]),new pe(26,new Ae(8,106),new Ae(4,107)),new pe(28,new Ae(8,47),new Ae(13,48)),new pe(30,new Ae(7,24),new Ae(22,25)),new pe(30,new Ae(22,15),new Ae(13,16))),new Ce(26,Int32Array.from([6,30,58,86,114]),new pe(28,new Ae(10,114),new Ae(2,115)),new pe(28,new Ae(19,46),new Ae(4,47)),new pe(28,new Ae(28,22),new Ae(6,23)),new pe(30,new Ae(33,16),new Ae(4,17))),new Ce(27,Int32Array.from([6,34,62,90,118]),new pe(30,new Ae(8,122),new Ae(4,123)),new pe(28,new Ae(22,45),new Ae(3,46)),new pe(30,new Ae(8,23),new Ae(26,24)),new pe(30,new Ae(12,15),new Ae(28,16))),new Ce(28,Int32Array.from([6,26,50,74,98,122]),new pe(30,new Ae(3,117),new Ae(10,118)),new pe(28,new Ae(3,45),new Ae(23,46)),new pe(30,new Ae(4,24),new Ae(31,25)),new pe(30,new Ae(11,15),new Ae(31,16))),new Ce(29,Int32Array.from([6,30,54,78,102,126]),new pe(30,new Ae(7,116),new Ae(7,117)),new pe(28,new Ae(21,45),new Ae(7,46)),new pe(30,new Ae(1,23),new Ae(37,24)),new pe(30,new Ae(19,15),new Ae(26,16))),new Ce(30,Int32Array.from([6,26,52,78,104,130]),new pe(30,new Ae(5,115),new Ae(10,116)),new pe(28,new Ae(19,47),new Ae(10,48)),new pe(30,new Ae(15,24),new Ae(25,25)),new pe(30,new Ae(23,15),new Ae(25,16))),new Ce(31,Int32Array.from([6,30,56,82,108,134]),new pe(30,new Ae(13,115),new Ae(3,116)),new pe(28,new Ae(2,46),new Ae(29,47)),new pe(30,new Ae(42,24),new Ae(1,25)),new pe(30,new Ae(23,15),new Ae(28,16))),new Ce(32,Int32Array.from([6,34,60,86,112,138]),new pe(30,new Ae(17,115)),new pe(28,new Ae(10,46),new Ae(23,47)),new pe(30,new Ae(10,24),new Ae(35,25)),new pe(30,new Ae(19,15),new Ae(35,16))),new Ce(33,Int32Array.from([6,30,58,86,114,142]),new pe(30,new Ae(17,115),new Ae(1,116)),new pe(28,new Ae(14,46),new Ae(21,47)),new pe(30,new Ae(29,24),new Ae(19,25)),new pe(30,new Ae(11,15),new Ae(46,16))),new Ce(34,Int32Array.from([6,34,62,90,118,146]),new pe(30,new Ae(13,115),new Ae(6,116)),new pe(28,new Ae(14,46),new Ae(23,47)),new pe(30,new Ae(44,24),new Ae(7,25)),new pe(30,new Ae(59,16),new Ae(1,17))),new Ce(35,Int32Array.from([6,30,54,78,102,126,150]),new pe(30,new Ae(12,121),new Ae(7,122)),new pe(28,new Ae(12,47),new Ae(26,48)),new pe(30,new Ae(39,24),new Ae(14,25)),new pe(30,new Ae(22,15),new Ae(41,16))),new Ce(36,Int32Array.from([6,24,50,76,102,128,154]),new pe(30,new Ae(6,121),new Ae(14,122)),new pe(28,new Ae(6,47),new Ae(34,48)),new pe(30,new Ae(46,24),new Ae(10,25)),new pe(30,new Ae(2,15),new Ae(64,16))),new Ce(37,Int32Array.from([6,28,54,80,106,132,158]),new pe(30,new Ae(17,122),new Ae(4,123)),new pe(28,new Ae(29,46),new Ae(14,47)),new pe(30,new Ae(49,24),new Ae(10,25)),new pe(30,new Ae(24,15),new Ae(46,16))),new Ce(38,Int32Array.from([6,32,58,84,110,136,162]),new pe(30,new Ae(4,122),new Ae(18,123)),new pe(28,new Ae(13,46),new Ae(32,47)),new pe(30,new Ae(48,24),new Ae(14,25)),new pe(30,new Ae(42,15),new Ae(32,16))),new Ce(39,Int32Array.from([6,26,54,82,110,138,166]),new pe(30,new Ae(20,117),new Ae(4,118)),new pe(28,new Ae(40,47),new Ae(7,48)),new pe(30,new Ae(43,24),new Ae(22,25)),new pe(30,new Ae(10,15),new Ae(67,16))),new Ce(40,Int32Array.from([6,30,58,86,114,142,170]),new pe(30,new Ae(19,118),new Ae(6,119)),new pe(28,new Ae(18,47),new Ae(31,48)),new pe(30,new Ae(34,24),new Ae(34,25)),new pe(30,new Ae(20,15),new Ae(61,16)))],function(t){t[t.DATA_MASK_000=0]="DATA_MASK_000",t[t.DATA_MASK_001=1]="DATA_MASK_001",t[t.DATA_MASK_010=2]="DATA_MASK_010",t[t.DATA_MASK_011=3]="DATA_MASK_011",t[t.DATA_MASK_100=4]="DATA_MASK_100",t[t.DATA_MASK_101=5]="DATA_MASK_101",t[t.DATA_MASK_110=6]="DATA_MASK_110",t[t.DATA_MASK_111=7]="DATA_MASK_111"}(G||(G={}));class Ee{constructor(t,e){this.value=t,this.isMasked=e}unmaskBitMatrix(t,e){for(let r=0;r0==(t+e&1)))],[G.DATA_MASK_001,new Ee(G.DATA_MASK_001,((t,e)=>0==(1&t)))],[G.DATA_MASK_010,new Ee(G.DATA_MASK_010,((t,e)=>e%3==0))],[G.DATA_MASK_011,new Ee(G.DATA_MASK_011,((t,e)=>(t+e)%3==0))],[G.DATA_MASK_100,new Ee(G.DATA_MASK_100,((t,e)=>0==(Math.floor(t/2)+Math.floor(e/3)&1)))],[G.DATA_MASK_101,new Ee(G.DATA_MASK_101,((t,e)=>t*e%6==0))],[G.DATA_MASK_110,new Ee(G.DATA_MASK_110,((t,e)=>t*e%6<3))],[G.DATA_MASK_111,new Ee(G.DATA_MASK_111,((t,e)=>0==(t+e+t*e%3&1)))]]);class Ie{constructor(t){const e=t.getHeight();if(e<21||1!=(3&e))throw new E;this.bitMatrix=t}readFormatInformation(){if(null!==this.parsedFormatInfo&&void 0!==this.parsedFormatInfo)return this.parsedFormatInfo;let t=0;for(let e=0;e<6;e++)t=this.copyBit(e,8,t);t=this.copyBit(7,8,t),t=this.copyBit(8,8,t),t=this.copyBit(8,7,t);for(let e=5;e>=0;e--)t=this.copyBit(8,e,t);const e=this.bitMatrix.getHeight();let r=0;const n=e-7;for(let t=e-1;t>=n;t--)r=this.copyBit(8,t,r);for(let t=e-8;t=0;e--)for(let i=t-9;i>=n;i--)r=this.copyBit(i,e,r);let i=Ce.decodeVersionInformation(r);if(null!==i&&i.getDimensionForVersion()===t)return this.parsedVersion=i,i;r=0;for(let e=5;e>=0;e--)for(let i=t-9;i>=n;i--)r=this.copyBit(e,i,r);if(i=Ce.decodeVersionInformation(r),null!==i&&i.getDimensionForVersion()===t)return this.parsedVersion=i,i;throw new E}copyBit(t,e,r){return(this.isMirror?this.bitMatrix.get(e,t):this.bitMatrix.get(t,e))?r<<1|1:r<<1}readCodewords(){const t=this.readFormatInformation(),e=this.readVersion(),r=Ee.values.get(t.getDataMask()),n=this.bitMatrix.getHeight();r.unmaskBitMatrix(this.bitMatrix,n);const i=e.buildFunctionPattern();let o=!0;const s=new Uint8Array(e.getTotalCodewords());let a=0,c=0,l=0;for(let t=n-1;t>0;t-=2){6===t&&t--;for(let e=0;e=0&&s[h].codewords.length!==l;)h--;h++;const u=l-n.getECCodewordsPerBlock();let d=0;for(let e=0;et.available())throw new E;const n=new Uint8Array(2*r);let i=0;for(;r>0;){const e=t.readBits(13);let o=e/96<<8&4294967295|e%96;o+=o<959?41377:42657,n[i]=o>>8&255,n[i+1]=255&o,i+=2,r--}try{e.append(_.decode(n,T.GB2312))}catch(t){throw new E(t)}}static decodeKanjiSegment(t,e,r){if(13*r>t.available())throw new E;const n=new Uint8Array(2*r);let i=0;for(;r>0;){const e=t.readBits(13);let o=e/192<<8&4294967295|e%192;o+=o<7936?33088:49472,n[i]=o>>8,n[i+1]=o,i+=2,r--}try{e.append(_.decode(n,T.SHIFT_JIS))}catch(t){throw new E(t)}}static decodeByteSegment(t,e,r,n,i,o){if(8*r>t.available())throw new E;const s=new Uint8Array(r);for(let e=0;e=Te.ALPHANUMERIC_CHARS.length)throw new E;return Te.ALPHANUMERIC_CHARS[t]}static decodeAlphanumericSegment(t,e,r,n){const i=e.length();for(;r>1;){if(t.available()<11)throw new E;const n=t.readBits(11);e.append(Te.toAlphaNumericChar(Math.floor(n/45))),e.append(Te.toAlphaNumericChar(n%45)),r-=2}if(1===r){if(t.available()<6)throw new E;e.append(Te.toAlphaNumericChar(t.readBits(6)))}if(n)for(let t=i;t=3;){if(t.available()<10)throw new E;const n=t.readBits(10);if(n>=1e3)throw new E;e.append(Te.toAlphaNumericChar(Math.floor(n/100))),e.append(Te.toAlphaNumericChar(Math.floor(n/10)%10)),e.append(Te.toAlphaNumericChar(n%10)),r-=3}if(2===r){if(t.available()<7)throw new E;const r=t.readBits(7);if(r>=100)throw new E;e.append(Te.toAlphaNumericChar(Math.floor(r/10))),e.append(Te.toAlphaNumericChar(r%10))}else if(1===r){if(t.available()<4)throw new E;const r=t.readBits(4);if(r>=10)throw new E;e.append(Te.toAlphaNumericChar(r))}}static parseECIValue(t){const e=t.readBits(8);if(0==(128&e))return 127&e;if(128==(192&e))return(63&e)<<8&4294967295|t.readBits(8);if(192==(224&e))return(31&e)<<16&4294967295|t.readBits(16);throw new E}}Te.ALPHANUMERIC_CHARS="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:",Te.GB2312_SUBSET=1;class ye{constructor(t){this.mirrored=t}isMirrored(){return this.mirrored}applyMirroredCorrection(t){if(!this.mirrored||null===t||t.length<3)return;const e=t[0];t[0]=t[2],t[2]=e}}class Ne{constructor(){this.rsDecoder=new tt(q.QR_CODE_FIELD_256)}decodeBooleanArray(t,e){return this.decodeBitMatrix(N.parseFromBooleanArray(t),e)}decodeBitMatrix(t,e){const r=new Ie(t);let n=null;try{return this.decodeBitMatrixParser(r,e)}catch(t){n=t}try{r.remask(),r.setMirror(!0),r.readVersion(),r.readFormatInformation(),r.mirror();const t=this.decodeBitMatrixParser(r,e);return t.setOther(new ye(!0)),t}catch(t){if(null!==n)throw n;throw t}}decodeBitMatrixParser(t,e){const r=t.readVersion(),n=t.readFormatInformation().getErrorCorrectionLevel(),i=t.readCodewords(),o=Se.getDataBlocks(i,r,n);let s=0;for(const t of o)s+=t.getNumDataCodewords();const a=new Uint8Array(s);let c=0;for(const t of o){const e=t.getCodewords(),r=t.getNumDataCodewords();this.correctErrors(e,r);for(let t=0;t=r)return!1;return!0}crossCheckVertical(t,e,r,n){const i=this.image,o=i.getHeight(),s=this.crossCheckStateCount;s[0]=0,s[1]=0,s[2]=0;let a=t;for(;a>=0&&i.get(e,a)&&s[1]<=r;)s[1]++,a--;if(a<0||s[1]>r)return NaN;for(;a>=0&&!i.get(e,a)&&s[0]<=r;)s[0]++,a--;if(s[0]>r)return NaN;for(a=t+1;ar)return NaN;for(;ar)return NaN;const c=s[0]+s[1]+s[2];return 5*Math.abs(c-n)>=2*n?NaN:this.foundPatternCross(s)?Me.centerFromEnd(s,a):NaN}handlePossibleCenter(t,e,r){const n=t[0]+t[1]+t[2],i=Me.centerFromEnd(t,r),o=this.crossCheckVertical(e,i,2*t[1],n);if(!isNaN(o)){const e=(t[0]+t[1]+t[2])/3;for(const t of this.possibleCenters)if(t.aboutEquals(e,o,i))return t.combineEstimate(o,i,e);const r=new De(i,o,e);this.possibleCenters.push(r),null!==this.resultPointCallback&&void 0!==this.resultPointCallback&&this.resultPointCallback.foundPossibleResultPoint(r)}return null}}class Re extends it{constructor(t,e,r,n){super(t,e),this.estimatedModuleSize=r,this.count=n,void 0===n&&(this.count=1)}getEstimatedModuleSize(){return this.estimatedModuleSize}getCount(){return this.count}aboutEquals(t,e,r){if(Math.abs(e-this.getY())<=t&&Math.abs(r-this.getX())<=t){const e=Math.abs(t-this.estimatedModuleSize);return e<=1||e<=this.estimatedModuleSize}return!1}combineEstimate(t,e,r){const n=this.count+1,i=(this.count*this.getX()+e)/n,o=(this.count*this.getY()+t)/n,s=(this.count*this.estimatedModuleSize+r)/n;return new Re(i,o,s,n)}}class Oe{constructor(t){this.bottomLeft=t[0],this.topLeft=t[1],this.topRight=t[2]}getBottomLeft(){return this.bottomLeft}getTopLeft(){return this.topLeft}getTopRight(){return this.topRight}}class be{constructor(t,e){this.image=t,this.resultPointCallback=e,this.possibleCenters=[],this.crossCheckStateCount=new Int32Array(5),this.resultPointCallback=e}getImage(){return this.image}getPossibleCenters(){return this.possibleCenters}find(t){const e=null!=t&&void 0!==t.get(C.TRY_HARDER),r=null!=t&&void 0!==t.get(C.PURE_BARCODE),n=this.image,i=n.getHeight(),o=n.getWidth();let s=Math.floor(3*i/(4*be.MAX_MODULES));(sc[2]&&(t+=e-c[2]-s,i=o-1)}e=0,c[0]=0,c[1]=0,c[2]=0,c[3]=0,c[4]=0}else c[0]=c[2],c[1]=c[3],c[2]=c[4],c[3]=1,c[4]=0,e=3;else c[++e]++;else c[e]++;be.foundPatternCross(c)&&!0===this.handlePossibleCenter(c,t,o,r)&&(s=c[0],this.hasSkipped&&(a=this.haveMultiplyConfirmedCenters()))}const l=this.selectBestPatterns();return it.orderBestPatterns(l),new Oe(l)}static centerFromEnd(t,e){return e-t[4]-t[3]-t[2]/2}static foundPatternCross(t){let e=0;for(let r=0;r<5;r++){const n=t[r];if(0===n)return!1;e+=n}if(e<7)return!1;const r=e/7,n=r/2;return Math.abs(r-t[0])=o&&e>=o&&s.get(e-o,t-o);)i[2]++,o++;if(t=o&&e>=o&&!s.get(e-o,t-o)&&i[1]<=r;)i[1]++,o++;if(tr)return!1;for(;t>=o&&e>=o&&s.get(e-o,t-o)&&i[0]<=r;)i[0]++,o++;if(i[0]>r)return!1;const a=s.getHeight(),c=s.getWidth();for(o=1;t+o=a||e+o>=c)return!1;for(;t+o=a||e+o>=c||i[3]>=r)return!1;for(;t+o=r)return!1;const l=i[0]+i[1]+i[2]+i[3]+i[4];return Math.abs(l-n)<2*n&&be.foundPatternCross(i)}crossCheckVertical(t,e,r,n){const i=this.image,o=i.getHeight(),s=this.getCrossCheckStateCount();let a=t;for(;a>=0&&i.get(e,a);)s[2]++,a--;if(a<0)return NaN;for(;a>=0&&!i.get(e,a)&&s[1]<=r;)s[1]++,a--;if(a<0||s[1]>r)return NaN;for(;a>=0&&i.get(e,a)&&s[0]<=r;)s[0]++,a--;if(s[0]>r)return NaN;for(a=t+1;a=r)return NaN;for(;a=r)return NaN;const c=s[0]+s[1]+s[2]+s[3]+s[4];return 5*Math.abs(c-n)>=2*n?NaN:be.foundPatternCross(s)?be.centerFromEnd(s,a):NaN}crossCheckHorizontal(t,e,r,n){const i=this.image,o=i.getWidth(),s=this.getCrossCheckStateCount();let a=t;for(;a>=0&&i.get(a,e);)s[2]++,a--;if(a<0)return NaN;for(;a>=0&&!i.get(a,e)&&s[1]<=r;)s[1]++,a--;if(a<0||s[1]>r)return NaN;for(;a>=0&&i.get(a,e)&&s[0]<=r;)s[0]++,a--;if(s[0]>r)return NaN;for(a=t+1;a=r)return NaN;for(;a=r)return NaN;const c=s[0]+s[1]+s[2]+s[3]+s[4];return 5*Math.abs(c-n)>=n?NaN:be.foundPatternCross(s)?be.centerFromEnd(s,a):NaN}handlePossibleCenter(t,e,r,n){const i=t[0]+t[1]+t[2]+t[3]+t[4];let o=be.centerFromEnd(t,r),s=this.crossCheckVertical(e,Math.floor(o),t[2],i);if(!isNaN(s)&&(o=this.crossCheckHorizontal(Math.floor(o),Math.floor(s),t[2],i),!isNaN(o)&&(!n||this.crossCheckDiagonal(Math.floor(s),Math.floor(o),t[2],i)))){const t=i/7;let e=!1;const r=this.possibleCenters;for(let n=0,i=r.length;n=be.CENTER_QUORUM){if(null!=t)return this.hasSkipped=!0,Math.floor((Math.abs(t.getX()-e.getX())-Math.abs(t.getY()-e.getY()))/2);t=e}return 0}haveMultiplyConfirmedCenters(){let t=0,e=0;const r=this.possibleCenters.length;for(const r of this.possibleCenters)r.getCount()>=be.CENTER_QUORUM&&(t++,e+=r.getEstimatedModuleSize());if(t<3)return!1;const n=e/r;let i=0;for(const t of this.possibleCenters)i+=Math.abs(t.getEstimatedModuleSize()-n);return i<=.05*e}selectBestPatterns(){const t=this.possibleCenters.length;if(t<3)throw new D;const e=this.possibleCenters;let r;if(t>3){let n=0,i=0;for(const t of this.possibleCenters){const e=t.getEstimatedModuleSize();n+=e,i+=e*e}r=n/t;let o=Math.sqrt(i/t-r*r);e.sort(((t,e)=>{const n=Math.abs(e.getEstimatedModuleSize()-r),i=Math.abs(t.getEstimatedModuleSize()-r);return ni?1:0}));const s=Math.max(.2*r,o);for(let t=0;t3;t++){const n=e[t];Math.abs(n.getEstimatedModuleSize()-r)>s&&(e.splice(t,1),t--)}}if(e.length>3){let t=0;for(const r of e)t+=r.getEstimatedModuleSize();r=t/e.length,e.sort(((t,e)=>{if(e.getCount()===t.getCount()){const n=Math.abs(e.getEstimatedModuleSize()-r),i=Math.abs(t.getEstimatedModuleSize()-r);return ni?-1:0}return e.getCount()-t.getCount()})),e.splice(3)}return[e[0],e[1],e[2]]}}be.CENTER_QUORUM=2,be.MIN_SKIP=3,be.MAX_MODULES=57;class Be{constructor(t){this.image=t}getImage(){return this.image}getResultPointCallback(){return this.resultPointCallback}detect(t){this.resultPointCallback=null==t?null:t.get(C.NEED_RESULT_POINT_CALLBACK);const e=new be(this.image,this.resultPointCallback).find(t);return this.processFinderPatternInfo(e)}processFinderPatternInfo(t){const e=t.getTopLeft(),r=t.getTopRight(),n=t.getBottomLeft(),i=this.calculateModuleSize(e,r,n);if(i<1)throw new D("No pattern found in proccess finder.");const o=Be.computeDimension(e,r,n,i),s=Ce.getProvisionalVersionForDimension(o),a=s.getDimensionForVersion()-7;let c=null;if(s.getAlignmentPatternCenters().length>0){const t=r.getX()-e.getX()+n.getX(),o=r.getY()-e.getY()+n.getY(),s=1-3/a,l=Math.floor(e.getX()+s*(t-e.getX())),h=Math.floor(e.getY()+s*(o-e.getY()));for(let t=4;t<=16;t<<=1)try{c=this.findAlignmentInRegion(i,l,h,t);break}catch(t){if(!(t instanceof D))throw t}}const l=Be.createTransform(e,r,n,c,o),h=Be.sampleGrid(this.image,l,o);let u;return u=null===c?[n,e,r]:[n,e,r,c],new ot(h,u)}static createTransform(t,e,r,n,i){const o=i-3.5;let s,a,c,l;return null!==n?(s=n.getX(),a=n.getY(),c=o-3,l=c):(s=e.getX()-t.getX()+r.getX(),a=e.getY()-t.getY()+r.getY(),c=o,l=o),lt.quadrilateralToQuadrilateral(3.5,3.5,o,3.5,c,l,3.5,o,t.getX(),t.getY(),e.getX(),e.getY(),s,a,r.getX(),r.getY())}static sampleGrid(t,e,r){return ut.getInstance().sampleGridWithTransform(t,r,r,e)}static computeDimension(t,e,r,n){const i=rt.round(it.distance(t,e)/n),o=rt.round(it.distance(t,r)/n);let s=Math.floor((i+o)/2)+7;switch(3&s){case 0:s++;break;case 2:s--;break;case 3:throw new D("Dimensions could be not found.")}return s}calculateModuleSize(t,e,r){return(this.calculateModuleSizeOneWay(t,e)+this.calculateModuleSizeOneWay(t,r))/2}calculateModuleSizeOneWay(t,e){const r=this.sizeOfBlackWhiteBlackRunBothWays(Math.floor(t.getX()),Math.floor(t.getY()),Math.floor(e.getX()),Math.floor(e.getY())),n=this.sizeOfBlackWhiteBlackRunBothWays(Math.floor(e.getX()),Math.floor(e.getY()),Math.floor(t.getX()),Math.floor(t.getY()));return isNaN(r)?n/7:isNaN(n)?r/7:(r+n)/14}sizeOfBlackWhiteBlackRunBothWays(t,e,r,n){let i=this.sizeOfBlackWhiteBlackRun(t,e,r,n),o=1,s=t-(r-t);s<0?(o=t/(t-s),s=0):s>=this.image.getWidth()&&(o=(this.image.getWidth()-1-t)/(s-t),s=this.image.getWidth()-1);let a=Math.floor(e-(n-e)*o);return o=1,a<0?(o=e/(e-a),a=0):a>=this.image.getHeight()&&(o=(this.image.getHeight()-1-e)/(a-e),a=this.image.getHeight()-1),s=Math.floor(t+(s-t)*o),i+=this.sizeOfBlackWhiteBlackRun(t,e,s,a),i-1}sizeOfBlackWhiteBlackRun(t,e,r,n){const i=Math.abs(n-e)>Math.abs(r-t);if(i){let i=t;t=e,e=i,i=r,r=n,n=i}const o=Math.abs(r-t),s=Math.abs(n-e);let a=-o/2;const c=t0){if(d===n)break;d+=l,a-=o}}return 2===h?rt.distance(r+c,n,t,e):NaN}findAlignmentInRegion(t,e,r,n){const i=Math.floor(n*t),o=Math.max(0,e-i),s=Math.min(this.image.getWidth()-1,e+i);if(s-o<3*t)throw new D("Alignment top exceeds estimated module size.");const a=Math.max(0,r-i),c=Math.min(this.image.getHeight()-1,r+i);if(c-a<3*t)throw new D("Alignment bottom exceeds estimated module size.");return new Me(this.image,o,a,s-o,c-a,t,this.resultPointCallback).find()}}class Le{constructor(){this.decoder=new Ne}getDecoder(){return this.decoder}decode(t,e){let r,n;if(null!=e&&void 0!==e.get(C.PURE_BARCODE)){const i=Le.extractPureBits(t.getBlackMatrix());r=this.decoder.decodeBitMatrix(i,e),n=Le.NO_POINTS}else{const i=new Be(t.getBlackMatrix()).detect(e);r=this.decoder.decodeBitMatrix(i.getBits(),e),n=i.getPoints()}r.getOther()instanceof ye&&r.getOther().applyMirroredCorrection(n);const i=new x(r.getText(),r.getRawBytes(),void 0,n,U.QR_CODE,void 0),o=r.getByteSegments();null!==o&&i.putMetadata(W.BYTE_SEGMENTS,o);const s=r.getECLevel();return null!==s&&i.putMetadata(W.ERROR_CORRECTION_LEVEL,s),r.hasStructuredAppend()&&(i.putMetadata(W.STRUCTURED_APPEND_SEQUENCE,r.getStructuredAppendSequenceNumber()),i.putMetadata(W.STRUCTURED_APPEND_PARITY,r.getStructuredAppendParity())),i}reset(){}static extractPureBits(t){const e=t.getTopLeftOnBit(),r=t.getBottomRightOnBit();if(null===e||null===r)throw new D;const n=this.moduleSize(e,t);let i=e[1],o=r[1],s=e[0],a=r[0];if(s>=a||i>=o)throw new D;if(o-i!=a-s&&(a=s+(o-i),a>=t.getWidth()))throw new D;const c=Math.round((a-s+1)/n),l=Math.round((o-i+1)/n);if(c<=0||l<=0)throw new D;if(l!==c)throw new D;const h=Math.floor(n/2);i+=h,s+=h;const u=s+Math.floor((c-1)*n)-a;if(u>0){if(u>h)throw new D;s-=u}const d=i+Math.floor((l-1)*n)-o;if(d>0){if(d>h)throw new D;i-=d}const f=new N(c,l);for(let e=0;e0;){const s=Fe.findGuardPattern(t,i,--n,r,!1,o,c);if(null==s){n++;break}e=s}s[0]=new it(e[0],n),s[1]=new it(e[1],n),a=!0;break}}let l=n+1;if(a){let n=0,i=Int32Array.from([Math.trunc(s[0].getX()),Math.trunc(s[1].getX())]);for(;lFe.SKIPPED_ROW_COUNT_MAX)break;n++}}l-=n+1,s[2]=new it(i[0],l),s[3]=new it(i[1],l)}return l-n0&&c++o?n-o:o-n;if(c>r)return 1/0;a+=c}return a/i}}Fe.INDEXES_START_PATTERN=Int32Array.from([0,4,1,5]),Fe.INDEXES_STOP_PATTERN=Int32Array.from([6,2,7,3]),Fe.MAX_AVG_VARIANCE=.42,Fe.MAX_INDIVIDUAL_VARIANCE=.8,Fe.START_PATTERN=Int32Array.from([8,1,1,1,1,1,1,3]),Fe.STOP_PATTERN=Int32Array.from([7,1,1,3,1,1,1,2,1]),Fe.MAX_PIXEL_DRIFT=3,Fe.MAX_PATTERN_DRIFT=5,Fe.SKIPPED_ROW_COUNT_MAX=25,Fe.ROW_STEP=5,Fe.BARCODE_MIN_HEIGHT=10;class xe{constructor(t,e){if(0===e.length)throw new c;this.field=t;let r=e.length;if(r>1&&0===e[0]){let t=1;for(;tr.length){let t=e;e=r,r=t}let n=new Int32Array(r.length),i=r.length-e.length;d.arraycopy(r,0,n,0,i);for(let t=i;t=0;e--){let r=this.getCoefficient(e);0!==r&&(r<0?(t.append(" - "),r=-r):t.length()>0&&t.append(" + "),0!==e&&1===r||t.append(r),0!==e&&(1===e?t.append("x"):(t.append("x^"),t.append(e))))}return t.toString()}}class ke{add(t,e){return(t+e)%this.modulus}subtract(t,e){return(this.modulus+t-e)%this.modulus}exp(t){return this.expTable[t]}log(t){if(0===t)throw new c;return this.logTable[t]}inverse(t){if(0===t)throw new K;return this.expTable[this.modulus-this.logTable[t]-1]}multiply(t,e){return 0===t||0===e?0:this.expTable[(this.logTable[t]+this.logTable[e])%(this.modulus-1)]}getSize(){return this.modulus}equals(t){return t===this}}class Ue extends ke{constructor(t,e){super(),this.modulus=t,this.expTable=new Int32Array(t),this.logTable=new Int32Array(t);let r=1;for(let n=0;n0;t--){let r=n.evaluateAt(this.field.exp(t));i[e-t]=r,0!==r&&(o=!0)}if(!o)return 0;let s=this.field.getOne();if(null!=r)for(const e of r){let r=this.field.exp(t.length-1-e),n=new xe(this.field,new Int32Array([this.field.subtract(0,r),1]));s=s.multiply(n)}let a=new xe(this.field,i),c=this.runEuclideanAlgorithm(this.field.buildMonomial(e,1),a,e),l=c[0],u=c[1],d=this.findErrorLocations(l),f=this.findErrorMagnitudes(u,l,d);for(let e=0;e=Math.round(r/2);){let t=n,e=o;if(n=i,o=s,n.isZero())throw h.getChecksumInstance();i=t;let r=this.field.getZero(),a=n.getCoefficient(n.getDegree()),c=this.field.inverse(a);for(;i.getDegree()>=n.getDegree()&&!i.isZero();){let t=i.getDegree()-n.getDegree(),e=this.field.multiply(i.getCoefficient(i.getDegree()),c);r=r.add(this.field.buildMonomial(t,e)),i=i.subtract(n.multiplyByMonomial(t,e))}s=r.multiply(o).subtract(e).negative()}let a=s.getCoefficient(0);if(0===a)throw h.getChecksumInstance();let c=this.field.inverse(a);return[s.multiply(c),i.multiply(c)]}findErrorLocations(t){let e=t.getDegree(),r=new Int32Array(e),n=0;for(let i=1;i0){let e=r?this.topLeft:this.topRight,i=Math.trunc(e.getY()-t);i<0&&(i=0);let s=new it(e.getX(),i);r?n=s:o=s}if(e>0){let t=r?this.bottomLeft:this.bottomRight,n=Math.trunc(t.getY()+e);n>=this.image.getHeight()&&(n=this.image.getHeight()-1);let o=new it(t.getX(),n);r?i=o:s=o}return new Ve(this.image,n,i,o,s)}getMinX(){return this.minX}getMaxX(){return this.maxX}getMinY(){return this.minY}getMaxY(){return this.maxY}getTopLeft(){return this.topLeft}getTopRight(){return this.topRight}getBottomLeft(){return this.bottomLeft}getBottomRight(){return this.bottomRight}}class ze{constructor(t,e,r,n){this.columnCount=t,this.errorCorrectionLevel=n,this.rowCountUpperPart=e,this.rowCountLowerPart=r,this.rowCount=e+r}getColumnCount(){return this.columnCount}getErrorCorrectionLevel(){return this.errorCorrectionLevel}getRowCount(){return this.rowCount}getRowCountUpperPart(){return this.rowCountUpperPart}getRowCountLowerPart(){return this.rowCountLowerPart}}class Ge{constructor(){this.buffer=""}static form(t,e){let r=-1;return t.replace(/%(-)?(0?[0-9]+)?([.][0-9]+)?([#][0-9]+)?([scfpexd%])/g,(function(t,n,i,o,s,a){if("%%"===t)return"%";if(void 0===e[++r])return;t=o?parseInt(o.substr(1)):void 0;let c,l=s?parseInt(s.substr(1)):void 0;switch(a){case"s":c=e[r];break;case"c":c=e[r][0];break;case"f":c=parseFloat(e[r]).toFixed(t);break;case"p":c=parseFloat(e[r]).toPrecision(t);break;case"e":c=parseFloat(e[r]).toExponential(t);break;case"x":c=parseInt(e[r]).toString(l||16);break;case"d":c=parseFloat(parseInt(e[r],l||10).toPrecision(t)).toFixed(0)}c="object"==typeof c?JSON.stringify(c):(+c).toString(l);let h=parseInt(i),u=i&&i[0]+""=="0"?"0":" ";for(;c.length=0&&(e=this.codewords[n],null!=e))return e;if(n=this.imageRowToCodewordIndex(t)+r,nr,getValue:()=>n};i.getValue()>t?(t=i.getValue(),e=[],e.push(i.getKey())):i.getValue()===t&&e.push(i.getKey())}return Pe.toIntArray(e)}getConfidence(t){return this.values.get(t)}}class We extends Ye{constructor(t,e){super(t),this._isLeft=e}setRowNumbers(){for(let t of this.getCodewords())null!=t&&t.setRowNumberAsRowIndicatorColumn()}adjustCompleteIndicatorColumnRowNumbers(t){let e=this.getCodewords();this.setRowNumbers(),this.removeIncorrectCodewords(e,t);let r=this.getBoundingBox(),n=this._isLeft?r.getTopLeft():r.getTopRight(),i=this._isLeft?r.getBottomLeft():r.getBottomRight(),o=this.imageRowToCodewordIndex(Math.trunc(n.getY())),s=this.imageRowToCodewordIndex(Math.trunc(i.getY())),a=-1,c=1,l=0;for(let r=o;r=t.getRowCount()||i>r)e[r]=null;else{let t;t=c>2?(c-2)*i:i;let o=t>=r;for(let n=1;n<=t&&!o;n++)o=null!=e[r-n];o?e[r]=null:(a=n.getRowNumber(),l=1)}}}getRowHeights(){let t=this.getBarcodeMetadata();if(null==t)return null;this.adjustIncompleteIndicatorColumnRowNumbers(t);let e=new Int32Array(t.getRowCount());for(let t of this.getCodewords())if(null!=t){let r=t.getRowNumber();if(r>=e.length)continue;e[r]++}return e}adjustIncompleteIndicatorColumnRowNumbers(t){let e=this.getBoundingBox(),r=this._isLeft?e.getTopLeft():e.getTopRight(),n=this._isLeft?e.getBottomLeft():e.getBottomRight(),i=this.imageRowToCodewordIndex(Math.trunc(r.getY())),o=this.imageRowToCodewordIndex(Math.trunc(n.getY())),s=this.getCodewords(),a=-1;for(let e=i;e=t.getRowCount()?s[e]=null:a=r.getRowNumber())}}getBarcodeMetadata(){let t=this.getCodewords(),e=new Xe,r=new Xe,n=new Xe,i=new Xe;for(let o of t){if(null==o)continue;o.setRowNumberAsRowIndicatorColumn();let t=o.getValue()%30,s=o.getRowNumber();switch(this._isLeft||(s+=2),s%3){case 0:r.setValue(3*t+1);break;case 1:i.setValue(t/3),n.setValue(t%3);break;case 2:e.setValue(t+1)}}if(0===e.getValue().length||0===r.getValue().length||0===n.getValue().length||0===i.getValue().length||e.getValue()[0]<1||r.getValue()[0]+n.getValue()[0]Pe.MAX_ROWS_IN_BARCODE)return null;let o=new ze(e.getValue()[0],r.getValue()[0],n.getValue()[0],i.getValue()[0]);return this.removeIncorrectCodewords(t,o),o}removeIncorrectCodewords(t,e){for(let r=0;re.getRowCount())t[r]=null;else switch(this._isLeft||(o+=2),o%3){case 0:3*i+1!==e.getRowCountUpperPart()&&(t[r]=null);break;case 1:Math.trunc(i/3)===e.getErrorCorrectionLevel()&&i%3===e.getRowCountLowerPart()||(t[r]=null);break;case 2:i+1!==e.getColumnCount()&&(t[r]=null)}}}isLeft(){return this._isLeft}toString(){return"IsLeft: "+this._isLeft+"\n"+super.toString()}}class je{constructor(t,e){this.ADJUST_ROW_NUMBER_SKIP=2,this.barcodeMetadata=t,this.barcodeColumnCount=t.getColumnCount(),this.boundingBox=e,this.detectionResultColumns=new Array(this.barcodeColumnCount+2)}getDetectionResultColumns(){this.adjustIndicatorColumnRowNumbers(this.detectionResultColumns[0]),this.adjustIndicatorColumnRowNumbers(this.detectionResultColumns[this.barcodeColumnCount+1]);let t,e=Pe.MAX_CODEWORDS_IN_BARCODE;do{t=e,e=this.adjustRowNumbersAndGetCount()}while(e>0&&e0&&i0&&(s[0]=r[e-1],s[4]=i[e-1],s[5]=o[e-1]),e>1&&(s[8]=r[e-2],s[10]=i[e-2],s[11]=o[e-2]),e>=1;r=1&e,Qe.RATIOS_TABLE[t]||(Qe.RATIOS_TABLE[t]=new Array(Pe.BARS_IN_MODULE)),Qe.RATIOS_TABLE[t][Pe.BARS_IN_MODULE-n-1]=Math.fround(i/Pe.MODULES_IN_CODEWORD)}}this.bSymbolTableReady=!0}static getDecodedValue(t){let e=Qe.getDecodedCodewordValue(Qe.sampleBitCounts(t));return-1!==e?e:Qe.getClosestDecodedValue(t)}static sampleBitCounts(t){let e=rt.sum(t),r=new Int32Array(Pe.BARS_IN_MODULE),n=0,i=0;for(let o=0;o1)for(let n=0;n=n)break}enew Array(Pe.BARS_IN_MODULE)));class Ke{constructor(){this.segmentCount=-1,this.fileSize=-1,this.timestamp=-1,this.checksum=-1}getSegmentIndex(){return this.segmentIndex}setSegmentIndex(t){this.segmentIndex=t}getFileId(){return this.fileId}setFileId(t){this.fileId=t}getOptionalData(){return this.optionalData}setOptionalData(t){this.optionalData=t}isLastSegment(){return this.lastSegment}setLastSegment(t){this.lastSegment=t}getSegmentCount(){return this.segmentCount}setSegmentCount(t){this.segmentCount=t}getSender(){return this.sender||null}setSender(t){this.sender=t}getAddressee(){return this.addressee||null}setAddressee(t){this.addressee=t}getFileName(){return this.fileName}setFileName(t){this.fileName=t}getFileSize(){return this.fileSize}setFileSize(t){this.fileSize=t}getChecksum(){return this.checksum}setChecksum(t){this.checksum=t}getTimestamp(){return this.timestamp}setTimestamp(t){this.timestamp=t}}class qe{static parseLong(t,e=undefined){return parseInt(t,e)}}class Je extends s{}Je.kind="NullPointerException";class $e{writeBytes(t){this.writeBytesOffset(t,0,t.length)}writeBytesOffset(t,e,r){if(null==t)throw new Je;if(e<0||e>t.length||r<0||e+r>t.length||e+r<0)throw new f;if(0!==r)for(let n=0;n0&&this.grow(t)}grow(t){let e=this.buf.length<<1;if(e-t<0&&(e=t),e<0){if(t<0)throw new tr;e=m.MAX_VALUE}this.buf=w.copyOfUint8Array(this.buf,e)}write(t){this.ensureCapacity(this.count+1),this.buf[this.count]=t,this.count+=1}writeBytesOffset(t,e,r){if(e<0||e>t.length||r<0||e+r-t.length>0)throw new f;this.ensureCapacity(this.count+r),d.arraycopy(t,e,this.buf,this.count,r),this.count+=r}writeTo(t){t.writeBytesOffset(this.buf,0,this.count)}reset(){this.count=0}toByteArray(){return w.copyOfUint8Array(this.buf,this.count)}size(){return this.count}toString(t){return t?"string"==typeof t?this.toString_string(t):this.toString_number(t):this.toString_void()}toString_void(){return new String(this.buf).toString()}toString_string(t){return new String(this.buf).toString()}toString_number(t){return new String(this.buf).toString()}close(){}}function rr(){if("undefined"!=typeof window)return window.BigInt||null;if(void 0!==r.g)return r.g.BigInt||null;if("undefined"!=typeof self)return self.BigInt||null;throw new Error("Can't search globals for BigInt!")}let nr;function ir(t){if(void 0===nr&&(nr=rr()),null===nr)throw new Error("BigInt is not supported!");return nr(t)}!function(t){t[t.ALPHA=0]="ALPHA",t[t.LOWER=1]="LOWER",t[t.MIXED=2]="MIXED",t[t.PUNCT=3]="PUNCT",t[t.ALPHA_SHIFT=4]="ALPHA_SHIFT",t[t.PUNCT_SHIFT=5]="PUNCT_SHIFT"}(X||(X={}));class or{static decode(t,e){let r=new y(""),n=I.ISO8859_1;r.enableDecoding(n);let i=1,o=t[i++],s=new Ke;for(;it[0])throw E.getFormatInstance();let n=new Int32Array(or.NUMBER_OF_SEQUENCE_CODEWORDS);for(let r=0;r0){for(let t=0;t<6;++t)o.write(Number(ir(a)>>ir(8*(5-t))));a=0,s=0}}n===e[0]&&r0){for(let t=0;t<6;++t)o.write(Number(ir(a)>>ir(8*(5-t))));a=0,s=0}}}return i.append(_.decode(o.toByteArray(),r)),n}static numericCompaction(t,e,r){let n=0,i=!1,o=new Int32Array(or.MAX_NUMERIC_CODEWORDS);for(;e0&&(r.append(or.decodeBase900toBase10(o,n)),n=0)}return e}static decodeBase900toBase10(t,e){let r=ir(0);for(let n=0;n@[\\]_`~!\r\t,:\n-.$/\"|*()?{}'",or.MIXED_CHARS="0123456789&\r\t,:#-.$/+%*=^",or.EXP900=rr()?function(){let t=[];t[0]=ir(1);let e=ir(900);t[1]=e;for(let r=2;r<16;r++)t[r]=t[r-1]*e;return t}():[],or.NUMBER_OF_SEQUENCE_CODEWORDS=2;class sr{constructor(){}static decode(t,e,r,n,i,o,s){let a,c=new Ve(t,e,r,n,i),l=null,h=null;for(let r=!0;;r=!1){if(null!=e&&(l=sr.getRowIndicatorColumn(t,c,e,!0,o,s)),null!=n&&(h=sr.getRowIndicatorColumn(t,c,n,!1,o,s)),a=sr.merge(l,h),null==a)throw D.getNotFoundInstance();let i=a.getBoundingBox();if(!r||null==i||!(i.getMinY()c.getMaxY()))break;c=i}a.setBoundingBox(c);let u=a.getBarcodeColumnCount()+1;a.setDetectionResultColumn(0,l),a.setDetectionResultColumn(u,h);let d=null!=l;for(let e=1;e<=u;e++){let r,n=d?e:u-e;if(void 0!==a.getDetectionResultColumn(n))continue;r=0===n||n===u?new We(c,0===n):new Ye(c),a.setDetectionResultColumn(n,r);let i=-1,l=i;for(let e=c.getMinY();e<=c.getMaxY();e++){if(i=sr.getStartColumn(a,n,e,d),i<0||i>c.getMaxX()){if(-1===l)continue;i=l}let h=sr.detectCodeword(t,c.getMinX(),c.getMaxX(),d,i,e,o,s);null!=h&&(r.setCodeword(e,h),l=i,o=Math.min(o,h.getWidth()),s=Math.max(s,h.getWidth()))}}return sr.createDecoderResult(a)}static merge(t,e){if(null==t&&null==e)return null;let r=sr.getBarcodeMetadata(t,e);if(null==r)return null;let n=Ve.merge(sr.adjustBoundingBox(t),sr.adjustBoundingBox(e));return new je(r,n)}static adjustBoundingBox(t){if(null==t)return null;let e=t.getRowHeights();if(null==e)return null;let r=sr.getMax(e),n=0;for(let t of e)if(n+=r-t,t>0)break;let i=t.getCodewords();for(let t=0;n>0&&null==i[t];t++)n--;let o=0;for(let t=e.length-1;t>=0&&(o+=r-e[t],!(e[t]>0));t--);for(let t=i.length-1;o>0&&null==i[t];t--)o--;return t.getBoundingBox().addMissingRows(n,o,t.isLeft())}static getMax(t){let e=-1;for(let r of t)e=Math.max(e,r);return e}static getBarcodeMetadata(t,e){let r,n;return null==t||null==(r=t.getBarcodeMetadata())?null==e?null:e.getBarcodeMetadata():null==e||null==(n=e.getBarcodeMetadata())?r:r.getColumnCount()!==n.getColumnCount()&&r.getErrorCorrectionLevel()!==n.getErrorCorrectionLevel()&&r.getRowCount()!==n.getRowCount()?null:r}static getRowIndicatorColumn(t,e,r,n,i,o){let s=new We(e,n);for(let a=0;a<2;a++){let c=0===a?1:-1,l=Math.trunc(Math.trunc(r.getX()));for(let a=Math.trunc(Math.trunc(r.getY()));a<=e.getMaxY()&&a>=e.getMinY();a+=c){let e=sr.detectCodeword(t,0,t.getWidth(),n,l,a,i,o);null!=e&&(s.setCodeword(a,e),l=n?e.getStartX():e.getEndX())}}return s}static adjustCodewordCount(t,e){let r=e[0][1],n=r.getValue(),i=t.getBarcodeColumnCount()*t.getBarcodeRowCount()-sr.getNumberOfECCodeWords(t.getBarcodeECLevel());if(0===n.length){if(i<1||i>Pe.MAX_CODEWORDS_IN_BARCODE)throw D.getNotFoundInstance();r.setValue(i)}else n[0]!==i&&r.setValue(i)}static createDecoderResult(t){let e=sr.createBarcodeMatrix(t);sr.adjustCodewordCount(t,e);let r=new Array,n=new Int32Array(t.getBarcodeRowCount()*t.getBarcodeColumnCount()),i=[],o=new Array;for(let s=0;s0;){for(let t=0;tnew Array(t.getBarcodeColumnCount()+2)));for(let t=0;t=0){if(n>=e.length)continue;e[n][r].setValue(t.getValue())}}r++}return e}static isValidBarcodeColumn(t,e){return e>=0&&e<=t.getBarcodeColumnCount()+1}static getStartColumn(t,e,r,n){let i=n?1:-1,o=null;if(sr.isValidBarcodeColumn(t,e-i)&&(o=t.getDetectionResultColumn(e-i).getCodeword(r)),null!=o)return n?o.getEndX():o.getStartX();if(o=t.getDetectionResultColumn(e).getCodewordNearby(r),null!=o)return n?o.getStartX():o.getEndX();if(sr.isValidBarcodeColumn(t,e-i)&&(o=t.getDetectionResultColumn(e-i).getCodewordNearby(r)),null!=o)return n?o.getEndX():o.getStartX();let s=0;for(;sr.isValidBarcodeColumn(t,e-i);){e-=i;for(let r of t.getDetectionResultColumn(e).getCodewords())if(null!=r)return(n?r.getEndX():r.getStartX())+i*s*(r.getEndX()-r.getStartX());s++}return n?t.getBoundingBox().getMinX():t.getBoundingBox().getMaxX()}static detectCodeword(t,e,r,n,i,o,s,a){i=sr.adjustCodewordStartColumn(t,e,r,n,i,o);let c,l=sr.getModuleBitCount(t,e,r,n,i,o);if(null==l)return null;let h=rt.sum(l);if(n)c=i+h;else{for(let t=0;t=e)&&c=e:ssr.CODEWORD_SKEW_SIZE)return i;s+=a}a=-a,n=!n}return s}static checkCodewordSkew(t,e,r){return e-sr.CODEWORD_SKEW_SIZE<=t&&t<=r+sr.CODEWORD_SKEW_SIZE}static decodeCodewords(t,e,r){if(0===t.length)throw E.getFormatInstance();let n=1<r/2+sr.MAX_ERRORS||r<0||r>sr.MAX_EC_CODEWORDS)throw h.getChecksumInstance();return sr.errorCorrection.decode(t,r,e)}static verifyCodewordCount(t,e){if(t.length<4)throw E.getFormatInstance();let r=t[0];if(r>t.length)throw E.getFormatInstance();if(0===r){if(!(e>=1;return e}static getCodewordBucketNumber(t){return t instanceof Int32Array?this.getCodewordBucketNumber_Int32Array(t):this.getCodewordBucketNumber_number(t)}static getCodewordBucketNumber_number(t){return sr.getCodewordBucketNumber(sr.getBitCountForCodeword(t))}static getCodewordBucketNumber_Int32Array(t){return(t[0]-t[2]+t[4]-t[6]+9)%9}static toString(t){let e=new Ge;for(let r=0;rt))}static getMaxWidth(t,e){return null==t||null==e?0:Math.trunc(Math.abs(t.getX()-e.getX()))}static getMinWidth(t,e){return null==t||null==e?m.MAX_VALUE:Math.trunc(Math.abs(t.getX()-e.getX()))}static getMaxCodewordWidth(t){return Math.floor(Math.max(Math.max(ar.getMaxWidth(t[0],t[4]),ar.getMaxWidth(t[6],t[2])*Pe.MODULES_IN_CODEWORD/Pe.MODULES_IN_STOP_PATTERN),Math.max(ar.getMaxWidth(t[1],t[5]),ar.getMaxWidth(t[7],t[3])*Pe.MODULES_IN_CODEWORD/Pe.MODULES_IN_STOP_PATTERN)))}static getMinCodewordWidth(t){return Math.floor(Math.min(Math.min(ar.getMinWidth(t[0],t[4]),ar.getMinWidth(t[6],t[2])*Pe.MODULES_IN_CODEWORD/Pe.MODULES_IN_STOP_PATTERN),Math.min(ar.getMinWidth(t[1],t[5]),ar.getMinWidth(t[7],t[3])*Pe.MODULES_IN_CODEWORD/Pe.MODULES_IN_STOP_PATTERN)))}reset(){}}class cr extends s{}cr.kind="ReaderException";class lr{constructor(t,e){this.verbose=!0===t,e&&this.setHints(e)}decode(t,e){return e&&this.setHints(e),this.decodeInternal(t)}decodeWithState(t){return null!==this.readers&&void 0!==this.readers||this.setHints(null),this.decodeInternal(t)}setHints(t){this.hints=t;const r=!e(t)&&!0===t.get(C.TRY_HARDER),n=e(t)?null:t.get(C.POSSIBLE_FORMATS),i=new Array;if(!e(n)){const e=n.some((t=>t===U.UPC_A||t===U.UPC_E||t===U.EAN_13||t===U.EAN_8||t===U.CODABAR||t===U.CODE_39||t===U.CODE_93||t===U.CODE_128||t===U.ITF||t===U.RSS_14||t===U.RSS_EXPANDED));e&&!r&&i.push(new ie(t,this.verbose)),n.includes(U.QR_CODE)&&i.push(new Le),n.includes(U.DATA_MATRIX)&&i.push(new ge),n.includes(U.AZTEC)&&i.push(new gt),n.includes(U.PDF_417)&&i.push(new ar),e&&r&&i.push(new ie(t,this.verbose))}0===i.length&&(r||i.push(new ie(t,this.verbose)),i.push(new Le),i.push(new ge),i.push(new gt),i.push(new ar),r&&i.push(new ie(t,this.verbose))),this.readers=i}reset(){if(null!==this.readers)for(const t of this.readers)t.reset()}decodeInternal(t){if(null===this.readers)throw new cr("No readers where selected, nothing can be read.");for(const e of this.readers)try{return e.decode(t,this.hints)}catch(t){if(t instanceof cr)continue}throw new D("No MultiFormat Readers were able to detect the code.")}}var hr;!function(t){t[t.ERROR_CORRECTION=0]="ERROR_CORRECTION",t[t.CHARACTER_SET=1]="CHARACTER_SET",t[t.DATA_MATRIX_SHAPE=2]="DATA_MATRIX_SHAPE",t[t.MIN_SIZE=3]="MIN_SIZE",t[t.MAX_SIZE=4]="MAX_SIZE",t[t.MARGIN=5]="MARGIN",t[t.PDF417_COMPACT=6]="PDF417_COMPACT",t[t.PDF417_COMPACTION=7]="PDF417_COMPACTION",t[t.PDF417_DIMENSIONS=8]="PDF417_DIMENSIONS",t[t.AZTEC_LAYERS=9]="AZTEC_LAYERS",t[t.QR_VERSION=10]="QR_VERSION"}(hr||(hr={}));var ur=hr;class dr{constructor(t){this.field=t,this.cachedGenerators=[],this.cachedGenerators.push(new Q(t,Int32Array.from([1])))}buildGenerator(t){const e=this.cachedGenerators;if(t>=e.length){let r=e[e.length-1];const n=this.field;for(let i=e.length;i<=t;i++){const t=r.multiply(new Q(n,Int32Array.from([1,n.exp(i-1+n.getGeneratorBase())])));e.push(t),r=t}}return e[t]}encode(t,e){if(0===e)throw new c("No error correction bytes");const r=t.length-e;if(r<=0)throw new c("No data bytes provided");const n=this.buildGenerator(e),i=new Int32Array(r);d.arraycopy(t,0,i,0,r);let o=new Q(this.field,i);o=o.multiplyByMonomial(e,1);const s=o.divide(n)[1].getCoefficients(),a=e-s.length;for(let e=0;e=5&&(r+=fr.N1+(n-5)),n=1,s=i)}n>=5&&(r+=fr.N1+(n-5))}return r}}fr.N1=3,fr.N2=3,fr.N3=40,fr.N4=10;class gr{constructor(t,e){this.width=t,this.height=e;const r=new Array(e);for(let n=0;n!==e;n++)r[n]=new Uint8Array(t);this.bytes=r}getHeight(){return this.height}getWidth(){return this.width}get(t,e){return this.bytes[e][t]}getArray(){return this.bytes}setNumber(t,e,r){this.bytes[e][t]=r}setBoolean(t,e,r){this.bytes[e][t]=r?1:0}clear(t){for(const e of this.bytes)w.fill(e,t)}equals(t){if(!(t instanceof gr))return!1;const e=t;if(this.width!==e.width)return!1;if(this.height!==e.height)return!1;for(let t=0,r=this.height;t>\n"),t.toString()}setMode(t){this.mode=t}setECLevel(t){this.ecLevel=t}setVersion(t){this.version=t}setMaskPattern(t){this.maskPattern=t}setMatrix(t){this.matrix=t}static isValidMaskPattern(t){return t>=0&&t0;){for(6===o&&(o-=1);s>=0&&s=r;)t^=e<=0)for(let t=0;t!==r;t++){const r=n[t];r>=0&&pr.isEmpty(e.get(r,i))&&pr.embedPositionAdjustmentPattern(r-2,i-2,e)}}}}pr.POSITION_DETECTION_PATTERN=Array.from([Int32Array.from([1,1,1,1,1,1,1]),Int32Array.from([1,0,0,0,0,0,1]),Int32Array.from([1,0,1,1,1,0,1]),Int32Array.from([1,0,1,1,1,0,1]),Int32Array.from([1,0,1,1,1,0,1]),Int32Array.from([1,0,0,0,0,0,1]),Int32Array.from([1,1,1,1,1,1,1])]),pr.POSITION_ADJUSTMENT_PATTERN=Array.from([Int32Array.from([1,1,1,1,1]),Int32Array.from([1,0,0,0,1]),Int32Array.from([1,0,1,0,1]),Int32Array.from([1,0,0,0,1]),Int32Array.from([1,1,1,1,1])]),pr.POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE=Array.from([Int32Array.from([-1,-1,-1,-1,-1,-1,-1]),Int32Array.from([6,18,-1,-1,-1,-1,-1]),Int32Array.from([6,22,-1,-1,-1,-1,-1]),Int32Array.from([6,26,-1,-1,-1,-1,-1]),Int32Array.from([6,30,-1,-1,-1,-1,-1]),Int32Array.from([6,34,-1,-1,-1,-1,-1]),Int32Array.from([6,22,38,-1,-1,-1,-1]),Int32Array.from([6,24,42,-1,-1,-1,-1]),Int32Array.from([6,26,46,-1,-1,-1,-1]),Int32Array.from([6,28,50,-1,-1,-1,-1]),Int32Array.from([6,30,54,-1,-1,-1,-1]),Int32Array.from([6,32,58,-1,-1,-1,-1]),Int32Array.from([6,34,62,-1,-1,-1,-1]),Int32Array.from([6,26,46,66,-1,-1,-1]),Int32Array.from([6,26,48,70,-1,-1,-1]),Int32Array.from([6,26,50,74,-1,-1,-1]),Int32Array.from([6,30,54,78,-1,-1,-1]),Int32Array.from([6,30,56,82,-1,-1,-1]),Int32Array.from([6,30,58,86,-1,-1,-1]),Int32Array.from([6,34,62,90,-1,-1,-1]),Int32Array.from([6,28,50,72,94,-1,-1]),Int32Array.from([6,26,50,74,98,-1,-1]),Int32Array.from([6,30,54,78,102,-1,-1]),Int32Array.from([6,28,54,80,106,-1,-1]),Int32Array.from([6,32,58,84,110,-1,-1]),Int32Array.from([6,30,58,86,114,-1,-1]),Int32Array.from([6,34,62,90,118,-1,-1]),Int32Array.from([6,26,50,74,98,122,-1]),Int32Array.from([6,30,54,78,102,126,-1]),Int32Array.from([6,26,52,78,104,130,-1]),Int32Array.from([6,30,56,82,108,134,-1]),Int32Array.from([6,34,60,86,112,138,-1]),Int32Array.from([6,30,58,86,114,142,-1]),Int32Array.from([6,34,62,90,118,146,-1]),Int32Array.from([6,30,54,78,102,126,150]),Int32Array.from([6,24,50,76,102,128,154]),Int32Array.from([6,28,54,80,106,132,158]),Int32Array.from([6,32,58,84,110,136,162]),Int32Array.from([6,26,54,82,110,138,166]),Int32Array.from([6,30,58,86,114,142,170])]),pr.TYPE_INFO_COORDINATES=Array.from([Int32Array.from([8,0]),Int32Array.from([8,1]),Int32Array.from([8,2]),Int32Array.from([8,3]),Int32Array.from([8,4]),Int32Array.from([8,5]),Int32Array.from([8,7]),Int32Array.from([8,8]),Int32Array.from([7,8]),Int32Array.from([5,8]),Int32Array.from([4,8]),Int32Array.from([3,8]),Int32Array.from([2,8]),Int32Array.from([1,8]),Int32Array.from([0,8])]),pr.VERSION_INFO_POLY=7973,pr.TYPE_INFO_POLY=1335,pr.TYPE_INFO_MASK_PATTERN=21522;class Ar{constructor(t,e){this.dataBytes=t,this.errorCorrectionBytes=e}getDataBytes(){return this.dataBytes}getErrorCorrectionBytes(){return this.errorCorrectionBytes}}class Cr{constructor(){}static calculateMaskPenalty(t){return fr.applyMaskPenaltyRule1(t)+fr.applyMaskPenaltyRule2(t)+fr.applyMaskPenaltyRule3(t)+fr.applyMaskPenaltyRule4(t)}static encode(t,e,r=null){let n=Cr.DEFAULT_BYTE_MODE_ENCODING;const i=null!==r&&void 0!==r.get(ur.CHARACTER_SET);i&&(n=r.get(ur.CHARACTER_SET).toString());const o=this.chooseMode(t,n),s=new p;if(o===_e.BYTE&&(i||Cr.DEFAULT_BYTE_MODE_ENCODING!==n)){const t=I.getCharacterSetECIByName(n);void 0!==t&&this.appendECI(t,s)}this.appendModeInfo(o,s);const a=new p;let c;if(this.appendBytes(t,o,a,n),null!==r&&void 0!==r.get(ur.QR_VERSION)){const t=Number.parseInt(r.get(ur.QR_VERSION).toString(),10);c=Ce.getVersionForNumber(t);const n=this.calculateBitsNeeded(o,s,a,c);if(!this.willFit(n,c,e))throw new mr("Data too big for requested version")}else c=this.recommendVersion(e,o,s,a);const l=new p;l.appendBitArray(s);const h=o===_e.BYTE?a.getSizeInBytes():t.length;this.appendLengthInfo(h,c,o,l),l.appendBitArray(a);const u=c.getECBlocksForLevel(e),d=c.getTotalCodewords()-u.getTotalECCodewords();this.terminateBits(d,l);const f=this.interleaveWithECBytes(l,c.getTotalCodewords(),d,u.getNumBlocks()),g=new wr;g.setECLevel(e),g.setMode(o),g.setVersion(c);const w=c.getDimensionForVersion(),m=new gr(w,w),A=this.chooseMaskPattern(f,e,c,m);return g.setMaskPattern(A),pr.buildMatrix(f,e,c,A,m),g.setMatrix(m),g}static recommendVersion(t,e,r,n){const i=this.calculateBitsNeeded(e,r,n,Ce.getVersionForNumber(1)),o=this.chooseVersion(i,t),s=this.calculateBitsNeeded(e,r,n,o);return this.chooseVersion(s,t)}static calculateBitsNeeded(t,e,r,n){return e.getSize()+t.getCharacterCountBits(n)+r.getSize()}static getAlphanumericCode(t){return t159)&&(r<224||r>235))return!1}return!0}static chooseMaskPattern(t,e,r,n){let i=Number.MAX_SAFE_INTEGER,o=-1;for(let s=0;s=(t+7)/8}static terminateBits(t,e){const r=8*t;if(e.getSize()>r)throw new mr("data bits cannot fit in the QR Code"+e.getSize()+" > "+r);for(let t=0;t<4&&e.getSize()0)for(let t=n;t<8;t++)e.appendBit(!1);const i=t-e.getSizeInBytes();for(let t=0;t=r)throw new mr("Block ID too large");const s=t%r,a=r-s,c=Math.floor(t/r),l=c+1,h=Math.floor(e/r),u=h+1,d=c-h,f=l-u;if(d!==f)throw new mr("EC bytes mismatch");if(r!==a+s)throw new mr("RS blocks mismatch");if(t!==(h+d)*a+(u+f)*s)throw new mr("Total bytes mismatch");n=1<=0&&e<=9}static appendNumericBytes(t,e){const r=t.length;let n=0;for(;n=33088&&n<=40956?i=n-33088:n>=57408&&n<=60351&&(i=n-49472),-1===i)throw new mr("Invalid byte sequence");const o=192*(i>>8)+(255&i);e.appendBits(o,13)}}static appendECI(t,e){e.appendBits(_e.ECI.getBits(),4),e.appendBits(t.getValue(),8)}}Cr.ALPHANUMERIC_TABLE=Int32Array.from([-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,36,-1,-1,-1,37,38,-1,-1,-1,-1,39,40,-1,41,42,43,0,1,2,3,4,5,6,7,8,9,44,-1,-1,-1,-1,-1,-1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,-1,-1,-1,-1,-1]),Cr.DEFAULT_BYTE_MODE_ENCODING=I.UTF8.getName();class Er{write(t,e,r,n=null){if(0===t.length)throw new c("Found empty contents");if(e<0||r<0)throw new c("Requested dimensions are too small: "+e+"x"+r);let i=we.L,o=Er.QUIET_ZONE_SIZE;null!==n&&(void 0!==n.get(ur.ERROR_CORRECTION)&&(i=we.fromString(n.get(ur.ERROR_CORRECTION).toString())),void 0!==n.get(ur.MARGIN)&&(o=Number.parseInt(n.get(ur.MARGIN).toString(),10)));const s=Cr.encode(t,i,n);return this.renderResult(s,e,r,o)}writeToDom(t,e,r,n,i=null){"string"==typeof t&&(t=document.querySelector(t));const o=this.write(e,r,n,i);t&&t.appendChild(o)}renderResult(t,e,r,n){const i=t.getMatrix();if(null===i)throw new $;const o=i.getWidth(),s=i.getHeight(),a=o+2*n,c=s+2*n,l=Math.max(e,a),h=Math.max(r,c),u=Math.min(Math.floor(l/a),Math.floor(h/c)),d=Math.floor((l-o*u)/2),f=Math.floor((h-s*u)/2),g=this.createSVGElement(l,h);for(let t=0,e=f;te||i+s>r)throw new c("Crop rectangle does not fit within image data.");a&&this.reverseHorizontal(o,s)}getRow(t,e){if(t<0||t>=this.getHeight())throw new c("Requested row is outside the image: "+t);const r=this.getWidth();(null==e||e.length>16&255,o=r>>7&510,s=255&r;i[e]=(n+o+s)/4&255}this.luminances=i}else this.luminances=t;if(void 0===n&&(this.dataWidth=e),void 0===i&&(this.dataHeight=r),void 0===o&&(this.left=0),void 0===s&&(this.top=0),this.left+e>this.dataWidth||this.top+r>this.dataHeight)throw new c("Crop rectangle does not fit within image data.")}getRow(t,e){if(t<0||t>=this.getHeight())throw new c("Requested row is outside the image: "+t);const r=this.getWidth();(null==e||e.length"}}class Or extends Rr{constructor(t,e,r){super(t,0,0),this.binaryShiftStart=e,this.binaryShiftByteCount=r}appendTo(t,e){for(let r=0;r62?t.appendBits(this.binaryShiftByteCount-31,16):0===r?t.appendBits(Math.min(this.binaryShiftByteCount,31),5):t.appendBits(this.binaryShiftByteCount-31,5)),t.appendBits(e[this.binaryShiftStart+r],8)}addBinaryShift(t,e){return new Or(this,t,e)}toString(){return"<"+this.binaryShiftStart+"::"+(this.binaryShiftStart+this.binaryShiftByteCount-1)+">"}}function br(t,e,r){return new Rr(t,e,r)}const Br=["UPPER","LOWER","DIGIT","MIXED","PUNCT"],Lr=0,Pr=1,vr=2,Fr=3,xr=4,kr=new Rr(null,0,0),Ur=[Int32Array.from([0,327708,327710,327709,656318]),Int32Array.from([590318,0,327710,327709,656318]),Int32Array.from([262158,590300,0,590301,932798]),Int32Array.from([327709,327708,656318,0,327710]),Int32Array.from([327711,656380,656382,656381,0])];const Hr=function(t){for(let e of t)w.fill(e,-1);return t[Lr][xr]=0,t[Pr][xr]=0,t[Pr][Lr]=28,t[Fr][xr]=0,t[vr][xr]=0,t[vr][Lr]=15,t}(w.createInt32Array(6,6));class Vr{constructor(t,e,r,n){this.token=t,this.mode=e,this.binaryShiftByteCount=r,this.bitCount=n}getMode(){return this.mode}getToken(){return this.token}getBinaryShiftByteCount(){return this.binaryShiftByteCount}getBitCount(){return this.bitCount}latchAndAppend(t,e){let r=this.bitCount,n=this.token;if(t!==this.mode){let e=Ur[this.mode][t];n=br(n,65535&e,e>>16),r+=e>>16}let i=t===vr?4:5;return n=br(n,e,i),new Vr(n,t,0,r+i)}shiftAndAppend(t,e){let r=this.token,n=this.mode===vr?4:5;return r=br(r,Hr[this.mode][t],n),r=br(r,e,5),new Vr(r,this.mode,0,this.bitCount+n+5)}addBinaryShiftChar(t){let e=this.token,r=this.mode,n=this.bitCount;if(this.mode===xr||this.mode===vr){let t=Ur[r][Lr];e=br(e,65535&t,t>>16),n+=t>>16,r=Lr}let i=0===this.binaryShiftByteCount||31===this.binaryShiftByteCount?18:62===this.binaryShiftByteCount?9:8,o=new Vr(e,r,this.binaryShiftByteCount+1,n+i);return 2078===o.binaryShiftByteCount&&(o=o.endBinaryShift(t+1)),o}endBinaryShift(t){if(0===this.binaryShiftByteCount)return this;let e=this.token;return e=function(t,e,r){return new Or(t,e,r)}(e,t-this.binaryShiftByteCount,this.binaryShiftByteCount),new Vr(e,this.mode,0,this.bitCount)}isBetterThanOrEqualTo(t){let e=this.bitCount+(Ur[this.mode][t.mode]>>16);return this.binaryShiftByteCountt.binaryShiftByteCount&&t.binaryShiftByteCount>0&&(e+=10),e<=t.bitCount}toBitArray(t){let e=[];for(let r=this.endBinaryShift(t.length).token;null!==r;r=r.getPrevious())e.unshift(r);let r=new p;for(const n of e)n.appendTo(r,t);return r}toString(){return T.format("%s bits=%d bytes=%d",Br[this.mode],this.bitCount,this.binaryShiftByteCount)}static calculateBinaryShiftCost(t){return t.binaryShiftByteCount>62?21:t.binaryShiftByteCount>31?20:t.binaryShiftByteCount>0?10:0}}Vr.INITIAL_STATE=new Vr(kr,Lr,0,0);const zr=function(t){const e=T.getCharCode(" "),r=T.getCharCode("."),n=T.getCharCode(",");t[Lr][e]=1;const i=T.getCharCode("Z"),o=T.getCharCode("A");for(let e=o;e<=i;e++)t[Lr][e]=e-o+2;t[Pr][e]=1;const s=T.getCharCode("z"),a=T.getCharCode("a");for(let e=a;e<=s;e++)t[Pr][e]=e-a+2;t[vr][e]=1;const c=T.getCharCode("9"),l=T.getCharCode("0");for(let e=l;e<=c;e++)t[vr][e]=e-l+2;t[vr][n]=12,t[vr][r]=13;const h=["\0"," ","","","","","","","","\b","\t","\n","\v","\f","\r","","","","","","@","\\","^","_","`","|","~",""];for(let e=0;e","?","[","]","{","}"];for(let e=0;e0&&(t[xr][T.getCharCode(u[e])]=e);return t}(w.createInt32Array(5,256));class Gr{constructor(t){this.text=t}encode(){const t=T.getCharCode(" "),e=T.getCharCode("\n");let r=Dr.singletonList(Vr.INITIAL_STATE);for(let n=0;n0?(r=Gr.updateStateListForPair(r,n,i),n++):r=this.updateStateListForChar(r,n)}return Dr.min(r,((t,e)=>t.getBitCount()-e.getBitCount())).toBitArray(this.text)}updateStateListForChar(t,e){const r=[];for(let n of t)this.updateStateForChar(n,e,r);return Gr.simplifyStates(r)}updateStateForChar(t,e,r){let n=255&this.text[e],i=zr[t.getMode()][n]>0,o=null;for(let s=0;s<=xr;s++){let a=zr[s][n];if(a>0){if(null==o&&(o=t.endBinaryShift(e)),!i||s===t.getMode()||s===vr){const t=o.latchAndAppend(s,a);r.push(t)}if(!i&&Hr[t.getMode()][s]>=0){const t=o.shiftAndAppend(s,a);r.push(t)}}}if(t.getBinaryShiftByteCount()>0||0===zr[t.getMode()][n]){let n=t.addBinaryShiftChar(e);r.push(n)}}static updateStateListForPair(t,e,r){const n=[];for(let i of t)this.updateStateForPair(i,e,r,n);return this.simplifyStates(n)}static updateStateForPair(t,e,r,n){let i=t.endBinaryShift(e);if(n.push(i.latchAndAppend(xr,r)),t.getMode()!==xr&&n.push(i.shiftAndAppend(xr,r)),3===r||4===r){let t=i.latchAndAppend(vr,16-r).latchAndAppend(vr,1);n.push(t)}if(t.getBinaryShiftByteCount()>0){let r=t.addBinaryShiftChar(e).addBinaryShiftChar(e+1);n.push(r)}}static simplifyStates(t){let e=[];for(const r of t){let t=!0;for(const n of e){if(n.isBetterThanOrEqualTo(r)){t=!1;break}r.isBetterThanOrEqualTo(n)&&(e=e.filter((t=>t!==n)))}t&&e.push(r)}return e}}class Yr{constructor(){}static encodeBytes(t){return Yr.encode(t,Yr.DEFAULT_EC_PERCENT,Yr.DEFAULT_AZTEC_LAYERS)}static encode(t,e,r){let n,i,o,s,a,l=new Gr(t).encode(),h=m.truncDivision(l.getSize()*e,100)+11,u=l.getSize()+h;if(r!==Yr.DEFAULT_AZTEC_LAYERS){if(n=r<0,i=Math.abs(r),i>(n?Yr.MAX_NB_BITS_COMPACT:Yr.MAX_NB_BITS))throw new c(T.format("Illegal value %s for layers",r));o=Yr.totalBitsInLayer(i,n),s=Yr.WORD_SIZE[i];let t=o-o%s;if(a=Yr.stuffBits(l,s),a.getSize()+h>t)throw new c("Data to large for user specified layer");if(n&&a.getSize()>64*s)throw new c("Data to large for user specified layer")}else{s=0,a=null;for(let t=0;;t++){if(t>Yr.MAX_NB_BITS)throw new c("Data too large for an Aztec code");if(n=t<=3,i=n?t+1:t,o=Yr.totalBitsInLayer(i,n),u>o)continue;null!=a&&s===Yr.WORD_SIZE[i]||(s=Yr.WORD_SIZE[i],a=Yr.stuffBits(l,s));let e=o-o%s;if(!(n&&a.getSize()>64*s)&&a.getSize()+h<=e)break}}let d,f=Yr.generateCheckWords(a,o,s),g=a.getSize()/s,w=Yr.generateModeMessage(n,i,g),p=(n?11:14)+4*i,A=new Int32Array(p);if(n){d=p;for(let t=0;t=n||t.get(o+r))&&(s|=1<{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};(()=>{"use strict";var t;r.r(n),r.d(n,{Html5Qrcode:()=>W,Html5QrcodeScanType:()=>i,Html5QrcodeScanner:()=>ft,Html5QrcodeScannerState:()=>w,Html5QrcodeSupportedFormats:()=>t}),function(t){t[t.QR_CODE=0]="QR_CODE",t[t.AZTEC=1]="AZTEC",t[t.CODABAR=2]="CODABAR",t[t.CODE_39=3]="CODE_39",t[t.CODE_93=4]="CODE_93",t[t.CODE_128=5]="CODE_128",t[t.DATA_MATRIX=6]="DATA_MATRIX",t[t.MAXICODE=7]="MAXICODE",t[t.ITF=8]="ITF",t[t.EAN_13=9]="EAN_13",t[t.EAN_8=10]="EAN_8",t[t.PDF_417=11]="PDF_417",t[t.RSS_14=12]="RSS_14",t[t.RSS_EXPANDED=13]="RSS_EXPANDED",t[t.UPC_A=14]="UPC_A",t[t.UPC_E=15]="UPC_E",t[t.UPC_EAN_EXTENSION=16]="UPC_EAN_EXTENSION"}(t||(t={}));var e,i,o=new Map([[t.QR_CODE,"QR_CODE"],[t.AZTEC,"AZTEC"],[t.CODABAR,"CODABAR"],[t.CODE_39,"CODE_39"],[t.CODE_93,"CODE_93"],[t.CODE_128,"CODE_128"],[t.DATA_MATRIX,"DATA_MATRIX"],[t.MAXICODE,"MAXICODE"],[t.ITF,"ITF"],[t.EAN_13,"EAN_13"],[t.EAN_8,"EAN_8"],[t.PDF_417,"PDF_417"],[t.RSS_14,"RSS_14"],[t.RSS_EXPANDED,"RSS_EXPANDED"],[t.UPC_A,"UPC_A"],[t.UPC_E,"UPC_E"],[t.UPC_EAN_EXTENSION,"UPC_EAN_EXTENSION"]]);function s(e){return Object.values(t).includes(e)}!function(t){t[t.UNKNOWN=0]="UNKNOWN",t[t.URL=1]="URL"}(e||(e={})),function(t){t[t.SCAN_TYPE_CAMERA=0]="SCAN_TYPE_CAMERA",t[t.SCAN_TYPE_FILE=1]="SCAN_TYPE_FILE"}(i||(i={}));var a,c=function(){function t(){}return t.GITHUB_PROJECT_URL="https://github.com/mebjas/html5-qrcode",t.SCAN_DEFAULT_FPS=2,t.DEFAULT_DISABLE_FLIP=!1,t.DEFAULT_REMEMBER_LAST_CAMERA_USED=!0,t.DEFAULT_SUPPORTED_SCAN_TYPE=[i.SCAN_TYPE_CAMERA,i.SCAN_TYPE_FILE],t}(),l=function(){function t(t,e){this.format=t,this.formatName=e}return t.prototype.toString=function(){return this.formatName},t.create=function(e){if(!o.has(e))throw"".concat(e," not in html5QrcodeSupportedFormatsTextMap");return new t(e,o.get(e))},t}(),h=function(){function t(){}return t.createFromText=function(t){return{decodedText:t,result:{text:t}}},t.createFromQrcodeResult=function(t){return{decodedText:t.text,result:t}},t}();!function(t){t[t.UNKWOWN_ERROR=0]="UNKWOWN_ERROR",t[t.IMPLEMENTATION_ERROR=1]="IMPLEMENTATION_ERROR",t[t.NO_CODE_FOUND_ERROR=2]="NO_CODE_FOUND_ERROR"}(a||(a={}));var u=function(){function t(){}return t.createFrom=function(t){return{errorMessage:t,type:a.UNKWOWN_ERROR}},t}(),d=function(){function t(t){this.verbose=t}return t.prototype.log=function(t){this.verbose&&console.log(t)},t.prototype.warn=function(t){this.verbose&&console.warn(t)},t.prototype.logError=function(t,e){(this.verbose||!0===e)&&console.error(t)},t.prototype.logErrors=function(t){if(0===t.length)throw"Logger#logError called without arguments";this.verbose&&console.error(t)},t}();function f(t){return null==t}var g,w,m=function(){function t(){}return t.codeParseError=function(t){return"QR code parse error, error = ".concat(t)},t.errorGettingUserMedia=function(t){return"Error getting userMedia, error = ".concat(t)},t.onlyDeviceSupportedError=function(){return"The device doesn't support navigator.mediaDevices , only supported cameraIdOrConfig in this case is deviceId parameter (string)."},t.cameraStreamingNotSupported=function(){return"Camera streaming not supported by the browser."},t.unableToQuerySupportedDevices=function(){return"Unable to query supported devices, unknown error."},t.insecureContextCameraQueryError=function(){return"Camera access is only supported in secure context like https or localhost."},t.scannerPaused=function(){return"Scanner paused"},t}(),p=function(){function t(){}return t.scanningStatus=function(){return"Scanning"},t.idleStatus=function(){return"Idle"},t.errorStatus=function(){return"Error"},t.permissionStatus=function(){return"Permission"},t.noCameraFoundErrorStatus=function(){return"No Cameras"},t.lastMatch=function(t){return"Last Match: ".concat(t)},t.codeScannerTitle=function(){return"Code Scanner"},t.cameraPermissionTitle=function(){return"Request Camera Permissions"},t.cameraPermissionRequesting=function(){return"Requesting camera permissions..."},t.noCameraFound=function(){return"No camera found"},t.scanButtonStopScanningText=function(){return"Stop Scanning"},t.scanButtonStartScanningText=function(){return"Start Scanning"},t.torchOnButton=function(){return"Switch On Torch"},t.torchOffButton=function(){return"Switch Off Torch"},t.torchOnFailedMessage=function(){return"Failed to turn on torch"},t.torchOffFailedMessage=function(){return"Failed to turn off torch"},t.scanButtonScanningStarting=function(){return"Launching Camera..."},t.textIfCameraScanSelected=function(){return"Scan an Image File"},t.textIfFileScanSelected=function(){return"Scan using camera directly"},t.selectCamera=function(){return"Select Camera"},t.fileSelectionChooseImage=function(){return"Choose Image"},t.fileSelectionChooseAnother=function(){return"Choose Another"},t.fileSelectionNoImageSelected=function(){return"No image choosen"},t.anonymousCameraPrefix=function(){return"Anonymous Camera"},t.dragAndDropMessage=function(){return"Or drop an image to scan"},t.dragAndDropMessageOnlyImages=function(){return"Or drop an image to scan (other files not supported)"},t.zoom=function(){return"zoom"},t.loadingImage=function(){return"Loading image..."},t.cameraScanAltText=function(){return"Camera based scan"},t.fileScanAltText=function(){return"Fule based scan"},t}(),A=function(){function t(){}return t.poweredBy=function(){return"Powered by "},t.reportIssues=function(){return"Report issues"},t}(),C=function(){function t(){}return t.isMediaStreamConstraintsValid=function(t,e){if("object"!=typeof t){var r=typeof t;return e.logError("videoConstraints should be of type object, the "+"object passed is of type ".concat(r,"."),!0),!1}for(var n=new Set(["autoGainControl","channelCount","echoCancellation","latency","noiseSuppression","sampleRate","sampleSize","volume"]),i=0,o=Object.keys(t);i0&&i[i.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]r&&(r=s,e=o)}if(!e)throw"No largest barcode found";return e},e.prototype.createBarcodeDetectorFormats=function(t){for(var e=[],r=0,n=t;r0&&i[i.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]0&&i[i.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]=n&&(t.isClosed=!0,t.parentElement.removeChild(t.surface),e())}))}))},t.prototype.getCapabilities=function(){return new B(this.getFirstTrackOrFail())},t}(),P=function(){function t(t){this.mediaStream=t}return t.prototype.render=function(t,e,r){return D(this,void 0,void 0,(function(){return M(this,(function(n){return[2,L.create(t,this.mediaStream,e,r)]}))}))},t.create=function(e){return D(this,void 0,void 0,(function(){var r;return M(this,(function(n){switch(n.label){case 0:if(!navigator.mediaDevices)throw"navigator.mediaDevices not supported";return r={audio:!1,video:e},[4,navigator.mediaDevices.getUserMedia(r)];case 1:return[2,new t(n.sent())]}}))}))},t}(),v=function(t,e,r,n){return new(r||(r=Promise))((function(i,o){function s(t){try{c(n.next(t))}catch(t){o(t)}}function a(t){try{c(n.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?i(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}c((n=n.apply(t,e||[])).next())}))},F=function(t,e){var r,n,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function a(a){return function(c){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;o&&(o=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(i=2&a[0]?n.return:a[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,a[1])).done)return i;switch(n=0,i&&(a=[2&a[0],i.value]),a[0]){case 0:case 1:i=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!((i=(i=s.trys).length>0&&i[i.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]0&&i[i.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]t&&(this.logger.warn("`qrbox.width` or `qrbox` is larger than the width of the root element. The width will be truncated to the width of root element."),i=t),i)},e.prototype.validateQrboxConfig=function(t){if("number"!=typeof t&&"function"!=typeof t&&(void 0===t.width||void 0===t.height))throw"Invalid instance of QrDimensions passed for 'config.qrbox'. Both 'width' and 'height' should be set."},e.prototype.toQrdimensions=function(t,e,r){if("number"==typeof r)return{width:r,height:r};if("function"==typeof r)try{return r(t,e)}catch(t){throw new Error("qrbox config was passed as a function but it failed with unknown error"+t)}return r},e.prototype.setupUi=function(t,e,r){r.isShadedBoxEnabled()&&this.validateQrboxSize(t,e,r);var n=f(r.qrbox)?{width:t,height:e}:r.qrbox;this.validateQrboxConfig(n);var i=this.toQrdimensions(t,e,n);i.height>e&&this.logger.warn("[Html5Qrcode] config.qrbox has height that isgreater than the height of the video stream. Shading will be ignored");var o=r.isShadedBoxEnabled()&&i.height<=e,s={x:0,y:0,width:t,height:e},a=o?this.getShadedRegionBounds(t,e,i):s,c=this.createCanvasElement(a.width,a.height),l=c.getContext("2d",{willReadFrequently:!0});l.canvas.width=a.width,l.canvas.height=a.height,this.element.append(c),o&&this.possiblyInsertShadingElement(this.element,t,e,i),this.createScannerPausedUiElement(this.element),this.qrRegion=a,this.context=l,this.canvasElement=c},e.prototype.createScannerPausedUiElement=function(t){var e=document.createElement("div");e.innerText=m.scannerPaused(),e.style.display="none",e.style.position="absolute",e.style.top="0px",e.style.zIndex="1",e.style.background="rgba(9, 9, 9, 0.46)",e.style.color="#FFECEC",e.style.textAlign="center",e.style.width="100%",t.appendChild(e),this.scannerPausedUiElement=e},e.prototype.scanContext=function(t,e){var r=this;return this.stateManagerProxy.isPaused()?Promise.resolve(!1):this.qrcode.decodeAsync(this.canvasElement).then((function(e){return t(e.text,h.createFromQrcodeResult(e)),r.possiblyUpdateShaders(!0),!0})).catch((function(t){r.possiblyUpdateShaders(!1);var n=m.codeParseError(t);return e(n,u.createFrom(n)),!1}))},e.prototype.foreverScan=function(t,e,r){var n=this;if(this.shouldScan&&this.renderedCamera){var i=this.renderedCamera.getSurface(),o=i.videoWidth/i.clientWidth,s=i.videoHeight/i.clientHeight;if(!this.qrRegion)throw"qrRegion undefined when localMediaStream is ready.";var a=this.qrRegion.width*o,c=this.qrRegion.height*s,l=this.qrRegion.x*o,h=this.qrRegion.y*s;this.context.drawImage(i,l,h,a,c,0,0,this.qrRegion.width,this.qrRegion.height);var u=function(){n.foreverScanTimeout=setTimeout((function(){n.foreverScan(t,e,r)}),n.getTimeoutFps(t.fps))};this.scanContext(e,r).then((function(i){i||!0===t.disableFlip?u():(n.context.translate(n.context.canvas.width,0),n.context.scale(-1,1),n.scanContext(e,r).finally((function(){u()})))})).catch((function(t){n.logger.logError("Error happend while scanning context",t),u()}))}},e.prototype.createVideoConstraints=function(t){if("string"==typeof t)return{deviceId:{exact:t}};if("object"==typeof t){var e="facingMode",r="deviceId",n={user:!0,environment:!0},i="exact",o=function(t){if(t in n)return!0;throw"config has invalid 'facingMode' value = "+"'".concat(t,"'")},s=Object.keys(t);if(1!==s.length)throw"'cameraIdOrConfig' object should have exactly 1 key,"+" if passed as an object, found ".concat(s.length," keys");var a=Object.keys(t)[0];if(a!==e&&a!==r)throw"Only '".concat(e,"' and '").concat(r,"' ")+" are supported for 'cameraIdOrConfig'";if(a!==e){var c=t.deviceId;if("string"==typeof c)return{deviceId:c};if("object"==typeof c){if(i in c)return{deviceId:{exact:c["".concat(i)]}};throw"'deviceId' should be string or object with"+" ".concat(i," as key.")}throw"Invalid type of 'deviceId' = ".concat(typeof c)}var l=t.facingMode;if("string"==typeof l){if(o(l))return{facingMode:l}}else{if("object"!=typeof l)throw"Invalid type of 'facingMode' = ".concat(typeof l);if(!(i in l))throw"'facingMode' should be string or object with"+" ".concat(i," as key.");if(o(l["".concat(i)]))return{facingMode:{exact:l["".concat(i)]}}}}throw"Invalid type of 'cameraIdOrConfig' = ".concat(typeof t)},e.prototype.computeCanvasDrawConfig=function(t,e,r,n){if(t<=r&&e<=n)return{x:(r-t)/2,y:(n-e)/2,width:t,height:e};var i=t,o=e;return t>r&&(e*=r/t,t=r),e>n&&(t*=n/e,e=n),this.logger.log("Image downsampled from "+"".concat(i,"X").concat(o)+" to ".concat(t,"X").concat(e,".")),this.computeCanvasDrawConfig(t,e,r,n)},e.prototype.clearElement=function(){if(this.stateManagerProxy.isScanning())throw"Cannot clear while scan is ongoing, close it first.";var t=document.getElementById(this.elementId);t&&(t.innerHTML="")},e.prototype.possiblyUpdateShaders=function(t){this.qrMatch!==t&&(this.hasBorderShaders&&this.borderShaders&&this.borderShaders.length&&this.borderShaders.forEach((function(e){e.style.backgroundColor=t?Y.BORDER_SHADER_MATCH_COLOR:Y.BORDER_SHADER_DEFAULT_COLOR})),this.qrMatch=t)},e.prototype.possiblyCloseLastScanImageFile=function(){this.lastScanImageFile&&(URL.revokeObjectURL(this.lastScanImageFile),this.lastScanImageFile=null)},e.prototype.createCanvasElement=function(t,e,r){var n=t,i=e,o=document.createElement("canvas");return o.style.width="".concat(n,"px"),o.style.height="".concat(i,"px"),o.style.display="none",o.id=f(r)?"qr-canvas":r,o},e.prototype.getShadedRegionBounds=function(t,e,r){if(r.width>t||r.height>e)throw"'config.qrbox' dimensions should not be greater than the dimensions of the root HTML element.";return{x:(t-r.width)/2,y:(e-r.height)/2,width:r.width,height:r.height}},e.prototype.possiblyInsertShadingElement=function(t,e,r,n){if(!(e-n.width<1||r-n.height<1)){var i=document.createElement("div");i.style.position="absolute";var o=(e-n.width)/2,s=(r-n.height)/2;if(i.style.borderLeft="".concat(o,"px solid rgba(0, 0, 0, 0.48)"),i.style.borderRight="".concat(o,"px solid rgba(0, 0, 0, 0.48)"),i.style.borderTop="".concat(s,"px solid rgba(0, 0, 0, 0.48)"),i.style.borderBottom="".concat(s,"px solid rgba(0, 0, 0, 0.48)"),i.style.boxSizing="border-box",i.style.top="0px",i.style.bottom="0px",i.style.left="0px",i.style.right="0px",i.id="".concat(Y.SHADED_REGION_ELEMENT_ID),e-n.width<11||r-n.height<11)this.hasBorderShaders=!1;else{this.insertShaderBorders(i,40,5,-5,null,0,!0),this.insertShaderBorders(i,40,5,-5,null,0,!1),this.insertShaderBorders(i,40,5,null,-5,0,!0),this.insertShaderBorders(i,40,5,null,-5,0,!1),this.insertShaderBorders(i,5,45,-5,null,-5,!0),this.insertShaderBorders(i,5,45,null,-5,-5,!0),this.insertShaderBorders(i,5,45,-5,null,-5,!1),this.insertShaderBorders(i,5,45,null,-5,-5,!1),this.hasBorderShaders=!0}t.append(i)}},e.prototype.insertShaderBorders=function(t,e,r,n,i,o,s){var a=document.createElement("div");a.style.position="absolute",a.style.backgroundColor=Y.BORDER_SHADER_DEFAULT_COLOR,a.style.width="".concat(e,"px"),a.style.height="".concat(r,"px"),null!==n&&(a.style.top="".concat(n,"px")),null!==i&&(a.style.bottom="".concat(i,"px")),s?a.style.left="".concat(o,"px"):a.style.right="".concat(o,"px"),this.borderShaders||(this.borderShaders=[]),this.borderShaders.push(a),t.appendChild(a)},e.prototype.showPausedState=function(){if(!this.scannerPausedUiElement)throw"[internal error] scanner paused UI element not found";this.scannerPausedUiElement.style.display="block"},e.prototype.hidePausedState=function(){if(!this.scannerPausedUiElement)throw"[internal error] scanner paused UI element not found";this.scannerPausedUiElement.style.display="none"},e.prototype.getTimeoutFps=function(t){return 1e3/t},e}(),j="data:image/svg+xml;base64,",Z=j+"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzNzEuNjQzIDM3MS42NDMiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDM3MS42NDMgMzcxLjY0MyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBhdGggZD0iTTEwNS4wODQgMzguMjcxaDE2My43Njh2MjBIMTA1LjA4NHoiLz48cGF0aCBkPSJNMzExLjU5NiAxOTAuMTg5Yy03LjQ0MS05LjM0Ny0xOC40MDMtMTYuMjA2LTMyLjc0My0yMC41MjJWMzBjMC0xNi41NDItMTMuNDU4LTMwLTMwLTMwSDEyNS4wODRjLTE2LjU0MiAwLTMwIDEzLjQ1OC0zMCAzMHYxMjAuMTQzaC04LjI5NmMtMTYuNTQyIDAtMzAgMTMuNDU4LTMwIDMwdjEuMzMzYTI5LjgwNCAyOS44MDQgMCAwIDAgNC42MDMgMTUuOTM5Yy03LjM0IDUuNDc0LTEyLjEwMyAxNC4yMjEtMTIuMTAzIDI0LjA2MXYxLjMzM2MwIDkuODQgNC43NjMgMTguNTg3IDEyLjEwMyAyNC4wNjJhMjkuODEgMjkuODEgMCAwIDAtNC42MDMgMTUuOTM4djEuMzMzYzAgMTYuNTQyIDEzLjQ1OCAzMCAzMCAzMGg4LjMyNGMuNDI3IDExLjYzMSA3LjUwMyAyMS41ODcgMTcuNTM0IDI2LjE3Ny45MzEgMTAuNTAzIDQuMDg0IDMwLjE4NyAxNC43NjggNDUuNTM3YTkuOTg4IDkuOTg4IDAgMCAwIDguMjE2IDQuMjg4IDkuOTU4IDkuOTU4IDAgMCAwIDUuNzA0LTEuNzkzYzQuNTMzLTMuMTU1IDUuNjUtOS4zODggMi40OTUtMTMuOTIxLTYuNzk4LTkuNzY3LTkuNjAyLTIyLjYwOC0xMC43Ni0zMS40aDgyLjY4NWMuMjcyLjQxNC41NDUuODE4LjgxNSAxLjIxIDMuMTQyIDQuNTQxIDkuMzcyIDUuNjc5IDEzLjkxMyAyLjUzNCA0LjU0Mi0zLjE0MiA1LjY3Ny05LjM3MSAyLjUzNS0xMy45MTMtMTEuOTE5LTE3LjIyOS04Ljc4Ny0zNS44ODQgOS41ODEtNTcuMDEyIDMuMDY3LTIuNjUyIDEyLjMwNy0xMS43MzIgMTEuMjE3LTI0LjAzMy0uODI4LTkuMzQzLTcuMTA5LTE3LjE5NC0xOC42NjktMjMuMzM3YTkuODU3IDkuODU3IDAgMCAwLTEuMDYxLS40ODZjLS40NjYtLjE4Mi0xMS40MDMtNC41NzktOS43NDEtMTUuNzA2IDEuMDA3LTYuNzM3IDE0Ljc2OC04LjI3MyAyMy43NjYtNy42NjYgMjMuMTU2IDEuNTY5IDM5LjY5OCA3LjgwMyA0Ny44MzYgMTguMDI2IDUuNzUyIDcuMjI1IDcuNjA3IDE2LjYyMyA1LjY3MyAyOC43MzMtLjQxMyAyLjU4NS0uODI0IDUuMjQxLTEuMjQ1IDcuOTU5LTUuNzU2IDM3LjE5NC0xMi45MTkgODMuNDgzLTQ5Ljg3IDExNC42NjEtNC4yMjEgMy41NjEtNC43NTYgOS44Ny0xLjE5NCAxNC4wOTJhOS45OCA5Ljk4IDAgMCAwIDcuNjQ4IDMuNTUxIDkuOTU1IDkuOTU1IDAgMCAwIDYuNDQ0LTIuMzU4YzQyLjY3Mi0zNi4wMDUgNTAuODAyLTg4LjUzMyA1Ni43MzctMTI2Ljg4OC40MTUtMi42ODQuODIxLTUuMzA5IDEuMjI5LTcuODYzIDIuODM0LTE3LjcyMS0uNDU1LTMyLjY0MS05Ljc3Mi00NC4zNDV6bS0yMzIuMzA4IDQyLjYyYy01LjUxNCAwLTEwLTQuNDg2LTEwLTEwdi0xLjMzM2MwLTUuNTE0IDQuNDg2LTEwIDEwLTEwaDE1djIxLjMzM2gtMTV6bS0yLjUtNTIuNjY2YzAtNS41MTQgNC40ODYtMTAgMTAtMTBoNy41djIxLjMzM2gtNy41Yy01LjUxNCAwLTEwLTQuNDg2LTEwLTEwdi0xLjMzM3ptMTcuNSA5My45OTloLTcuNWMtNS41MTQgMC0xMC00LjQ4Ni0xMC0xMHYtMS4zMzNjMC01LjUxNCA0LjQ4Ni0xMCAxMC0xMGg3LjV2MjEuMzMzem0zMC43OTYgMjguODg3Yy01LjUxNCAwLTEwLTQuNDg2LTEwLTEwdi04LjI3MWg5MS40NTdjLS44NTEgNi42NjgtLjQzNyAxMi43ODcuNzMxIDE4LjI3MWgtODIuMTg4em03OS40ODItMTEzLjY5OGMtMy4xMjQgMjAuOTA2IDEyLjQyNyAzMy4xODQgMjEuNjI1IDM3LjA0IDUuNDQxIDIuOTY4IDcuNTUxIDUuNjQ3IDcuNzAxIDcuMTg4LjIxIDIuMTUtMi41NTMgNS42ODQtNC40NzcgNy4yNTEtLjQ4Mi4zNzgtLjkyOS44LTEuMzM1IDEuMjYxLTYuOTg3IDcuOTM2LTExLjk4MiAxNS41Mi0xNS40MzIgMjIuNjg4aC05Ny41NjRWMzBjMC01LjUxNCA0LjQ4Ni0xMCAxMC0xMGgxMjMuNzY5YzUuNTE0IDAgMTAgNC40ODYgMTAgMTB2MTM1LjU3OWMtMy4wMzItLjM4MS02LjE1LS42OTQtOS4zODktLjkxNC0yNS4xNTktMS42OTQtNDIuMzcgNy43NDgtNDQuODk4IDI0LjY2NnoiLz48cGF0aCBkPSJNMTc5LjEyOSA4My4xNjdoLTI0LjA2YTUgNSAwIDAgMC01IDV2MjQuMDYxYTUgNSAwIDAgMCA1IDVoMjQuMDZhNSA1IDAgMCAwIDUtNVY4OC4xNjdhNSA1IDAgMCAwLTUtNXpNMTcyLjYyOSAxNDIuODZoLTEyLjU2VjEzMC44YTUgNSAwIDEgMC0xMCAwdjE3LjA2MWE1IDUgMCAwIDAgNSA1aDE3LjU2YTUgNSAwIDEgMCAwLTEwLjAwMXpNMjE2LjU2OCA4My4xNjdoLTI0LjA2YTUgNSAwIDAgMC01IDV2MjQuMDYxYTUgNSAwIDAgMCA1IDVoMjQuMDZhNSA1IDAgMCAwIDUtNVY4OC4xNjdhNSA1IDAgMCAwLTUtNXptLTUgMjQuMDYxaC0xNC4wNlY5My4xNjdoMTQuMDZ2MTQuMDYxek0yMTEuNjY5IDEyNS45MzZIMTk3LjQxYTUgNSAwIDAgMC01IDV2MTQuMjU3YTUgNSAwIDAgMCA1IDVoMTQuMjU5YTUgNSAwIDAgMCA1LTV2LTE0LjI1N2E1IDUgMCAwIDAtNS01eiIvPjwvc3ZnPg==",Q=j+"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1OS4wMTggNTkuMDE4IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1OS4wMTggNTkuMDE4IiB4bWw6c3BhY2U9InByZXNlcnZlIj48cGF0aCBkPSJtNTguNzQxIDU0LjgwOS01Ljk2OS02LjI0NGExMC43NCAxMC43NCAwIDAgMCAyLjgyLTcuMjVjMC01Ljk1My00Ljg0My0xMC43OTYtMTAuNzk2LTEwLjc5NlMzNCAzNS4zNjEgMzQgNDEuMzE0IDM4Ljg0MyA1Mi4xMSA0NC43OTYgNTIuMTFjMi40NDEgMCA0LjY4OC0uODI0IDYuNDk5LTIuMTk2bDYuMDAxIDYuMjc3YS45OTguOTk4IDAgMCAwIDEuNDE0LjAzMiAxIDEgMCAwIDAgLjAzMS0xLjQxNHpNMzYgNDEuMzE0YzAtNC44NSAzLjk0Ni04Ljc5NiA4Ljc5Ni04Ljc5NnM4Ljc5NiAzLjk0NiA4Ljc5NiA4Ljc5Ni0zLjk0NiA4Ljc5Ni04Ljc5NiA4Ljc5NlMzNiA0Ni4xNjQgMzYgNDEuMzE0ek0xMC40MzEgMTYuMDg4YzAgMy4wNyAyLjQ5OCA1LjU2OCA1LjU2OSA1LjU2OHM1LjU2OS0yLjQ5OCA1LjU2OS01LjU2OGMwLTMuMDcxLTIuNDk4LTUuNTY5LTUuNTY5LTUuNTY5cy01LjU2OSAyLjQ5OC01LjU2OSA1LjU2OXptOS4xMzggMGMwIDEuOTY4LTEuNjAyIDMuNTY4LTMuNTY5IDMuNTY4cy0zLjU2OS0xLjYwMS0zLjU2OS0zLjU2OCAxLjYwMi0zLjU2OSAzLjU2OS0zLjU2OSAzLjU2OSAxLjYwMSAzLjU2OSAzLjU2OXoiLz48cGF0aCBkPSJtMzAuODgyIDI4Ljk4NyA5LjE4LTEwLjA1NCAxMS4yNjIgMTAuMzIzYTEgMSAwIDAgMCAxLjM1MS0xLjQ3NWwtMTItMTFhMSAxIDAgMCAwLTEuNDE0LjA2M2wtOS43OTQgMTAuNzI3LTQuNzQzLTQuNzQzYTEuMDAzIDEuMDAzIDAgMCAwLTEuMzY4LS4wNDRMNi4zMzkgMzcuNzY4YTEgMSAwIDEgMCAxLjMyMiAxLjUwMWwxNi4zMTMtMTQuMzYyIDcuMzE5IDcuMzE4YS45OTkuOTk5IDAgMSAwIDEuNDE0LTEuNDE0bC0xLjgyNS0xLjgyNHoiLz48cGF0aCBkPSJNMzAgNDYuNTE4SDJ2LTQyaDU0djI4YTEgMSAwIDEgMCAyIDB2LTI5YTEgMSAwIDAgMC0xLTFIMWExIDEgMCAwIDAtMSAxdjQ0YTEgMSAwIDAgMCAxIDFoMjlhMSAxIDAgMSAwIDAtMnoiLz48L3N2Zz4=",K=j+"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NjAgNDYwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0NjAgNDYwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cGF0aCBkPSJNMjMwIDBDMTAyLjk3NSAwIDAgMTAyLjk3NSAwIDIzMHMxMDIuOTc1IDIzMCAyMzAgMjMwIDIzMC0xMDIuOTc0IDIzMC0yMzBTMzU3LjAyNSAwIDIzMCAwem0zOC4zMzMgMzc3LjM2YzAgOC42NzYtNy4wMzQgMTUuNzEtMTUuNzEgMTUuNzFoLTQzLjEwMWMtOC42NzYgMC0xNS43MS03LjAzNC0xNS43MS0xNS43MVYyMDIuNDc3YzAtOC42NzYgNy4wMzMtMTUuNzEgMTUuNzEtMTUuNzFoNDMuMTAxYzguNjc2IDAgMTUuNzEgNy4wMzMgMTUuNzEgMTUuNzFWMzc3LjM2ek0yMzAgMTU3Yy0yMS41MzkgMC0zOS0xNy40NjEtMzktMzlzMTcuNDYxLTM5IDM5LTM5IDM5IDE3LjQ2MSAzOSAzOS0xNy40NjEgMzktMzkgMzl6Ii8+PC9zdmc+",q=function(){function t(){}return t.createDefault=function(){return{hasPermission:!1,lastUsedCameraId:null}},t}(),J=function(){function t(){this.data=q.createDefault();var e=localStorage.getItem(t.LOCAL_STORAGE_KEY);e?this.data=JSON.parse(e):this.reset()}return t.prototype.hasCameraPermissions=function(){return this.data.hasPermission},t.prototype.getLastUsedCameraId=function(){return this.data.lastUsedCameraId},t.prototype.setHasPermission=function(t){this.data.hasPermission=t,this.flush()},t.prototype.setLastUsedCameraId=function(t){this.data.lastUsedCameraId=t,this.flush()},t.prototype.resetLastUsedCameraId=function(){this.data.lastUsedCameraId=null,this.flush()},t.prototype.reset=function(){this.data=q.createDefault(),this.flush()},t.prototype.flush=function(){localStorage.setItem(t.LOCAL_STORAGE_KEY,JSON.stringify(this.data))},t.LOCAL_STORAGE_KEY="HTML5_QRCODE_DATA",t}(),$=function(){function t(){this.infoDiv=document.createElement("div")}return t.prototype.renderInto=function(t){this.infoDiv.style.position="absolute",this.infoDiv.style.top="10px",this.infoDiv.style.right="10px",this.infoDiv.style.zIndex="2",this.infoDiv.style.display="none",this.infoDiv.style.padding="5pt",this.infoDiv.style.border="1px solid #171717",this.infoDiv.style.fontSize="10pt",this.infoDiv.style.background="rgb(0 0 0 / 69%)",this.infoDiv.style.borderRadius="5px",this.infoDiv.style.textAlign="center",this.infoDiv.style.fontWeight="400",this.infoDiv.style.color="white",this.infoDiv.innerText=A.poweredBy();var e=document.createElement("a");e.innerText="ScanApp",e.href="https://scanapp.org",e.target="new",e.style.color="white",this.infoDiv.appendChild(e);var r=document.createElement("br"),n=document.createElement("br");this.infoDiv.appendChild(r),this.infoDiv.appendChild(n);var i=document.createElement("a");i.innerText=A.reportIssues(),i.href="https://github.com/mebjas/html5-qrcode/issues",i.target="new",i.style.color="white",this.infoDiv.appendChild(i),t.appendChild(this.infoDiv)},t.prototype.show=function(){this.infoDiv.style.display="block"},t.prototype.hide=function(){this.infoDiv.style.display="none"},t}(),tt=function(){function t(t,e){this.isShowingInfoIcon=!0,this.onTapIn=t,this.onTapOut=e,this.infoIcon=document.createElement("img")}return t.prototype.renderInto=function(t){var e=this;this.infoIcon.alt="Info icon",this.infoIcon.src=K,this.infoIcon.style.position="absolute",this.infoIcon.style.top="4px",this.infoIcon.style.right="4px",this.infoIcon.style.opacity="0.6",this.infoIcon.style.cursor="pointer",this.infoIcon.style.zIndex="2",this.infoIcon.style.width="16px",this.infoIcon.style.height="16px",this.infoIcon.onmouseover=function(t){return e.onHoverIn()},this.infoIcon.onmouseout=function(t){return e.onHoverOut()},this.infoIcon.onclick=function(t){return e.onClick()},t.appendChild(this.infoIcon)},t.prototype.onHoverIn=function(){this.isShowingInfoIcon&&(this.infoIcon.style.opacity="1")},t.prototype.onHoverOut=function(){this.isShowingInfoIcon&&(this.infoIcon.style.opacity="0.6")},t.prototype.onClick=function(){this.isShowingInfoIcon?(this.isShowingInfoIcon=!1,this.onTapIn(),this.infoIcon.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAQgAAAEIBarqQRAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAE1SURBVDiNfdI7S0NBEAXgLya1otFgpbYSbISAgpXYi6CmiH9KCAiChaVga6OiWPgfRDQ+0itaGVNosXtluWwcuMzePfM4M3sq8lbHBubwg1dc4m1E/J/N4ghDPOIsfk/4xiEao5KX0McFljN4C9d4QTPXuY99jP3DsIoDPGM6BY5i5yI5R7O4q+ImFkJY2DCh3cAH2klyB+9J1xUMMAG7eCh1a+Mr+k48b5diXrFVwwLuS+BJ9MfR7+G0FHOHhTHhnXNWS87VDF4pcnfQK4Ep7XScNLmPTZgURNKKYENYWDpzW1BhscS1WHS8CDgURFJQrWcoF3c13KKbgg1BYQfy8xZWEzTTw1QZbAoKu8FqJnktdu5hcVSHmchiILzzuaDQvjBzV2m8yohCE1jHfPx/xhU+y4G/D75ELlRJsSYAAAAASUVORK5CYII=",this.infoIcon.style.opacity="1"):(this.isShowingInfoIcon=!0,this.onTapOut(),this.infoIcon.src=K,this.infoIcon.style.opacity="0.6")},t}(),et=function(){function t(){var t=this;this.infoDiv=new $,this.infoIcon=new tt((function(){t.infoDiv.show()}),(function(){t.infoDiv.hide()}))}return t.prototype.renderInto=function(t){this.infoDiv.renderInto(t),this.infoIcon.renderInto(t)},t}(),rt=function(){function t(){}return t.hasPermissions=function(){return t=this,e=void 0,n=function(){var t,e,r,n;return function(t,e){var r,n,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function a(a){return function(c){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;o&&(o=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(i=2&a[0]?n.return:a[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,a[1])).done)return i;switch(n=0,i&&(a=[2&a[0],i.value]),a[0]){case 0:case 1:i=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!((i=(i=s.trys).length>0&&i[i.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]1},t.prototype.isCameraScanRequired=function(){for(var e=0,r=this.supportedScanTypes;ee)throw"Max ".concat(e," values expected for ")+"supportedScanTypes";for(var r=0,n=t;r0&&i[i.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]20){var e=t.substring(0,8),r=t.length,n=t.substring(r-8,r);t="".concat(e,"....").concat(n)}var i=p.fileSelectionChooseAnother()+" - "+t;this.fileSelectionButton.innerText=i},t.prototype.setInitialValueToButton=function(){var t=p.fileSelectionChooseImage()+" - "+p.fileSelectionNoImageSelected();this.fileSelectionButton.innerText=t},t.prototype.getFileScanInputId=function(){return"html5-qrcode-private-filescan-input"},t.create=function(e,r,n){return new t(e,r,n)},t}(),ut=function(){function t(t){this.selectElement=ot.createElement("select",it.CAMERA_SELECTION_SELECT_ID),this.cameras=t,this.options=[]}return t.prototype.render=function(t){var e=document.createElement("span");e.style.marginRight="10px";var r=this.cameras.length;if(0===r)throw new Error("No cameras found");if(1===r)e.style.display="none";else{var n=p.selectCamera();e.innerText="".concat(n," (").concat(this.cameras.length,") ")}for(var i=1,o=0,s=this.cameras;o0?(t.removeChild(e),n.renderCameraSelection(r)):(n.setHeaderMessage(p.noCameraFound(),U.STATUS_WARNING),i())})).catch((function(t){n.persistedDataManager.setHasPermission(!1),r?r.disabled=!1:i(),n.setHeaderMessage(t,U.STATUS_WARNING),n.showHideScanTypeSwapLink(!0)}))},t.prototype.createPermissionButton=function(t,e){var r=this,n=ot.createElement("button",this.getCameraPermissionButtonId());n.innerText=p.cameraPermissionTitle(),n.addEventListener("click",(function(){n.disabled=!0,r.createCameraListUi(t,e,n)})),e.appendChild(n)},t.prototype.createPermissionsUi=function(t,e){var r=this;nt.isCameraScanType(this.currentScanType)&&this.persistedDataManager.hasCameraPermissions()?rt.hasPermissions().then((function(n){n?r.createCameraListUi(t,e):(r.persistedDataManager.setHasPermission(!1),r.createPermissionButton(t,e))})).catch((function(n){r.persistedDataManager.setHasPermission(!1),r.createPermissionButton(t,e)})):this.createPermissionButton(t,e)},t.prototype.createSectionControlPanel=function(){var t=document.getElementById(this.getDashboardSectionId()),e=document.createElement("div");t.appendChild(e);var r=document.createElement("div");r.id=this.getDashboardSectionCameraScanRegionId(),r.style.display=nt.isCameraScanType(this.currentScanType)?"block":"none",e.appendChild(r);var n=document.createElement("div");n.style.textAlign="center",r.appendChild(n),this.scanTypeSelector.isCameraScanRequired()&&this.createPermissionsUi(r,n),this.renderFileScanUi(e)},t.prototype.renderFileScanUi=function(t){var e=nt.isFileScanType(this.currentScanType),r=this;this.fileSelectionUi=ht.create(t,e,(function(t){if(!r.html5Qrcode)throw"html5Qrcode not defined";nt.isFileScanType(r.currentScanType)&&(r.setHeaderMessage(p.loadingImage()),r.html5Qrcode.scanFileV2(t,!0).then((function(t){r.resetHeaderMessage(),r.qrCodeSuccessCallback(t.decodedText,t)})).catch((function(t){r.setHeaderMessage(t,U.STATUS_WARNING),r.qrCodeErrorCallback(t,u.createFrom(t))})))}))},t.prototype.renderCameraSelection=function(t){var e=this,r=this,n=document.getElementById(this.getDashboardSectionCameraScanRegionId());n.style.textAlign="center";var i=dt.create(n,!1),o=ut.create(n,t),s=document.createElement("span"),a=ot.createElement("button",it.CAMERA_START_BUTTON_ID);a.innerText=p.scanButtonStartScanningText(),s.appendChild(a);var c,l=ot.createElement("button",it.CAMERA_STOP_BUTTON_ID);l.innerText=p.scanButtonStopScanningText(),l.style.display="none",l.disabled=!0,s.appendChild(l),n.appendChild(s);var h=function(t){t||(a.style.display="none"),a.innerText=p.scanButtonStartScanningText(),a.style.opacity="1",a.disabled=!1,t&&(a.style.display="inline-block")};if(a.addEventListener("click",(function(t){a.innerText=p.scanButtonScanningStarting(),o.disable(),a.disabled=!0,a.style.opacity="0.5",e.scanTypeSelector.hasMoreThanOneScanType()&&r.showHideScanTypeSwapLink(!1),r.resetHeaderMessage();var n,u=o.getValue();r.persistedDataManager.setLastUsedCameraId(u),r.html5Qrcode.start(u,(n=r.config,{fps:n.fps,qrbox:n.qrbox,aspectRatio:n.aspectRatio,disableFlip:n.disableFlip,videoConstraints:n.videoConstraints}),r.qrCodeSuccessCallback,r.qrCodeErrorCallback).then((function(t){l.disabled=!1,l.style.display="inline-block",h(!1);var n=r.html5Qrcode.getRunningTrackCameraCapabilities();!0===e.config.showTorchButtonIfSupported&&function(t){t.torchFeature().isSupported()?(c?c.updateTorchCapability(t.torchFeature()):c=lt.create(s,t.torchFeature(),{display:"none",marginLeft:"5px"},(function(t){r.setHeaderMessage(t,U.STATUS_WARNING)})),c.show()):c&&c.hide()}(n),!0===e.config.showZoomSliderIfSupported&&function(t){var r=t.zoomFeature();if(r.isSupported()){i.setOnCameraZoomValueChangeCallback((function(t){r.apply(t)}));var n,o,s,a=1;e.config.defaultZoomValueIfSupported&&(a=e.config.defaultZoomValueIfSupported),n=a,o=r.min(),a=n>(s=r.max())?s:n",e.appendChild(t.cameraScanImage)},this.cameraScanImage.width=64,this.cameraScanImage.style.opacity="0.8",this.cameraScanImage.src=Z,this.cameraScanImage.alt=p.cameraScanAltText()},t.prototype.insertFileScanImageToScanRegion=function(){var t=this,e=document.getElementById(this.getScanRegionId());if(this.fileScanImage)return e.innerHTML="
",void e.appendChild(this.fileScanImage);this.fileScanImage=new Image,this.fileScanImage.onload=function(r){e.innerHTML="
",e.appendChild(t.fileScanImage)},this.fileScanImage.width=64,this.fileScanImage.style.opacity="0.8",this.fileScanImage.src=Q,this.fileScanImage.alt=p.fileScanAltText()},t.prototype.clearScanRegion=function(){document.getElementById(this.getScanRegionId()).innerHTML=""},t.prototype.getDashboardSectionId=function(){return"".concat(this.elementId,"__dashboard_section")},t.prototype.getDashboardSectionCameraScanRegionId=function(){return"".concat(this.elementId,"__dashboard_section_csr")},t.prototype.getDashboardSectionSwapLinkId=function(){return it.SCAN_TYPE_CHANGE_ANCHOR_ID},t.prototype.getScanRegionId=function(){return"".concat(this.elementId,"__scan_region")},t.prototype.getDashboardId=function(){return"".concat(this.elementId,"__dashboard")},t.prototype.getHeaderMessageContainerId=function(){return"".concat(this.elementId,"__header_message")},t.prototype.getCameraPermissionButtonId=function(){return it.CAMERA_PERMISSION_BUTTON_ID},t.prototype.getCameraScanRegion=function(){return document.getElementById(this.getDashboardSectionCameraScanRegionId())},t.prototype.getDashboardSectionSwapLink=function(){return document.getElementById(this.getDashboardSectionSwapLinkId())},t.prototype.getHeaderMessageDiv=function(){return document.getElementById(this.getHeaderMessageContainerId())},t}()})(),__Html5QrcodeLibrary__=n})();if (window) { if (!Html5QrcodeScanner) { var Html5QrcodeScanner = window.__Html5QrcodeLibrary__.Html5QrcodeScanner; } if (!Html5Qrcode) { var Html5Qrcode = window.__Html5QrcodeLibrary__.Html5Qrcode; } if (!Html5QrcodeSupportedFormats) { var Html5QrcodeSupportedFormats = window.__Html5QrcodeLibrary__.Html5QrcodeSupportedFormats } if (!Html5QrcodeScannerState) { var Html5QrcodeScannerState = window.__Html5QrcodeLibrary__.Html5QrcodeScannerState; } if (!Html5QrcodeScanType) { var Html5QrcodeScanType = window.__Html5QrcodeLibrary__.Html5QrcodeScanType; }} \ No newline at end of file diff --git a/js/languages.js b/js/languages.js new file mode 100644 index 0000000..a3e5a73 --- /dev/null +++ b/js/languages.js @@ -0,0 +1,158 @@ +const translations = { + id: { + lang_name: "Bahasa Indonesia", + operational: "Beroperasi", + online: "Terhubung", + tab_voucher: "Voucher", + tab_member: "Member", + voucher_label: "Kode Voucher", + voucher_placeholder: "Masukkan kode voucher...", + user_label: "Nama Pengguna", + pass_label: "Kata Sandi", + login_voucher: "Gunakan Voucher", + login_member: "Masuk Member", + connect_btn: "Hubungkan", + scan_btn: "Scan QR Code", + trial_btn: "Coba Gratis", + status_dashboard_msg: "Kelola sesi aktif dan pantau penggunaan anda.", + connection_stats: "Statistik Koneksi", + quota_left: "Sisa Kuota", + unlimited: "Tanpa Batas", + or_text: "Atau", + scan_file_btn: "Scan dari Galeri", + point_camera: "Arahkan kamera ke QR Code", + confirm_title: "Konfirmasi Voucher", + confirm_msg: "Apakah Anda ingin masuk dengan kode ini?", + open_browser: "Buka di Browser", + copy_url: "Salin Link Portal", + manual_tip: "Kamera/Galeri diblokir sistem? Silakan buka di Chrome/Safari atau salin link portal di bawah.", + hour: "JAM", + hours: "JAM", + day: "HARI", + week: "MINGGU", + pricing_title: "Paket Tersedia", + session_info: "Informasi Sesi", + ip_address: "Alamat IP", + upload: "Unggah", + download: "Unduh", + time_left: "Sisa Waktu", + logout_btn: "Keluar (Log Out)", + logged_out: "Sudah Keluar", + logged_out_msg: "Anda telah berhasil memutuskan koneksi dari jaringan.", + login_again: "Masuk Kembali", + failed_title: "Koneksi Gagal", + try_again: "Coba Lagi", + success_title: "Berhasil", + success_msg: "Anda sekarang terhubung ke jaringan.", + redirect_msg: "Mengalihkan...", + redirect_tip: "Klik di sini jika tidak beralih otomatis", + adv_title: "Iklan", + adv_msg: "Jika tidak terjadi apa-apa, buka iklan secara manual.", + adv_link: "iklan", + adv_manually: "secara manual", + powered_by: "Didukung oleh" + }, + en: { + lang_name: "English", + operational: "Operational", + online: "Online", + tab_voucher: "Voucher", + tab_member: "Member", + voucher_label: "Voucher Code", + voucher_placeholder: "Enter code received...", + user_label: "Username", + pass_label: "Password", + login_voucher: "Use Voucher", + login_member: "Member Login", + connect_btn: "Connect", + scan_btn: "Scan QR Code", + trial_btn: "Free Trial Access", + status_dashboard_msg: "Manage your active session and monitor your usage.", + connection_stats: "Connection Stats", + quota_left: "Quota Remaining", + unlimited: "Unlimited", + or_text: "Or", + scan_file_btn: "Scan from Gallery", + point_camera: "Point camera at QR Code", + confirm_title: "Confirm Voucher", + confirm_msg: "Do you want to log in with this code?", + open_browser: "Open in Browser", + copy_url: "Copy Portal Link", + manual_tip: "Camera/Gallery restricted? Please open in Chrome/Safari or copy the portal link below.", + hour: "HOUR", + hours: "HOURS", + day: "DAY", + week: "WEEK", + pricing_title: "Available Packages", + session_info: "Session Information", + ip_address: "IP Address", + upload: "Upload", + download: "Download", + time_left: "Time Remaining", + logout_btn: "Log Out", + logged_out: "Logged Out", + logged_out_msg: "You have successfully disconnected from the network.", + login_again: "Log In Again", + failed_title: "Connection Failed", + try_again: "Try Again", + success_title: "Success", + success_msg: "You are now connected to the network.", + redirect_msg: "Redirecting...", + redirect_tip: "Click here if not redirected automatically", + adv_title: "Advertisement", + adv_msg: "If nothing happens, open advertisement manually.", + adv_link: "advertisement", + adv_manually: "manually", + powered_by: "Powered by" + } +}; + +function applyLanguage(lang) { + document.querySelectorAll('[data-i18n]').forEach(el => { + const key = el.getAttribute('data-i18n'); + if (translations[lang] && translations[lang][key]) { + if (el.tagName === 'INPUT' && el.placeholder) { + el.placeholder = translations[lang][key]; + } else { + el.innerText = translations[lang][key]; + } + } + }); + localStorage.setItem('twinpath_lang', lang); + document.documentElement.lang = lang; + + // Update active state in custom menu + document.querySelectorAll('.lang-option').forEach(opt => { + opt.classList.toggle('active', opt.getAttribute('data-lang') === lang); + }); + + // Update button text + const langLabel = document.getElementById('lang-label'); + if (langLabel) langLabel.innerText = lang.toUpperCase(); + + // Refresh dynamic content if on dashboard + if (typeof initDashboard === 'function') { + initDashboard(); + } +} + +function toggleLangMenu() { + const menu = document.getElementById('lang-menu'); + if (menu) menu.classList.toggle('show'); +} + +// Close menu when clicking outside +window.addEventListener('click', (e) => { + const dropdown = document.querySelector('.lang-dropdown'); + const menu = document.getElementById('lang-menu'); + if (menu && dropdown && !dropdown.contains(e.target)) { + menu.classList.remove('show'); + } +}); + +function initLanguage() { + const savedLang = localStorage.getItem('twinpath_lang') || 'en'; + applyLanguage(savedLang); +} + +document.addEventListener('DOMContentLoaded', initLanguage); diff --git a/js/md5.js b/js/md5.js new file mode 100644 index 0000000..a6e6339 --- /dev/null +++ b/js/md5.js @@ -0,0 +1,217 @@ +/* + * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message + * Digest Algorithm, as defined in RFC 1321. + * Version 1.1 Copyright (C) Paul Johnston 1999 - 2002. + * Code also contributed by Greg Holt + * See http://pajhome.org.uk/site/legal.html for details. + */ + +/* + * Add integers, wrapping at 2^32. This uses 16-bit operations internally + * to work around bugs in some JS interpreters. + */ +function safe_add(x, y) +{ + var lsw = (x & 0xFFFF) + (y & 0xFFFF) + var msw = (x >> 16) + (y >> 16) + (lsw >> 16) + return (msw << 16) | (lsw & 0xFFFF) +} + +/* + * Bitwise rotate a 32-bit number to the left. + */ +function rol(num, cnt) +{ + return (num << cnt) | (num >>> (32 - cnt)) +} + +/* + * These functions implement the four basic operations the algorithm uses. + */ +function cmn(q, a, b, x, s, t) +{ + return safe_add(rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b) +} +function ff(a, b, c, d, x, s, t) +{ + return cmn((b & c) | ((~b) & d), a, b, x, s, t) +} +function gg(a, b, c, d, x, s, t) +{ + return cmn((b & d) | (c & (~d)), a, b, x, s, t) +} +function hh(a, b, c, d, x, s, t) +{ + return cmn(b ^ c ^ d, a, b, x, s, t) +} +function ii(a, b, c, d, x, s, t) +{ + return cmn(c ^ (b | (~d)), a, b, x, s, t) +} + +/* + * Calculate the MD5 of an array of little-endian words, producing an array + * of little-endian words. + */ +function coreMD5(x) +{ + var a = 1732584193 + var b = -271733879 + var c = -1732584194 + var d = 271733878 + + for(i = 0; i < x.length; i += 16) + { + var olda = a + var oldb = b + var oldc = c + var oldd = d + + a = ff(a, b, c, d, x[i+ 0], 7 , -680876936) + d = ff(d, a, b, c, x[i+ 1], 12, -389564586) + c = ff(c, d, a, b, x[i+ 2], 17, 606105819) + b = ff(b, c, d, a, x[i+ 3], 22, -1044525330) + a = ff(a, b, c, d, x[i+ 4], 7 , -176418897) + d = ff(d, a, b, c, x[i+ 5], 12, 1200080426) + c = ff(c, d, a, b, x[i+ 6], 17, -1473231341) + b = ff(b, c, d, a, x[i+ 7], 22, -45705983) + a = ff(a, b, c, d, x[i+ 8], 7 , 1770035416) + d = ff(d, a, b, c, x[i+ 9], 12, -1958414417) + c = ff(c, d, a, b, x[i+10], 17, -42063) + b = ff(b, c, d, a, x[i+11], 22, -1990404162) + a = ff(a, b, c, d, x[i+12], 7 , 1804603682) + d = ff(d, a, b, c, x[i+13], 12, -40341101) + c = ff(c, d, a, b, x[i+14], 17, -1502002290) + b = ff(b, c, d, a, x[i+15], 22, 1236535329) + + a = gg(a, b, c, d, x[i+ 1], 5 , -165796510) + d = gg(d, a, b, c, x[i+ 6], 9 , -1069501632) + c = gg(c, d, a, b, x[i+11], 14, 643717713) + b = gg(b, c, d, a, x[i+ 0], 20, -373897302) + a = gg(a, b, c, d, x[i+ 5], 5 , -701558691) + d = gg(d, a, b, c, x[i+10], 9 , 38016083) + c = gg(c, d, a, b, x[i+15], 14, -660478335) + b = gg(b, c, d, a, x[i+ 4], 20, -405537848) + a = gg(a, b, c, d, x[i+ 9], 5 , 568446438) + d = gg(d, a, b, c, x[i+14], 9 , -1019803690) + c = gg(c, d, a, b, x[i+ 3], 14, -187363961) + b = gg(b, c, d, a, x[i+ 8], 20, 1163531501) + a = gg(a, b, c, d, x[i+13], 5 , -1444681467) + d = gg(d, a, b, c, x[i+ 2], 9 , -51403784) + c = gg(c, d, a, b, x[i+ 7], 14, 1735328473) + b = gg(b, c, d, a, x[i+12], 20, -1926607734) + + a = hh(a, b, c, d, x[i+ 5], 4 , -378558) + d = hh(d, a, b, c, x[i+ 8], 11, -2022574463) + c = hh(c, d, a, b, x[i+11], 16, 1839030562) + b = hh(b, c, d, a, x[i+14], 23, -35309556) + a = hh(a, b, c, d, x[i+ 1], 4 , -1530992060) + d = hh(d, a, b, c, x[i+ 4], 11, 1272893353) + c = hh(c, d, a, b, x[i+ 7], 16, -155497632) + b = hh(b, c, d, a, x[i+10], 23, -1094730640) + a = hh(a, b, c, d, x[i+13], 4 , 681279174) + d = hh(d, a, b, c, x[i+ 0], 11, -358537222) + c = hh(c, d, a, b, x[i+ 3], 16, -722521979) + b = hh(b, c, d, a, x[i+ 6], 23, 76029189) + a = hh(a, b, c, d, x[i+ 9], 4 , -640364487) + d = hh(d, a, b, c, x[i+12], 11, -421815835) + c = hh(c, d, a, b, x[i+15], 16, 530742520) + b = hh(b, c, d, a, x[i+ 2], 23, -995338651) + + a = ii(a, b, c, d, x[i+ 0], 6 , -198630844) + d = ii(d, a, b, c, x[i+ 7], 10, 1126891415) + c = ii(c, d, a, b, x[i+14], 15, -1416354905) + b = ii(b, c, d, a, x[i+ 5], 21, -57434055) + a = ii(a, b, c, d, x[i+12], 6 , 1700485571) + d = ii(d, a, b, c, x[i+ 3], 10, -1894986606) + c = ii(c, d, a, b, x[i+10], 15, -1051523) + b = ii(b, c, d, a, x[i+ 1], 21, -2054922799) + a = ii(a, b, c, d, x[i+ 8], 6 , 1873313359) + d = ii(d, a, b, c, x[i+15], 10, -30611744) + c = ii(c, d, a, b, x[i+ 6], 15, -1560198380) + b = ii(b, c, d, a, x[i+13], 21, 1309151649) + a = ii(a, b, c, d, x[i+ 4], 6 , -145523070) + d = ii(d, a, b, c, x[i+11], 10, -1120210379) + c = ii(c, d, a, b, x[i+ 2], 15, 718787259) + b = ii(b, c, d, a, x[i+ 9], 21, -343485551) + + a = safe_add(a, olda) + b = safe_add(b, oldb) + c = safe_add(c, oldc) + d = safe_add(d, oldd) + } + return [a, b, c, d] +} + +/* + * Convert an array of little-endian words to a hex string. + */ +function binl2hex(binarray) +{ + var hex_tab = "0123456789abcdef" + var str = "" + for(var i = 0; i < binarray.length * 4; i++) + { + str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) + + hex_tab.charAt((binarray[i>>2] >> ((i%4)*8)) & 0xF) + } + return str +} + +/* + * Convert an array of little-endian words to a base64 encoded string. + */ +function binl2b64(binarray) +{ + var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" + var str = "" + for(var i = 0; i < binarray.length * 32; i += 6) + { + str += tab.charAt(((binarray[i>>5] << (i%32)) & 0x3F) | + ((binarray[i>>5+1] >> (32-i%32)) & 0x3F)) + } + return str +} + +/* + * Convert an 8-bit character string to a sequence of 16-word blocks, stored + * as an array, and append appropriate padding for MD4/5 calculation. + * If any of the characters are >255, the high byte is silently ignored. + */ +function str2binl(str) +{ + var nblk = ((str.length + 8) >> 6) + 1 // number of 16-word blocks + var blks = new Array(nblk * 16) + for(var i = 0; i < nblk * 16; i++) blks[i] = 0 + for(var i = 0; i < str.length; i++) + blks[i>>2] |= (str.charCodeAt(i) & 0xFF) << ((i%4) * 8) + blks[i>>2] |= 0x80 << ((i%4) * 8) + blks[nblk*16-2] = str.length * 8 + return blks +} + +/* + * Convert a wide-character string to a sequence of 16-word blocks, stored as + * an array, and append appropriate padding for MD4/5 calculation. + */ +function strw2binl(str) +{ + var nblk = ((str.length + 4) >> 5) + 1 // number of 16-word blocks + var blks = new Array(nblk * 16) + for(var i = 0; i < nblk * 16; i++) blks[i] = 0 + for(var i = 0; i < str.length; i++) + blks[i>>1] |= str.charCodeAt(i) << ((i%2) * 16) + blks[i>>1] |= 0x80 << ((i%2) * 16) + blks[nblk*16-2] = str.length * 16 + return blks +} + +/* + * External interface + */ +function hexMD5 (str) { return binl2hex(coreMD5( str2binl(str))) } +function hexMD5w(str) { return binl2hex(coreMD5(strw2binl(str))) } +function b64MD5 (str) { return binl2b64(coreMD5( str2binl(str))) } +function b64MD5w(str) { return binl2b64(coreMD5(strw2binl(str))) } +/* Backward compatibility */ +function calcMD5(str) { return binl2hex(coreMD5( str2binl(str))) } diff --git a/js/qr-scanner.js b/js/qr-scanner.js new file mode 100644 index 0000000..ace7ff5 --- /dev/null +++ b/js/qr-scanner.js @@ -0,0 +1,212 @@ +let html5QrCode; +let scannedUrl = ""; + +function safePause() { + try { + if (html5QrCode && html5QrCode.isScanning) { + html5QrCode.pause(); + } + } catch (e) { + console.warn("SafePause: Scanner already paused or not scanning", e); + } +} + +function safeResume() { + try { + if (html5QrCode && html5QrCode.isScanning) { + html5QrCode.resume(); + } + } catch (e) { + console.warn("SafeResume: Scanner not paused or not scanning", e); + } +} + +function handleDecodedText(decodedText) { + console.log(`Scan result: ${decodedText}`); + + let username = decodedText; + let password = ""; + scannedUrl = ""; + + // Check if result is a URL (common for Mikhmon vouchers) + try { + if (decodedText.startsWith('http://') || decodedText.startsWith('https://')) { + scannedUrl = decodedText; // Store for redirection + const url = new URL(decodedText); + const searchParams = url.search || (decodedText.includes('?') ? '?' + decodedText.split('?')[1] : ''); + const params = new URLSearchParams(searchParams); + + if (params.has('username')) { + username = params.get('username'); + } + if (params.has('password')) { + password = params.get('password'); + } + } + } catch (e) { + console.error("Error parsing QR URL:", e); + } + + // Fill inputs + const voucherInput = document.getElementById('voucher-input'); + const passField = document.getElementById('voucher-pass'); + if (voucherInput) voucherInput.value = username; + if (passField) passField.value = password || username; + + // Show confirmation overlay + const overlay = document.getElementById('qr-confirm-overlay'); + const confirmUser = document.getElementById('confirm-user'); + if (overlay && confirmUser) { + confirmUser.innerText = username; + overlay.classList.remove('hidden'); + } + + // Pause camera scanning while confirming + safePause(); +} + +function cancelConfirm() { + const overlay = document.getElementById('qr-confirm-overlay'); + if (overlay) overlay.classList.add('hidden'); + + safeResume(); +} + +function proceedSubmit() { + // If it's a URL, redirect directly + if (scannedUrl) { + console.log("Redirecting to scanned URL:", scannedUrl); + window.location.href = scannedUrl; + return; + } + + // Switch to voucher mode for manual codes + setMode('voucher'); + + // Sync values to the actual form fields + const voucherInput = document.getElementById('voucher-input'); + const voucherPass = document.getElementById('voucher-pass'); + const form = document.login; + + if (form && voucherInput) { + form.username.value = voucherInput.value; + form.password.value = voucherPass ? voucherPass.value : voucherInput.value; + } + + // Close scanner + closeQR(); + + // Submit + const submitBtn = document.querySelector('button[type="submit"]'); + if (submitBtn) { + submitBtn.click(); + } +} + +function scanFromFile(event) { + try { + const file = event.target.files[0]; + if (!file) { + console.log("No file selected."); + return; + } + + console.log("File selected:", file.name, file.type, file.size); + + // Ensure library is available + if (typeof Html5Qrcode === 'undefined') { + alert("QR Scanner library not loaded. Please wait or refresh."); + return; + } + + // Pause camera gracefully + safePause(); + + // Show a loading state + const confirmUser = document.getElementById('confirm-user'); + if (confirmUser) confirmUser.innerText = "Scanning file..."; + + // Hide overlay if it was open + const overlay = document.getElementById('qr-confirm-overlay'); + if (overlay) overlay.classList.add('hidden'); + + // Reuse instance if possible, or create temporary one for file + const fileScanner = new Html5Qrcode("qr-file-reader"); + + fileScanner.scanFile(file, true) + .then(decodedText => { + console.log("Success scanning file:", decodedText); + handleDecodedText(decodedText); + fileScanner.clear(); // Cleanup + }) + .catch(err => { + console.error(`Error scanning file: ${err}`); + let msg = "No QR Code found."; + if (typeof err === "string" && err.includes("not found")) { + msg = "QR Code not detected. Try a clearer or closer photo."; + } + alert(msg); + + if (confirmUser) confirmUser.innerText = ""; + + // Resume camera + if (html5QrCode && html5QrCode.isScanning) { + html5QrCode.resume(); + } + fileScanner.clear(); // Cleanup + }); + + // Reset input so searching for the same file again triggers change + event.target.value = ""; + + } catch (e) { + console.error("Fatal error in scanFromFile:", e); + const errorMsg = e.message || JSON.stringify(e) || e; + alert("An error occurred while opening the file: " + errorMsg); + + // Try to resume camera if it crashed here + if (html5QrCode && html5QrCode.isScanning) { + html5QrCode.resume(); + } + } +} + + + + +function openQR() { + const modal = document.getElementById('qr-scanner-modal'); + modal.style.display = 'flex'; + + if (!html5QrCode) { + html5QrCode = new Html5Qrcode("reader"); + } + + const config = { fps: 10, qrbox: { width: 250, height: 250 } }; + + html5QrCode.start( + { facingMode: "environment" }, + config, + handleDecodedText + ).catch(err => { + console.error("Scanner start error:", err); + }); +} + +function closeQR() { + const modal = document.getElementById('qr-scanner-modal'); + const overlay = document.getElementById('qr-confirm-overlay'); + + if (modal) modal.style.display = 'none'; + if (overlay) overlay.classList.add('hidden'); + + if (html5QrCode) { + html5QrCode.stop().then(() => { + console.log("Scanner stopped"); + }).catch((err) => { + // Ignore error if already stopped + }); + } +} + + diff --git a/js/script.js b/js/script.js new file mode 100644 index 0000000..b3d2146 --- /dev/null +++ b/js/script.js @@ -0,0 +1,255 @@ +function setMode(mode) { + const voucherMode = document.getElementById('voucher-mode'); + const memberMode = document.getElementById('member-mode'); + const voucherTab = document.querySelector('.tab-btn:nth-child(1)'); + const memberTab = document.querySelector('.tab-btn:nth-child(2)'); + const form = document.login; + + if (mode === 'voucher') { + voucherMode.classList.remove('hidden'); + memberMode.classList.add('hidden'); + voucherTab.classList.add('active'); + memberTab.classList.remove('active'); + + // Sync to form immediately + if (form) { + const code = document.getElementById('voucher-input').value; + form.username.value = code; + form.password.value = document.getElementById('voucher-pass').value || code; + } + } else { + voucherMode.classList.add('hidden'); + memberMode.classList.remove('hidden'); + voucherTab.classList.remove('active'); + memberTab.classList.add('active'); + + // Sync to form immediately + if (form) { + form.username.value = document.getElementById('member-user').value; + form.password.value = document.getElementById('member-pass').value; + } + } + + // Update login button text based on mode + const loginBtn = document.getElementById('login-btn'); + if (loginBtn) { + const lang = localStorage.getItem('twinpath_lang') || 'en'; + const key = mode === 'voucher' ? 'login_voucher' : 'login_member'; + loginBtn.setAttribute('data-i18n', key); + if (typeof translations !== 'undefined' && translations[lang] && translations[lang][key]) { + loginBtn.innerText = translations[lang][key]; + } + } +} + +function doLogin() { + const form = document.login; + const mode = document.querySelector('.tab-btn.active').innerText.toLowerCase(); + + // Sync inputs based on mode + if (mode === 'voucher') { + const code = document.getElementById('voucher-input').value; + form.username.value = code; + form.password.value = code; // Voucher usually uses same code for user/pass or just user with empty pass (depends on config) + // Note: Check your hotspot config. Often Vouchers are "Username = Password" + } else { + form.username.value = document.getElementById('member-user').value; + form.password.value = document.getElementById('member-pass').value; + } + + // Handle CHAP security if available + // Note: This relies on variables injected by TwinpathNet (Mikrotik) into the HTML/JS context + // We assume 'hexMD5' is available from md5.js + /* + TwinpathNet usually puts this logic in the + + + +
+
+
+
+
+
+ +
+
+ + EN +
+
+
EN
+
ID
+
+
+ + +
+ +
+ Operational +
+
+ + +
+ + $(if error) +
+ $(error) +
+ $(endif) + + +
+
+ Voucher +
+
+ Member +
+
+ + +
+ + + + +
+
+ +
+ + +
+ + +
+
+ + + + + +
+ + + + + $(if trial == 'yes') +
+ Or + +
+ $(endif) +
+
+
+ + +
+

Available Packages

+
+ +
+
3 HOURS
+
2K
+
+ +
+
1 DAY
+
5K
+
+ +
+
1 WEEK
+
10K
+
+
+
+ +
+

Powered by

+
+
+ + +
+ +
+
+

Point camera at QR Code

+ + + + + +
+

If it doesn't open automatically, please copy the link and paste it into your browser.

+
+ + +
+
+
+ + + +
+ + + + + + + + + + + + diff --git a/logout.html b/logout.html new file mode 100644 index 0000000..6756deb --- /dev/null +++ b/logout.html @@ -0,0 +1,68 @@ + + + + + + + Logout + + + + + +
+
+
+
+
+
+ +
+ +
+ +
+
+ + EN +
+
+
EN
+
ID
+
+
+
+

+ + Logged Out +

+

+ You have successfully disconnected from the network. +

+ +
+
+ Username +
+
$(username)
+
+ +
+
+ Session Duration +
+
$(uptime)
+
+ + + Log In Again + +
+ +
+

Powered by

+
+
+ + + diff --git a/md5.js b/md5.js new file mode 100644 index 0000000..a6e6339 --- /dev/null +++ b/md5.js @@ -0,0 +1,217 @@ +/* + * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message + * Digest Algorithm, as defined in RFC 1321. + * Version 1.1 Copyright (C) Paul Johnston 1999 - 2002. + * Code also contributed by Greg Holt + * See http://pajhome.org.uk/site/legal.html for details. + */ + +/* + * Add integers, wrapping at 2^32. This uses 16-bit operations internally + * to work around bugs in some JS interpreters. + */ +function safe_add(x, y) +{ + var lsw = (x & 0xFFFF) + (y & 0xFFFF) + var msw = (x >> 16) + (y >> 16) + (lsw >> 16) + return (msw << 16) | (lsw & 0xFFFF) +} + +/* + * Bitwise rotate a 32-bit number to the left. + */ +function rol(num, cnt) +{ + return (num << cnt) | (num >>> (32 - cnt)) +} + +/* + * These functions implement the four basic operations the algorithm uses. + */ +function cmn(q, a, b, x, s, t) +{ + return safe_add(rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b) +} +function ff(a, b, c, d, x, s, t) +{ + return cmn((b & c) | ((~b) & d), a, b, x, s, t) +} +function gg(a, b, c, d, x, s, t) +{ + return cmn((b & d) | (c & (~d)), a, b, x, s, t) +} +function hh(a, b, c, d, x, s, t) +{ + return cmn(b ^ c ^ d, a, b, x, s, t) +} +function ii(a, b, c, d, x, s, t) +{ + return cmn(c ^ (b | (~d)), a, b, x, s, t) +} + +/* + * Calculate the MD5 of an array of little-endian words, producing an array + * of little-endian words. + */ +function coreMD5(x) +{ + var a = 1732584193 + var b = -271733879 + var c = -1732584194 + var d = 271733878 + + for(i = 0; i < x.length; i += 16) + { + var olda = a + var oldb = b + var oldc = c + var oldd = d + + a = ff(a, b, c, d, x[i+ 0], 7 , -680876936) + d = ff(d, a, b, c, x[i+ 1], 12, -389564586) + c = ff(c, d, a, b, x[i+ 2], 17, 606105819) + b = ff(b, c, d, a, x[i+ 3], 22, -1044525330) + a = ff(a, b, c, d, x[i+ 4], 7 , -176418897) + d = ff(d, a, b, c, x[i+ 5], 12, 1200080426) + c = ff(c, d, a, b, x[i+ 6], 17, -1473231341) + b = ff(b, c, d, a, x[i+ 7], 22, -45705983) + a = ff(a, b, c, d, x[i+ 8], 7 , 1770035416) + d = ff(d, a, b, c, x[i+ 9], 12, -1958414417) + c = ff(c, d, a, b, x[i+10], 17, -42063) + b = ff(b, c, d, a, x[i+11], 22, -1990404162) + a = ff(a, b, c, d, x[i+12], 7 , 1804603682) + d = ff(d, a, b, c, x[i+13], 12, -40341101) + c = ff(c, d, a, b, x[i+14], 17, -1502002290) + b = ff(b, c, d, a, x[i+15], 22, 1236535329) + + a = gg(a, b, c, d, x[i+ 1], 5 , -165796510) + d = gg(d, a, b, c, x[i+ 6], 9 , -1069501632) + c = gg(c, d, a, b, x[i+11], 14, 643717713) + b = gg(b, c, d, a, x[i+ 0], 20, -373897302) + a = gg(a, b, c, d, x[i+ 5], 5 , -701558691) + d = gg(d, a, b, c, x[i+10], 9 , 38016083) + c = gg(c, d, a, b, x[i+15], 14, -660478335) + b = gg(b, c, d, a, x[i+ 4], 20, -405537848) + a = gg(a, b, c, d, x[i+ 9], 5 , 568446438) + d = gg(d, a, b, c, x[i+14], 9 , -1019803690) + c = gg(c, d, a, b, x[i+ 3], 14, -187363961) + b = gg(b, c, d, a, x[i+ 8], 20, 1163531501) + a = gg(a, b, c, d, x[i+13], 5 , -1444681467) + d = gg(d, a, b, c, x[i+ 2], 9 , -51403784) + c = gg(c, d, a, b, x[i+ 7], 14, 1735328473) + b = gg(b, c, d, a, x[i+12], 20, -1926607734) + + a = hh(a, b, c, d, x[i+ 5], 4 , -378558) + d = hh(d, a, b, c, x[i+ 8], 11, -2022574463) + c = hh(c, d, a, b, x[i+11], 16, 1839030562) + b = hh(b, c, d, a, x[i+14], 23, -35309556) + a = hh(a, b, c, d, x[i+ 1], 4 , -1530992060) + d = hh(d, a, b, c, x[i+ 4], 11, 1272893353) + c = hh(c, d, a, b, x[i+ 7], 16, -155497632) + b = hh(b, c, d, a, x[i+10], 23, -1094730640) + a = hh(a, b, c, d, x[i+13], 4 , 681279174) + d = hh(d, a, b, c, x[i+ 0], 11, -358537222) + c = hh(c, d, a, b, x[i+ 3], 16, -722521979) + b = hh(b, c, d, a, x[i+ 6], 23, 76029189) + a = hh(a, b, c, d, x[i+ 9], 4 , -640364487) + d = hh(d, a, b, c, x[i+12], 11, -421815835) + c = hh(c, d, a, b, x[i+15], 16, 530742520) + b = hh(b, c, d, a, x[i+ 2], 23, -995338651) + + a = ii(a, b, c, d, x[i+ 0], 6 , -198630844) + d = ii(d, a, b, c, x[i+ 7], 10, 1126891415) + c = ii(c, d, a, b, x[i+14], 15, -1416354905) + b = ii(b, c, d, a, x[i+ 5], 21, -57434055) + a = ii(a, b, c, d, x[i+12], 6 , 1700485571) + d = ii(d, a, b, c, x[i+ 3], 10, -1894986606) + c = ii(c, d, a, b, x[i+10], 15, -1051523) + b = ii(b, c, d, a, x[i+ 1], 21, -2054922799) + a = ii(a, b, c, d, x[i+ 8], 6 , 1873313359) + d = ii(d, a, b, c, x[i+15], 10, -30611744) + c = ii(c, d, a, b, x[i+ 6], 15, -1560198380) + b = ii(b, c, d, a, x[i+13], 21, 1309151649) + a = ii(a, b, c, d, x[i+ 4], 6 , -145523070) + d = ii(d, a, b, c, x[i+11], 10, -1120210379) + c = ii(c, d, a, b, x[i+ 2], 15, 718787259) + b = ii(b, c, d, a, x[i+ 9], 21, -343485551) + + a = safe_add(a, olda) + b = safe_add(b, oldb) + c = safe_add(c, oldc) + d = safe_add(d, oldd) + } + return [a, b, c, d] +} + +/* + * Convert an array of little-endian words to a hex string. + */ +function binl2hex(binarray) +{ + var hex_tab = "0123456789abcdef" + var str = "" + for(var i = 0; i < binarray.length * 4; i++) + { + str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) + + hex_tab.charAt((binarray[i>>2] >> ((i%4)*8)) & 0xF) + } + return str +} + +/* + * Convert an array of little-endian words to a base64 encoded string. + */ +function binl2b64(binarray) +{ + var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" + var str = "" + for(var i = 0; i < binarray.length * 32; i += 6) + { + str += tab.charAt(((binarray[i>>5] << (i%32)) & 0x3F) | + ((binarray[i>>5+1] >> (32-i%32)) & 0x3F)) + } + return str +} + +/* + * Convert an 8-bit character string to a sequence of 16-word blocks, stored + * as an array, and append appropriate padding for MD4/5 calculation. + * If any of the characters are >255, the high byte is silently ignored. + */ +function str2binl(str) +{ + var nblk = ((str.length + 8) >> 6) + 1 // number of 16-word blocks + var blks = new Array(nblk * 16) + for(var i = 0; i < nblk * 16; i++) blks[i] = 0 + for(var i = 0; i < str.length; i++) + blks[i>>2] |= (str.charCodeAt(i) & 0xFF) << ((i%4) * 8) + blks[i>>2] |= 0x80 << ((i%4) * 8) + blks[nblk*16-2] = str.length * 8 + return blks +} + +/* + * Convert a wide-character string to a sequence of 16-word blocks, stored as + * an array, and append appropriate padding for MD4/5 calculation. + */ +function strw2binl(str) +{ + var nblk = ((str.length + 4) >> 5) + 1 // number of 16-word blocks + var blks = new Array(nblk * 16) + for(var i = 0; i < nblk * 16; i++) blks[i] = 0 + for(var i = 0; i < str.length; i++) + blks[i>>1] |= str.charCodeAt(i) << ((i%2) * 16) + blks[i>>1] |= 0x80 << ((i%2) * 16) + blks[nblk*16-2] = str.length * 16 + return blks +} + +/* + * External interface + */ +function hexMD5 (str) { return binl2hex(coreMD5( str2binl(str))) } +function hexMD5w(str) { return binl2hex(coreMD5(strw2binl(str))) } +function b64MD5 (str) { return binl2b64(coreMD5( str2binl(str))) } +function b64MD5w(str) { return binl2b64(coreMD5(strw2binl(str))) } +/* Backward compatibility */ +function calcMD5(str) { return binl2hex(coreMD5( str2binl(str))) } diff --git a/radvert.html b/radvert.html new file mode 100644 index 0000000..9d48dea --- /dev/null +++ b/radvert.html @@ -0,0 +1,62 @@ + + + + + + + + + +Advertisement + + + + + +
+ +
+ +
+ +
+
+ + EN +
+
+
EN
+
ID
+
+
+

Advertisement

+

+ If nothing happens, open + advertisement + manually. +

+
+ +
+

Powered by

+
+ + + diff --git a/redirect.html b/redirect.html new file mode 100644 index 0000000..fe49bb7 --- /dev/null +++ b/redirect.html @@ -0,0 +1,12 @@ +$(if http-status == 302)Hotspot redirect$(endif) +$(if http-header == "Location")$(link-redirect)$(endif) + + +... + + + + + + + diff --git a/rlogin.html b/rlogin.html new file mode 100644 index 0000000..c15a005 --- /dev/null +++ b/rlogin.html @@ -0,0 +1,55 @@ +$(if http-status == 302)Hotspot login required$(endif) +$(if http-header == "Location")$(link-redirect)$(endif) + + + + + + + + Redirecting... + + + + + +
+
+
+
+
+
+ +
+ +
+ + +
+
+ + EN +
+
+
EN
+
ID
+
+
+ +
+
+
+
+

Redirecting...

+

+ Click here if not redirected automatically +

+
+ +
+

Powered by

+
+
+ + + diff --git a/status.html b/status.html new file mode 100644 index 0000000..18dd09c --- /dev/null +++ b/status.html @@ -0,0 +1,158 @@ + + + + + + + + Status + + + + + + +
+
+
+
+
+
+ +
+
+ + EN +
+
+
EN
+
ID
+
+
+ +
+ +
+ ● Online +
+
+ + +
+

Welcome Back!

+

Manage your active session and monitor your usage.

+
+ + +
+ +
+
+ + Time Remaining +
+
$(session-time-left)
+
+
+
+
+ + +
+
+ + Sisa Kuota +
+
+ $(if remain-bytes-total) + $(remain-bytes-total-nice) + $(else) + Unlimited + $(endif) +
+
+
+
+
+ + +
+
+ + User +
+
$(username)
+
+ + +
+
+ + IP Address +
+
$(ip)
+
+
+ + +
+

Connection Stats

+
+
+
+ + Upload +
+
$(bytes-in-nice)
+
+
+
+ + Download +
+
$(bytes-out-nice)
+
+
+
+ + +
+ + +
+ +
+

Powered by

+
+
+ + + + + + + diff --git a/svg/alert-circle.svg b/svg/alert-circle.svg new file mode 100644 index 0000000..9f640c9 --- /dev/null +++ b/svg/alert-circle.svg @@ -0,0 +1 @@ + diff --git a/svg/check-circle.svg b/svg/check-circle.svg new file mode 100644 index 0000000..8916b44 --- /dev/null +++ b/svg/check-circle.svg @@ -0,0 +1 @@ + diff --git a/svg/clock.svg b/svg/clock.svg new file mode 100644 index 0000000..7bd2b78 --- /dev/null +++ b/svg/clock.svg @@ -0,0 +1 @@ + diff --git a/svg/copy.svg b/svg/copy.svg new file mode 100644 index 0000000..28d470c --- /dev/null +++ b/svg/copy.svg @@ -0,0 +1,4 @@ + + + + diff --git a/svg/download-cloud.svg b/svg/download-cloud.svg new file mode 100644 index 0000000..ddb815f --- /dev/null +++ b/svg/download-cloud.svg @@ -0,0 +1 @@ + diff --git a/svg/external-link.svg b/svg/external-link.svg new file mode 100644 index 0000000..767e25e --- /dev/null +++ b/svg/external-link.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/svg/eye-off.svg b/svg/eye-off.svg new file mode 100644 index 0000000..5a77d0e --- /dev/null +++ b/svg/eye-off.svg @@ -0,0 +1 @@ + diff --git a/svg/eye.svg b/svg/eye.svg new file mode 100644 index 0000000..9887fdc --- /dev/null +++ b/svg/eye.svg @@ -0,0 +1 @@ + diff --git a/svg/help-circle.svg b/svg/help-circle.svg new file mode 100644 index 0000000..ae3b9a5 --- /dev/null +++ b/svg/help-circle.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/svg/image.svg b/svg/image.svg new file mode 100644 index 0000000..c4a5964 --- /dev/null +++ b/svg/image.svg @@ -0,0 +1 @@ + diff --git a/svg/languages.svg b/svg/languages.svg new file mode 100644 index 0000000..c07a59e --- /dev/null +++ b/svg/languages.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/svg/lock.svg b/svg/lock.svg new file mode 100644 index 0000000..07ffc43 --- /dev/null +++ b/svg/lock.svg @@ -0,0 +1 @@ + diff --git a/svg/log-out.svg b/svg/log-out.svg new file mode 100644 index 0000000..c4e63ef --- /dev/null +++ b/svg/log-out.svg @@ -0,0 +1 @@ + diff --git a/svg/scan-line.svg b/svg/scan-line.svg new file mode 100644 index 0000000..2e5af96 --- /dev/null +++ b/svg/scan-line.svg @@ -0,0 +1 @@ + diff --git a/svg/ticket.svg b/svg/ticket.svg new file mode 100644 index 0000000..ed3a41a --- /dev/null +++ b/svg/ticket.svg @@ -0,0 +1 @@ + diff --git a/svg/upload-cloud.svg b/svg/upload-cloud.svg new file mode 100644 index 0000000..10fd9f2 --- /dev/null +++ b/svg/upload-cloud.svg @@ -0,0 +1 @@ + diff --git a/svg/user.svg b/svg/user.svg new file mode 100644 index 0000000..c97a2f2 --- /dev/null +++ b/svg/user.svg @@ -0,0 +1 @@ + diff --git a/svg/wifi.svg b/svg/wifi.svg new file mode 100644 index 0000000..84cc0e7 --- /dev/null +++ b/svg/wifi.svg @@ -0,0 +1 @@ + diff --git a/xml/WISPAccessGatewayParam.xsd b/xml/WISPAccessGatewayParam.xsd new file mode 100644 index 0000000..88efc75 --- /dev/null +++ b/xml/WISPAccessGatewayParam.xsd @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xml/alogin.html b/xml/alogin.html new file mode 100644 index 0000000..35fcee7 --- /dev/null +++ b/xml/alogin.html @@ -0,0 +1,18 @@ + diff --git a/xml/error.html b/xml/error.html new file mode 100644 index 0000000..602231a --- /dev/null +++ b/xml/error.html @@ -0,0 +1,12 @@ + diff --git a/xml/flogout.html b/xml/flogout.html new file mode 100644 index 0000000..5ff46d3 --- /dev/null +++ b/xml/flogout.html @@ -0,0 +1,11 @@ + diff --git a/xml/login.html b/xml/login.html new file mode 100644 index 0000000..a7486e5 --- /dev/null +++ b/xml/login.html @@ -0,0 +1,22 @@ + diff --git a/xml/logout.html b/xml/logout.html new file mode 100644 index 0000000..33c55b4 --- /dev/null +++ b/xml/logout.html @@ -0,0 +1,11 @@ + diff --git a/xml/rlogin.html b/xml/rlogin.html new file mode 100644 index 0000000..50d5a4f --- /dev/null +++ b/xml/rlogin.html @@ -0,0 +1,15 @@ +