smartcomply-web-sdk 1.0.20 → 1.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts", "../src/client/Config.ts", "../src/errors/SDKError.ts", "../src/errors/AuthError.ts", "../src/errors/NetworkError.ts", "../src/client/HttpClient.ts", "../src/modules/onboarding/onboarding.ts", "../src/utils/device.ts", "../src/camera/CameraManager.ts", "../src/camera/VideoRecorder.ts", "../node_modules/@mediapipe/tasks-vision/vision_bundle.mjs", "../src/camera/FaceDetector.ts", "../src/camera/ActionDetector.ts", "../src/modules/liveness/LivenessUI.ts", "../src/modules/liveness/liveness.ts", "../src/client/Smartcomply.ts", "../src/flow/theme.ts", "../src/flow/DocumentCapture.ts", "../src/flow/SmartComplyFlow.ts", "../src/utils/logger.ts", "../src/camera/Permission.ts", "../src/utils/constants.ts", "../src/modules/liveness/uploader.ts"],
4
- "sourcesContent": ["import { SmartComply } from \"./client/Smartcomply\";\r\nimport { SmartComplyFlow } from \"./flow/SmartComplyFlow\";\r\n\r\nexport default SmartComply;\r\nexport { SmartComply, SmartComplyFlow };\r\n\r\n// Config\r\nexport type { SDKConfig, Environment } from \"./client/Config\";\r\n\r\n// Flow types\r\nexport type { FlowOptions, FlowResult } from \"./flow/SmartComplyFlow\";\r\n\r\n// Onboarding types\r\nexport type {\r\n OnboardingType,\r\n VerifyIdentityRequest,\r\n VerifyIdentityResponse,\r\n SessionResponse,\r\n SDKInitConfig,\r\n} from \"./types/onboarding\";\r\n\r\n// Liveness types\r\nexport type {\r\n ChallengeAction,\r\n LivenessCreateRequest,\r\n LivenessCreateResponse,\r\n LivenessSubmitResponse,\r\n LivenessWebhookPayload,\r\n} from \"./types/liveness\";\r\n\r\n// Response envelope types\r\nexport type {\r\n ApiResponse,\r\n FieldError,\r\n ErrorData,\r\n} from \"./types/common\";\r\n\r\n// Error classes\r\nexport { SDKError } from \"./errors/SDKError\";\r\nexport { AuthError } from \"./errors/AuthError\";\r\nexport { NetworkError } from \"./errors/NetworkError\";\r\n\r\n// Utilities\r\nexport { SDKLogger } from \"./utils/logger\";\r\nexport { collectDeviceMetadata } from \"./utils/device\";\r\nexport type { DeviceMetadata } from \"./utils/device\";\r\nexport {\r\n isCameraSupported,\r\n queryCameraPermission,\r\n requestCameraAccess,\r\n releaseCameraStream,\r\n} from \"./camera/Permission\";\r\nexport type { PermissionStatus, CameraPermissionResult } from \"./camera/Permission\";\r\n\r\n// Liveness uploader (for integrators that need progress reporting)\r\nexport { LivenessUploader } from \"./modules/liveness/uploader\";\r\nexport type { UploadOptions } from \"./modules/liveness/uploader\";\r\n", "export type Environment = \"sandbox\" | \"production\" | \"local\";\r\n\r\nexport const BASE_URLS: Record<Environment, string> = {\r\n sandbox: \"https://dev-adhere.smartcomply.com\",\r\n production: \"https://adhere-api.smartcomply.com\",\r\n local: \"http://127.0.0.1:8000\",\r\n};\r\n\r\nexport interface SDKConfig {\r\n apiKey: string;\r\n clientId: string; // Required UUID \u2014 used for session creation\r\n environment?: Environment;\r\n timeout?: number;\r\n}\r\n", "export class SDKError extends Error {\r\n statusCode: number;\r\n errorCode?: string;\r\n errorData?: Record<string, unknown>;\r\n\r\n constructor(\r\n message: string,\r\n statusCode: number,\r\n errorCode?: string,\r\n errorData?: Record<string, unknown>\r\n ) {\r\n super(message);\r\n this.name = \"SDKError\";\r\n this.statusCode = statusCode;\r\n this.errorCode = errorCode;\r\n this.errorData = errorData;\r\n }\r\n}\r\n", "import { SDKError } from \"./SDKError\";\r\n\r\n/**\r\n * Thrown when authentication fails (invalid API key, expired session, etc).\r\n */\r\nexport class AuthError extends SDKError {\r\n constructor(message: string, errorCode?: string) {\r\n super(message, 401, errorCode);\r\n this.name = \"AuthError\";\r\n }\r\n}\r\n", "import { SDKError } from \"./SDKError\";\r\n\r\n/**\r\n * Thrown when a network request fails (timeout, no connection, DNS failure, etc).\r\n */\r\nexport class NetworkError extends SDKError {\r\n constructor(message: string) {\r\n super(message, 0, \"NETWORK_ERROR\");\r\n this.name = \"NetworkError\";\r\n }\r\n}\r\n", "import { SDKConfig, BASE_URLS } from \"./Config\";\r\nimport { SDKError } from \"../errors/SDKError\";\r\nimport { AuthError } from \"../errors/AuthError\";\r\nimport { NetworkError } from \"../errors/NetworkError\";\r\nimport { ApiResponse } from \"../types/common\";\r\n\r\n/**\r\n * HTTP client aligned with Adhere backend contract.\r\n *\r\n * Two auth modes:\r\n * - request() \u2192 Authorization: Bearer <apiKey> (session creation)\r\n * - sessionRequest() \u2192 x-access-token: <sessionToken> (all other endpoints)\r\n * - uploadWithSession() \u2192 multipart + x-access-token (file uploads)\r\n */\r\nexport class HttpClient {\r\n private baseUrl: string;\r\n private apiKey: string;\r\n private timeout: number;\r\n private sessionToken: string | null = null;\r\n\r\n constructor(config: SDKConfig) {\r\n this.baseUrl = BASE_URLS[config.environment || \"sandbox\"];\r\n this.apiKey = config.apiKey;\r\n this.timeout = config.timeout || 30000;\r\n }\r\n\r\n setSessionToken(token: string): void {\r\n this.sessionToken = token;\r\n }\r\n\r\n /**\r\n * API-key authenticated request (used for session creation only).\r\n * Header: Authorization: Bearer <apiKey>\r\n */\r\n async request<T>(\r\n method: string,\r\n path: string,\r\n body?: unknown\r\n ): Promise<T> {\r\n return this._fetch<T>(path, {\r\n method,\r\n headers: {\r\n \"Authorization\": `Bearer ${this.apiKey}`,\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: body ? JSON.stringify(body) : undefined,\r\n });\r\n }\r\n\r\n /**\r\n * Session-token authenticated request (used for all endpoints after session creation).\r\n * Header: x-access-token: <sessionToken>\r\n */\r\n async sessionRequest<T>(\r\n method: string,\r\n path: string,\r\n body?: unknown\r\n ): Promise<T> {\r\n this.requireToken();\r\n\r\n return this._fetch<T>(path, {\r\n method,\r\n headers: {\r\n \"x-access-token\": this.sessionToken!,\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: body ? JSON.stringify(body) : undefined,\r\n });\r\n }\r\n\r\n /**\r\n * Multipart file upload with session-token auth.\r\n * Header: x-access-token: <sessionToken>\r\n * NOTE: Do NOT set Content-Type \u2014 browser sets it with boundary automatically.\r\n */\r\n async uploadWithSession<T>(path: string, formData: FormData): Promise<T> {\r\n this.requireToken();\r\n\r\n return this._fetch<T>(path, {\r\n method: \"POST\",\r\n headers: {\r\n \"x-access-token\": this.sessionToken!,\r\n },\r\n body: formData,\r\n });\r\n }\r\n\r\n /**\r\n * Unauthenticated GET \u2014 used for public endpoints (e.g. status polling after session revoke).\r\n */\r\n async publicGet<T>(path: string): Promise<T> {\r\n return this._fetch<T>(path, {\r\n method: \"GET\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n });\r\n }\r\n\r\n /**\r\n * Legacy upload with API key (kept for backward compatibility if needed).\r\n */\r\n async upload<T>(path: string, formData: FormData): Promise<T> {\r\n return this._fetch<T>(path, {\r\n method: \"POST\",\r\n headers: {\r\n \"Authorization\": `Bearer ${this.apiKey}`,\r\n },\r\n body: formData,\r\n });\r\n }\r\n\r\n // ---- Internal ----\r\n\r\n private requireToken(): void {\r\n if (!this.sessionToken) {\r\n throw new AuthError(\r\n \"No session token set. Call sdk.createSession() first.\",\r\n \"NO_SESSION_TOKEN\"\r\n );\r\n }\r\n }\r\n\r\n private async _fetch<T>(path: string, init: RequestInit, retries = 2): Promise<T> {\r\n const controller = new AbortController();\r\n const timer = setTimeout(() => controller.abort(), this.timeout);\r\n\r\n try {\r\n const response = await fetch(`${this.baseUrl}${path}`, {\r\n ...init,\r\n signal: controller.signal,\r\n });\r\n\r\n const contentType = response.headers.get(\"content-type\") || \"\";\r\n if (!contentType.includes(\"application/json\")) {\r\n throw new SDKError(\r\n `Unexpected response from ${path} (${response.status})`,\r\n response.status\r\n );\r\n }\r\n\r\n // Parse the backend's standard response envelope\r\n const envelope: ApiResponse = await response.json();\r\n\r\n if (!response.ok || envelope.status === \"error\") {\r\n const statusCode = response.status;\r\n\r\n // Map specific HTTP statuses to error types\r\n if (statusCode === 401 || statusCode === 403) {\r\n throw new AuthError(\r\n envelope.message || \"Authentication failed\",\r\n envelope.code\r\n );\r\n }\r\n\r\n throw new SDKError(\r\n envelope.message || `Request to ${path} failed`,\r\n statusCode,\r\n envelope.code,\r\n envelope.data as Record<string, unknown>\r\n );\r\n }\r\n\r\n // Return the full envelope for verify responses (so SDK can check status)\r\n // For other endpoints, return unwrapped data\r\n if (path.includes(\"/verify/\")) {\r\n return envelope as T;\r\n }\r\n return envelope.data as T;\r\n\r\n } catch (err: any) {\r\n if (err instanceof SDKError || err instanceof AuthError) throw err;\r\n\r\n // C5: Retry on network errors (not auth/validation errors)\r\n if (retries > 0 && (err.name === \"AbortError\" || err.name === \"TypeError\")) {\r\n clearTimeout(timer);\r\n await new Promise((r) => setTimeout(r, 1000)); // wait 1s before retry\r\n return this._fetch<T>(path, init, retries - 1);\r\n }\r\n\r\n if (err.name === \"AbortError\") {\r\n throw new NetworkError(\"Request timeout. Please check your connection and try again.\");\r\n }\r\n if (err.name === \"TypeError\" && err.message?.includes(\"fetch\")) {\r\n throw new NetworkError(`Network error: ${err.message}`);\r\n }\r\n\r\n throw new SDKError(\r\n err.message || \"Unknown error\",\r\n 0,\r\n \"UNKNOWN_ERROR\"\r\n );\r\n } finally {\r\n clearTimeout(timer);\r\n }\r\n }\r\n}\r\n", "import { HttpClient } from \"../../client/HttpClient\";\r\nimport {\r\n VerifyIdentityRequest,\r\n VerifyIdentityResponse,\r\n} from \"../../types/onboarding\";\r\n\r\n/**\r\n * Onboarding module \u2014 identity verification.\r\n *\r\n * All methods use session-token auth (x-access-token header).\r\n */\r\nexport class OnboardingModule {\r\n constructor(private http: HttpClient) {}\r\n\r\n /**\r\n * Verify a user's identity.\r\n *\r\n * POST /v1/onboarding/verify/\r\n * Auth: x-access-token: <sessionToken>\r\n *\r\n * Sends identity_type_id (from ChannelItem.id) and dynamic fields\r\n * collected from the user based on the channel's field definitions.\r\n *\r\n * Example:\r\n * { identity_type_id: 3, fields: { \"bank_verification_number\": \"12345678901\" } }\r\n */\r\n async verify(params: VerifyIdentityRequest): Promise<VerifyIdentityResponse> {\r\n return this.http.sessionRequest<VerifyIdentityResponse>(\r\n \"POST\",\r\n \"/v1/onboarding/verify/\",\r\n {\r\n identity_type_id: params.identity_type_id,\r\n fields: params.fields,\r\n }\r\n );\r\n }\r\n}\r\n", "/**\r\n * Collects device / browser context metadata.\r\n * All values are derived from standard browser APIs \u2014 no external library needed.\r\n * Sent to the backend at liveness/create so they appear in the webhook\r\n * request_context block.\r\n */\r\nexport interface DeviceMetadata {\r\n device_type: \"mobile\" | \"desktop\" | \"tablet\";\r\n os_name: string;\r\n browser_timezone: string;\r\n fingerprint_id: string;\r\n}\r\n\r\nfunction detectOs(ua: string): string {\r\n if (/Windows NT/i.test(ua)) return \"Windows\";\r\n if (/Mac OS X|Macintosh/i.test(ua)) return \"macOS\";\r\n if (/Android/i.test(ua)) return \"Android\";\r\n if (/iPhone|iPad|iPod/i.test(ua)) return \"iOS\";\r\n if (/Linux/i.test(ua)) return \"Linux\";\r\n if (/CrOS/i.test(ua)) return \"ChromeOS\";\r\n return \"Unknown\";\r\n}\r\n\r\nfunction getOrCreateFingerprintId(): string {\r\n const KEY = \"_adhere_fid\";\r\n try {\r\n let fid = localStorage.getItem(KEY);\r\n if (!fid) {\r\n fid =\r\n typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\"\r\n ? crypto.randomUUID()\r\n : Math.random().toString(36).slice(2) + Date.now().toString(36);\r\n localStorage.setItem(KEY, fid);\r\n }\r\n return fid;\r\n } catch {\r\n // localStorage unavailable (e.g. private browsing with strict settings)\r\n return Math.random().toString(36).slice(2) + Date.now().toString(36);\r\n }\r\n}\r\n\r\nexport function collectDeviceMetadata(): DeviceMetadata {\r\n const ua = navigator.userAgent;\r\n\r\n const isTablet =\r\n /iPad/i.test(ua) ||\r\n (/Android/i.test(ua) && !/Mobile/i.test(ua));\r\n\r\n const isMobile =\r\n !isTablet &&\r\n /Mobi|Android|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(ua);\r\n\r\n const device_type: DeviceMetadata[\"device_type\"] = isTablet\r\n ? \"tablet\"\r\n : isMobile\r\n ? \"mobile\"\r\n : \"desktop\";\r\n\r\n return {\r\n device_type,\r\n os_name: detectOs(ua),\r\n browser_timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\r\n fingerprint_id: getOrCreateFingerprintId(),\r\n };\r\n}\r\n", "export class CameraManager {\r\n private stream: MediaStream | null = null;\r\n\r\n async open(constraints?: MediaStreamConstraints): Promise<MediaStream> {\r\n const defaults: MediaStreamConstraints = {\r\n video: {\r\n facingMode: \"user\",\r\n width: { ideal: 1280 },\r\n height: { ideal: 720 },\r\n },\r\n audio: false,\r\n };\r\n\r\n this.stream = await navigator.mediaDevices.getUserMedia(\r\n constraints || defaults\r\n );\r\n\r\n return this.stream;\r\n }\r\n\r\n getStream(): MediaStream | null {\r\n return this.stream;\r\n }\r\n\r\n stop(): void {\r\n if (this.stream) {\r\n this.stream.getTracks().forEach((track) => track.stop());\r\n this.stream = null;\r\n }\r\n }\r\n}\r\n", "export class VideoRecorder {\r\n private recorder: MediaRecorder | null = null;\r\n private chunks: Blob[] = [];\r\n private startedAt: number = 0;\r\n\r\n start(stream: MediaStream): void {\r\n this.chunks = [];\r\n\r\n const mimeType = MediaRecorder.isTypeSupported(\"video/webm;codecs=vp9\")\r\n ? \"video/webm;codecs=vp9\"\r\n : \"video/webm\";\r\n\r\n this.recorder = new MediaRecorder(stream, {\r\n mimeType,\r\n videoBitsPerSecond: 250_000, // ~1.4 MB for 45s \u2014 keeps file under server upload limit\r\n });\r\n\r\n this.recorder.ondataavailable = (e) => {\r\n if (e.data.size > 0) {\r\n this.chunks.push(e.data);\r\n }\r\n };\r\n\r\n this.startedAt = Date.now();\r\n this.recorder.start();\r\n }\r\n\r\n stop(): Promise<{ blob: Blob; durationSeconds: number }> {\r\n return new Promise((resolve, reject) => {\r\n if (!this.recorder || this.recorder.state === \"inactive\") {\r\n reject(new Error(\"Recorder is not active\"));\r\n return;\r\n }\r\n\r\n const stoppedAt = Date.now();\r\n\r\n this.recorder.onstop = () => {\r\n const blob = new Blob(this.chunks, { type: \"video/webm\" });\r\n const durationSeconds = parseFloat(\r\n ((stoppedAt - this.startedAt) / 1000).toFixed(2)\r\n );\r\n this.chunks = [];\r\n resolve({ blob, durationSeconds });\r\n };\r\n\r\n this.recorder.onerror = () => {\r\n reject(new Error(\"Recording failed\"));\r\n };\r\n\r\n this.recorder.stop();\r\n });\r\n }\r\n\r\n isRecording(): boolean {\r\n return this.recorder?.state === \"recording\";\r\n }\r\n}\r\n", "var t=\"undefined\"!=typeof self?self:{};function e(e,n){t:{for(var r=[\"CLOSURE_FLAGS\"],i=t,s=0;s<r.length;s++)if(null==(i=i[r[s]])){r=null;break t}r=i}return null!=(e=r&&r[e])?e:n}function n(){throw Error(\"Invalid UTF8\")}function r(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}let i,s;const o=\"undefined\"!=typeof TextDecoder;let a;const c=\"undefined\"!=typeof TextEncoder;function h(t){if(c)t=(a||=new TextEncoder).encode(t);else{let n=0;const r=new Uint8Array(3*t.length);for(let i=0;i<t.length;i++){var e=t.charCodeAt(i);if(e<128)r[n++]=e;else{if(e<2048)r[n++]=e>>6|192;else{if(e>=55296&&e<=57343){if(e<=56319&&i<t.length){const s=t.charCodeAt(++i);if(s>=56320&&s<=57343){e=1024*(e-55296)+s-56320+65536,r[n++]=e>>18|240,r[n++]=e>>12&63|128,r[n++]=e>>6&63|128,r[n++]=63&e|128;continue}i--}e=65533}r[n++]=e>>12|224,r[n++]=e>>6&63|128}r[n++]=63&e|128}}t=n===r.length?r:r.subarray(0,n)}return t}function u(e){t.setTimeout((()=>{throw e}),0)}var l,f=e(610401301,!1),d=e(748402147,!0),p=e(824648567,!0),g=e(824656860,e(1,!0));function m(){var e=t.navigator;return e&&(e=e.userAgent)?e:\"\"}const y=t.navigator;function _(t){return _[\" \"](t),t}l=y&&y.userAgentData||null,_[\" \"]=function(){};const v={};let E=null;function w(t){const e=t.length;let n=3*e/4;n%3?n=Math.floor(n):-1!=\"=.\".indexOf(t[e-1])&&(n=-1!=\"=.\".indexOf(t[e-2])?n-2:n-1);const r=new Uint8Array(n);let i=0;return function(t,e){function n(e){for(;r<t.length;){const e=t.charAt(r++),n=E[e];if(null!=n)return n;if(!/^[\\s\\xa0]*$/.test(e))throw Error(\"Unknown base64 encoding at char: \"+e)}return e}T();let r=0;for(;;){const t=n(-1),r=n(0),i=n(64),s=n(64);if(64===s&&-1===t)break;e(t<<2|r>>4),64!=i&&(e(r<<4&240|i>>2),64!=s&&e(i<<6&192|s))}}(t,(function(t){r[i++]=t})),i!==n?r.subarray(0,i):r}function T(){if(!E){E={};var t=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\".split(\"\"),e=[\"+/=\",\"+/\",\"-_=\",\"-_.\",\"-_\"];for(let n=0;n<5;n++){const r=t.concat(e[n].split(\"\"));v[n]=r;for(let t=0;t<r.length;t++){const e=r[t];void 0===E[e]&&(E[e]=t)}}}}var A=\"undefined\"!=typeof Uint8Array,b=!(!(f&&l&&l.brands.length>0)&&(-1!=m().indexOf(\"Trident\")||-1!=m().indexOf(\"MSIE\")))&&\"function\"==typeof btoa;const k=/[-_.]/g,S={\"-\":\"+\",_:\"/\",\".\":\"=\"};function x(t){return S[t]||\"\"}function L(t){if(!b)return w(t);t=k.test(t)?t.replace(k,x):t,t=atob(t);const e=new Uint8Array(t.length);for(let n=0;n<t.length;n++)e[n]=t.charCodeAt(n);return e}function R(t){return A&&null!=t&&t instanceof Uint8Array}var I={};function F(){return C||=new P(null,I)}function M(t){N(I);var e=t.g;return null==(e=null==e||R(e)?e:\"string\"==typeof e?L(e):null)?e:t.g=e}var P=class{h(){return new Uint8Array(M(this)||0)}constructor(t,e){if(N(e),this.g=t,null!=t&&0===t.length)throw Error(\"ByteString should be constructed with non-empty values\")}};let C,O;function N(t){if(t!==I)throw Error(\"illegal external caller\")}function U(t,e){t.__closure__error__context__984382||(t.__closure__error__context__984382={}),t.__closure__error__context__984382.severity=e}function D(t){return U(t=Error(t),\"warning\"),t}function B(t,e){if(null!=t){var n=O??={},r=n[t]||0;r>=e||(n[t]=r+1,U(t=Error(),\"incident\"),u(t))}}function G(){return\"function\"==typeof BigInt}var j=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol();function V(t,e,n=!1){return\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol()?n&&Symbol.for&&t?Symbol.for(t):null!=t?Symbol(t):Symbol():e}var X=V(\"jas\",void 0,!0),H=V(void 0,\"0di\"),W=V(void 0,\"1oa\"),z=V(void 0,Symbol()),K=V(void 0,\"0ub\"),Y=V(void 0,\"0ubs\"),q=V(void 0,\"0ubsb\"),$=V(void 0,\"0actk\"),J=V(\"m_m\",\"Pa\",!0),Z=V();const Q={Ga:{value:0,configurable:!0,writable:!0,enumerable:!1}},tt=Object.defineProperties,et=j?X:\"Ga\";var nt;const rt=[];function it(t,e){j||et in t||tt(t,Q),t[et]|=e}function st(t,e){j||et in t||tt(t,Q),t[et]=e}function ot(t){return it(t,34),t}function at(t){return it(t,8192),t}st(rt,7),nt=Object.freeze(rt);var ct={};function ht(t,e){return void 0===e?t.h!==ut&&!!(2&(0|t.v[et])):!!(2&e)&&t.h!==ut}const ut={};function lt(t,e){if(null!=t)if(\"string\"==typeof t)t=t?new P(t,I):F();else if(t.constructor!==P)if(R(t))t=t.length?new P(new Uint8Array(t),I):F();else{if(!e)throw Error();t=void 0}return t}class ft{constructor(t,e,n){this.g=t,this.h=e,this.l=n}next(){const t=this.g.next();return t.done||(t.value=this.h.call(this.l,t.value)),t}[Symbol.iterator](){return this}}var dt=Object.freeze({});function pt(t,e,n){const r=128&e?0:-1,i=t.length;var s;(s=!!i)&&(s=null!=(s=t[i-1])&&\"object\"==typeof s&&s.constructor===Object);const o=i+(s?-1:0);for(e=128&e?1:0;e<o;e++)n(e-r,t[e]);if(s){t=t[i-1];for(const e in t)!isNaN(e)&&n(+e,t[e])}}var gt={};function mt(t){return 128&t?gt:void 0}function yt(t){return t.Na=!0,t}var _t=yt((t=>\"number\"==typeof t)),vt=yt((t=>\"string\"==typeof t)),Et=yt((t=>\"boolean\"==typeof t)),wt=\"function\"==typeof t.BigInt&&\"bigint\"==typeof t.BigInt(0);function Tt(t){var e=t;if(vt(e)){if(!/^\\s*(?:-?[1-9]\\d*|0)?\\s*$/.test(e))throw Error(String(e))}else if(_t(e)&&!Number.isSafeInteger(e))throw Error(String(e));return wt?BigInt(t):t=Et(t)?t?\"1\":\"0\":vt(t)?t.trim()||\"0\":String(t)}var At=yt((t=>wt?t>=kt&&t<=xt:\"-\"===t[0]?Lt(t,bt):Lt(t,St)));const bt=Number.MIN_SAFE_INTEGER.toString(),kt=wt?BigInt(Number.MIN_SAFE_INTEGER):void 0,St=Number.MAX_SAFE_INTEGER.toString(),xt=wt?BigInt(Number.MAX_SAFE_INTEGER):void 0;function Lt(t,e){if(t.length>e.length)return!1;if(t.length<e.length||t===e)return!0;for(let n=0;n<t.length;n++){const r=t[n],i=e[n];if(r>i)return!1;if(r<i)return!0}}const Rt=\"function\"==typeof Uint8Array.prototype.slice;let It,Ft=0,Mt=0;function Pt(t){const e=t>>>0;Ft=e,Mt=(t-e)/4294967296>>>0}function Ct(t){if(t<0){Pt(-t);const[e,n]=Ht(Ft,Mt);Ft=e>>>0,Mt=n>>>0}else Pt(t)}function Ot(t){const e=It||=new DataView(new ArrayBuffer(8));e.setFloat32(0,+t,!0),Mt=0,Ft=e.getUint32(0,!0)}function Nt(t,e){const n=4294967296*e+(t>>>0);return Number.isSafeInteger(n)?n:Gt(t,e)}function Ut(t,e){return Tt(G()?BigInt.asUintN(64,(BigInt(e>>>0)<<BigInt(32))+BigInt(t>>>0)):Gt(t,e))}function Dt(t,e){const n=2147483648&e;return n&&(e=~e>>>0,0==(t=1+~t>>>0)&&(e=e+1>>>0)),\"number\"==typeof(t=Nt(t,e))?n?-t:t:n?\"-\"+t:t}function Bt(t,e){return G()?Tt(BigInt.asIntN(64,(BigInt.asUintN(32,BigInt(e))<<BigInt(32))+BigInt.asUintN(32,BigInt(t)))):Tt(Vt(t,e))}function Gt(t,e){if(t>>>=0,(e>>>=0)<=2097151)var n=\"\"+(4294967296*e+t);else G()?n=\"\"+(BigInt(e)<<BigInt(32)|BigInt(t)):(t=(16777215&t)+6777216*(n=16777215&(t>>>24|e<<8))+6710656*(e=e>>16&65535),n+=8147497*e,e*=2,t>=1e7&&(n+=t/1e7>>>0,t%=1e7),n>=1e7&&(e+=n/1e7>>>0,n%=1e7),n=e+jt(n)+jt(t));return n}function jt(t){return t=String(t),\"0000000\".slice(t.length)+t}function Vt(t,e){if(2147483648&e)if(G())t=\"\"+(BigInt(0|e)<<BigInt(32)|BigInt(t>>>0));else{const[n,r]=Ht(t,e);t=\"-\"+Gt(n,r)}else t=Gt(t,e);return t}function Xt(t){if(t.length<16)Ct(Number(t));else if(G())t=BigInt(t),Ft=Number(t&BigInt(4294967295))>>>0,Mt=Number(t>>BigInt(32)&BigInt(4294967295));else{const e=+(\"-\"===t[0]);Mt=Ft=0;const n=t.length;for(let r=e,i=(n-e)%6+e;i<=n;r=i,i+=6){const e=Number(t.slice(r,i));Mt*=1e6,Ft=1e6*Ft+e,Ft>=4294967296&&(Mt+=Math.trunc(Ft/4294967296),Mt>>>=0,Ft>>>=0)}if(e){const[t,e]=Ht(Ft,Mt);Ft=t,Mt=e}}}function Ht(t,e){return e=~e,t?t=1+~t:e+=1,[t,e]}function Wt(t){return Array.prototype.slice.call(t)}const zt=\"function\"==typeof BigInt?BigInt.asIntN:void 0,Kt=\"function\"==typeof BigInt?BigInt.asUintN:void 0,Yt=Number.isSafeInteger,qt=Number.isFinite,$t=Math.trunc,Jt=Tt(0);function Zt(t){if(null!=t&&\"number\"!=typeof t)throw Error(`Value of float/double field must be a number, found ${typeof t}: ${t}`);return t}function Qt(t){return null==t||\"number\"==typeof t?t:\"NaN\"===t||\"Infinity\"===t||\"-Infinity\"===t?Number(t):void 0}function te(t){if(null!=t&&\"boolean\"!=typeof t){var e=typeof t;throw Error(`Expected boolean but got ${\"object\"!=e?e:t?Array.isArray(t)?\"array\":e:\"null\"}: ${t}`)}return t}function ee(t){return null==t||\"boolean\"==typeof t?t:\"number\"==typeof t?!!t:void 0}const ne=/^-?([1-9][0-9]*|0)(\\.[0-9]+)?$/;function re(t){switch(typeof t){case\"bigint\":return!0;case\"number\":return qt(t);case\"string\":return ne.test(t);default:return!1}}function ie(t){if(null==t)return t;if(\"string\"==typeof t&&t)t=+t;else if(\"number\"!=typeof t)return;return qt(t)?0|t:void 0}function se(t){if(null==t)return t;if(\"string\"==typeof t&&t)t=+t;else if(\"number\"!=typeof t)return;return qt(t)?t>>>0:void 0}function oe(t){const e=t.length;return(\"-\"===t[0]?e<20||20===e&&t<=\"-9223372036854775808\":e<19||19===e&&t<=\"9223372036854775807\")?t:(Xt(t),Vt(Ft,Mt))}function ae(t){return t=$t(t),Yt(t)||(Ct(t),t=Dt(Ft,Mt)),t}function ce(t){var e=$t(Number(t));return Yt(e)?String(e):(-1!==(e=t.indexOf(\".\"))&&(t=t.substring(0,e)),oe(t))}function he(t){var e=$t(Number(t));return Yt(e)?Tt(e):(-1!==(e=t.indexOf(\".\"))&&(t=t.substring(0,e)),G()?Tt(zt(64,BigInt(t))):Tt(oe(t)))}function ue(t){return Yt(t)?t=Tt(ae(t)):(t=$t(t),Yt(t)?t=String(t):(Ct(t),t=Vt(Ft,Mt)),t=Tt(t)),t}function le(t){return null==t?t:\"bigint\"==typeof t?(At(t)?t=Number(t):(t=zt(64,t),t=At(t)?Number(t):String(t)),t):re(t)?\"number\"==typeof t?ae(t):ce(t):void 0}function fe(t){const e=typeof t;return null==t?t:\"bigint\"===e?Tt(zt(64,t)):re(t)?\"string\"===e?he(t):ue(t):void 0}function de(t){if(\"string\"!=typeof t)throw Error();return t}function pe(t){if(null!=t&&\"string\"!=typeof t)throw Error();return t}function ge(t){return null==t||\"string\"==typeof t?t:void 0}function me(t,e,n,r){return null!=t&&t[J]===ct?t:Array.isArray(t)?((r=(n=0|t[et])|32&r|2&r)!==n&&st(t,r),new e(t)):(n?2&r?((t=e[H])||(ot((t=new e).v),t=e[H]=t),e=t):e=new e:e=void 0,e)}function ye(t,e,n){if(e)t:{if(!re(e=t))throw D(\"int64\");switch(typeof e){case\"string\":e=he(e);break t;case\"bigint\":e=Tt(zt(64,e));break t;default:e=ue(e)}}else e=fe(t);return null==(t=e)?n?Jt:void 0:t}const _e={};let ve=function(){try{return _(new class extends Map{constructor(){super()}}),!1}catch{return!0}}();class Ee{constructor(){this.g=new Map}get(t){return this.g.get(t)}set(t,e){return this.g.set(t,e),this.size=this.g.size,this}delete(t){return t=this.g.delete(t),this.size=this.g.size,t}clear(){this.g.clear(),this.size=this.g.size}has(t){return this.g.has(t)}entries(){return this.g.entries()}keys(){return this.g.keys()}values(){return this.g.values()}forEach(t,e){return this.g.forEach(t,e)}[Symbol.iterator](){return this.entries()}}const we=ve?(Object.setPrototypeOf(Ee.prototype,Map.prototype),Object.defineProperties(Ee.prototype,{size:{value:0,configurable:!0,enumerable:!0,writable:!0}}),Ee):class extends Map{constructor(){super()}};function Te(t){return t}function Ae(t){if(2&t.J)throw Error(\"Cannot mutate an immutable Map\")}var be=class extends we{constructor(t,e,n=Te,r=Te){super(),this.J=0|t[et],this.K=e,this.S=n,this.fa=this.K?ke:r;for(let i=0;i<t.length;i++){const s=t[i],o=n(s[0],!1,!0);let a=s[1];e?void 0===a&&(a=null):a=r(s[1],!1,!0,void 0,void 0,this.J),super.set(o,a)}}V(t){return at(Array.from(super.entries(),t))}clear(){Ae(this),super.clear()}delete(t){return Ae(this),super.delete(this.S(t,!0,!1))}entries(){if(this.K){var t=super.keys();t=new ft(t,Se,this)}else t=super.entries();return t}values(){if(this.K){var t=super.keys();t=new ft(t,be.prototype.get,this)}else t=super.values();return t}forEach(t,e){this.K?super.forEach(((n,r,i)=>{t.call(e,i.get(r),r,i)})):super.forEach(t,e)}set(t,e){return Ae(this),null==(t=this.S(t,!0,!1))?this:null==e?(super.delete(t),this):super.set(t,this.fa(e,!0,!0,this.K,!1,this.J))}Ma(t){const e=this.S(t[0],!1,!0);t=t[1],t=this.K?void 0===t?null:t:this.fa(t,!1,!0,void 0,!1,this.J),super.set(e,t)}has(t){return super.has(this.S(t,!1,!1))}get(t){t=this.S(t,!1,!1);const e=super.get(t);if(void 0!==e){var n=this.K;return n?((n=this.fa(e,!1,!0,n,this.ra,this.J))!==e&&super.set(t,n),n):e}}[Symbol.iterator](){return this.entries()}};function ke(t,e,n,r,i,s){return t=me(t,r,n,s),i&&(t=Ke(t)),t}function Se(t){return[t,this.get(t)]}let xe;function Le(){return xe||=new be(ot([]),void 0,void 0,void 0,_e)}function Re(t){return z?t[z]:void 0}function Ie(t,e){for(const n in t)!isNaN(n)&&e(t,+n,t[n])}be.prototype.toJSON=void 0;var Fe=class{};const Me={Ka:!0};function Pe(t,e){e<100||B(Y,1)}function Ce(t,e,n,r){const i=void 0!==r;r=!!r;var s,o=z;!i&&j&&o&&(s=t[o])&&Ie(s,Pe),o=[];var a=t.length;let c;s=4294967295;let h=!1;const u=!!(64&e),l=u?128&e?0:-1:void 0;1&e||(c=a&&t[a-1],null!=c&&\"object\"==typeof c&&c.constructor===Object?s=--a:c=void 0,!u||128&e||i||(h=!0,s=s-l+l)),e=void 0;for(var f=0;f<a;f++){let i=t[f];if(null!=i&&null!=(i=n(i,r)))if(u&&f>=s){const t=f-l;(e??={})[t]=i}else o[f]=i}if(c)for(let t in c){if(null==(a=c[t])||null==(a=n(a,r)))continue;let i;f=+t,u&&!Number.isNaN(f)&&(i=f+l)<s?o[i]=a:(e??={})[t]=a}return e&&(h?o.push(e):o[s]=e),i&&z&&(t=Re(t))&&t instanceof Fe&&(o[z]=function(t){const e=new Fe;return Ie(t,((t,n,r)=>{e[n]=Wt(r)})),e.da=t.da,e}(t)),o}function Oe(t){return t[0]=Ne(t[0]),t[1]=Ne(t[1]),t}function Ne(t){switch(typeof t){case\"number\":return Number.isFinite(t)?t:\"\"+t;case\"bigint\":return At(t)?Number(t):\"\"+t;case\"boolean\":return t?1:0;case\"object\":if(Array.isArray(t)){var e=0|t[et];return 0===t.length&&1&e?void 0:Ce(t,e,Ne)}if(null!=t&&t[J]===ct)return Ue(t);if(t instanceof P){if(null==(e=t.g))t=\"\";else if(\"string\"==typeof e)t=e;else{if(b){for(var n=\"\",r=0,i=e.length-10240;r<i;)n+=String.fromCharCode.apply(null,e.subarray(r,r+=10240));n+=String.fromCharCode.apply(null,r?e.subarray(r):e),e=btoa(n)}else{void 0===n&&(n=0),T(),n=v[n],r=Array(Math.floor(e.length/3)),i=n[64]||\"\";let t=0,h=0;for(;t<e.length-2;t+=3){var s=e[t],o=e[t+1],a=e[t+2],c=n[s>>2];s=n[(3&s)<<4|o>>4],o=n[(15&o)<<2|a>>6],a=n[63&a],r[h++]=c+s+o+a}switch(c=0,a=i,e.length-t){case 2:a=n[(15&(c=e[t+1]))<<2]||i;case 1:e=e[t],r[h]=n[e>>2]+n[(3&e)<<4|c>>4]+a+i}e=r.join(\"\")}t=t.g=e}return t}return t instanceof be?t=0!==t.size?t.V(Oe):void 0:void 0}return t}function Ue(t){return Ce(t=t.v,0|t[et],Ne)}let De,Be;function Ge(t,e){return je(t,e[0],e[1])}function je(t,e,n,r=0){if(null==t){var i=32;n?(t=[n],i|=128):t=[],e&&(i=-16760833&i|(1023&e)<<14)}else{if(!Array.isArray(t))throw Error(\"narr\");if(i=0|t[et],d&&1&i)throw Error(\"rfarr\");if(2048&i&&!(2&i)&&function(){if(d)throw Error(\"carr\");B($,5)}(),256&i)throw Error(\"farr\");if(64&i)return(i|r)!==i&&st(t,i|r),t;if(n&&(i|=128,n!==t[0]))throw Error(\"mid\");t:{i|=64;var s=(n=t).length;if(s){var o=s-1;const t=n[o];if(null!=t&&\"object\"==typeof t&&t.constructor===Object){if((o-=e=128&i?0:-1)>=1024)throw Error(\"pvtlmt\");for(var a in t)(s=+a)<o&&(n[s+e]=t[a],delete t[a]);i=-16760833&i|(1023&o)<<14;break t}}if(e){if((a=Math.max(e,s-(128&i?0:-1)))>1024)throw Error(\"spvt\");i=-16760833&i|(1023&a)<<14}}}return st(t,64|i|r),t}function Ve(t,e){if(\"object\"!=typeof t)return t;if(Array.isArray(t)){var n=0|t[et];return 0===t.length&&1&n?void 0:Xe(t,n,e)}if(null!=t&&t[J]===ct)return We(t);if(t instanceof be){if(2&(e=t.J))return t;if(!t.size)return;if(n=ot(t.V()),t.K)for(t=0;t<n.length;t++){const r=n[t];let i=r[1];i=null==i||\"object\"!=typeof i?void 0:null!=i&&i[J]===ct?We(i):Array.isArray(i)?Xe(i,0|i[et],!!(32&e)):void 0,r[1]=i}return n}return t instanceof P?t:void 0}function Xe(t,e,n){return 2&e||(!n||4096&e||16&e?t=ze(t,e,!1,n&&!(16&e)):(it(t,34),4&e&&Object.freeze(t))),t}function He(t,e,n){return t=new t.constructor(e),n&&(t.h=ut),t.m=ut,t}function We(t){const e=t.v,n=0|e[et];return ht(t,n)?t:Je(t,e,n)?He(t,e):ze(e,n)}function ze(t,e,n,r){return r??=!!(34&e),t=Ce(t,e,Ve,r),r=32,n&&(r|=2),st(t,e=16769217&e|r),t}function Ke(t){const e=t.v,n=0|e[et];return ht(t,n)?Je(t,e,n)?He(t,e,!0):new t.constructor(ze(e,n,!1)):t}function Ye(t){if(t.h!==ut)return!1;var e=t.v;return it(e=ze(e,0|e[et]),2048),t.v=e,t.h=void 0,t.m=void 0,!0}function qe(t){if(!Ye(t)&&ht(t,0|t.v[et]))throw Error()}function $e(t,e){void 0===e&&(e=0|t[et]),32&e&&!(4096&e)&&st(t,4096|e)}function Je(t,e,n){return!!(2&n)||!(!(32&n)||4096&n)&&(st(e,2|n),t.h=ut,!0)}const Ze=Tt(0),Qe={};function tn(t,e,n,r,i){if(null!==(e=en(t.v,e,n,i))||r&&t.m!==ut)return e}function en(t,e,n,r){if(-1===e)return null;const i=e+(n?0:-1),s=t.length-1;let o,a;if(!(s<1+(n?0:-1))){if(i>=s)if(o=t[s],null!=o&&\"object\"==typeof o&&o.constructor===Object)n=o[e],a=!0;else{if(i!==s)return;n=o}else n=t[i];if(r&&null!=n){if(null==(r=r(n)))return r;if(!Object.is(r,n))return a?o[e]=r:t[i]=r,r}return n}}function nn(t,e,n,r){qe(t),rn(t=t.v,0|t[et],e,n,r)}function rn(t,e,n,r,i){const s=n+(i?0:-1);var o=t.length-1;if(o>=1+(i?0:-1)&&s>=o){const i=t[o];if(null!=i&&\"object\"==typeof i&&i.constructor===Object)return i[n]=r,e}return s<=o?(t[s]=r,e):(void 0!==r&&(n>=(o=(e??=0|t[et])>>14&1023||536870912)?null!=r&&(t[o+(i?0:-1)]={[n]:r}):t[s]=r),e)}function sn(){return void 0===dt?2:4}function on(t,e,n,r,i){let s=t.v,o=0|s[et];r=ht(t,o)?1:r,i=!!i||3===r,2===r&&Ye(t)&&(s=t.v,o=0|s[et]);let a=(t=cn(s,e))===nt?7:0|t[et],c=hn(a,o);var h=!(4&c);if(h){4&c&&(t=Wt(t),a=0,c=xn(c,o),o=rn(s,o,e,t));let r=0,i=0;for(;r<t.length;r++){const e=n(t[r]);null!=e&&(t[i++]=e)}i<r&&(t.length=i),n=-513&(4|c),c=n&=-1025,c&=-4097}return c!==a&&(st(t,c),2&c&&Object.freeze(t)),an(t,c,s,o,e,r,h,i)}function an(t,e,n,r,i,s,o,a){let c=e;return 1===s||4===s&&(2&e||!(16&e)&&32&r)?un(e)||((e|=!t.length||o&&!(4096&e)||32&r&&!(4096&e||16&e)?2:256)!==c&&st(t,e),Object.freeze(t)):(2===s&&un(e)&&(t=Wt(t),c=0,e=xn(e,r),r=rn(n,r,i,t)),un(e)||(a||(e|=16),e!==c&&st(t,e))),2&e||!(4096&e||16&e)||$e(n,r),t}function cn(t,e,n){return t=en(t,e,n),Array.isArray(t)?t:nt}function hn(t,e){return 2&e&&(t|=2),1|t}function un(t){return!!(2&t)&&!!(4&t)||!!(256&t)}function ln(t){return lt(t,!0)}function fn(t){t=Wt(t);for(let e=0;e<t.length;e++){const n=t[e]=Wt(t[e]);Array.isArray(n[1])&&(n[1]=ot(n[1]))}return at(t)}function dn(t,e,n,r){qe(t),rn(t=t.v,0|t[et],e,(\"0\"===r?0===Number(n):n===r)?void 0:n)}function pn(t,e,n){if(2&e)throw Error();const r=mt(e);let i=cn(t,n,r),s=i===nt?7:0|i[et],o=hn(s,e);return(2&o||un(o)||16&o)&&(o===s||un(o)||st(i,o),i=Wt(i),s=0,o=xn(o,e),rn(t,e,n,i,r)),o&=-13,o!==s&&st(i,o),i}function gn(t,e){var n=Ds;return _n(mn(t=t.v),t,void 0,n)===e?e:-1}function mn(t){if(j)return t[W]??(t[W]=new Map);if(W in t)return t[W];const e=new Map;return Object.defineProperty(t,W,{value:e}),e}function yn(t,e,n,r,i){const s=mn(t),o=_n(s,t,e,n,i);return o!==r&&(o&&(e=rn(t,e,o,void 0,i)),s.set(n,r)),e}function _n(t,e,n,r,i){let s=t.get(r);if(null!=s)return s;s=0;for(let t=0;t<r.length;t++){const o=r[t];null!=en(e,o,i)&&(0!==s&&(n=rn(e,n,s,void 0,i)),s=o)}return t.set(r,s),s}function vn(t,e,n){let r=0|t[et];const i=mt(r),s=en(t,n,i);let o;if(null!=s&&s[J]===ct){if(!ht(s))return Ye(s),s.v;o=s.v}else Array.isArray(s)&&(o=s);if(o){const t=0|o[et];2&t&&(o=ze(o,t))}return o=Ge(o,e),o!==s&&rn(t,r,n,o,i),o}function En(t,e,n,r,i){let s=!1;if(null!=(r=en(t,r,i,(t=>{const r=me(t,n,!1,e);return s=r!==t&&null!=r,r}))))return s&&!ht(r)&&$e(t,e),r}function wn(t,e,n,r){let i=t.v,s=0|i[et];if(null==(e=En(i,s,e,n,r)))return e;if(s=0|i[et],!ht(t,s)){const o=Ke(e);o!==e&&(Ye(t)&&(i=t.v,s=0|i[et]),s=rn(i,s,n,e=o,r),$e(i,s))}return e}function Tn(t,e,n,r,i,s,o,a){var c=ht(t,n);s=c?1:s,o=!!o||3===s,c=a&&!c,(2===s||c)&&Ye(t)&&(n=0|(e=t.v)[et]);var h=(t=cn(e,i))===nt?7:0|t[et],u=hn(h,n);if(a=!(4&u)){var l=t,f=n;const e=!!(2&u);e&&(f|=2);let i=!e,s=!0,o=0,a=0;for(;o<l.length;o++){const t=me(l[o],r,!1,f);if(t instanceof r){if(!e){const e=ht(t);i&&=!e,s&&=e}l[a++]=t}}a<o&&(l.length=a),u|=4,u=s?-4097&u:4096|u,u=i?8|u:-9&u}if(u!==h&&(st(t,u),2&u&&Object.freeze(t)),c&&!(8&u||!t.length&&(1===s||4===s&&(2&u||!(16&u)&&32&n)))){for(un(u)&&(t=Wt(t),u=xn(u,n),n=rn(e,n,i,t)),r=t,c=u,h=0;h<r.length;h++)(l=r[h])!==(u=Ke(l))&&(r[h]=u);c|=8,st(t,u=c=r.length?4096|c:-4097&c)}return an(t,u,e,n,i,s,a,o)}function An(t,e,n){const r=t.v;return Tn(t,r,0|r[et],e,n,sn(),!1,!0)}function bn(t){return null==t&&(t=void 0),t}function kn(t,e,n,r,i){return nn(t,n,r=bn(r),i),r&&!ht(r)&&$e(t.v),t}function Sn(t,e,n,r){t:{var i=r=bn(r);qe(t);const s=t.v;let o=0|s[et];if(null==i){const t=mn(s);if(_n(t,s,o,n)!==e)break t;t.set(n,0)}else o=yn(s,o,n,e);rn(s,o,e,i)}r&&!ht(r)&&$e(t.v)}function xn(t,e){return-273&(2&e?2|t:-3&t)}function Ln(t,e,n,r){var i=r;qe(t),t=Tn(t,r=t.v,0|r[et],n,e,2,!0),i=null!=i?i:new n,t.push(i),e=n=t===nt?7:0|t[et],(i=ht(i))?(n&=-9,1===t.length&&(n&=-4097)):n|=4096,n!==e&&st(t,n),i||$e(r)}function Rn(t,e,n){return ie(tn(t,e,void 0,n))}function In(t){return(g?tn(t,2,void 0,void 0,fe):fe(tn(t,2)))??Ze}function Fn(t,e){return tn(t,e,void 0,void 0,Qt)??0}function Mn(t,e,n){if(null!=n){if(\"number\"!=typeof n)throw D(\"int32\");if(!qt(n))throw D(\"int32\");n|=0}nn(t,e,n)}function Pn(t,e,n){nn(t,e,Zt(n))}function Cn(t,e,n){dn(t,e,pe(n),\"\")}function On(t,e,n){{qe(t);const o=t.v;let a=0|o[et];if(null==n)rn(o,a,e);else{var r=t=n===nt?7:0|n[et],i=un(t),s=i||Object.isFrozen(n);for(i||(t=0),s||(n=Wt(n),r=0,t=xn(t,a),s=!1),t|=5,t|=(4&t?512&t?512:1024&t?1024:0:void 0)??(g?1024:0),i=0;i<n.length;i++){const e=n[i],o=de(e);Object.is(e,o)||(s&&(n=Wt(n),r=0,t=xn(t,a),s=!1),n[i]=o)}t!==r&&(s&&(n=Wt(n),t=xn(t,a)),st(n,t)),rn(o,a,e,n)}}}function Nn(t,e,n){qe(t),on(t,e,ge,2,!0).push(de(n))}var Un=class{constructor(t,e,n){if(this.buffer=t,n&&!e)throw Error();this.g=e}};function Dn(t,e){if(\"string\"==typeof t)return new Un(L(t),e);if(Array.isArray(t))return new Un(new Uint8Array(t),e);if(t.constructor===Uint8Array)return new Un(t,!1);if(t.constructor===ArrayBuffer)return t=new Uint8Array(t),new Un(t,!1);if(t.constructor===P)return e=M(t)||new Uint8Array(0),new Un(e,!0,t);if(t instanceof Uint8Array)return t=t.constructor===Uint8Array?t:new Uint8Array(t.buffer,t.byteOffset,t.byteLength),new Un(t,!1);throw Error()}function Bn(t,e){let n,r=0,i=0,s=0;const o=t.h;let a=t.g;do{n=o[a++],r|=(127&n)<<s,s+=7}while(s<32&&128&n);if(s>32)for(i|=(127&n)>>4,s=3;s<32&&128&n;s+=7)n=o[a++],i|=(127&n)<<s;if(Wn(t,a),!(128&n))return e(r>>>0,i>>>0);throw Error()}function Gn(t){let e=0,n=t.g;const r=n+10,i=t.h;for(;n<r;){const r=i[n++];if(e|=r,0==(128&r))return Wn(t,n),!!(127&e)}throw Error()}function jn(t){const e=t.h;let n=t.g,r=e[n++],i=127&r;if(128&r&&(r=e[n++],i|=(127&r)<<7,128&r&&(r=e[n++],i|=(127&r)<<14,128&r&&(r=e[n++],i|=(127&r)<<21,128&r&&(r=e[n++],i|=r<<28,128&r&&128&e[n++]&&128&e[n++]&&128&e[n++]&&128&e[n++]&&128&e[n++])))))throw Error();return Wn(t,n),i}function Vn(t){return jn(t)>>>0}function Xn(t){var e=t.h;const n=t.g;var r=e[n],i=e[n+1];const s=e[n+2];return e=e[n+3],Wn(t,t.g+4),t=2*((i=(r<<0|i<<8|s<<16|e<<24)>>>0)>>31)+1,r=i>>>23&255,i&=8388607,255==r?i?NaN:t*(1/0):0==r?1401298464324817e-60*t*i:t*Math.pow(2,r-150)*(i+8388608)}function Hn(t){return jn(t)}function Wn(t,e){if(t.g=e,e>t.l)throw Error()}function zn(t,e){if(e<0)throw Error();const n=t.g;if((e=n+e)>t.l)throw Error();return t.g=e,n}function Kn(t,e){if(0==e)return F();var n=zn(t,e);return t.Y&&t.j?n=t.h.subarray(n,n+e):(t=t.h,n=n===(e=n+e)?new Uint8Array(0):Rt?t.slice(n,e):new Uint8Array(t.subarray(n,e))),0==n.length?F():new P(n,I)}var Yn=[];function qn(t,e,n,r){if(ir.length){const i=ir.pop();return i.o(r),i.g.init(t,e,n,r),i}return new rr(t,e,n,r)}function $n(t){t.g.clear(),t.l=-1,t.h=-1,ir.length<100&&ir.push(t)}function Jn(t){var e=t.g;if(e.g==e.l)return!1;t.m=t.g.g;var n=Vn(t.g);if(e=n>>>3,!((n&=7)>=0&&n<=5))throw Error();if(e<1)throw Error();return t.l=e,t.h=n,!0}function Zn(t){switch(t.h){case 0:0!=t.h?Zn(t):Gn(t.g);break;case 1:Wn(t=t.g,t.g+8);break;case 2:if(2!=t.h)Zn(t);else{var e=Vn(t.g);Wn(t=t.g,t.g+e)}break;case 5:Wn(t=t.g,t.g+4);break;case 3:for(e=t.l;;){if(!Jn(t))throw Error();if(4==t.h){if(t.l!=e)throw Error();break}Zn(t)}break;default:throw Error()}}function Qn(t,e,n){const r=t.g.l;var i=Vn(t.g);let s=(i=t.g.g+i)-r;if(s<=0&&(t.g.l=i,n(e,t,void 0,void 0,void 0),s=i-t.g.g),s)throw Error();return t.g.g=i,t.g.l=r,e}function tr(t){var e=Vn(t.g),a=zn(t=t.g,e);if(t=t.h,o){var c,h=t;(c=s)||(c=s=new TextDecoder(\"utf-8\",{fatal:!0})),e=a+e,h=0===a&&e===h.length?h:h.subarray(a,e);try{var u=c.decode(h)}catch(t){if(void 0===i){try{c.decode(new Uint8Array([128]))}catch(t){}try{c.decode(new Uint8Array([97])),i=!0}catch(t){i=!1}}throw!i&&(s=void 0),t}}else{e=(u=a)+e,a=[];let i,s=null;for(;u<e;){var l=t[u++];l<128?a.push(l):l<224?u>=e?n():(i=t[u++],l<194||128!=(192&i)?(u--,n()):a.push((31&l)<<6|63&i)):l<240?u>=e-1?n():(i=t[u++],128!=(192&i)||224===l&&i<160||237===l&&i>=160||128!=(192&(c=t[u++]))?(u--,n()):a.push((15&l)<<12|(63&i)<<6|63&c)):l<=244?u>=e-2?n():(i=t[u++],128!=(192&i)||i-144+(l<<28)>>30!=0||128!=(192&(c=t[u++]))||128!=(192&(h=t[u++]))?(u--,n()):(l=(7&l)<<18|(63&i)<<12|(63&c)<<6|63&h,l-=65536,a.push(55296+(l>>10&1023),56320+(1023&l)))):n(),a.length>=8192&&(s=r(s,a),a.length=0)}u=r(s,a)}return u}function er(t){const e=Vn(t.g);return Kn(t.g,e)}function nr(t,e,n){var r=Vn(t.g);for(r=t.g.g+r;t.g.g<r;)n.push(e(t.g))}var rr=class{constructor(t,e,n,r){if(Yn.length){const i=Yn.pop();i.init(t,e,n,r),t=i}else t=new class{constructor(t,e,n,r){this.h=null,this.j=!1,this.g=this.l=this.m=0,this.init(t,e,n,r)}init(t,e,n,{Y:r=!1,ea:i=!1}={}){this.Y=r,this.ea=i,t&&(t=Dn(t,this.ea),this.h=t.buffer,this.j=t.g,this.m=e||0,this.l=void 0!==n?this.m+n:this.h.length,this.g=this.m)}clear(){this.h=null,this.j=!1,this.g=this.l=this.m=0,this.Y=!1}}(t,e,n,r);this.g=t,this.m=this.g.g,this.h=this.l=-1,this.o(r)}o({ha:t=!1}={}){this.ha=t}},ir=[];function sr(t){return t?/^\\d+$/.test(t)?(Xt(t),new or(Ft,Mt)):null:ar||=new or(0,0)}var or=class{constructor(t,e){this.h=t>>>0,this.g=e>>>0}};let ar;function cr(t){return t?/^-?\\d+$/.test(t)?(Xt(t),new hr(Ft,Mt)):null:ur||=new hr(0,0)}var hr=class{constructor(t,e){this.h=t>>>0,this.g=e>>>0}};let ur;function lr(t,e,n){for(;n>0||e>127;)t.g.push(127&e|128),e=(e>>>7|n<<25)>>>0,n>>>=7;t.g.push(e)}function fr(t,e){for(;e>127;)t.g.push(127&e|128),e>>>=7;t.g.push(e)}function dr(t,e){if(e>=0)fr(t,e);else{for(let n=0;n<9;n++)t.g.push(127&e|128),e>>=7;t.g.push(1)}}function pr(t){var e=Ft;t.g.push(e>>>0&255),t.g.push(e>>>8&255),t.g.push(e>>>16&255),t.g.push(e>>>24&255)}function gr(t,e){0!==e.length&&(t.l.push(e),t.h+=e.length)}function mr(t,e,n){fr(t.g,8*e+n)}function yr(t,e){return mr(t,e,2),e=t.g.end(),gr(t,e),e.push(t.h),e}function _r(t,e){var n=e.pop();for(n=t.h+t.g.length()-n;n>127;)e.push(127&n|128),n>>>=7,t.h++;e.push(n),t.h++}function vr(t,e,n){mr(t,e,2),fr(t.g,n.length),gr(t,t.g.end()),gr(t,n)}function Er(t,e,n,r){null!=n&&(e=yr(t,e),r(n,t),_r(t,e))}function wr(){const t=class{constructor(){throw Error()}};return Object.setPrototypeOf(t,t.prototype),t}var Tr=wr(),Ar=wr(),br=wr(),kr=wr(),Sr=wr(),xr=wr(),Lr=wr(),Rr=wr(),Ir=wr(),Fr=wr();function Mr(t,e,n){var r=t.v;z&&z in r&&(r=r[z])&&delete r[e.g],e.h?e.j(t,e.h,e.g,n,e.l):e.j(t,e.g,n,e.l)}var Pr=class{constructor(t,e){this.v=je(t,e,void 0,2048)}toJSON(){return Ue(this)}j(){var t=Fo,e=this.v,n=t.g,r=z;if(j&&r&&null!=e[r]?.[n]&&B(K,3),e=t.g,Z&&z&&void 0===Z&&(r=(n=this.v)[z])&&(r=r.da))try{r(n,e,Me)}catch(t){u(t)}return t.h?t.m(this,t.h,t.g,t.l):t.m(this,t.g,t.defaultValue,t.l)}clone(){const t=this.v,e=0|t[et];return Je(this,t,e)?He(this,t,!0):new this.constructor(ze(t,e,!1))}};Pr.prototype[J]=ct,Pr.prototype.toString=function(){return this.v.toString()};var Cr=class{constructor(t,e,n){this.g=t,this.h=e,t=Tr,this.l=!!t&&n===t||!1}};function Or(t,e){return new Cr(t,e,Tr)}function Nr(t,e,n,r,i){Er(t,n,Yr(e,r),i)}const Ur=Or((function(t,e,n,r,i){return 2===t.h&&(Qn(t,vn(e,r,n),i),!0)}),Nr),Dr=Or((function(t,e,n,r,i){return 2===t.h&&(Qn(t,vn(e,r,n),i),!0)}),Nr);var Br=Symbol(),Gr=Symbol(),jr=Symbol(),Vr=Symbol(),Xr=Symbol();let Hr,Wr;function zr(t,e,n,r){var i=r[t];if(i)return i;(i={}).qa=r,i.T=function(t){switch(typeof t){case\"boolean\":return De||=[0,void 0,!0];case\"number\":return t>0?void 0:0===t?Be||=[0,void 0]:[-t,void 0];case\"string\":return[0,t];case\"object\":return t}}(r[0]);var s=r[1];let o=1;s&&s.constructor===Object&&(i.ba=s,\"function\"==typeof(s=r[++o])&&(i.ma=!0,Hr??=s,Wr??=r[o+1],s=r[o+=2]));const a={};for(;s&&Array.isArray(s)&&s.length&&\"number\"==typeof s[0]&&s[0]>0;){for(var c=0;c<s.length;c++)a[s[c]]=s;s=r[++o]}for(c=1;void 0!==s;){let t;\"number\"==typeof s&&(c+=s,s=r[++o]);var h=void 0;if(s instanceof Cr?t=s:(t=Ur,o--),t?.l){s=r[++o],h=r;var u=o;\"function\"==typeof s&&(s=s(),h[u]=s),h=s}for(u=c+1,\"number\"==typeof(s=r[++o])&&s<0&&(u-=s,s=r[++o]);c<u;c++){const r=a[c];h?n(i,c,t,h,r):e(i,c,t,r)}}return r[t]=i}function Kr(t){return Array.isArray(t)?t[0]instanceof Cr?t:[Dr,t]:[t,void 0]}function Yr(t,e){return t instanceof Pr?t.v:Array.isArray(t)?Ge(t,e):void 0}function qr(t,e,n,r){const i=n.g;t[e]=r?(t,e,n)=>i(t,e,n,r):i}function $r(t,e,n,r,i){const s=n.g;let o,a;t[e]=(t,e,n)=>s(t,e,n,a||=zr(Gr,qr,$r,r).T,o||=Jr(r),i)}function Jr(t){let e=t[jr];if(null!=e)return e;const n=zr(Gr,qr,$r,t);return e=n.ma?(t,e)=>Hr(t,e,n):(t,e)=>{for(;Jn(e)&&4!=e.h;){var r=e.l,i=n[r];if(null==i){var s=n.ba;s&&(s=s[r])&&(null!=(s=Qr(s))&&(i=n[r]=s))}if(null==i||!i(e,t,r)){if(i=(s=e).m,Zn(s),s.ha)var o=void 0;else o=s.g.g-i,s.g.g=i,o=Kn(s.g,o);i=void 0,s=t,o&&((i=s[z]??(s[z]=new Fe))[r]??(i[r]=[])).push(o)}}return(t=Re(t))&&(t.da=n.qa[Xr]),!0},t[jr]=e,t[Xr]=Zr.bind(t),e}function Zr(t,e,n,r){var i=this[Gr];const s=this[jr],o=Ge(void 0,i.T),a=Re(t);if(a){var c=!1,h=i.ba;if(h){if(i=(e,n,i)=>{if(0!==i.length)if(h[n])for(const t of i){e=qn(t);try{c=!0,s(o,e)}finally{$n(e)}}else r?.(t,n,i)},null==e)Ie(a,i);else if(null!=a){const t=a[e];t&&i(a,e,t)}if(c){let r=0|t[et];if(2&r&&2048&r&&!n?.Ka)throw Error();const i=mt(r),s=(e,s)=>{if(null!=en(t,e,i)){if(1===n?.Qa)return;throw Error()}null!=s&&(r=rn(t,r,e,s,i)),delete a[e]};null==e?pt(o,0|o[et],((t,e)=>{s(t,e)})):s(e,en(o,e,i))}}}}function Qr(t){const e=(t=Kr(t))[0].g;if(t=t[1]){const n=Jr(t),r=zr(Gr,qr,$r,t).T;return(t,i,s)=>e(t,i,s,r,n)}return e}function ti(t,e,n){t[e]=n.h}function ei(t,e,n,r){let i,s;const o=n.h;t[e]=(t,e,n)=>o(t,e,n,s||=zr(Br,ti,ei,r).T,i||=ni(r))}function ni(t){let e=t[Vr];if(!e){const n=zr(Br,ti,ei,t);e=(t,e)=>ri(t,e,n),t[Vr]=e}return e}function ri(t,e,n){pt(t,0|t[et],((t,r)=>{if(null!=r){var i=function(t,e){var n=t[e];if(n)return n;if((n=t.ba)&&(n=n[e])){var r=(n=Kr(n))[0].h;if(n=n[1]){const e=ni(n),i=zr(Br,ti,ei,n).T;n=t.ma?Wr(i,e):(t,n,s)=>r(t,n,s,i,e)}else n=r;return t[e]=n}}(n,t);i?i(e,r,t):t<500||B(q,3)}})),(t=Re(t))&&Ie(t,((t,n,r)=>{for(gr(e,e.g.end()),t=0;t<r.length;t++)gr(e,M(r[t])||new Uint8Array(0))}))}const ii=Tt(0);function si(t,e){if(Array.isArray(e)){var n=0|e[et];if(4&n)return e;for(var r=0,i=0;r<e.length;r++){const n=t(e[r]);null!=n&&(e[i++]=n)}return i<r&&(e.length=i),(t=-1537&(5|n))!==n&&st(e,t),2&t&&Object.freeze(e),e}}function oi(t,e,n){return new Cr(t,e,n)}function ai(t,e,n){return new Cr(t,e,n)}function ci(t,e,n){rn(t,0|t[et],e,n,mt(0|t[et]))}var hi=Or((function(t,e,n,r,i){if(2!==t.h)return!1;if(t=Wt(t=Qn(t,Ge([void 0,void 0],r),i)),i=mt(r=0|e[et]),2&r)throw Error();let s=en(e,n,i);if(s instanceof be)0!=(2&s.J)?(s=s.V(),s.push(t),rn(e,r,n,s,i)):s.Ma(t);else if(Array.isArray(s)){var o=0|s[et];8192&o||st(s,o|=8192),2&o&&(s=fn(s),rn(e,r,n,s,i)),s.push(t)}else rn(e,r,n,at([t]),i);return!0}),(function(t,e,n,r,i){if(e instanceof be)e.forEach(((e,s)=>{Er(t,n,Ge([s,e],r),i)}));else if(Array.isArray(e)){for(let s=0;s<e.length;s++){const o=e[s];Array.isArray(o)&&Er(t,n,Ge(o,r),i)}at(e)}}));function ui(t,e,n){null!=(e=Qt(e))&&(mr(t,n,5),t=t.g,Ot(e),pr(t))}function li(t,e,n){if(e=function(t){if(null==t)return t;const e=typeof t;if(\"bigint\"===e)return String(zt(64,t));if(re(t)){if(\"string\"===e)return ce(t);if(\"number\"===e)return ae(t)}}(e),null!=e){if(\"string\"==typeof e)cr(e);if(null!=e)switch(mr(t,n,0),typeof e){case\"number\":t=t.g,Ct(e),lr(t,Ft,Mt);break;case\"bigint\":n=BigInt.asUintN(64,e),n=new hr(Number(n&BigInt(4294967295)),Number(n>>BigInt(32))),lr(t.g,n.h,n.g);break;default:n=cr(e),lr(t.g,n.h,n.g)}}}function fi(t,e,n){null!=(e=ie(e))&&null!=e&&(mr(t,n,0),dr(t.g,e))}function di(t,e,n){null!=(e=ee(e))&&(mr(t,n,0),t.g.g.push(e?1:0))}function pi(t,e,n){null!=(e=ge(e))&&vr(t,n,h(e))}function gi(t,e,n,r,i){Er(t,n,Yr(e,r),i)}function mi(t,e,n){null!=(e=null==e||\"string\"==typeof e||e instanceof P?e:void 0)&&vr(t,n,Dn(e,!0).buffer)}function yi(t,e,n){return(5===t.h||2===t.h)&&(e=pn(e,0|e[et],n),2==t.h?nr(t,Xn,e):e.push(Xn(t.g)),!0)}var _i=oi((function(t,e,n){return 5===t.h&&(ci(e,n,Xn(t.g)),!0)}),ui,Rr),vi=ai(yi,(function(t,e,n){if(null!=(e=si(Qt,e)))for(let o=0;o<e.length;o++){var r=t,i=n,s=e[o];null!=s&&(mr(r,i,5),r=r.g,Ot(s),pr(r))}}),Rr),Ei=ai(yi,(function(t,e,n){if(null!=(e=si(Qt,e))&&e.length){mr(t,n,2),fr(t.g,4*e.length);for(let r=0;r<e.length;r++)n=t.g,Ot(e[r]),pr(n)}}),Rr),wi=oi((function(t,e,n){return 5===t.h&&(ci(e,n,0===(t=Xn(t.g))?void 0:t),!0)}),ui,Rr),Ti=oi((function(t,e,n){return p?(0!==t.h?t=!1:(ci(e,n,Bn(t.g,Bt)),t=!0),t):0===t.h&&(ci(e,n,Bn(t.g,Dt)),!0)}),li,xr),Ai=oi((function(t,e,n){return p?(0!==t.h?e=!1:(ci(e,n,(t=Bn(t.g,Bt))===ii?void 0:t),e=!0),e):0===t.h&&(ci(e,n,0===(t=Bn(t.g,Dt))?void 0:t),!0)}),li,xr),bi=oi((function(t,e,n){return p?(0!==t.h?t=!1:(ci(e,n,Bn(t.g,Ut)),t=!0),t):0===t.h&&(ci(e,n,Bn(t.g,Nt)),!0)}),(function(t,e,n){if(e=function(t){if(null==t)return t;var e=typeof t;if(\"bigint\"===e)return String(Kt(64,t));if(re(t)){if(\"string\"===e)return e=$t(Number(t)),Yt(e)&&e>=0?t=String(e):(-1!==(e=t.indexOf(\".\"))&&(t=t.substring(0,e)),(e=\"-\"!==t[0]&&((e=t.length)<20||20===e&&t<=\"18446744073709551615\"))||(Xt(t),t=Gt(Ft,Mt))),t;if(\"number\"===e)return(t=$t(t))>=0&&Yt(t)||(Ct(t),t=Nt(Ft,Mt)),t}}(e),null!=e){if(\"string\"==typeof e)sr(e);if(null!=e)switch(mr(t,n,0),typeof e){case\"number\":t=t.g,Ct(e),lr(t,Ft,Mt);break;case\"bigint\":n=BigInt.asUintN(64,e),n=new or(Number(n&BigInt(4294967295)),Number(n>>BigInt(32))),lr(t.g,n.h,n.g);break;default:n=sr(e),lr(t.g,n.h,n.g)}}}),Lr),ki=oi((function(t,e,n){return 0===t.h&&(ci(e,n,jn(t.g)),!0)}),fi,kr),Si=ai((function(t,e,n){return(0===t.h||2===t.h)&&(e=pn(e,0|e[et],n),2==t.h?nr(t,jn,e):e.push(jn(t.g)),!0)}),(function(t,e,n){if(null!=(e=si(ie,e))&&e.length){n=yr(t,n);for(let n=0;n<e.length;n++)dr(t.g,e[n]);_r(t,n)}}),kr),xi=oi((function(t,e,n){return 0===t.h&&(ci(e,n,0===(t=jn(t.g))?void 0:t),!0)}),fi,kr),Li=oi((function(t,e,n){return 0===t.h&&(ci(e,n,Gn(t.g)),!0)}),di,Ar),Ri=oi((function(t,e,n){return 0===t.h&&(ci(e,n,!1===(t=Gn(t.g))?void 0:t),!0)}),di,Ar),Ii=ai((function(t,e,n){return 2===t.h&&(t=tr(t),pn(e,0|e[et],n).push(t),!0)}),(function(t,e,n){if(null!=(e=si(ge,e)))for(let o=0;o<e.length;o++){var r=t,i=n,s=e[o];null!=s&&vr(r,i,h(s))}}),br),Fi=oi((function(t,e,n){return 2===t.h&&(ci(e,n,\"\"===(t=tr(t))?void 0:t),!0)}),pi,br),Mi=oi((function(t,e,n){return 2===t.h&&(ci(e,n,tr(t)),!0)}),pi,br),Pi=function(t,e,n=Tr){return new Cr(t,e,n)}((function(t,e,n,r,i){return 2===t.h&&(r=Ge(void 0,r),pn(e,0|e[et],n).push(r),Qn(t,r,i),!0)}),(function(t,e,n,r,i){if(Array.isArray(e)){for(let s=0;s<e.length;s++)gi(t,e[s],n,r,i);1&(t=0|e[et])||st(e,1|t)}})),Ci=Or((function(t,e,n,r,i,s){if(2!==t.h)return!1;let o=0|e[et];return yn(e,o,s,n,mt(o)),Qn(t,e=vn(e,r,n),i),!0}),gi),Oi=oi((function(t,e,n){return 2===t.h&&(ci(e,n,er(t)),!0)}),mi,Ir),Ni=ai((function(t,e,n){return(0===t.h||2===t.h)&&(e=pn(e,0|e[et],n),2==t.h?nr(t,Vn,e):e.push(Vn(t.g)),!0)}),(function(t,e,n){if(null!=(e=si(se,e)))for(let o=0;o<e.length;o++){var r=t,i=n,s=e[o];null!=s&&(mr(r,i,0),fr(r.g,s))}}),Sr),Ui=oi((function(t,e,n){return 0===t.h&&(ci(e,n,0===(t=Vn(t.g))?void 0:t),!0)}),(function(t,e,n){null!=(e=se(e))&&null!=e&&(mr(t,n,0),fr(t.g,e))}),Sr),Di=oi((function(t,e,n){return 0===t.h&&(ci(e,n,jn(t.g)),!0)}),(function(t,e,n){null!=(e=ie(e))&&(e=parseInt(e,10),mr(t,n,0),dr(t.g,e))}),Fr);class Bi{constructor(t,e){var n=rs;this.g=t,this.h=e,this.m=wn,this.j=kn,this.defaultValue=void 0,this.l=null!=n.Oa?gt:void 0}register(){_(this)}}function Gi(t,e){return new Bi(t,e)}function ji(t,e){return(n,r)=>{{const s={ea:!0};r&&Object.assign(s,r),n=qn(n,void 0,void 0,s);try{const r=new t,s=r.v;Jr(e)(s,n);var i=r}finally{$n(n)}}return i}}function Vi(t){return function(){const e=new class{constructor(){this.l=[],this.h=0,this.g=new class{constructor(){this.g=[]}length(){return this.g.length}end(){const t=this.g;return this.g=[],t}}}};ri(this.v,e,zr(Br,ti,ei,t)),gr(e,e.g.end());const n=new Uint8Array(e.h),r=e.l,i=r.length;let s=0;for(let t=0;t<i;t++){const e=r[t];n.set(e,s),s+=e.length}return e.l=[n],n}}var Xi=class extends Pr{constructor(t){super(t)}},Hi=[0,Fi,oi((function(t,e,n){return 2===t.h&&(ci(e,n,(t=er(t))===F()?void 0:t),!0)}),(function(t,e,n){if(null!=e){if(e instanceof Pr){const r=e.Ra;return void(r?(e=r(e),null!=e&&vr(t,n,Dn(e,!0).buffer)):B(q,3))}if(Array.isArray(e))return void B(q,3)}mi(t,e,n)}),Ir)];let Wi,zi=globalThis.trustedTypes;function Ki(t){var e;return void 0===Wi&&(Wi=function(){let t=null;if(!zi)return t;try{const e=t=>t;t=zi.createPolicy(\"goog#html\",{createHTML:e,createScript:e,createScriptURL:e})}catch(t){}return t}()),t=(e=Wi)?e.createScriptURL(t):t,new class{constructor(t){this.g=t}toString(){return this.g+\"\"}}(t)}function Yi(t,...e){if(0===e.length)return Ki(t[0]);let n=t[0];for(let r=0;r<e.length;r++)n+=encodeURIComponent(e[r])+t[r+1];return Ki(n)}var qi=[0,ki,Di,Li,-1,Si,Di,-1,Li],$i=class extends Pr{constructor(t){super(t)}},Ji=[0,Li,Mi,Li,Di,-1,ai((function(t,e,n){return(0===t.h||2===t.h)&&(e=pn(e,0|e[et],n),2==t.h?nr(t,Hn,e):e.push(jn(t.g)),!0)}),(function(t,e,n){if(null!=(e=si(ie,e))&&e.length){n=yr(t,n);for(let n=0;n<e.length;n++)dr(t.g,e[n]);_r(t,n)}}),Fr),Mi,-1,[0,Li,-1],Di,Li,-1],Zi=[0,3,Li,-1,2,[0,ki],[0,Di,Li],[0,Mi,-1],[0]],Qi=[0,Mi,-2],ts=class extends Pr{constructor(t){super(t)}},es=[0],ns=[0,ki,Li,1,Li,-4],rs=class extends Pr{constructor(t){super(t,2)}},is={};is[336783863]=[0,Mi,Li,-1,ki,[0,[1,2,3,4,5,6,7,8,9],Ci,es,Ci,Ji,Ci,Qi,Ci,ns,Ci,qi,Ci,[0,Mi,-2],Ci,[0,Mi,Di],Ci,Zi,Ci,[0,Di,-1,Li]],[0,Mi],Li,[0,[1,3],[2,4],Ci,[0,Si],-1,Ci,[0,Ii],-1,Pi,[0,Mi,-1]],Mi];var ss=[0,Ai,-1,Ri,-3,Ai,Si,Fi,xi,Ai,-1,Ri,xi,Ri,-2,Fi];function os(t,e){Nn(t,3,e)}function as(t,e){Nn(t,4,e)}var cs=class extends Pr{constructor(t){super(t,500)}o(t){return kn(this,0,7,t)}},hs=[-1,{}],us=[0,Mi,1,hs],ls=[0,Mi,Ii,hs];function fs(t,e){Ln(t,1,cs,e)}function ds(t,e){Nn(t,10,e)}function ps(t,e){Nn(t,15,e)}var gs=class extends Pr{constructor(t){super(t,500)}o(t){return kn(this,0,1001,t)}},ms=[-500,Pi,[-500,Fi,-1,Ii,-3,[-2,is,Li],Pi,Hi,xi,-1,us,ls,Pi,[0,Fi,Ri],Fi,ss,xi,Ii,987,Ii],4,Pi,[-500,Mi,-1,[-1,{}],998,Mi],Pi,[-500,Mi,Ii,-1,[-2,{},Li],997,Ii,-1],xi,Pi,[-500,Mi,Ii,hs,998,Ii],Ii,xi,us,ls,Pi,[0,Fi,-1,hs],Ii,-2,ss,Fi,-1,Ri,[0,Ri,Ui],978,hs,Pi,Hi];gs.prototype.g=Vi(ms);var ys=ji(gs,ms),_s=class extends Pr{constructor(t){super(t)}},vs=class extends Pr{constructor(t){super(t)}g(){return An(this,_s,1)}},Es=[0,Pi,[0,ki,_i,Mi,-1]],ws=ji(vs,Es),Ts=class extends Pr{constructor(t){super(t)}},As=class extends Pr{constructor(t){super(t)}},bs=class extends Pr{constructor(t){super(t)}l(){return wn(this,Ts,2)}g(){return An(this,As,5)}},ks=ji(class extends Pr{constructor(t){super(t)}},[0,Ii,Si,Ei,[0,Di,[0,ki,-3],[0,_i,-3],[0,ki,-1,[0,Pi,[0,ki,-2]]],Pi,[0,_i,-1,Mi,_i]],Mi,-1,Ti,Pi,[0,ki,_i],Ii,Ti]),Ss=class extends Pr{constructor(t){super(t)}},xs=ji(class extends Pr{constructor(t){super(t)}},[0,Pi,[0,_i,-4]]),Ls=class extends Pr{constructor(t){super(t)}},Rs=ji(class extends Pr{constructor(t){super(t)}},[0,Pi,[0,_i,-4]]),Is=class extends Pr{constructor(t){super(t)}},Fs=[0,ki,-1,Ei,Di],Ms=class extends Pr{constructor(t){super(t)}};Ms.prototype.g=Vi([0,_i,-4,Ti]);var Ps=class extends Pr{constructor(t){super(t)}},Cs=ji(class extends Pr{constructor(t){super(t)}},[0,Pi,[0,1,ki,Mi,Es],Ti]),Os=class extends Pr{constructor(t){super(t)}},Ns=class extends Pr{constructor(t){super(t)}na(){const t=tn(this,1,void 0,void 0,ln);return null==t?F():t}},Us=class extends Pr{constructor(t){super(t)}},Ds=[1,2],Bs=ji(class extends Pr{constructor(t){super(t)}},[0,Pi,[0,Ds,Ci,[0,Ei],Ci,[0,Oi],ki,Mi],Ti]),Gs=class extends Pr{constructor(t){super(t)}},js=[0,Mi,ki,_i,Ii,-1],Vs=class extends Pr{constructor(t){super(t)}},Xs=[0,Li,-1],Hs=class extends Pr{constructor(t){super(t)}},Ws=[1,2,3,4,5,6],zs=class extends Pr{constructor(t){super(t)}g(){return null!=tn(this,1,void 0,void 0,ln)}l(){return null!=ge(tn(this,2))}},Ks=class extends Pr{constructor(t){super(t)}g(){return ee(tn(this,2))??!1}},Ys=[0,Oi,Mi,[0,ki,Ti,-1],[0,bi,Ti]],qs=[0,Ys,Li,[0,Ws,Ci,ns,Ci,Ji,Ci,qi,Ci,es,Ci,Qi,Ci,Zi],Di],$s=class extends Pr{constructor(t){super(t)}},Js=[0,qs,_i,-1,ki],Zs=Gi(502141897,$s);is[502141897]=Js;var Qs=ji(class extends Pr{constructor(t){super(t)}},[0,[0,Di,-1,vi,Ni],Fs]),to=class extends Pr{constructor(t){super(t)}},eo=class extends Pr{constructor(t){super(t)}},no=[0,qs,_i,[0,qs],Li],ro=Gi(508968150,eo);is[508968150]=[0,qs,Js,no,_i,[0,[0,Ys]]],is[508968149]=no;var io=class extends Pr{constructor(t){super(t)}l(){return wn(this,Gs,2)}g(){nn(this,2)}},so=[0,qs,js];is[478825465]=so;var oo=class extends Pr{constructor(t){super(t)}},ao=class extends Pr{constructor(t){super(t)}},co=class extends Pr{constructor(t){super(t)}},ho=class extends Pr{constructor(t){super(t)}},uo=class extends Pr{constructor(t){super(t)}},lo=[0,qs,[0,qs],so,-1],fo=[0,qs,_i,ki],po=[0,qs,_i],go=[0,qs,fo,po,_i],mo=Gi(479097054,uo);is[479097054]=[0,qs,go,lo],is[463370452]=lo,is[464864288]=fo;var yo=Gi(462713202,ho);is[462713202]=go,is[474472470]=po;var _o=class extends Pr{constructor(t){super(t)}},vo=class extends Pr{constructor(t){super(t)}},Eo=class extends Pr{constructor(t){super(t)}},wo=class extends Pr{constructor(t){super(t)}},To=[0,qs,_i,-1,ki],Ao=[0,qs,_i,Li];wo.prototype.g=Vi([0,qs,po,[0,qs],Js,no,To,Ao]);var bo=class extends Pr{constructor(t){super(t)}},ko=Gi(456383383,bo);is[456383383]=[0,qs,js];var So=class extends Pr{constructor(t){super(t)}},xo=Gi(476348187,So);is[476348187]=[0,qs,Xs];var Lo=class extends Pr{constructor(t){super(t)}},Ro=class extends Pr{constructor(t){super(t)}},Io=[0,Di,-1],Fo=Gi(458105876,class extends Pr{constructor(t){super(t)}g(){let t;var e=this.v;const n=0|e[et];return t=ht(this,n),e=function(t,e,n,r){var i=Ro;!r&&Ye(t)&&(n=0|(e=t.v)[et]);var s=en(e,2);if(t=!1,null==s){if(r)return Le();s=[]}else if(s.constructor===be){if(!(2&s.J)||r)return s;s=s.V()}else Array.isArray(s)?t=!!(2&(0|s[et])):s=[];if(r){if(!s.length)return Le();t||(t=!0,ot(s))}else t&&(t=!1,at(s),s=fn(s));return!t&&32&n&&it(s,32),n=rn(e,n,2,r=new be(s,i,ye,void 0)),t||$e(e,n),r}(this,e,n,t),!t&&Ro&&(e.ra=!0),e}});is[458105876]=[0,Io,hi,[!0,Ti,[0,Mi,-1,Ii]],[0,Si,Li,Di]];var Mo=class extends Pr{constructor(t){super(t)}},Po=Gi(458105758,Mo);is[458105758]=[0,qs,Mi,Io];var Co=class extends Pr{constructor(t){super(t)}},Oo=[0,wi,-1,Ri],No=class extends Pr{constructor(t){super(t)}},Uo=class extends Pr{constructor(t){super(t)}},Do=[1,2];Uo.prototype.g=Vi([0,Do,Ci,Oo,Ci,[0,Pi,Oo]]);var Bo=class extends Pr{constructor(t){super(t)}},Go=Gi(443442058,Bo);is[443442058]=[0,qs,Mi,ki,_i,Ii,-1,Li,_i],is[514774813]=To;var jo=class extends Pr{constructor(t){super(t)}},Vo=Gi(516587230,jo);function Xo(t,e){return e=e?e.clone():new Gs,void 0!==t.displayNamesLocale?nn(e,1,pe(t.displayNamesLocale)):void 0===t.displayNamesLocale&&nn(e,1),void 0!==t.maxResults?Mn(e,2,t.maxResults):\"maxResults\"in t&&nn(e,2),void 0!==t.scoreThreshold?Pn(e,3,t.scoreThreshold):\"scoreThreshold\"in t&&nn(e,3),void 0!==t.categoryAllowlist?On(e,4,t.categoryAllowlist):\"categoryAllowlist\"in t&&nn(e,4),void 0!==t.categoryDenylist?On(e,5,t.categoryDenylist):\"categoryDenylist\"in t&&nn(e,5),e}function Ho(t){const e=Number(t);return Number.isSafeInteger(e)?e:String(t)}function Wo(t,e=-1,n=\"\"){return{categories:t.map((t=>({index:Rn(t,1)??0??-1,score:Fn(t,2)??0,categoryName:ge(tn(t,3))??\"\"??\"\",displayName:ge(tn(t,4))??\"\"??\"\"}))),headIndex:e,headName:n}}function zo(t){const e={classifications:An(t,Ps,1).map((t=>Wo(wn(t,vs,4)?.g()??[],Rn(t,2)??0,ge(tn(t,3))??\"\")))};return null!=function(t){return le(g?tn(t,2,void 0,void 0,fe):tn(t,2))}(t)&&(e.timestampMs=Ho(In(t))),e}function Ko(t){var e=on(t,3,Qt,sn()),n=on(t,2,ie,sn()),r=on(t,1,ge,sn()),i=on(t,9,ge,sn());const s={categories:[],keypoints:[]};for(let t=0;t<e.length;t++)s.categories.push({score:e[t],index:n[t]??-1,categoryName:r[t]??\"\",displayName:i[t]??\"\"});if((e=wn(t,bs,4)?.l())&&(s.boundingBox={originX:Rn(e,1,Qe)??0,originY:Rn(e,2,Qe)??0,width:Rn(e,3,Qe)??0,height:Rn(e,4,Qe)??0,angle:0}),wn(t,bs,4)?.g().length)for(const e of wn(t,bs,4).g())s.keypoints.push({x:tn(e,1,void 0,Qe,Qt)??0,y:tn(e,2,void 0,Qe,Qt)??0,score:tn(e,4,void 0,Qe,Qt)??0,label:ge(tn(e,3,void 0,Qe))??\"\"});return s}function Yo(t){const e=[];for(const n of An(t,Ls,1))e.push({x:Fn(n,1)??0,y:Fn(n,2)??0,z:Fn(n,3)??0,visibility:Fn(n,4)??0});return e}function qo(t){const e=[];for(const n of An(t,Ss,1))e.push({x:Fn(n,1)??0,y:Fn(n,2)??0,z:Fn(n,3)??0,visibility:Fn(n,4)??0});return e}function $o(t){return Array.from(t,(t=>t>127?t-256:t))}function Jo(t,e){if(t.length!==e.length)throw Error(`Cannot compute cosine similarity between embeddings of different sizes (${t.length} vs. ${e.length}).`);let n=0,r=0,i=0;for(let s=0;s<t.length;s++)n+=t[s]*e[s],r+=t[s]*t[s],i+=e[s]*e[s];if(r<=0||i<=0)throw Error(\"Cannot compute cosine similarity on embedding with 0 norm.\");return n/Math.sqrt(r*i)}let Zo;is[516587230]=[0,qs,To,Ao,_i],is[518928384]=Ao;const Qo=new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11]);async function ta(){if(void 0===Zo)try{await WebAssembly.instantiate(Qo),Zo=!0}catch{Zo=!1}return Zo}async function ea(t,e=Yi``){const n=await ta()?\"wasm_internal\":\"wasm_nosimd_internal\";return{wasmLoaderPath:`${e}/${t}_${n}.js`,wasmBinaryPath:`${e}/${t}_${n}.wasm`}}var na=class{};function ra(){var t=navigator;return\"undefined\"!=typeof OffscreenCanvas&&(!function(t=navigator){return(t=t.userAgent).includes(\"Safari\")&&!t.includes(\"Chrome\")}(t)||!!((t=t.userAgent.match(/Version\\/([\\d]+).*Safari/))&&t.length>=1&&Number(t[1])>=17))}async function ia(t){if(\"function\"!=typeof importScripts){const e=document.createElement(\"script\");return e.src=t.toString(),e.crossOrigin=\"anonymous\",new Promise(((t,n)=>{e.addEventListener(\"load\",(()=>{t()}),!1),e.addEventListener(\"error\",(t=>{n(t)}),!1),document.body.appendChild(e)}))}try{importScripts(t.toString())}catch(e){if(!(e instanceof TypeError))throw e;await self.import(t.toString())}}function sa(t){return void 0!==t.videoWidth?[t.videoWidth,t.videoHeight]:void 0!==t.naturalWidth?[t.naturalWidth,t.naturalHeight]:void 0!==t.displayWidth?[t.displayWidth,t.displayHeight]:[t.width,t.height]}function oa(t,e,n){t.m||console.error(\"No wasm multistream support detected: ensure dependency inclusion of :gl_graph_runner_internal_multi_input target\"),n(e=t.i.stringToNewUTF8(e)),t.i._free(e)}function aa(t,e,n){if(!t.i.canvas)throw Error(\"No OpenGL canvas configured.\");if(n?t.i._bindTextureToStream(n):t.i._bindTextureToCanvas(),!(n=t.i.canvas.getContext(\"webgl2\")||t.i.canvas.getContext(\"webgl\")))throw Error(\"Failed to obtain WebGL context from the provided canvas. `getContext()` should only be invoked with `webgl` or `webgl2`.\");t.i.gpuOriginForWebTexturesIsBottomLeft&&n.pixelStorei(n.UNPACK_FLIP_Y_WEBGL,!0),n.texImage2D(n.TEXTURE_2D,0,n.RGBA,n.RGBA,n.UNSIGNED_BYTE,e),t.i.gpuOriginForWebTexturesIsBottomLeft&&n.pixelStorei(n.UNPACK_FLIP_Y_WEBGL,!1);const[r,i]=sa(e);return!t.l||r===t.i.canvas.width&&i===t.i.canvas.height||(t.i.canvas.width=r,t.i.canvas.height=i),[r,i]}function ca(t,e,n){t.m||console.error(\"No wasm multistream support detected: ensure dependency inclusion of :gl_graph_runner_internal_multi_input target\");const r=new Uint32Array(e.length);for(let n=0;n<e.length;n++)r[n]=t.i.stringToNewUTF8(e[n]);e=t.i._malloc(4*r.length),t.i.HEAPU32.set(r,e>>2),n(e);for(const e of r)t.i._free(e);t.i._free(e)}function ha(t,e,n){t.i.simpleListeners=t.i.simpleListeners||{},t.i.simpleListeners[e]=n}function ua(t,e,n){let r=[];t.i.simpleListeners=t.i.simpleListeners||{},t.i.simpleListeners[e]=(t,e,i)=>{e?(n(r,i),r=[]):r.push(t)}}na.forVisionTasks=function(t){return ea(\"vision\",t)},na.forTextTasks=function(t){return ea(\"text\",t)},na.forGenAiExperimentalTasks=function(t){return ea(\"genai_experimental\",t)},na.forGenAiTasks=function(t){return ea(\"genai\",t)},na.forAudioTasks=function(t){return ea(\"audio\",t)},na.isSimdSupported=function(){return ta()};async function la(t,e,n,r){return t=await(async(t,e,n,r,i)=>{if(e&&await ia(e),!self.ModuleFactory)throw Error(\"ModuleFactory not set.\");if(n&&(await ia(n),!self.ModuleFactory))throw Error(\"ModuleFactory not set.\");return self.Module&&i&&((e=self.Module).locateFile=i.locateFile,i.mainScriptUrlOrBlob&&(e.mainScriptUrlOrBlob=i.mainScriptUrlOrBlob)),i=await self.ModuleFactory(self.Module||i),self.ModuleFactory=self.Module=void 0,new t(i,r)})(t,n.wasmLoaderPath,n.assetLoaderPath,e,{locateFile:t=>t.endsWith(\".wasm\")?n.wasmBinaryPath.toString():n.assetBinaryPath&&t.endsWith(\".data\")?n.assetBinaryPath.toString():t}),await t.o(r),t}function fa(t,e){const n=wn(t.baseOptions,zs,1)||new zs;\"string\"==typeof e?(nn(n,2,pe(e)),nn(n,1)):e instanceof Uint8Array&&(nn(n,1,lt(e,!1)),nn(n,2)),kn(t.baseOptions,0,1,n)}function da(t){try{const e=t.H.length;if(1===e)throw Error(t.H[0].message);if(e>1)throw Error(\"Encountered multiple errors: \"+t.H.map((t=>t.message)).join(\", \"))}finally{t.H=[]}}function pa(t,e){t.C=Math.max(t.C,e)}function ga(t,e){t.B=new cs,Cn(t.B,2,\"PassThroughCalculator\"),os(t.B,\"free_memory\"),as(t.B,\"free_memory_unused_out\"),ds(e,\"free_memory\"),fs(e,t.B)}function ma(t,e){os(t.B,e),as(t.B,e+\"_unused_out\")}function ya(t){t.g.addBoolToStream(!0,\"free_memory\",t.C)}var _a=class{constructor(t){this.g=t,this.H=[],this.C=0,this.g.setAutoRenderToScreen(!1)}l(t,e=!0){if(e){const e=t.baseOptions||{};if(t.baseOptions?.modelAssetBuffer&&t.baseOptions?.modelAssetPath)throw Error(\"Cannot set both baseOptions.modelAssetPath and baseOptions.modelAssetBuffer\");if(!(wn(this.baseOptions,zs,1)?.g()||wn(this.baseOptions,zs,1)?.l()||t.baseOptions?.modelAssetBuffer||t.baseOptions?.modelAssetPath))throw Error(\"Either baseOptions.modelAssetPath or baseOptions.modelAssetBuffer must be set\");if(function(t,e){let n=wn(t.baseOptions,Hs,3);if(!n){var r=n=new Hs,i=new ts;Sn(r,4,Ws,i)}\"delegate\"in e&&(\"GPU\"===e.delegate?(e=n,r=new $i,Sn(e,2,Ws,r)):(e=n,r=new ts,Sn(e,4,Ws,r))),kn(t.baseOptions,0,3,n)}(this,e),e.modelAssetPath)return fetch(e.modelAssetPath.toString()).then((t=>{if(t.ok)return t.arrayBuffer();throw Error(`Failed to fetch model: ${e.modelAssetPath} (${t.status})`)})).then((t=>{try{this.g.i.FS_unlink(\"/model.dat\")}catch{}this.g.i.FS_createDataFile(\"/\",\"model.dat\",new Uint8Array(t),!0,!1,!1),fa(this,\"/model.dat\"),this.m(),this.L()}));if(e.modelAssetBuffer instanceof Uint8Array)fa(this,e.modelAssetBuffer);else if(e.modelAssetBuffer)return async function(t){const e=[];for(var n=0;;){const{done:r,value:i}=await t.read();if(r)break;e.push(i),n+=i.length}if(0===e.length)return new Uint8Array(0);if(1===e.length)return e[0];t=new Uint8Array(n),n=0;for(const r of e)t.set(r,n),n+=r.length;return t}(e.modelAssetBuffer).then((t=>{fa(this,t),this.m(),this.L()}))}return this.m(),this.L(),Promise.resolve()}L(){}ca(){let t;if(this.g.ca((e=>{t=ys(e)})),!t)throw Error(\"Failed to retrieve CalculatorGraphConfig\");return t}setGraph(t,e){this.g.attachErrorListener(((t,e)=>{this.H.push(Error(e))})),this.g.Ja(),this.g.setGraph(t,e),this.B=void 0,da(this)}finishProcessing(){this.g.finishProcessing(),da(this)}close(){this.B=void 0,this.g.closeGraph()}};function va(t,e){if(!t)throw Error(`Unable to obtain required WebGL resource: ${e}`);return t}_a.prototype.close=_a.prototype.close;class Ea{constructor(t,e,n,r){this.g=t,this.h=e,this.m=n,this.l=r}bind(){this.g.bindVertexArray(this.h)}close(){this.g.deleteVertexArray(this.h),this.g.deleteBuffer(this.m),this.g.deleteBuffer(this.l)}}function wa(t,e,n){const r=t.g;if(n=va(r.createShader(n),\"Failed to create WebGL shader\"),r.shaderSource(n,e),r.compileShader(n),!r.getShaderParameter(n,r.COMPILE_STATUS))throw Error(`Could not compile WebGL shader: ${r.getShaderInfoLog(n)}`);return r.attachShader(t.h,n),n}function Ta(t,e){const n=t.g,r=va(n.createVertexArray(),\"Failed to create vertex array\");n.bindVertexArray(r);const i=va(n.createBuffer(),\"Failed to create buffer\");n.bindBuffer(n.ARRAY_BUFFER,i),n.enableVertexAttribArray(t.O),n.vertexAttribPointer(t.O,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW);const s=va(n.createBuffer(),\"Failed to create buffer\");return n.bindBuffer(n.ARRAY_BUFFER,s),n.enableVertexAttribArray(t.L),n.vertexAttribPointer(t.L,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array(e?[0,1,0,0,1,0,1,1]:[0,0,0,1,1,1,1,0]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.bindVertexArray(null),new Ea(n,r,i,s)}function Aa(t,e){if(t.g){if(e!==t.g)throw Error(\"Cannot change GL context once initialized\")}else t.g=e}function ba(t,e,n,r){return Aa(t,e),t.h||(t.m(),t.D()),n?(t.u||(t.u=Ta(t,!0)),n=t.u):(t.A||(t.A=Ta(t,!1)),n=t.A),e.useProgram(t.h),n.bind(),t.l(),t=r(),n.g.bindVertexArray(null),t}function ka(t,e,n){return Aa(t,e),t=va(e.createTexture(),\"Failed to create texture\"),e.bindTexture(e.TEXTURE_2D,t),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,n??e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,n??e.LINEAR),e.bindTexture(e.TEXTURE_2D,null),t}function Sa(t,e,n){Aa(t,e),t.B||(t.B=va(e.createFramebuffer(),\"Failed to create framebuffe.\")),e.bindFramebuffer(e.FRAMEBUFFER,t.B),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,n,0)}function xa(t){t.g?.bindFramebuffer(t.g.FRAMEBUFFER,null)}var La=class{H(){return\"\\n precision mediump float;\\n varying vec2 vTex;\\n uniform sampler2D inputTexture;\\n void main() {\\n gl_FragColor = texture2D(inputTexture, vTex);\\n }\\n \"}m(){const t=this.g;if(this.h=va(t.createProgram(),\"Failed to create WebGL program\"),this.X=wa(this,\"\\n attribute vec2 aVertex;\\n attribute vec2 aTex;\\n varying vec2 vTex;\\n void main(void) {\\n gl_Position = vec4(aVertex, 0.0, 1.0);\\n vTex = aTex;\\n }\",t.VERTEX_SHADER),this.W=wa(this,this.H(),t.FRAGMENT_SHADER),t.linkProgram(this.h),!t.getProgramParameter(this.h,t.LINK_STATUS))throw Error(`Error during program linking: ${t.getProgramInfoLog(this.h)}`);this.O=t.getAttribLocation(this.h,\"aVertex\"),this.L=t.getAttribLocation(this.h,\"aTex\")}D(){}l(){}close(){if(this.h){const t=this.g;t.deleteProgram(this.h),t.deleteShader(this.X),t.deleteShader(this.W)}this.B&&this.g.deleteFramebuffer(this.B),this.A&&this.A.close(),this.u&&this.u.close()}};var Ra=class extends La{H(){return\"\\n precision mediump float;\\n uniform sampler2D backgroundTexture;\\n uniform sampler2D maskTexture;\\n uniform sampler2D colorMappingTexture;\\n varying vec2 vTex;\\n void main() {\\n vec4 backgroundColor = texture2D(backgroundTexture, vTex);\\n float category = texture2D(maskTexture, vTex).r;\\n vec4 categoryColor = texture2D(colorMappingTexture, vec2(category, 0.0));\\n gl_FragColor = mix(backgroundColor, categoryColor, categoryColor.a);\\n }\\n \"}D(){const t=this.g;t.activeTexture(t.TEXTURE1),this.C=ka(this,t,t.LINEAR),t.activeTexture(t.TEXTURE2),this.j=ka(this,t,t.NEAREST)}m(){super.m();const t=this.g;this.P=va(t.getUniformLocation(this.h,\"backgroundTexture\"),\"Uniform location\"),this.U=va(t.getUniformLocation(this.h,\"colorMappingTexture\"),\"Uniform location\"),this.M=va(t.getUniformLocation(this.h,\"maskTexture\"),\"Uniform location\")}l(){super.l();const t=this.g;t.uniform1i(this.M,0),t.uniform1i(this.P,1),t.uniform1i(this.U,2)}close(){this.C&&this.g.deleteTexture(this.C),this.j&&this.g.deleteTexture(this.j),super.close()}},Ia=class extends La{H(){return\"\\n precision mediump float;\\n uniform sampler2D maskTexture;\\n uniform sampler2D defaultTexture;\\n uniform sampler2D overlayTexture;\\n varying vec2 vTex;\\n void main() {\\n float confidence = texture2D(maskTexture, vTex).r;\\n vec4 defaultColor = texture2D(defaultTexture, vTex);\\n vec4 overlayColor = texture2D(overlayTexture, vTex);\\n // Apply the alpha from the overlay and merge in the default color\\n overlayColor = mix(defaultColor, overlayColor, overlayColor.a);\\n gl_FragColor = mix(defaultColor, overlayColor, confidence);\\n }\\n \"}D(){const t=this.g;t.activeTexture(t.TEXTURE1),this.j=ka(this,t),t.activeTexture(t.TEXTURE2),this.C=ka(this,t)}m(){super.m();const t=this.g;this.M=va(t.getUniformLocation(this.h,\"defaultTexture\"),\"Uniform location\"),this.P=va(t.getUniformLocation(this.h,\"overlayTexture\"),\"Uniform location\"),this.I=va(t.getUniformLocation(this.h,\"maskTexture\"),\"Uniform location\")}l(){super.l();const t=this.g;t.uniform1i(this.I,0),t.uniform1i(this.M,1),t.uniform1i(this.P,2)}close(){this.j&&this.g.deleteTexture(this.j),this.C&&this.g.deleteTexture(this.C),super.close()}};function Fa(t,e){switch(e){case 0:return t.g.find((t=>t instanceof Uint8Array));case 1:return t.g.find((t=>t instanceof Float32Array));case 2:return t.g.find((t=>\"undefined\"!=typeof WebGLTexture&&t instanceof WebGLTexture));default:throw Error(`Type is not supported: ${e}`)}}function Ma(t){var e=Fa(t,1);if(!e){if(e=Fa(t,0))e=new Float32Array(e).map((t=>t/255));else{e=new Float32Array(t.width*t.height);const r=Ca(t);var n=Na(t);if(Sa(n,r,Pa(t)),\"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod\".split(\";\").includes(navigator.platform)||navigator.userAgent.includes(\"Mac\")&&\"document\"in self&&\"ontouchend\"in self.document){n=new Float32Array(t.width*t.height*4),r.readPixels(0,0,t.width,t.height,r.RGBA,r.FLOAT,n);for(let t=0,r=0;t<e.length;++t,r+=4)e[t]=n[r]}else r.readPixels(0,0,t.width,t.height,r.RED,r.FLOAT,e)}t.g.push(e)}return e}function Pa(t){let e=Fa(t,2);if(!e){const n=Ca(t);e=Ua(t);const r=Ma(t),i=Oa(t);n.texImage2D(n.TEXTURE_2D,0,i,t.width,t.height,0,n.RED,n.FLOAT,r),Da(t)}return e}function Ca(t){if(!t.canvas)throw Error(\"Conversion to different image formats require that a canvas is passed when initializing the image.\");return t.h||(t.h=va(t.canvas.getContext(\"webgl2\"),\"You cannot use a canvas that is already bound to a different type of rendering context.\")),t.h}function Oa(t){if(t=Ca(t),!Ba)if(t.getExtension(\"EXT_color_buffer_float\")&&t.getExtension(\"OES_texture_float_linear\")&&t.getExtension(\"EXT_float_blend\"))Ba=t.R32F;else{if(!t.getExtension(\"EXT_color_buffer_half_float\"))throw Error(\"GPU does not fully support 4-channel float32 or float16 formats\");Ba=t.R16F}return Ba}function Na(t){return t.l||(t.l=new La),t.l}function Ua(t){const e=Ca(t);e.viewport(0,0,t.width,t.height),e.activeTexture(e.TEXTURE0);let n=Fa(t,2);return n||(n=ka(Na(t),e,t.m?e.LINEAR:e.NEAREST),t.g.push(n),t.j=!0),e.bindTexture(e.TEXTURE_2D,n),n}function Da(t){t.h.bindTexture(t.h.TEXTURE_2D,null)}var Ba,Ga=class{constructor(t,e,n,r,i,s,o){this.g=t,this.m=e,this.j=n,this.canvas=r,this.l=i,this.width=s,this.height=o,this.j&&(0===--ja&&console.error(\"You seem to be creating MPMask instances without invoking .close(). This leaks resources.\"))}Fa(){return!!Fa(this,0)}ka(){return!!Fa(this,1)}R(){return!!Fa(this,2)}ja(){return(e=Fa(t=this,0))||(e=Ma(t),e=new Uint8Array(e.map((t=>Math.round(255*t)))),t.g.push(e)),e;var t,e}ia(){return Ma(this)}N(){return Pa(this)}clone(){const t=[];for(const e of this.g){let n;if(e instanceof Uint8Array)n=new Uint8Array(e);else if(e instanceof Float32Array)n=new Float32Array(e);else{if(!(e instanceof WebGLTexture))throw Error(`Type is not supported: ${e}`);{const t=Ca(this),e=Na(this);t.activeTexture(t.TEXTURE1),n=ka(e,t,this.m?t.LINEAR:t.NEAREST),t.bindTexture(t.TEXTURE_2D,n);const r=Oa(this);t.texImage2D(t.TEXTURE_2D,0,r,this.width,this.height,0,t.RED,t.FLOAT,null),t.bindTexture(t.TEXTURE_2D,null),Sa(e,t,n),ba(e,t,!1,(()=>{Ua(this),t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),t.drawArrays(t.TRIANGLE_FAN,0,4),Da(this)})),xa(e),Da(this)}}t.push(n)}return new Ga(t,this.m,this.R(),this.canvas,this.l,this.width,this.height)}close(){this.j&&Ca(this).deleteTexture(Fa(this,2)),ja=-1}};Ga.prototype.close=Ga.prototype.close,Ga.prototype.clone=Ga.prototype.clone,Ga.prototype.getAsWebGLTexture=Ga.prototype.N,Ga.prototype.getAsFloat32Array=Ga.prototype.ia,Ga.prototype.getAsUint8Array=Ga.prototype.ja,Ga.prototype.hasWebGLTexture=Ga.prototype.R,Ga.prototype.hasFloat32Array=Ga.prototype.ka,Ga.prototype.hasUint8Array=Ga.prototype.Fa;var ja=250;const Va={color:\"white\",lineWidth:4,radius:6};function Xa(t){return{...Va,fillColor:(t=t||{}).color,...t}}function Ha(t,e){return t instanceof Function?t(e):t}function Wa(t,e,n){return Math.max(Math.min(e,n),Math.min(Math.max(e,n),t))}function za(t){if(!t.l)throw Error(\"CPU rendering requested but CanvasRenderingContext2D not provided.\");return t.l}function Ka(t){if(!t.j)throw Error(\"GPU rendering requested but WebGL2RenderingContext not provided.\");return t.j}function Ya(t,e,n){if(e.R())n(e.N());else{const r=e.ka()?e.ia():e.ja();t.m=t.m??new La;const i=Ka(t);n((t=new Ga([r],e.m,!1,i.canvas,t.m,e.width,e.height)).N()),t.close()}}function qa(t,e,n,r){const i=function(t){return t.g||(t.g=new Ra),t.g}(t),s=Ka(t),o=Array.isArray(n)?new ImageData(new Uint8ClampedArray(n),1,1):n;ba(i,s,!0,(()=>{!function(t,e,n,r){const i=t.g;if(i.activeTexture(i.TEXTURE0),i.bindTexture(i.TEXTURE_2D,e),i.activeTexture(i.TEXTURE1),i.bindTexture(i.TEXTURE_2D,t.C),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,i.RGBA,i.UNSIGNED_BYTE,n),t.I&&function(t,e){if(t!==e)return!1;t=t.entries(),e=e.entries();for(const[r,i]of t){t=r;const s=i;var n=e.next();if(n.done)return!1;const[o,a]=n.value;if(n=a,t!==o||s[0]!==n[0]||s[1]!==n[1]||s[2]!==n[2]||s[3]!==n[3])return!1}return!!e.next().done}(t.I,r))i.activeTexture(i.TEXTURE2),i.bindTexture(i.TEXTURE_2D,t.j);else{t.I=r;const e=Array(1024).fill(0);r.forEach(((t,n)=>{if(4!==t.length)throw Error(`Color at index ${n} is not a four-channel value.`);e[4*n]=t[0],e[4*n+1]=t[1],e[4*n+2]=t[2],e[4*n+3]=t[3]})),i.activeTexture(i.TEXTURE2),i.bindTexture(i.TEXTURE_2D,t.j),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,256,1,0,i.RGBA,i.UNSIGNED_BYTE,new Uint8Array(e))}}(i,e,o,r),s.clearColor(0,0,0,0),s.clear(s.COLOR_BUFFER_BIT),s.drawArrays(s.TRIANGLE_FAN,0,4);const t=i.g;t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE1),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE2),t.bindTexture(t.TEXTURE_2D,null)}))}function $a(t,e,n,r){const i=Ka(t),s=function(t){return t.h||(t.h=new Ia),t.h}(t),o=Array.isArray(n)?new ImageData(new Uint8ClampedArray(n),1,1):n,a=Array.isArray(r)?new ImageData(new Uint8ClampedArray(r),1,1):r;ba(s,i,!0,(()=>{var t=s.g;t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,e),t.activeTexture(t.TEXTURE1),t.bindTexture(t.TEXTURE_2D,s.j),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,o),t.activeTexture(t.TEXTURE2),t.bindTexture(t.TEXTURE_2D,s.C),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,a),i.clearColor(0,0,0,0),i.clear(i.COLOR_BUFFER_BIT),i.drawArrays(i.TRIANGLE_FAN,0,4),i.bindTexture(i.TEXTURE_2D,null),(t=s.g).activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE1),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE2),t.bindTexture(t.TEXTURE_2D,null)}))}var Ja=class{constructor(t,e){\"undefined\"!=typeof CanvasRenderingContext2D&&t instanceof CanvasRenderingContext2D||t instanceof OffscreenCanvasRenderingContext2D?(this.l=t,this.j=e):this.j=t}ya(t,e){if(t){var n=za(this);e=Xa(e),n.save();var r=n.canvas,i=0;for(const s of t)n.fillStyle=Ha(e.fillColor,{index:i,from:s}),n.strokeStyle=Ha(e.color,{index:i,from:s}),n.lineWidth=Ha(e.lineWidth,{index:i,from:s}),(t=new Path2D).arc(s.x*r.width,s.y*r.height,Ha(e.radius,{index:i,from:s}),0,2*Math.PI),n.fill(t),n.stroke(t),++i;n.restore()}}xa(t,e,n){if(t&&e){var r=za(this);n=Xa(n),r.save();var i=r.canvas,s=0;for(const o of e){r.beginPath(),e=t[o.start];const a=t[o.end];e&&a&&(r.strokeStyle=Ha(n.color,{index:s,from:e,to:a}),r.lineWidth=Ha(n.lineWidth,{index:s,from:e,to:a}),r.moveTo(e.x*i.width,e.y*i.height),r.lineTo(a.x*i.width,a.y*i.height)),++s,r.stroke()}r.restore()}}ua(t,e){const n=za(this);e=Xa(e),n.save(),n.beginPath(),n.lineWidth=Ha(e.lineWidth,{}),n.strokeStyle=Ha(e.color,{}),n.fillStyle=Ha(e.fillColor,{}),n.moveTo(t.originX,t.originY),n.lineTo(t.originX+t.width,t.originY),n.lineTo(t.originX+t.width,t.originY+t.height),n.lineTo(t.originX,t.originY+t.height),n.lineTo(t.originX,t.originY),n.stroke(),n.fill(),n.restore()}va(t,e,n=[0,0,0,255]){this.l?function(t,e,n,r){const i=Ka(t);Ya(t,e,(e=>{qa(t,e,n,r),(e=za(t)).drawImage(i.canvas,0,0,e.canvas.width,e.canvas.height)}))}(this,t,n,e):qa(this,t.N(),n,e)}wa(t,e,n){this.l?function(t,e,n,r){const i=Ka(t);Ya(t,e,(e=>{$a(t,e,n,r),(e=za(t)).drawImage(i.canvas,0,0,e.canvas.width,e.canvas.height)}))}(this,t,e,n):$a(this,t.N(),e,n)}close(){this.g?.close(),this.g=void 0,this.h?.close(),this.h=void 0,this.m?.close(),this.m=void 0}};function Za(t,e){switch(e){case 0:return t.g.find((t=>t instanceof ImageData));case 1:return t.g.find((t=>\"undefined\"!=typeof ImageBitmap&&t instanceof ImageBitmap));case 2:return t.g.find((t=>\"undefined\"!=typeof WebGLTexture&&t instanceof WebGLTexture));default:throw Error(`Type is not supported: ${e}`)}}function Qa(t){var e=Za(t,0);if(!e){e=ec(t);const n=nc(t),r=new Uint8Array(t.width*t.height*4);Sa(n,e,tc(t)),e.readPixels(0,0,t.width,t.height,e.RGBA,e.UNSIGNED_BYTE,r),xa(n),e=new ImageData(new Uint8ClampedArray(r.buffer),t.width,t.height),t.g.push(e)}return e}function tc(t){let e=Za(t,2);if(!e){const n=ec(t);e=rc(t);const r=Za(t,1)||Qa(t);n.texImage2D(n.TEXTURE_2D,0,n.RGBA,n.RGBA,n.UNSIGNED_BYTE,r),ic(t)}return e}function ec(t){if(!t.canvas)throw Error(\"Conversion to different image formats require that a canvas is passed when initializing the image.\");return t.h||(t.h=va(t.canvas.getContext(\"webgl2\"),\"You cannot use a canvas that is already bound to a different type of rendering context.\")),t.h}function nc(t){return t.l||(t.l=new La),t.l}function rc(t){const e=ec(t);e.viewport(0,0,t.width,t.height),e.activeTexture(e.TEXTURE0);let n=Za(t,2);return n||(n=ka(nc(t),e),t.g.push(n),t.m=!0),e.bindTexture(e.TEXTURE_2D,n),n}function ic(t){t.h.bindTexture(t.h.TEXTURE_2D,null)}function sc(t){const e=ec(t);return ba(nc(t),e,!0,(()=>function(t,e){const n=t.canvas;if(n.width===t.width&&n.height===t.height)return e();const r=n.width,i=n.height;return n.width=t.width,n.height=t.height,t=e(),n.width=r,n.height=i,t}(t,(()=>{if(e.bindFramebuffer(e.FRAMEBUFFER,null),e.clearColor(0,0,0,0),e.clear(e.COLOR_BUFFER_BIT),e.drawArrays(e.TRIANGLE_FAN,0,4),!(t.canvas instanceof OffscreenCanvas))throw Error(\"Conversion to ImageBitmap requires that the MediaPipe Tasks is initialized with an OffscreenCanvas\");return t.canvas.transferToImageBitmap()}))))}Ja.prototype.close=Ja.prototype.close,Ja.prototype.drawConfidenceMask=Ja.prototype.wa,Ja.prototype.drawCategoryMask=Ja.prototype.va,Ja.prototype.drawBoundingBox=Ja.prototype.ua,Ja.prototype.drawConnectors=Ja.prototype.xa,Ja.prototype.drawLandmarks=Ja.prototype.ya,Ja.lerp=function(t,e,n,r,i){return Wa(r*(1-(t-e)/(n-e))+i*(1-(n-t)/(n-e)),r,i)},Ja.clamp=Wa;var oc=class{constructor(t,e,n,r,i,s,o){this.g=t,this.j=e,this.m=n,this.canvas=r,this.l=i,this.width=s,this.height=o,(this.j||this.m)&&(0===--ac&&console.error(\"You seem to be creating MPImage instances without invoking .close(). This leaks resources.\"))}Ea(){return!!Za(this,0)}la(){return!!Za(this,1)}R(){return!!Za(this,2)}Ca(){return Qa(this)}Ba(){var t=Za(this,1);return t||(tc(this),rc(this),t=sc(this),ic(this),this.g.push(t),this.j=!0),t}N(){return tc(this)}clone(){const t=[];for(const e of this.g){let n;if(e instanceof ImageData)n=new ImageData(e.data,this.width,this.height);else if(e instanceof WebGLTexture){const t=ec(this),e=nc(this);t.activeTexture(t.TEXTURE1),n=ka(e,t),t.bindTexture(t.TEXTURE_2D,n),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,this.width,this.height,0,t.RGBA,t.UNSIGNED_BYTE,null),t.bindTexture(t.TEXTURE_2D,null),Sa(e,t,n),ba(e,t,!1,(()=>{rc(this),t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),t.drawArrays(t.TRIANGLE_FAN,0,4),ic(this)})),xa(e),ic(this)}else{if(!(e instanceof ImageBitmap))throw Error(`Type is not supported: ${e}`);tc(this),rc(this),n=sc(this),ic(this)}t.push(n)}return new oc(t,this.la(),this.R(),this.canvas,this.l,this.width,this.height)}close(){this.j&&Za(this,1).close(),this.m&&ec(this).deleteTexture(Za(this,2)),ac=-1}};oc.prototype.close=oc.prototype.close,oc.prototype.clone=oc.prototype.clone,oc.prototype.getAsWebGLTexture=oc.prototype.N,oc.prototype.getAsImageBitmap=oc.prototype.Ba,oc.prototype.getAsImageData=oc.prototype.Ca,oc.prototype.hasWebGLTexture=oc.prototype.R,oc.prototype.hasImageBitmap=oc.prototype.la,oc.prototype.hasImageData=oc.prototype.Ea;var ac=250;function cc(...t){return t.map((([t,e])=>({start:t,end:e})))}const hc=function(t){return class extends t{Ja(){this.i._registerModelResourcesGraphService()}}}((uc=class{constructor(t,e){this.l=!0,this.i=t,this.g=null,this.h=0,this.m=\"function\"==typeof this.i._addIntToInputStream,void 0!==e?this.i.canvas=e:ra()?this.i.canvas=new OffscreenCanvas(1,1):(console.warn(\"OffscreenCanvas not supported and GraphRunner constructor glCanvas parameter is undefined. Creating backup canvas.\"),this.i.canvas=document.createElement(\"canvas\"))}async initializeGraph(t){const e=await(await fetch(t)).arrayBuffer();t=!(t.endsWith(\".pbtxt\")||t.endsWith(\".textproto\")),this.setGraph(new Uint8Array(e),t)}setGraphFromString(t){this.setGraph((new TextEncoder).encode(t),!1)}setGraph(t,e){const n=t.length,r=this.i._malloc(n);this.i.HEAPU8.set(t,r),e?this.i._changeBinaryGraph(n,r):this.i._changeTextGraph(n,r),this.i._free(r)}configureAudio(t,e,n,r,i){this.i._configureAudio||console.warn('Attempting to use configureAudio without support for input audio. Is build dep \":gl_graph_runner_audio\" missing?'),oa(this,r||\"input_audio\",(r=>{oa(this,i=i||\"audio_header\",(i=>{this.i._configureAudio(r,i,t,e??0,n)}))}))}setAutoResizeCanvas(t){this.l=t}setAutoRenderToScreen(t){this.i._setAutoRenderToScreen(t)}setGpuBufferVerticalFlip(t){this.i.gpuOriginForWebTexturesIsBottomLeft=t}ca(t){ha(this,\"__graph_config__\",(e=>{t(e)})),oa(this,\"__graph_config__\",(t=>{this.i._getGraphConfig(t,void 0)})),delete this.i.simpleListeners.__graph_config__}attachErrorListener(t){this.i.errorListener=t}attachEmptyPacketListener(t,e){this.i.emptyPacketListeners=this.i.emptyPacketListeners||{},this.i.emptyPacketListeners[t]=e}addAudioToStream(t,e,n){this.addAudioToStreamWithShape(t,0,0,e,n)}addAudioToStreamWithShape(t,e,n,r,i){const s=4*t.length;this.h!==s&&(this.g&&this.i._free(this.g),this.g=this.i._malloc(s),this.h=s),this.i.HEAPF32.set(t,this.g/4),oa(this,r,(t=>{this.i._addAudioToInputStream(this.g,e,n,t,i)}))}addGpuBufferToStream(t,e,n){oa(this,e,(e=>{const[r,i]=aa(this,t,e);this.i._addBoundTextureToStream(e,r,i,n)}))}addBoolToStream(t,e,n){oa(this,e,(e=>{this.i._addBoolToInputStream(t,e,n)}))}addDoubleToStream(t,e,n){oa(this,e,(e=>{this.i._addDoubleToInputStream(t,e,n)}))}addFloatToStream(t,e,n){oa(this,e,(e=>{this.i._addFloatToInputStream(t,e,n)}))}addIntToStream(t,e,n){oa(this,e,(e=>{this.i._addIntToInputStream(t,e,n)}))}addUintToStream(t,e,n){oa(this,e,(e=>{this.i._addUintToInputStream(t,e,n)}))}addStringToStream(t,e,n){oa(this,e,(e=>{oa(this,t,(t=>{this.i._addStringToInputStream(t,e,n)}))}))}addStringRecordToStream(t,e,n){oa(this,e,(e=>{ca(this,Object.keys(t),(r=>{ca(this,Object.values(t),(i=>{this.i._addFlatHashMapToInputStream(r,i,Object.keys(t).length,e,n)}))}))}))}addProtoToStream(t,e,n,r){oa(this,n,(n=>{oa(this,e,(e=>{const i=this.i._malloc(t.length);this.i.HEAPU8.set(t,i),this.i._addProtoToInputStream(i,t.length,e,n,r),this.i._free(i)}))}))}addEmptyPacketToStream(t,e){oa(this,t,(t=>{this.i._addEmptyPacketToInputStream(t,e)}))}addBoolVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateBoolVector(t.length);if(!r)throw Error(\"Unable to allocate new bool vector on heap.\");for(const e of t)this.i._addBoolVectorEntry(r,e);this.i._addBoolVectorToInputStream(r,e,n)}))}addDoubleVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateDoubleVector(t.length);if(!r)throw Error(\"Unable to allocate new double vector on heap.\");for(const e of t)this.i._addDoubleVectorEntry(r,e);this.i._addDoubleVectorToInputStream(r,e,n)}))}addFloatVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateFloatVector(t.length);if(!r)throw Error(\"Unable to allocate new float vector on heap.\");for(const e of t)this.i._addFloatVectorEntry(r,e);this.i._addFloatVectorToInputStream(r,e,n)}))}addIntVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateIntVector(t.length);if(!r)throw Error(\"Unable to allocate new int vector on heap.\");for(const e of t)this.i._addIntVectorEntry(r,e);this.i._addIntVectorToInputStream(r,e,n)}))}addUintVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateUintVector(t.length);if(!r)throw Error(\"Unable to allocate new unsigned int vector on heap.\");for(const e of t)this.i._addUintVectorEntry(r,e);this.i._addUintVectorToInputStream(r,e,n)}))}addStringVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateStringVector(t.length);if(!r)throw Error(\"Unable to allocate new string vector on heap.\");for(const e of t)oa(this,e,(t=>{this.i._addStringVectorEntry(r,t)}));this.i._addStringVectorToInputStream(r,e,n)}))}addBoolToInputSidePacket(t,e){oa(this,e,(e=>{this.i._addBoolToInputSidePacket(t,e)}))}addDoubleToInputSidePacket(t,e){oa(this,e,(e=>{this.i._addDoubleToInputSidePacket(t,e)}))}addFloatToInputSidePacket(t,e){oa(this,e,(e=>{this.i._addFloatToInputSidePacket(t,e)}))}addIntToInputSidePacket(t,e){oa(this,e,(e=>{this.i._addIntToInputSidePacket(t,e)}))}addUintToInputSidePacket(t,e){oa(this,e,(e=>{this.i._addUintToInputSidePacket(t,e)}))}addStringToInputSidePacket(t,e){oa(this,e,(e=>{oa(this,t,(t=>{this.i._addStringToInputSidePacket(t,e)}))}))}addProtoToInputSidePacket(t,e,n){oa(this,n,(n=>{oa(this,e,(e=>{const r=this.i._malloc(t.length);this.i.HEAPU8.set(t,r),this.i._addProtoToInputSidePacket(r,t.length,e,n),this.i._free(r)}))}))}addBoolVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateBoolVector(t.length);if(!n)throw Error(\"Unable to allocate new bool vector on heap.\");for(const e of t)this.i._addBoolVectorEntry(n,e);this.i._addBoolVectorToInputSidePacket(n,e)}))}addDoubleVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateDoubleVector(t.length);if(!n)throw Error(\"Unable to allocate new double vector on heap.\");for(const e of t)this.i._addDoubleVectorEntry(n,e);this.i._addDoubleVectorToInputSidePacket(n,e)}))}addFloatVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateFloatVector(t.length);if(!n)throw Error(\"Unable to allocate new float vector on heap.\");for(const e of t)this.i._addFloatVectorEntry(n,e);this.i._addFloatVectorToInputSidePacket(n,e)}))}addIntVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateIntVector(t.length);if(!n)throw Error(\"Unable to allocate new int vector on heap.\");for(const e of t)this.i._addIntVectorEntry(n,e);this.i._addIntVectorToInputSidePacket(n,e)}))}addUintVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateUintVector(t.length);if(!n)throw Error(\"Unable to allocate new unsigned int vector on heap.\");for(const e of t)this.i._addUintVectorEntry(n,e);this.i._addUintVectorToInputSidePacket(n,e)}))}addStringVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateStringVector(t.length);if(!n)throw Error(\"Unable to allocate new string vector on heap.\");for(const e of t)oa(this,e,(t=>{this.i._addStringVectorEntry(n,t)}));this.i._addStringVectorToInputSidePacket(n,e)}))}attachBoolListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachBoolListener(t)}))}attachBoolVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachBoolVectorListener(t)}))}attachIntListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachIntListener(t)}))}attachIntVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachIntVectorListener(t)}))}attachUintListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachUintListener(t)}))}attachUintVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachUintVectorListener(t)}))}attachDoubleListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachDoubleListener(t)}))}attachDoubleVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachDoubleVectorListener(t)}))}attachFloatListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachFloatListener(t)}))}attachFloatVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachFloatVectorListener(t)}))}attachStringListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachStringListener(t)}))}attachStringVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachStringVectorListener(t)}))}attachProtoListener(t,e,n){ha(this,t,e),oa(this,t,(t=>{this.i._attachProtoListener(t,n||!1)}))}attachProtoVectorListener(t,e,n){ua(this,t,e),oa(this,t,(t=>{this.i._attachProtoVectorListener(t,n||!1)}))}attachAudioListener(t,e,n){this.i._attachAudioListener||console.warn('Attempting to use attachAudioListener without support for output audio. Is build dep \":gl_graph_runner_audio_out\" missing?'),ha(this,t,((t,n)=>{t=new Float32Array(t.buffer,t.byteOffset,t.length/4),e(t,n)})),oa(this,t,(t=>{this.i._attachAudioListener(t,n||!1)}))}finishProcessing(){this.i._waitUntilIdle()}closeGraph(){this.i._closeGraph(),this.i.simpleListeners=void 0,this.i.emptyPacketListeners=void 0}},class extends uc{get ga(){return this.i}pa(t,e,n){oa(this,e,(e=>{const[r,i]=aa(this,t,e);this.ga._addBoundTextureAsImageToStream(e,r,i,n)}))}Z(t,e){ha(this,t,e),oa(this,t,(t=>{this.ga._attachImageListener(t)}))}aa(t,e){ua(this,t,e),oa(this,t,(t=>{this.ga._attachImageVectorListener(t)}))}}));var uc,lc=class extends hc{};async function fc(t,e,n){return async function(t,e,n,r){return la(t,e,n,r)}(t,n.canvas??(ra()?void 0:document.createElement(\"canvas\")),e,n)}function dc(t,e,n,r){if(t.U){const s=new Ms;if(n?.regionOfInterest){if(!t.oa)throw Error(\"This task doesn't support region-of-interest.\");var i=n.regionOfInterest;if(i.left>=i.right||i.top>=i.bottom)throw Error(\"Expected RectF with left < right and top < bottom.\");if(i.left<0||i.top<0||i.right>1||i.bottom>1)throw Error(\"Expected RectF values to be in [0,1].\");Pn(s,1,(i.left+i.right)/2),Pn(s,2,(i.top+i.bottom)/2),Pn(s,4,i.right-i.left),Pn(s,3,i.bottom-i.top)}else Pn(s,1,.5),Pn(s,2,.5),Pn(s,4,1),Pn(s,3,1);if(n?.rotationDegrees){if(n?.rotationDegrees%90!=0)throw Error(\"Expected rotation to be a multiple of 90\u00B0.\");if(Pn(s,5,-Math.PI*n.rotationDegrees/180),n?.rotationDegrees%180!=0){const[t,r]=sa(e);n=Fn(s,3)*r/t,i=Fn(s,4)*t/r,Pn(s,4,n),Pn(s,3,i)}}t.g.addProtoToStream(s.g(),\"mediapipe.NormalizedRect\",t.U,r)}t.g.pa(e,t.X,r??performance.now()),t.finishProcessing()}function pc(t,e,n){if(t.baseOptions?.g())throw Error(\"Task is not initialized with image mode. 'runningMode' must be set to 'IMAGE'.\");dc(t,e,n,t.C+1)}function gc(t,e,n,r){if(!t.baseOptions?.g())throw Error(\"Task is not initialized with video mode. 'runningMode' must be set to 'VIDEO'.\");dc(t,e,n,r)}function mc(t,e,n,r){var i=e.data;const s=e.width,o=s*(e=e.height);if((i instanceof Uint8Array||i instanceof Float32Array)&&i.length!==o)throw Error(\"Unsupported channel count: \"+i.length/o);return t=new Ga([i],n,!1,t.g.i.canvas,t.P,s,e),r?t.clone():t}var yc=class extends _a{constructor(t,e,n,r){super(t),this.g=t,this.X=e,this.U=n,this.oa=r,this.P=new La}l(t,e=!0){if(\"runningMode\"in t&&nn(this.baseOptions,2,te(!!t.runningMode&&\"IMAGE\"!==t.runningMode)),void 0!==t.canvas&&this.g.i.canvas!==t.canvas)throw Error(\"You must create a new task to reset the canvas.\");return super.l(t,e)}close(){this.P.close(),super.close()}};yc.prototype.close=yc.prototype.close;var _c=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect_in\",!1),this.j={detections:[]},kn(t=this.h=new $s,0,1,e=new Ks),Pn(this.h,2,.5),Pn(this.h,3,.3)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return\"minDetectionConfidence\"in t&&Pn(this.h,2,t.minDetectionConfidence??.5),\"minSuppressionThreshold\"in t&&Pn(this.h,3,t.minSuppressionThreshold??.3),this.l(t)}F(t,e){return this.j={detections:[]},pc(this,t,e),this.j}G(t,e,n){return this.j={detections:[]},gc(this,t,n,e),this.j}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect_in\"),ps(t,\"detections\");const e=new rs;Mr(e,Zs,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.face_detector.FaceDetectorGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect_in\"),as(n,\"DETECTIONS:detections\"),n.o(e),fs(t,n),this.g.attachProtoVectorListener(\"detections\",((t,e)=>{for(const e of t)t=ks(e),this.j.detections.push(Ko(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"detections\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};_c.prototype.detectForVideo=_c.prototype.G,_c.prototype.detect=_c.prototype.F,_c.prototype.setOptions=_c.prototype.o,_c.createFromModelPath=async function(t,e){return fc(_c,t,{baseOptions:{modelAssetPath:e}})},_c.createFromModelBuffer=function(t,e){return fc(_c,t,{baseOptions:{modelAssetBuffer:e}})},_c.createFromOptions=function(t,e){return fc(_c,t,e)};var vc=cc([61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]),Ec=cc([263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]),wc=cc([276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]),Tc=cc([474,475],[475,476],[476,477],[477,474]),Ac=cc([33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]),bc=cc([46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]),kc=cc([469,470],[470,471],[471,472],[472,469]),Sc=cc([10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]),xc=[...vc,...Ec,...wc,...Ac,...bc,...Sc],Lc=cc([127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]);function Rc(t){t.j={faceLandmarks:[],faceBlendshapes:[],facialTransformationMatrixes:[]}}var Ic=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!1),this.j={faceLandmarks:[],faceBlendshapes:[],facialTransformationMatrixes:[]},this.outputFacialTransformationMatrixes=this.outputFaceBlendshapes=!1,kn(t=this.h=new eo,0,1,e=new Ks),this.A=new to,kn(this.h,0,3,this.A),this.u=new $s,kn(this.h,0,2,this.u),Mn(this.u,4,1),Pn(this.u,2,.5),Pn(this.A,2,.5),Pn(this.h,4,.5)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return\"numFaces\"in t&&Mn(this.u,4,t.numFaces??1),\"minFaceDetectionConfidence\"in t&&Pn(this.u,2,t.minFaceDetectionConfidence??.5),\"minTrackingConfidence\"in t&&Pn(this.h,4,t.minTrackingConfidence??.5),\"minFacePresenceConfidence\"in t&&Pn(this.A,2,t.minFacePresenceConfidence??.5),\"outputFaceBlendshapes\"in t&&(this.outputFaceBlendshapes=!!t.outputFaceBlendshapes),\"outputFacialTransformationMatrixes\"in t&&(this.outputFacialTransformationMatrixes=!!t.outputFacialTransformationMatrixes),this.l(t)}F(t,e){return Rc(this),pc(this,t,e),this.j}G(t,e,n){return Rc(this),gc(this,t,n,e),this.j}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\"),ps(t,\"face_landmarks\");const e=new rs;Mr(e,ro,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.face_landmarker.FaceLandmarkerGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"NORM_LANDMARKS:face_landmarks\"),n.o(e),fs(t,n),this.g.attachProtoVectorListener(\"face_landmarks\",((t,e)=>{for(const e of t)t=Rs(e),this.j.faceLandmarks.push(Yo(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"face_landmarks\",(t=>{pa(this,t)})),this.outputFaceBlendshapes&&(ps(t,\"blendshapes\"),as(n,\"BLENDSHAPES:blendshapes\"),this.g.attachProtoVectorListener(\"blendshapes\",((t,e)=>{if(this.outputFaceBlendshapes)for(const e of t)t=ws(e),this.j.faceBlendshapes.push(Wo(t.g()??[]));pa(this,e)})),this.g.attachEmptyPacketListener(\"blendshapes\",(t=>{pa(this,t)}))),this.outputFacialTransformationMatrixes&&(ps(t,\"face_geometry\"),as(n,\"FACE_GEOMETRY:face_geometry\"),this.g.attachProtoVectorListener(\"face_geometry\",((t,e)=>{if(this.outputFacialTransformationMatrixes)for(const e of t)(t=wn(t=Qs(e),Is,2))&&this.j.facialTransformationMatrixes.push({rows:Rn(t,1)??0??0,columns:Rn(t,2)??0??0,data:on(t,3,Qt,sn()).slice()??[]});pa(this,e)})),this.g.attachEmptyPacketListener(\"face_geometry\",(t=>{pa(this,t)}))),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Ic.prototype.detectForVideo=Ic.prototype.G,Ic.prototype.detect=Ic.prototype.F,Ic.prototype.setOptions=Ic.prototype.o,Ic.createFromModelPath=function(t,e){return fc(Ic,t,{baseOptions:{modelAssetPath:e}})},Ic.createFromModelBuffer=function(t,e){return fc(Ic,t,{baseOptions:{modelAssetBuffer:e}})},Ic.createFromOptions=function(t,e){return fc(Ic,t,e)},Ic.FACE_LANDMARKS_LIPS=vc,Ic.FACE_LANDMARKS_LEFT_EYE=Ec,Ic.FACE_LANDMARKS_LEFT_EYEBROW=wc,Ic.FACE_LANDMARKS_LEFT_IRIS=Tc,Ic.FACE_LANDMARKS_RIGHT_EYE=Ac,Ic.FACE_LANDMARKS_RIGHT_EYEBROW=bc,Ic.FACE_LANDMARKS_RIGHT_IRIS=kc,Ic.FACE_LANDMARKS_FACE_OVAL=Sc,Ic.FACE_LANDMARKS_CONTOURS=xc,Ic.FACE_LANDMARKS_TESSELATION=Lc;var Fc=cc([0,1],[1,2],[2,3],[3,4],[0,5],[5,6],[6,7],[7,8],[5,9],[9,10],[10,11],[11,12],[9,13],[13,14],[14,15],[15,16],[13,17],[0,17],[17,18],[18,19],[19,20]);function Mc(t){t.gestures=[],t.landmarks=[],t.worldLandmarks=[],t.handedness=[]}function Pc(t){return 0===t.gestures.length?{gestures:[],landmarks:[],worldLandmarks:[],handedness:[],handednesses:[]}:{gestures:t.gestures,landmarks:t.landmarks,worldLandmarks:t.worldLandmarks,handedness:t.handedness,handednesses:t.handedness}}function Cc(t,e=!0){const n=[];for(const i of t){var r=ws(i);t=[];for(const n of r.g())r=e&&null!=Rn(n,1)?Rn(n,1)??0:-1,t.push({score:Fn(n,2)??0,index:r,categoryName:ge(tn(n,3))??\"\"??\"\",displayName:ge(tn(n,4))??\"\"??\"\"});n.push(t)}return n}var Oc=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!1),this.gestures=[],this.landmarks=[],this.worldLandmarks=[],this.handedness=[],kn(t=this.j=new uo,0,1,e=new Ks),this.u=new ho,kn(this.j,0,2,this.u),this.D=new co,kn(this.u,0,3,this.D),this.A=new ao,kn(this.u,0,2,this.A),this.h=new oo,kn(this.j,0,3,this.h),Pn(this.A,2,.5),Pn(this.u,4,.5),Pn(this.D,2,.5)}get baseOptions(){return wn(this.j,Ks,1)}set baseOptions(t){kn(this.j,0,1,t)}o(t){if(Mn(this.A,3,t.numHands??1),\"minHandDetectionConfidence\"in t&&Pn(this.A,2,t.minHandDetectionConfidence??.5),\"minTrackingConfidence\"in t&&Pn(this.u,4,t.minTrackingConfidence??.5),\"minHandPresenceConfidence\"in t&&Pn(this.D,2,t.minHandPresenceConfidence??.5),t.cannedGesturesClassifierOptions){var e=new io,n=e,r=Xo(t.cannedGesturesClassifierOptions,wn(this.h,io,3)?.l());kn(n,0,2,r),kn(this.h,0,3,e)}else void 0===t.cannedGesturesClassifierOptions&&wn(this.h,io,3)?.g();return t.customGesturesClassifierOptions?(kn(n=e=new io,0,2,r=Xo(t.customGesturesClassifierOptions,wn(this.h,io,4)?.l())),kn(this.h,0,4,e)):void 0===t.customGesturesClassifierOptions&&wn(this.h,io,4)?.g(),this.l(t)}Ha(t,e){return Mc(this),pc(this,t,e),Pc(this)}Ia(t,e,n){return Mc(this),gc(this,t,n,e),Pc(this)}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\"),ps(t,\"hand_gestures\"),ps(t,\"hand_landmarks\"),ps(t,\"world_hand_landmarks\"),ps(t,\"handedness\");const e=new rs;Mr(e,mo,this.j);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.gesture_recognizer.GestureRecognizerGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"HAND_GESTURES:hand_gestures\"),as(n,\"LANDMARKS:hand_landmarks\"),as(n,\"WORLD_LANDMARKS:world_hand_landmarks\"),as(n,\"HANDEDNESS:handedness\"),n.o(e),fs(t,n),this.g.attachProtoVectorListener(\"hand_landmarks\",((t,e)=>{for(const e of t){t=Rs(e);const n=[];for(const e of An(t,Ls,1))n.push({x:Fn(e,1)??0,y:Fn(e,2)??0,z:Fn(e,3)??0,visibility:Fn(e,4)??0});this.landmarks.push(n)}pa(this,e)})),this.g.attachEmptyPacketListener(\"hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoVectorListener(\"world_hand_landmarks\",((t,e)=>{for(const e of t){t=xs(e);const n=[];for(const e of An(t,Ss,1))n.push({x:Fn(e,1)??0,y:Fn(e,2)??0,z:Fn(e,3)??0,visibility:Fn(e,4)??0});this.worldLandmarks.push(n)}pa(this,e)})),this.g.attachEmptyPacketListener(\"world_hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoVectorListener(\"hand_gestures\",((t,e)=>{this.gestures.push(...Cc(t,!1)),pa(this,e)})),this.g.attachEmptyPacketListener(\"hand_gestures\",(t=>{pa(this,t)})),this.g.attachProtoVectorListener(\"handedness\",((t,e)=>{this.handedness.push(...Cc(t)),pa(this,e)})),this.g.attachEmptyPacketListener(\"handedness\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};function Nc(t){return{landmarks:t.landmarks,worldLandmarks:t.worldLandmarks,handednesses:t.handedness,handedness:t.handedness}}Oc.prototype.recognizeForVideo=Oc.prototype.Ia,Oc.prototype.recognize=Oc.prototype.Ha,Oc.prototype.setOptions=Oc.prototype.o,Oc.createFromModelPath=function(t,e){return fc(Oc,t,{baseOptions:{modelAssetPath:e}})},Oc.createFromModelBuffer=function(t,e){return fc(Oc,t,{baseOptions:{modelAssetBuffer:e}})},Oc.createFromOptions=function(t,e){return fc(Oc,t,e)},Oc.HAND_CONNECTIONS=Fc;var Uc=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!1),this.landmarks=[],this.worldLandmarks=[],this.handedness=[],kn(t=this.h=new ho,0,1,e=new Ks),this.u=new co,kn(this.h,0,3,this.u),this.j=new ao,kn(this.h,0,2,this.j),Mn(this.j,3,1),Pn(this.j,2,.5),Pn(this.u,2,.5),Pn(this.h,4,.5)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return\"numHands\"in t&&Mn(this.j,3,t.numHands??1),\"minHandDetectionConfidence\"in t&&Pn(this.j,2,t.minHandDetectionConfidence??.5),\"minTrackingConfidence\"in t&&Pn(this.h,4,t.minTrackingConfidence??.5),\"minHandPresenceConfidence\"in t&&Pn(this.u,2,t.minHandPresenceConfidence??.5),this.l(t)}F(t,e){return this.landmarks=[],this.worldLandmarks=[],this.handedness=[],pc(this,t,e),Nc(this)}G(t,e,n){return this.landmarks=[],this.worldLandmarks=[],this.handedness=[],gc(this,t,n,e),Nc(this)}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\"),ps(t,\"hand_landmarks\"),ps(t,\"world_hand_landmarks\"),ps(t,\"handedness\");const e=new rs;Mr(e,yo,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.hand_landmarker.HandLandmarkerGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"LANDMARKS:hand_landmarks\"),as(n,\"WORLD_LANDMARKS:world_hand_landmarks\"),as(n,\"HANDEDNESS:handedness\"),n.o(e),fs(t,n),this.g.attachProtoVectorListener(\"hand_landmarks\",((t,e)=>{for(const e of t)t=Rs(e),this.landmarks.push(Yo(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoVectorListener(\"world_hand_landmarks\",((t,e)=>{for(const e of t)t=xs(e),this.worldLandmarks.push(qo(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"world_hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoVectorListener(\"handedness\",((t,e)=>{var n=this.handedness,r=n.push;const i=[];for(const e of t){t=ws(e);const n=[];for(const e of t.g())n.push({score:Fn(e,2)??0,index:Rn(e,1)??0??-1,categoryName:ge(tn(e,3))??\"\"??\"\",displayName:ge(tn(e,4))??\"\"??\"\"});i.push(n)}r.call(n,...i),pa(this,e)})),this.g.attachEmptyPacketListener(\"handedness\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Uc.prototype.detectForVideo=Uc.prototype.G,Uc.prototype.detect=Uc.prototype.F,Uc.prototype.setOptions=Uc.prototype.o,Uc.createFromModelPath=function(t,e){return fc(Uc,t,{baseOptions:{modelAssetPath:e}})},Uc.createFromModelBuffer=function(t,e){return fc(Uc,t,{baseOptions:{modelAssetBuffer:e}})},Uc.createFromOptions=function(t,e){return fc(Uc,t,e)},Uc.HAND_CONNECTIONS=Fc;var Dc=cc([0,1],[1,2],[2,3],[3,7],[0,4],[4,5],[5,6],[6,8],[9,10],[11,12],[11,13],[13,15],[15,17],[15,19],[15,21],[17,19],[12,14],[14,16],[16,18],[16,20],[16,22],[18,20],[11,23],[12,24],[23,24],[23,25],[24,26],[25,27],[26,28],[27,29],[28,30],[29,31],[30,32],[27,31],[28,32]);function Bc(t){t.h={faceLandmarks:[],faceBlendshapes:[],poseLandmarks:[],poseWorldLandmarks:[],poseSegmentationMasks:[],leftHandLandmarks:[],leftHandWorldLandmarks:[],rightHandLandmarks:[],rightHandWorldLandmarks:[]}}function Gc(t){try{if(!t.D)return t.h;t.D(t.h)}finally{ya(t)}}function jc(t,e){t=Rs(t),e.push(Yo(t))}var Vc=class extends yc{constructor(t,e){super(new lc(t,e),\"input_frames_image\",null,!1),this.h={faceLandmarks:[],faceBlendshapes:[],poseLandmarks:[],poseWorldLandmarks:[],poseSegmentationMasks:[],leftHandLandmarks:[],leftHandWorldLandmarks:[],rightHandLandmarks:[],rightHandWorldLandmarks:[]},this.outputPoseSegmentationMasks=this.outputFaceBlendshapes=!1,kn(t=this.j=new wo,0,1,e=new Ks),this.I=new co,kn(this.j,0,2,this.I),this.W=new _o,kn(this.j,0,3,this.W),this.u=new $s,kn(this.j,0,4,this.u),this.O=new to,kn(this.j,0,5,this.O),this.A=new vo,kn(this.j,0,6,this.A),this.M=new Eo,kn(this.j,0,7,this.M),Pn(this.u,2,.5),Pn(this.u,3,.3),Pn(this.O,2,.5),Pn(this.A,2,.5),Pn(this.A,3,.3),Pn(this.M,2,.5),Pn(this.I,2,.5)}get baseOptions(){return wn(this.j,Ks,1)}set baseOptions(t){kn(this.j,0,1,t)}o(t){return\"minFaceDetectionConfidence\"in t&&Pn(this.u,2,t.minFaceDetectionConfidence??.5),\"minFaceSuppressionThreshold\"in t&&Pn(this.u,3,t.minFaceSuppressionThreshold??.3),\"minFacePresenceConfidence\"in t&&Pn(this.O,2,t.minFacePresenceConfidence??.5),\"outputFaceBlendshapes\"in t&&(this.outputFaceBlendshapes=!!t.outputFaceBlendshapes),\"minPoseDetectionConfidence\"in t&&Pn(this.A,2,t.minPoseDetectionConfidence??.5),\"minPoseSuppressionThreshold\"in t&&Pn(this.A,3,t.minPoseSuppressionThreshold??.3),\"minPosePresenceConfidence\"in t&&Pn(this.M,2,t.minPosePresenceConfidence??.5),\"outputPoseSegmentationMasks\"in t&&(this.outputPoseSegmentationMasks=!!t.outputPoseSegmentationMasks),\"minHandLandmarksConfidence\"in t&&Pn(this.I,2,t.minHandLandmarksConfidence??.5),this.l(t)}F(t,e,n){const r=\"function\"!=typeof e?e:{};return this.D=\"function\"==typeof e?e:n,Bc(this),pc(this,t,r),Gc(this)}G(t,e,n,r){const i=\"function\"!=typeof n?n:{};return this.D=\"function\"==typeof n?n:r,Bc(this),gc(this,t,i,e),Gc(this)}m(){var t=new gs;ds(t,\"input_frames_image\"),ps(t,\"pose_landmarks\"),ps(t,\"pose_world_landmarks\"),ps(t,\"face_landmarks\"),ps(t,\"left_hand_landmarks\"),ps(t,\"left_hand_world_landmarks\"),ps(t,\"right_hand_landmarks\"),ps(t,\"right_hand_world_landmarks\");const e=new rs,n=new Xi;Cn(n,1,\"type.googleapis.com/mediapipe.tasks.vision.holistic_landmarker.proto.HolisticLandmarkerGraphOptions\"),function(t,e){if(null!=e)if(Array.isArray(e))nn(t,2,Ce(e,0,Ne));else{if(!(\"string\"==typeof e||e instanceof P||R(e)))throw Error(\"invalid value in Any.value field: \"+e+\" expected a ByteString, a base64 encoded string, a Uint8Array or a jspb array\");dn(t,2,lt(e,!1),F())}}(n,this.j.g());const r=new cs;Cn(r,2,\"mediapipe.tasks.vision.holistic_landmarker.HolisticLandmarkerGraph\"),Ln(r,8,Xi,n),os(r,\"IMAGE:input_frames_image\"),as(r,\"POSE_LANDMARKS:pose_landmarks\"),as(r,\"POSE_WORLD_LANDMARKS:pose_world_landmarks\"),as(r,\"FACE_LANDMARKS:face_landmarks\"),as(r,\"LEFT_HAND_LANDMARKS:left_hand_landmarks\"),as(r,\"LEFT_HAND_WORLD_LANDMARKS:left_hand_world_landmarks\"),as(r,\"RIGHT_HAND_LANDMARKS:right_hand_landmarks\"),as(r,\"RIGHT_HAND_WORLD_LANDMARKS:right_hand_world_landmarks\"),r.o(e),fs(t,r),ga(this,t),this.g.attachProtoListener(\"pose_landmarks\",((t,e)=>{jc(t,this.h.poseLandmarks),pa(this,e)})),this.g.attachEmptyPacketListener(\"pose_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoListener(\"pose_world_landmarks\",((t,e)=>{var n=this.h.poseWorldLandmarks;t=xs(t),n.push(qo(t)),pa(this,e)})),this.g.attachEmptyPacketListener(\"pose_world_landmarks\",(t=>{pa(this,t)})),this.outputPoseSegmentationMasks&&(as(r,\"POSE_SEGMENTATION_MASK:pose_segmentation_mask\"),ma(this,\"pose_segmentation_mask\"),this.g.Z(\"pose_segmentation_mask\",((t,e)=>{this.h.poseSegmentationMasks=[mc(this,t,!0,!this.D)],pa(this,e)})),this.g.attachEmptyPacketListener(\"pose_segmentation_mask\",(t=>{this.h.poseSegmentationMasks=[],pa(this,t)}))),this.g.attachProtoListener(\"face_landmarks\",((t,e)=>{jc(t,this.h.faceLandmarks),pa(this,e)})),this.g.attachEmptyPacketListener(\"face_landmarks\",(t=>{pa(this,t)})),this.outputFaceBlendshapes&&(ps(t,\"extra_blendshapes\"),as(r,\"FACE_BLENDSHAPES:extra_blendshapes\"),this.g.attachProtoListener(\"extra_blendshapes\",((t,e)=>{var n=this.h.faceBlendshapes;this.outputFaceBlendshapes&&(t=ws(t),n.push(Wo(t.g()??[]))),pa(this,e)})),this.g.attachEmptyPacketListener(\"extra_blendshapes\",(t=>{pa(this,t)}))),this.g.attachProtoListener(\"left_hand_landmarks\",((t,e)=>{jc(t,this.h.leftHandLandmarks),pa(this,e)})),this.g.attachEmptyPacketListener(\"left_hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoListener(\"left_hand_world_landmarks\",((t,e)=>{var n=this.h.leftHandWorldLandmarks;t=xs(t),n.push(qo(t)),pa(this,e)})),this.g.attachEmptyPacketListener(\"left_hand_world_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoListener(\"right_hand_landmarks\",((t,e)=>{jc(t,this.h.rightHandLandmarks),pa(this,e)})),this.g.attachEmptyPacketListener(\"right_hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoListener(\"right_hand_world_landmarks\",((t,e)=>{var n=this.h.rightHandWorldLandmarks;t=xs(t),n.push(qo(t)),pa(this,e)})),this.g.attachEmptyPacketListener(\"right_hand_world_landmarks\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Vc.prototype.detectForVideo=Vc.prototype.G,Vc.prototype.detect=Vc.prototype.F,Vc.prototype.setOptions=Vc.prototype.o,Vc.createFromModelPath=function(t,e){return fc(Vc,t,{baseOptions:{modelAssetPath:e}})},Vc.createFromModelBuffer=function(t,e){return fc(Vc,t,{baseOptions:{modelAssetBuffer:e}})},Vc.createFromOptions=function(t,e){return fc(Vc,t,e)},Vc.HAND_CONNECTIONS=Fc,Vc.POSE_CONNECTIONS=Dc,Vc.FACE_LANDMARKS_LIPS=vc,Vc.FACE_LANDMARKS_LEFT_EYE=Ec,Vc.FACE_LANDMARKS_LEFT_EYEBROW=wc,Vc.FACE_LANDMARKS_LEFT_IRIS=Tc,Vc.FACE_LANDMARKS_RIGHT_EYE=Ac,Vc.FACE_LANDMARKS_RIGHT_EYEBROW=bc,Vc.FACE_LANDMARKS_RIGHT_IRIS=kc,Vc.FACE_LANDMARKS_FACE_OVAL=Sc,Vc.FACE_LANDMARKS_CONTOURS=xc,Vc.FACE_LANDMARKS_TESSELATION=Lc;var Xc=class extends yc{constructor(t,e){super(new lc(t,e),\"input_image\",\"norm_rect\",!0),this.j={classifications:[]},kn(t=this.h=new bo,0,1,e=new Ks)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return kn(this.h,0,2,Xo(t,wn(this.h,Gs,2))),this.l(t)}sa(t,e){return this.j={classifications:[]},pc(this,t,e),this.j}ta(t,e,n){return this.j={classifications:[]},gc(this,t,n,e),this.j}m(){var t=new gs;ds(t,\"input_image\"),ds(t,\"norm_rect\"),ps(t,\"classifications\");const e=new rs;Mr(e,ko,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.image_classifier.ImageClassifierGraph\"),os(n,\"IMAGE:input_image\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"CLASSIFICATIONS:classifications\"),n.o(e),fs(t,n),this.g.attachProtoListener(\"classifications\",((t,e)=>{this.j=zo(Cs(t)),pa(this,e)})),this.g.attachEmptyPacketListener(\"classifications\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Xc.prototype.classifyForVideo=Xc.prototype.ta,Xc.prototype.classify=Xc.prototype.sa,Xc.prototype.setOptions=Xc.prototype.o,Xc.createFromModelPath=function(t,e){return fc(Xc,t,{baseOptions:{modelAssetPath:e}})},Xc.createFromModelBuffer=function(t,e){return fc(Xc,t,{baseOptions:{modelAssetBuffer:e}})},Xc.createFromOptions=function(t,e){return fc(Xc,t,e)};var Hc=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!0),this.h=new So,this.embeddings={embeddings:[]},kn(t=this.h,0,1,e=new Ks)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){var e=this.h,n=wn(this.h,Vs,2);return n=n?n.clone():new Vs,void 0!==t.l2Normalize?nn(n,1,te(t.l2Normalize)):\"l2Normalize\"in t&&nn(n,1),void 0!==t.quantize?nn(n,2,te(t.quantize)):\"quantize\"in t&&nn(n,2),kn(e,0,2,n),this.l(t)}za(t,e){return pc(this,t,e),this.embeddings}Aa(t,e,n){return gc(this,t,n,e),this.embeddings}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\"),ps(t,\"embeddings_out\");const e=new rs;Mr(e,xo,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.image_embedder.ImageEmbedderGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"EMBEDDINGS:embeddings_out\"),n.o(e),fs(t,n),this.g.attachProtoListener(\"embeddings_out\",((t,e)=>{t=Bs(t),this.embeddings=function(t){return{embeddings:An(t,Us,1).map((t=>{const e={headIndex:Rn(t,3)??0??-1,headName:ge(tn(t,4))??\"\"??\"\"};var n=t.v;return void 0!==En(n,0|n[et],Os,gn(t,1))?(t=on(t=wn(t,Os,gn(t,1),void 0),1,Qt,sn()),e.floatEmbedding=t.slice()):(n=new Uint8Array(0),e.quantizedEmbedding=wn(t,Ns,gn(t,2),void 0)?.na()?.h()??n),e})),timestampMs:Ho(In(t))}}(t),pa(this,e)})),this.g.attachEmptyPacketListener(\"embeddings_out\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Hc.cosineSimilarity=function(t,e){if(t.floatEmbedding&&e.floatEmbedding)t=Jo(t.floatEmbedding,e.floatEmbedding);else{if(!t.quantizedEmbedding||!e.quantizedEmbedding)throw Error(\"Cannot compute cosine similarity between quantized and float embeddings.\");t=Jo($o(t.quantizedEmbedding),$o(e.quantizedEmbedding))}return t},Hc.prototype.embedForVideo=Hc.prototype.Aa,Hc.prototype.embed=Hc.prototype.za,Hc.prototype.setOptions=Hc.prototype.o,Hc.createFromModelPath=function(t,e){return fc(Hc,t,{baseOptions:{modelAssetPath:e}})},Hc.createFromModelBuffer=function(t,e){return fc(Hc,t,{baseOptions:{modelAssetBuffer:e}})},Hc.createFromOptions=function(t,e){return fc(Hc,t,e)};var Wc=class{constructor(t,e,n){this.confidenceMasks=t,this.categoryMask=e,this.qualityScores=n}close(){this.confidenceMasks?.forEach((t=>{t.close()})),this.categoryMask?.close()}};function zc(t){const e=function(t){return An(t,cs,1)}(t.ca()).filter((t=>(ge(tn(t,1))??\"\").includes(\"mediapipe.tasks.TensorsToSegmentationCalculator\")));if(t.u=[],e.length>1)throw Error(\"The graph has more than one mediapipe.tasks.TensorsToSegmentationCalculator.\");1===e.length&&(wn(e[0],rs,7)?.j()?.g()??new Map).forEach(((e,n)=>{t.u[Number(n)]=ge(tn(e,1))??\"\"}))}function Kc(t){t.categoryMask=void 0,t.confidenceMasks=void 0,t.qualityScores=void 0}function Yc(t){try{const e=new Wc(t.confidenceMasks,t.categoryMask,t.qualityScores);if(!t.j)return e;t.j(e)}finally{ya(t)}}Wc.prototype.close=Wc.prototype.close;var qc=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!1),this.u=[],this.outputCategoryMask=!1,this.outputConfidenceMasks=!0,this.h=new Mo,this.A=new Lo,kn(this.h,0,3,this.A),kn(t=this.h,0,1,e=new Ks)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return void 0!==t.displayNamesLocale?nn(this.h,2,pe(t.displayNamesLocale)):\"displayNamesLocale\"in t&&nn(this.h,2),\"outputCategoryMask\"in t&&(this.outputCategoryMask=t.outputCategoryMask??!1),\"outputConfidenceMasks\"in t&&(this.outputConfidenceMasks=t.outputConfidenceMasks??!0),super.l(t)}L(){zc(this)}segment(t,e,n){const r=\"function\"!=typeof e?e:{};return this.j=\"function\"==typeof e?e:n,Kc(this),pc(this,t,r),Yc(this)}La(t,e,n,r){const i=\"function\"!=typeof n?n:{};return this.j=\"function\"==typeof n?n:r,Kc(this),gc(this,t,i,e),Yc(this)}Da(){return this.u}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\");const e=new rs;Mr(e,Po,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.image_segmenter.ImageSegmenterGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),n.o(e),fs(t,n),ga(this,t),this.outputConfidenceMasks&&(ps(t,\"confidence_masks\"),as(n,\"CONFIDENCE_MASKS:confidence_masks\"),ma(this,\"confidence_masks\"),this.g.aa(\"confidence_masks\",((t,e)=>{this.confidenceMasks=t.map((t=>mc(this,t,!0,!this.j))),pa(this,e)})),this.g.attachEmptyPacketListener(\"confidence_masks\",(t=>{this.confidenceMasks=[],pa(this,t)}))),this.outputCategoryMask&&(ps(t,\"category_mask\"),as(n,\"CATEGORY_MASK:category_mask\"),ma(this,\"category_mask\"),this.g.Z(\"category_mask\",((t,e)=>{this.categoryMask=mc(this,t,!1,!this.j),pa(this,e)})),this.g.attachEmptyPacketListener(\"category_mask\",(t=>{this.categoryMask=void 0,pa(this,t)}))),ps(t,\"quality_scores\"),as(n,\"QUALITY_SCORES:quality_scores\"),this.g.attachFloatVectorListener(\"quality_scores\",((t,e)=>{this.qualityScores=t,pa(this,e)})),this.g.attachEmptyPacketListener(\"quality_scores\",(t=>{this.categoryMask=void 0,pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};qc.prototype.getLabels=qc.prototype.Da,qc.prototype.segmentForVideo=qc.prototype.La,qc.prototype.segment=qc.prototype.segment,qc.prototype.setOptions=qc.prototype.o,qc.createFromModelPath=function(t,e){return fc(qc,t,{baseOptions:{modelAssetPath:e}})},qc.createFromModelBuffer=function(t,e){return fc(qc,t,{baseOptions:{modelAssetBuffer:e}})},qc.createFromOptions=function(t,e){return fc(qc,t,e)};var $c=class{constructor(t,e,n){this.confidenceMasks=t,this.categoryMask=e,this.qualityScores=n}close(){this.confidenceMasks?.forEach((t=>{t.close()})),this.categoryMask?.close()}};$c.prototype.close=$c.prototype.close;var Jc=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect_in\",!1),this.outputCategoryMask=!1,this.outputConfidenceMasks=!0,this.h=new Mo,this.u=new Lo,kn(this.h,0,3,this.u),kn(t=this.h,0,1,e=new Ks)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return\"outputCategoryMask\"in t&&(this.outputCategoryMask=t.outputCategoryMask??!1),\"outputConfidenceMasks\"in t&&(this.outputConfidenceMasks=t.outputConfidenceMasks??!0),super.l(t)}segment(t,e,n,r){const i=\"function\"!=typeof n?n:{};if(this.j=\"function\"==typeof n?n:r,this.qualityScores=this.categoryMask=this.confidenceMasks=void 0,n=this.C+1,r=new Uo,e.keypoint&&e.scribble)throw Error(\"Cannot provide both keypoint and scribble.\");if(e.keypoint){var s=new Co;dn(s,3,te(!0),!1),dn(s,1,Zt(e.keypoint.x),0),dn(s,2,Zt(e.keypoint.y),0),Sn(r,1,Do,s)}else{if(!e.scribble)throw Error(\"Must provide either a keypoint or a scribble.\");{const t=new No;for(s of e.scribble)dn(e=new Co,3,te(!0),!1),dn(e,1,Zt(s.x),0),dn(e,2,Zt(s.y),0),Ln(t,1,Co,e);Sn(r,2,Do,t)}}this.g.addProtoToStream(r.g(),\"mediapipe.tasks.vision.interactive_segmenter.proto.RegionOfInterest\",\"roi_in\",n),pc(this,t,i);t:{try{const t=new $c(this.confidenceMasks,this.categoryMask,this.qualityScores);if(!this.j){var o=t;break t}this.j(t)}finally{ya(this)}o=void 0}return o}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"roi_in\"),ds(t,\"norm_rect_in\");const e=new rs;Mr(e,Po,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.interactive_segmenter.InteractiveSegmenterGraphV2\"),os(n,\"IMAGE:image_in\"),os(n,\"ROI:roi_in\"),os(n,\"NORM_RECT:norm_rect_in\"),n.o(e),fs(t,n),ga(this,t),this.outputConfidenceMasks&&(ps(t,\"confidence_masks\"),as(n,\"CONFIDENCE_MASKS:confidence_masks\"),ma(this,\"confidence_masks\"),this.g.aa(\"confidence_masks\",((t,e)=>{this.confidenceMasks=t.map((t=>mc(this,t,!0,!this.j))),pa(this,e)})),this.g.attachEmptyPacketListener(\"confidence_masks\",(t=>{this.confidenceMasks=[],pa(this,t)}))),this.outputCategoryMask&&(ps(t,\"category_mask\"),as(n,\"CATEGORY_MASK:category_mask\"),ma(this,\"category_mask\"),this.g.Z(\"category_mask\",((t,e)=>{this.categoryMask=mc(this,t,!1,!this.j),pa(this,e)})),this.g.attachEmptyPacketListener(\"category_mask\",(t=>{this.categoryMask=void 0,pa(this,t)}))),ps(t,\"quality_scores\"),as(n,\"QUALITY_SCORES:quality_scores\"),this.g.attachFloatVectorListener(\"quality_scores\",((t,e)=>{this.qualityScores=t,pa(this,e)})),this.g.attachEmptyPacketListener(\"quality_scores\",(t=>{this.categoryMask=void 0,pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Jc.prototype.segment=Jc.prototype.segment,Jc.prototype.setOptions=Jc.prototype.o,Jc.createFromModelPath=function(t,e){return fc(Jc,t,{baseOptions:{modelAssetPath:e}})},Jc.createFromModelBuffer=function(t,e){return fc(Jc,t,{baseOptions:{modelAssetBuffer:e}})},Jc.createFromOptions=function(t,e){return fc(Jc,t,e)};var Zc=class extends yc{constructor(t,e){super(new lc(t,e),\"input_frame_gpu\",\"norm_rect\",!1),this.j={detections:[]},kn(t=this.h=new Bo,0,1,e=new Ks)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return void 0!==t.displayNamesLocale?nn(this.h,2,pe(t.displayNamesLocale)):\"displayNamesLocale\"in t&&nn(this.h,2),void 0!==t.maxResults?Mn(this.h,3,t.maxResults):\"maxResults\"in t&&nn(this.h,3),void 0!==t.scoreThreshold?Pn(this.h,4,t.scoreThreshold):\"scoreThreshold\"in t&&nn(this.h,4),void 0!==t.categoryAllowlist?On(this.h,5,t.categoryAllowlist):\"categoryAllowlist\"in t&&nn(this.h,5),void 0!==t.categoryDenylist?On(this.h,6,t.categoryDenylist):\"categoryDenylist\"in t&&nn(this.h,6),this.l(t)}F(t,e){return this.j={detections:[]},pc(this,t,e),this.j}G(t,e,n){return this.j={detections:[]},gc(this,t,n,e),this.j}m(){var t=new gs;ds(t,\"input_frame_gpu\"),ds(t,\"norm_rect\"),ps(t,\"detections\");const e=new rs;Mr(e,Go,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.ObjectDetectorGraph\"),os(n,\"IMAGE:input_frame_gpu\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"DETECTIONS:detections\"),n.o(e),fs(t,n),this.g.attachProtoVectorListener(\"detections\",((t,e)=>{for(const e of t)t=ks(e),this.j.detections.push(Ko(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"detections\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Zc.prototype.detectForVideo=Zc.prototype.G,Zc.prototype.detect=Zc.prototype.F,Zc.prototype.setOptions=Zc.prototype.o,Zc.createFromModelPath=async function(t,e){return fc(Zc,t,{baseOptions:{modelAssetPath:e}})},Zc.createFromModelBuffer=function(t,e){return fc(Zc,t,{baseOptions:{modelAssetBuffer:e}})},Zc.createFromOptions=function(t,e){return fc(Zc,t,e)};var Qc=class{constructor(t,e,n){this.landmarks=t,this.worldLandmarks=e,this.segmentationMasks=n}close(){this.segmentationMasks?.forEach((t=>{t.close()}))}};function th(t){t.landmarks=[],t.worldLandmarks=[],t.segmentationMasks=void 0}function eh(t){try{const e=new Qc(t.landmarks,t.worldLandmarks,t.segmentationMasks);if(!t.u)return e;t.u(e)}finally{ya(t)}}Qc.prototype.close=Qc.prototype.close;var nh=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!1),this.landmarks=[],this.worldLandmarks=[],this.outputSegmentationMasks=!1,kn(t=this.h=new jo,0,1,e=new Ks),this.A=new Eo,kn(this.h,0,3,this.A),this.j=new vo,kn(this.h,0,2,this.j),Mn(this.j,4,1),Pn(this.j,2,.5),Pn(this.A,2,.5),Pn(this.h,4,.5)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return\"numPoses\"in t&&Mn(this.j,4,t.numPoses??1),\"minPoseDetectionConfidence\"in t&&Pn(this.j,2,t.minPoseDetectionConfidence??.5),\"minTrackingConfidence\"in t&&Pn(this.h,4,t.minTrackingConfidence??.5),\"minPosePresenceConfidence\"in t&&Pn(this.A,2,t.minPosePresenceConfidence??.5),\"outputSegmentationMasks\"in t&&(this.outputSegmentationMasks=t.outputSegmentationMasks??!1),this.l(t)}F(t,e,n){const r=\"function\"!=typeof e?e:{};return this.u=\"function\"==typeof e?e:n,th(this),pc(this,t,r),eh(this)}G(t,e,n,r){const i=\"function\"!=typeof n?n:{};return this.u=\"function\"==typeof n?n:r,th(this),gc(this,t,i,e),eh(this)}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\"),ps(t,\"normalized_landmarks\"),ps(t,\"world_landmarks\"),ps(t,\"segmentation_masks\");const e=new rs;Mr(e,Vo,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.pose_landmarker.PoseLandmarkerGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"NORM_LANDMARKS:normalized_landmarks\"),as(n,\"WORLD_LANDMARKS:world_landmarks\"),n.o(e),fs(t,n),ga(this,t),this.g.attachProtoVectorListener(\"normalized_landmarks\",((t,e)=>{this.landmarks=[];for(const e of t)t=Rs(e),this.landmarks.push(Yo(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"normalized_landmarks\",(t=>{this.landmarks=[],pa(this,t)})),this.g.attachProtoVectorListener(\"world_landmarks\",((t,e)=>{this.worldLandmarks=[];for(const e of t)t=xs(e),this.worldLandmarks.push(qo(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"world_landmarks\",(t=>{this.worldLandmarks=[],pa(this,t)})),this.outputSegmentationMasks&&(as(n,\"SEGMENTATION_MASK:segmentation_masks\"),ma(this,\"segmentation_masks\"),this.g.aa(\"segmentation_masks\",((t,e)=>{this.segmentationMasks=t.map((t=>mc(this,t,!0,!this.u))),pa(this,e)})),this.g.attachEmptyPacketListener(\"segmentation_masks\",(t=>{this.segmentationMasks=[],pa(this,t)}))),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};nh.prototype.detectForVideo=nh.prototype.G,nh.prototype.detect=nh.prototype.F,nh.prototype.setOptions=nh.prototype.o,nh.createFromModelPath=function(t,e){return fc(nh,t,{baseOptions:{modelAssetPath:e}})},nh.createFromModelBuffer=function(t,e){return fc(nh,t,{baseOptions:{modelAssetBuffer:e}})},nh.createFromOptions=function(t,e){return fc(nh,t,e)},nh.POSE_CONNECTIONS=Dc;export{Ja as DrawingUtils,_c as FaceDetector,Ic as FaceLandmarker,na as FilesetResolver,Oc as GestureRecognizer,Uc as HandLandmarker,Vc as HolisticLandmarker,Xc as ImageClassifier,Hc as ImageEmbedder,qc as ImageSegmenter,Wc as ImageSegmenterResult,Jc as InteractiveSegmenter,$c as InteractiveSegmenterResult,oc as MPImage,Ga as MPMask,Zc as ObjectDetector,nh as PoseLandmarker,_a as TaskRunner,yc as VisionTaskRunner};\n//# sourceMappingURL=vision_bundle_mjs.js.map\n", "import {\r\n FilesetResolver,\r\n FaceLandmarker,\r\n FaceLandmarkerResult,\r\n} from \"@mediapipe/tasks-vision\";\r\n\r\nconst WASM_CDN =\r\n \"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm\";\r\nconst MODEL_URL =\r\n \"https://storage.googleapis.com/mediapipe-models/face_landmarker/face_landmarker/float16/latest/face_landmarker.task\";\r\n\r\nexport interface FaceDetectionResult {\r\n faceDetected: boolean;\r\n blendshapes: Map<string, number>;\r\n transformMatrix: number[] | null;\r\n}\r\n\r\nexport class FaceDetectorEngine {\r\n private landmarker: FaceLandmarker | null = null;\r\n\r\n async init(): Promise<void> {\r\n const vision = await FilesetResolver.forVisionTasks(WASM_CDN);\r\n\r\n // Fetch model ourselves to avoid MediaPipe internal path resolution issues\r\n const modelResponse = await fetch(MODEL_URL);\r\n if (!modelResponse.ok) {\r\n throw new Error(`Failed to download face model (${modelResponse.status})`);\r\n }\r\n const modelBuffer = await modelResponse.arrayBuffer();\r\n\r\n this.landmarker = await FaceLandmarker.createFromOptions(vision, {\r\n baseOptions: {\r\n modelAssetBuffer: new Uint8Array(modelBuffer),\r\n },\r\n runningMode: \"VIDEO\",\r\n outputFaceBlendshapes: true,\r\n outputFacialTransformationMatrixes: true,\r\n numFaces: 1,\r\n });\r\n }\r\n\r\n detect(video: HTMLVideoElement, timestamp: number): FaceDetectionResult {\r\n if (!this.landmarker) {\r\n return { faceDetected: false, blendshapes: new Map(), transformMatrix: null };\r\n }\r\n\r\n const result: FaceLandmarkerResult = this.landmarker.detectForVideo(\r\n video,\r\n timestamp\r\n );\r\n\r\n if (!result.faceBlendshapes || result.faceBlendshapes.length === 0) {\r\n return { faceDetected: false, blendshapes: new Map(), transformMatrix: null };\r\n }\r\n\r\n const blendshapes = new Map<string, number>();\r\n for (const bs of result.faceBlendshapes[0].categories) {\r\n blendshapes.set(bs.categoryName, bs.score);\r\n }\r\n\r\n const transformMatrix =\r\n result.facialTransformationMatrixes &&\r\n result.facialTransformationMatrixes.length > 0\r\n ? Array.from(result.facialTransformationMatrixes[0].data) as number[]\r\n : null;\r\n\r\n return { faceDetected: true, blendshapes, transformMatrix };\r\n }\r\n\r\n destroy(): void {\r\n if (this.landmarker) {\r\n this.landmarker.close();\r\n this.landmarker = null;\r\n }\r\n }\r\n}\r\n", "import { FaceDetectionResult } from \"./FaceDetector\";\r\n\r\nexport interface ActionState {\r\n action: string;\r\n detected: boolean;\r\n active: boolean;\r\n confidence: number;\r\n}\r\n\r\n/**\r\n * Per-action detection tuning.\r\n * - threshold : minimum confidence score required to start counting.\r\n * - holdFrames: consecutive frames above threshold before action is confirmed.\r\n *\r\n * BLINK is a fast reflex (~100-200ms) so we use a low threshold and only 2\r\n * frames. Head-turn and mouth-open are sustained movements so they need a\r\n * slightly longer hold to avoid false positives.\r\n */\r\nconst ACTION_CONFIGS: Record<string, { threshold: number; holdFrames: number }> = {\r\n BLINK: { threshold: 0.30, holdFrames: 2 },\r\n TURN_LEFT: { threshold: 0.45, holdFrames: 6 },\r\n TURN_RIGHT: { threshold: 0.45, holdFrames: 6 },\r\n TURN_HEAD: { threshold: 0.45, holdFrames: 6 },\r\n OPEN_MOUTH: { threshold: 0.40, holdFrames: 3 },\r\n};\r\nconst DEFAULT_CONFIG = { threshold: 0.55, holdFrames: 8 };\r\n\r\n/**\r\n * Sequential action detector aligned with backend's 5 UPPERCASE actions:\r\n * BLINK, TURN_LEFT, TURN_RIGHT, TURN_HEAD, OPEN_MOUTH\r\n */\r\nexport class ActionDetector {\r\n private completedActions = new Set<string>();\r\n private holdCounters = new Map<string, number>();\r\n\r\n constructor(private requiredActions: string[]) {}\r\n\r\n check(result: FaceDetectionResult): ActionState[] {\r\n const currentAction = this.getCurrentAction();\r\n\r\n if (!result.faceDetected) {\r\n return this.buildStates(currentAction, 0);\r\n }\r\n\r\n const bs = result.blendshapes;\r\n\r\n // Only check the current active action (sequential flow)\r\n if (currentAction && !this.completedActions.has(currentAction)) {\r\n const conf = this.getConfidence(currentAction, bs, result.transformMatrix);\r\n const cfg = ACTION_CONFIGS[currentAction] ?? DEFAULT_CONFIG;\r\n\r\n if (conf >= cfg.threshold) {\r\n const count = (this.holdCounters.get(currentAction) || 0) + 1;\r\n this.holdCounters.set(currentAction, count);\r\n\r\n if (count >= cfg.holdFrames) {\r\n this.completedActions.add(currentAction);\r\n this.holdCounters.delete(currentAction);\r\n }\r\n } else {\r\n this.holdCounters.set(currentAction, 0);\r\n }\r\n\r\n return this.buildStates(currentAction, conf);\r\n }\r\n\r\n return this.buildStates(currentAction, 0);\r\n }\r\n\r\n getCurrentAction(): string | null {\r\n for (const action of this.requiredActions) {\r\n if (!this.completedActions.has(action)) return action;\r\n }\r\n return null;\r\n }\r\n\r\n private buildStates(\r\n currentAction: string | null,\r\n currentConf: number\r\n ): ActionState[] {\r\n return this.requiredActions.map((action) => ({\r\n action,\r\n detected: this.completedActions.has(action),\r\n active: action === currentAction,\r\n confidence: action === currentAction ? currentConf : 0,\r\n }));\r\n }\r\n\r\n private getConfidence(\r\n action: string,\r\n bs: Map<string, number>,\r\n matrix: number[] | null\r\n ): number {\r\n switch (action) {\r\n case \"BLINK\": {\r\n const left = bs.get(\"eyeBlinkLeft\") || 0;\r\n const right = bs.get(\"eyeBlinkRight\") || 0;\r\n return (left + right) / 2;\r\n }\r\n\r\n case \"TURN_LEFT\": {\r\n const yaw = this.getHeadYaw(matrix);\r\n return yaw < -12 ? Math.min(1, Math.abs(yaw) / 30) : 0;\r\n }\r\n\r\n case \"TURN_RIGHT\": {\r\n const yaw = this.getHeadYaw(matrix);\r\n return yaw > 12 ? Math.min(1, yaw / 30) : 0;\r\n }\r\n\r\n case \"TURN_HEAD\": {\r\n // Any significant yaw (left OR right) counts\r\n const yaw = Math.abs(this.getHeadYaw(matrix));\r\n return yaw > 15 ? Math.min(1, yaw / 30) : 0;\r\n }\r\n\r\n case \"OPEN_MOUTH\":\r\n return bs.get(\"jawOpen\") || 0;\r\n\r\n default:\r\n return 0;\r\n }\r\n }\r\n\r\n private getHeadYaw(matrix: number[] | null): number {\r\n if (!matrix || matrix.length < 16) return 0;\r\n return Math.atan2(matrix[8], matrix[0]) * (180 / Math.PI);\r\n }\r\n\r\n allCompleted(): boolean {\r\n return this.requiredActions.every((a) => this.completedActions.has(a));\r\n }\r\n\r\n completedCount(): number {\r\n return this.completedActions.size;\r\n }\r\n\r\n reset(): void {\r\n this.completedActions.clear();\r\n this.holdCounters.clear();\r\n }\r\n}\r\n", "import { ActionState } from \"../../camera/ActionDetector\";\r\n\r\n/**\r\n * Icons for the 5 backend-supported challenge actions (UPPERCASE).\r\n */\r\nconst ICONS: Record<string, string> = {\r\n BLINK: \"\\uD83D\\uDE09\",\r\n TURN_LEFT: \"\\u2B05\",\r\n TURN_RIGHT: \"\\u27A1\",\r\n TURN_HEAD: \"\\uD83D\\uDE42\",\r\n OPEN_MOUTH: \"\\uD83D\\uDE2E\",\r\n};\r\n\r\n/**\r\n * Large animated SVG/HTML cues shown in the centre of the camera frame\r\n * so the user knows exactly what to do \u2014 like a real liveness test.\r\n */\r\nconst ACTION_CUES: Record<string, string> = {\r\n BLINK: `\r\n <div style=\"display:flex;flex-direction:column;align-items:center;gap:10px;\">\r\n <div style=\"font-size:64px;line-height:1;animation:sc-blink 1.2s ease-in-out infinite;\">\uD83D\uDC41\uFE0F</div>\r\n <div style=\"font-size:13px;font-weight:600;color:#fff;opacity:0.9;letter-spacing:0.5px;\">BLINK YOUR EYES</div>\r\n </div>`,\r\n TURN_LEFT: `\r\n <div style=\"display:flex;flex-direction:column;align-items:center;gap:10px;\">\r\n <div style=\"font-size:56px;line-height:1;animation:sc-slide-left 1s ease-in-out infinite;\">\u2B05\uFE0F</div>\r\n <div style=\"font-size:13px;font-weight:600;color:#fff;opacity:0.9;letter-spacing:0.5px;\">TURN HEAD RIGHT</div>\r\n </div>`,\r\n TURN_RIGHT: `\r\n <div style=\"display:flex;flex-direction:column;align-items:center;gap:10px;\">\r\n <div style=\"font-size:56px;line-height:1;animation:sc-slide-right 1s ease-in-out infinite;\">\u27A1\uFE0F</div>\r\n <div style=\"font-size:13px;font-weight:600;color:#fff;opacity:0.9;letter-spacing:0.5px;\">TURN HEAD LEFT</div>\r\n </div>`,\r\n TURN_HEAD: `\r\n <div style=\"display:flex;flex-direction:column;align-items:center;gap:10px;\">\r\n <div style=\"font-size:56px;line-height:1;animation:sc-turn-head 1.4s ease-in-out infinite;\">\u2194\uFE0F</div>\r\n <div style=\"font-size:13px;font-weight:600;color:#fff;opacity:0.9;letter-spacing:0.5px;\">TURN HEAD SIDE TO SIDE</div>\r\n </div>`,\r\n OPEN_MOUTH: `\r\n <div style=\"display:flex;flex-direction:column;align-items:center;gap:10px;\">\r\n <div style=\"font-size:64px;line-height:1;animation:sc-mouth 1.2s ease-in-out infinite;\">\uD83D\uDE2E</div>\r\n <div style=\"font-size:13px;font-weight:600;color:#fff;opacity:0.9;letter-spacing:0.5px;\">OPEN YOUR MOUTH</div>\r\n </div>`,\r\n};\r\n\r\n/** Keyframe CSS injected once */\r\nfunction injectLivenessKeyframes(): void {\r\n if (document.getElementById(\"sc-liveness-kf\")) return;\r\n const s = document.createElement(\"style\");\r\n s.id = \"sc-liveness-kf\";\r\n s.textContent = `\r\n @keyframes sc-blink {\r\n 0%,100% { transform:scaleY(1); }\r\n 40% { transform:scaleY(0.1); }\r\n 50% { transform:scaleY(1); }\r\n }\r\n @keyframes sc-slide-left {\r\n 0%,100% { transform:translateX(0); opacity:1; }\r\n 50% { transform:translateX(-14px); opacity:0.6; }\r\n }\r\n @keyframes sc-slide-right {\r\n 0%,100% { transform:translateX(0); opacity:1; }\r\n 50% { transform:translateX(14px); opacity:0.6; }\r\n }\r\n @keyframes sc-turn-head {\r\n 0%,100% { transform:translateX(0); }\r\n 25% { transform:translateX(-12px); }\r\n 75% { transform:translateX(12px); }\r\n }\r\n @keyframes sc-mouth {\r\n 0%,100% { transform:scaleY(1); }\r\n 40% { transform:scaleY(1.25); }\r\n 60% { transform:scaleY(1); }\r\n }\r\n @keyframes sc-pop-in {\r\n 0% { transform:scale(0.7); opacity:0; }\r\n 60% { transform:scale(1.05); }\r\n 100% { transform:scale(1); opacity:1; }\r\n }\r\n @keyframes sc-cue-fade {\r\n 0% { opacity:0; transform:translateY(8px); }\r\n 20% { opacity:1; transform:translateY(0); }\r\n 80% { opacity:1; transform:translateY(0); }\r\n 100% { opacity:0; transform:translateY(-8px); }\r\n }\r\n `;\r\n document.head.appendChild(s);\r\n}\r\n\r\n/**\r\n * Challenge shape used by LivenessUI.mount().\r\n */\r\nexport interface UIChallenge {\r\n actions: string[];\r\n time_limit_seconds: number;\r\n instruction: string;\r\n}\r\n\r\nexport class LivenessUI {\r\n private root: HTMLDivElement | null = null;\r\n private videoEl: HTMLVideoElement | null = null;\r\n private instructionEl: HTMLDivElement | null = null;\r\n private stepsEl: HTMLDivElement | null = null;\r\n private progressBarEl: HTMLDivElement | null = null;\r\n private confidenceRingEl: SVGCircleElement | null = null;\r\n private timerEl: HTMLDivElement | null = null;\r\n private overlayEl: HTMLDivElement | null = null;\r\n private actionCueEl: HTMLDivElement | null = null;\r\n private timerInterval: ReturnType<typeof setInterval> | null = null;\r\n private totalActions = 0;\r\n private currentCueAction: string | null = null;\r\n private docCaptureRoot: HTMLDivElement | null = null;\r\n\r\n mount(\r\n container: HTMLElement,\r\n challenge: UIChallenge\r\n ): HTMLVideoElement {\r\n injectLivenessKeyframes();\r\n this.totalActions = challenge.actions.length;\r\n\r\n this.root = document.createElement(\"div\");\r\n this.root.style.cssText = `\r\n position:relative;width:100%;max-width:420px;margin:0 auto;\r\n background:#0a0a0a;border-radius:16px;overflow:hidden;\r\n font-family:system-ui,-apple-system,sans-serif;\r\n box-shadow:0 8px 32px rgba(0,0,0,0.4);\r\n `;\r\n\r\n // Video\r\n this.videoEl = document.createElement(\"video\");\r\n this.videoEl.autoplay = true;\r\n this.videoEl.playsInline = true;\r\n this.videoEl.muted = true;\r\n this.videoEl.style.cssText =\r\n \"width:100%;display:block;transform:scaleX(-1);aspect-ratio:3/4;object-fit:cover;\";\r\n\r\n // Face guide \u2014 oval with confidence ring\r\n const guideWrap = document.createElement(\"div\");\r\n guideWrap.style.cssText = `\r\n position:absolute;top:8%;left:50%;transform:translateX(-50%);\r\n width:180px;height:240px;pointer-events:none;\r\n `;\r\n\r\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\r\n svg.setAttribute(\"viewBox\", \"0 0 180 240\");\r\n svg.style.cssText = \"width:100%;height:100%;\";\r\n\r\n // Background oval (guide)\r\n const bgOval = document.createElementNS(\r\n \"http://www.w3.org/2000/svg\",\r\n \"ellipse\"\r\n );\r\n bgOval.setAttribute(\"cx\", \"90\");\r\n bgOval.setAttribute(\"cy\", \"120\");\r\n bgOval.setAttribute(\"rx\", \"85\");\r\n bgOval.setAttribute(\"ry\", \"115\");\r\n bgOval.setAttribute(\"fill\", \"none\");\r\n bgOval.setAttribute(\"stroke\", \"rgba(255,255,255,0.25)\");\r\n bgOval.setAttribute(\"stroke-width\", \"2.5\");\r\n bgOval.setAttribute(\"stroke-dasharray\", \"8 4\");\r\n\r\n // Confidence progress ring\r\n const confOval = document.createElementNS(\r\n \"http://www.w3.org/2000/svg\",\r\n \"ellipse\"\r\n );\r\n confOval.setAttribute(\"cx\", \"90\");\r\n confOval.setAttribute(\"cy\", \"120\");\r\n confOval.setAttribute(\"rx\", \"85\");\r\n confOval.setAttribute(\"ry\", \"115\");\r\n confOval.setAttribute(\"fill\", \"none\");\r\n confOval.setAttribute(\"stroke\", \"#22c55e\");\r\n confOval.setAttribute(\"stroke-width\", \"3.5\");\r\n const circumference =\r\n 2 * Math.PI * Math.sqrt((85 * 85 + 115 * 115) / 2);\r\n confOval.setAttribute(\r\n \"stroke-dasharray\",\r\n `${circumference}`\r\n );\r\n confOval.setAttribute(\"stroke-dashoffset\", `${circumference}`);\r\n confOval.style.cssText =\r\n \"transition:stroke-dashoffset 0.15s ease;transform:rotate(-90deg);transform-origin:90px 120px;\";\r\n this.confidenceRingEl = confOval as unknown as SVGCircleElement;\r\n\r\n svg.appendChild(bgOval);\r\n svg.appendChild(confOval);\r\n guideWrap.appendChild(svg);\r\n\r\n // Top bar \u2014 instruction\r\n const topBar = document.createElement(\"div\");\r\n topBar.style.cssText = `\r\n position:absolute;top:0;left:0;right:0;\r\n background:linear-gradient(180deg,rgba(0,0,0,0.7) 0%,transparent 100%);\r\n padding:16px 16px 32px;\r\n `;\r\n\r\n this.instructionEl = document.createElement(\"div\");\r\n this.instructionEl.style.cssText = `\r\n color:#fff;font-size:15px;font-weight:600;text-align:center;\r\n line-height:1.4;\r\n `;\r\n this.instructionEl.textContent = challenge.instruction;\r\n topBar.appendChild(this.instructionEl);\r\n\r\n // Bottom panel\r\n const bottomPanel = document.createElement(\"div\");\r\n bottomPanel.style.cssText = `\r\n position:absolute;bottom:0;left:0;right:0;\r\n background:linear-gradient(0deg,rgba(0,0,0,0.85) 0%,rgba(0,0,0,0.6) 60%,transparent 100%);\r\n padding:24px 16px 16px;\r\n `;\r\n\r\n // Progress bar\r\n const progressWrap = document.createElement(\"div\");\r\n progressWrap.style.cssText = `\r\n height:3px;background:rgba(255,255,255,0.15);border-radius:2px;\r\n margin-bottom:14px;overflow:hidden;\r\n `;\r\n this.progressBarEl = document.createElement(\"div\");\r\n this.progressBarEl.style.cssText = `\r\n height:100%;width:0%;background:linear-gradient(90deg,#22c55e,#4ade80);\r\n border-radius:2px;transition:width 0.4s ease;\r\n `;\r\n progressWrap.appendChild(this.progressBarEl);\r\n bottomPanel.appendChild(progressWrap);\r\n\r\n // Steps list\r\n this.stepsEl = document.createElement(\"div\");\r\n this.stepsEl.style.cssText = `\r\n display:flex;flex-direction:column;gap:8px;margin-bottom:12px;\r\n `;\r\n\r\n for (let i = 0; i < challenge.actions.length; i++) {\r\n const action = challenge.actions[i];\r\n const step = document.createElement(\"div\");\r\n step.dataset.action = action;\r\n step.style.cssText = `\r\n display:flex;align-items:center;gap:10px;\r\n padding:8px 12px;border-radius:10px;\r\n background:rgba(255,255,255,0.06);\r\n transition:all 0.3s ease;\r\n opacity:${i === 0 ? \"1\" : \"0.4\"};\r\n `;\r\n\r\n const num = document.createElement(\"div\");\r\n num.className = \"sc-step-num\";\r\n num.style.cssText = `\r\n width:28px;height:28px;border-radius:50%;\r\n display:flex;align-items:center;justify-content:center;\r\n font-size:13px;font-weight:700;color:#fff;\r\n background:rgba(255,255,255,0.12);\r\n border:2px solid rgba(255,255,255,0.2);\r\n transition:all 0.3s ease;flex-shrink:0;\r\n `;\r\n num.textContent = String(i + 1);\r\n\r\n const label = document.createElement(\"div\");\r\n label.style.cssText = \"color:#fff;font-size:13px;flex:1;\";\r\n label.textContent = this.describeAction(action);\r\n\r\n const icon = document.createElement(\"div\");\r\n icon.className = \"sc-step-icon\";\r\n icon.style.cssText = \"font-size:18px;flex-shrink:0;\";\r\n icon.textContent = ICONS[action] || \"\";\r\n\r\n step.appendChild(num);\r\n step.appendChild(label);\r\n step.appendChild(icon);\r\n this.stepsEl.appendChild(step);\r\n }\r\n\r\n bottomPanel.appendChild(this.stepsEl);\r\n\r\n // Timer\r\n this.timerEl = document.createElement(\"div\");\r\n this.timerEl.style.cssText = `\r\n text-align:center;color:rgba(255,255,255,0.5);\r\n font-size:11px;font-variant-numeric:tabular-nums;\r\n `;\r\n bottomPanel.appendChild(this.timerEl);\r\n\r\n // Result overlay (used for success / failure / timeout)\r\n this.overlayEl = document.createElement(\"div\");\r\n this.overlayEl.style.cssText = `\r\n position:absolute;inset:0;display:none;align-items:center;\r\n justify-content:center;z-index:10;\r\n background:rgba(0,0,0,0.85);backdrop-filter:blur(8px);\r\n transition:opacity 0.3s ease;\r\n `;\r\n\r\n // Action cue \u2014 large centred animation shown when an action is active\r\n this.actionCueEl = document.createElement(\"div\");\r\n this.actionCueEl.style.cssText = `\r\n position:absolute;\r\n top:50%;left:50%;transform:translate(-50%,-50%);\r\n z-index:5;pointer-events:none;\r\n display:none;\r\n text-align:center;\r\n background:rgba(0,0,0,0.55);\r\n backdrop-filter:blur(4px);\r\n border-radius:20px;\r\n padding:18px 28px;\r\n min-width:160px;\r\n border:1.5px solid rgba(255,255,255,0.15);\r\n `;\r\n\r\n // Assemble\r\n this.root.appendChild(this.videoEl);\r\n this.root.appendChild(guideWrap);\r\n this.root.appendChild(topBar);\r\n this.root.appendChild(bottomPanel);\r\n this.root.appendChild(this.actionCueEl);\r\n this.root.appendChild(this.overlayEl);\r\n\r\n container.appendChild(this.root);\r\n this.startTimer(challenge.time_limit_seconds);\r\n\r\n return this.videoEl;\r\n }\r\n\r\n updateActions(states: ActionState[]): void {\r\n if (!this.stepsEl || !this.progressBarEl) return;\r\n\r\n let completed = 0;\r\n const activeState = states.find((s) => s.active && !s.detected) ?? null;\r\n const activeAction = activeState?.action ?? null;\r\n\r\n for (const state of states) {\r\n const step = this.stepsEl.querySelector(\r\n `[data-action=\"${state.action}\"]`\r\n ) as HTMLDivElement | null;\r\n if (!step) continue;\r\n\r\n const num = step.querySelector(\".sc-step-num\") as HTMLElement | null;\r\n\r\n if (state.detected) {\r\n completed++;\r\n step.style.opacity = \"1\";\r\n step.style.background = \"rgba(34,197,94,0.15)\";\r\n if (num) {\r\n num.style.background = \"#22c55e\";\r\n num.style.borderColor = \"#22c55e\";\r\n num.textContent = \"\\u2713\";\r\n }\r\n } else if (state.active) {\r\n step.style.opacity = \"1\";\r\n step.style.background = \"rgba(59,130,246,0.15)\";\r\n if (num) {\r\n num.style.borderColor = \"#3b82f6\";\r\n num.style.background = \"rgba(59,130,246,0.3)\";\r\n }\r\n }\r\n }\r\n\r\n // Update progress bar\r\n const pct = this.totalActions > 0 ? (completed / this.totalActions) * 100 : 0;\r\n this.progressBarEl.style.width = `${pct}%`;\r\n\r\n // Update confidence ring for the active action\r\n if (this.confidenceRingEl) {\r\n const circumference =\r\n 2 * Math.PI * Math.sqrt((85 * 85 + 115 * 115) / 2);\r\n const conf = activeState ? activeState.confidence : 0;\r\n const offset = circumference * (1 - conf);\r\n this.confidenceRingEl.setAttribute(\"stroke-dashoffset\", `${offset}`);\r\n this.confidenceRingEl.setAttribute(\r\n \"stroke\",\r\n conf > 0.6 ? \"#22c55e\" : \"#3b82f6\"\r\n );\r\n }\r\n\r\n // Show / switch large animated action cue\r\n this.updateActionCue(activeAction);\r\n }\r\n\r\n private updateActionCue(action: string | null): void {\r\n if (!this.actionCueEl) return;\r\n\r\n // No active action \u2192 hide cue\r\n if (!action) {\r\n this.actionCueEl.style.display = \"none\";\r\n this.currentCueAction = null;\r\n return;\r\n }\r\n\r\n // Same action already showing \u2014 no DOM thrash\r\n if (action === this.currentCueAction) return;\r\n\r\n this.currentCueAction = action;\r\n const cueHtml = ACTION_CUES[action];\r\n if (!cueHtml) {\r\n this.actionCueEl.style.display = \"none\";\r\n return;\r\n }\r\n\r\n // Inject content and animate in\r\n this.actionCueEl.innerHTML = cueHtml;\r\n this.actionCueEl.style.display = \"block\";\r\n this.actionCueEl.style.animation = \"none\";\r\n // Force reflow then trigger animation\r\n void this.actionCueEl.offsetWidth;\r\n this.actionCueEl.style.animation = \"sc-pop-in 0.3s ease forwards\";\r\n }\r\n\r\n updateInstruction(text: string): void {\r\n if (this.instructionEl) {\r\n this.instructionEl.textContent = text;\r\n }\r\n }\r\n\r\n stopTimer(): void {\r\n if (this.timerInterval) {\r\n clearInterval(this.timerInterval);\r\n this.timerInterval = null;\r\n }\r\n if (this.timerEl) {\r\n this.timerEl.textContent = \"\";\r\n }\r\n }\r\n\r\n showResult(status: \"processing\" | \"failed\", verificationId?: number): Promise<void> {\r\n return new Promise((resolve) => {\r\n if (!this.overlayEl) { resolve(); return; }\r\n\r\n if (this.actionCueEl) this.actionCueEl.style.display = \"none\";\r\n this.stopTimer();\r\n\r\n const isProcessing = status === \"processing\";\r\n this.overlayEl.style.display = \"flex\";\r\n\r\n this.overlayEl.innerHTML = `\r\n <div style=\"text-align:center;color:#fff;animation:sc-pop-in 0.35s ease;padding:24px;\">\r\n <div style=\"\r\n width:80px;height:80px;border-radius:50%;margin:0 auto 20px;\r\n display:flex;align-items:center;justify-content:center;\r\n font-size:36px;\r\n background:${isProcessing ? \"rgba(34,197,94,0.2)\" : \"rgba(239,68,68,0.2)\"};\r\n border:3px solid ${isProcessing ? \"#22c55e\" : \"#ef4444\"};\r\n \">${isProcessing ? \"\\u2713\" : \"\\u2717\"}</div>\r\n <div style=\"font-size:19px;font-weight:700;margin-bottom:8px;\">\r\n ${isProcessing ? \"Identity Check Submitted\" : \"Submission Failed\"}\r\n </div>\r\n <div style=\"font-size:13px;opacity:0.65;line-height:1.6;margin-bottom:${verificationId ? \"16px\" : \"0\"};\">\r\n ${isProcessing\r\n ? \"Your identity is being verified.<br>You\\'ll be notified of the outcome shortly.\"\r\n : \"Something went wrong. Please try again.\"}\r\n </div>\r\n ${verificationId ? `\r\n <div style=\"\r\n margin-top:4px;padding:8px 14px;border-radius:8px;\r\n background:rgba(255,255,255,0.08);display:inline-block;\r\n font-size:11px;color:rgba(255,255,255,0.5);letter-spacing:0.3px;\r\n \">Ref: #${verificationId}</div>` : \"\"}\r\n </div>\r\n `;\r\n\r\n setTimeout(resolve, 2800);\r\n });\r\n }\r\n\r\n /**\r\n * Show timeout screen with an optional retry callback.\r\n * Resolves immediately so the orchestrator can move to next step.\r\n */\r\n showTimeout(onRetry: () => void): Promise<void> {\r\n return new Promise((resolve) => {\r\n if (!this.overlayEl) { resolve(); return; }\r\n\r\n if (this.actionCueEl) this.actionCueEl.style.display = \"none\";\r\n this.stopTimer();\r\n\r\n this.overlayEl.style.display = \"flex\";\r\n this.overlayEl.innerHTML = `\r\n <div style=\"text-align:center;color:#fff;animation:sc-pop-in 0.35s ease;padding:24px;\">\r\n <div style=\"\r\n width:80px;height:80px;border-radius:50%;margin:0 auto 16px;\r\n display:flex;align-items:center;justify-content:center;\r\n font-size:36px;\r\n background:rgba(251,191,36,0.15);\r\n border:3px solid #fbbf24;\r\n \">\u23F1</div>\r\n <div style=\"font-size:18px;font-weight:700;margin-bottom:8px;\">Time's Up</div>\r\n <div style=\"font-size:13px;opacity:0.65;margin-bottom:20px;\">\r\n You ran out of time. Please try again.\r\n </div>\r\n <button id=\"sc-retry-btn\" style=\"\r\n padding:12px 28px;border-radius:10px;\r\n background:#3b82f6;color:#fff;\r\n border:none;cursor:pointer;\r\n font-size:14px;font-weight:600;\r\n width:100%;max-width:200px;\r\n \">Try Again</button>\r\n </div>\r\n `;\r\n\r\n // Wire retry button\r\n const retryBtn = this.overlayEl.querySelector(\"#sc-retry-btn\") as HTMLButtonElement | null;\r\n if (retryBtn) {\r\n retryBtn.addEventListener(\"click\", () => {\r\n onRetry();\r\n resolve();\r\n });\r\n } else {\r\n // fallback \u2014 auto-resolve after 5s\r\n setTimeout(resolve, 5000);\r\n }\r\n });\r\n }\r\n\r\n getVideoElement(): HTMLVideoElement | null {\r\n return this.videoEl;\r\n }\r\n\r\n /**\r\n * Mount a document scanning step before the liveness challenge.\r\n * Reuses the already-open camera stream \u2014 no second permission prompt.\r\n * Resolves with the captured document Blob.\r\n */\r\n mountDocumentCapture(container: HTMLElement, stream: MediaStream): Promise<Blob> {\r\n return new Promise((resolve, reject) => {\r\n injectLivenessKeyframes();\r\n\r\n const docRoot = document.createElement(\"div\");\r\n docRoot.style.cssText = `\r\n position:relative;width:100%;max-width:420px;margin:0 auto;\r\n background:#0a0a0a;border-radius:16px;overflow:hidden;\r\n font-family:system-ui,-apple-system,sans-serif;\r\n box-shadow:0 8px 32px rgba(0,0,0,0.4);\r\n `;\r\n this.docCaptureRoot = docRoot;\r\n\r\n const docVideo = document.createElement(\"video\");\r\n docVideo.autoplay = true;\r\n docVideo.playsInline = true;\r\n docVideo.muted = true;\r\n docVideo.style.cssText = \"width:100%;display:block;aspect-ratio:4/3;object-fit:cover;\";\r\n docVideo.srcObject = stream;\r\n\r\n // Rectangle guide with blue corner accents\r\n const guideOverlay = document.createElement(\"div\");\r\n guideOverlay.style.cssText = \"position:absolute;inset:0;pointer-events:none;display:flex;align-items:center;justify-content:center;\";\r\n guideOverlay.innerHTML = `\r\n <div style=\"width:83%;height:53%;border:2px dashed rgba(255,255,255,0.55);border-radius:10px;box-shadow:0 0 0 2000px rgba(0,0,0,0.45);position:relative;\">\r\n <div style=\"position:absolute;top:-2px;left:-2px;width:18px;height:18px;border-top:3px solid #3b82f6;border-left:3px solid #3b82f6;border-radius:4px 0 0 0;\"></div>\r\n <div style=\"position:absolute;top:-2px;right:-2px;width:18px;height:18px;border-top:3px solid #3b82f6;border-right:3px solid #3b82f6;border-radius:0 4px 0 0;\"></div>\r\n <div style=\"position:absolute;bottom:-2px;left:-2px;width:18px;height:18px;border-bottom:3px solid #3b82f6;border-left:3px solid #3b82f6;border-radius:0 0 0 4px;\"></div>\r\n <div style=\"position:absolute;bottom:-2px;right:-2px;width:18px;height:18px;border-bottom:3px solid #3b82f6;border-right:3px solid #3b82f6;border-radius:0 0 4px 0;\"></div>\r\n </div>\r\n `;\r\n\r\n const header = document.createElement(\"div\");\r\n header.style.cssText = \"position:absolute;top:0;left:0;right:0;background:linear-gradient(180deg,rgba(0,0,0,0.88) 0%,transparent 100%);padding:18px 16px 40px;text-align:center;\";\r\n header.innerHTML = `\r\n <div style=\"color:#fff;font-size:16px;font-weight:700;margin-bottom:6px;\">Scan Your ID Document</div>\r\n <div style=\"color:rgba(255,255,255,0.6);font-size:12px;line-height:1.6;\">\r\n Fit your document inside the frame.<br>Make sure all text and corners are visible.\r\n </div>\r\n `;\r\n\r\n const bottomPanel = document.createElement(\"div\");\r\n bottomPanel.style.cssText = \"position:absolute;bottom:0;left:0;right:0;background:linear-gradient(0deg,rgba(0,0,0,0.92) 0%,rgba(0,0,0,0.6) 70%,transparent 100%);padding:16px 16px;\";\r\n bottomPanel.innerHTML = `\r\n <div style=\"font-size:11px;color:rgba(255,255,255,0.4);text-align:center;margin-bottom:12px;\">\r\n \uD83D\uDCA1 Good lighting &nbsp;\u00B7&nbsp; No glare &nbsp;\u00B7&nbsp; All 4 corners visible\r\n </div>\r\n <button id=\"sc-capture-doc-btn\" style=\"width:100%;padding:12px;border-radius:12px;background:#3b82f6;color:#fff;border:none;cursor:pointer;font-size:15px;font-weight:700;margin-bottom:8px;\">\r\n Capture Document\r\n </button>\r\n <label style=\"width:100%;display:flex;align-items:center;justify-content:center;gap:6px;padding:9px;border-radius:12px;border:1.5px solid rgba(255,255,255,0.18);cursor:pointer;color:rgba(255,255,255,0.6);font-size:13px;font-weight:500;\">\r\n <span>\uD83D\uDCC1</span><span>Upload from gallery instead</span>\r\n <input id=\"sc-upload-doc-input\" type=\"file\" accept=\"image/*\" style=\"display:none;\" />\r\n </label>\r\n `;\r\n\r\n docRoot.appendChild(docVideo);\r\n docRoot.appendChild(guideOverlay);\r\n docRoot.appendChild(header);\r\n docRoot.appendChild(bottomPanel);\r\n container.appendChild(docRoot);\r\n\r\n docVideo.play().catch(() => {});\r\n\r\n const cleanup = () => {\r\n if (docRoot.parentElement) docRoot.parentElement.removeChild(docRoot);\r\n this.docCaptureRoot = null;\r\n };\r\n\r\n const captureBtn = bottomPanel.querySelector(\"#sc-capture-doc-btn\") as HTMLButtonElement;\r\n if (captureBtn) {\r\n captureBtn.addEventListener(\"click\", () => {\r\n try {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = docVideo.videoWidth || 1280;\r\n canvas.height = docVideo.videoHeight || 720;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) { reject(new Error(\"Canvas context unavailable\")); return; }\r\n ctx.drawImage(docVideo, 0, 0);\r\n canvas.toBlob((blob) => {\r\n if (blob) { cleanup(); resolve(blob); }\r\n else { reject(new Error(\"Failed to capture document image\")); }\r\n }, \"image/jpeg\", 0.92);\r\n } catch (err) { reject(err); }\r\n });\r\n }\r\n\r\n const uploadInput = bottomPanel.querySelector(\"#sc-upload-doc-input\") as HTMLInputElement;\r\n if (uploadInput) {\r\n uploadInput.addEventListener(\"change\", () => {\r\n const file = uploadInput.files?.[0];\r\n if (file) { cleanup(); resolve(file); }\r\n });\r\n }\r\n });\r\n }\r\n\r\n unmount(): void {\r\n this.stopTimer();\r\n if (this.docCaptureRoot && this.docCaptureRoot.parentElement) {\r\n this.docCaptureRoot.parentElement.removeChild(this.docCaptureRoot);\r\n this.docCaptureRoot = null;\r\n }\r\n if (this.root && this.root.parentElement) {\r\n this.root.parentElement.removeChild(this.root);\r\n }\r\n this.root = null;\r\n this.videoEl = null;\r\n this.instructionEl = null;\r\n this.stepsEl = null;\r\n this.progressBarEl = null;\r\n this.confidenceRingEl = null;\r\n this.timerEl = null;\r\n this.overlayEl = null;\r\n this.actionCueEl = null;\r\n }\r\n\r\n private startTimer(seconds: number): void {\r\n let remaining = seconds;\r\n\r\n const update = () => {\r\n if (!this.timerEl) return;\r\n const m = Math.floor(remaining / 60);\r\n const s = remaining % 60;\r\n const display = m > 0 ? `${m}:${String(s).padStart(2, \"0\")}` : `${s}s`;\r\n this.timerEl.textContent = `${display} remaining`;\r\n\r\n if (remaining <= 5) {\r\n this.timerEl.style.color = \"#ef4444\";\r\n }\r\n };\r\n\r\n update();\r\n this.timerInterval = setInterval(() => {\r\n remaining--;\r\n update();\r\n if (remaining <= 0 && this.timerInterval) {\r\n clearInterval(this.timerInterval);\r\n }\r\n }, 1000);\r\n }\r\n\r\n private describeAction(action: string): string {\r\n const labels: Record<string, string> = {\r\n BLINK: \"Blink your eyes\",\r\n TURN_LEFT: \"Turn your head right\", // camera-left = user's right (mirror)\r\n TURN_RIGHT: \"Turn your head left\", // camera-right = user's left (mirror)\r\n TURN_HEAD: \"Turn your head side to side\",\r\n OPEN_MOUTH: \"Open your mouth wide\",\r\n };\r\n return labels[action] || action.replace(/_/g, \" \").toLowerCase();\r\n }\r\n}\r\n", "import { HttpClient } from \"../../client/HttpClient\";\r\nimport {\r\n ChallengeAction,\r\n LivenessCreateRequest,\r\n LivenessCreateResponse,\r\n LivenessSubmitResponse,\r\n} from \"../../types/liveness\";\r\nimport { collectDeviceMetadata } from \"../../utils/device\";\r\nimport { CameraManager } from \"../../camera/CameraManager\";\r\nimport { VideoRecorder } from \"../../camera/VideoRecorder\";\r\nimport { FaceDetectorEngine } from \"../../camera/FaceDetector\";\r\nimport { ActionDetector } from \"../../camera/ActionDetector\";\r\nimport { LivenessUI } from \"./LivenessUI\";\r\n\r\n/**\r\n * Liveness module \u2014 3-step flow aligned with Adhere backend.\r\n *\r\n * Flow:\r\n * Step 1: liveness.create() \u2192 POST /v1/sdk/liveness/create/ (multipart)\r\n * Step 2: [camera runs, user performs challenge actions]\r\n * Step 3: liveness.submit() \u2192 POST /v1/sdk/liveness/submit/ (multipart)\r\n *\r\n * After submit, the backend returns status: \"processing\".\r\n * Final results are delivered via webhook (liveness.completed event).\r\n */\r\nexport class LivenessModule {\r\n constructor(private http: HttpClient) { }\r\n\r\n /**\r\n * Step 1: Create a liveness challenge entry.\r\n *\r\n * POST /v1/sdk/liveness/create/\r\n * Auth: x-access-token: <sessionToken>\r\n * Content-Type: multipart/form-data\r\n */\r\n async create(params: LivenessCreateRequest): Promise<LivenessCreateResponse> {\r\n const formData = new FormData();\r\n formData.append(\"identifier\", params.identifier);\r\n formData.append(\"identifier_type\", params.identifier_type);\r\n formData.append(\"country\", params.country);\r\n formData.append(\r\n \"challenge_actions\",\r\n JSON.stringify(params.challenge_actions)\r\n );\r\n if (params.autoshot_file) {\r\n formData.append(\"autoshot\", params.autoshot_file, \"autoshot.jpg\");\r\n }\r\n \r\n // Handle document upload - support both legacy and new front/back fields\r\n if (params.document) {\r\n formData.append(\"document\", params.document, \"document.jpg\");\r\n if (params.document_back) {\r\n formData.append(\"document_back\", params.document_back, \"document_back.jpg\");\r\n }\r\n } else if (params.document_front) {\r\n // Legacy support - map to document for backward compatibility\r\n formData.append(\"document\", params.document_front, \"document_front.jpg\");\r\n if (params.document_back) {\r\n formData.append(\"document_back\", params.document_back, \"document_back.jpg\");\r\n }\r\n } else if (params.id_file) {\r\n // Legacy support - map to document for backward compatibility\r\n formData.append(\"document\", params.id_file, \"id_document.jpg\");\r\n }\r\n \r\n if (params.identity_check) {\r\n formData.append(\"identity_check\", String(params.identity_check));\r\n }\r\n if (params.snapshot_file) {\r\n formData.append(\"snapshot\", params.snapshot_file, \"snapshot.jpg\");\r\n }\r\n if (params.device_type) {\r\n formData.append(\"device_type\", params.device_type);\r\n }\r\n if (params.os_name) {\r\n formData.append(\"os_name\", params.os_name);\r\n }\r\n if (params.browser_timezone) {\r\n formData.append(\"browser_timezone\", params.browser_timezone);\r\n }\r\n if (params.fingerprint_id) {\r\n formData.append(\"fingerprint_id\", params.fingerprint_id);\r\n }\r\n\r\n return this.http.uploadWithSession<LivenessCreateResponse>(\r\n \"/v1/sdk/liveness/create/\",\r\n formData\r\n );\r\n }\r\n\r\n /**\r\n * Step 3: Submit liveness video recording.\r\n *\r\n * POST /v1/sdk/liveness/submit/\r\n * Auth: x-access-token: <sessionToken>\r\n * Content-Type: multipart/form-data\r\n *\r\n * Note: After submission, the session is revoked (single-use).\r\n * The backend returns status: \"processing\" \u2014 results come via webhook.\r\n */\r\n async submit(\r\n entryId: number,\r\n videoBlob: Blob,\r\n snapshotBlob: Blob,\r\n autoshotBlob?: Blob,\r\n videoDurationSeconds?: number,\r\n videoSizeBytes?: number\r\n ): Promise<LivenessSubmitResponse> {\r\n const formData = new FormData();\r\n formData.append(\"entry\", String(entryId));\r\n formData.append(\"video\", videoBlob, \"liveness.webm\");\r\n formData.append(\"snapshot\", snapshotBlob, \"snapshot.jpg\");\r\n if (autoshotBlob) {\r\n formData.append(\"autoshot\", autoshotBlob, \"autoshot.jpg\");\r\n }\r\n if (videoDurationSeconds !== undefined) {\r\n formData.append(\"video_duration_seconds\", String(videoDurationSeconds));\r\n }\r\n if (videoSizeBytes !== undefined) {\r\n formData.append(\"video_size_bytes\", String(videoSizeBytes));\r\n }\r\n\r\n return this.http.uploadWithSession<LivenessSubmitResponse>(\r\n \"/v1/sdk/liveness/submit/\",\r\n formData\r\n );\r\n }\r\n\r\n /**\r\n * Poll the public SDK status endpoint for the final verification result.\r\n * Safe to call after the session has been revoked (no auth required).\r\n *\r\n * GET /v1/liveness/<entryId>/sdk-result/\r\n */\r\n async pollResult(entryId: number): Promise<{\r\n id: number;\r\n status: string;\r\n failure_reason: string | null;\r\n completed_at: string | null;\r\n }> {\r\n return (this.http as any).publicGet(`/v1/liveness/${entryId}/sdk-result/`);\r\n }\r\n\r\n /**\r\n * Full liveness check \u2014 orchestrates the entire flow:\r\n *\r\n * 1. Take autoshot selfie from camera\r\n * 2. Create liveness entry on backend (with challenge actions + selfie + optional doc)\r\n * 3. Run action detection loop (camera + MediaPipe)\r\n * 4. Record video and submit to backend\r\n * 5. Return submit response (status: \"processing\")\r\n *\r\n * @param container - DOM element to mount the liveness UI into\r\n * @param params - identifier info and optional document image\r\n * @param actions - override challenge actions (default: BLINK, TURN_LEFT, OPEN_MOUTH)\r\n */\r\n async startCheck(\r\n container: HTMLElement,\r\n params: {\r\n identifier: string;\r\n identifier_type: string;\r\n country: string;\r\n id_file?: File | Blob; // Legacy support\r\n document?: File | Blob; // Front document field (matches backend)\r\n document_front?: File | Blob; // Legacy support for backward compatibility\r\n document_back?: File | Blob; // Back document field (optional)\r\n identity_check?: number;\r\n verification_type?: \"data_verification\" | \"document_verification\" | \"liveness_only\";\r\n },\r\n actions?: ChallengeAction[],\r\n existingEntryId?: number\r\n ): Promise<LivenessSubmitResponse> {\r\n const camera = new CameraManager();\r\n const recorder = new VideoRecorder();\r\n const faceEngine = new FaceDetectorEngine();\r\n const ui = new LivenessUI();\r\n\r\n // Tracks whether cleanup has already been called (so the finally block\r\n // doesn't double-destroy when retry takes over).\r\n let cleanedUp = false;\r\n const cleanup = () => {\r\n if (cleanedUp) return;\r\n cleanedUp = true;\r\n faceEngine.destroy();\r\n camera.stop();\r\n ui.unmount();\r\n };\r\n\r\n try {\r\n // 1. Open camera (with permission error handling)\r\n let stream: MediaStream;\r\n try {\r\n stream = await camera.open();\r\n } catch (camErr: any) {\r\n if (camErr.name === \"NotAllowedError\" || camErr.name === \"PermissionDeniedError\") {\r\n throw new Error(\"Camera access denied. Please allow camera permission in your browser settings and try again.\");\r\n }\r\n if (camErr.name === \"NotFoundError\" || camErr.name === \"DevicesNotFoundError\") {\r\n throw new Error(\"No camera found. Please connect a camera and try again.\");\r\n }\r\n throw new Error(`Camera error: ${camErr.message || \"Unable to access camera\"}`);\r\n }\r\n\r\n // 2. Document capture step \u2014 document_verification only, when no id_file pre-supplied\r\n let capturedDocBlob: Blob | undefined = params.id_file as Blob | undefined;\r\n if (!capturedDocBlob && params.verification_type === \"document_verification\") {\r\n capturedDocBlob = await ui.mountDocumentCapture(container, stream);\r\n }\r\n\r\n // 3. Create a temporary video element to capture autoshot\r\n const tempVideo = document.createElement(\"video\");\r\n tempVideo.srcObject = stream;\r\n tempVideo.muted = true;\r\n tempVideo.playsInline = true;\r\n await tempVideo.play();\r\n\r\n // Wait for face to be detected before capturing autoshot\r\n ui.mount(container, { actions: [], time_limit_seconds: 0, instruction: \"Centre your face in the oval\" });\r\n const uiVideo = ui.getVideoElement();\r\n if (uiVideo) {\r\n uiVideo.srcObject = stream;\r\n await uiVideo.play();\r\n } else {\r\n tempVideo.style.cssText = \"width:100%;border-radius:12px;transform:scaleX(-1);\";\r\n container.appendChild(tempVideo);\r\n }\r\n\r\n await faceEngine.init();\r\n ui.updateInstruction(\"Centre your face in the oval\");\r\n\r\n // Wait until face is stably centred (5 consecutive detected frames, max 12 s)\r\n const videoForDetection = uiVideo || tempVideo;\r\n await new Promise<void>((resolve) => {\r\n let attempts = 0;\r\n let stableFrames = 0;\r\n const STABLE_REQUIRED = 5;\r\n const maxAttempts = 120; // 12 seconds at 100ms intervals\r\n const checkFace = () => {\r\n attempts++;\r\n if (videoForDetection.readyState >= 2) {\r\n const detection = faceEngine.detect(videoForDetection, performance.now());\r\n if (detection.faceDetected) {\r\n stableFrames++;\r\n if (stableFrames >= STABLE_REQUIRED) {\r\n resolve();\r\n return;\r\n }\r\n } else {\r\n stableFrames = 0; // reset on any lost-face frame\r\n ui.updateInstruction(\"Move your face into the oval\");\r\n }\r\n }\r\n if (attempts >= maxAttempts) {\r\n resolve(); // proceed anyway after timeout\r\n return;\r\n }\r\n setTimeout(checkFace, 100);\r\n };\r\n checkFace();\r\n });\r\n\r\n ui.updateInstruction(\"Hold still \u2014 capturing your selfie...\");\r\n await new Promise((r) => setTimeout(r, 700)); // wait for camera auto-focus\r\n\r\n // 3. Capture autoshot (selfie) \u2014 face stable, camera focused\r\n const autoshotBlob = await this.captureFrame(videoForDetection);\r\n tempVideo.pause();\r\n\r\n // Validate autoshot blob is not empty\r\n if (!autoshotBlob || autoshotBlob.size === 0) {\r\n throw new Error(\"Failed to capture autoshot selfie. Please ensure camera is working.\");\r\n }\r\n\r\n // 4. Create liveness entry on backend (skip if retrying with existing entry)\r\n const challengeActions = actions || [\"BLINK\", \"TURN_LEFT\", \"OPEN_MOUTH\"];\r\n let entry: LivenessCreateResponse;\r\n\r\n if (existingEntryId) {\r\n // Reuse existing entry on retry (D1: prevent duplicate wallet charges)\r\n entry = { id: existingEntryId, challenge_actions: challengeActions, status: \"pending\", client_id: \"\", expires_at: null };\r\n } else {\r\n const deviceMeta = collectDeviceMetadata();\r\n entry = await this.create({\r\n identifier: params.identifier,\r\n identifier_type: params.identifier_type,\r\n country: params.country,\r\n challenge_actions: challengeActions,\r\n autoshot_file: autoshotBlob,\r\n document: params.document || params.document_front || params.id_file || capturedDocBlob,\r\n document_back: params.document_back,\r\n identity_check: params.identity_check,\r\n device_type: deviceMeta.device_type,\r\n os_name: deviceMeta.os_name,\r\n browser_timezone: deviceMeta.browser_timezone,\r\n fingerprint_id: deviceMeta.fingerprint_id,\r\n });\r\n }\r\n\r\n // 5. Mount UI with challenge actions from backend\r\n const uiChallenge = {\r\n actions: entry.challenge_actions,\r\n time_limit_seconds: 45,\r\n instruction: \"Complete each action below to verify it's you\",\r\n // Use backend-provided instructions if available (mirror-corrected),\r\n // otherwise fall back to the frontend labels.\r\n instructions: (entry as any).challenge_instructions,\r\n };\r\n\r\n // Re-mount UI with challenge actions (face engine already initialized)\r\n ui.unmount();\r\n const videoEl = ui.mount(container, uiChallenge);\r\n videoEl.srcObject = stream;\r\n await videoEl.play();\r\n\r\n // 7. Start recording\r\n recorder.start(stream);\r\n ui.updateInstruction(uiChallenge.instruction);\r\n\r\n // 8. Run detection loop (sequential \u2014 one action at a time)\r\n const actionDetector = new ActionDetector(entry.challenge_actions);\r\n let lastAction: string | null = null;\r\n\r\n const detectionResult = await new Promise<\"completed\" | \"timeout\">(\r\n (resolve) => {\r\n let animFrameId: number;\r\n\r\n const timeout = setTimeout(() => {\r\n cancelAnimationFrame(animFrameId);\r\n resolve(\"timeout\");\r\n }, uiChallenge.time_limit_seconds * 1000);\r\n\r\n const detectLoop = () => {\r\n if (videoEl.readyState >= 2) {\r\n const detection = faceEngine.detect(\r\n videoEl,\r\n performance.now()\r\n );\r\n\r\n const states = actionDetector.check(detection);\r\n ui.updateActions(states);\r\n\r\n const current = actionDetector.getCurrentAction();\r\n\r\n if (!detection.faceDetected) {\r\n ui.updateInstruction(\"Move your face into the oval\");\r\n } else if (current) {\r\n if (current !== lastAction) {\r\n lastAction = current;\r\n // Use backend-provided instruction if available\r\n const label = (uiChallenge as any).instructions?.[current]\r\n || this.describeAction(current);\r\n ui.updateInstruction(label);\r\n }\r\n } else {\r\n ui.updateInstruction(\"All actions completed! \u2713\");\r\n }\r\n\r\n if (actionDetector.allCompleted()) {\r\n clearTimeout(timeout);\r\n cancelAnimationFrame(animFrameId);\r\n resolve(\"completed\");\r\n return;\r\n }\r\n }\r\n\r\n animFrameId = requestAnimationFrame(detectLoop);\r\n };\r\n\r\n detectLoop();\r\n }\r\n );\r\n\r\n // \u2500\u2500 On timeout: show retry screen, clean up, restart \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n if (detectionResult === \"timeout\") {\r\n // IMPORTANT: mark cleanedUp=true BEFORE returning the new Promise so\r\n // the outer `finally` block does NOT call cleanup() immediately \u2014\r\n // which would destroy the UI before the user sees the timeout screen.\r\n cleanedUp = true;\r\n\r\n recorder.stop().catch(() => { }); // discard partial recording\r\n\r\n return new Promise<LivenessSubmitResponse>((resolveRetry, rejectRetry) => {\r\n ui.showTimeout(() => {\r\n // User clicked \"Try Again\" \u2014 now it is safe to destroy this attempt\r\n faceEngine.destroy();\r\n camera.stop();\r\n ui.unmount();\r\n\r\n // Restart liveness with same entry ID to prevent duplicate charges (D1)\r\n // Pass capturedDocBlob forward so document scan step is not repeated\r\n this.startCheck(container, { ...params, id_file: capturedDocBlob }, actions, entry.id)\r\n .then(resolveRetry)\r\n .catch(rejectRetry);\r\n });\r\n // showTimeout waits for the user to click \u2014 the promise stays pending.\r\n });\r\n }\r\n\r\n // \u2500\u2500 On completion: stop recording, submit, show success \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n // Wait for user to return to neutral face after last action before\r\n // capturing snapshot \u2014 prevents mid-action pose from skewing DeepFace\r\n // embeddings (open mouth / head turned = high cosine distance).\r\n ui.updateInstruction(\"Almost done \u2014 hold still...\");\r\n await new Promise((r) => setTimeout(r, 800));\r\n\r\n // Capture a snapshot frame while the video is still playing\r\n const snapshotBlob = await this.captureFrame(videoEl);\r\n\r\n // 9. Stop recording\r\n const { blob: videoBlob, durationSeconds } = await recorder.stop();\r\n\r\n // 10. Submit to backend \u2014 always include autoshot so document-flow\r\n // entries (which bypassed create() via existingEntryId) still get it.\r\n const submitResult = await this.submit(\r\n entry.id,\r\n videoBlob,\r\n snapshotBlob,\r\n autoshotBlob,\r\n durationSeconds,\r\n videoBlob.size\r\n );\r\n\r\n // 11. Show success overlay briefly before the flow advances\r\n await ui.showResult(\r\n submitResult.status === \"failed\" ? \"failed\" : \"processing\",\r\n submitResult.id\r\n );\r\n\r\n return submitResult;\r\n\r\n } finally {\r\n cleanup();\r\n }\r\n }\r\n\r\n /**\r\n * Capture a single sharp frame from a video element as a JPEG Blob.\r\n * Retries up to maxAttempts times (300 ms apart) if the Laplacian blur\r\n * score is below threshold, then falls back to the best frame captured.\r\n */\r\n private async captureFrame(\r\n video: HTMLVideoElement,\r\n maxAttempts = 4\r\n ): Promise<Blob> {\r\n const MIN_BLUR_SCORE = 80; // Laplacian variance \u2014 above this = acceptably sharp\r\n const RETRY_DELAY_MS = 300;\r\n let bestBlob: Blob | null = null;\r\n let bestScore = -1;\r\n\r\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = video.videoWidth || 640;\r\n canvas.height = video.videoHeight || 480;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) throw new Error(\"Failed to get canvas context\");\r\n ctx.drawImage(video, 0, 0);\r\n\r\n const score = this._computeBlurScore(canvas);\r\n\r\n const blob = await new Promise<Blob | null>((res) =>\r\n canvas.toBlob((b) => res(b), \"image/jpeg\", 0.92)\r\n );\r\n\r\n if (blob && score > bestScore) {\r\n bestBlob = blob;\r\n bestScore = score;\r\n }\r\n\r\n if (score >= MIN_BLUR_SCORE) break; // sharp enough \u2014 stop early\r\n\r\n if (attempt < maxAttempts - 1) {\r\n await new Promise((r) => setTimeout(r, RETRY_DELAY_MS));\r\n }\r\n }\r\n\r\n if (bestBlob) return bestBlob;\r\n throw new Error(\"Failed to capture frame\");\r\n }\r\n\r\n /**\r\n * Laplacian variance blur metric on a centre-cropped region (320\u00D7240 max).\r\n * Higher score = sharper image. Score < 80 is considered blurry.\r\n */\r\n private _computeBlurScore(canvas: HTMLCanvasElement): number {\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return 0;\r\n\r\n // Sample a 320\u00D7240 centre crop for performance\r\n const sw = Math.min(canvas.width, 320);\r\n const sh = Math.min(canvas.height, 240);\r\n const sx = Math.floor((canvas.width - sw) / 2);\r\n const sy = Math.floor((canvas.height - sh) / 2);\r\n\r\n const { data, width, height } = ctx.getImageData(sx, sy, sw, sh);\r\n\r\n // Convert to greyscale\r\n const gray = new Float32Array(width * height);\r\n for (let i = 0; i < width * height; i++) {\r\n gray[i] =\r\n 0.299 * data[i * 4] +\r\n 0.587 * data[i * 4 + 1] +\r\n 0.114 * data[i * 4 + 2];\r\n }\r\n\r\n // Laplacian convolution [0,1,0 / 1,-4,1 / 0,1,0] \u2014 sum of squared responses\r\n let sum = 0;\r\n let n = 0;\r\n for (let y = 1; y < height - 1; y++) {\r\n for (let x = 1; x < width - 1; x++) {\r\n const l =\r\n gray[(y - 1) * width + x] +\r\n gray[(y + 1) * width + x] +\r\n gray[y * width + (x - 1)] +\r\n gray[y * width + (x + 1)] -\r\n 4 * gray[y * width + x];\r\n sum += l * l;\r\n n++;\r\n }\r\n }\r\n return n > 0 ? sum / n : 0;\r\n }\r\n\r\n private describeAction(action: string): string {\r\n const descriptions: Record<string, string> = {\r\n BLINK: \"Blink your eyes\",\r\n TURN_LEFT: \"Turn your head right\", // camera-left = user's right (mirror)\r\n TURN_RIGHT: \"Turn your head left\", // camera-right = user's left (mirror)\r\n TURN_HEAD: \"Turn your head side to side\",\r\n OPEN_MOUTH: \"Open your mouth wide\",\r\n };\r\n return descriptions[action] || action.replace(/_/g, \" \").toLowerCase();\r\n }\r\n}\r\n", "import { SDKConfig } from \"./Config\";\r\nimport { HttpClient } from \"./HttpClient\";\r\nimport { OnboardingModule } from \"../modules/onboarding/onboarding\";\r\nimport { LivenessModule } from \"../modules/liveness/liveness\";\r\nimport {\r\n SessionResponse,\r\n SDKInitConfig,\r\n} from \"../types/onboarding\";\r\n\r\n/**\r\n * SmartComply SDK \u2014 main entry point.\r\n *\r\n * Usage:\r\n * const sdk = new SmartComply({ apiKey: \"pk_...\", clientId: \"uuid-...\", environment: \"sandbox\" });\r\n * const session = await sdk.createSession();\r\n * const config = await sdk.initializeConfig();\r\n * // ... use sdk.onboarding and sdk.liveness modules\r\n */\r\nexport class SmartComply {\r\n private http: HttpClient;\r\n private clientId: string;\r\n private _sessionToken: string | null = null;\r\n private _sessionExpiresAt: string | null = null;\r\n private _sdkConfig: SDKInitConfig | null = null;\r\n\r\n public onboarding: OnboardingModule;\r\n public liveness: LivenessModule;\r\n\r\n constructor(config: SDKConfig) {\r\n if (!config.apiKey) {\r\n throw new Error(\"SmartComply: apiKey is required\");\r\n }\r\n if (!config.clientId) {\r\n throw new Error(\"SmartComply: clientId is required (UUID from your SDK config)\");\r\n }\r\n\r\n this.clientId = config.clientId;\r\n this.http = new HttpClient(config);\r\n\r\n this.onboarding = new OnboardingModule(this.http);\r\n this.liveness = new LivenessModule(this.http);\r\n }\r\n\r\n /** Current session token (null if not created yet) */\r\n get sessionToken(): string | null {\r\n return this._sessionToken;\r\n }\r\n\r\n /** Session expiration ISO timestamp */\r\n get sessionExpiresAt(): string | null {\r\n return this._sessionExpiresAt;\r\n }\r\n\r\n /** SDK config fetched from backend (null until initializeConfig() is called) */\r\n get sdkConfig(): SDKInitConfig | null {\r\n return this._sdkConfig;\r\n }\r\n\r\n /**\r\n * Create a new SDK session.\r\n *\r\n * POST /v1/session/create/\r\n * Auth: Authorization: Bearer <apiKey>\r\n * Body: { client_id: \"<uuid>\" }\r\n *\r\n * Returns: { token: \"...\", expires_at: \"...\" }\r\n */\r\n async createSession(): Promise<SessionResponse> {\r\n const response = await this.http.request<SessionResponse>(\r\n \"POST\",\r\n \"/v1/session/create/\",\r\n { client_id: this.clientId }\r\n );\r\n\r\n this._sessionToken = response.token;\r\n this._sessionExpiresAt = response.expires_at;\r\n\r\n // Set the session token on the HTTP client for subsequent requests\r\n this.http.setSessionToken(response.token);\r\n\r\n return response;\r\n }\r\n\r\n /**\r\n * Fetch SDK configuration from the backend.\r\n * Must be called after createSession().\r\n *\r\n * GET /v1/initialize/\r\n * Auth: x-access-token: <sessionToken>\r\n *\r\n * Returns: { brand_name, theme, verification_type, channels, redirect_url, ... }\r\n */\r\n async initializeConfig(): Promise<SDKInitConfig> {\r\n const config = await this.http.sessionRequest<SDKInitConfig>(\r\n \"GET\",\r\n \"/v1/initialize/\"\r\n );\r\n\r\n this._sdkConfig = config;\r\n return config;\r\n }\r\n}\r\n", "/**\r\n * Theme system for the SmartComply Flow widget.\r\n * Maps to backend's SDKConfig.THEME_CHOICES:\r\n * default, midnight_blue, sunset_gold, forest_emerald\r\n */\r\n\r\nexport interface ThemeColors {\r\n primary: string;\r\n primaryHover: string;\r\n primaryGlow: string;\r\n bg: string;\r\n cardBg: string;\r\n inputBg: string;\r\n text: string;\r\n textSecondary: string;\r\n textMuted: string;\r\n border: string;\r\n borderFocus: string;\r\n success: string;\r\n successBg: string;\r\n error: string;\r\n errorBg: string;\r\n warning: string;\r\n overlay: string;\r\n shimmer: string;\r\n shadow: string;\r\n isDark: boolean;\r\n}\r\n\r\nexport const THEMES: Record<string, ThemeColors> = {\r\n default: {\r\n primary: \"#3b82f6\",\r\n primaryHover: \"#2563eb\",\r\n primaryGlow: \"rgba(59, 130, 246, 0.25)\",\r\n bg: \"#ffffff\",\r\n cardBg: \"#f8fafc\",\r\n inputBg: \"#f1f5f9\",\r\n text: \"#0f172a\",\r\n textSecondary: \"#475569\",\r\n textMuted: \"#94a3b8\",\r\n border: \"#e2e8f0\",\r\n borderFocus: \"#3b82f6\",\r\n success: \"#22c55e\",\r\n successBg: \"rgba(34, 197, 94, 0.1)\",\r\n error: \"#ef4444\",\r\n errorBg: \"rgba(239, 68, 68, 0.1)\",\r\n warning: \"#f59e0b\",\r\n overlay: \"rgba(15, 23, 42, 0.6)\",\r\n shimmer: \"rgba(59, 130, 246, 0.08)\",\r\n shadow: \"0 20px 60px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(0, 0, 0, 0.05)\",\r\n isDark: false,\r\n },\r\n\r\n midnight_blue: {\r\n primary: \"#60a5fa\",\r\n primaryHover: \"#93bbfd\",\r\n primaryGlow: \"rgba(96, 165, 250, 0.2)\",\r\n bg: \"#0b1120\",\r\n cardBg: \"#111d33\",\r\n inputBg: \"#162032\",\r\n text: \"#f1f5f9\",\r\n textSecondary: \"#94a3b8\",\r\n textMuted: \"#64748b\",\r\n border: \"#1e3a5f\",\r\n borderFocus: \"#60a5fa\",\r\n success: \"#4ade80\",\r\n successBg: \"rgba(74, 222, 128, 0.1)\",\r\n error: \"#f87171\",\r\n errorBg: \"rgba(248, 113, 113, 0.1)\",\r\n warning: \"#fbbf24\",\r\n overlay: \"rgba(0, 0, 0, 0.75)\",\r\n shimmer: \"rgba(96, 165, 250, 0.06)\",\r\n shadow: \"0 20px 60px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(96, 165, 250, 0.1)\",\r\n isDark: true,\r\n },\r\n\r\n sunset_gold: {\r\n primary: \"#f59e0b\",\r\n primaryHover: \"#d97706\",\r\n primaryGlow: \"rgba(245, 158, 11, 0.2)\",\r\n bg: \"#fffdf7\",\r\n cardBg: \"#fef9ee\",\r\n inputBg: \"#fef3c7\",\r\n text: \"#1c1917\",\r\n textSecondary: \"#57534e\",\r\n textMuted: \"#a8a29e\",\r\n border: \"#fed7aa\",\r\n borderFocus: \"#f59e0b\",\r\n success: \"#22c55e\",\r\n successBg: \"rgba(34, 197, 94, 0.1)\",\r\n error: \"#ef4444\",\r\n errorBg: \"rgba(239, 68, 68, 0.1)\",\r\n warning: \"#f59e0b\",\r\n overlay: \"rgba(28, 25, 23, 0.6)\",\r\n shimmer: \"rgba(245, 158, 11, 0.08)\",\r\n shadow: \"0 20px 60px rgba(0, 0, 0, 0.12), 0 0 0 1px rgba(245, 158, 11, 0.1)\",\r\n isDark: false,\r\n },\r\n\r\n forest_emerald: {\r\n primary: \"#10b981\",\r\n primaryHover: \"#059669\",\r\n primaryGlow: \"rgba(16, 185, 129, 0.2)\",\r\n bg: \"#f7fdf9\",\r\n cardBg: \"#ecfdf5\",\r\n inputBg: \"#d1fae5\",\r\n text: \"#1a1a2e\",\r\n textSecondary: \"#4b5563\",\r\n textMuted: \"#9ca3af\",\r\n border: \"#a7f3d0\",\r\n borderFocus: \"#10b981\",\r\n success: \"#22c55e\",\r\n successBg: \"rgba(34, 197, 94, 0.1)\",\r\n error: \"#ef4444\",\r\n errorBg: \"rgba(239, 68, 68, 0.1)\",\r\n warning: \"#f59e0b\",\r\n overlay: \"rgba(26, 26, 46, 0.6)\",\r\n shimmer: \"rgba(16, 185, 129, 0.08)\",\r\n shadow: \"0 20px 60px rgba(0, 0, 0, 0.12), 0 0 0 1px rgba(16, 185, 129, 0.1)\",\r\n isDark: false,\r\n },\r\n};\r\n\r\nexport function getTheme(name: string): ThemeColors {\r\n return THEMES[name] || THEMES.default;\r\n}\r\n", "import { ThemeColors } from \"./theme\";\r\n\r\n/**\r\n * Document capture UI \u2014 camera-based or file-upload for ID documents.\r\n *\r\n * Supports:\r\n * - Camera capture (rear camera preferred on mobile)\r\n * - File upload fallback\r\n * - Preview with retake/confirm\r\n * - Front and back document capture for documents requiring both sides\r\n */\r\nexport interface DocumentCaptureResult {\r\n front: Blob;\r\n back?: Blob; // Optional for documents that don't require back side\r\n}\r\n\r\nexport class DocumentCapture {\r\n private root: HTMLDivElement | null = null;\r\n private videoEl: HTMLVideoElement | null = null;\r\n private stream: MediaStream | null = null;\r\n private resolveCapture: ((result: DocumentCaptureResult) => void) | null = null;\r\n private rejectCapture: ((err: Error) => void) | null = null;\r\n private frontBlob: Blob | null = null;\r\n private backBlob: Blob | null = null;\r\n private currentSide: 'front' | 'back' = 'front';\r\n\r\n /**\r\n * Mount the document capture UI and return a promise that resolves\r\n * with the captured document image(s).\r\n */\r\n capture(\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n documentType: string\r\n ): Promise<DocumentCaptureResult> {\r\n return new Promise((resolve, reject) => {\r\n // Validate input parameters\r\n if (!container) {\r\n reject(new Error(\"Container element is required\"));\r\n return;\r\n }\r\n if (!theme) {\r\n reject(new Error(\"Theme configuration is required\"));\r\n return;\r\n }\r\n if (!documentType || typeof documentType !== 'string') {\r\n reject(new Error(\"Document type is required and must be a string\"));\r\n return;\r\n }\r\n \r\n // Check if already capturing\r\n if (this.resolveCapture || this.rejectCapture) {\r\n reject(new Error(\"Document capture is already in progress\"));\r\n return;\r\n }\r\n\r\n this.resolveCapture = resolve;\r\n this.rejectCapture = reject;\r\n this.frontBlob = null;\r\n this.backBlob = null;\r\n this.currentSide = 'front';\r\n this.renderChoiceScreen(container, theme, documentType);\r\n });\r\n }\r\n\r\n destroy(): void {\r\n // Stop any ongoing camera streams\r\n this.stopCamera();\r\n \r\n // Clean up DOM elements\r\n if (this.root && this.root.parentElement) {\r\n this.root.parentElement.removeChild(this.root);\r\n }\r\n this.root = null;\r\n \r\n // Clean up any pending promises\r\n if (this.rejectCapture) {\r\n this.rejectCapture(new Error(\"Document capture was cancelled\"));\r\n this.rejectCapture = null;\r\n }\r\n this.resolveCapture = null;\r\n \r\n // Clean up blob data\r\n this.frontBlob = null;\r\n this.backBlob = null;\r\n this.currentSide = 'front';\r\n }\r\n\r\n private requiresBackSide(documentType: string): boolean {\r\n const type = documentType.toLowerCase();\r\n return type.includes(\"voter\") || \r\n type.includes(\"nin\") || \r\n type.includes(\"driver\") || \r\n type.includes(\"license\") || \r\n type.includes(\"national id\") ||\r\n type.includes(\"national id card\") ||\r\n type.includes(\"ghana\");\r\n }\r\n\r\n private renderChoiceScreen(\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n documentType: string\r\n ): void {\r\n this.root = document.createElement(\"div\");\r\n this.root.style.cssText = \"display:flex;flex-direction:column;align-items:center;gap:24px;padding:24px 20px;max-width:100%;\";\r\n\r\n const docLabel = this.getDocumentLabel(documentType);\r\n const requiresBack = this.requiresBackSide(documentType);\r\n const isCapturingFront = this.currentSide === 'front';\r\n\r\n // Header with enhanced illustration\r\n const header = document.createElement(\"div\");\r\n header.style.cssText = \"display:flex;flex-direction:column;align-items:center;gap:16px;text-align:center;\";\r\n \r\n // Enhanced illustration with gradient background\r\n const iconContainer = document.createElement(\"div\");\r\n iconContainer.style.cssText = `\r\n width:120px;height:120px;border-radius:24px;\r\n display:flex;align-items:center;justify-content:center;\r\n background:linear-gradient(135deg, ${theme.primary}15, ${theme.primary}05);\r\n border:3px solid ${theme.primary}30;\r\n position:relative;overflow:hidden;\r\n box-shadow:0 8px 32px ${theme.primary}20;\r\n `;\r\n \r\n const icon = document.createElement(\"div\");\r\n icon.style.cssText = \"font-size:48px;animation:float 3s ease-in-out infinite;\";\r\n icon.textContent = \"\uD83E\uDEAA\";\r\n iconContainer.appendChild(icon);\r\n \r\n // Add floating animation\r\n if (!document.head.querySelector('style[data-float-animation]')) {\r\n const style = document.createElement('style');\r\n style.setAttribute('data-float-animation', 'true');\r\n style.textContent = `\r\n @keyframes float {\r\n 0%, 100% { transform: translateY(0px); }\r\n 50% { transform: translateY(-10px); }\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n \r\n header.appendChild(iconContainer);\r\n\r\n // Enhanced title and subtitle\r\n const title = document.createElement(\"div\");\r\n title.style.cssText = `color:${theme.text};font-size:20px;font-weight:700;text-align:center;line-height:1.4;`;\r\n let labelText = `Capture your ${docLabel}`;\r\n if (requiresBack) {\r\n labelText += ` (${isCapturingFront ? 'Front Side' : 'Back Side'})`;\r\n }\r\n title.textContent = labelText;\r\n header.appendChild(title);\r\n\r\n const subtitle = document.createElement(\"div\");\r\n subtitle.style.cssText = `color:${theme.textSecondary};font-size:14px;text-align:center;line-height:1.5;max-width:280px;`;\r\n subtitle.textContent = \"Choose how you'd like to provide your document\";\r\n header.appendChild(subtitle);\r\n\r\n this.root.appendChild(header);\r\n\r\n // Enhanced progress indicator for multi-sided documents\r\n if (requiresBack) {\r\n const progress = document.createElement(\"div\");\r\n progress.style.cssText = `\r\n display:flex;flex-direction:column;align-items:center;gap:12px;\r\n padding:16px 20px;background:${theme.primary}08;border-radius:16px;\r\n border:1px solid ${theme.primary}20;width:100%;max-width:320px;\r\n `;\r\n progress.innerHTML = `\r\n <div style=\"display:flex;gap:8px;align-items:center;\">\r\n <div style=\"width:12px;height:12px;border-radius:50%;background:${isCapturingFront ? theme.primary : theme.border};transition:all 0.3s ease;\"></div>\r\n <div style=\"width:32px;height:2px;background:${theme.border};border-radius:1px;\"></div>\r\n <div style=\"width:12px;height:12px;border-radius:50%;background:${!isCapturingFront ? theme.primary : theme.border};transition:all 0.3s ease;\"></div>\r\n </div>\r\n <span style=\"color:${theme.text};font-size:13px;font-weight:600;\">${isCapturingFront ? 'Step 1 of 2' : 'Step 2 of 2'}</span>\r\n `;\r\n this.root.appendChild(progress);\r\n }\r\n\r\n // Enhanced action buttons container\r\n const actionsContainer = document.createElement(\"div\");\r\n actionsContainer.style.cssText = \"display:flex;flex-direction:column;gap:16px;width:100%;max-width:320px;\";\r\n\r\n // Camera button with enhanced design\r\n const cameraBtn = this.createEnhancedButton(\r\n \"\uD83D\uDCF7 Take Photo with Camera\",\r\n theme,\r\n true,\r\n \"Open camera to capture document\"\r\n );\r\n cameraBtn.addEventListener(\"click\", () => {\r\n this.showLoadingState(\"Opening camera...\", theme);\r\n this.root!.innerHTML = \"\";\r\n setTimeout(() => {\r\n this.renderCameraView(this.root!, theme, documentType);\r\n }, 500);\r\n });\r\n actionsContainer.appendChild(cameraBtn);\r\n\r\n // Upload button with enhanced design\r\n const uploadBtn = this.createEnhancedButton(\r\n \"\uD83D\uDCC1 Choose from Gallery\",\r\n theme,\r\n false,\r\n \"Upload document image from device\"\r\n );\r\n uploadBtn.addEventListener(\"click\", () => {\r\n this.handleFileUpload(container, theme);\r\n });\r\n actionsContainer.appendChild(uploadBtn);\r\n\r\n this.root.appendChild(actionsContainer);\r\n\r\n // Enhanced tips section\r\n const tips = document.createElement(\"div\");\r\n tips.style.cssText = `\r\n width:100%;padding:16px 20px;border-radius:16px;\r\n background:${theme.shimmer};border:1px solid ${theme.border};\r\n margin-top:8px;\r\n `;\r\n \r\n const tipsTitle = document.createElement(\"div\");\r\n tipsTitle.style.cssText = `font-weight:700;color:${theme.text};margin-bottom:12px;font-size:14px;display:flex;align-items:center;gap:8px;`;\r\n tipsTitle.innerHTML = `\uD83D\uDCA1 Tips for best results`;\r\n tips.appendChild(tipsTitle);\r\n \r\n const tipsList = document.createElement(\"div\");\r\n tipsList.style.cssText = `display:grid;gap:8px;font-size:13px;color:${theme.textSecondary};line-height:1.6;`;\r\n tipsList.innerHTML = `\r\n <div style=\"display:flex;gap:8px;align-items:flex-start;\">\r\n <span style=\"color:${theme.primary};font-weight:bold;\">\u2713</span>\r\n <span>Lay document flat on a solid surface</span>\r\n </div>\r\n <div style=\"display:flex;gap:8px;align-items:flex-start;\">\r\n <span style=\"color:${theme.primary};font-weight:bold;\">\u2713</span>\r\n <span>Ensure all four corners are visible</span>\r\n </div>\r\n <div style=\"display:flex;gap:8px;align-items:flex-start;\">\r\n <span style=\"color:${theme.primary};font-weight:bold;\">\u2713</span>\r\n <span>Use good lighting, avoid glare</span>\r\n </div>\r\n <div style=\"display:flex;gap:8px;align-items:flex-start;\">\r\n <span style=\"color:${theme.primary};font-weight:bold;\">\u2713</span>\r\n <span>Make sure all text is clearly readable</span>\r\n </div>\r\n `;\r\n tips.appendChild(tipsList);\r\n this.root.appendChild(tips);\r\n\r\n // File input (hidden)\r\n const fileInput = document.createElement(\"input\");\r\n fileInput.type = \"file\";\r\n fileInput.accept = \"image/jpeg,image/png\";\r\n fileInput.style.display = \"none\";\r\n fileInput.id = \"sc-doc-file-input\";\r\n fileInput.addEventListener(\"change\", (e) => {\r\n const file = (e.target as HTMLInputElement).files?.[0];\r\n if (file) {\r\n // Validate file\r\n const validationError = this.validateFile(file);\r\n if (validationError) {\r\n this.showError(validationError);\r\n return;\r\n }\r\n \r\n this.showLoadingState(\"Processing image...\", theme);\r\n this.compressImage(file, 1280, 960, 0.85)\r\n .then((compressed) => this.handleFileUploadComplete(compressed, container, theme, documentType))\r\n .catch(() => this.handleFileUploadComplete(file, container, theme, documentType)); // fallback to original if compress fails\r\n }\r\n });\r\n this.root.appendChild(fileInput);\r\n\r\n container.appendChild(this.root);\r\n }\r\n\r\n private renderCameraView(\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n documentType: string\r\n ): void {\r\n const wrapper = document.createElement(\"div\");\r\n wrapper.style.cssText = \"position:relative;width:100%;border-radius:12px;overflow:hidden;background:#000;\";\r\n\r\n this.videoEl = document.createElement(\"video\");\r\n this.videoEl.autoplay = true;\r\n this.videoEl.playsInline = true;\r\n this.videoEl.muted = true;\r\n this.videoEl.style.cssText = \"width:100%;display:block;aspect-ratio:4/3;object-fit:cover;\";\r\n wrapper.appendChild(this.videoEl);\r\n\r\n // Guide overlay \u2014 rectangular\r\n const guide = document.createElement(\"div\");\r\n guide.style.cssText = `\r\n position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\r\n pointer-events:none;\r\n `;\r\n const rect = document.createElement(\"div\");\r\n rect.style.cssText = `\r\n width:85%;height:60%;border:2px solid rgba(255,255,255,0.6);\r\n border-radius:12px;box-shadow:0 0 0 9999px rgba(0,0,0,0.4);\r\n `;\r\n guide.appendChild(rect);\r\n wrapper.appendChild(guide);\r\n\r\n // Guide label\r\n const guideLbl = document.createElement(\"div\");\r\n guideLbl.style.cssText = `\r\n position:absolute;bottom:60px;left:0;right:0;text-align:center;\r\n color:#fff;font-size:13px;font-weight:600;\r\n text-shadow:0 1px 3px rgba(0,0,0,0.5);\r\n `;\r\n guideLbl.textContent = `Align your ${this.getDocumentLabel(documentType)} within the frame`;\r\n wrapper.appendChild(guideLbl);\r\n\r\n container.appendChild(wrapper);\r\n\r\n // Capture button\r\n const captureBtn = document.createElement(\"button\");\r\n captureBtn.style.cssText = `\r\n display:block;margin:16px auto 0;width:64px;height:64px;\r\n border-radius:50%;border:4px solid ${theme.primary};\r\n background:transparent;cursor:pointer;position:relative;\r\n transition:all 0.2s ease;\r\n `;\r\n const inner = document.createElement(\"div\");\r\n inner.style.cssText = `\r\n width:48px;height:48px;border-radius:50%;background:${theme.primary};\r\n position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);\r\n transition:all 0.15s ease;\r\n `;\r\n captureBtn.appendChild(inner);\r\n captureBtn.addEventListener(\"mousedown\", () => {\r\n inner.style.transform = \"translate(-50%,-50%) scale(0.9)\";\r\n });\r\n captureBtn.addEventListener(\"mouseup\", () => {\r\n inner.style.transform = \"translate(-50%,-50%) scale(1)\";\r\n });\r\n captureBtn.addEventListener(\"click\", () => {\r\n this.captureFrame(container, theme, documentType);\r\n });\r\n container.appendChild(captureBtn);\r\n\r\n // Open camera\r\n this.openCamera();\r\n }\r\n\r\n private async openCamera(): Promise<void> {\r\n // Check browser compatibility\r\n if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {\r\n this.rejectCapture?.(new Error(\"Camera access is not supported in this browser. Please use a modern browser like Chrome, Firefox, or Safari.\"));\r\n return;\r\n }\r\n\r\n const maxRetries = 3;\r\n let retryCount = 0;\r\n\r\n const attemptCameraAccess = async (constraints: MediaStreamConstraints): Promise<MediaStream> => {\r\n try {\r\n return await navigator.mediaDevices.getUserMedia(constraints);\r\n } catch (err: any) {\r\n console.warn(`Camera access attempt ${retryCount + 1} failed:`, err);\r\n \r\n if (retryCount < maxRetries - 1) {\r\n retryCount++;\r\n await new Promise(resolve => setTimeout(resolve, 1000 * retryCount)); // Exponential backoff\r\n return attemptCameraAccess(constraints);\r\n }\r\n throw err;\r\n }\r\n };\r\n\r\n try {\r\n // Try rear camera first\r\n this.stream = await attemptCameraAccess({\r\n video: {\r\n facingMode: { ideal: \"environment\" },\r\n width: { ideal: 1280 },\r\n height: { ideal: 960 },\r\n },\r\n });\r\n } catch (err: any) {\r\n console.warn(\"Rear camera failed, trying any camera:\", err);\r\n \r\n // Fallback to any camera\r\n try {\r\n this.stream = await attemptCameraAccess({\r\n video: { width: { ideal: 1280 } },\r\n });\r\n } catch (fallbackErr: any) {\r\n const errorMessage = this.getCameraErrorMessage(fallbackErr);\r\n this.rejectCapture?.(new Error(errorMessage));\r\n return;\r\n }\r\n }\r\n\r\n if (this.videoEl) {\r\n this.videoEl.srcObject = this.stream;\r\n }\r\n }\r\n\r\n private getCameraErrorMessage(error: any): string {\r\n if (error.name === 'NotAllowedError') {\r\n return \"Camera access denied. Please allow camera permissions and try again.\";\r\n } else if (error.name === 'NotFoundError') {\r\n return \"No camera found. Please ensure your device has a working camera.\";\r\n } else if (error.name === 'NotReadableError') {\r\n return \"Camera is already in use by another application. Please close other apps using the camera and try again.\";\r\n } else if (error.name === 'OverconstrainedError') {\r\n return \"Camera constraints not supported. Trying with different settings...\";\r\n } else {\r\n return \"Camera access failed. Please check your camera permissions and try again.\";\r\n }\r\n }\r\n\r\n private captureFrame(container: HTMLElement, theme: ThemeColors, documentType: string): void {\r\n if (!this.videoEl) return;\r\n\r\n const MAX_W = 1280;\r\n const MAX_H = 960;\r\n const vw = this.videoEl.videoWidth || MAX_W;\r\n const vh = this.videoEl.videoHeight || MAX_H;\r\n const ratio = Math.min(MAX_W / vw, MAX_H / vh, 1);\r\n\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = Math.round(vw * ratio);\r\n canvas.height = Math.round(vh * ratio);\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return;\r\n\r\n ctx.drawImage(this.videoEl, 0, 0, canvas.width, canvas.height);\r\n\r\n canvas.toBlob(\r\n (blob) => {\r\n if (blob) {\r\n this.stopCamera();\r\n this.showPreview(container, theme, blob, documentType);\r\n }\r\n },\r\n \"image/jpeg\",\r\n 0.85\r\n );\r\n }\r\n\r\n private showPreview(\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n imageData: Blob | File,\r\n documentType: string\r\n ): void {\r\n if (this.root) this.root.innerHTML = \"\";\r\n else {\r\n this.root = document.createElement(\"div\");\r\n container.appendChild(this.root);\r\n }\r\n\r\n this.root.style.cssText = \"display:flex;flex-direction:column;align-items:center;gap:16px;\";\r\n\r\n // Preview image\r\n const img = document.createElement(\"img\");\r\n const imageUrl = URL.createObjectURL(imageData);\r\n img.src = imageUrl;\r\n img.style.cssText = `\r\n width:100%;max-height:300px;object-fit:contain;border-radius:12px;\r\n border:2px solid ${theme.border};\r\n `;\r\n this.root.appendChild(img);\r\n\r\n // Store URL for cleanup\r\n (img as any)._blobUrl = imageUrl;\r\n\r\n const label = document.createElement(\"div\");\r\n label.style.cssText = `color:${theme.textSecondary};font-size:13px;text-align:center;font-weight:500;`;\r\n label.textContent = \"Does the photo look clear?\";\r\n this.root.appendChild(label);\r\n\r\n const sublabel = document.createElement(\"div\");\r\n sublabel.style.cssText = `color:${theme.textMuted};font-size:11px;text-align:center;line-height:1.6;`;\r\n sublabel.textContent = \"All text must be readable and all four corners must be visible.\";\r\n this.root.appendChild(sublabel);\r\n\r\n // Buttons\r\n const btnRow = document.createElement(\"div\");\r\n btnRow.style.cssText = \"display:flex;gap:12px;width:100%;\";\r\n\r\n const retakeBtn = this.createButton(\"Retake\", theme, false);\r\n retakeBtn.style.flex = \"1\";\r\n retakeBtn.addEventListener(\"click\", () => {\r\n if ((img as any)._blobUrl) {\r\n URL.revokeObjectURL((img as any)._blobUrl);\r\n }\r\n this.root!.innerHTML = \"\";\r\n this.renderChoiceScreen(container, theme, documentType);\r\n });\r\n\r\n const useBtn = this.createButton(\"Use Photo \u2713\", theme, true);\r\n useBtn.style.flex = \"1\";\r\n useBtn.addEventListener(\"click\", () => {\r\n if ((img as any)._blobUrl) {\r\n URL.revokeObjectURL((img as any)._blobUrl);\r\n }\r\n useBtn.textContent = \"Processing...\";\r\n useBtn.disabled = true;\r\n this.compressImage(imageData, 1280, 960, 0.85)\r\n .then((compressed) => this.handleCaptureComplete(compressed, container, theme, documentType))\r\n .catch(() => this.handleCaptureComplete(imageData, container, theme, documentType)); // fallback to original\r\n });\r\n\r\n btnRow.appendChild(retakeBtn);\r\n btnRow.appendChild(useBtn);\r\n this.root.appendChild(btnRow);\r\n }\r\n\r\n private handleCaptureComplete(\r\n imageData: Blob,\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n documentType: string\r\n ): void {\r\n const requiresBack = this.requiresBackSide(documentType);\r\n const wasCapturingFront = this.currentSide === 'front';\r\n \r\n // Store the captured image\r\n if (wasCapturingFront) {\r\n this.frontBlob = imageData;\r\n } else {\r\n this.backBlob = imageData;\r\n }\r\n \r\n // If we need back side and haven't captured it yet, move to back side\r\n if (requiresBack && wasCapturingFront) {\r\n this.currentSide = 'back';\r\n this.root!.innerHTML = \"\";\r\n this.renderChoiceScreen(container, theme, documentType);\r\n return;\r\n }\r\n\r\n // All captures complete, resolve with result\r\n if (!this.frontBlob) {\r\n this.rejectCapture?.(new Error(\"No front image captured. Please try again.\"));\r\n return;\r\n }\r\n \r\n const result: DocumentCaptureResult = {\r\n front: this.frontBlob,\r\n back: this.backBlob || undefined\r\n };\r\n this.resolveCapture?.(result);\r\n }\r\n\r\n private handleFileUploadComplete(\r\n imageData: Blob,\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n documentType: string\r\n ): void {\r\n // Show preview first, then handle completion\r\n this.showPreview(container, theme, imageData, documentType);\r\n }\r\n\r\n private validateFile(file: File): string | null {\r\n // Check file type\r\n const allowedTypes = ['image/jpeg', 'image/jpg', 'image/png'];\r\n if (!allowedTypes.includes(file.type)) {\r\n return \"Invalid file type. Please upload a JPEG or PNG image.\";\r\n }\r\n \r\n // Check file size (max 10MB)\r\n const maxSize = 10 * 1024 * 1024;\r\n if (file.size > maxSize) {\r\n return \"File is too large. Please upload an image smaller than 10MB.\";\r\n }\r\n \r\n // Check minimum file size (at least 1KB to avoid empty files)\r\n if (file.size < 1024) {\r\n return \"File is too small. Please upload a valid image file.\";\r\n }\r\n \r\n return null;\r\n }\r\n\r\n private handleFileUpload(container: HTMLElement, theme: ThemeColors): void {\r\n const input = this.root?.querySelector(\"#sc-doc-file-input\") as HTMLInputElement;\r\n if (input) input.click();\r\n }\r\n\r\n private stopCamera(): void {\r\n if (this.stream) {\r\n this.stream.getTracks().forEach((t) => t.stop());\r\n this.stream = null;\r\n }\r\n if (this.videoEl) {\r\n this.videoEl.srcObject = null;\r\n this.videoEl = null;\r\n }\r\n }\r\n\r\n private createEnhancedButton(\r\n label: string,\r\n theme: ThemeColors,\r\n isPrimary: boolean,\r\n ariaLabel: string\r\n ): HTMLButtonElement {\r\n const btn = document.createElement(\"button\");\r\n btn.textContent = label;\r\n btn.setAttribute(\"aria-label\", ariaLabel);\r\n btn.style.cssText = `\r\n padding:18px 24px;border-radius:16px;font-size:16px;font-weight:600;\r\n cursor:pointer;transition:all 0.3s ease;border:none;width:100%;\r\n min-height:56px;touch-action:manipulation;-webkit-tap-highlight-color:transparent;\r\n position:relative;overflow:hidden;\r\n ${\r\n isPrimary\r\n ? `background:linear-gradient(135deg, ${theme.primary}, ${theme.primary}DD);color:#fff;box-shadow:0 8px 24px ${theme.primary}25, 0 4px 12px ${theme.primary}15;`\r\n : `background:${theme.inputBg};color:${theme.text};border:2px solid ${theme.border};box-shadow:0 2px 8px ${theme.border}20;`\r\n }\r\n `;\r\n \r\n // Add ripple effect\r\n btn.addEventListener(\"click\", (e) => {\r\n const ripple = document.createElement(\"span\");\r\n const rect = btn.getBoundingClientRect();\r\n const size = Math.max(rect.width, rect.height);\r\n const x = e.clientX - rect.left - size / 2;\r\n const y = e.clientY - rect.top - size / 2;\r\n \r\n ripple.style.cssText = `\r\n position:absolute;width:${size}px;height:${size}px;\r\n left:${x}px;top:${y}px;border-radius:50%;\r\n background:${isPrimary ? 'rgba(255,255,255,0.3)' : theme.primary + '20'};\r\n transform:scale(0);animation:ripple 0.6s ease-out;\r\n pointer-events:none;\r\n `;\r\n btn.appendChild(ripple);\r\n setTimeout(() => ripple.remove(), 600);\r\n });\r\n \r\n btn.addEventListener(\"mouseenter\", () => {\r\n btn.style.transform = \"translateY(-2px)\";\r\n if (isPrimary) {\r\n btn.style.boxShadow = `0 12px 32px ${theme.primary}30, 0 6px 16px ${theme.primary}20`;\r\n } else {\r\n btn.style.boxShadow = `0 4px 16px ${theme.border}30, 0 2px 8px ${theme.border}20`;\r\n btn.style.borderColor = theme.primary;\r\n }\r\n });\r\n btn.addEventListener(\"mouseleave\", () => {\r\n btn.style.transform = \"translateY(0)\";\r\n if (isPrimary) {\r\n btn.style.boxShadow = `0 8px 24px ${theme.primary}25, 0 4px 12px ${theme.primary}15`;\r\n } else {\r\n btn.style.boxShadow = `0 2px 8px ${theme.border}20`;\r\n btn.style.borderColor = theme.border;\r\n }\r\n });\r\n \r\n // Add ripple animation\r\n if (!document.head.querySelector('style[data-ripple-animation]')) {\r\n const style = document.createElement('style');\r\n style.setAttribute('data-ripple-animation', 'true');\r\n style.textContent = `\r\n @keyframes ripple {\r\n to { transform: scale(4); opacity: 0; }\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n \r\n return btn;\r\n }\r\n\r\n private showLoadingState(message: string, theme: ThemeColors): void {\r\n if (!this.root) return;\r\n \r\n this.root.innerHTML = \"\";\r\n this.root.style.cssText = \"display:flex;flex-direction:column;align-items:center;justify-content:center;gap:20px;padding:40px 20px;min-height:300px;\";\r\n \r\n // Enhanced loading spinner\r\n const spinnerContainer = document.createElement(\"div\");\r\n spinnerContainer.style.cssText = \"position:relative;width:80px;height:80px;\";\r\n \r\n const spinner = document.createElement(\"div\");\r\n spinner.style.cssText = `\r\n position:absolute;inset:0;border-radius:50%;\r\n border:4px solid ${theme.border};\r\n border-top-color:${theme.primary};\r\n animation:sc-spin 1s linear infinite;\r\n `;\r\n spinnerContainer.appendChild(spinner);\r\n \r\n const centerIcon = document.createElement(\"div\");\r\n centerIcon.style.cssText = `\r\n position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\r\n font-size:28px;animation:pulse 2s ease-in-out infinite;\r\n `;\r\n centerIcon.textContent = \"\uD83D\uDCC4\";\r\n spinnerContainer.appendChild(centerIcon);\r\n \r\n this.root.appendChild(spinnerContainer);\r\n \r\n // Loading message\r\n const loadingText = document.createElement(\"div\");\r\n loadingText.style.cssText = `\r\n color:${theme.text};font-size:16px;font-weight:600;text-align:center;\r\n animation:fadeIn 0.5s ease-out;\r\n `;\r\n loadingText.textContent = message;\r\n this.root.appendChild(loadingText);\r\n \r\n // Add pulse animation\r\n if (!document.head.querySelector('style[data-pulse-animation]')) {\r\n const style = document.createElement('style');\r\n style.setAttribute('data-pulse-animation', 'true');\r\n style.textContent = `\r\n @keyframes pulse {\r\n 0%, 100% { transform: scale(1); opacity: 1; }\r\n 50% { transform: scale(1.1); opacity: 0.8; }\r\n }\r\n @keyframes fadeIn {\r\n from { opacity: 0; transform: translateY(10px); }\r\n to { opacity: 1; transform: translateY(0); }\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n }\r\n\r\n private showError(message: string): void {\r\n if (!this.root) return;\r\n \r\n const errorContainer = document.createElement(\"div\");\r\n errorContainer.style.cssText = `\r\n display:flex;align-items:center;gap:12px;padding:16px;\r\n background:#ff444415;border:1px solid #ff444430;border-radius:12px;\r\n color:#ff4444;font-size:14px;margin-top:16px;animation:shake 0.5s ease-in-out;\r\n `;\r\n errorContainer.innerHTML = `\r\n <span style=\"font-size:18px;\">\u26A0\uFE0F</span>\r\n <span>${message}</span>\r\n `;\r\n \r\n // Add shake animation\r\n if (!document.head.querySelector('style[data-shake-animation]')) {\r\n const style = document.createElement('style');\r\n style.setAttribute('data-shake-animation', 'true');\r\n style.textContent = `\r\n @keyframes shake {\r\n 0%, 100% { transform: translateX(0); }\r\n 25% { transform: translateX(-5px); }\r\n 75% { transform: translateX(5px); }\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n \r\n this.root.appendChild(errorContainer);\r\n setTimeout(() => errorContainer.remove(), 5000);\r\n }\r\n\r\n private createButton(\r\n label: string,\r\n theme: ThemeColors,\r\n isPrimary: boolean\r\n ): HTMLButtonElement {\r\n const btn = document.createElement(\"button\");\r\n btn.textContent = label;\r\n btn.style.cssText = `\r\n padding:16px 24px;border-radius:12px;font-size:16px;font-weight:600;\r\n cursor:pointer;transition:all 0.2s ease;border:none;width:100%;\r\n min-height:52px;touch-action:manipulation;-webkit-tap-highlight-color:transparent;\r\n ${\r\n isPrimary\r\n ? `background:${theme.primary};color:#fff;box-shadow:0 4px 12px ${theme.primary}30;`\r\n : `background:${theme.inputBg};color:${theme.text};border:2px solid ${theme.border};`\r\n }\r\n `;\r\n btn.addEventListener(\"mouseenter\", () => {\r\n btn.style.transform = \"translateY(-1px)\";\r\n if (isPrimary) btn.style.background = theme.primaryHover;\r\n });\r\n btn.addEventListener(\"mouseleave\", () => {\r\n btn.style.transform = \"translateY(0)\";\r\n if (isPrimary) btn.style.background = theme.primary;\r\n });\r\n return btn;\r\n }\r\n\r\n private compressImage(\r\n source: Blob | File,\r\n maxWidth: number,\r\n maxHeight: number,\r\n quality: number\r\n ): Promise<Blob> {\r\n return new Promise((resolve, reject) => {\r\n // Read EXIF orientation FIRST so we can correct rotation before canvas draw.\r\n // Canvas ignores EXIF metadata \u2014 without this, phone uploads arrive rotated.\r\n this._readExifOrientation(source).then((orientation) => {\r\n const url = URL.createObjectURL(source);\r\n const imgEl = document.createElement(\"img\");\r\n imgEl.onload = () => {\r\n URL.revokeObjectURL(url);\r\n let { naturalWidth: w, naturalHeight: h } = imgEl;\r\n\r\n // For orientations 5-8 the image is rotated 90\u00B0/270\u00B0 \u2014 swap dimensions\r\n const swapped = orientation >= 5 && orientation <= 8;\r\n const srcW = swapped ? h : w;\r\n const srcH = swapped ? w : h;\r\n const ratio = Math.min(maxWidth / srcW, maxHeight / srcH, 1);\r\n const outW = Math.round(srcW * ratio);\r\n const outH = Math.round(srcH * ratio);\r\n\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = outW;\r\n canvas.height = outH;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) { reject(new Error(\"Canvas unavailable\")); return; }\r\n\r\n // Apply EXIF rotation transform before drawing\r\n ctx.save();\r\n if (orientation === 2) { ctx.transform(-1, 0, 0, 1, outW, 0); }\r\n else if (orientation === 3) { ctx.transform(-1, 0, 0, -1, outW, outH); }\r\n else if (orientation === 4) { ctx.transform( 1, 0, 0, -1, 0, outH); }\r\n else if (orientation === 5) { ctx.transform( 0, 1, 1, 0, 0, 0); }\r\n else if (orientation === 6) { ctx.transform( 0, 1, -1, 0, outH, 0); }\r\n else if (orientation === 7) { ctx.transform( 0, -1, -1, 0, outH, outW); }\r\n else if (orientation === 8) { ctx.transform( 0, -1, 1, 0, 0, outW); }\r\n ctx.drawImage(imgEl, 0, 0, swapped ? outH : outW, swapped ? outW : outH);\r\n ctx.restore();\r\n\r\n canvas.toBlob(\r\n (blob) => { blob ? resolve(blob) : reject(new Error(\"Compression failed\")); },\r\n \"image/jpeg\",\r\n quality\r\n );\r\n };\r\n imgEl.onerror = () => { URL.revokeObjectURL(url); reject(new Error(\"Image load failed\")); };\r\n imgEl.src = url;\r\n }).catch(() => {\r\n // If EXIF read fails, fall back to simple compression without rotation\r\n const url = URL.createObjectURL(source);\r\n const imgEl = document.createElement(\"img\");\r\n imgEl.onload = () => {\r\n URL.revokeObjectURL(url);\r\n let { naturalWidth: w, naturalHeight: h } = imgEl;\r\n const ratio = Math.min(maxWidth / w, maxHeight / h, 1);\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = Math.round(w * ratio);\r\n canvas.height = Math.round(h * ratio);\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) { reject(new Error(\"Canvas unavailable\")); return; }\r\n ctx.drawImage(imgEl, 0, 0, canvas.width, canvas.height);\r\n canvas.toBlob(\r\n (blob) => { blob ? resolve(blob) : reject(new Error(\"Compression failed\")); },\r\n \"image/jpeg\",\r\n quality\r\n );\r\n };\r\n imgEl.onerror = () => { URL.revokeObjectURL(url); reject(new Error(\"Image load failed\")); };\r\n imgEl.src = url;\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Read JPEG EXIF orientation tag (1\u20138) from a Blob/File.\r\n * Returns 1 (no rotation) if EXIF is absent or unreadable.\r\n */\r\n private _readExifOrientation(source: Blob | File): Promise<number> {\r\n return new Promise((resolve) => {\r\n const reader = new FileReader();\r\n reader.onload = (e) => {\r\n try {\r\n const buf = e.target?.result as ArrayBuffer;\r\n const view = new DataView(buf);\r\n if (view.getUint16(0, false) !== 0xFFD8) { resolve(1); return; } // not JPEG\r\n let offset = 2;\r\n while (offset < view.byteLength) {\r\n const marker = view.getUint16(offset, false);\r\n offset += 2;\r\n if (marker === 0xFFE1) { // APP1 \u2014 may contain EXIF\r\n if (view.getUint32(offset + 2, false) !== 0x45786966) { resolve(1); return; }\r\n const little = view.getUint16(offset + 8, false) === 0x4949;\r\n const ifdOff = offset + 8 + view.getUint32(offset + 12, little);\r\n const tags = view.getUint16(ifdOff, little);\r\n for (let i = 0; i < tags; i++) {\r\n if (view.getUint16(ifdOff + 2 + 12 * i, little) === 0x0112) {\r\n resolve(view.getUint16(ifdOff + 2 + 12 * i + 8, little));\r\n return;\r\n }\r\n }\r\n resolve(1); return;\r\n } else if ((marker & 0xFF00) !== 0xFF00) {\r\n break;\r\n } else {\r\n offset += view.getUint16(offset, false);\r\n }\r\n }\r\n resolve(1);\r\n } catch { resolve(1); }\r\n };\r\n reader.onerror = () => resolve(1);\r\n // Only need the first 64KB \u2014 EXIF is always in the first APP1 segment\r\n reader.readAsArrayBuffer(source.slice(0, 65536));\r\n });\r\n }\r\n\r\n private getDocumentLabel(type: string): string {\r\n const t = type.toLowerCase();\r\n if (t.includes(\"passport\")) return \"passport\";\r\n if (t.includes(\"driver\") || t.includes(\"licen\")) return \"driver's license\";\r\n if (t.includes(\"voter\") || t.includes(\"pvc\")) return \"voter's card\";\r\n if (t.includes(\"national\") || t.includes(\"nin\") || t.includes(\"national id\")) return \"national ID card\";\r\n if (t.includes(\"bvn\")) return \"BVN card\";\r\n return \"identity document\";\r\n }\r\n}\r\n", "import { SmartComply } from \"../client/Smartcomply\";\r\nimport { SDKInitConfig, VerifyIdentityResponse } from \"../types/onboarding\";\r\nimport { LivenessSubmitResponse, ChallengeAction } from \"../types/liveness\";\r\nimport { ThemeColors, getTheme } from \"./theme\";\r\nimport { DocumentCapture, DocumentCaptureResult } from \"./DocumentCapture\";\r\nimport { Environment } from \"../client/Config\";\r\nimport { collectDeviceMetadata } from \"../utils/device\";\r\n\r\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n// Public Types\r\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nexport interface FlowOptions {\r\n apiKey: string;\r\n clientId: string;\r\n environment?: Environment;\r\n timeout?: number;\r\n onComplete?: (result: FlowResult) => void;\r\n onError?: (error: Error) => void;\r\n onClose?: () => void;\r\n}\r\n\r\nexport interface FlowResult {\r\n entryId: number;\r\n sessionId: string | null;\r\n status: string;\r\n submittedAt: string | null;\r\n verificationResult?: VerifyIdentityResponse;\r\n}\r\n\r\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n// Step definitions\r\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\ntype StepName =\r\n | \"loading\"\r\n | \"welcome\"\r\n | \"country\"\r\n | \"id_type\"\r\n | \"id_input\"\r\n | \"document_capture\"\r\n | \"processing\"\r\n | \"liveness\"\r\n | \"result\"\r\n | \"error\";\r\n\r\nconst STEP_ORDER: StepName[] = [\r\n \"loading\",\r\n \"welcome\",\r\n \"country\",\r\n \"id_type\",\r\n \"id_input\", // or document_capture\r\n \"document_capture\",\r\n \"processing\",\r\n \"liveness\",\r\n \"result\",\r\n];\r\n\r\nconst COUNTRY_LABELS: Record<string, string> = {\r\n nigeria: \"\uD83C\uDDF3\uD83C\uDDEC Nigeria\",\r\n global: \"\uD83C\uDF0D Other Countries\",\r\n ghana: \"\uD83C\uDDEC\uD83C\uDDED Ghana\",\r\n kenya: \"\uD83C\uDDF0\uD83C\uDDEA Kenya\",\r\n south_africa: \"\uD83C\uDDFF\uD83C\uDDE6 South Africa\",\r\n united_states: \"\uD83C\uDDFA\uD83C\uDDF8 United States\",\r\n united_kingdom: \"\uD83C\uDDEC\uD83C\uDDE7 United Kingdom\",\r\n};\r\n\r\nfunction resolveIdTypeInfo(\r\n typeName: string,\r\n isDocumentFlow: boolean\r\n): { icon: string; desc: string; requiresBack?: boolean } {\r\n const u = typeName.toUpperCase();\r\n const withFace = u.includes(\"WITH FACE\") || u.includes(\"FACE\");\r\n const advanced = u.includes(\"ADVANCED\");\r\n\r\n // Helper function to check if document requires back side\r\n const requiresBackSide = (type: string): boolean => {\r\n const t = type.toLowerCase();\r\n return t.includes(\"voter\") || \r\n t.includes(\"nin\") || \r\n t.includes(\"driver\") || \r\n t.includes(\"license\") || \r\n t.includes(\"national id\") ||\r\n t.includes(\"national id card\");\r\n };\r\n\r\n // BVN \u2014 always 11 digits\r\n if (u.includes(\"BVN\") || u.includes(\"BANK VERIFICATION\")) {\r\n const extra = withFace ? \" + selfie photo\" : \"\";\r\n return { icon: \"\uD83C\uDFE6\", desc: `Enter your 11-digit BVN${extra}`, requiresBack: false };\r\n }\r\n\r\n // NIN \u2014 always 11 digits\r\n if (u.includes(\"NIN\") || u.includes(\"NATIONAL IDENTITY NUMBER\")) {\r\n const extra = withFace ? \" + selfie photo\" : \"\";\r\n return { icon: \"\uD83C\uDD94\", desc: `Enter your 11-digit NIN${extra}`, requiresBack: false };\r\n }\r\n\r\n // Ghana Card / Ghana National ID\r\n if (u.includes(\"GHANA\")) {\r\n if (isDocumentFlow) return { icon: \"\uD83E\uDEAA\", desc: \"Capture or upload your Ghana Card\", requiresBack: true };\r\n const extra = withFace ? \" + selfie photo\" : \"\";\r\n return { icon: \"\uD83E\uDEAA\", desc: `Enter your Ghana Card number${extra}`, requiresBack: false };\r\n }\r\n\r\n // SSNIT (Ghana social security)\r\n if (u.includes(\"SSNIT\"))\r\n return { icon: \"\uD83C\uDFDB\uFE0F\", desc: \"Enter your SSNIT number\", requiresBack: false };\r\n\r\n // Kenya National ID\r\n if (u.includes(\"KENYA\") || (u.includes(\"NATIONAL\") && u.includes(\"KENYA\")))\r\n return { icon: \"\uD83C\uDD94\", desc: \"Enter your Kenya National ID number\", requiresBack: false };\r\n\r\n // TIN\r\n if (u.includes(\"TIN\") || u.includes(\"TAX IDENTIFICATION\"))\r\n return { icon: \"\uD83E\uDDFE\", desc: \"Enter your Tax Identification Number (TIN)\", requiresBack: false };\r\n\r\n // CAC / Company registration\r\n if (u.includes(\"CAC\") || u.includes(\"CORPORATE AFFAIRS\") || u.includes(\"COMPANY\"))\r\n return { icon: \"\uD83C\uDFE2\", desc: advanced ? \"Enter RC number, company name & type\" : \"Enter your company registration number\", requiresBack: false };\r\n\r\n // Voter / PVC\r\n if (u.includes(\"VOTER\") || u.includes(\"PVC\")) {\r\n const requiresBack = requiresBackSide(typeName);\r\n return { \r\n icon: \"\uD83D\uDDF3\uFE0F\", \r\n desc: isDocumentFlow \r\n ? `Capture or upload your voter's card${requiresBack ? \" (front & back)\" : \"\"}` \r\n : \"Enter your voter ID number\",\r\n requiresBack: isDocumentFlow ? requiresBack : false\r\n };\r\n }\r\n\r\n // Passport\r\n if (u.includes(\"PASSPORT\"))\r\n return { icon: \"\uD83D\uDCD8\", desc: isDocumentFlow ? \"Capture or upload your passport\" : \"Enter your passport number\", requiresBack: false };\r\n\r\n // Driver's license\r\n if (u.includes(\"DRIVER\") || u.includes(\"LICENSE\") || u.includes(\"LICENCE\")) {\r\n const requiresBack = requiresBackSide(typeName);\r\n return { \r\n icon: \"\uD83D\uDE97\", \r\n desc: isDocumentFlow \r\n ? `Capture or upload your driver's license${requiresBack ? \" (front & back)\" : \"\"}` \r\n : \"Enter your driver's license number\",\r\n requiresBack: isDocumentFlow ? requiresBack : false\r\n };\r\n }\r\n\r\n // National ID card (generic)\r\n if (u.includes(\"NATIONAL ID\") || (u.includes(\"NATIONAL\") && u.includes(\"CARD\"))) {\r\n const requiresBack = requiresBackSide(typeName);\r\n return { \r\n icon: \"\uD83E\uDEAA\", \r\n desc: isDocumentFlow \r\n ? `Capture or upload your ID card${requiresBack ? \" (front & back)\" : \"\"}` \r\n : \"Enter your National ID number\",\r\n requiresBack: isDocumentFlow ? requiresBack : false\r\n };\r\n }\r\n\r\n // Face liveness / comparison\r\n if (u.includes(\"LIVENESS\") || u.includes(\"FACE COMPARISON\") || u.includes(\"FACE MATCH\"))\r\n return { icon: \"\uD83E\uDD33\", desc: \"We'll capture a short selfie video to verify you\", requiresBack: false };\r\n\r\n return {\r\n icon: isDocumentFlow ? \"\uD83D\uDCC4\" : \"\uD83C\uDD94\",\r\n desc: isDocumentFlow ? \"Capture or upload your document\" : \"Enter your ID number\",\r\n requiresBack: false,\r\n };\r\n}\r\n\r\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n// SmartComplyFlow\r\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n// Add CSS animation keyframes for spin animations\r\nconst style = document.createElement('style');\r\nstyle.textContent = `\r\n @keyframes sc-spin {\r\n 0% { transform: rotate(0deg); }\r\n 100% { transform: rotate(360deg); }\r\n }\r\n`;\r\nif (!document.head.querySelector('style[data-sc-animations]')) {\r\n style.setAttribute('data-sc-animations', 'true');\r\n document.head.appendChild(style);\r\n}\r\n\r\nexport class SmartComplyFlow {\r\n private sdk: SmartComply;\r\n private options: FlowOptions;\r\n private theme: ThemeColors = getTheme(\"default\");\r\n\r\n // DOM\r\n private overlay: HTMLDivElement | null = null;\r\n private modal: HTMLDivElement | null = null;\r\n private contentArea: HTMLDivElement | null = null;\r\n private progressBar: HTMLDivElement | null = null;\r\n private stepLabel: HTMLDivElement | null = null;\r\n private brandLabel: HTMLDivElement | null = null;\r\n\r\n // State\r\n private sdkConfig: SDKInitConfig | null = null;\r\n private currentStep: StepName = \"loading\";\r\n private selectedCountry: string = \"\";\r\n private selectedChannelId: number = 0;\r\n private selectedChannelFields: { type: string; label: string; options?: string[] }[] = [];\r\n private selectedIdType: string = \"\"; // Canonical code (e.g., \"national_id\", \"nin_with_face\")\r\n private selectedIdTypeName: string = \"\"; // Display name (e.g., \"National Identity Number with Face (NIN)\")\r\n private collectedFields: Record<string, string> = {};\r\n private idNumber: string = \"\";\r\n private documentBlob: Blob | null = null;\r\n private documentBackBlob: Blob | null = null;\r\n private identityCheckId: number | null = null;\r\n private verificationResult: VerifyIdentityResponse | null = null;\r\n private livenessEntryId: number | null = null;\r\n private isDestroyed = false;\r\n private headerBackBtn: HTMLButtonElement | null = null;\r\n\r\n // Session expiry\r\n private sessionExpiryTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n // Status polling (result screen)\r\n private _pollStatusTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n // Components\r\n private docCapture: DocumentCapture | null = null;\r\n\r\n private constructor(options: FlowOptions) {\r\n this.options = options;\r\n this.sdk = new SmartComply({\r\n apiKey: options.apiKey,\r\n clientId: options.clientId,\r\n environment: options.environment || \"sandbox\",\r\n timeout: options.timeout,\r\n });\r\n }\r\n\r\n /**\r\n * Open the SmartComply verification flow.\r\n *\r\n * Usage:\r\n * SmartComplyFlow.open({\r\n * apiKey: \"pk_live_...\",\r\n * clientId: \"uuid-...\",\r\n * environment: \"production\",\r\n * onComplete: (result) => console.log(\"Done!\", result),\r\n * onError: (err) => console.error(err),\r\n * onClose: () => console.log(\"Closed\"),\r\n * });\r\n */\r\n static open(options: FlowOptions): SmartComplyFlow {\r\n const flow = new SmartComplyFlow(options);\r\n flow.mount();\r\n flow.initialize();\r\n return flow;\r\n }\r\n\r\n /**\r\n * Close and destroy the flow widget.\r\n */\r\n close(): void {\r\n this.isDestroyed = true;\r\n this.docCapture?.destroy();\r\n if (this.sessionExpiryTimer) {\r\n clearTimeout(this.sessionExpiryTimer);\r\n this.sessionExpiryTimer = null;\r\n }\r\n if (this._pollStatusTimer) {\r\n clearTimeout(this._pollStatusTimer);\r\n this._pollStatusTimer = null;\r\n }\r\n\r\n if (this.overlay) {\r\n this.overlay.style.opacity = \"0\";\r\n setTimeout(() => {\r\n if (this.overlay?.parentElement) {\r\n this.overlay.parentElement.removeChild(this.overlay);\r\n }\r\n this.overlay = null;\r\n this.modal = null;\r\n this.contentArea = null;\r\n }, 300);\r\n }\r\n\r\n this.options.onClose?.();\r\n }\r\n\r\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n // Initialization\r\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private mount(): void {\r\n // Inject keyframes\r\n this.injectStyles();\r\n\r\n // Overlay\r\n this.overlay = document.createElement(\"div\");\r\n this.overlay.id = \"sc-flow-overlay\";\r\n this.overlay.style.cssText = `\r\n position:fixed;inset:0;z-index:99999;\r\n display:flex;align-items:center;justify-content:center;\r\n background:${this.theme.overlay};\r\n backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);\r\n opacity:0;transition:opacity 0.3s ease;\r\n font-family:'Inter','Segoe UI',system-ui,-apple-system,sans-serif;\r\n `;\r\n\r\n // Modal\r\n this.modal = document.createElement(\"div\");\r\n this.modal.id = \"sc-flow-modal\";\r\n this.modal.style.cssText = `\r\n width:100%;max-width:440px;max-height:92vh;\r\n background:${this.theme.bg};\r\n border-radius:20px;overflow:hidden;\r\n box-shadow:${this.theme.shadow};\r\n display:flex;flex-direction:column;\r\n transform:translateY(20px) scale(0.97);\r\n transition:transform 0.35s cubic-bezier(0.16,1,0.3,1);\r\n `;\r\n\r\n // Header\r\n const header = this.createHeader();\r\n this.modal.appendChild(header);\r\n\r\n // Progress bar\r\n const progressWrap = document.createElement(\"div\");\r\n progressWrap.style.cssText = `height:3px;background:${this.theme.shimmer};`;\r\n this.progressBar = document.createElement(\"div\");\r\n this.progressBar.style.cssText = `\r\n height:100%;width:0%;background:linear-gradient(90deg,${this.theme.primary},${this.theme.primaryHover});\r\n border-radius:0 2px 2px 0;transition:width 0.5s ease;\r\n `;\r\n progressWrap.appendChild(this.progressBar);\r\n this.modal.appendChild(progressWrap);\r\n\r\n // Content area (scrollable)\r\n this.contentArea = document.createElement(\"div\");\r\n this.contentArea.id = \"sc-flow-content\";\r\n this.contentArea.style.cssText = `\r\n flex:1;overflow-y:auto;padding:20px 24px;\r\n -webkit-overflow-scrolling:touch;\r\n `;\r\n this.modal.appendChild(this.contentArea);\r\n\r\n // Footer\r\n const footer = this.createFooter();\r\n this.modal.appendChild(footer);\r\n\r\n this.overlay.appendChild(this.modal);\r\n document.body.appendChild(this.overlay);\r\n\r\n // Animate in\r\n requestAnimationFrame(() => {\r\n if (this.overlay) this.overlay.style.opacity = \"1\";\r\n if (this.modal) this.modal.style.transform = \"translateY(0) scale(1)\";\r\n });\r\n }\r\n\r\n private async initialize(): Promise<void> {\r\n this.showStep(\"loading\");\r\n\r\n try {\r\n // Create session\r\n await this.sdk.createSession();\r\n\r\n // C4: Start session expiry timer (warn 2 min before 30-min expiry)\r\n const expiresAt = this.sdk.sessionExpiresAt;\r\n if (expiresAt) {\r\n const expiresMs = new Date(expiresAt).getTime() - Date.now();\r\n const warnMs = Math.max(expiresMs - 120000, 0); // warn 2 min before\r\n this.sessionExpiryTimer = setTimeout(() => {\r\n if (!this.isDestroyed && this.currentStep !== \"result\") {\r\n this.showErrorStep(\"Your session is about to expire. Please complete verification quickly or restart.\");\r\n }\r\n }, warnMs);\r\n }\r\n\r\n // Load config\r\n this.sdkConfig = await this.sdk.initializeConfig();\r\n\r\n // Apply theme from config\r\n if (this.sdkConfig.theme) {\r\n this.theme = getTheme(this.sdkConfig.theme);\r\n this.applyTheme();\r\n }\r\n\r\n // Update brand name\r\n if (this.brandLabel && this.sdkConfig.brand_name) {\r\n this.brandLabel.textContent = this.sdkConfig.brand_name;\r\n }\r\n\r\n if (this.isDestroyed) return;\r\n\r\n this.showStep(\"welcome\");\r\n\r\n } catch (err: any) {\r\n this.showErrorStep(err.message || \"Failed to initialize. Please try again.\");\r\n }\r\n }\r\n\r\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n // Step rendering\r\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private showStep(step: StepName): void {\r\n this.currentStep = step;\r\n if (!this.contentArea) return;\r\n\r\n // Update progress\r\n this.updateProgress();\r\n\r\n // Animate out current content\r\n const oldContent = this.contentArea.firstChild as HTMLElement | null;\r\n if (oldContent) {\r\n oldContent.style.cssText += \"opacity:0;transform:translateX(-20px);transition:all 0.2s ease;\";\r\n setTimeout(() => {\r\n if (this.contentArea) this.contentArea.innerHTML = \"\";\r\n this.renderStep(step);\r\n }, 200);\r\n } else {\r\n this.renderStep(step);\r\n }\r\n }\r\n\r\n private renderStep(step: StepName): void {\r\n if (!this.contentArea) return;\r\n\r\n const wrapper = document.createElement(\"div\");\r\n wrapper.style.cssText = \"opacity:0;transform:translateX(20px);transition:all 0.3s ease;\";\r\n\r\n switch (step) {\r\n case \"loading\":\r\n this.renderLoading(wrapper);\r\n break;\r\n case \"welcome\":\r\n this.renderWelcome(wrapper);\r\n break;\r\n case \"country\":\r\n this.renderCountrySelect(wrapper);\r\n break;\r\n case \"id_type\":\r\n this.renderIdTypeSelect(wrapper);\r\n break;\r\n case \"id_input\":\r\n this.renderIdInput(wrapper);\r\n break;\r\n case \"document_capture\":\r\n this.renderDocumentCapture(wrapper);\r\n break;\r\n case \"processing\":\r\n this.renderProcessing(wrapper);\r\n break;\r\n case \"liveness\":\r\n this.renderLiveness(wrapper);\r\n break;\r\n case \"result\":\r\n this.renderResult(wrapper);\r\n break;\r\n case \"error\":\r\n break; // handled separately\r\n }\r\n\r\n this.contentArea.appendChild(wrapper);\r\n\r\n // Animate in\r\n requestAnimationFrame(() => {\r\n wrapper.style.opacity = \"1\";\r\n wrapper.style.transform = \"translateX(0)\";\r\n });\r\n }\r\n\r\n // \u2500\u2500 Loading \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private renderLoading(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:300px;gap:16px;\";\r\n\r\n const spinnerWrap = document.createElement(\"div\");\r\n spinnerWrap.style.cssText = \"position:relative;width:60px;height:60px;flex-shrink:0;\";\r\n\r\n const ring = document.createElement(\"div\");\r\n ring.style.cssText = `\r\n position:absolute;inset:0;border-radius:50%;\r\n border:3px solid ${this.theme.border};\r\n border-top-color:${this.theme.primary};\r\n animation:sc-spin 0.9s linear infinite;\r\n `;\r\n const centre = document.createElement(\"div\");\r\n centre.style.cssText = `\r\n position:absolute;inset:0;\r\n display:flex;align-items:center;justify-content:center;\r\n font-size:22px;\r\n `;\r\n centre.textContent = \"\\uD83D\\uDEE1\\uFE0F\";\r\n spinnerWrap.appendChild(ring);\r\n spinnerWrap.appendChild(centre);\r\n container.appendChild(spinnerWrap);\r\n\r\n const label = document.createElement(\"div\");\r\n label.style.cssText = `color:${this.theme.text};font-size:15px;font-weight:600;`;\r\n label.textContent = \"Setting up secure session\";\r\n container.appendChild(label);\r\n\r\n const sub = document.createElement(\"div\");\r\n sub.style.cssText = `color:${this.theme.textMuted};font-size:12px;text-align:center;max-width:220px;line-height:1.5;`;\r\n sub.textContent = \"Connecting to the verification service...\";\r\n container.appendChild(sub);\r\n }\r\n\r\n // \u2500\u2500 Welcome \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private renderWelcome(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;text-align:center;gap:14px;\";\r\n\r\n const isDocFlow = this.isDocumentFlow();\r\n\r\n // Icon + badge row (side by side to save vertical space)\r\n const topRow = document.createElement(\"div\");\r\n topRow.style.cssText = \"display:flex;flex-direction:column;align-items:center;gap:10px;\";\r\n\r\n const iconWrap = document.createElement(\"div\");\r\n iconWrap.style.cssText = `\r\n width:58px;height:58px;border-radius:16px;\r\n display:flex;align-items:center;justify-content:center;\r\n font-size:26px;\r\n background:linear-gradient(135deg,${this.theme.primary}22,${this.theme.primaryGlow});\r\n border:1.5px solid ${this.theme.primary}33;\r\n `;\r\n iconWrap.textContent = isDocFlow ? \"\uD83E\uDEAA\" : \"\uD83D\uDEE1\uFE0F\";\r\n topRow.appendChild(iconWrap);\r\n\r\n const badge = document.createElement(\"div\");\r\n badge.style.cssText = `\r\n display:inline-flex;align-items:center;gap:5px;\r\n padding:3px 11px;border-radius:999px;\r\n font-size:10.5px;font-weight:600;letter-spacing:0.2px;\r\n background:${this.theme.primary}15;\r\n color:${this.theme.primary};\r\n border:1px solid ${this.theme.primary}30;\r\n `;\r\n badge.textContent = isDocFlow ? \"\uD83D\uDCC4 Document Verification\" : \"\uD83D\uDD0D Data Verification\";\r\n topRow.appendChild(badge);\r\n container.appendChild(topRow);\r\n\r\n // Title + subtitle (compact)\r\n const titleWrap = document.createElement(\"div\");\r\n titleWrap.style.cssText = \"display:flex;flex-direction:column;gap:5px;\";\r\n\r\n const title = document.createElement(\"h2\");\r\n title.style.cssText = `\r\n color:${this.theme.text};font-size:20px;font-weight:700;\r\n margin:0;line-height:1.2;\r\n `;\r\n title.textContent = \"Identity Verification\";\r\n titleWrap.appendChild(title);\r\n\r\n const desc = document.createElement(\"p\");\r\n desc.style.cssText = `\r\n color:${this.theme.textSecondary};font-size:13px;line-height:1.5;\r\n margin:0;max-width:300px;\r\n `;\r\n desc.textContent = isDocFlow\r\n ? \"Scan your ID document and take a quick selfie to confirm your identity.\"\r\n : \"Enter your ID details and take a quick selfie to confirm your identity.\";\r\n titleWrap.appendChild(desc);\r\n container.appendChild(titleWrap);\r\n\r\n // Steps preview \u2014 compact rows\r\n const steps = isDocFlow\r\n ? [\r\n { icon: \"\uD83E\uDEAA\", text: \"Choose your document type\", sub: \"Passport, National ID, Driver License\" },\r\n { icon: \"\uD83D\uDCF7\", text: \"Scan your document\", sub: \"Upload or capture a photo of your ID\" },\r\n { icon: \"\uD83E\uDD33\", text: \"Face check\", sub: \"Quick selfie to confirm it's you\" },\r\n ]\r\n : [\r\n { icon: \"\uD83C\uDD94\", text: \"Choose your ID type\", sub: \"NIN, BVN, Voter's Card and more\" },\r\n { icon: \"\uD83D\uDCDD\", text: \"Enter your ID details\", sub: \"Exactly as shown on your ID\" },\r\n { icon: \"\uD83E\uDD33\", text: \"Face check\", sub: \"Quick selfie to confirm it's you\" },\r\n ];\r\n\r\n const stepsWrap = document.createElement(\"div\");\r\n stepsWrap.style.cssText = `\r\n width:100%;display:flex;flex-direction:column;gap:0;\r\n border-radius:12px;overflow:hidden;\r\n border:1.5px solid ${this.theme.border};\r\n `;\r\n\r\n steps.forEach((step, i) => {\r\n const row = document.createElement(\"div\");\r\n row.style.cssText = `\r\n display:flex;align-items:center;gap:12px;\r\n padding:9px 14px;\r\n background:${this.theme.cardBg};\r\n ${i < steps.length - 1 ? `border-bottom:1px solid ${this.theme.border};` : \"\"}\r\n `;\r\n\r\n const iconEl = document.createElement(\"div\");\r\n iconEl.style.cssText = `\r\n width:28px;height:28px;border-radius:8px;flex-shrink:0;\r\n display:flex;align-items:center;justify-content:center;\r\n font-size:13px;\r\n background:${this.theme.primary}12;\r\n border:1px solid ${this.theme.primary}20;\r\n `;\r\n iconEl.textContent = step.icon;\r\n\r\n const textWrap = document.createElement(\"div\");\r\n textWrap.style.cssText = \"display:flex;flex-direction:column;gap:1px;text-align:left;\";\r\n\r\n const textEl = document.createElement(\"span\");\r\n textEl.style.cssText = `color:${this.theme.text};font-size:12.5px;font-weight:600;`;\r\n textEl.textContent = step.text;\r\n\r\n const subEl = document.createElement(\"span\");\r\n subEl.style.cssText = `color:${this.theme.textMuted};font-size:10.5px;`;\r\n subEl.textContent = step.sub;\r\n\r\n textWrap.appendChild(textEl);\r\n textWrap.appendChild(subEl);\r\n row.appendChild(iconEl);\r\n row.appendChild(textWrap);\r\n stepsWrap.appendChild(row);\r\n });\r\n\r\n container.appendChild(stepsWrap);\r\n\r\n // CTA\r\n const btn = this.createPrimaryButton(\"Get Started \u2192\");\r\n btn.style.cssText += \"margin-top:2px;\";\r\n btn.addEventListener(\"click\", () => this.showStep(\"country\"));\r\n container.appendChild(btn);\r\n\r\n // Trust badge\r\n const trust = document.createElement(\"div\");\r\n trust.style.cssText = `\r\n display:flex;align-items:center;gap:6px;\r\n color:${this.theme.textMuted};font-size:10.5px;\r\n `;\r\n trust.textContent = \"\uD83D\uDD12 End-to-end encrypted \u00B7 Powered by Adhere\";\r\n container.appendChild(trust);\r\n }\r\n\r\n // \u2500\u2500 Country Select \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private renderCountrySelect(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;gap:16px;\";\r\n\r\n const channels = this.sdkConfig?.channels || {};\r\n const countries = Object.keys(channels);\r\n\r\n // Auto-skip country selection if only one country available\r\n if (countries.length === 1) {\r\n this.selectedCountry = countries[0];\r\n this.showStep(\"id_type\");\r\n return;\r\n }\r\n\r\n const title = this.createStepTitle(\"Select your country\");\r\n container.appendChild(title);\r\n\r\n const subtitle = document.createElement(\"div\");\r\n subtitle.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin-top:-8px;`;\r\n subtitle.textContent = \"Choose the country that issued your ID\";\r\n container.appendChild(subtitle);\r\n\r\n for (const country of countries) {\r\n const card = this.createOptionCard(\r\n COUNTRY_LABELS[country] || country,\r\n `${channels[country].length} ID type${channels[country].length > 1 ? \"s\" : \"\"} available`,\r\n () => {\r\n this.selectedCountry = country;\r\n this.showStep(\"id_type\");\r\n }\r\n );\r\n container.appendChild(card);\r\n }\r\n }\r\n\r\n // \u2500\u2500 ID Type Select \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private renderIdTypeSelect(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;gap:16px;\";\r\n\r\n const globalDocFlow = this.isDocumentFlow();\r\n\r\n const title = this.createStepTitle(globalDocFlow ? \"Select document type\" : \"Select ID type\");\r\n container.appendChild(title);\r\n\r\n const subtitle = document.createElement(\"div\");\r\n subtitle.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin-top:-8px;`;\r\n subtitle.textContent = globalDocFlow\r\n ? \"Choose the document you want to scan\"\r\n : \"Choose the ID you want to verify\";\r\n container.appendChild(subtitle);\r\n\r\n const channels = this.sdkConfig?.channels || {};\r\n const idTypes = channels[this.selectedCountry] || [];\r\n\r\n for (const idType of idTypes) {\r\n const typeName = typeof idType === \"string\" ? idType : idType.name;\r\n // Use code (canonical) for API calls, fallback to name for backward compatibility\r\n const typeCode = typeof idType === \"string\" ? idType : (idType.code || idType.name);\r\n // Detect per-channel: does THIS specific channel have upload fields?\r\n const channelFields: any[] = typeof idType !== \"string\" ? (idType.fields || []) : [];\r\n const isThisDocFlow = channelFields.some((f: any) => f.type === \"upload\") || globalDocFlow;\r\n const info = resolveIdTypeInfo(typeName, isThisDocFlow);\r\n\r\n // Add back side indicator to subtitle if needed\r\n let subtitle = info.desc;\r\n if (info.requiresBack && isThisDocFlow) {\r\n subtitle += \" \u26A0\uFE0F Both sides required\";\r\n }\r\n\r\n const card = this.createOptionCard(\r\n `${info.icon} ${typeName}`,\r\n subtitle,\r\n () => {\r\n this.selectedIdType = typeCode; // Store canonical code for API\r\n this.selectedIdTypeName = typeName; // Keep display name for UI\r\n // Always reset first to avoid stale state when user goes back and changes selection\r\n this.selectedChannelId = 0;\r\n this.selectedChannelFields = [];\r\n if (typeof idType !== \"string\") {\r\n this.selectedChannelId = idType.id;\r\n this.selectedChannelFields = idType.fields || []; // guard null/undefined from backend\r\n }\r\n this.collectedFields = {};\r\n // Route: use explicit verification_type when set (more reliable than inspecting all channels)\r\n // Fallback to per-channel upload field check for mixed / unconfigured setups\r\n const hasUpload = (this.selectedChannelFields).some((f: any) => f.type === \"upload\");\r\n const vType = this.sdkConfig?.verification_type;\r\n const vTypes: string[] = vType ? (Array.isArray(vType) ? vType : [vType]) : [];\r\n const isDocChannel = hasUpload || (vTypes.length > 0 && vTypes.includes(\"document_verification\"));\r\n this.showStep(isDocChannel ? \"document_capture\" : \"id_input\");\r\n }\r\n );\r\n container.appendChild(card);\r\n }\r\n\r\n }\r\n\r\n // \u2500\u2500 ID Input (data verification \u2014 dynamic fields) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private renderIdInput(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;gap:16px;\";\r\n\r\n const dataFields = this.selectedChannelFields.filter((f) => f.type !== \"upload\");\r\n const info = resolveIdTypeInfo(this.selectedIdTypeName || this.selectedIdType, false);\r\n\r\n const title = this.createStepTitle(`${info.icon} ${this.selectedIdTypeName || this.selectedIdType}`);\r\n container.appendChild(title);\r\n\r\n const subtitle = document.createElement(\"div\");\r\n subtitle.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin-top:-8px;`;\r\n subtitle.textContent = dataFields.length > 0\r\n ? `Enter your ${this.selectedIdTypeName || this.selectedIdType} details exactly as they appear on your ID.`\r\n : \"Fill in the fields below to continue.\";\r\n container.appendChild(subtitle);\r\n\r\n // Edge case: no data fields configured \u2014 show fallback and allow submission\r\n if (dataFields.length === 0) {\r\n const empty = document.createElement(\"div\");\r\n empty.style.cssText = `\r\n padding:16px;border-radius:10px;\r\n background:${this.theme.cardBg};border:1px solid ${this.theme.border};\r\n color:${this.theme.textSecondary};font-size:13px;text-align:center;\r\n `;\r\n empty.textContent = \"No additional details required. Click below to continue.\";\r\n container.appendChild(empty);\r\n const autoBtn = this.createPrimaryButton(\"Continue\");\r\n autoBtn.addEventListener(\"click\", () => this.showStep(\"liveness\"));\r\n container.appendChild(autoBtn);\r\n return;\r\n }\r\n\r\n // Track input elements for validation\r\n const inputEls: { field: any; el: HTMLInputElement | HTMLSelectElement }[] = [];\r\n\r\n for (const field of dataFields) {\r\n const fieldKey = field.label.toLowerCase().replace(/[^a-z0-9]+/g, \"_\");\r\n\r\n const fieldWrap = document.createElement(\"div\");\r\n fieldWrap.style.cssText = \"display:flex;flex-direction:column;gap:6px;\";\r\n\r\n const label = document.createElement(\"label\");\r\n label.style.cssText = `color:${this.theme.textMuted};font-size:10px;font-weight:700;letter-spacing:0.6px;text-transform:uppercase;`;\r\n label.textContent = field.label;\r\n fieldWrap.appendChild(label);\r\n\r\n if (field.type === \"dropdown\" || field.type === \"select\") {\r\n // Dropdown field\r\n const select = document.createElement(\"select\");\r\n select.style.cssText = `\r\n width:100%;padding:13px 16px;border-radius:12px;\r\n font-size:15px;\r\n background:${this.theme.inputBg};\r\n color:${this.theme.text};\r\n border:2px solid ${this.theme.border};\r\n outline:none;box-sizing:border-box;\r\n cursor:pointer;transition:border-color 0.2s ease;\r\n `;\r\n const placeholder = document.createElement(\"option\");\r\n placeholder.value = \"\";\r\n placeholder.textContent = `Select ${field.label}`;\r\n placeholder.disabled = true;\r\n placeholder.selected = true;\r\n select.appendChild(placeholder);\r\n\r\n for (const opt of field.options || []) {\r\n const option = document.createElement(\"option\");\r\n option.value = opt;\r\n option.textContent = opt;\r\n select.appendChild(option);\r\n }\r\n\r\n select.addEventListener(\"focus\", () => { select.style.borderColor = this.theme.primary; });\r\n select.addEventListener(\"blur\", () => { select.style.borderColor = this.theme.border; });\r\n select.addEventListener(\"change\", () => {\r\n this.collectedFields[fieldKey] = select.value;\r\n updateSubmitState();\r\n });\r\n fieldWrap.appendChild(select);\r\n inputEls.push({ field, el: select });\r\n } else if (field.type === \"image\" || field.type === \"file\") {\r\n // File upload field \u2014 converts to base64 for API submission\r\n const fileInput = document.createElement(\"input\");\r\n fileInput.type = \"file\";\r\n fileInput.accept = \"image/*\";\r\n fileInput.style.cssText = `\r\n width:100%;padding:12px 16px;border-radius:12px;\r\n font-size:14px;font-weight:500;\r\n background:${this.theme.inputBg};\r\n color:${this.theme.text};\r\n border:2px dashed ${this.theme.border};\r\n outline:none;transition:border-color 0.2s ease;\r\n box-sizing:border-box;cursor:pointer;\r\n `;\r\n fileInput.addEventListener(\"focus\", () => {\r\n fileInput.style.borderColor = this.theme.primary;\r\n });\r\n fileInput.addEventListener(\"blur\", () => {\r\n fileInput.style.borderColor = this.theme.border;\r\n });\r\n fileInput.addEventListener(\"change\", () => {\r\n const file = fileInput.files?.[0];\r\n if (file) {\r\n const reader = new FileReader();\r\n reader.onload = () => {\r\n const base64 = (reader.result as string).split(\",\")[1] || \"\";\r\n this.collectedFields[fieldKey] = base64;\r\n updateSubmitState();\r\n };\r\n reader.readAsDataURL(file);\r\n }\r\n });\r\n fieldWrap.appendChild(fileInput);\r\n inputEls.push({ field, el: fileInput as any });\r\n } else {\r\n // Text input field\r\n const input = document.createElement(\"input\");\r\n input.type = \"text\";\r\n input.placeholder = `Enter ${field.label}`;\r\n input.maxLength = 50;\r\n input.style.cssText = `\r\n width:100%;padding:14px 16px;border-radius:12px;\r\n font-size:16px;font-weight:500;\r\n background:${this.theme.inputBg};\r\n color:${this.theme.text};\r\n border:2px solid ${this.theme.border};\r\n outline:none;transition:border-color 0.2s ease;\r\n box-sizing:border-box;\r\n letter-spacing:0.5px;\r\n `;\r\n input.addEventListener(\"focus\", () => {\r\n input.style.borderColor = this.theme.primary;\r\n });\r\n input.addEventListener(\"blur\", () => {\r\n input.style.borderColor = this.theme.border;\r\n });\r\n input.addEventListener(\"input\", () => {\r\n this.collectedFields[fieldKey] = input.value.trim();\r\n updateSubmitState();\r\n });\r\n fieldWrap.appendChild(input);\r\n inputEls.push({ field, el: input });\r\n }\r\n container.appendChild(fieldWrap);\r\n }\r\n\r\n // Error area\r\n const errorEl = document.createElement(\"div\");\r\n errorEl.id = \"sc-id-error\";\r\n errorEl.style.cssText = `\r\n color:${this.theme.error};font-size:13px;display:none;\r\n padding:8px 12px;border-radius:8px;background:${this.theme.errorBg};\r\n `;\r\n container.appendChild(errorEl);\r\n\r\n // Submit\r\n const submitBtn = this.createPrimaryButton(\"Verify & Continue\");\r\n submitBtn.disabled = true;\r\n submitBtn.style.opacity = \"0.5\";\r\n\r\n const updateSubmitState = () => {\r\n const allFilled = inputEls.every(({ el }) => el.value.trim().length > 0);\r\n submitBtn.disabled = !allFilled;\r\n submitBtn.style.opacity = allFilled ? \"1\" : \"0.5\";\r\n };\r\n\r\n submitBtn.addEventListener(\"click\", async () => {\r\n submitBtn.disabled = true;\r\n submitBtn.innerHTML = `<span style=\"display:inline-flex;align-items:center;justify-content:center;gap:8px;\"><span style=\"width:13px;height:13px;border-radius:50%;border:2px solid rgba(255,255,255,0.3);border-top-color:#fff;animation:sc-spin 0.6s linear infinite;display:inline-block;flex-shrink:0;\"></span>Verifying...</span>`;\r\n errorEl.style.display = \"none\";\r\n\r\n try {\r\n this.verificationResult = await this.sdk.onboarding.verify({\r\n identity_type_id: this.selectedChannelId,\r\n fields: { ...this.collectedFields },\r\n });\r\n\r\n if (this.verificationResult.status === \"verified\" || this.verificationResult.status === \"success\") {\r\n // Save the first collected field value as identifier for liveness\r\n const fieldValues = Object.values(this.collectedFields);\r\n this.idNumber = fieldValues[0] || \"\";\r\n // A4: Save identity_check_id from verify response to pass to liveness\r\n this.identityCheckId = (this.verificationResult as any).data?.identity_check_id || null;\r\n this.showStep(\"liveness\");\r\n } else {\r\n errorEl.textContent = this.verificationResult.message || \"Verification failed. Please check your details.\";\r\n errorEl.style.display = \"block\";\r\n submitBtn.textContent = \"Verify & Continue\";\r\n submitBtn.disabled = false;\r\n submitBtn.style.opacity = \"1\";\r\n }\r\n } catch (err: any) {\r\n // C3: Show field-level errors if available\r\n const fieldErrors = err.data?.errors;\r\n if (Array.isArray(fieldErrors) && fieldErrors.length > 0) {\r\n const messages = fieldErrors.map((e: any) => `${e.field}: ${e.message}`).join(\"\\n\");\r\n errorEl.textContent = messages;\r\n } else {\r\n errorEl.textContent = err.message || \"Verification failed\";\r\n }\r\n errorEl.style.display = \"block\";\r\n submitBtn.textContent = \"Verify & Continue\";\r\n submitBtn.disabled = false;\r\n submitBtn.style.opacity = \"1\";\r\n }\r\n });\r\n container.appendChild(submitBtn);\r\n\r\n\r\n // Focus first input\r\n const firstInput = inputEls[0]?.el;\r\n if (firstInput && firstInput instanceof HTMLInputElement) {\r\n setTimeout(() => firstInput.focus(), 350);\r\n }\r\n }\r\n\r\n // \u2500\u2500 Document Capture \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n \r\n private renderDocumentCapture(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;gap:16px;\";\r\n\r\n const title = this.createStepTitle(`Capture ${this.selectedIdTypeName || this.selectedIdType || \"your document\"}`);\r\n container.appendChild(title);\r\n\r\n const subtitle = document.createElement(\"div\");\r\n subtitle.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin-top:-8px;`;\r\n subtitle.textContent = \"Upload or capture your document photo. Ensure it's clear and readable.\";\r\n container.appendChild(subtitle);\r\n\r\n const captureContainer = document.createElement(\"div\");\r\n captureContainer.style.cssText = `\r\n width: 100%;\r\n max-width: 400px;\r\n margin: 0 auto;\r\n position: relative;\r\n overflow: hidden;\r\n border-radius: 12px;\r\n background: ${this.theme.cardBg};\r\n border: 2px solid ${this.theme.border};\r\n `;\r\n container.appendChild(captureContainer);\r\n\r\n // Use the new DocumentCapture component with front/back support\r\n this.docCapture = new DocumentCapture();\r\n this.docCapture\r\n .capture(captureContainer, this.theme, this.selectedIdTypeName || this.selectedIdType)\r\n .then(async (result: DocumentCaptureResult) => {\r\n await this.processDocumentCaptureResult(result, captureContainer, container);\r\n })\r\n .catch((err: any) => {\r\n console.error(\"Document capture failed:\", err);\r\n this.showErrorStep(err.message || \"Document capture failed. Please try again.\");\r\n });\r\n }\r\n\r\n // \u2500\u2500 Processing \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private renderProcessing(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;gap:20px;padding:20px 16px;min-height:400px;\";\r\n\r\n // Processing animation\r\n const animationWrap = document.createElement(\"div\");\r\n animationWrap.style.cssText = \"position:relative;width:80px;height:80px;\";\r\n\r\n const spinner = document.createElement(\"div\");\r\n spinner.style.cssText = `\r\n position:absolute;inset:0;border-radius:50%;\r\n border:4px solid ${this.theme.border};\r\n border-top-color:${this.theme.primary};\r\n animation:sc-spin 1s linear infinite;\r\n `;\r\n animationWrap.appendChild(spinner);\r\n\r\n const centerIcon = document.createElement(\"div\");\r\n centerIcon.style.cssText = `\r\n position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\r\n font-size:28px;\r\n `;\r\n centerIcon.textContent = \"\uD83D\uDD0D\";\r\n animationWrap.appendChild(centerIcon);\r\n container.appendChild(animationWrap);\r\n\r\n // Processing text\r\n const title = document.createElement(\"div\");\r\n title.style.cssText = `color:${this.theme.text};font-size:18px;font-weight:600;text-align:center;`;\r\n title.textContent = \"Processing Your Documents\";\r\n container.appendChild(title);\r\n\r\n const subtitle = document.createElement(\"div\");\r\n subtitle.style.cssText = `color:${this.theme.textSecondary};font-size:13px;text-align:center;max-width:280px;line-height:1.5;`;\r\n subtitle.textContent = \"Scanning and verifying your identity documents. This may take a few moments.\";\r\n container.appendChild(subtitle);\r\n\r\n // Processing steps\r\n const stepsContainer = document.createElement(\"div\");\r\n stepsContainer.style.cssText = `\r\n width:100%;max-width:400px;display:flex;flex-direction:column;gap:12px;\r\n margin-top:16px;\r\n `;\r\n\r\n const steps = [\r\n { id: 'uploading', text: 'Uploading documents', icon: '\uD83D\uDCE4' },\r\n { id: 'scanning', text: 'Scanning for information', icon: '\uD83D\uDD0D' },\r\n { id: 'verifying', text: 'Verifying authenticity', icon: '\u2713' },\r\n { id: 'analyzing', text: 'Analyzing document quality', icon: '\uD83D\uDD2C' }\r\n ];\r\n\r\n steps.forEach((step, index) => {\r\n const stepEl = document.createElement(\"div\");\r\n stepEl.style.cssText = `\r\n display:flex;align-items:center;gap:12px;padding:12px;border-radius:10px;\r\n background:${this.theme.cardBg};border:1px solid ${this.theme.border};\r\n transition:all 0.3s ease;\r\n `;\r\n stepEl.id = `processing-step-${step.id}`;\r\n\r\n const iconEl = document.createElement(\"div\");\r\n iconEl.style.cssText = `\r\n width:32px;height:32px;border-radius:8px;display:flex;align-items:center;justify-content:center;\r\n font-size:14px;background:${this.theme.shimmer};border:1px solid ${this.theme.border};\r\n `;\r\n iconEl.textContent = step.icon;\r\n iconEl.id = `step-icon-${step.id}`;\r\n\r\n const textEl = document.createElement(\"div\");\r\n textEl.style.cssText = `flex:1;color:${this.theme.textSecondary};font-size:13px;font-weight:500;`;\r\n textEl.textContent = step.text;\r\n textEl.id = `step-text-${step.id}`;\r\n\r\n const statusEl = document.createElement(\"div\");\r\n statusEl.style.cssText = `\r\n width:20px;height:20px;border-radius:50%;\r\n border:2px solid ${this.theme.border};\r\n position:relative;\r\n `;\r\n statusEl.id = `step-status-${step.id}`;\r\n\r\n stepEl.appendChild(iconEl);\r\n stepEl.appendChild(textEl);\r\n stepEl.appendChild(statusEl);\r\n stepsContainer.appendChild(stepEl);\r\n });\r\n\r\n container.appendChild(stepsContainer);\r\n\r\n // Start processing animation\r\n this.startProcessingAnimation();\r\n }\r\n\r\n private startProcessingAnimation(): void {\r\n const steps = ['uploading', 'scanning', 'verifying', 'analyzing'];\r\n let currentStepIndex = 0;\r\n\r\n const animateStep = (stepId: string) => {\r\n // Update step appearance\r\n const stepEl = document.getElementById(`processing-step-${stepId}`);\r\n const iconEl = document.getElementById(`step-icon-${stepId}`);\r\n const textEl = document.getElementById(`step-text-${stepId}`);\r\n const statusEl = document.getElementById(`step-status-${stepId}`);\r\n\r\n if (stepEl && iconEl && textEl && statusEl) {\r\n // Active state\r\n stepEl.style.borderColor = this.theme.primary;\r\n stepEl.style.background = `${this.theme.primary}10`;\r\n iconEl.style.background = this.theme.primary;\r\n iconEl.style.color = 'white';\r\n textEl.style.color = this.theme.text;\r\n textEl.style.fontWeight = '600';\r\n\r\n // Add spinner to status\r\n statusEl.innerHTML = `\r\n <div style=\"\r\n position:absolute;inset:2px;border-radius:50%;\r\n border:2px solid ${this.theme.border};\r\n border-top-color:${this.theme.primary};\r\n animation:sc-spin 0.8s linear infinite;\r\n \"></div>\r\n `;\r\n }\r\n\r\n // Move to next step after delay\r\n setTimeout(() => {\r\n // Complete current step\r\n if (stepEl && iconEl && textEl && statusEl) {\r\n stepEl.style.borderColor = this.theme.success;\r\n stepEl.style.background = `${this.theme.success}10`;\r\n iconEl.style.background = this.theme.success;\r\n statusEl.innerHTML = `\r\n <div style=\"\r\n position:absolute;inset:3px;border-radius:50%;\r\n background:${this.theme.success};\r\n display:flex;align-items:center;justify-content:center;\r\n color:white;font-size:10px;font-weight:bold;\r\n \">\u2713</div>\r\n `;\r\n }\r\n\r\n currentStepIndex++;\r\n if (currentStepIndex < steps.length) {\r\n animateStep(steps[currentStepIndex]);\r\n }\r\n }, 2000); // 2 seconds per step\r\n };\r\n\r\n // Start animation\r\n setTimeout(() => animateStep(steps[0]), 500);\r\n }\r\n\r\n \r\n /**\r\n * Process document capture result with front/back support\r\n */\r\n private async processDocumentCaptureResult(\r\n result: DocumentCaptureResult,\r\n captureContainer: HTMLElement,\r\n container: HTMLElement\r\n ): Promise<void> {\r\n // Store both front and back blobs\r\n this.documentBlob = result.front;\r\n this.documentBackBlob = result.back || null;\r\n \r\n // Process the front image through the existing flow\r\n await this.processDocumentBlob(result.front, captureContainer, container);\r\n \r\n // Log back image capture\r\n if (result.back) {\r\n console.log(\"Back image captured, size:\", result.back.size);\r\n }\r\n }\r\n\r\n /**\r\n * Process document blob - common method for both CameraView and DocumentCapture\r\n */\r\n private async processDocumentBlob(\r\n blob: Blob,\r\n captureContainer: HTMLElement,\r\n container: HTMLElement\r\n ): Promise<void> {\r\n const maxRetries = 2;\r\n let retryCount = 0;\r\n\r\n const attemptProcessing = async (): Promise<void> => {\r\n try {\r\n // Validate blob\r\n if (!blob || blob.size === 0) {\r\n throw new Error(\"Failed to capture document. Please try again.\");\r\n }\r\n if (blob.size > 2 * 1024 * 1024) {\r\n throw new Error(\"Document image is too large. Please retake in better lighting or use a clearer photo.\");\r\n }\r\n \r\n this.documentBlob = blob;\r\n\r\n // Show scanning state\r\n captureContainer.innerHTML = `\r\n <div style=\"display:flex;flex-direction:column;align-items:center;gap:14px;padding:28px 20px;\">\r\n <div style=\"position:relative;width:52px;height:52px;\">\r\n <div style=\"position:absolute;inset:0;border-radius:50%;border:3px solid ${this.theme.border};border-top-color:${this.theme.primary};animation:sc-spin 0.8s linear infinite;\"></div>\r\n <div style=\"position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:20px;\">\uD83D\uDD0D</div>\r\n </div>\r\n <div style=\"color:${this.theme.text};font-size:14px;font-weight:600;\">Scanning document...</div>\r\n <div style=\"color:${this.theme.textSecondary};font-size:12px;text-align:center;max-width:200px;line-height:1.5;\">Running OCR and verifying your identity</div>\r\n </div>`;\r\n\r\n // Create liveness entry with document\r\n const identifier = `DOC-${Date.now()}`;\r\n const COUNTRY_CODES: Record<string, string> = {\r\n nigeria: \"NG\", ghana: \"GH\", kenya: \"KE\",\r\n south_africa: \"ZA\", united_states: \"US\", united_kingdom: \"GB\", global: \"US\",\r\n };\r\n const country = COUNTRY_CODES[this.selectedCountry] || this.selectedCountry.toUpperCase().slice(0, 2);\r\n\r\n const deviceMeta = collectDeviceMetadata();\r\n let createResult;\r\n try {\r\n createResult = await this.sdk.liveness.create({\r\n identifier,\r\n identifier_type: this.selectedIdType,\r\n country,\r\n challenge_actions: [\"BLINK\", \"TURN_LEFT\", \"OPEN_MOUTH\"],\r\n document: blob,\r\n document_back: this.documentBackBlob || undefined,\r\n device_type: deviceMeta.device_type,\r\n os_name: deviceMeta.os_name,\r\n browser_timezone: deviceMeta.browser_timezone,\r\n fingerprint_id: deviceMeta.fingerprint_id,\r\n });\r\n } catch (apiError: any) {\r\n // Handle specific network and API errors\r\n if (apiError.message?.includes('fetch') || apiError.message?.includes('network') || apiError.code === 'NETWORK_ERROR') {\r\n throw new Error(\"Network connection failed. Please check your internet connection and try again.\");\r\n } else if (apiError.message?.includes('413') || apiError.message?.includes('too large')) {\r\n throw new Error(\"Document image is too large. Please use a smaller image or retake the photo.\");\r\n } else if (apiError.message?.includes('415') || apiError.message?.includes('format')) {\r\n throw new Error(\"Unsupported image format. Please use JPEG or PNG images.\");\r\n } else if (apiError.message?.includes('401') || apiError.message?.includes('unauthorized')) {\r\n throw new Error(\"Session expired. Please refresh the page and try again.\");\r\n } else if (apiError.message?.includes('429') || apiError.message?.includes('rate limit')) {\r\n throw new Error(\"Too many requests. Please wait a moment and try again.\");\r\n } else {\r\n throw new Error(apiError.message || \"Failed to process document. Please try again.\");\r\n }\r\n }\r\n\r\n this.livenessEntryId = createResult.id;\r\n\r\n // Check if document was expired\r\n const docOcr = (createResult as any).document_ocr;\r\n if (docOcr && docOcr.status === \"expired\") {\r\n throw new Error(docOcr.message || \"Document has expired. Please use a valid document.\");\r\n }\r\n\r\n // Check image quality\r\n const imgQuality = docOcr?.image_quality;\r\n const isBlurry = imgQuality?.is_blurry === true;\r\n const lowConfidence = imgQuality?.ocr_confidence !== undefined && imgQuality.ocr_confidence < 0.45;\r\n if (isBlurry || lowConfidence) {\r\n throw new Error(\"Image quality too low. Please ensure the document is well-lit and clearly visible.\");\r\n }\r\n\r\n // Show processing step instead of immediate success\r\n this.showStep(\"processing\");\r\n \r\n // Simulate processing time and then proceed to liveness\r\n setTimeout(() => {\r\n this.showStep(\"liveness\");\r\n }, 8000); // 8 seconds total processing time (4 steps \u00D7 2 seconds each)\r\n\r\n } catch (err: any) {\r\n console.error(\"Document processing failed:\", err);\r\n \r\n if (retryCount < maxRetries) {\r\n retryCount++;\r\n console.log(`Retrying document processing (attempt ${retryCount}/${maxRetries})`);\r\n \r\n // Show retry message\r\n if (captureContainer) {\r\n captureContainer.innerHTML = `\r\n <div style=\"display:flex;flex-direction:column;align-items:center;gap:16px;padding:28px 20px;text-align:center;\">\r\n <div style=\"position:relative;width:52px;height:52px;\">\r\n <div style=\"position:absolute;inset:0;border-radius:50%;border:3px solid ${this.theme.border};border-top-color:${this.theme.primary};animation:sc-spin 0.8s linear infinite;\"></div>\r\n <div style=\"position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:20px;\">\uD83D\uDD04</div>\r\n </div>\r\n <div style=\"color:${this.theme.text};font-size:14px;font-weight:600;\">Retrying...</div>\r\n <div style=\"color:${this.theme.textSecondary};font-size:12px;max-width:240px;line-height:1.5;\">Attempt ${retryCount} of ${maxRetries}</div>\r\n </div>`;\r\n }\r\n \r\n // Wait before retry\r\n await new Promise(resolve => setTimeout(resolve, 2000));\r\n return attemptProcessing();\r\n } else {\r\n // Final retry failed, show detailed error\r\n this.handleDocumentProcessingError(err, captureContainer);\r\n }\r\n }\r\n };\r\n\r\n await attemptProcessing();\r\n }\r\n\r\n private handleDocumentProcessingError(error: any, captureContainer: HTMLElement): void {\r\n let errorMessage = \"Document verification failed. Please try again.\";\r\n let canRetry = true;\r\n\r\n if (error.message) {\r\n if (error.message.includes(\"expired\")) {\r\n errorMessage = \"Document has expired. Please use a valid document.\";\r\n canRetry = false;\r\n } else if (error.message.includes(\"quality too low\")) {\r\n errorMessage = \"Image quality too low. Please ensure the document is well-lit and clearly visible.\";\r\n } else if (error.message.includes(\"Network\") || error.message.includes(\"fetch\")) {\r\n errorMessage = \"Network connection failed. Please check your internet connection and try again.\";\r\n } else if (error.message.includes(\"413\") || error.message.includes(\"too large\")) {\r\n errorMessage = \"Document image is too large. Please use a smaller image or retake the photo.\";\r\n } else if (error.message.includes(\"415\") || error.message.includes(\"format\")) {\r\n errorMessage = \"Unsupported image format. Please use JPEG or PNG images.\";\r\n }\r\n }\r\n\r\n if (captureContainer) {\r\n captureContainer.innerHTML = `\r\n <div style=\"display:flex;flex-direction:column;align-items:center;gap:16px;padding:28px 20px;text-align:center;\">\r\n <div style=\"width:56px;height:56px;border-radius:50%;background:${this.theme.errorBg || '#FEE'};border:3px solid ${this.theme.error || '#DC3545'};display:flex;align-items:center;justify-content:center;font-size:26px;\">\u274C</div>\r\n <div style=\"color:${this.theme.text};font-size:14px;font-weight:700;\">Verification Failed</div>\r\n <div style=\"color:${this.theme.textSecondary};font-size:13px;max-width:240px;line-height:1.6;\">${errorMessage}</div>\r\n ${canRetry ? `\r\n <button id=\"retry-btn\" style=\"\r\n margin-top:8px;padding:12px 24px;border-radius:8px;\r\n background:${this.theme.primary};color:white;\r\n border:none;font-size:14px;font-weight:600;cursor:pointer;\r\n transition:all 0.2s ease;\r\n \">Try Again</button>\r\n ` : ''}\r\n </div>`;\r\n\r\n if (canRetry) {\r\n const retryBtn = captureContainer.querySelector(\"#retry-btn\") as HTMLButtonElement;\r\n if (retryBtn) {\r\n retryBtn.addEventListener(\"click\", () => {\r\n this.showStep(\"document_capture\");\r\n });\r\n }\r\n }\r\n } else {\r\n this.showErrorStep(errorMessage);\r\n }\r\n }\r\n\r\n // \u2500\u2500 Liveness \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private renderLiveness(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;gap:16px;\";\r\n\r\n const title = this.createStepTitle(\"Face verification\");\r\n container.appendChild(title);\r\n\r\n const desc = document.createElement(\"div\");\r\n desc.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin-top:-8px;line-height:1.5;`;\r\n desc.textContent = \"Position your face in the oval and follow the on-screen instructions.\";\r\n container.appendChild(desc);\r\n\r\n // Liveness mount point\r\n const livenessContainer = document.createElement(\"div\");\r\n livenessContainer.style.cssText = \"margin:8px 0;\";\r\n container.appendChild(livenessContainer);\r\n\r\n const identifier = this.idNumber || `DOC-${Date.now()}`;\r\n const COUNTRY_CODES: Record<string, string> = {\r\n nigeria: \"NG\",\r\n ghana: \"GH\",\r\n kenya: \"KE\",\r\n south_africa: \"ZA\",\r\n united_states: \"US\",\r\n united_kingdom: \"GB\",\r\n global: \"US\",\r\n };\r\n const country = COUNTRY_CODES[this.selectedCountry] || this.selectedCountry.toUpperCase().slice(0, 2);\r\n\r\n // Start liveness check (this handles camera, detection, recording, submission)\r\n // If livenessEntryId exists (document flow), reuse it instead of creating a new one\r\n this.sdk.liveness\r\n .startCheck(\r\n livenessContainer,\r\n {\r\n identifier,\r\n identifier_type: this.selectedIdType,\r\n country,\r\n document: this.documentBlob || undefined,\r\n document_back: this.documentBackBlob || undefined,\r\n identity_check: this.identityCheckId || undefined,\r\n },\r\n [\"BLINK\", \"TURN_LEFT\", \"OPEN_MOUTH\"] as ChallengeAction[],\r\n this.livenessEntryId || undefined\r\n )\r\n .then((result) => {\r\n this.showResult(result);\r\n })\r\n .catch((err) => {\r\n this.showErrorStep(err.message || \"Liveness verification failed. Please try again.\");\r\n });\r\n }\r\n\r\n // \u2500\u2500 Result \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private showResult(submitResult: LivenessSubmitResponse): void {\r\n this.currentStep = \"result\";\r\n this.updateProgress();\r\n\r\n if (!this.contentArea) return;\r\n this.contentArea.innerHTML = \"\";\r\n\r\n const wrapper = document.createElement(\"div\");\r\n wrapper.style.cssText = `\r\n display:flex;flex-direction:column;align-items:center;\r\n text-align:center;gap:16px;padding:20px 0;\r\n opacity:0;transform:scale(0.95);transition:all 0.4s ease;\r\n `;\r\n\r\n // Icon \u2014 starts as a spinner, updates when status resolves\r\n const iconWrap = document.createElement(\"div\");\r\n iconWrap.style.cssText = `\r\n width:80px;height:80px;border-radius:50%;\r\n display:flex;align-items:center;justify-content:center;\r\n font-size:36px;\r\n background:${this.theme.cardBg};\r\n border:3px solid ${this.theme.border};\r\n `;\r\n iconWrap.innerHTML = `<div style=\"width:32px;height:32px;border-radius:50%;border:3px solid ${this.theme.border};border-top-color:${this.theme.primary};animation:sc-spin 0.9s linear infinite;\"></div>`;\r\n wrapper.appendChild(iconWrap);\r\n\r\n const title = document.createElement(\"h2\");\r\n title.style.cssText = `color:${this.theme.text};font-size:20px;font-weight:700;margin:0;`;\r\n title.textContent = \"Verification Submitted\";\r\n wrapper.appendChild(title);\r\n\r\n const desc = document.createElement(\"p\");\r\n desc.style.cssText = `color:${this.theme.textSecondary};font-size:14px;line-height:1.6;margin:0;max-width:300px;`;\r\n desc.textContent = \"Processing your identity check. This takes around 30 seconds.\";\r\n wrapper.appendChild(desc);\r\n\r\n // Details card\r\n const details = document.createElement(\"div\");\r\n details.style.cssText = `\r\n width:100%;padding:16px;border-radius:12px;\r\n background:${this.theme.cardBg};border:1px solid ${this.theme.border};\r\n text-align:left;\r\n `;\r\n // Status badge \u2014 mutable DOM node so polling can update it\r\n const statusBadge = document.createElement(\"span\");\r\n statusBadge.style.cssText = `font-size:12px;font-weight:600;color:${this.theme.warning};`;\r\n statusBadge.textContent = \"Processing\u2026\";\r\n\r\n const statusRow = document.createElement(\"div\");\r\n statusRow.style.cssText = \"display:flex;justify-content:space-between;margin-bottom:8px;\";\r\n statusRow.innerHTML = `<span style=\"color:${this.theme.textMuted};font-size:12px;\">Status</span>`;\r\n statusRow.appendChild(statusBadge);\r\n\r\n // Build rows via DOM (not innerHTML+=) to keep statusBadge live in the document\r\n const entryRow = document.createElement(\"div\");\r\n entryRow.style.cssText = \"display:flex;justify-content:space-between;margin-bottom:8px;\";\r\n entryRow.innerHTML = `\r\n <span style=\"color:${this.theme.textMuted};font-size:12px;\">Entry ID</span>\r\n <span style=\"color:${this.theme.text};font-size:12px;font-weight:600;\">${submitResult.id}</span>\r\n `;\r\n details.appendChild(entryRow);\r\n details.appendChild(statusRow);\r\n\r\n const submittedRow = document.createElement(\"div\");\r\n submittedRow.style.cssText = \"display:flex;justify-content:space-between;margin-top:8px;\";\r\n submittedRow.innerHTML = `\r\n <span style=\"color:${this.theme.textMuted};font-size:12px;\">Submitted</span>\r\n <span style=\"color:${this.theme.text};font-size:12px;\">${submitResult.submitted_at ? new Date(submitResult.submitted_at).toLocaleString() : \"Just now\"}</span>\r\n `;\r\n details.appendChild(submittedRow);\r\n wrapper.appendChild(details);\r\n\r\n // Failure reason \u2014 hidden until status = failed\r\n const failureMsg = document.createElement(\"div\");\r\n failureMsg.style.cssText = `\r\n display:none;width:100%;padding:12px 14px;border-radius:10px;\r\n background:${this.theme.errorBg};border:1px solid ${this.theme.error};\r\n color:${this.theme.error};font-size:12px;text-align:left;line-height:1.5;\r\n `;\r\n wrapper.appendChild(failureMsg);\r\n\r\n // Done button\r\n const doneBtn = this.createPrimaryButton(\"Done\");\r\n let finalStatus = submitResult.status as string;\r\n doneBtn.addEventListener(\"click\", () => {\r\n if (this._pollStatusTimer) { clearTimeout(this._pollStatusTimer); this._pollStatusTimer = null; }\r\n this.options.onComplete?.({\r\n entryId: submitResult.id,\r\n sessionId: this.sdk.sessionToken,\r\n status: finalStatus,\r\n submittedAt: submitResult.submitted_at,\r\n verificationResult: this.verificationResult || undefined,\r\n });\r\n this.close();\r\n });\r\n wrapper.appendChild(doneBtn);\r\n\r\n this.contentArea.appendChild(wrapper);\r\n\r\n requestAnimationFrame(() => {\r\n wrapper.style.opacity = \"1\";\r\n wrapper.style.transform = \"scale(1)\";\r\n });\r\n\r\n // Start polling for the async result\r\n this._startStatusPolling(\r\n submitResult.id,\r\n iconWrap,\r\n statusBadge,\r\n title,\r\n desc,\r\n failureMsg,\r\n (resolved) => { finalStatus = resolved; }\r\n );\r\n }\r\n\r\n private _startStatusPolling(\r\n entryId: number,\r\n iconWrap: HTMLElement,\r\n statusBadge: HTMLElement,\r\n title: HTMLElement,\r\n desc: HTMLElement,\r\n failureMsg: HTMLElement,\r\n onResolved: (status: string) => void\r\n ): void {\r\n const MAX_POLLS = 25; // 25 \u00D7 3 s = 75 s + 4 s initial = ~79 s max\r\n let polls = 0;\r\n\r\n // Hard 30 s UI timer \u2014 stops spinner even if backend is still processing\r\n let uiTimeoutId: ReturnType<typeof setTimeout> | null = setTimeout(() => {\r\n if (!this.isDestroyed) applyTimeout();\r\n }, 30000);\r\n const clearUiTimeout = () => { if (uiTimeoutId) { clearTimeout(uiTimeoutId); uiTimeoutId = null; } };\r\n\r\n const applyTimeout = () => {\r\n iconWrap.innerHTML = \"\u23F1\";\r\n iconWrap.style.background = this.theme.cardBg;\r\n iconWrap.style.border = `3px solid ${this.theme.warning}`;\r\n iconWrap.style.color = this.theme.warning;\r\n iconWrap.style.fontSize = \"30px\";\r\n statusBadge.style.color = this.theme.textMuted;\r\n statusBadge.textContent = \"Still processing\u2026\";\r\n title.textContent = \"Verification In Progress\";\r\n desc.textContent = \"Your verification is being processed. Your result will be delivered via your dashboard or webhook. You can safely close this.\";\r\n };\r\n\r\n const applyPassed = () => {\r\n clearUiTimeout();\r\n iconWrap.innerHTML = \"\u2713\";\r\n iconWrap.style.background = this.theme.successBg;\r\n iconWrap.style.border = `3px solid ${this.theme.success}`;\r\n iconWrap.style.color = this.theme.success;\r\n iconWrap.style.fontSize = \"36px\";\r\n statusBadge.style.color = this.theme.success;\r\n statusBadge.textContent = \"Verified \u2713\";\r\n title.textContent = \"Identity Verified\";\r\n desc.textContent = \"Your identity check passed successfully.\";\r\n };\r\n\r\n const applyFailed = (reason: string | null) => {\r\n clearUiTimeout();\r\n iconWrap.innerHTML = \"\u2715\";\r\n iconWrap.style.background = this.theme.errorBg;\r\n iconWrap.style.border = `3px solid ${this.theme.error}`;\r\n iconWrap.style.color = this.theme.error;\r\n iconWrap.style.fontSize = \"32px\";\r\n statusBadge.style.color = this.theme.error;\r\n statusBadge.textContent = \"Failed\";\r\n title.textContent = \"Verification Failed\";\r\n desc.textContent = \"Your identity check could not be completed.\";\r\n if (reason) {\r\n failureMsg.textContent = reason;\r\n failureMsg.style.display = \"block\";\r\n }\r\n };\r\n\r\n const poll = async () => {\r\n if (this.isDestroyed) return;\r\n polls++;\r\n try {\r\n const result = await this.sdk.liveness.pollResult(entryId);\r\n if (result.status === \"passed\") {\r\n onResolved(\"passed\");\r\n applyPassed();\r\n return;\r\n }\r\n if (result.status === \"failed\" || result.status === \"expired_document\") {\r\n onResolved(result.status);\r\n // Use backend failure_reason directly \u2014 it now contains clear actionable messages\r\n // e.g. \"ID photo quality too low \u2014 please retake in good lighting\"\r\n // or \"Your selfie does not match the photo on your ID\"\r\n const reason = result.failure_reason || (\r\n result.status === \"expired_document\"\r\n ? \"Your document has expired. Please use a valid ID.\"\r\n : \"Verification could not be completed. Please try again.\"\r\n );\r\n applyFailed(reason);\r\n return;\r\n }\r\n // Still pending/processing \u2014 schedule next poll if budget remains\r\n if (polls < MAX_POLLS && !this.isDestroyed) {\r\n this._pollStatusTimer = setTimeout(poll, 3000);\r\n } else if (!this.isDestroyed) {\r\n applyTimeout(); // budget exhausted \u2014 stop spinner, show timeout state\r\n }\r\n } catch {\r\n // Network hiccup \u2014 retry with a slightly longer delay\r\n if (polls < MAX_POLLS && !this.isDestroyed) {\r\n this._pollStatusTimer = setTimeout(poll, 5000);\r\n } else if (!this.isDestroyed) {\r\n applyTimeout(); // budget exhausted \u2014 stop spinner\r\n }\r\n }\r\n };\r\n\r\n // First poll after 4 s \u2014 gives Celery task time to complete\r\n this._pollStatusTimer = setTimeout(poll, 4000);\r\n }\r\n\r\n private renderResult(_container: HTMLElement): void {\r\n // Handled by showResult() directly\r\n }\r\n\r\n // \u2500\u2500 Error \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private showErrorStep(message: string): void {\r\n this.currentStep = \"error\";\r\n if (!this.contentArea) return;\r\n this.contentArea.innerHTML = \"\";\r\n\r\n const wrapper = document.createElement(\"div\");\r\n wrapper.style.cssText = `\r\n display:flex;flex-direction:column;align-items:center;\r\n text-align:center;gap:16px;padding:20px 0;\r\n `;\r\n\r\n const isCameraErr = /camera|permission|notallowed|notfound/i.test(message);\r\n const isNetworkErr = /network|timeout|connection|fetch/i.test(message);\r\n const isAuthErr = /session|token|expired|authentication/i.test(message);\r\n const errorIcon = isCameraErr ? \"\\uD83D\\uDCF7\" : isNetworkErr ? \"\\uD83D\\uDCE1\" : isAuthErr ? \"\\u23F1\" : \"\\u2717\";\r\n const errorTitle = isCameraErr ? \"Camera Access Required\"\r\n : isNetworkErr ? \"Connection Problem\"\r\n : isAuthErr ? \"Session Expired\"\r\n : \"Verification Failed\";\r\n\r\n const iconWrap = document.createElement(\"div\");\r\n iconWrap.style.cssText = `\r\n width:72px;height:72px;border-radius:50%;\r\n display:flex;align-items:center;justify-content:center;\r\n font-size:${errorIcon === \"\\u2717\" ? \"32px\" : \"28px\"};\r\n background:${this.theme.errorBg};\r\n border:3px solid ${this.theme.error};\r\n `;\r\n iconWrap.textContent = errorIcon;\r\n wrapper.appendChild(iconWrap);\r\n\r\n const title = document.createElement(\"h2\");\r\n title.style.cssText = `color:${this.theme.text};font-size:18px;font-weight:700;margin:0;`;\r\n title.textContent = errorTitle;\r\n wrapper.appendChild(title);\r\n\r\n const desc = document.createElement(\"p\");\r\n desc.style.cssText = `color:${this.theme.textSecondary};font-size:14px;line-height:1.6;margin:0;max-width:300px;`;\r\n desc.textContent = message;\r\n wrapper.appendChild(desc);\r\n\r\n const retryBtn = this.createPrimaryButton(\"Try Again\");\r\n retryBtn.addEventListener(\"click\", () => {\r\n // If session already exists, go back to welcome without re-initializing\r\n // (re-initializing would fail with CLIENT_ID_ALREADY_USED)\r\n if (this.sdk.sessionToken && this.sdkConfig) {\r\n this.showStep(\"welcome\");\r\n } else {\r\n // Only re-initialize if session was never created\r\n this.initialize();\r\n }\r\n });\r\n wrapper.appendChild(retryBtn);\r\n\r\n const closeBtn = this.createSecondaryButton(\"Close\");\r\n closeBtn.addEventListener(\"click\", () => {\r\n this.options.onError?.(new Error(message));\r\n this.close();\r\n });\r\n wrapper.appendChild(closeBtn);\r\n\r\n this.contentArea.appendChild(wrapper);\r\n }\r\n\r\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n // UI Helpers\r\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private createHeader(): HTMLElement {\r\n const header = document.createElement(\"div\");\r\n header.style.cssText = `\r\n display:flex;align-items:center;justify-content:space-between;\r\n padding:14px 20px;border-bottom:1px solid ${this.theme.border};\r\n `;\r\n\r\n // Left: back button + brand\r\n const leftArea = document.createElement(\"div\");\r\n leftArea.style.cssText = \"display:flex;align-items:center;gap:8px;min-width:0;\";\r\n\r\n this.headerBackBtn = document.createElement(\"button\");\r\n this.headerBackBtn.innerHTML = \"&#8592;\";\r\n this.headerBackBtn.style.cssText = `\r\n width:30px;height:30px;border-radius:8px;flex-shrink:0;\r\n display:none;align-items:center;justify-content:center;\r\n border:1.5px solid ${this.theme.border};cursor:pointer;\r\n font-size:16px;line-height:1;\r\n background:${this.theme.cardBg};color:${this.theme.text};\r\n transition:all 0.2s ease;\r\n `;\r\n this.headerBackBtn.addEventListener(\"mouseenter\", () => {\r\n if (this.headerBackBtn) {\r\n this.headerBackBtn.style.background = this.theme.shimmer;\r\n }\r\n });\r\n this.headerBackBtn.addEventListener(\"mouseleave\", () => {\r\n if (this.headerBackBtn) {\r\n this.headerBackBtn.style.background = this.theme.cardBg;\r\n }\r\n });\r\n leftArea.appendChild(this.headerBackBtn);\r\n\r\n this.brandLabel = document.createElement(\"div\");\r\n this.brandLabel.style.cssText = `\r\n font-size:15px;font-weight:700;color:${this.theme.text};\r\n white-space:nowrap;overflow:hidden;text-overflow:ellipsis;\r\n `;\r\n this.brandLabel.textContent = this.sdkConfig?.brand_name || \"SmartComply\";\r\n leftArea.appendChild(this.brandLabel);\r\n header.appendChild(leftArea);\r\n\r\n // Step indicator\r\n this.stepLabel = document.createElement(\"div\");\r\n this.stepLabel.style.cssText = `\r\n font-size:12px;color:${this.theme.textMuted};\r\n font-variant-numeric:tabular-nums;flex-shrink:0;\r\n `;\r\n header.appendChild(this.stepLabel);\r\n\r\n // Close button\r\n const closeBtn = document.createElement(\"button\");\r\n closeBtn.innerHTML = \"\u2715\";\r\n closeBtn.style.cssText = `\r\n width:32px;height:32px;border-radius:8px;flex-shrink:0;\r\n display:flex;align-items:center;justify-content:center;\r\n border:none;cursor:pointer;font-size:16px;\r\n background:${this.theme.shimmer};color:${this.theme.textMuted};\r\n transition:all 0.2s ease;\r\n `;\r\n closeBtn.addEventListener(\"mouseenter\", () => {\r\n closeBtn.style.background = this.theme.errorBg;\r\n closeBtn.style.color = this.theme.error;\r\n });\r\n closeBtn.addEventListener(\"mouseleave\", () => {\r\n closeBtn.style.background = this.theme.shimmer;\r\n closeBtn.style.color = this.theme.textMuted;\r\n });\r\n closeBtn.addEventListener(\"click\", () => this.close());\r\n header.appendChild(closeBtn);\r\n\r\n return header;\r\n }\r\n\r\n private createFooter(): HTMLElement {\r\n const footer = document.createElement(\"div\");\r\n footer.style.cssText = `\r\n padding:12px 20px;border-top:1px solid ${this.theme.border};\r\n display:flex;align-items:center;justify-content:center;gap:6px;\r\n `;\r\n\r\n const powered = document.createElement(\"span\");\r\n powered.style.cssText = `font-size:11px;color:${this.theme.textMuted};`;\r\n powered.textContent = \"Powered by \";\r\n\r\n const brand = document.createElement(\"span\");\r\n brand.style.cssText = `font-size:11px;font-weight:700;color:${this.theme.primary};`;\r\n brand.textContent = \"Adhere\";\r\n\r\n footer.appendChild(powered);\r\n footer.appendChild(brand);\r\n return footer;\r\n }\r\n\r\n private createStepTitle(text: string): HTMLElement {\r\n const el = document.createElement(\"h3\");\r\n el.style.cssText = `\r\n color:${this.theme.text};font-size:18px;font-weight:700;\r\n margin:0;\r\n `;\r\n el.textContent = text;\r\n return el;\r\n }\r\n\r\n private createOptionCard(\r\n title: string,\r\n subtitle: string,\r\n onClick: () => void\r\n ): HTMLElement {\r\n const card = document.createElement(\"button\");\r\n card.style.cssText = `\r\n width:100%;padding:16px;border-radius:12px;\r\n background:${this.theme.cardBg};\r\n border:2px solid ${this.theme.border};\r\n cursor:pointer;text-align:left;\r\n display:flex;align-items:center;justify-content:space-between;\r\n transition:all 0.2s ease;\r\n `;\r\n card.addEventListener(\"mouseenter\", () => {\r\n card.style.borderColor = this.theme.primary;\r\n card.style.background = this.theme.shimmer;\r\n card.style.transform = \"translateY(-1px)\";\r\n });\r\n card.addEventListener(\"mouseleave\", () => {\r\n card.style.borderColor = this.theme.border;\r\n card.style.background = this.theme.cardBg;\r\n card.style.transform = \"translateY(0)\";\r\n });\r\n card.addEventListener(\"click\", onClick);\r\n\r\n const textWrap = document.createElement(\"div\");\r\n\r\n const titleEl = document.createElement(\"div\");\r\n titleEl.style.cssText = `color:${this.theme.text};font-size:14px;font-weight:600;`;\r\n titleEl.textContent = title;\r\n textWrap.appendChild(titleEl);\r\n\r\n if (subtitle) {\r\n const subEl = document.createElement(\"div\");\r\n subEl.style.cssText = `color:${this.theme.textMuted};font-size:12px;margin-top:2px;`;\r\n subEl.textContent = subtitle;\r\n textWrap.appendChild(subEl);\r\n }\r\n\r\n const arrow = document.createElement(\"span\");\r\n arrow.style.cssText = `color:${this.theme.textMuted};font-size:18px;flex-shrink:0;`;\r\n arrow.textContent = \"\u2192\";\r\n\r\n card.appendChild(textWrap);\r\n card.appendChild(arrow);\r\n return card;\r\n }\r\n\r\n private createPrimaryButton(text: string): HTMLButtonElement {\r\n const btn = document.createElement(\"button\");\r\n btn.textContent = text;\r\n btn.style.cssText = `\r\n width:100%;padding:14px;border-radius:12px;\r\n font-size:15px;font-weight:600;\r\n background:${this.theme.primary};color:#fff;\r\n border:none;cursor:pointer;\r\n transition:all 0.2s ease;\r\n box-shadow:0 2px 8px ${this.theme.primaryGlow};\r\n `;\r\n btn.addEventListener(\"mouseenter\", () => {\r\n btn.style.background = this.theme.primaryHover;\r\n btn.style.transform = \"translateY(-1px)\";\r\n });\r\n btn.addEventListener(\"mouseleave\", () => {\r\n btn.style.background = this.theme.primary;\r\n btn.style.transform = \"translateY(0)\";\r\n });\r\n return btn;\r\n }\r\n\r\n private createSecondaryButton(text: string): HTMLButtonElement {\r\n const btn = document.createElement(\"button\");\r\n btn.textContent = text;\r\n btn.style.cssText = `\r\n width:100%;padding:12px;border-radius:12px;\r\n font-size:14px;font-weight:500;\r\n background:transparent;color:${this.theme.textSecondary};\r\n border:none;cursor:pointer;\r\n transition:all 0.2s ease;\r\n `;\r\n btn.addEventListener(\"mouseenter\", () => {\r\n btn.style.color = this.theme.text;\r\n });\r\n btn.addEventListener(\"mouseleave\", () => {\r\n btn.style.color = this.theme.textSecondary;\r\n });\r\n return btn;\r\n }\r\n\r\n private isDocumentFlow(): boolean {\r\n // 1. Check verification_type \u2014 handle both string and array from backend\r\n const vType = this.sdkConfig?.verification_type;\r\n if (vType) {\r\n const types: string[] = Array.isArray(vType) ? vType : [vType];\r\n if (types.includes(\"document_verification\")) return true;\r\n if (types.includes(\"data_verification\")) return false;\r\n }\r\n // 2. Fallback: inspect channel fields \u2014 any upload field = document flow\r\n const channels = this.sdkConfig?.channels || {};\r\n const allFields = (Object.values(channels) as any[])\r\n .flat()\r\n .flatMap((ch: any) => ch.fields || []);\r\n return allFields.some((f: any) => f.type === \"upload\");\r\n }\r\n\r\n private updateProgress(): void {\r\n const isDocFlow = this.isDocumentFlow();\r\n const countries = Object.keys(this.sdkConfig?.channels || {});\r\n const singleCountry = countries.length <= 1;\r\n\r\n // User-action steps only (what the user actually does \u2014 no loading/welcome/result)\r\n const actionSteps: StepName[] = (\r\n [\"country\", \"id_type\", isDocFlow ? \"document_capture\" : \"id_input\", \"liveness\"] as StepName[]\r\n ).filter((s) => !(s === \"country\" && singleCountry));\r\n\r\n const totalSteps = actionSteps.length;\r\n const actionIndex = actionSteps.indexOf(this.currentStep);\r\n\r\n const pct =\r\n this.currentStep === \"result\" ? 100\r\n : actionIndex >= 0 ? ((actionIndex + 1) / totalSteps) * 100\r\n : 0;\r\n\r\n if (this.progressBar) {\r\n this.progressBar.style.width = `${pct}%`;\r\n }\r\n if (this.stepLabel) {\r\n if (this.currentStep === \"loading\" || this.currentStep === \"welcome\") {\r\n this.stepLabel.textContent = \"\";\r\n } else if (this.currentStep === \"result\") {\r\n this.stepLabel.textContent = \"Complete \u2713\";\r\n } else if (actionIndex >= 0) {\r\n this.stepLabel.textContent = `Step ${actionIndex + 1} of ${totalSteps}`;\r\n } else {\r\n this.stepLabel.textContent = \"\";\r\n }\r\n }\r\n\r\n // Back button \u2014 show in header for navigable steps, hidden elsewhere\r\n if (this.headerBackBtn) {\r\n const countries = Object.keys(this.sdkConfig?.channels || {});\r\n const backTargets: Partial<Record<StepName, () => void>> = {\r\n id_type: () => this.showStep(countries.length > 1 ? \"country\" : \"welcome\"),\r\n country: () => this.showStep(\"welcome\"),\r\n id_input: () => this.showStep(\"id_type\"),\r\n document_capture: () => { this.docCapture?.destroy(); this.showStep(\"id_type\"); },\r\n };\r\n const backAction = backTargets[this.currentStep];\r\n if (backAction) {\r\n this.headerBackBtn.style.display = \"flex\";\r\n const newBtn = this.headerBackBtn.cloneNode(true) as HTMLButtonElement;\r\n newBtn.style.cssText = this.headerBackBtn.style.cssText;\r\n this.headerBackBtn.parentNode?.replaceChild(newBtn, this.headerBackBtn);\r\n this.headerBackBtn = newBtn;\r\n this.headerBackBtn.addEventListener(\"mouseenter\", () => {\r\n if (this.headerBackBtn) this.headerBackBtn.style.background = this.theme.shimmer;\r\n });\r\n this.headerBackBtn.addEventListener(\"mouseleave\", () => {\r\n if (this.headerBackBtn) this.headerBackBtn.style.background = this.theme.cardBg;\r\n });\r\n this.headerBackBtn.addEventListener(\"click\", backAction);\r\n } else {\r\n this.headerBackBtn.style.display = \"none\";\r\n }\r\n }\r\n }\r\n\r\n private applyTheme(): void {\r\n if (this.overlay) {\r\n this.overlay.style.background = this.theme.overlay;\r\n }\r\n if (this.modal) {\r\n this.modal.style.background = this.theme.bg;\r\n this.modal.style.boxShadow = this.theme.shadow;\r\n }\r\n }\r\n\r\n private injectStyles(): void {\r\n if (document.getElementById(\"sc-flow-styles\")) return;\r\n\r\n const style = document.createElement(\"style\");\r\n style.id = \"sc-flow-styles\";\r\n style.textContent = `\r\n @keyframes sc-spin {\r\n to { transform: rotate(360deg); }\r\n }\r\n @keyframes sc-pop {\r\n 0% { transform: scale(0.8); opacity: 0; }\r\n 50% { transform: scale(1.05); }\r\n 100% { transform: scale(1); opacity: 1; }\r\n }\r\n #sc-flow-modal * {\r\n box-sizing: border-box;\r\n }\r\n #sc-flow-modal::-webkit-scrollbar {\r\n width: 4px;\r\n }\r\n #sc-flow-content::-webkit-scrollbar {\r\n width: 4px;\r\n }\r\n #sc-flow-content::-webkit-scrollbar-thumb {\r\n background: rgba(128,128,128,0.3);\r\n border-radius: 4px;\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n}\r\n", "/**\r\n * Lightweight SDK logger.\r\n *\r\n * Debug output is suppressed in production. Enable verbose logging by calling\r\n * SDKLogger.setDebug(true) before initialising the SDK, or by setting the\r\n * global flag: window.__SC_DEBUG__ = true\r\n */\r\n\r\nconst PREFIX = \"[SmartComply SDK]\";\r\n\r\nfunction isDebugEnabled(): boolean {\r\n try {\r\n return !!(window as any).__SC_DEBUG__;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nexport const SDKLogger = {\r\n /** Emit an informational message (debug mode only). */\r\n info(message: string, ...args: unknown[]): void {\r\n if (!isDebugEnabled()) return;\r\n console.info(`${PREFIX} \u2139 ${message}`, ...args);\r\n },\r\n\r\n /** Emit a warning (always visible). */\r\n warn(message: string, ...args: unknown[]): void {\r\n console.warn(`${PREFIX} \u26A0 ${message}`, ...args);\r\n },\r\n\r\n /** Emit an error (always visible). */\r\n error(message: string, ...args: unknown[]): void {\r\n console.error(`${PREFIX} \u2716 ${message}`, ...args);\r\n },\r\n\r\n /** Emit a debug trace (debug mode only \u2014 lowest priority). */\r\n debug(message: string, ...args: unknown[]): void {\r\n if (!isDebugEnabled()) return;\r\n console.debug(`${PREFIX} \u2B21 ${message}`, ...args);\r\n },\r\n\r\n /** Log a timed group of related messages (debug mode only). */\r\n group(label: string, fn: () => void): void {\r\n if (!isDebugEnabled()) { fn(); return; }\r\n console.group(`${PREFIX} ${label}`);\r\n fn();\r\n console.groupEnd();\r\n },\r\n\r\n /**\r\n * Enable or disable verbose debug output at runtime.\r\n *\r\n * Example:\r\n * import { SDKLogger } from \"smartcomply-web-sdk\";\r\n * SDKLogger.setDebug(true);\r\n */\r\n setDebug(enabled: boolean): void {\r\n try {\r\n (window as any).__SC_DEBUG__ = enabled;\r\n } catch {\r\n /* no-op in non-browser environments */\r\n }\r\n },\r\n};\r\n", "/**\r\n * Camera permission utilities.\r\n *\r\n * Provides helpers to check, request and handle camera permissions in a\r\n * browser-consistent way. All functions are purely async and do NOT throw \u2014\r\n * they return a typed result so callers can handle each case explicitly.\r\n */\r\n\r\nexport type PermissionStatus =\r\n | \"granted\" // camera already accessible\r\n | \"prompt\" // permission dialog will appear on request\r\n | \"denied\" // user previously denied; cannot request again\r\n | \"unsupported\" // Permissions API or getUserMedia not available\r\n | \"unknown\"; // couldn't determine status\r\n\r\nexport interface CameraPermissionResult {\r\n status: PermissionStatus;\r\n /** Human-readable reason (populated on denied / unsupported). */\r\n reason?: string;\r\n}\r\n\r\n/**\r\n * Query the current camera permission state without prompting the user.\r\n *\r\n * Uses the Permissions API when available, falls back to \"unknown\" on older\r\n * browsers (e.g. Safari < 16).\r\n */\r\nexport async function queryCameraPermission(): Promise<CameraPermissionResult> {\r\n if (typeof navigator === \"undefined\" || !navigator.mediaDevices) {\r\n return { status: \"unsupported\", reason: \"getUserMedia is not supported in this browser.\" };\r\n }\r\n\r\n if (!navigator.permissions?.query) {\r\n return { status: \"unknown\" };\r\n }\r\n\r\n try {\r\n const result = await navigator.permissions.query({ name: \"camera\" as PermissionName });\r\n return { status: result.state as PermissionStatus };\r\n } catch {\r\n return { status: \"unknown\" };\r\n }\r\n}\r\n\r\n/**\r\n * Request camera access and return the resulting MediaStream.\r\n *\r\n * Maps browser-specific errors onto actionable `CameraPermissionResult`\r\n * values so callers can show the right UI instead of catching raw DOMExceptions.\r\n *\r\n * @param constraints - Optional MediaStreamConstraints override.\r\n */\r\nexport async function requestCameraAccess(\r\n constraints?: MediaStreamConstraints\r\n): Promise<{ stream: MediaStream; permission: CameraPermissionResult }> {\r\n const defaults: MediaStreamConstraints = {\r\n video: { facingMode: \"user\", width: { ideal: 640 }, height: { ideal: 480 } },\r\n audio: false,\r\n };\r\n\r\n try {\r\n const stream = await navigator.mediaDevices.getUserMedia(constraints ?? defaults);\r\n return { stream, permission: { status: \"granted\" } };\r\n } catch (err: any) {\r\n const name: string = err?.name ?? \"\";\r\n\r\n if (name === \"NotAllowedError\" || name === \"PermissionDeniedError\") {\r\n return {\r\n stream: null as any,\r\n permission: {\r\n status: \"denied\",\r\n reason: \"Camera access was denied. Please allow camera permissions in your browser settings and try again.\",\r\n },\r\n };\r\n }\r\n\r\n if (name === \"NotFoundError\" || name === \"DevicesNotFoundError\") {\r\n return {\r\n stream: null as any,\r\n permission: {\r\n status: \"unsupported\",\r\n reason: \"No camera was found. Please connect a camera and try again.\",\r\n },\r\n };\r\n }\r\n\r\n if (name === \"NotReadableError\" || name === \"TrackStartError\") {\r\n return {\r\n stream: null as any,\r\n permission: {\r\n status: \"unknown\",\r\n reason: \"Camera is already in use by another application. Please close it and try again.\",\r\n },\r\n };\r\n }\r\n\r\n return {\r\n stream: null as any,\r\n permission: {\r\n status: \"unknown\",\r\n reason: err?.message ?? \"Unable to access the camera.\",\r\n },\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Stop all tracks on a MediaStream and release the camera.\r\n * Safe to call with null/undefined.\r\n */\r\nexport function releaseCameraStream(stream: MediaStream | null | undefined): void {\r\n if (!stream) return;\r\n stream.getTracks().forEach((t) => t.stop());\r\n}\r\n\r\n/**\r\n * Returns true if the browser supports the camera APIs needed by the SDK.\r\n */\r\nexport function isCameraSupported(): boolean {\r\n return (\r\n typeof navigator !== \"undefined\" &&\r\n !!navigator.mediaDevices?.getUserMedia &&\r\n typeof MediaRecorder !== \"undefined\"\r\n );\r\n}\r\n", "/**\r\n * SDK-wide constants \u2014 single source of truth for limits, defaults and\r\n * backend-defined magic values.\r\n */\r\n\r\n// \u2500\u2500 API endpoints \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nexport const ENDPOINTS = {\r\n SESSION_CREATE: \"/v1/session/create/\",\r\n SDK_INITIALIZE: \"/v1/initialize/\",\r\n ONBOARDING_VERIFY: \"/v1/onboarding/verify/\",\r\n LIVENESS_CREATE: \"/v1/sdk/liveness/create/\",\r\n LIVENESS_SUBMIT: \"/v1/sdk/liveness/submit/\",\r\n AVAILABLE_CHANNELS: \"/v1/available-channels/\",\r\n} as const;\r\n\r\n// \u2500\u2500 Session \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n/** Backend session TTL in milliseconds (30 minutes). */\r\nexport const SESSION_TTL_MS = 30 * 60 * 1000;\r\n\r\n/** Warn the user this many ms before session expires. */\r\nexport const SESSION_WARN_BEFORE_MS = 2 * 60 * 1000;\r\n\r\n// \u2500\u2500 Network \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n/** Default request timeout in milliseconds. */\r\nexport const DEFAULT_TIMEOUT_MS = 30_000;\r\n\r\n/** Number of automatic retries on transient network errors. */\r\nexport const MAX_RETRIES = 2;\r\n\r\n/** Delay between retries in milliseconds. */\r\nexport const RETRY_DELAY_MS = 1_000;\r\n\r\n// \u2500\u2500 File uploads \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n/** Maximum document image size the backend accepts (5 MB). */\r\nexport const MAX_DOCUMENT_BYTES = 5 * 1024 * 1024;\r\n\r\n/** Maximum video size the backend accepts (50 MB). */\r\nexport const MAX_VIDEO_BYTES = 50 * 1024 * 1024;\r\n\r\n/** Maximum snapshot / autoshot size (2 MB). */\r\nexport const MAX_SNAPSHOT_BYTES = 2 * 1024 * 1024;\r\n\r\n/** Accepted MIME types for document images. */\r\nexport const ACCEPTED_IMAGE_TYPES = [\"image/jpeg\", \"image/png\", \"image/webp\"] as const;\r\n\r\n/** JPEG quality used when encoding captured frames (0\u20131). */\r\nexport const CAPTURE_JPEG_QUALITY = 0.92;\r\n\r\n// \u2500\u2500 Liveness challenge \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n/** Backend-accepted challenge actions (UPPERCASE). */\r\nexport const CHALLENGE_ACTIONS = [\"BLINK\", \"TURN_LEFT\", \"TURN_RIGHT\", \"TURN_HEAD\", \"OPEN_MOUTH\"] as const;\r\n\r\n/** Default set sent when the caller does not specify actions. */\r\nexport const DEFAULT_CHALLENGE_ACTIONS = [\"BLINK\", \"TURN_LEFT\", \"OPEN_MOUTH\"] as const;\r\n\r\n/** Time limit per liveness attempt in seconds. */\r\nexport const LIVENESS_TIME_LIMIT_SECONDS = 45;\r\n\r\n/** Milliseconds to pause after all actions before capturing the final snapshot. */\r\nexport const POST_ACTION_SETTLE_MS = 800;\r\n\r\n// \u2500\u2500 Camera \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n/** Ideal resolution for the front-facing liveness camera. */\r\nexport const CAMERA_IDEAL_WIDTH = 640;\r\nexport const CAMERA_IDEAL_HEIGHT = 480;\r\n\r\n/** Ideal resolution for rear-facing document capture camera. */\r\nexport const DOC_CAMERA_IDEAL_WIDTH = 1280;\r\nexport const DOC_CAMERA_IDEAL_HEIGHT = 960;\r\n\r\n/** Video bitrate used by MediaRecorder for liveness recordings (~1.4 MB / 45 s). */\r\nexport const RECORDING_BITS_PER_SECOND = 250_000;\r\n\r\n// \u2500\u2500 Face detection \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n/** Max milliseconds to wait for an initial face detection before proceeding. */\r\nexport const FACE_DETECT_TIMEOUT_MS = 10_000;\r\n\r\n/** Polling interval for the face-present check (ms). */\r\nexport const FACE_DETECT_POLL_MS = 100;\r\n\r\n// \u2500\u2500 UI / UX \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n/** How long (ms) the success overlay is shown before the flow advances. */\r\nexport const RESULT_OVERLAY_DURATION_MS = 2_800;\r\n\r\n/** localStorage key used to persist the browser fingerprint ID. */\r\nexport const FINGERPRINT_STORAGE_KEY = \"_adhere_fid\";\r\n\r\n/** z-index for the SDK overlay \u2014 high enough to sit above any app content. */\r\nexport const OVERLAY_Z_INDEX = 99_999;\r\n", "/**\r\n * LivenessUploader \u2014 thin wrapper around the HttpClient's uploadWithSession()\r\n * that adds:\r\n * - Progress callbacks (onProgress)\r\n * - Upload cancellation via AbortController\r\n * - Automatic retry on transient network failure (configurable)\r\n *\r\n * Used internally by LivenessModule.create() and LivenessModule.submit() when\r\n * the caller needs progress reporting (e.g. for a progress bar during video\r\n * upload on slow connections).\r\n */\r\n\r\nimport { HttpClient } from \"../../client/HttpClient\";\r\nimport { MAX_RETRIES, RETRY_DELAY_MS } from \"../../utils/constants\";\r\nimport { SDKLogger } from \"../../utils/logger\";\r\n\r\nexport interface UploadOptions {\r\n /** Called with a value 0\u20131 as the upload progresses. */\r\n onProgress?: (fraction: number) => void;\r\n\r\n /** Optional AbortSignal to cancel the upload mid-flight. */\r\n signal?: AbortSignal;\r\n\r\n /** Override the default number of retries on transient errors. */\r\n retries?: number;\r\n}\r\n\r\nexport class LivenessUploader {\r\n constructor(private http: HttpClient) {}\r\n\r\n /**\r\n * Upload a FormData payload to `path` with optional progress and\r\n * cancellation support.\r\n *\r\n * Falls back to the standard `uploadWithSession()` on browsers that do not\r\n * support XMLHttpRequest upload progress (very rare).\r\n */\r\n async upload<T>(\r\n path: string,\r\n formData: FormData,\r\n options: UploadOptions = {}\r\n ): Promise<T> {\r\n const { onProgress, signal, retries = MAX_RETRIES } = options;\r\n\r\n // If no progress callback is needed, delegate straight to HttpClient\r\n // which already has retry logic built in.\r\n if (!onProgress) {\r\n return this.http.uploadWithSession<T>(path, formData);\r\n }\r\n\r\n return this.uploadWithProgress<T>(path, formData, onProgress, signal, retries);\r\n }\r\n\r\n // \u2500\u2500 Private \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private async uploadWithProgress<T>(\r\n path: string,\r\n formData: FormData,\r\n onProgress: (fraction: number) => void,\r\n signal: AbortSignal | undefined,\r\n retriesLeft: number\r\n ): Promise<T> {\r\n const sessionToken = (this.http as any).sessionToken as string | null;\r\n if (!sessionToken) {\r\n throw new Error(\"SDK: No session token. Call sdk.createSession() first.\");\r\n }\r\n\r\n const baseUrl: string = (this.http as any).baseUrl as string;\r\n\r\n return new Promise<T>((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n\r\n // Propagate AbortSignal to XHR\r\n if (signal) {\r\n if (signal.aborted) {\r\n reject(new DOMException(\"Upload cancelled\", \"AbortError\"));\r\n return;\r\n }\r\n signal.addEventListener(\"abort\", () => xhr.abort(), { once: true });\r\n }\r\n\r\n xhr.open(\"POST\", `${baseUrl}${path}`, true);\r\n xhr.setRequestHeader(\"x-access-token\", sessionToken);\r\n\r\n xhr.upload.onprogress = (evt) => {\r\n if (evt.lengthComputable) {\r\n onProgress(evt.loaded / evt.total);\r\n }\r\n };\r\n\r\n xhr.onload = () => {\r\n onProgress(1);\r\n\r\n let envelope: any;\r\n try {\r\n envelope = JSON.parse(xhr.responseText);\r\n } catch {\r\n reject(new Error(`SDK: Non-JSON response from ${path} (${xhr.status})`));\r\n return;\r\n }\r\n\r\n if (xhr.status >= 200 && xhr.status < 300 && envelope.status !== \"error\") {\r\n SDKLogger.info(`Upload to ${path} succeeded`, { status: xhr.status });\r\n resolve(envelope.data as T);\r\n } else {\r\n const err = new Error(envelope.message || `Upload to ${path} failed (${xhr.status})`);\r\n (err as any).statusCode = xhr.status;\r\n (err as any).code = envelope.code;\r\n reject(err);\r\n }\r\n };\r\n\r\n xhr.onerror = async () => {\r\n SDKLogger.warn(`Upload to ${path} failed \u2014 network error`, { retriesLeft });\r\n\r\n if (retriesLeft > 0) {\r\n await new Promise((r) => setTimeout(r, RETRY_DELAY_MS));\r\n try {\r\n const result = await this.uploadWithProgress<T>(\r\n path, formData, onProgress, signal, retriesLeft - 1\r\n );\r\n resolve(result);\r\n } catch (retryErr) {\r\n reject(retryErr);\r\n }\r\n } else {\r\n reject(new Error(`SDK: Upload to ${path} failed after all retries.`));\r\n }\r\n };\r\n\r\n xhr.onabort = () => {\r\n reject(new DOMException(\"Upload cancelled by user\", \"AbortError\"));\r\n };\r\n\r\n xhr.send(formData);\r\n });\r\n }\r\n}\r\n"],
5
- "mappings": "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GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,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",
4
+ "sourcesContent": ["import { SmartComply } from \"./client/Smartcomply\";\r\nimport { SmartComplyFlow } from \"./flow/SmartComplyFlow\";\r\n\r\nexport default SmartComply;\r\nexport { SmartComply, SmartComplyFlow };\r\n\r\n// Config\r\nexport type { SDKConfig, Environment } from \"./client/Config\";\r\n\r\n// Flow types\r\nexport type { FlowOptions, FlowResult } from \"./flow/SmartComplyFlow\";\r\n\r\n// Onboarding types\r\nexport type {\r\n OnboardingType,\r\n VerifyIdentityRequest,\r\n VerifyIdentityResponse,\r\n SessionResponse,\r\n SDKInitConfig,\r\n} from \"./types/onboarding\";\r\n\r\n// Liveness types\r\nexport type {\r\n ChallengeAction,\r\n LivenessCreateRequest,\r\n LivenessCreateResponse,\r\n LivenessSubmitResponse,\r\n LivenessWebhookPayload,\r\n} from \"./types/liveness\";\r\n\r\n// Response envelope types\r\nexport type {\r\n ApiResponse,\r\n FieldError,\r\n ErrorData,\r\n} from \"./types/common\";\r\n\r\n// Error classes\r\nexport { SDKError } from \"./errors/SDKError\";\r\nexport { AuthError } from \"./errors/AuthError\";\r\nexport { NetworkError } from \"./errors/NetworkError\";\r\n\r\n// Utilities\r\nexport { SDKLogger } from \"./utils/logger\";\r\nexport { collectDeviceMetadata } from \"./utils/device\";\r\nexport type { DeviceMetadata } from \"./utils/device\";\r\nexport {\r\n isCameraSupported,\r\n queryCameraPermission,\r\n requestCameraAccess,\r\n releaseCameraStream,\r\n} from \"./camera/Permission\";\r\nexport type { PermissionStatus, CameraPermissionResult } from \"./camera/Permission\";\r\n\r\n// Liveness uploader (for integrators that need progress reporting)\r\nexport { LivenessUploader } from \"./modules/liveness/uploader\";\r\nexport type { UploadOptions } from \"./modules/liveness/uploader\";\r\n", "export type Environment = \"sandbox\" | \"production\" | \"local\";\r\n\r\nexport const BASE_URLS: Record<Environment, string> = {\r\n sandbox: \"https://dev-adhere.smartcomply.com\",\r\n production: \"https://adhere-api.smartcomply.com\",\r\n local: \"http://127.0.0.1:8000\",\r\n};\r\n\r\nexport interface SDKConfig {\r\n apiKey: string;\r\n clientId: string; // Required UUID \u2014 used for session creation\r\n environment?: Environment;\r\n timeout?: number;\r\n}\r\n", "export class SDKError extends Error {\r\n statusCode: number;\r\n errorCode?: string;\r\n errorData?: Record<string, unknown>;\r\n\r\n constructor(\r\n message: string,\r\n statusCode: number,\r\n errorCode?: string,\r\n errorData?: Record<string, unknown>\r\n ) {\r\n super(message);\r\n this.name = \"SDKError\";\r\n this.statusCode = statusCode;\r\n this.errorCode = errorCode;\r\n this.errorData = errorData;\r\n }\r\n}\r\n", "import { SDKError } from \"./SDKError\";\r\n\r\n/**\r\n * Thrown when authentication fails (invalid API key, expired session, etc).\r\n */\r\nexport class AuthError extends SDKError {\r\n constructor(message: string, errorCode?: string) {\r\n super(message, 401, errorCode);\r\n this.name = \"AuthError\";\r\n }\r\n}\r\n", "import { SDKError } from \"./SDKError\";\r\n\r\n/**\r\n * Thrown when a network request fails (timeout, no connection, DNS failure, etc).\r\n */\r\nexport class NetworkError extends SDKError {\r\n constructor(message: string) {\r\n super(message, 0, \"NETWORK_ERROR\");\r\n this.name = \"NetworkError\";\r\n }\r\n}\r\n", "import { SDKConfig, BASE_URLS } from \"./Config\";\r\nimport { SDKError } from \"../errors/SDKError\";\r\nimport { AuthError } from \"../errors/AuthError\";\r\nimport { NetworkError } from \"../errors/NetworkError\";\r\nimport { ApiResponse } from \"../types/common\";\r\n\r\n/**\r\n * HTTP client aligned with Adhere backend contract.\r\n *\r\n * Two auth modes:\r\n * - request() \u2192 Authorization: Bearer <apiKey> (session creation)\r\n * - sessionRequest() \u2192 x-access-token: <sessionToken> (all other endpoints)\r\n * - uploadWithSession() \u2192 multipart + x-access-token (file uploads)\r\n */\r\nexport class HttpClient {\r\n private baseUrl: string;\r\n private apiKey: string;\r\n private timeout: number;\r\n private sessionToken: string | null = null;\r\n\r\n constructor(config: SDKConfig) {\r\n this.baseUrl = BASE_URLS[config.environment || \"sandbox\"];\r\n this.apiKey = config.apiKey;\r\n this.timeout = config.timeout || 30000;\r\n }\r\n\r\n setSessionToken(token: string): void {\r\n this.sessionToken = token;\r\n }\r\n\r\n /**\r\n * API-key authenticated request (used for session creation only).\r\n * Header: Authorization: Bearer <apiKey>\r\n */\r\n async request<T>(\r\n method: string,\r\n path: string,\r\n body?: unknown\r\n ): Promise<T> {\r\n return this._fetch<T>(path, {\r\n method,\r\n headers: {\r\n \"Authorization\": `Bearer ${this.apiKey}`,\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: body ? JSON.stringify(body) : undefined,\r\n });\r\n }\r\n\r\n /**\r\n * Session-token authenticated request (used for all endpoints after session creation).\r\n * Header: x-access-token: <sessionToken>\r\n */\r\n async sessionRequest<T>(\r\n method: string,\r\n path: string,\r\n body?: unknown\r\n ): Promise<T> {\r\n this.requireToken();\r\n\r\n return this._fetch<T>(path, {\r\n method,\r\n headers: {\r\n \"x-access-token\": this.sessionToken!,\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: body ? JSON.stringify(body) : undefined,\r\n });\r\n }\r\n\r\n /**\r\n * Multipart file upload with session-token auth.\r\n * Header: x-access-token: <sessionToken>\r\n * NOTE: Do NOT set Content-Type \u2014 browser sets it with boundary automatically.\r\n */\r\n async uploadWithSession<T>(path: string, formData: FormData): Promise<T> {\r\n this.requireToken();\r\n\r\n return this._fetch<T>(path, {\r\n method: \"POST\",\r\n headers: {\r\n \"x-access-token\": this.sessionToken!,\r\n },\r\n body: formData,\r\n });\r\n }\r\n\r\n /**\r\n * Unauthenticated GET \u2014 used for public endpoints (e.g. status polling after session revoke).\r\n */\r\n async publicGet<T>(path: string): Promise<T> {\r\n return this._fetch<T>(path, {\r\n method: \"GET\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n });\r\n }\r\n\r\n /**\r\n * Legacy upload with API key (kept for backward compatibility if needed).\r\n */\r\n async upload<T>(path: string, formData: FormData): Promise<T> {\r\n return this._fetch<T>(path, {\r\n method: \"POST\",\r\n headers: {\r\n \"Authorization\": `Bearer ${this.apiKey}`,\r\n },\r\n body: formData,\r\n });\r\n }\r\n\r\n // ---- Internal ----\r\n\r\n private requireToken(): void {\r\n if (!this.sessionToken) {\r\n throw new AuthError(\r\n \"No session token set. Call sdk.createSession() first.\",\r\n \"NO_SESSION_TOKEN\"\r\n );\r\n }\r\n }\r\n\r\n private async _fetch<T>(path: string, init: RequestInit, retries = 2): Promise<T> {\r\n const controller = new AbortController();\r\n const timer = setTimeout(() => controller.abort(), this.timeout);\r\n\r\n try {\r\n const response = await fetch(`${this.baseUrl}${path}`, {\r\n ...init,\r\n signal: controller.signal,\r\n });\r\n\r\n const contentType = response.headers.get(\"content-type\") || \"\";\r\n if (!contentType.includes(\"application/json\")) {\r\n throw new SDKError(\r\n `Unexpected response from ${path} (${response.status})`,\r\n response.status\r\n );\r\n }\r\n\r\n // Parse the backend's standard response envelope\r\n const envelope: ApiResponse = await response.json();\r\n\r\n if (!response.ok || envelope.status === \"error\") {\r\n const statusCode = response.status;\r\n\r\n // Map specific HTTP statuses to error types\r\n if (statusCode === 401 || statusCode === 403) {\r\n throw new AuthError(\r\n envelope.message || \"Authentication failed\",\r\n envelope.code\r\n );\r\n }\r\n\r\n throw new SDKError(\r\n envelope.message || `Request to ${path} failed`,\r\n statusCode,\r\n envelope.code,\r\n envelope.data as Record<string, unknown>\r\n );\r\n }\r\n\r\n // Return the full envelope for verify responses (so SDK can check status)\r\n // For other endpoints, return unwrapped data\r\n if (path.includes(\"/verify/\")) {\r\n return envelope as T;\r\n }\r\n return envelope.data as T;\r\n\r\n } catch (err: any) {\r\n if (err instanceof SDKError || err instanceof AuthError) throw err;\r\n\r\n // C5: Retry on network errors (not auth/validation errors)\r\n if (retries > 0 && (err.name === \"AbortError\" || err.name === \"TypeError\")) {\r\n clearTimeout(timer);\r\n await new Promise((r) => setTimeout(r, 1000)); // wait 1s before retry\r\n return this._fetch<T>(path, init, retries - 1);\r\n }\r\n\r\n if (err.name === \"AbortError\") {\r\n throw new NetworkError(\"Request timeout. Please check your connection and try again.\");\r\n }\r\n if (err.name === \"TypeError\" && err.message?.includes(\"fetch\")) {\r\n throw new NetworkError(`Network error: ${err.message}`);\r\n }\r\n\r\n throw new SDKError(\r\n err.message || \"Unknown error\",\r\n 0,\r\n \"UNKNOWN_ERROR\"\r\n );\r\n } finally {\r\n clearTimeout(timer);\r\n }\r\n }\r\n}\r\n", "import { HttpClient } from \"../../client/HttpClient\";\r\nimport {\r\n VerifyIdentityRequest,\r\n VerifyIdentityResponse,\r\n} from \"../../types/onboarding\";\r\n\r\n/**\r\n * Onboarding module \u2014 identity verification.\r\n *\r\n * All methods use session-token auth (x-access-token header).\r\n */\r\nexport class OnboardingModule {\r\n constructor(private http: HttpClient) {}\r\n\r\n /**\r\n * Verify a user's identity.\r\n *\r\n * POST /v1/onboarding/verify/\r\n * Auth: x-access-token: <sessionToken>\r\n *\r\n * Sends identity_type_id (from ChannelItem.id) and dynamic fields\r\n * collected from the user based on the channel's field definitions.\r\n *\r\n * Example:\r\n * { identity_type_id: 3, fields: { \"bank_verification_number\": \"12345678901\" } }\r\n */\r\n async verify(params: VerifyIdentityRequest): Promise<VerifyIdentityResponse> {\r\n return this.http.sessionRequest<VerifyIdentityResponse>(\r\n \"POST\",\r\n \"/v1/onboarding/verify/\",\r\n {\r\n identity_type_id: params.identity_type_id,\r\n fields: params.fields,\r\n }\r\n );\r\n }\r\n}\r\n", "/**\r\n * Collects device / browser context metadata.\r\n * All values are derived from standard browser APIs \u2014 no external library needed.\r\n * Sent to the backend at liveness/create so they appear in the webhook\r\n * request_context block.\r\n */\r\nexport interface DeviceMetadata {\r\n device_type: \"mobile\" | \"desktop\" | \"tablet\";\r\n os_name: string;\r\n browser_timezone: string;\r\n fingerprint_id: string;\r\n}\r\n\r\nfunction detectOs(ua: string): string {\r\n if (/Windows NT/i.test(ua)) return \"Windows\";\r\n if (/Mac OS X|Macintosh/i.test(ua)) return \"macOS\";\r\n if (/Android/i.test(ua)) return \"Android\";\r\n if (/iPhone|iPad|iPod/i.test(ua)) return \"iOS\";\r\n if (/Linux/i.test(ua)) return \"Linux\";\r\n if (/CrOS/i.test(ua)) return \"ChromeOS\";\r\n return \"Unknown\";\r\n}\r\n\r\nfunction getOrCreateFingerprintId(): string {\r\n const KEY = \"_adhere_fid\";\r\n try {\r\n let fid = localStorage.getItem(KEY);\r\n if (!fid) {\r\n fid =\r\n typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\"\r\n ? crypto.randomUUID()\r\n : Math.random().toString(36).slice(2) + Date.now().toString(36);\r\n localStorage.setItem(KEY, fid);\r\n }\r\n return fid;\r\n } catch {\r\n // localStorage unavailable (e.g. private browsing with strict settings)\r\n return Math.random().toString(36).slice(2) + Date.now().toString(36);\r\n }\r\n}\r\n\r\nexport function collectDeviceMetadata(): DeviceMetadata {\r\n const ua = navigator.userAgent;\r\n\r\n const isTablet =\r\n /iPad/i.test(ua) ||\r\n (/Android/i.test(ua) && !/Mobile/i.test(ua));\r\n\r\n const isMobile =\r\n !isTablet &&\r\n /Mobi|Android|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(ua);\r\n\r\n const device_type: DeviceMetadata[\"device_type\"] = isTablet\r\n ? \"tablet\"\r\n : isMobile\r\n ? \"mobile\"\r\n : \"desktop\";\r\n\r\n return {\r\n device_type,\r\n os_name: detectOs(ua),\r\n browser_timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\r\n fingerprint_id: getOrCreateFingerprintId(),\r\n };\r\n}\r\n", "export class CameraManager {\r\n private stream: MediaStream | null = null;\r\n\r\n async open(constraints?: MediaStreamConstraints): Promise<MediaStream> {\r\n const defaults: MediaStreamConstraints = {\r\n video: {\r\n facingMode: \"user\",\r\n width: { ideal: 1280 },\r\n height: { ideal: 720 },\r\n },\r\n audio: false,\r\n };\r\n\r\n this.stream = await navigator.mediaDevices.getUserMedia(\r\n constraints || defaults\r\n );\r\n\r\n return this.stream;\r\n }\r\n\r\n getStream(): MediaStream | null {\r\n return this.stream;\r\n }\r\n\r\n stop(): void {\r\n if (this.stream) {\r\n this.stream.getTracks().forEach((track) => track.stop());\r\n this.stream = null;\r\n }\r\n }\r\n}\r\n", "export class VideoRecorder {\r\n private recorder: MediaRecorder | null = null;\r\n private chunks: Blob[] = [];\r\n private startedAt: number = 0;\r\n\r\n start(stream: MediaStream): void {\r\n this.chunks = [];\r\n\r\n const mimeType = MediaRecorder.isTypeSupported(\"video/webm;codecs=vp9\")\r\n ? \"video/webm;codecs=vp9\"\r\n : \"video/webm\";\r\n\r\n this.recorder = new MediaRecorder(stream, {\r\n mimeType,\r\n videoBitsPerSecond: 250_000, // ~1.4 MB for 45s \u2014 keeps file under server upload limit\r\n });\r\n\r\n this.recorder.ondataavailable = (e) => {\r\n if (e.data.size > 0) {\r\n this.chunks.push(e.data);\r\n }\r\n };\r\n\r\n this.startedAt = Date.now();\r\n this.recorder.start();\r\n }\r\n\r\n stop(): Promise<{ blob: Blob; durationSeconds: number }> {\r\n return new Promise((resolve, reject) => {\r\n if (!this.recorder || this.recorder.state === \"inactive\") {\r\n reject(new Error(\"Recorder is not active\"));\r\n return;\r\n }\r\n\r\n const stoppedAt = Date.now();\r\n\r\n this.recorder.onstop = () => {\r\n const blob = new Blob(this.chunks, { type: \"video/webm\" });\r\n const durationSeconds = parseFloat(\r\n ((stoppedAt - this.startedAt) / 1000).toFixed(2)\r\n );\r\n this.chunks = [];\r\n resolve({ blob, durationSeconds });\r\n };\r\n\r\n this.recorder.onerror = () => {\r\n reject(new Error(\"Recording failed\"));\r\n };\r\n\r\n this.recorder.stop();\r\n });\r\n }\r\n\r\n isRecording(): boolean {\r\n return this.recorder?.state === \"recording\";\r\n }\r\n}\r\n", "var t=\"undefined\"!=typeof self?self:{};function e(e,n){t:{for(var r=[\"CLOSURE_FLAGS\"],i=t,s=0;s<r.length;s++)if(null==(i=i[r[s]])){r=null;break t}r=i}return null!=(e=r&&r[e])?e:n}function n(){throw Error(\"Invalid UTF8\")}function r(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}let i,s;const o=\"undefined\"!=typeof TextDecoder;let a;const c=\"undefined\"!=typeof TextEncoder;function h(t){if(c)t=(a||=new TextEncoder).encode(t);else{let n=0;const r=new Uint8Array(3*t.length);for(let i=0;i<t.length;i++){var e=t.charCodeAt(i);if(e<128)r[n++]=e;else{if(e<2048)r[n++]=e>>6|192;else{if(e>=55296&&e<=57343){if(e<=56319&&i<t.length){const s=t.charCodeAt(++i);if(s>=56320&&s<=57343){e=1024*(e-55296)+s-56320+65536,r[n++]=e>>18|240,r[n++]=e>>12&63|128,r[n++]=e>>6&63|128,r[n++]=63&e|128;continue}i--}e=65533}r[n++]=e>>12|224,r[n++]=e>>6&63|128}r[n++]=63&e|128}}t=n===r.length?r:r.subarray(0,n)}return t}function u(e){t.setTimeout((()=>{throw e}),0)}var l,f=e(610401301,!1),d=e(748402147,!0),p=e(824648567,!0),g=e(824656860,e(1,!0));function m(){var e=t.navigator;return e&&(e=e.userAgent)?e:\"\"}const y=t.navigator;function _(t){return _[\" \"](t),t}l=y&&y.userAgentData||null,_[\" \"]=function(){};const v={};let E=null;function w(t){const e=t.length;let n=3*e/4;n%3?n=Math.floor(n):-1!=\"=.\".indexOf(t[e-1])&&(n=-1!=\"=.\".indexOf(t[e-2])?n-2:n-1);const r=new Uint8Array(n);let i=0;return function(t,e){function n(e){for(;r<t.length;){const e=t.charAt(r++),n=E[e];if(null!=n)return n;if(!/^[\\s\\xa0]*$/.test(e))throw Error(\"Unknown base64 encoding at char: \"+e)}return e}T();let r=0;for(;;){const t=n(-1),r=n(0),i=n(64),s=n(64);if(64===s&&-1===t)break;e(t<<2|r>>4),64!=i&&(e(r<<4&240|i>>2),64!=s&&e(i<<6&192|s))}}(t,(function(t){r[i++]=t})),i!==n?r.subarray(0,i):r}function T(){if(!E){E={};var t=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\".split(\"\"),e=[\"+/=\",\"+/\",\"-_=\",\"-_.\",\"-_\"];for(let n=0;n<5;n++){const r=t.concat(e[n].split(\"\"));v[n]=r;for(let t=0;t<r.length;t++){const e=r[t];void 0===E[e]&&(E[e]=t)}}}}var A=\"undefined\"!=typeof Uint8Array,b=!(!(f&&l&&l.brands.length>0)&&(-1!=m().indexOf(\"Trident\")||-1!=m().indexOf(\"MSIE\")))&&\"function\"==typeof btoa;const k=/[-_.]/g,S={\"-\":\"+\",_:\"/\",\".\":\"=\"};function x(t){return S[t]||\"\"}function L(t){if(!b)return w(t);t=k.test(t)?t.replace(k,x):t,t=atob(t);const e=new Uint8Array(t.length);for(let n=0;n<t.length;n++)e[n]=t.charCodeAt(n);return e}function R(t){return A&&null!=t&&t instanceof Uint8Array}var I={};function F(){return C||=new P(null,I)}function M(t){N(I);var e=t.g;return null==(e=null==e||R(e)?e:\"string\"==typeof e?L(e):null)?e:t.g=e}var P=class{h(){return new Uint8Array(M(this)||0)}constructor(t,e){if(N(e),this.g=t,null!=t&&0===t.length)throw Error(\"ByteString should be constructed with non-empty values\")}};let C,O;function N(t){if(t!==I)throw Error(\"illegal external caller\")}function U(t,e){t.__closure__error__context__984382||(t.__closure__error__context__984382={}),t.__closure__error__context__984382.severity=e}function D(t){return U(t=Error(t),\"warning\"),t}function B(t,e){if(null!=t){var n=O??={},r=n[t]||0;r>=e||(n[t]=r+1,U(t=Error(),\"incident\"),u(t))}}function G(){return\"function\"==typeof BigInt}var j=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol();function V(t,e,n=!1){return\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol()?n&&Symbol.for&&t?Symbol.for(t):null!=t?Symbol(t):Symbol():e}var X=V(\"jas\",void 0,!0),H=V(void 0,\"0di\"),W=V(void 0,\"1oa\"),z=V(void 0,Symbol()),K=V(void 0,\"0ub\"),Y=V(void 0,\"0ubs\"),q=V(void 0,\"0ubsb\"),$=V(void 0,\"0actk\"),J=V(\"m_m\",\"Pa\",!0),Z=V();const Q={Ga:{value:0,configurable:!0,writable:!0,enumerable:!1}},tt=Object.defineProperties,et=j?X:\"Ga\";var nt;const rt=[];function it(t,e){j||et in t||tt(t,Q),t[et]|=e}function st(t,e){j||et in t||tt(t,Q),t[et]=e}function ot(t){return it(t,34),t}function at(t){return it(t,8192),t}st(rt,7),nt=Object.freeze(rt);var ct={};function ht(t,e){return void 0===e?t.h!==ut&&!!(2&(0|t.v[et])):!!(2&e)&&t.h!==ut}const ut={};function lt(t,e){if(null!=t)if(\"string\"==typeof t)t=t?new P(t,I):F();else if(t.constructor!==P)if(R(t))t=t.length?new P(new Uint8Array(t),I):F();else{if(!e)throw Error();t=void 0}return t}class ft{constructor(t,e,n){this.g=t,this.h=e,this.l=n}next(){const t=this.g.next();return t.done||(t.value=this.h.call(this.l,t.value)),t}[Symbol.iterator](){return this}}var dt=Object.freeze({});function pt(t,e,n){const r=128&e?0:-1,i=t.length;var s;(s=!!i)&&(s=null!=(s=t[i-1])&&\"object\"==typeof s&&s.constructor===Object);const o=i+(s?-1:0);for(e=128&e?1:0;e<o;e++)n(e-r,t[e]);if(s){t=t[i-1];for(const e in t)!isNaN(e)&&n(+e,t[e])}}var gt={};function mt(t){return 128&t?gt:void 0}function yt(t){return t.Na=!0,t}var _t=yt((t=>\"number\"==typeof t)),vt=yt((t=>\"string\"==typeof t)),Et=yt((t=>\"boolean\"==typeof t)),wt=\"function\"==typeof t.BigInt&&\"bigint\"==typeof t.BigInt(0);function Tt(t){var e=t;if(vt(e)){if(!/^\\s*(?:-?[1-9]\\d*|0)?\\s*$/.test(e))throw Error(String(e))}else if(_t(e)&&!Number.isSafeInteger(e))throw Error(String(e));return wt?BigInt(t):t=Et(t)?t?\"1\":\"0\":vt(t)?t.trim()||\"0\":String(t)}var At=yt((t=>wt?t>=kt&&t<=xt:\"-\"===t[0]?Lt(t,bt):Lt(t,St)));const bt=Number.MIN_SAFE_INTEGER.toString(),kt=wt?BigInt(Number.MIN_SAFE_INTEGER):void 0,St=Number.MAX_SAFE_INTEGER.toString(),xt=wt?BigInt(Number.MAX_SAFE_INTEGER):void 0;function Lt(t,e){if(t.length>e.length)return!1;if(t.length<e.length||t===e)return!0;for(let n=0;n<t.length;n++){const r=t[n],i=e[n];if(r>i)return!1;if(r<i)return!0}}const Rt=\"function\"==typeof Uint8Array.prototype.slice;let It,Ft=0,Mt=0;function Pt(t){const e=t>>>0;Ft=e,Mt=(t-e)/4294967296>>>0}function Ct(t){if(t<0){Pt(-t);const[e,n]=Ht(Ft,Mt);Ft=e>>>0,Mt=n>>>0}else Pt(t)}function Ot(t){const e=It||=new DataView(new ArrayBuffer(8));e.setFloat32(0,+t,!0),Mt=0,Ft=e.getUint32(0,!0)}function Nt(t,e){const n=4294967296*e+(t>>>0);return Number.isSafeInteger(n)?n:Gt(t,e)}function Ut(t,e){return Tt(G()?BigInt.asUintN(64,(BigInt(e>>>0)<<BigInt(32))+BigInt(t>>>0)):Gt(t,e))}function Dt(t,e){const n=2147483648&e;return n&&(e=~e>>>0,0==(t=1+~t>>>0)&&(e=e+1>>>0)),\"number\"==typeof(t=Nt(t,e))?n?-t:t:n?\"-\"+t:t}function Bt(t,e){return G()?Tt(BigInt.asIntN(64,(BigInt.asUintN(32,BigInt(e))<<BigInt(32))+BigInt.asUintN(32,BigInt(t)))):Tt(Vt(t,e))}function Gt(t,e){if(t>>>=0,(e>>>=0)<=2097151)var n=\"\"+(4294967296*e+t);else G()?n=\"\"+(BigInt(e)<<BigInt(32)|BigInt(t)):(t=(16777215&t)+6777216*(n=16777215&(t>>>24|e<<8))+6710656*(e=e>>16&65535),n+=8147497*e,e*=2,t>=1e7&&(n+=t/1e7>>>0,t%=1e7),n>=1e7&&(e+=n/1e7>>>0,n%=1e7),n=e+jt(n)+jt(t));return n}function jt(t){return t=String(t),\"0000000\".slice(t.length)+t}function Vt(t,e){if(2147483648&e)if(G())t=\"\"+(BigInt(0|e)<<BigInt(32)|BigInt(t>>>0));else{const[n,r]=Ht(t,e);t=\"-\"+Gt(n,r)}else t=Gt(t,e);return t}function Xt(t){if(t.length<16)Ct(Number(t));else if(G())t=BigInt(t),Ft=Number(t&BigInt(4294967295))>>>0,Mt=Number(t>>BigInt(32)&BigInt(4294967295));else{const e=+(\"-\"===t[0]);Mt=Ft=0;const n=t.length;for(let r=e,i=(n-e)%6+e;i<=n;r=i,i+=6){const e=Number(t.slice(r,i));Mt*=1e6,Ft=1e6*Ft+e,Ft>=4294967296&&(Mt+=Math.trunc(Ft/4294967296),Mt>>>=0,Ft>>>=0)}if(e){const[t,e]=Ht(Ft,Mt);Ft=t,Mt=e}}}function Ht(t,e){return e=~e,t?t=1+~t:e+=1,[t,e]}function Wt(t){return Array.prototype.slice.call(t)}const zt=\"function\"==typeof BigInt?BigInt.asIntN:void 0,Kt=\"function\"==typeof BigInt?BigInt.asUintN:void 0,Yt=Number.isSafeInteger,qt=Number.isFinite,$t=Math.trunc,Jt=Tt(0);function Zt(t){if(null!=t&&\"number\"!=typeof t)throw Error(`Value of float/double field must be a number, found ${typeof t}: ${t}`);return t}function Qt(t){return null==t||\"number\"==typeof t?t:\"NaN\"===t||\"Infinity\"===t||\"-Infinity\"===t?Number(t):void 0}function te(t){if(null!=t&&\"boolean\"!=typeof t){var e=typeof t;throw Error(`Expected boolean but got ${\"object\"!=e?e:t?Array.isArray(t)?\"array\":e:\"null\"}: ${t}`)}return t}function ee(t){return null==t||\"boolean\"==typeof t?t:\"number\"==typeof t?!!t:void 0}const ne=/^-?([1-9][0-9]*|0)(\\.[0-9]+)?$/;function re(t){switch(typeof t){case\"bigint\":return!0;case\"number\":return qt(t);case\"string\":return ne.test(t);default:return!1}}function ie(t){if(null==t)return t;if(\"string\"==typeof t&&t)t=+t;else if(\"number\"!=typeof t)return;return qt(t)?0|t:void 0}function se(t){if(null==t)return t;if(\"string\"==typeof t&&t)t=+t;else if(\"number\"!=typeof t)return;return qt(t)?t>>>0:void 0}function oe(t){const e=t.length;return(\"-\"===t[0]?e<20||20===e&&t<=\"-9223372036854775808\":e<19||19===e&&t<=\"9223372036854775807\")?t:(Xt(t),Vt(Ft,Mt))}function ae(t){return t=$t(t),Yt(t)||(Ct(t),t=Dt(Ft,Mt)),t}function ce(t){var e=$t(Number(t));return Yt(e)?String(e):(-1!==(e=t.indexOf(\".\"))&&(t=t.substring(0,e)),oe(t))}function he(t){var e=$t(Number(t));return Yt(e)?Tt(e):(-1!==(e=t.indexOf(\".\"))&&(t=t.substring(0,e)),G()?Tt(zt(64,BigInt(t))):Tt(oe(t)))}function ue(t){return Yt(t)?t=Tt(ae(t)):(t=$t(t),Yt(t)?t=String(t):(Ct(t),t=Vt(Ft,Mt)),t=Tt(t)),t}function le(t){return null==t?t:\"bigint\"==typeof t?(At(t)?t=Number(t):(t=zt(64,t),t=At(t)?Number(t):String(t)),t):re(t)?\"number\"==typeof t?ae(t):ce(t):void 0}function fe(t){const e=typeof t;return null==t?t:\"bigint\"===e?Tt(zt(64,t)):re(t)?\"string\"===e?he(t):ue(t):void 0}function de(t){if(\"string\"!=typeof t)throw Error();return t}function pe(t){if(null!=t&&\"string\"!=typeof t)throw Error();return t}function ge(t){return null==t||\"string\"==typeof t?t:void 0}function me(t,e,n,r){return null!=t&&t[J]===ct?t:Array.isArray(t)?((r=(n=0|t[et])|32&r|2&r)!==n&&st(t,r),new e(t)):(n?2&r?((t=e[H])||(ot((t=new e).v),t=e[H]=t),e=t):e=new e:e=void 0,e)}function ye(t,e,n){if(e)t:{if(!re(e=t))throw D(\"int64\");switch(typeof e){case\"string\":e=he(e);break t;case\"bigint\":e=Tt(zt(64,e));break t;default:e=ue(e)}}else e=fe(t);return null==(t=e)?n?Jt:void 0:t}const _e={};let ve=function(){try{return _(new class extends Map{constructor(){super()}}),!1}catch{return!0}}();class Ee{constructor(){this.g=new Map}get(t){return this.g.get(t)}set(t,e){return this.g.set(t,e),this.size=this.g.size,this}delete(t){return t=this.g.delete(t),this.size=this.g.size,t}clear(){this.g.clear(),this.size=this.g.size}has(t){return this.g.has(t)}entries(){return this.g.entries()}keys(){return this.g.keys()}values(){return this.g.values()}forEach(t,e){return this.g.forEach(t,e)}[Symbol.iterator](){return this.entries()}}const we=ve?(Object.setPrototypeOf(Ee.prototype,Map.prototype),Object.defineProperties(Ee.prototype,{size:{value:0,configurable:!0,enumerable:!0,writable:!0}}),Ee):class extends Map{constructor(){super()}};function Te(t){return t}function Ae(t){if(2&t.J)throw Error(\"Cannot mutate an immutable Map\")}var be=class extends we{constructor(t,e,n=Te,r=Te){super(),this.J=0|t[et],this.K=e,this.S=n,this.fa=this.K?ke:r;for(let i=0;i<t.length;i++){const s=t[i],o=n(s[0],!1,!0);let a=s[1];e?void 0===a&&(a=null):a=r(s[1],!1,!0,void 0,void 0,this.J),super.set(o,a)}}V(t){return at(Array.from(super.entries(),t))}clear(){Ae(this),super.clear()}delete(t){return Ae(this),super.delete(this.S(t,!0,!1))}entries(){if(this.K){var t=super.keys();t=new ft(t,Se,this)}else t=super.entries();return t}values(){if(this.K){var t=super.keys();t=new ft(t,be.prototype.get,this)}else t=super.values();return t}forEach(t,e){this.K?super.forEach(((n,r,i)=>{t.call(e,i.get(r),r,i)})):super.forEach(t,e)}set(t,e){return Ae(this),null==(t=this.S(t,!0,!1))?this:null==e?(super.delete(t),this):super.set(t,this.fa(e,!0,!0,this.K,!1,this.J))}Ma(t){const e=this.S(t[0],!1,!0);t=t[1],t=this.K?void 0===t?null:t:this.fa(t,!1,!0,void 0,!1,this.J),super.set(e,t)}has(t){return super.has(this.S(t,!1,!1))}get(t){t=this.S(t,!1,!1);const e=super.get(t);if(void 0!==e){var n=this.K;return n?((n=this.fa(e,!1,!0,n,this.ra,this.J))!==e&&super.set(t,n),n):e}}[Symbol.iterator](){return this.entries()}};function ke(t,e,n,r,i,s){return t=me(t,r,n,s),i&&(t=Ke(t)),t}function Se(t){return[t,this.get(t)]}let xe;function Le(){return xe||=new be(ot([]),void 0,void 0,void 0,_e)}function Re(t){return z?t[z]:void 0}function Ie(t,e){for(const n in t)!isNaN(n)&&e(t,+n,t[n])}be.prototype.toJSON=void 0;var Fe=class{};const Me={Ka:!0};function Pe(t,e){e<100||B(Y,1)}function Ce(t,e,n,r){const i=void 0!==r;r=!!r;var s,o=z;!i&&j&&o&&(s=t[o])&&Ie(s,Pe),o=[];var a=t.length;let c;s=4294967295;let h=!1;const u=!!(64&e),l=u?128&e?0:-1:void 0;1&e||(c=a&&t[a-1],null!=c&&\"object\"==typeof c&&c.constructor===Object?s=--a:c=void 0,!u||128&e||i||(h=!0,s=s-l+l)),e=void 0;for(var f=0;f<a;f++){let i=t[f];if(null!=i&&null!=(i=n(i,r)))if(u&&f>=s){const t=f-l;(e??={})[t]=i}else o[f]=i}if(c)for(let t in c){if(null==(a=c[t])||null==(a=n(a,r)))continue;let i;f=+t,u&&!Number.isNaN(f)&&(i=f+l)<s?o[i]=a:(e??={})[t]=a}return e&&(h?o.push(e):o[s]=e),i&&z&&(t=Re(t))&&t instanceof Fe&&(o[z]=function(t){const e=new Fe;return Ie(t,((t,n,r)=>{e[n]=Wt(r)})),e.da=t.da,e}(t)),o}function Oe(t){return t[0]=Ne(t[0]),t[1]=Ne(t[1]),t}function Ne(t){switch(typeof t){case\"number\":return Number.isFinite(t)?t:\"\"+t;case\"bigint\":return At(t)?Number(t):\"\"+t;case\"boolean\":return t?1:0;case\"object\":if(Array.isArray(t)){var e=0|t[et];return 0===t.length&&1&e?void 0:Ce(t,e,Ne)}if(null!=t&&t[J]===ct)return Ue(t);if(t instanceof P){if(null==(e=t.g))t=\"\";else if(\"string\"==typeof e)t=e;else{if(b){for(var n=\"\",r=0,i=e.length-10240;r<i;)n+=String.fromCharCode.apply(null,e.subarray(r,r+=10240));n+=String.fromCharCode.apply(null,r?e.subarray(r):e),e=btoa(n)}else{void 0===n&&(n=0),T(),n=v[n],r=Array(Math.floor(e.length/3)),i=n[64]||\"\";let t=0,h=0;for(;t<e.length-2;t+=3){var s=e[t],o=e[t+1],a=e[t+2],c=n[s>>2];s=n[(3&s)<<4|o>>4],o=n[(15&o)<<2|a>>6],a=n[63&a],r[h++]=c+s+o+a}switch(c=0,a=i,e.length-t){case 2:a=n[(15&(c=e[t+1]))<<2]||i;case 1:e=e[t],r[h]=n[e>>2]+n[(3&e)<<4|c>>4]+a+i}e=r.join(\"\")}t=t.g=e}return t}return t instanceof be?t=0!==t.size?t.V(Oe):void 0:void 0}return t}function Ue(t){return Ce(t=t.v,0|t[et],Ne)}let De,Be;function Ge(t,e){return je(t,e[0],e[1])}function je(t,e,n,r=0){if(null==t){var i=32;n?(t=[n],i|=128):t=[],e&&(i=-16760833&i|(1023&e)<<14)}else{if(!Array.isArray(t))throw Error(\"narr\");if(i=0|t[et],d&&1&i)throw Error(\"rfarr\");if(2048&i&&!(2&i)&&function(){if(d)throw Error(\"carr\");B($,5)}(),256&i)throw Error(\"farr\");if(64&i)return(i|r)!==i&&st(t,i|r),t;if(n&&(i|=128,n!==t[0]))throw Error(\"mid\");t:{i|=64;var s=(n=t).length;if(s){var o=s-1;const t=n[o];if(null!=t&&\"object\"==typeof t&&t.constructor===Object){if((o-=e=128&i?0:-1)>=1024)throw Error(\"pvtlmt\");for(var a in t)(s=+a)<o&&(n[s+e]=t[a],delete t[a]);i=-16760833&i|(1023&o)<<14;break t}}if(e){if((a=Math.max(e,s-(128&i?0:-1)))>1024)throw Error(\"spvt\");i=-16760833&i|(1023&a)<<14}}}return st(t,64|i|r),t}function Ve(t,e){if(\"object\"!=typeof t)return t;if(Array.isArray(t)){var n=0|t[et];return 0===t.length&&1&n?void 0:Xe(t,n,e)}if(null!=t&&t[J]===ct)return We(t);if(t instanceof be){if(2&(e=t.J))return t;if(!t.size)return;if(n=ot(t.V()),t.K)for(t=0;t<n.length;t++){const r=n[t];let i=r[1];i=null==i||\"object\"!=typeof i?void 0:null!=i&&i[J]===ct?We(i):Array.isArray(i)?Xe(i,0|i[et],!!(32&e)):void 0,r[1]=i}return n}return t instanceof P?t:void 0}function Xe(t,e,n){return 2&e||(!n||4096&e||16&e?t=ze(t,e,!1,n&&!(16&e)):(it(t,34),4&e&&Object.freeze(t))),t}function He(t,e,n){return t=new t.constructor(e),n&&(t.h=ut),t.m=ut,t}function We(t){const e=t.v,n=0|e[et];return ht(t,n)?t:Je(t,e,n)?He(t,e):ze(e,n)}function ze(t,e,n,r){return r??=!!(34&e),t=Ce(t,e,Ve,r),r=32,n&&(r|=2),st(t,e=16769217&e|r),t}function Ke(t){const e=t.v,n=0|e[et];return ht(t,n)?Je(t,e,n)?He(t,e,!0):new t.constructor(ze(e,n,!1)):t}function Ye(t){if(t.h!==ut)return!1;var e=t.v;return it(e=ze(e,0|e[et]),2048),t.v=e,t.h=void 0,t.m=void 0,!0}function qe(t){if(!Ye(t)&&ht(t,0|t.v[et]))throw Error()}function $e(t,e){void 0===e&&(e=0|t[et]),32&e&&!(4096&e)&&st(t,4096|e)}function Je(t,e,n){return!!(2&n)||!(!(32&n)||4096&n)&&(st(e,2|n),t.h=ut,!0)}const Ze=Tt(0),Qe={};function tn(t,e,n,r,i){if(null!==(e=en(t.v,e,n,i))||r&&t.m!==ut)return e}function en(t,e,n,r){if(-1===e)return null;const i=e+(n?0:-1),s=t.length-1;let o,a;if(!(s<1+(n?0:-1))){if(i>=s)if(o=t[s],null!=o&&\"object\"==typeof o&&o.constructor===Object)n=o[e],a=!0;else{if(i!==s)return;n=o}else n=t[i];if(r&&null!=n){if(null==(r=r(n)))return r;if(!Object.is(r,n))return a?o[e]=r:t[i]=r,r}return n}}function nn(t,e,n,r){qe(t),rn(t=t.v,0|t[et],e,n,r)}function rn(t,e,n,r,i){const s=n+(i?0:-1);var o=t.length-1;if(o>=1+(i?0:-1)&&s>=o){const i=t[o];if(null!=i&&\"object\"==typeof i&&i.constructor===Object)return i[n]=r,e}return s<=o?(t[s]=r,e):(void 0!==r&&(n>=(o=(e??=0|t[et])>>14&1023||536870912)?null!=r&&(t[o+(i?0:-1)]={[n]:r}):t[s]=r),e)}function sn(){return void 0===dt?2:4}function on(t,e,n,r,i){let s=t.v,o=0|s[et];r=ht(t,o)?1:r,i=!!i||3===r,2===r&&Ye(t)&&(s=t.v,o=0|s[et]);let a=(t=cn(s,e))===nt?7:0|t[et],c=hn(a,o);var h=!(4&c);if(h){4&c&&(t=Wt(t),a=0,c=xn(c,o),o=rn(s,o,e,t));let r=0,i=0;for(;r<t.length;r++){const e=n(t[r]);null!=e&&(t[i++]=e)}i<r&&(t.length=i),n=-513&(4|c),c=n&=-1025,c&=-4097}return c!==a&&(st(t,c),2&c&&Object.freeze(t)),an(t,c,s,o,e,r,h,i)}function an(t,e,n,r,i,s,o,a){let c=e;return 1===s||4===s&&(2&e||!(16&e)&&32&r)?un(e)||((e|=!t.length||o&&!(4096&e)||32&r&&!(4096&e||16&e)?2:256)!==c&&st(t,e),Object.freeze(t)):(2===s&&un(e)&&(t=Wt(t),c=0,e=xn(e,r),r=rn(n,r,i,t)),un(e)||(a||(e|=16),e!==c&&st(t,e))),2&e||!(4096&e||16&e)||$e(n,r),t}function cn(t,e,n){return t=en(t,e,n),Array.isArray(t)?t:nt}function hn(t,e){return 2&e&&(t|=2),1|t}function un(t){return!!(2&t)&&!!(4&t)||!!(256&t)}function ln(t){return lt(t,!0)}function fn(t){t=Wt(t);for(let e=0;e<t.length;e++){const n=t[e]=Wt(t[e]);Array.isArray(n[1])&&(n[1]=ot(n[1]))}return at(t)}function dn(t,e,n,r){qe(t),rn(t=t.v,0|t[et],e,(\"0\"===r?0===Number(n):n===r)?void 0:n)}function pn(t,e,n){if(2&e)throw Error();const r=mt(e);let i=cn(t,n,r),s=i===nt?7:0|i[et],o=hn(s,e);return(2&o||un(o)||16&o)&&(o===s||un(o)||st(i,o),i=Wt(i),s=0,o=xn(o,e),rn(t,e,n,i,r)),o&=-13,o!==s&&st(i,o),i}function gn(t,e){var n=Ds;return _n(mn(t=t.v),t,void 0,n)===e?e:-1}function mn(t){if(j)return t[W]??(t[W]=new Map);if(W in t)return t[W];const e=new Map;return Object.defineProperty(t,W,{value:e}),e}function yn(t,e,n,r,i){const s=mn(t),o=_n(s,t,e,n,i);return o!==r&&(o&&(e=rn(t,e,o,void 0,i)),s.set(n,r)),e}function _n(t,e,n,r,i){let s=t.get(r);if(null!=s)return s;s=0;for(let t=0;t<r.length;t++){const o=r[t];null!=en(e,o,i)&&(0!==s&&(n=rn(e,n,s,void 0,i)),s=o)}return t.set(r,s),s}function vn(t,e,n){let r=0|t[et];const i=mt(r),s=en(t,n,i);let o;if(null!=s&&s[J]===ct){if(!ht(s))return Ye(s),s.v;o=s.v}else Array.isArray(s)&&(o=s);if(o){const t=0|o[et];2&t&&(o=ze(o,t))}return o=Ge(o,e),o!==s&&rn(t,r,n,o,i),o}function En(t,e,n,r,i){let s=!1;if(null!=(r=en(t,r,i,(t=>{const r=me(t,n,!1,e);return s=r!==t&&null!=r,r}))))return s&&!ht(r)&&$e(t,e),r}function wn(t,e,n,r){let i=t.v,s=0|i[et];if(null==(e=En(i,s,e,n,r)))return e;if(s=0|i[et],!ht(t,s)){const o=Ke(e);o!==e&&(Ye(t)&&(i=t.v,s=0|i[et]),s=rn(i,s,n,e=o,r),$e(i,s))}return e}function Tn(t,e,n,r,i,s,o,a){var c=ht(t,n);s=c?1:s,o=!!o||3===s,c=a&&!c,(2===s||c)&&Ye(t)&&(n=0|(e=t.v)[et]);var h=(t=cn(e,i))===nt?7:0|t[et],u=hn(h,n);if(a=!(4&u)){var l=t,f=n;const e=!!(2&u);e&&(f|=2);let i=!e,s=!0,o=0,a=0;for(;o<l.length;o++){const t=me(l[o],r,!1,f);if(t instanceof r){if(!e){const e=ht(t);i&&=!e,s&&=e}l[a++]=t}}a<o&&(l.length=a),u|=4,u=s?-4097&u:4096|u,u=i?8|u:-9&u}if(u!==h&&(st(t,u),2&u&&Object.freeze(t)),c&&!(8&u||!t.length&&(1===s||4===s&&(2&u||!(16&u)&&32&n)))){for(un(u)&&(t=Wt(t),u=xn(u,n),n=rn(e,n,i,t)),r=t,c=u,h=0;h<r.length;h++)(l=r[h])!==(u=Ke(l))&&(r[h]=u);c|=8,st(t,u=c=r.length?4096|c:-4097&c)}return an(t,u,e,n,i,s,a,o)}function An(t,e,n){const r=t.v;return Tn(t,r,0|r[et],e,n,sn(),!1,!0)}function bn(t){return null==t&&(t=void 0),t}function kn(t,e,n,r,i){return nn(t,n,r=bn(r),i),r&&!ht(r)&&$e(t.v),t}function Sn(t,e,n,r){t:{var i=r=bn(r);qe(t);const s=t.v;let o=0|s[et];if(null==i){const t=mn(s);if(_n(t,s,o,n)!==e)break t;t.set(n,0)}else o=yn(s,o,n,e);rn(s,o,e,i)}r&&!ht(r)&&$e(t.v)}function xn(t,e){return-273&(2&e?2|t:-3&t)}function Ln(t,e,n,r){var i=r;qe(t),t=Tn(t,r=t.v,0|r[et],n,e,2,!0),i=null!=i?i:new n,t.push(i),e=n=t===nt?7:0|t[et],(i=ht(i))?(n&=-9,1===t.length&&(n&=-4097)):n|=4096,n!==e&&st(t,n),i||$e(r)}function Rn(t,e,n){return ie(tn(t,e,void 0,n))}function In(t){return(g?tn(t,2,void 0,void 0,fe):fe(tn(t,2)))??Ze}function Fn(t,e){return tn(t,e,void 0,void 0,Qt)??0}function Mn(t,e,n){if(null!=n){if(\"number\"!=typeof n)throw D(\"int32\");if(!qt(n))throw D(\"int32\");n|=0}nn(t,e,n)}function Pn(t,e,n){nn(t,e,Zt(n))}function Cn(t,e,n){dn(t,e,pe(n),\"\")}function On(t,e,n){{qe(t);const o=t.v;let a=0|o[et];if(null==n)rn(o,a,e);else{var r=t=n===nt?7:0|n[et],i=un(t),s=i||Object.isFrozen(n);for(i||(t=0),s||(n=Wt(n),r=0,t=xn(t,a),s=!1),t|=5,t|=(4&t?512&t?512:1024&t?1024:0:void 0)??(g?1024:0),i=0;i<n.length;i++){const e=n[i],o=de(e);Object.is(e,o)||(s&&(n=Wt(n),r=0,t=xn(t,a),s=!1),n[i]=o)}t!==r&&(s&&(n=Wt(n),t=xn(t,a)),st(n,t)),rn(o,a,e,n)}}}function Nn(t,e,n){qe(t),on(t,e,ge,2,!0).push(de(n))}var Un=class{constructor(t,e,n){if(this.buffer=t,n&&!e)throw Error();this.g=e}};function Dn(t,e){if(\"string\"==typeof t)return new Un(L(t),e);if(Array.isArray(t))return new Un(new Uint8Array(t),e);if(t.constructor===Uint8Array)return new Un(t,!1);if(t.constructor===ArrayBuffer)return t=new Uint8Array(t),new Un(t,!1);if(t.constructor===P)return e=M(t)||new Uint8Array(0),new Un(e,!0,t);if(t instanceof Uint8Array)return t=t.constructor===Uint8Array?t:new Uint8Array(t.buffer,t.byteOffset,t.byteLength),new Un(t,!1);throw Error()}function Bn(t,e){let n,r=0,i=0,s=0;const o=t.h;let a=t.g;do{n=o[a++],r|=(127&n)<<s,s+=7}while(s<32&&128&n);if(s>32)for(i|=(127&n)>>4,s=3;s<32&&128&n;s+=7)n=o[a++],i|=(127&n)<<s;if(Wn(t,a),!(128&n))return e(r>>>0,i>>>0);throw Error()}function Gn(t){let e=0,n=t.g;const r=n+10,i=t.h;for(;n<r;){const r=i[n++];if(e|=r,0==(128&r))return Wn(t,n),!!(127&e)}throw Error()}function jn(t){const e=t.h;let n=t.g,r=e[n++],i=127&r;if(128&r&&(r=e[n++],i|=(127&r)<<7,128&r&&(r=e[n++],i|=(127&r)<<14,128&r&&(r=e[n++],i|=(127&r)<<21,128&r&&(r=e[n++],i|=r<<28,128&r&&128&e[n++]&&128&e[n++]&&128&e[n++]&&128&e[n++]&&128&e[n++])))))throw Error();return Wn(t,n),i}function Vn(t){return jn(t)>>>0}function Xn(t){var e=t.h;const n=t.g;var r=e[n],i=e[n+1];const s=e[n+2];return e=e[n+3],Wn(t,t.g+4),t=2*((i=(r<<0|i<<8|s<<16|e<<24)>>>0)>>31)+1,r=i>>>23&255,i&=8388607,255==r?i?NaN:t*(1/0):0==r?1401298464324817e-60*t*i:t*Math.pow(2,r-150)*(i+8388608)}function Hn(t){return jn(t)}function Wn(t,e){if(t.g=e,e>t.l)throw Error()}function zn(t,e){if(e<0)throw Error();const n=t.g;if((e=n+e)>t.l)throw Error();return t.g=e,n}function Kn(t,e){if(0==e)return F();var n=zn(t,e);return t.Y&&t.j?n=t.h.subarray(n,n+e):(t=t.h,n=n===(e=n+e)?new Uint8Array(0):Rt?t.slice(n,e):new Uint8Array(t.subarray(n,e))),0==n.length?F():new P(n,I)}var Yn=[];function qn(t,e,n,r){if(ir.length){const i=ir.pop();return i.o(r),i.g.init(t,e,n,r),i}return new rr(t,e,n,r)}function $n(t){t.g.clear(),t.l=-1,t.h=-1,ir.length<100&&ir.push(t)}function Jn(t){var e=t.g;if(e.g==e.l)return!1;t.m=t.g.g;var n=Vn(t.g);if(e=n>>>3,!((n&=7)>=0&&n<=5))throw Error();if(e<1)throw Error();return t.l=e,t.h=n,!0}function Zn(t){switch(t.h){case 0:0!=t.h?Zn(t):Gn(t.g);break;case 1:Wn(t=t.g,t.g+8);break;case 2:if(2!=t.h)Zn(t);else{var e=Vn(t.g);Wn(t=t.g,t.g+e)}break;case 5:Wn(t=t.g,t.g+4);break;case 3:for(e=t.l;;){if(!Jn(t))throw Error();if(4==t.h){if(t.l!=e)throw Error();break}Zn(t)}break;default:throw Error()}}function Qn(t,e,n){const r=t.g.l;var i=Vn(t.g);let s=(i=t.g.g+i)-r;if(s<=0&&(t.g.l=i,n(e,t,void 0,void 0,void 0),s=i-t.g.g),s)throw Error();return t.g.g=i,t.g.l=r,e}function tr(t){var e=Vn(t.g),a=zn(t=t.g,e);if(t=t.h,o){var c,h=t;(c=s)||(c=s=new TextDecoder(\"utf-8\",{fatal:!0})),e=a+e,h=0===a&&e===h.length?h:h.subarray(a,e);try{var u=c.decode(h)}catch(t){if(void 0===i){try{c.decode(new Uint8Array([128]))}catch(t){}try{c.decode(new Uint8Array([97])),i=!0}catch(t){i=!1}}throw!i&&(s=void 0),t}}else{e=(u=a)+e,a=[];let i,s=null;for(;u<e;){var l=t[u++];l<128?a.push(l):l<224?u>=e?n():(i=t[u++],l<194||128!=(192&i)?(u--,n()):a.push((31&l)<<6|63&i)):l<240?u>=e-1?n():(i=t[u++],128!=(192&i)||224===l&&i<160||237===l&&i>=160||128!=(192&(c=t[u++]))?(u--,n()):a.push((15&l)<<12|(63&i)<<6|63&c)):l<=244?u>=e-2?n():(i=t[u++],128!=(192&i)||i-144+(l<<28)>>30!=0||128!=(192&(c=t[u++]))||128!=(192&(h=t[u++]))?(u--,n()):(l=(7&l)<<18|(63&i)<<12|(63&c)<<6|63&h,l-=65536,a.push(55296+(l>>10&1023),56320+(1023&l)))):n(),a.length>=8192&&(s=r(s,a),a.length=0)}u=r(s,a)}return u}function er(t){const e=Vn(t.g);return Kn(t.g,e)}function nr(t,e,n){var r=Vn(t.g);for(r=t.g.g+r;t.g.g<r;)n.push(e(t.g))}var rr=class{constructor(t,e,n,r){if(Yn.length){const i=Yn.pop();i.init(t,e,n,r),t=i}else t=new class{constructor(t,e,n,r){this.h=null,this.j=!1,this.g=this.l=this.m=0,this.init(t,e,n,r)}init(t,e,n,{Y:r=!1,ea:i=!1}={}){this.Y=r,this.ea=i,t&&(t=Dn(t,this.ea),this.h=t.buffer,this.j=t.g,this.m=e||0,this.l=void 0!==n?this.m+n:this.h.length,this.g=this.m)}clear(){this.h=null,this.j=!1,this.g=this.l=this.m=0,this.Y=!1}}(t,e,n,r);this.g=t,this.m=this.g.g,this.h=this.l=-1,this.o(r)}o({ha:t=!1}={}){this.ha=t}},ir=[];function sr(t){return t?/^\\d+$/.test(t)?(Xt(t),new or(Ft,Mt)):null:ar||=new or(0,0)}var or=class{constructor(t,e){this.h=t>>>0,this.g=e>>>0}};let ar;function cr(t){return t?/^-?\\d+$/.test(t)?(Xt(t),new hr(Ft,Mt)):null:ur||=new hr(0,0)}var hr=class{constructor(t,e){this.h=t>>>0,this.g=e>>>0}};let ur;function lr(t,e,n){for(;n>0||e>127;)t.g.push(127&e|128),e=(e>>>7|n<<25)>>>0,n>>>=7;t.g.push(e)}function fr(t,e){for(;e>127;)t.g.push(127&e|128),e>>>=7;t.g.push(e)}function dr(t,e){if(e>=0)fr(t,e);else{for(let n=0;n<9;n++)t.g.push(127&e|128),e>>=7;t.g.push(1)}}function pr(t){var e=Ft;t.g.push(e>>>0&255),t.g.push(e>>>8&255),t.g.push(e>>>16&255),t.g.push(e>>>24&255)}function gr(t,e){0!==e.length&&(t.l.push(e),t.h+=e.length)}function mr(t,e,n){fr(t.g,8*e+n)}function yr(t,e){return mr(t,e,2),e=t.g.end(),gr(t,e),e.push(t.h),e}function _r(t,e){var n=e.pop();for(n=t.h+t.g.length()-n;n>127;)e.push(127&n|128),n>>>=7,t.h++;e.push(n),t.h++}function vr(t,e,n){mr(t,e,2),fr(t.g,n.length),gr(t,t.g.end()),gr(t,n)}function Er(t,e,n,r){null!=n&&(e=yr(t,e),r(n,t),_r(t,e))}function wr(){const t=class{constructor(){throw Error()}};return Object.setPrototypeOf(t,t.prototype),t}var Tr=wr(),Ar=wr(),br=wr(),kr=wr(),Sr=wr(),xr=wr(),Lr=wr(),Rr=wr(),Ir=wr(),Fr=wr();function Mr(t,e,n){var r=t.v;z&&z in r&&(r=r[z])&&delete r[e.g],e.h?e.j(t,e.h,e.g,n,e.l):e.j(t,e.g,n,e.l)}var Pr=class{constructor(t,e){this.v=je(t,e,void 0,2048)}toJSON(){return Ue(this)}j(){var t=Fo,e=this.v,n=t.g,r=z;if(j&&r&&null!=e[r]?.[n]&&B(K,3),e=t.g,Z&&z&&void 0===Z&&(r=(n=this.v)[z])&&(r=r.da))try{r(n,e,Me)}catch(t){u(t)}return t.h?t.m(this,t.h,t.g,t.l):t.m(this,t.g,t.defaultValue,t.l)}clone(){const t=this.v,e=0|t[et];return Je(this,t,e)?He(this,t,!0):new this.constructor(ze(t,e,!1))}};Pr.prototype[J]=ct,Pr.prototype.toString=function(){return this.v.toString()};var Cr=class{constructor(t,e,n){this.g=t,this.h=e,t=Tr,this.l=!!t&&n===t||!1}};function Or(t,e){return new Cr(t,e,Tr)}function Nr(t,e,n,r,i){Er(t,n,Yr(e,r),i)}const Ur=Or((function(t,e,n,r,i){return 2===t.h&&(Qn(t,vn(e,r,n),i),!0)}),Nr),Dr=Or((function(t,e,n,r,i){return 2===t.h&&(Qn(t,vn(e,r,n),i),!0)}),Nr);var Br=Symbol(),Gr=Symbol(),jr=Symbol(),Vr=Symbol(),Xr=Symbol();let Hr,Wr;function zr(t,e,n,r){var i=r[t];if(i)return i;(i={}).qa=r,i.T=function(t){switch(typeof t){case\"boolean\":return De||=[0,void 0,!0];case\"number\":return t>0?void 0:0===t?Be||=[0,void 0]:[-t,void 0];case\"string\":return[0,t];case\"object\":return t}}(r[0]);var s=r[1];let o=1;s&&s.constructor===Object&&(i.ba=s,\"function\"==typeof(s=r[++o])&&(i.ma=!0,Hr??=s,Wr??=r[o+1],s=r[o+=2]));const a={};for(;s&&Array.isArray(s)&&s.length&&\"number\"==typeof s[0]&&s[0]>0;){for(var c=0;c<s.length;c++)a[s[c]]=s;s=r[++o]}for(c=1;void 0!==s;){let t;\"number\"==typeof s&&(c+=s,s=r[++o]);var h=void 0;if(s instanceof Cr?t=s:(t=Ur,o--),t?.l){s=r[++o],h=r;var u=o;\"function\"==typeof s&&(s=s(),h[u]=s),h=s}for(u=c+1,\"number\"==typeof(s=r[++o])&&s<0&&(u-=s,s=r[++o]);c<u;c++){const r=a[c];h?n(i,c,t,h,r):e(i,c,t,r)}}return r[t]=i}function Kr(t){return Array.isArray(t)?t[0]instanceof Cr?t:[Dr,t]:[t,void 0]}function Yr(t,e){return t instanceof Pr?t.v:Array.isArray(t)?Ge(t,e):void 0}function qr(t,e,n,r){const i=n.g;t[e]=r?(t,e,n)=>i(t,e,n,r):i}function $r(t,e,n,r,i){const s=n.g;let o,a;t[e]=(t,e,n)=>s(t,e,n,a||=zr(Gr,qr,$r,r).T,o||=Jr(r),i)}function Jr(t){let e=t[jr];if(null!=e)return e;const n=zr(Gr,qr,$r,t);return e=n.ma?(t,e)=>Hr(t,e,n):(t,e)=>{for(;Jn(e)&&4!=e.h;){var r=e.l,i=n[r];if(null==i){var s=n.ba;s&&(s=s[r])&&(null!=(s=Qr(s))&&(i=n[r]=s))}if(null==i||!i(e,t,r)){if(i=(s=e).m,Zn(s),s.ha)var o=void 0;else o=s.g.g-i,s.g.g=i,o=Kn(s.g,o);i=void 0,s=t,o&&((i=s[z]??(s[z]=new Fe))[r]??(i[r]=[])).push(o)}}return(t=Re(t))&&(t.da=n.qa[Xr]),!0},t[jr]=e,t[Xr]=Zr.bind(t),e}function Zr(t,e,n,r){var i=this[Gr];const s=this[jr],o=Ge(void 0,i.T),a=Re(t);if(a){var c=!1,h=i.ba;if(h){if(i=(e,n,i)=>{if(0!==i.length)if(h[n])for(const t of i){e=qn(t);try{c=!0,s(o,e)}finally{$n(e)}}else r?.(t,n,i)},null==e)Ie(a,i);else if(null!=a){const t=a[e];t&&i(a,e,t)}if(c){let r=0|t[et];if(2&r&&2048&r&&!n?.Ka)throw Error();const i=mt(r),s=(e,s)=>{if(null!=en(t,e,i)){if(1===n?.Qa)return;throw Error()}null!=s&&(r=rn(t,r,e,s,i)),delete a[e]};null==e?pt(o,0|o[et],((t,e)=>{s(t,e)})):s(e,en(o,e,i))}}}}function Qr(t){const e=(t=Kr(t))[0].g;if(t=t[1]){const n=Jr(t),r=zr(Gr,qr,$r,t).T;return(t,i,s)=>e(t,i,s,r,n)}return e}function ti(t,e,n){t[e]=n.h}function ei(t,e,n,r){let i,s;const o=n.h;t[e]=(t,e,n)=>o(t,e,n,s||=zr(Br,ti,ei,r).T,i||=ni(r))}function ni(t){let e=t[Vr];if(!e){const n=zr(Br,ti,ei,t);e=(t,e)=>ri(t,e,n),t[Vr]=e}return e}function ri(t,e,n){pt(t,0|t[et],((t,r)=>{if(null!=r){var i=function(t,e){var n=t[e];if(n)return n;if((n=t.ba)&&(n=n[e])){var r=(n=Kr(n))[0].h;if(n=n[1]){const e=ni(n),i=zr(Br,ti,ei,n).T;n=t.ma?Wr(i,e):(t,n,s)=>r(t,n,s,i,e)}else n=r;return t[e]=n}}(n,t);i?i(e,r,t):t<500||B(q,3)}})),(t=Re(t))&&Ie(t,((t,n,r)=>{for(gr(e,e.g.end()),t=0;t<r.length;t++)gr(e,M(r[t])||new Uint8Array(0))}))}const ii=Tt(0);function si(t,e){if(Array.isArray(e)){var n=0|e[et];if(4&n)return e;for(var r=0,i=0;r<e.length;r++){const n=t(e[r]);null!=n&&(e[i++]=n)}return i<r&&(e.length=i),(t=-1537&(5|n))!==n&&st(e,t),2&t&&Object.freeze(e),e}}function oi(t,e,n){return new Cr(t,e,n)}function ai(t,e,n){return new Cr(t,e,n)}function ci(t,e,n){rn(t,0|t[et],e,n,mt(0|t[et]))}var hi=Or((function(t,e,n,r,i){if(2!==t.h)return!1;if(t=Wt(t=Qn(t,Ge([void 0,void 0],r),i)),i=mt(r=0|e[et]),2&r)throw Error();let s=en(e,n,i);if(s instanceof be)0!=(2&s.J)?(s=s.V(),s.push(t),rn(e,r,n,s,i)):s.Ma(t);else if(Array.isArray(s)){var o=0|s[et];8192&o||st(s,o|=8192),2&o&&(s=fn(s),rn(e,r,n,s,i)),s.push(t)}else rn(e,r,n,at([t]),i);return!0}),(function(t,e,n,r,i){if(e instanceof be)e.forEach(((e,s)=>{Er(t,n,Ge([s,e],r),i)}));else if(Array.isArray(e)){for(let s=0;s<e.length;s++){const o=e[s];Array.isArray(o)&&Er(t,n,Ge(o,r),i)}at(e)}}));function ui(t,e,n){null!=(e=Qt(e))&&(mr(t,n,5),t=t.g,Ot(e),pr(t))}function li(t,e,n){if(e=function(t){if(null==t)return t;const e=typeof t;if(\"bigint\"===e)return String(zt(64,t));if(re(t)){if(\"string\"===e)return ce(t);if(\"number\"===e)return ae(t)}}(e),null!=e){if(\"string\"==typeof e)cr(e);if(null!=e)switch(mr(t,n,0),typeof e){case\"number\":t=t.g,Ct(e),lr(t,Ft,Mt);break;case\"bigint\":n=BigInt.asUintN(64,e),n=new hr(Number(n&BigInt(4294967295)),Number(n>>BigInt(32))),lr(t.g,n.h,n.g);break;default:n=cr(e),lr(t.g,n.h,n.g)}}}function fi(t,e,n){null!=(e=ie(e))&&null!=e&&(mr(t,n,0),dr(t.g,e))}function di(t,e,n){null!=(e=ee(e))&&(mr(t,n,0),t.g.g.push(e?1:0))}function pi(t,e,n){null!=(e=ge(e))&&vr(t,n,h(e))}function gi(t,e,n,r,i){Er(t,n,Yr(e,r),i)}function mi(t,e,n){null!=(e=null==e||\"string\"==typeof e||e instanceof P?e:void 0)&&vr(t,n,Dn(e,!0).buffer)}function yi(t,e,n){return(5===t.h||2===t.h)&&(e=pn(e,0|e[et],n),2==t.h?nr(t,Xn,e):e.push(Xn(t.g)),!0)}var _i=oi((function(t,e,n){return 5===t.h&&(ci(e,n,Xn(t.g)),!0)}),ui,Rr),vi=ai(yi,(function(t,e,n){if(null!=(e=si(Qt,e)))for(let o=0;o<e.length;o++){var r=t,i=n,s=e[o];null!=s&&(mr(r,i,5),r=r.g,Ot(s),pr(r))}}),Rr),Ei=ai(yi,(function(t,e,n){if(null!=(e=si(Qt,e))&&e.length){mr(t,n,2),fr(t.g,4*e.length);for(let r=0;r<e.length;r++)n=t.g,Ot(e[r]),pr(n)}}),Rr),wi=oi((function(t,e,n){return 5===t.h&&(ci(e,n,0===(t=Xn(t.g))?void 0:t),!0)}),ui,Rr),Ti=oi((function(t,e,n){return p?(0!==t.h?t=!1:(ci(e,n,Bn(t.g,Bt)),t=!0),t):0===t.h&&(ci(e,n,Bn(t.g,Dt)),!0)}),li,xr),Ai=oi((function(t,e,n){return p?(0!==t.h?e=!1:(ci(e,n,(t=Bn(t.g,Bt))===ii?void 0:t),e=!0),e):0===t.h&&(ci(e,n,0===(t=Bn(t.g,Dt))?void 0:t),!0)}),li,xr),bi=oi((function(t,e,n){return p?(0!==t.h?t=!1:(ci(e,n,Bn(t.g,Ut)),t=!0),t):0===t.h&&(ci(e,n,Bn(t.g,Nt)),!0)}),(function(t,e,n){if(e=function(t){if(null==t)return t;var e=typeof t;if(\"bigint\"===e)return String(Kt(64,t));if(re(t)){if(\"string\"===e)return e=$t(Number(t)),Yt(e)&&e>=0?t=String(e):(-1!==(e=t.indexOf(\".\"))&&(t=t.substring(0,e)),(e=\"-\"!==t[0]&&((e=t.length)<20||20===e&&t<=\"18446744073709551615\"))||(Xt(t),t=Gt(Ft,Mt))),t;if(\"number\"===e)return(t=$t(t))>=0&&Yt(t)||(Ct(t),t=Nt(Ft,Mt)),t}}(e),null!=e){if(\"string\"==typeof e)sr(e);if(null!=e)switch(mr(t,n,0),typeof e){case\"number\":t=t.g,Ct(e),lr(t,Ft,Mt);break;case\"bigint\":n=BigInt.asUintN(64,e),n=new or(Number(n&BigInt(4294967295)),Number(n>>BigInt(32))),lr(t.g,n.h,n.g);break;default:n=sr(e),lr(t.g,n.h,n.g)}}}),Lr),ki=oi((function(t,e,n){return 0===t.h&&(ci(e,n,jn(t.g)),!0)}),fi,kr),Si=ai((function(t,e,n){return(0===t.h||2===t.h)&&(e=pn(e,0|e[et],n),2==t.h?nr(t,jn,e):e.push(jn(t.g)),!0)}),(function(t,e,n){if(null!=(e=si(ie,e))&&e.length){n=yr(t,n);for(let n=0;n<e.length;n++)dr(t.g,e[n]);_r(t,n)}}),kr),xi=oi((function(t,e,n){return 0===t.h&&(ci(e,n,0===(t=jn(t.g))?void 0:t),!0)}),fi,kr),Li=oi((function(t,e,n){return 0===t.h&&(ci(e,n,Gn(t.g)),!0)}),di,Ar),Ri=oi((function(t,e,n){return 0===t.h&&(ci(e,n,!1===(t=Gn(t.g))?void 0:t),!0)}),di,Ar),Ii=ai((function(t,e,n){return 2===t.h&&(t=tr(t),pn(e,0|e[et],n).push(t),!0)}),(function(t,e,n){if(null!=(e=si(ge,e)))for(let o=0;o<e.length;o++){var r=t,i=n,s=e[o];null!=s&&vr(r,i,h(s))}}),br),Fi=oi((function(t,e,n){return 2===t.h&&(ci(e,n,\"\"===(t=tr(t))?void 0:t),!0)}),pi,br),Mi=oi((function(t,e,n){return 2===t.h&&(ci(e,n,tr(t)),!0)}),pi,br),Pi=function(t,e,n=Tr){return new Cr(t,e,n)}((function(t,e,n,r,i){return 2===t.h&&(r=Ge(void 0,r),pn(e,0|e[et],n).push(r),Qn(t,r,i),!0)}),(function(t,e,n,r,i){if(Array.isArray(e)){for(let s=0;s<e.length;s++)gi(t,e[s],n,r,i);1&(t=0|e[et])||st(e,1|t)}})),Ci=Or((function(t,e,n,r,i,s){if(2!==t.h)return!1;let o=0|e[et];return yn(e,o,s,n,mt(o)),Qn(t,e=vn(e,r,n),i),!0}),gi),Oi=oi((function(t,e,n){return 2===t.h&&(ci(e,n,er(t)),!0)}),mi,Ir),Ni=ai((function(t,e,n){return(0===t.h||2===t.h)&&(e=pn(e,0|e[et],n),2==t.h?nr(t,Vn,e):e.push(Vn(t.g)),!0)}),(function(t,e,n){if(null!=(e=si(se,e)))for(let o=0;o<e.length;o++){var r=t,i=n,s=e[o];null!=s&&(mr(r,i,0),fr(r.g,s))}}),Sr),Ui=oi((function(t,e,n){return 0===t.h&&(ci(e,n,0===(t=Vn(t.g))?void 0:t),!0)}),(function(t,e,n){null!=(e=se(e))&&null!=e&&(mr(t,n,0),fr(t.g,e))}),Sr),Di=oi((function(t,e,n){return 0===t.h&&(ci(e,n,jn(t.g)),!0)}),(function(t,e,n){null!=(e=ie(e))&&(e=parseInt(e,10),mr(t,n,0),dr(t.g,e))}),Fr);class Bi{constructor(t,e){var n=rs;this.g=t,this.h=e,this.m=wn,this.j=kn,this.defaultValue=void 0,this.l=null!=n.Oa?gt:void 0}register(){_(this)}}function Gi(t,e){return new Bi(t,e)}function ji(t,e){return(n,r)=>{{const s={ea:!0};r&&Object.assign(s,r),n=qn(n,void 0,void 0,s);try{const r=new t,s=r.v;Jr(e)(s,n);var i=r}finally{$n(n)}}return i}}function Vi(t){return function(){const e=new class{constructor(){this.l=[],this.h=0,this.g=new class{constructor(){this.g=[]}length(){return this.g.length}end(){const t=this.g;return this.g=[],t}}}};ri(this.v,e,zr(Br,ti,ei,t)),gr(e,e.g.end());const n=new Uint8Array(e.h),r=e.l,i=r.length;let s=0;for(let t=0;t<i;t++){const e=r[t];n.set(e,s),s+=e.length}return e.l=[n],n}}var Xi=class extends Pr{constructor(t){super(t)}},Hi=[0,Fi,oi((function(t,e,n){return 2===t.h&&(ci(e,n,(t=er(t))===F()?void 0:t),!0)}),(function(t,e,n){if(null!=e){if(e instanceof Pr){const r=e.Ra;return void(r?(e=r(e),null!=e&&vr(t,n,Dn(e,!0).buffer)):B(q,3))}if(Array.isArray(e))return void B(q,3)}mi(t,e,n)}),Ir)];let Wi,zi=globalThis.trustedTypes;function Ki(t){var e;return void 0===Wi&&(Wi=function(){let t=null;if(!zi)return t;try{const e=t=>t;t=zi.createPolicy(\"goog#html\",{createHTML:e,createScript:e,createScriptURL:e})}catch(t){}return t}()),t=(e=Wi)?e.createScriptURL(t):t,new class{constructor(t){this.g=t}toString(){return this.g+\"\"}}(t)}function Yi(t,...e){if(0===e.length)return Ki(t[0]);let n=t[0];for(let r=0;r<e.length;r++)n+=encodeURIComponent(e[r])+t[r+1];return Ki(n)}var qi=[0,ki,Di,Li,-1,Si,Di,-1,Li],$i=class extends Pr{constructor(t){super(t)}},Ji=[0,Li,Mi,Li,Di,-1,ai((function(t,e,n){return(0===t.h||2===t.h)&&(e=pn(e,0|e[et],n),2==t.h?nr(t,Hn,e):e.push(jn(t.g)),!0)}),(function(t,e,n){if(null!=(e=si(ie,e))&&e.length){n=yr(t,n);for(let n=0;n<e.length;n++)dr(t.g,e[n]);_r(t,n)}}),Fr),Mi,-1,[0,Li,-1],Di,Li,-1],Zi=[0,3,Li,-1,2,[0,ki],[0,Di,Li],[0,Mi,-1],[0]],Qi=[0,Mi,-2],ts=class extends Pr{constructor(t){super(t)}},es=[0],ns=[0,ki,Li,1,Li,-4],rs=class extends Pr{constructor(t){super(t,2)}},is={};is[336783863]=[0,Mi,Li,-1,ki,[0,[1,2,3,4,5,6,7,8,9],Ci,es,Ci,Ji,Ci,Qi,Ci,ns,Ci,qi,Ci,[0,Mi,-2],Ci,[0,Mi,Di],Ci,Zi,Ci,[0,Di,-1,Li]],[0,Mi],Li,[0,[1,3],[2,4],Ci,[0,Si],-1,Ci,[0,Ii],-1,Pi,[0,Mi,-1]],Mi];var ss=[0,Ai,-1,Ri,-3,Ai,Si,Fi,xi,Ai,-1,Ri,xi,Ri,-2,Fi];function os(t,e){Nn(t,3,e)}function as(t,e){Nn(t,4,e)}var cs=class extends Pr{constructor(t){super(t,500)}o(t){return kn(this,0,7,t)}},hs=[-1,{}],us=[0,Mi,1,hs],ls=[0,Mi,Ii,hs];function fs(t,e){Ln(t,1,cs,e)}function ds(t,e){Nn(t,10,e)}function ps(t,e){Nn(t,15,e)}var gs=class extends Pr{constructor(t){super(t,500)}o(t){return kn(this,0,1001,t)}},ms=[-500,Pi,[-500,Fi,-1,Ii,-3,[-2,is,Li],Pi,Hi,xi,-1,us,ls,Pi,[0,Fi,Ri],Fi,ss,xi,Ii,987,Ii],4,Pi,[-500,Mi,-1,[-1,{}],998,Mi],Pi,[-500,Mi,Ii,-1,[-2,{},Li],997,Ii,-1],xi,Pi,[-500,Mi,Ii,hs,998,Ii],Ii,xi,us,ls,Pi,[0,Fi,-1,hs],Ii,-2,ss,Fi,-1,Ri,[0,Ri,Ui],978,hs,Pi,Hi];gs.prototype.g=Vi(ms);var ys=ji(gs,ms),_s=class extends Pr{constructor(t){super(t)}},vs=class extends Pr{constructor(t){super(t)}g(){return An(this,_s,1)}},Es=[0,Pi,[0,ki,_i,Mi,-1]],ws=ji(vs,Es),Ts=class extends Pr{constructor(t){super(t)}},As=class extends Pr{constructor(t){super(t)}},bs=class extends Pr{constructor(t){super(t)}l(){return wn(this,Ts,2)}g(){return An(this,As,5)}},ks=ji(class extends Pr{constructor(t){super(t)}},[0,Ii,Si,Ei,[0,Di,[0,ki,-3],[0,_i,-3],[0,ki,-1,[0,Pi,[0,ki,-2]]],Pi,[0,_i,-1,Mi,_i]],Mi,-1,Ti,Pi,[0,ki,_i],Ii,Ti]),Ss=class extends Pr{constructor(t){super(t)}},xs=ji(class extends Pr{constructor(t){super(t)}},[0,Pi,[0,_i,-4]]),Ls=class extends Pr{constructor(t){super(t)}},Rs=ji(class extends Pr{constructor(t){super(t)}},[0,Pi,[0,_i,-4]]),Is=class extends Pr{constructor(t){super(t)}},Fs=[0,ki,-1,Ei,Di],Ms=class extends Pr{constructor(t){super(t)}};Ms.prototype.g=Vi([0,_i,-4,Ti]);var Ps=class extends Pr{constructor(t){super(t)}},Cs=ji(class extends Pr{constructor(t){super(t)}},[0,Pi,[0,1,ki,Mi,Es],Ti]),Os=class extends Pr{constructor(t){super(t)}},Ns=class extends Pr{constructor(t){super(t)}na(){const t=tn(this,1,void 0,void 0,ln);return null==t?F():t}},Us=class extends Pr{constructor(t){super(t)}},Ds=[1,2],Bs=ji(class extends Pr{constructor(t){super(t)}},[0,Pi,[0,Ds,Ci,[0,Ei],Ci,[0,Oi],ki,Mi],Ti]),Gs=class extends Pr{constructor(t){super(t)}},js=[0,Mi,ki,_i,Ii,-1],Vs=class extends Pr{constructor(t){super(t)}},Xs=[0,Li,-1],Hs=class extends Pr{constructor(t){super(t)}},Ws=[1,2,3,4,5,6],zs=class extends Pr{constructor(t){super(t)}g(){return null!=tn(this,1,void 0,void 0,ln)}l(){return null!=ge(tn(this,2))}},Ks=class extends Pr{constructor(t){super(t)}g(){return ee(tn(this,2))??!1}},Ys=[0,Oi,Mi,[0,ki,Ti,-1],[0,bi,Ti]],qs=[0,Ys,Li,[0,Ws,Ci,ns,Ci,Ji,Ci,qi,Ci,es,Ci,Qi,Ci,Zi],Di],$s=class extends Pr{constructor(t){super(t)}},Js=[0,qs,_i,-1,ki],Zs=Gi(502141897,$s);is[502141897]=Js;var Qs=ji(class extends Pr{constructor(t){super(t)}},[0,[0,Di,-1,vi,Ni],Fs]),to=class extends Pr{constructor(t){super(t)}},eo=class extends Pr{constructor(t){super(t)}},no=[0,qs,_i,[0,qs],Li],ro=Gi(508968150,eo);is[508968150]=[0,qs,Js,no,_i,[0,[0,Ys]]],is[508968149]=no;var io=class extends Pr{constructor(t){super(t)}l(){return wn(this,Gs,2)}g(){nn(this,2)}},so=[0,qs,js];is[478825465]=so;var oo=class extends Pr{constructor(t){super(t)}},ao=class extends Pr{constructor(t){super(t)}},co=class extends Pr{constructor(t){super(t)}},ho=class extends Pr{constructor(t){super(t)}},uo=class extends Pr{constructor(t){super(t)}},lo=[0,qs,[0,qs],so,-1],fo=[0,qs,_i,ki],po=[0,qs,_i],go=[0,qs,fo,po,_i],mo=Gi(479097054,uo);is[479097054]=[0,qs,go,lo],is[463370452]=lo,is[464864288]=fo;var yo=Gi(462713202,ho);is[462713202]=go,is[474472470]=po;var _o=class extends Pr{constructor(t){super(t)}},vo=class extends Pr{constructor(t){super(t)}},Eo=class extends Pr{constructor(t){super(t)}},wo=class extends Pr{constructor(t){super(t)}},To=[0,qs,_i,-1,ki],Ao=[0,qs,_i,Li];wo.prototype.g=Vi([0,qs,po,[0,qs],Js,no,To,Ao]);var bo=class extends Pr{constructor(t){super(t)}},ko=Gi(456383383,bo);is[456383383]=[0,qs,js];var So=class extends Pr{constructor(t){super(t)}},xo=Gi(476348187,So);is[476348187]=[0,qs,Xs];var Lo=class extends Pr{constructor(t){super(t)}},Ro=class extends Pr{constructor(t){super(t)}},Io=[0,Di,-1],Fo=Gi(458105876,class extends Pr{constructor(t){super(t)}g(){let t;var e=this.v;const n=0|e[et];return t=ht(this,n),e=function(t,e,n,r){var i=Ro;!r&&Ye(t)&&(n=0|(e=t.v)[et]);var s=en(e,2);if(t=!1,null==s){if(r)return Le();s=[]}else if(s.constructor===be){if(!(2&s.J)||r)return s;s=s.V()}else Array.isArray(s)?t=!!(2&(0|s[et])):s=[];if(r){if(!s.length)return Le();t||(t=!0,ot(s))}else t&&(t=!1,at(s),s=fn(s));return!t&&32&n&&it(s,32),n=rn(e,n,2,r=new be(s,i,ye,void 0)),t||$e(e,n),r}(this,e,n,t),!t&&Ro&&(e.ra=!0),e}});is[458105876]=[0,Io,hi,[!0,Ti,[0,Mi,-1,Ii]],[0,Si,Li,Di]];var Mo=class extends Pr{constructor(t){super(t)}},Po=Gi(458105758,Mo);is[458105758]=[0,qs,Mi,Io];var Co=class extends Pr{constructor(t){super(t)}},Oo=[0,wi,-1,Ri],No=class extends Pr{constructor(t){super(t)}},Uo=class extends Pr{constructor(t){super(t)}},Do=[1,2];Uo.prototype.g=Vi([0,Do,Ci,Oo,Ci,[0,Pi,Oo]]);var Bo=class extends Pr{constructor(t){super(t)}},Go=Gi(443442058,Bo);is[443442058]=[0,qs,Mi,ki,_i,Ii,-1,Li,_i],is[514774813]=To;var jo=class extends Pr{constructor(t){super(t)}},Vo=Gi(516587230,jo);function Xo(t,e){return e=e?e.clone():new Gs,void 0!==t.displayNamesLocale?nn(e,1,pe(t.displayNamesLocale)):void 0===t.displayNamesLocale&&nn(e,1),void 0!==t.maxResults?Mn(e,2,t.maxResults):\"maxResults\"in t&&nn(e,2),void 0!==t.scoreThreshold?Pn(e,3,t.scoreThreshold):\"scoreThreshold\"in t&&nn(e,3),void 0!==t.categoryAllowlist?On(e,4,t.categoryAllowlist):\"categoryAllowlist\"in t&&nn(e,4),void 0!==t.categoryDenylist?On(e,5,t.categoryDenylist):\"categoryDenylist\"in t&&nn(e,5),e}function Ho(t){const e=Number(t);return Number.isSafeInteger(e)?e:String(t)}function Wo(t,e=-1,n=\"\"){return{categories:t.map((t=>({index:Rn(t,1)??0??-1,score:Fn(t,2)??0,categoryName:ge(tn(t,3))??\"\"??\"\",displayName:ge(tn(t,4))??\"\"??\"\"}))),headIndex:e,headName:n}}function zo(t){const e={classifications:An(t,Ps,1).map((t=>Wo(wn(t,vs,4)?.g()??[],Rn(t,2)??0,ge(tn(t,3))??\"\")))};return null!=function(t){return le(g?tn(t,2,void 0,void 0,fe):tn(t,2))}(t)&&(e.timestampMs=Ho(In(t))),e}function Ko(t){var e=on(t,3,Qt,sn()),n=on(t,2,ie,sn()),r=on(t,1,ge,sn()),i=on(t,9,ge,sn());const s={categories:[],keypoints:[]};for(let t=0;t<e.length;t++)s.categories.push({score:e[t],index:n[t]??-1,categoryName:r[t]??\"\",displayName:i[t]??\"\"});if((e=wn(t,bs,4)?.l())&&(s.boundingBox={originX:Rn(e,1,Qe)??0,originY:Rn(e,2,Qe)??0,width:Rn(e,3,Qe)??0,height:Rn(e,4,Qe)??0,angle:0}),wn(t,bs,4)?.g().length)for(const e of wn(t,bs,4).g())s.keypoints.push({x:tn(e,1,void 0,Qe,Qt)??0,y:tn(e,2,void 0,Qe,Qt)??0,score:tn(e,4,void 0,Qe,Qt)??0,label:ge(tn(e,3,void 0,Qe))??\"\"});return s}function Yo(t){const e=[];for(const n of An(t,Ls,1))e.push({x:Fn(n,1)??0,y:Fn(n,2)??0,z:Fn(n,3)??0,visibility:Fn(n,4)??0});return e}function qo(t){const e=[];for(const n of An(t,Ss,1))e.push({x:Fn(n,1)??0,y:Fn(n,2)??0,z:Fn(n,3)??0,visibility:Fn(n,4)??0});return e}function $o(t){return Array.from(t,(t=>t>127?t-256:t))}function Jo(t,e){if(t.length!==e.length)throw Error(`Cannot compute cosine similarity between embeddings of different sizes (${t.length} vs. ${e.length}).`);let n=0,r=0,i=0;for(let s=0;s<t.length;s++)n+=t[s]*e[s],r+=t[s]*t[s],i+=e[s]*e[s];if(r<=0||i<=0)throw Error(\"Cannot compute cosine similarity on embedding with 0 norm.\");return n/Math.sqrt(r*i)}let Zo;is[516587230]=[0,qs,To,Ao,_i],is[518928384]=Ao;const Qo=new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11]);async function ta(){if(void 0===Zo)try{await WebAssembly.instantiate(Qo),Zo=!0}catch{Zo=!1}return Zo}async function ea(t,e=Yi``){const n=await ta()?\"wasm_internal\":\"wasm_nosimd_internal\";return{wasmLoaderPath:`${e}/${t}_${n}.js`,wasmBinaryPath:`${e}/${t}_${n}.wasm`}}var na=class{};function ra(){var t=navigator;return\"undefined\"!=typeof OffscreenCanvas&&(!function(t=navigator){return(t=t.userAgent).includes(\"Safari\")&&!t.includes(\"Chrome\")}(t)||!!((t=t.userAgent.match(/Version\\/([\\d]+).*Safari/))&&t.length>=1&&Number(t[1])>=17))}async function ia(t){if(\"function\"!=typeof importScripts){const e=document.createElement(\"script\");return e.src=t.toString(),e.crossOrigin=\"anonymous\",new Promise(((t,n)=>{e.addEventListener(\"load\",(()=>{t()}),!1),e.addEventListener(\"error\",(t=>{n(t)}),!1),document.body.appendChild(e)}))}try{importScripts(t.toString())}catch(e){if(!(e instanceof TypeError))throw e;await self.import(t.toString())}}function sa(t){return void 0!==t.videoWidth?[t.videoWidth,t.videoHeight]:void 0!==t.naturalWidth?[t.naturalWidth,t.naturalHeight]:void 0!==t.displayWidth?[t.displayWidth,t.displayHeight]:[t.width,t.height]}function oa(t,e,n){t.m||console.error(\"No wasm multistream support detected: ensure dependency inclusion of :gl_graph_runner_internal_multi_input target\"),n(e=t.i.stringToNewUTF8(e)),t.i._free(e)}function aa(t,e,n){if(!t.i.canvas)throw Error(\"No OpenGL canvas configured.\");if(n?t.i._bindTextureToStream(n):t.i._bindTextureToCanvas(),!(n=t.i.canvas.getContext(\"webgl2\")||t.i.canvas.getContext(\"webgl\")))throw Error(\"Failed to obtain WebGL context from the provided canvas. `getContext()` should only be invoked with `webgl` or `webgl2`.\");t.i.gpuOriginForWebTexturesIsBottomLeft&&n.pixelStorei(n.UNPACK_FLIP_Y_WEBGL,!0),n.texImage2D(n.TEXTURE_2D,0,n.RGBA,n.RGBA,n.UNSIGNED_BYTE,e),t.i.gpuOriginForWebTexturesIsBottomLeft&&n.pixelStorei(n.UNPACK_FLIP_Y_WEBGL,!1);const[r,i]=sa(e);return!t.l||r===t.i.canvas.width&&i===t.i.canvas.height||(t.i.canvas.width=r,t.i.canvas.height=i),[r,i]}function ca(t,e,n){t.m||console.error(\"No wasm multistream support detected: ensure dependency inclusion of :gl_graph_runner_internal_multi_input target\");const r=new Uint32Array(e.length);for(let n=0;n<e.length;n++)r[n]=t.i.stringToNewUTF8(e[n]);e=t.i._malloc(4*r.length),t.i.HEAPU32.set(r,e>>2),n(e);for(const e of r)t.i._free(e);t.i._free(e)}function ha(t,e,n){t.i.simpleListeners=t.i.simpleListeners||{},t.i.simpleListeners[e]=n}function ua(t,e,n){let r=[];t.i.simpleListeners=t.i.simpleListeners||{},t.i.simpleListeners[e]=(t,e,i)=>{e?(n(r,i),r=[]):r.push(t)}}na.forVisionTasks=function(t){return ea(\"vision\",t)},na.forTextTasks=function(t){return ea(\"text\",t)},na.forGenAiExperimentalTasks=function(t){return ea(\"genai_experimental\",t)},na.forGenAiTasks=function(t){return ea(\"genai\",t)},na.forAudioTasks=function(t){return ea(\"audio\",t)},na.isSimdSupported=function(){return ta()};async function la(t,e,n,r){return t=await(async(t,e,n,r,i)=>{if(e&&await ia(e),!self.ModuleFactory)throw Error(\"ModuleFactory not set.\");if(n&&(await ia(n),!self.ModuleFactory))throw Error(\"ModuleFactory not set.\");return self.Module&&i&&((e=self.Module).locateFile=i.locateFile,i.mainScriptUrlOrBlob&&(e.mainScriptUrlOrBlob=i.mainScriptUrlOrBlob)),i=await self.ModuleFactory(self.Module||i),self.ModuleFactory=self.Module=void 0,new t(i,r)})(t,n.wasmLoaderPath,n.assetLoaderPath,e,{locateFile:t=>t.endsWith(\".wasm\")?n.wasmBinaryPath.toString():n.assetBinaryPath&&t.endsWith(\".data\")?n.assetBinaryPath.toString():t}),await t.o(r),t}function fa(t,e){const n=wn(t.baseOptions,zs,1)||new zs;\"string\"==typeof e?(nn(n,2,pe(e)),nn(n,1)):e instanceof Uint8Array&&(nn(n,1,lt(e,!1)),nn(n,2)),kn(t.baseOptions,0,1,n)}function da(t){try{const e=t.H.length;if(1===e)throw Error(t.H[0].message);if(e>1)throw Error(\"Encountered multiple errors: \"+t.H.map((t=>t.message)).join(\", \"))}finally{t.H=[]}}function pa(t,e){t.C=Math.max(t.C,e)}function ga(t,e){t.B=new cs,Cn(t.B,2,\"PassThroughCalculator\"),os(t.B,\"free_memory\"),as(t.B,\"free_memory_unused_out\"),ds(e,\"free_memory\"),fs(e,t.B)}function ma(t,e){os(t.B,e),as(t.B,e+\"_unused_out\")}function ya(t){t.g.addBoolToStream(!0,\"free_memory\",t.C)}var _a=class{constructor(t){this.g=t,this.H=[],this.C=0,this.g.setAutoRenderToScreen(!1)}l(t,e=!0){if(e){const e=t.baseOptions||{};if(t.baseOptions?.modelAssetBuffer&&t.baseOptions?.modelAssetPath)throw Error(\"Cannot set both baseOptions.modelAssetPath and baseOptions.modelAssetBuffer\");if(!(wn(this.baseOptions,zs,1)?.g()||wn(this.baseOptions,zs,1)?.l()||t.baseOptions?.modelAssetBuffer||t.baseOptions?.modelAssetPath))throw Error(\"Either baseOptions.modelAssetPath or baseOptions.modelAssetBuffer must be set\");if(function(t,e){let n=wn(t.baseOptions,Hs,3);if(!n){var r=n=new Hs,i=new ts;Sn(r,4,Ws,i)}\"delegate\"in e&&(\"GPU\"===e.delegate?(e=n,r=new $i,Sn(e,2,Ws,r)):(e=n,r=new ts,Sn(e,4,Ws,r))),kn(t.baseOptions,0,3,n)}(this,e),e.modelAssetPath)return fetch(e.modelAssetPath.toString()).then((t=>{if(t.ok)return t.arrayBuffer();throw Error(`Failed to fetch model: ${e.modelAssetPath} (${t.status})`)})).then((t=>{try{this.g.i.FS_unlink(\"/model.dat\")}catch{}this.g.i.FS_createDataFile(\"/\",\"model.dat\",new Uint8Array(t),!0,!1,!1),fa(this,\"/model.dat\"),this.m(),this.L()}));if(e.modelAssetBuffer instanceof Uint8Array)fa(this,e.modelAssetBuffer);else if(e.modelAssetBuffer)return async function(t){const e=[];for(var n=0;;){const{done:r,value:i}=await t.read();if(r)break;e.push(i),n+=i.length}if(0===e.length)return new Uint8Array(0);if(1===e.length)return e[0];t=new Uint8Array(n),n=0;for(const r of e)t.set(r,n),n+=r.length;return t}(e.modelAssetBuffer).then((t=>{fa(this,t),this.m(),this.L()}))}return this.m(),this.L(),Promise.resolve()}L(){}ca(){let t;if(this.g.ca((e=>{t=ys(e)})),!t)throw Error(\"Failed to retrieve CalculatorGraphConfig\");return t}setGraph(t,e){this.g.attachErrorListener(((t,e)=>{this.H.push(Error(e))})),this.g.Ja(),this.g.setGraph(t,e),this.B=void 0,da(this)}finishProcessing(){this.g.finishProcessing(),da(this)}close(){this.B=void 0,this.g.closeGraph()}};function va(t,e){if(!t)throw Error(`Unable to obtain required WebGL resource: ${e}`);return t}_a.prototype.close=_a.prototype.close;class Ea{constructor(t,e,n,r){this.g=t,this.h=e,this.m=n,this.l=r}bind(){this.g.bindVertexArray(this.h)}close(){this.g.deleteVertexArray(this.h),this.g.deleteBuffer(this.m),this.g.deleteBuffer(this.l)}}function wa(t,e,n){const r=t.g;if(n=va(r.createShader(n),\"Failed to create WebGL shader\"),r.shaderSource(n,e),r.compileShader(n),!r.getShaderParameter(n,r.COMPILE_STATUS))throw Error(`Could not compile WebGL shader: ${r.getShaderInfoLog(n)}`);return r.attachShader(t.h,n),n}function Ta(t,e){const n=t.g,r=va(n.createVertexArray(),\"Failed to create vertex array\");n.bindVertexArray(r);const i=va(n.createBuffer(),\"Failed to create buffer\");n.bindBuffer(n.ARRAY_BUFFER,i),n.enableVertexAttribArray(t.O),n.vertexAttribPointer(t.O,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW);const s=va(n.createBuffer(),\"Failed to create buffer\");return n.bindBuffer(n.ARRAY_BUFFER,s),n.enableVertexAttribArray(t.L),n.vertexAttribPointer(t.L,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array(e?[0,1,0,0,1,0,1,1]:[0,0,0,1,1,1,1,0]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.bindVertexArray(null),new Ea(n,r,i,s)}function Aa(t,e){if(t.g){if(e!==t.g)throw Error(\"Cannot change GL context once initialized\")}else t.g=e}function ba(t,e,n,r){return Aa(t,e),t.h||(t.m(),t.D()),n?(t.u||(t.u=Ta(t,!0)),n=t.u):(t.A||(t.A=Ta(t,!1)),n=t.A),e.useProgram(t.h),n.bind(),t.l(),t=r(),n.g.bindVertexArray(null),t}function ka(t,e,n){return Aa(t,e),t=va(e.createTexture(),\"Failed to create texture\"),e.bindTexture(e.TEXTURE_2D,t),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,n??e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,n??e.LINEAR),e.bindTexture(e.TEXTURE_2D,null),t}function Sa(t,e,n){Aa(t,e),t.B||(t.B=va(e.createFramebuffer(),\"Failed to create framebuffe.\")),e.bindFramebuffer(e.FRAMEBUFFER,t.B),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,n,0)}function xa(t){t.g?.bindFramebuffer(t.g.FRAMEBUFFER,null)}var La=class{H(){return\"\\n precision mediump float;\\n varying vec2 vTex;\\n uniform sampler2D inputTexture;\\n void main() {\\n gl_FragColor = texture2D(inputTexture, vTex);\\n }\\n \"}m(){const t=this.g;if(this.h=va(t.createProgram(),\"Failed to create WebGL program\"),this.X=wa(this,\"\\n attribute vec2 aVertex;\\n attribute vec2 aTex;\\n varying vec2 vTex;\\n void main(void) {\\n gl_Position = vec4(aVertex, 0.0, 1.0);\\n vTex = aTex;\\n }\",t.VERTEX_SHADER),this.W=wa(this,this.H(),t.FRAGMENT_SHADER),t.linkProgram(this.h),!t.getProgramParameter(this.h,t.LINK_STATUS))throw Error(`Error during program linking: ${t.getProgramInfoLog(this.h)}`);this.O=t.getAttribLocation(this.h,\"aVertex\"),this.L=t.getAttribLocation(this.h,\"aTex\")}D(){}l(){}close(){if(this.h){const t=this.g;t.deleteProgram(this.h),t.deleteShader(this.X),t.deleteShader(this.W)}this.B&&this.g.deleteFramebuffer(this.B),this.A&&this.A.close(),this.u&&this.u.close()}};var Ra=class extends La{H(){return\"\\n precision mediump float;\\n uniform sampler2D backgroundTexture;\\n uniform sampler2D maskTexture;\\n uniform sampler2D colorMappingTexture;\\n varying vec2 vTex;\\n void main() {\\n vec4 backgroundColor = texture2D(backgroundTexture, vTex);\\n float category = texture2D(maskTexture, vTex).r;\\n vec4 categoryColor = texture2D(colorMappingTexture, vec2(category, 0.0));\\n gl_FragColor = mix(backgroundColor, categoryColor, categoryColor.a);\\n }\\n \"}D(){const t=this.g;t.activeTexture(t.TEXTURE1),this.C=ka(this,t,t.LINEAR),t.activeTexture(t.TEXTURE2),this.j=ka(this,t,t.NEAREST)}m(){super.m();const t=this.g;this.P=va(t.getUniformLocation(this.h,\"backgroundTexture\"),\"Uniform location\"),this.U=va(t.getUniformLocation(this.h,\"colorMappingTexture\"),\"Uniform location\"),this.M=va(t.getUniformLocation(this.h,\"maskTexture\"),\"Uniform location\")}l(){super.l();const t=this.g;t.uniform1i(this.M,0),t.uniform1i(this.P,1),t.uniform1i(this.U,2)}close(){this.C&&this.g.deleteTexture(this.C),this.j&&this.g.deleteTexture(this.j),super.close()}},Ia=class extends La{H(){return\"\\n precision mediump float;\\n uniform sampler2D maskTexture;\\n uniform sampler2D defaultTexture;\\n uniform sampler2D overlayTexture;\\n varying vec2 vTex;\\n void main() {\\n float confidence = texture2D(maskTexture, vTex).r;\\n vec4 defaultColor = texture2D(defaultTexture, vTex);\\n vec4 overlayColor = texture2D(overlayTexture, vTex);\\n // Apply the alpha from the overlay and merge in the default color\\n overlayColor = mix(defaultColor, overlayColor, overlayColor.a);\\n gl_FragColor = mix(defaultColor, overlayColor, confidence);\\n }\\n \"}D(){const t=this.g;t.activeTexture(t.TEXTURE1),this.j=ka(this,t),t.activeTexture(t.TEXTURE2),this.C=ka(this,t)}m(){super.m();const t=this.g;this.M=va(t.getUniformLocation(this.h,\"defaultTexture\"),\"Uniform location\"),this.P=va(t.getUniformLocation(this.h,\"overlayTexture\"),\"Uniform location\"),this.I=va(t.getUniformLocation(this.h,\"maskTexture\"),\"Uniform location\")}l(){super.l();const t=this.g;t.uniform1i(this.I,0),t.uniform1i(this.M,1),t.uniform1i(this.P,2)}close(){this.j&&this.g.deleteTexture(this.j),this.C&&this.g.deleteTexture(this.C),super.close()}};function Fa(t,e){switch(e){case 0:return t.g.find((t=>t instanceof Uint8Array));case 1:return t.g.find((t=>t instanceof Float32Array));case 2:return t.g.find((t=>\"undefined\"!=typeof WebGLTexture&&t instanceof WebGLTexture));default:throw Error(`Type is not supported: ${e}`)}}function Ma(t){var e=Fa(t,1);if(!e){if(e=Fa(t,0))e=new Float32Array(e).map((t=>t/255));else{e=new Float32Array(t.width*t.height);const r=Ca(t);var n=Na(t);if(Sa(n,r,Pa(t)),\"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod\".split(\";\").includes(navigator.platform)||navigator.userAgent.includes(\"Mac\")&&\"document\"in self&&\"ontouchend\"in self.document){n=new Float32Array(t.width*t.height*4),r.readPixels(0,0,t.width,t.height,r.RGBA,r.FLOAT,n);for(let t=0,r=0;t<e.length;++t,r+=4)e[t]=n[r]}else r.readPixels(0,0,t.width,t.height,r.RED,r.FLOAT,e)}t.g.push(e)}return e}function Pa(t){let e=Fa(t,2);if(!e){const n=Ca(t);e=Ua(t);const r=Ma(t),i=Oa(t);n.texImage2D(n.TEXTURE_2D,0,i,t.width,t.height,0,n.RED,n.FLOAT,r),Da(t)}return e}function Ca(t){if(!t.canvas)throw Error(\"Conversion to different image formats require that a canvas is passed when initializing the image.\");return t.h||(t.h=va(t.canvas.getContext(\"webgl2\"),\"You cannot use a canvas that is already bound to a different type of rendering context.\")),t.h}function Oa(t){if(t=Ca(t),!Ba)if(t.getExtension(\"EXT_color_buffer_float\")&&t.getExtension(\"OES_texture_float_linear\")&&t.getExtension(\"EXT_float_blend\"))Ba=t.R32F;else{if(!t.getExtension(\"EXT_color_buffer_half_float\"))throw Error(\"GPU does not fully support 4-channel float32 or float16 formats\");Ba=t.R16F}return Ba}function Na(t){return t.l||(t.l=new La),t.l}function Ua(t){const e=Ca(t);e.viewport(0,0,t.width,t.height),e.activeTexture(e.TEXTURE0);let n=Fa(t,2);return n||(n=ka(Na(t),e,t.m?e.LINEAR:e.NEAREST),t.g.push(n),t.j=!0),e.bindTexture(e.TEXTURE_2D,n),n}function Da(t){t.h.bindTexture(t.h.TEXTURE_2D,null)}var Ba,Ga=class{constructor(t,e,n,r,i,s,o){this.g=t,this.m=e,this.j=n,this.canvas=r,this.l=i,this.width=s,this.height=o,this.j&&(0===--ja&&console.error(\"You seem to be creating MPMask instances without invoking .close(). This leaks resources.\"))}Fa(){return!!Fa(this,0)}ka(){return!!Fa(this,1)}R(){return!!Fa(this,2)}ja(){return(e=Fa(t=this,0))||(e=Ma(t),e=new Uint8Array(e.map((t=>Math.round(255*t)))),t.g.push(e)),e;var t,e}ia(){return Ma(this)}N(){return Pa(this)}clone(){const t=[];for(const e of this.g){let n;if(e instanceof Uint8Array)n=new Uint8Array(e);else if(e instanceof Float32Array)n=new Float32Array(e);else{if(!(e instanceof WebGLTexture))throw Error(`Type is not supported: ${e}`);{const t=Ca(this),e=Na(this);t.activeTexture(t.TEXTURE1),n=ka(e,t,this.m?t.LINEAR:t.NEAREST),t.bindTexture(t.TEXTURE_2D,n);const r=Oa(this);t.texImage2D(t.TEXTURE_2D,0,r,this.width,this.height,0,t.RED,t.FLOAT,null),t.bindTexture(t.TEXTURE_2D,null),Sa(e,t,n),ba(e,t,!1,(()=>{Ua(this),t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),t.drawArrays(t.TRIANGLE_FAN,0,4),Da(this)})),xa(e),Da(this)}}t.push(n)}return new Ga(t,this.m,this.R(),this.canvas,this.l,this.width,this.height)}close(){this.j&&Ca(this).deleteTexture(Fa(this,2)),ja=-1}};Ga.prototype.close=Ga.prototype.close,Ga.prototype.clone=Ga.prototype.clone,Ga.prototype.getAsWebGLTexture=Ga.prototype.N,Ga.prototype.getAsFloat32Array=Ga.prototype.ia,Ga.prototype.getAsUint8Array=Ga.prototype.ja,Ga.prototype.hasWebGLTexture=Ga.prototype.R,Ga.prototype.hasFloat32Array=Ga.prototype.ka,Ga.prototype.hasUint8Array=Ga.prototype.Fa;var ja=250;const Va={color:\"white\",lineWidth:4,radius:6};function Xa(t){return{...Va,fillColor:(t=t||{}).color,...t}}function Ha(t,e){return t instanceof Function?t(e):t}function Wa(t,e,n){return Math.max(Math.min(e,n),Math.min(Math.max(e,n),t))}function za(t){if(!t.l)throw Error(\"CPU rendering requested but CanvasRenderingContext2D not provided.\");return t.l}function Ka(t){if(!t.j)throw Error(\"GPU rendering requested but WebGL2RenderingContext not provided.\");return t.j}function Ya(t,e,n){if(e.R())n(e.N());else{const r=e.ka()?e.ia():e.ja();t.m=t.m??new La;const i=Ka(t);n((t=new Ga([r],e.m,!1,i.canvas,t.m,e.width,e.height)).N()),t.close()}}function qa(t,e,n,r){const i=function(t){return t.g||(t.g=new Ra),t.g}(t),s=Ka(t),o=Array.isArray(n)?new ImageData(new Uint8ClampedArray(n),1,1):n;ba(i,s,!0,(()=>{!function(t,e,n,r){const i=t.g;if(i.activeTexture(i.TEXTURE0),i.bindTexture(i.TEXTURE_2D,e),i.activeTexture(i.TEXTURE1),i.bindTexture(i.TEXTURE_2D,t.C),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,i.RGBA,i.UNSIGNED_BYTE,n),t.I&&function(t,e){if(t!==e)return!1;t=t.entries(),e=e.entries();for(const[r,i]of t){t=r;const s=i;var n=e.next();if(n.done)return!1;const[o,a]=n.value;if(n=a,t!==o||s[0]!==n[0]||s[1]!==n[1]||s[2]!==n[2]||s[3]!==n[3])return!1}return!!e.next().done}(t.I,r))i.activeTexture(i.TEXTURE2),i.bindTexture(i.TEXTURE_2D,t.j);else{t.I=r;const e=Array(1024).fill(0);r.forEach(((t,n)=>{if(4!==t.length)throw Error(`Color at index ${n} is not a four-channel value.`);e[4*n]=t[0],e[4*n+1]=t[1],e[4*n+2]=t[2],e[4*n+3]=t[3]})),i.activeTexture(i.TEXTURE2),i.bindTexture(i.TEXTURE_2D,t.j),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,256,1,0,i.RGBA,i.UNSIGNED_BYTE,new Uint8Array(e))}}(i,e,o,r),s.clearColor(0,0,0,0),s.clear(s.COLOR_BUFFER_BIT),s.drawArrays(s.TRIANGLE_FAN,0,4);const t=i.g;t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE1),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE2),t.bindTexture(t.TEXTURE_2D,null)}))}function $a(t,e,n,r){const i=Ka(t),s=function(t){return t.h||(t.h=new Ia),t.h}(t),o=Array.isArray(n)?new ImageData(new Uint8ClampedArray(n),1,1):n,a=Array.isArray(r)?new ImageData(new Uint8ClampedArray(r),1,1):r;ba(s,i,!0,(()=>{var t=s.g;t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,e),t.activeTexture(t.TEXTURE1),t.bindTexture(t.TEXTURE_2D,s.j),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,o),t.activeTexture(t.TEXTURE2),t.bindTexture(t.TEXTURE_2D,s.C),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,a),i.clearColor(0,0,0,0),i.clear(i.COLOR_BUFFER_BIT),i.drawArrays(i.TRIANGLE_FAN,0,4),i.bindTexture(i.TEXTURE_2D,null),(t=s.g).activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE1),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE2),t.bindTexture(t.TEXTURE_2D,null)}))}var Ja=class{constructor(t,e){\"undefined\"!=typeof CanvasRenderingContext2D&&t instanceof CanvasRenderingContext2D||t instanceof OffscreenCanvasRenderingContext2D?(this.l=t,this.j=e):this.j=t}ya(t,e){if(t){var n=za(this);e=Xa(e),n.save();var r=n.canvas,i=0;for(const s of t)n.fillStyle=Ha(e.fillColor,{index:i,from:s}),n.strokeStyle=Ha(e.color,{index:i,from:s}),n.lineWidth=Ha(e.lineWidth,{index:i,from:s}),(t=new Path2D).arc(s.x*r.width,s.y*r.height,Ha(e.radius,{index:i,from:s}),0,2*Math.PI),n.fill(t),n.stroke(t),++i;n.restore()}}xa(t,e,n){if(t&&e){var r=za(this);n=Xa(n),r.save();var i=r.canvas,s=0;for(const o of e){r.beginPath(),e=t[o.start];const a=t[o.end];e&&a&&(r.strokeStyle=Ha(n.color,{index:s,from:e,to:a}),r.lineWidth=Ha(n.lineWidth,{index:s,from:e,to:a}),r.moveTo(e.x*i.width,e.y*i.height),r.lineTo(a.x*i.width,a.y*i.height)),++s,r.stroke()}r.restore()}}ua(t,e){const n=za(this);e=Xa(e),n.save(),n.beginPath(),n.lineWidth=Ha(e.lineWidth,{}),n.strokeStyle=Ha(e.color,{}),n.fillStyle=Ha(e.fillColor,{}),n.moveTo(t.originX,t.originY),n.lineTo(t.originX+t.width,t.originY),n.lineTo(t.originX+t.width,t.originY+t.height),n.lineTo(t.originX,t.originY+t.height),n.lineTo(t.originX,t.originY),n.stroke(),n.fill(),n.restore()}va(t,e,n=[0,0,0,255]){this.l?function(t,e,n,r){const i=Ka(t);Ya(t,e,(e=>{qa(t,e,n,r),(e=za(t)).drawImage(i.canvas,0,0,e.canvas.width,e.canvas.height)}))}(this,t,n,e):qa(this,t.N(),n,e)}wa(t,e,n){this.l?function(t,e,n,r){const i=Ka(t);Ya(t,e,(e=>{$a(t,e,n,r),(e=za(t)).drawImage(i.canvas,0,0,e.canvas.width,e.canvas.height)}))}(this,t,e,n):$a(this,t.N(),e,n)}close(){this.g?.close(),this.g=void 0,this.h?.close(),this.h=void 0,this.m?.close(),this.m=void 0}};function Za(t,e){switch(e){case 0:return t.g.find((t=>t instanceof ImageData));case 1:return t.g.find((t=>\"undefined\"!=typeof ImageBitmap&&t instanceof ImageBitmap));case 2:return t.g.find((t=>\"undefined\"!=typeof WebGLTexture&&t instanceof WebGLTexture));default:throw Error(`Type is not supported: ${e}`)}}function Qa(t){var e=Za(t,0);if(!e){e=ec(t);const n=nc(t),r=new Uint8Array(t.width*t.height*4);Sa(n,e,tc(t)),e.readPixels(0,0,t.width,t.height,e.RGBA,e.UNSIGNED_BYTE,r),xa(n),e=new ImageData(new Uint8ClampedArray(r.buffer),t.width,t.height),t.g.push(e)}return e}function tc(t){let e=Za(t,2);if(!e){const n=ec(t);e=rc(t);const r=Za(t,1)||Qa(t);n.texImage2D(n.TEXTURE_2D,0,n.RGBA,n.RGBA,n.UNSIGNED_BYTE,r),ic(t)}return e}function ec(t){if(!t.canvas)throw Error(\"Conversion to different image formats require that a canvas is passed when initializing the image.\");return t.h||(t.h=va(t.canvas.getContext(\"webgl2\"),\"You cannot use a canvas that is already bound to a different type of rendering context.\")),t.h}function nc(t){return t.l||(t.l=new La),t.l}function rc(t){const e=ec(t);e.viewport(0,0,t.width,t.height),e.activeTexture(e.TEXTURE0);let n=Za(t,2);return n||(n=ka(nc(t),e),t.g.push(n),t.m=!0),e.bindTexture(e.TEXTURE_2D,n),n}function ic(t){t.h.bindTexture(t.h.TEXTURE_2D,null)}function sc(t){const e=ec(t);return ba(nc(t),e,!0,(()=>function(t,e){const n=t.canvas;if(n.width===t.width&&n.height===t.height)return e();const r=n.width,i=n.height;return n.width=t.width,n.height=t.height,t=e(),n.width=r,n.height=i,t}(t,(()=>{if(e.bindFramebuffer(e.FRAMEBUFFER,null),e.clearColor(0,0,0,0),e.clear(e.COLOR_BUFFER_BIT),e.drawArrays(e.TRIANGLE_FAN,0,4),!(t.canvas instanceof OffscreenCanvas))throw Error(\"Conversion to ImageBitmap requires that the MediaPipe Tasks is initialized with an OffscreenCanvas\");return t.canvas.transferToImageBitmap()}))))}Ja.prototype.close=Ja.prototype.close,Ja.prototype.drawConfidenceMask=Ja.prototype.wa,Ja.prototype.drawCategoryMask=Ja.prototype.va,Ja.prototype.drawBoundingBox=Ja.prototype.ua,Ja.prototype.drawConnectors=Ja.prototype.xa,Ja.prototype.drawLandmarks=Ja.prototype.ya,Ja.lerp=function(t,e,n,r,i){return Wa(r*(1-(t-e)/(n-e))+i*(1-(n-t)/(n-e)),r,i)},Ja.clamp=Wa;var oc=class{constructor(t,e,n,r,i,s,o){this.g=t,this.j=e,this.m=n,this.canvas=r,this.l=i,this.width=s,this.height=o,(this.j||this.m)&&(0===--ac&&console.error(\"You seem to be creating MPImage instances without invoking .close(). This leaks resources.\"))}Ea(){return!!Za(this,0)}la(){return!!Za(this,1)}R(){return!!Za(this,2)}Ca(){return Qa(this)}Ba(){var t=Za(this,1);return t||(tc(this),rc(this),t=sc(this),ic(this),this.g.push(t),this.j=!0),t}N(){return tc(this)}clone(){const t=[];for(const e of this.g){let n;if(e instanceof ImageData)n=new ImageData(e.data,this.width,this.height);else if(e instanceof WebGLTexture){const t=ec(this),e=nc(this);t.activeTexture(t.TEXTURE1),n=ka(e,t),t.bindTexture(t.TEXTURE_2D,n),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,this.width,this.height,0,t.RGBA,t.UNSIGNED_BYTE,null),t.bindTexture(t.TEXTURE_2D,null),Sa(e,t,n),ba(e,t,!1,(()=>{rc(this),t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),t.drawArrays(t.TRIANGLE_FAN,0,4),ic(this)})),xa(e),ic(this)}else{if(!(e instanceof ImageBitmap))throw Error(`Type is not supported: ${e}`);tc(this),rc(this),n=sc(this),ic(this)}t.push(n)}return new oc(t,this.la(),this.R(),this.canvas,this.l,this.width,this.height)}close(){this.j&&Za(this,1).close(),this.m&&ec(this).deleteTexture(Za(this,2)),ac=-1}};oc.prototype.close=oc.prototype.close,oc.prototype.clone=oc.prototype.clone,oc.prototype.getAsWebGLTexture=oc.prototype.N,oc.prototype.getAsImageBitmap=oc.prototype.Ba,oc.prototype.getAsImageData=oc.prototype.Ca,oc.prototype.hasWebGLTexture=oc.prototype.R,oc.prototype.hasImageBitmap=oc.prototype.la,oc.prototype.hasImageData=oc.prototype.Ea;var ac=250;function cc(...t){return t.map((([t,e])=>({start:t,end:e})))}const hc=function(t){return class extends t{Ja(){this.i._registerModelResourcesGraphService()}}}((uc=class{constructor(t,e){this.l=!0,this.i=t,this.g=null,this.h=0,this.m=\"function\"==typeof this.i._addIntToInputStream,void 0!==e?this.i.canvas=e:ra()?this.i.canvas=new OffscreenCanvas(1,1):(console.warn(\"OffscreenCanvas not supported and GraphRunner constructor glCanvas parameter is undefined. Creating backup canvas.\"),this.i.canvas=document.createElement(\"canvas\"))}async initializeGraph(t){const e=await(await fetch(t)).arrayBuffer();t=!(t.endsWith(\".pbtxt\")||t.endsWith(\".textproto\")),this.setGraph(new Uint8Array(e),t)}setGraphFromString(t){this.setGraph((new TextEncoder).encode(t),!1)}setGraph(t,e){const n=t.length,r=this.i._malloc(n);this.i.HEAPU8.set(t,r),e?this.i._changeBinaryGraph(n,r):this.i._changeTextGraph(n,r),this.i._free(r)}configureAudio(t,e,n,r,i){this.i._configureAudio||console.warn('Attempting to use configureAudio without support for input audio. Is build dep \":gl_graph_runner_audio\" missing?'),oa(this,r||\"input_audio\",(r=>{oa(this,i=i||\"audio_header\",(i=>{this.i._configureAudio(r,i,t,e??0,n)}))}))}setAutoResizeCanvas(t){this.l=t}setAutoRenderToScreen(t){this.i._setAutoRenderToScreen(t)}setGpuBufferVerticalFlip(t){this.i.gpuOriginForWebTexturesIsBottomLeft=t}ca(t){ha(this,\"__graph_config__\",(e=>{t(e)})),oa(this,\"__graph_config__\",(t=>{this.i._getGraphConfig(t,void 0)})),delete this.i.simpleListeners.__graph_config__}attachErrorListener(t){this.i.errorListener=t}attachEmptyPacketListener(t,e){this.i.emptyPacketListeners=this.i.emptyPacketListeners||{},this.i.emptyPacketListeners[t]=e}addAudioToStream(t,e,n){this.addAudioToStreamWithShape(t,0,0,e,n)}addAudioToStreamWithShape(t,e,n,r,i){const s=4*t.length;this.h!==s&&(this.g&&this.i._free(this.g),this.g=this.i._malloc(s),this.h=s),this.i.HEAPF32.set(t,this.g/4),oa(this,r,(t=>{this.i._addAudioToInputStream(this.g,e,n,t,i)}))}addGpuBufferToStream(t,e,n){oa(this,e,(e=>{const[r,i]=aa(this,t,e);this.i._addBoundTextureToStream(e,r,i,n)}))}addBoolToStream(t,e,n){oa(this,e,(e=>{this.i._addBoolToInputStream(t,e,n)}))}addDoubleToStream(t,e,n){oa(this,e,(e=>{this.i._addDoubleToInputStream(t,e,n)}))}addFloatToStream(t,e,n){oa(this,e,(e=>{this.i._addFloatToInputStream(t,e,n)}))}addIntToStream(t,e,n){oa(this,e,(e=>{this.i._addIntToInputStream(t,e,n)}))}addUintToStream(t,e,n){oa(this,e,(e=>{this.i._addUintToInputStream(t,e,n)}))}addStringToStream(t,e,n){oa(this,e,(e=>{oa(this,t,(t=>{this.i._addStringToInputStream(t,e,n)}))}))}addStringRecordToStream(t,e,n){oa(this,e,(e=>{ca(this,Object.keys(t),(r=>{ca(this,Object.values(t),(i=>{this.i._addFlatHashMapToInputStream(r,i,Object.keys(t).length,e,n)}))}))}))}addProtoToStream(t,e,n,r){oa(this,n,(n=>{oa(this,e,(e=>{const i=this.i._malloc(t.length);this.i.HEAPU8.set(t,i),this.i._addProtoToInputStream(i,t.length,e,n,r),this.i._free(i)}))}))}addEmptyPacketToStream(t,e){oa(this,t,(t=>{this.i._addEmptyPacketToInputStream(t,e)}))}addBoolVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateBoolVector(t.length);if(!r)throw Error(\"Unable to allocate new bool vector on heap.\");for(const e of t)this.i._addBoolVectorEntry(r,e);this.i._addBoolVectorToInputStream(r,e,n)}))}addDoubleVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateDoubleVector(t.length);if(!r)throw Error(\"Unable to allocate new double vector on heap.\");for(const e of t)this.i._addDoubleVectorEntry(r,e);this.i._addDoubleVectorToInputStream(r,e,n)}))}addFloatVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateFloatVector(t.length);if(!r)throw Error(\"Unable to allocate new float vector on heap.\");for(const e of t)this.i._addFloatVectorEntry(r,e);this.i._addFloatVectorToInputStream(r,e,n)}))}addIntVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateIntVector(t.length);if(!r)throw Error(\"Unable to allocate new int vector on heap.\");for(const e of t)this.i._addIntVectorEntry(r,e);this.i._addIntVectorToInputStream(r,e,n)}))}addUintVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateUintVector(t.length);if(!r)throw Error(\"Unable to allocate new unsigned int vector on heap.\");for(const e of t)this.i._addUintVectorEntry(r,e);this.i._addUintVectorToInputStream(r,e,n)}))}addStringVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateStringVector(t.length);if(!r)throw Error(\"Unable to allocate new string vector on heap.\");for(const e of t)oa(this,e,(t=>{this.i._addStringVectorEntry(r,t)}));this.i._addStringVectorToInputStream(r,e,n)}))}addBoolToInputSidePacket(t,e){oa(this,e,(e=>{this.i._addBoolToInputSidePacket(t,e)}))}addDoubleToInputSidePacket(t,e){oa(this,e,(e=>{this.i._addDoubleToInputSidePacket(t,e)}))}addFloatToInputSidePacket(t,e){oa(this,e,(e=>{this.i._addFloatToInputSidePacket(t,e)}))}addIntToInputSidePacket(t,e){oa(this,e,(e=>{this.i._addIntToInputSidePacket(t,e)}))}addUintToInputSidePacket(t,e){oa(this,e,(e=>{this.i._addUintToInputSidePacket(t,e)}))}addStringToInputSidePacket(t,e){oa(this,e,(e=>{oa(this,t,(t=>{this.i._addStringToInputSidePacket(t,e)}))}))}addProtoToInputSidePacket(t,e,n){oa(this,n,(n=>{oa(this,e,(e=>{const r=this.i._malloc(t.length);this.i.HEAPU8.set(t,r),this.i._addProtoToInputSidePacket(r,t.length,e,n),this.i._free(r)}))}))}addBoolVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateBoolVector(t.length);if(!n)throw Error(\"Unable to allocate new bool vector on heap.\");for(const e of t)this.i._addBoolVectorEntry(n,e);this.i._addBoolVectorToInputSidePacket(n,e)}))}addDoubleVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateDoubleVector(t.length);if(!n)throw Error(\"Unable to allocate new double vector on heap.\");for(const e of t)this.i._addDoubleVectorEntry(n,e);this.i._addDoubleVectorToInputSidePacket(n,e)}))}addFloatVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateFloatVector(t.length);if(!n)throw Error(\"Unable to allocate new float vector on heap.\");for(const e of t)this.i._addFloatVectorEntry(n,e);this.i._addFloatVectorToInputSidePacket(n,e)}))}addIntVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateIntVector(t.length);if(!n)throw Error(\"Unable to allocate new int vector on heap.\");for(const e of t)this.i._addIntVectorEntry(n,e);this.i._addIntVectorToInputSidePacket(n,e)}))}addUintVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateUintVector(t.length);if(!n)throw Error(\"Unable to allocate new unsigned int vector on heap.\");for(const e of t)this.i._addUintVectorEntry(n,e);this.i._addUintVectorToInputSidePacket(n,e)}))}addStringVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateStringVector(t.length);if(!n)throw Error(\"Unable to allocate new string vector on heap.\");for(const e of t)oa(this,e,(t=>{this.i._addStringVectorEntry(n,t)}));this.i._addStringVectorToInputSidePacket(n,e)}))}attachBoolListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachBoolListener(t)}))}attachBoolVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachBoolVectorListener(t)}))}attachIntListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachIntListener(t)}))}attachIntVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachIntVectorListener(t)}))}attachUintListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachUintListener(t)}))}attachUintVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachUintVectorListener(t)}))}attachDoubleListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachDoubleListener(t)}))}attachDoubleVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachDoubleVectorListener(t)}))}attachFloatListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachFloatListener(t)}))}attachFloatVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachFloatVectorListener(t)}))}attachStringListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachStringListener(t)}))}attachStringVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachStringVectorListener(t)}))}attachProtoListener(t,e,n){ha(this,t,e),oa(this,t,(t=>{this.i._attachProtoListener(t,n||!1)}))}attachProtoVectorListener(t,e,n){ua(this,t,e),oa(this,t,(t=>{this.i._attachProtoVectorListener(t,n||!1)}))}attachAudioListener(t,e,n){this.i._attachAudioListener||console.warn('Attempting to use attachAudioListener without support for output audio. Is build dep \":gl_graph_runner_audio_out\" missing?'),ha(this,t,((t,n)=>{t=new Float32Array(t.buffer,t.byteOffset,t.length/4),e(t,n)})),oa(this,t,(t=>{this.i._attachAudioListener(t,n||!1)}))}finishProcessing(){this.i._waitUntilIdle()}closeGraph(){this.i._closeGraph(),this.i.simpleListeners=void 0,this.i.emptyPacketListeners=void 0}},class extends uc{get ga(){return this.i}pa(t,e,n){oa(this,e,(e=>{const[r,i]=aa(this,t,e);this.ga._addBoundTextureAsImageToStream(e,r,i,n)}))}Z(t,e){ha(this,t,e),oa(this,t,(t=>{this.ga._attachImageListener(t)}))}aa(t,e){ua(this,t,e),oa(this,t,(t=>{this.ga._attachImageVectorListener(t)}))}}));var uc,lc=class extends hc{};async function fc(t,e,n){return async function(t,e,n,r){return la(t,e,n,r)}(t,n.canvas??(ra()?void 0:document.createElement(\"canvas\")),e,n)}function dc(t,e,n,r){if(t.U){const s=new Ms;if(n?.regionOfInterest){if(!t.oa)throw Error(\"This task doesn't support region-of-interest.\");var i=n.regionOfInterest;if(i.left>=i.right||i.top>=i.bottom)throw Error(\"Expected RectF with left < right and top < bottom.\");if(i.left<0||i.top<0||i.right>1||i.bottom>1)throw Error(\"Expected RectF values to be in [0,1].\");Pn(s,1,(i.left+i.right)/2),Pn(s,2,(i.top+i.bottom)/2),Pn(s,4,i.right-i.left),Pn(s,3,i.bottom-i.top)}else Pn(s,1,.5),Pn(s,2,.5),Pn(s,4,1),Pn(s,3,1);if(n?.rotationDegrees){if(n?.rotationDegrees%90!=0)throw Error(\"Expected rotation to be a multiple of 90\u00B0.\");if(Pn(s,5,-Math.PI*n.rotationDegrees/180),n?.rotationDegrees%180!=0){const[t,r]=sa(e);n=Fn(s,3)*r/t,i=Fn(s,4)*t/r,Pn(s,4,n),Pn(s,3,i)}}t.g.addProtoToStream(s.g(),\"mediapipe.NormalizedRect\",t.U,r)}t.g.pa(e,t.X,r??performance.now()),t.finishProcessing()}function pc(t,e,n){if(t.baseOptions?.g())throw Error(\"Task is not initialized with image mode. 'runningMode' must be set to 'IMAGE'.\");dc(t,e,n,t.C+1)}function gc(t,e,n,r){if(!t.baseOptions?.g())throw Error(\"Task is not initialized with video mode. 'runningMode' must be set to 'VIDEO'.\");dc(t,e,n,r)}function mc(t,e,n,r){var i=e.data;const s=e.width,o=s*(e=e.height);if((i instanceof Uint8Array||i instanceof Float32Array)&&i.length!==o)throw Error(\"Unsupported channel count: \"+i.length/o);return t=new Ga([i],n,!1,t.g.i.canvas,t.P,s,e),r?t.clone():t}var yc=class extends _a{constructor(t,e,n,r){super(t),this.g=t,this.X=e,this.U=n,this.oa=r,this.P=new La}l(t,e=!0){if(\"runningMode\"in t&&nn(this.baseOptions,2,te(!!t.runningMode&&\"IMAGE\"!==t.runningMode)),void 0!==t.canvas&&this.g.i.canvas!==t.canvas)throw Error(\"You must create a new task to reset the canvas.\");return super.l(t,e)}close(){this.P.close(),super.close()}};yc.prototype.close=yc.prototype.close;var _c=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect_in\",!1),this.j={detections:[]},kn(t=this.h=new $s,0,1,e=new Ks),Pn(this.h,2,.5),Pn(this.h,3,.3)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return\"minDetectionConfidence\"in t&&Pn(this.h,2,t.minDetectionConfidence??.5),\"minSuppressionThreshold\"in t&&Pn(this.h,3,t.minSuppressionThreshold??.3),this.l(t)}F(t,e){return this.j={detections:[]},pc(this,t,e),this.j}G(t,e,n){return this.j={detections:[]},gc(this,t,n,e),this.j}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect_in\"),ps(t,\"detections\");const e=new rs;Mr(e,Zs,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.face_detector.FaceDetectorGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect_in\"),as(n,\"DETECTIONS:detections\"),n.o(e),fs(t,n),this.g.attachProtoVectorListener(\"detections\",((t,e)=>{for(const e of t)t=ks(e),this.j.detections.push(Ko(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"detections\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};_c.prototype.detectForVideo=_c.prototype.G,_c.prototype.detect=_c.prototype.F,_c.prototype.setOptions=_c.prototype.o,_c.createFromModelPath=async function(t,e){return fc(_c,t,{baseOptions:{modelAssetPath:e}})},_c.createFromModelBuffer=function(t,e){return fc(_c,t,{baseOptions:{modelAssetBuffer:e}})},_c.createFromOptions=function(t,e){return fc(_c,t,e)};var vc=cc([61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]),Ec=cc([263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]),wc=cc([276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]),Tc=cc([474,475],[475,476],[476,477],[477,474]),Ac=cc([33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]),bc=cc([46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]),kc=cc([469,470],[470,471],[471,472],[472,469]),Sc=cc([10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]),xc=[...vc,...Ec,...wc,...Ac,...bc,...Sc],Lc=cc([127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]);function Rc(t){t.j={faceLandmarks:[],faceBlendshapes:[],facialTransformationMatrixes:[]}}var Ic=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!1),this.j={faceLandmarks:[],faceBlendshapes:[],facialTransformationMatrixes:[]},this.outputFacialTransformationMatrixes=this.outputFaceBlendshapes=!1,kn(t=this.h=new eo,0,1,e=new Ks),this.A=new to,kn(this.h,0,3,this.A),this.u=new $s,kn(this.h,0,2,this.u),Mn(this.u,4,1),Pn(this.u,2,.5),Pn(this.A,2,.5),Pn(this.h,4,.5)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return\"numFaces\"in t&&Mn(this.u,4,t.numFaces??1),\"minFaceDetectionConfidence\"in t&&Pn(this.u,2,t.minFaceDetectionConfidence??.5),\"minTrackingConfidence\"in t&&Pn(this.h,4,t.minTrackingConfidence??.5),\"minFacePresenceConfidence\"in t&&Pn(this.A,2,t.minFacePresenceConfidence??.5),\"outputFaceBlendshapes\"in t&&(this.outputFaceBlendshapes=!!t.outputFaceBlendshapes),\"outputFacialTransformationMatrixes\"in t&&(this.outputFacialTransformationMatrixes=!!t.outputFacialTransformationMatrixes),this.l(t)}F(t,e){return Rc(this),pc(this,t,e),this.j}G(t,e,n){return Rc(this),gc(this,t,n,e),this.j}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\"),ps(t,\"face_landmarks\");const e=new rs;Mr(e,ro,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.face_landmarker.FaceLandmarkerGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"NORM_LANDMARKS:face_landmarks\"),n.o(e),fs(t,n),this.g.attachProtoVectorListener(\"face_landmarks\",((t,e)=>{for(const e of t)t=Rs(e),this.j.faceLandmarks.push(Yo(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"face_landmarks\",(t=>{pa(this,t)})),this.outputFaceBlendshapes&&(ps(t,\"blendshapes\"),as(n,\"BLENDSHAPES:blendshapes\"),this.g.attachProtoVectorListener(\"blendshapes\",((t,e)=>{if(this.outputFaceBlendshapes)for(const e of t)t=ws(e),this.j.faceBlendshapes.push(Wo(t.g()??[]));pa(this,e)})),this.g.attachEmptyPacketListener(\"blendshapes\",(t=>{pa(this,t)}))),this.outputFacialTransformationMatrixes&&(ps(t,\"face_geometry\"),as(n,\"FACE_GEOMETRY:face_geometry\"),this.g.attachProtoVectorListener(\"face_geometry\",((t,e)=>{if(this.outputFacialTransformationMatrixes)for(const e of t)(t=wn(t=Qs(e),Is,2))&&this.j.facialTransformationMatrixes.push({rows:Rn(t,1)??0??0,columns:Rn(t,2)??0??0,data:on(t,3,Qt,sn()).slice()??[]});pa(this,e)})),this.g.attachEmptyPacketListener(\"face_geometry\",(t=>{pa(this,t)}))),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Ic.prototype.detectForVideo=Ic.prototype.G,Ic.prototype.detect=Ic.prototype.F,Ic.prototype.setOptions=Ic.prototype.o,Ic.createFromModelPath=function(t,e){return fc(Ic,t,{baseOptions:{modelAssetPath:e}})},Ic.createFromModelBuffer=function(t,e){return fc(Ic,t,{baseOptions:{modelAssetBuffer:e}})},Ic.createFromOptions=function(t,e){return fc(Ic,t,e)},Ic.FACE_LANDMARKS_LIPS=vc,Ic.FACE_LANDMARKS_LEFT_EYE=Ec,Ic.FACE_LANDMARKS_LEFT_EYEBROW=wc,Ic.FACE_LANDMARKS_LEFT_IRIS=Tc,Ic.FACE_LANDMARKS_RIGHT_EYE=Ac,Ic.FACE_LANDMARKS_RIGHT_EYEBROW=bc,Ic.FACE_LANDMARKS_RIGHT_IRIS=kc,Ic.FACE_LANDMARKS_FACE_OVAL=Sc,Ic.FACE_LANDMARKS_CONTOURS=xc,Ic.FACE_LANDMARKS_TESSELATION=Lc;var Fc=cc([0,1],[1,2],[2,3],[3,4],[0,5],[5,6],[6,7],[7,8],[5,9],[9,10],[10,11],[11,12],[9,13],[13,14],[14,15],[15,16],[13,17],[0,17],[17,18],[18,19],[19,20]);function Mc(t){t.gestures=[],t.landmarks=[],t.worldLandmarks=[],t.handedness=[]}function Pc(t){return 0===t.gestures.length?{gestures:[],landmarks:[],worldLandmarks:[],handedness:[],handednesses:[]}:{gestures:t.gestures,landmarks:t.landmarks,worldLandmarks:t.worldLandmarks,handedness:t.handedness,handednesses:t.handedness}}function Cc(t,e=!0){const n=[];for(const i of t){var r=ws(i);t=[];for(const n of r.g())r=e&&null!=Rn(n,1)?Rn(n,1)??0:-1,t.push({score:Fn(n,2)??0,index:r,categoryName:ge(tn(n,3))??\"\"??\"\",displayName:ge(tn(n,4))??\"\"??\"\"});n.push(t)}return n}var Oc=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!1),this.gestures=[],this.landmarks=[],this.worldLandmarks=[],this.handedness=[],kn(t=this.j=new uo,0,1,e=new Ks),this.u=new ho,kn(this.j,0,2,this.u),this.D=new co,kn(this.u,0,3,this.D),this.A=new ao,kn(this.u,0,2,this.A),this.h=new oo,kn(this.j,0,3,this.h),Pn(this.A,2,.5),Pn(this.u,4,.5),Pn(this.D,2,.5)}get baseOptions(){return wn(this.j,Ks,1)}set baseOptions(t){kn(this.j,0,1,t)}o(t){if(Mn(this.A,3,t.numHands??1),\"minHandDetectionConfidence\"in t&&Pn(this.A,2,t.minHandDetectionConfidence??.5),\"minTrackingConfidence\"in t&&Pn(this.u,4,t.minTrackingConfidence??.5),\"minHandPresenceConfidence\"in t&&Pn(this.D,2,t.minHandPresenceConfidence??.5),t.cannedGesturesClassifierOptions){var e=new io,n=e,r=Xo(t.cannedGesturesClassifierOptions,wn(this.h,io,3)?.l());kn(n,0,2,r),kn(this.h,0,3,e)}else void 0===t.cannedGesturesClassifierOptions&&wn(this.h,io,3)?.g();return t.customGesturesClassifierOptions?(kn(n=e=new io,0,2,r=Xo(t.customGesturesClassifierOptions,wn(this.h,io,4)?.l())),kn(this.h,0,4,e)):void 0===t.customGesturesClassifierOptions&&wn(this.h,io,4)?.g(),this.l(t)}Ha(t,e){return Mc(this),pc(this,t,e),Pc(this)}Ia(t,e,n){return Mc(this),gc(this,t,n,e),Pc(this)}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\"),ps(t,\"hand_gestures\"),ps(t,\"hand_landmarks\"),ps(t,\"world_hand_landmarks\"),ps(t,\"handedness\");const e=new rs;Mr(e,mo,this.j);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.gesture_recognizer.GestureRecognizerGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"HAND_GESTURES:hand_gestures\"),as(n,\"LANDMARKS:hand_landmarks\"),as(n,\"WORLD_LANDMARKS:world_hand_landmarks\"),as(n,\"HANDEDNESS:handedness\"),n.o(e),fs(t,n),this.g.attachProtoVectorListener(\"hand_landmarks\",((t,e)=>{for(const e of t){t=Rs(e);const n=[];for(const e of An(t,Ls,1))n.push({x:Fn(e,1)??0,y:Fn(e,2)??0,z:Fn(e,3)??0,visibility:Fn(e,4)??0});this.landmarks.push(n)}pa(this,e)})),this.g.attachEmptyPacketListener(\"hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoVectorListener(\"world_hand_landmarks\",((t,e)=>{for(const e of t){t=xs(e);const n=[];for(const e of An(t,Ss,1))n.push({x:Fn(e,1)??0,y:Fn(e,2)??0,z:Fn(e,3)??0,visibility:Fn(e,4)??0});this.worldLandmarks.push(n)}pa(this,e)})),this.g.attachEmptyPacketListener(\"world_hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoVectorListener(\"hand_gestures\",((t,e)=>{this.gestures.push(...Cc(t,!1)),pa(this,e)})),this.g.attachEmptyPacketListener(\"hand_gestures\",(t=>{pa(this,t)})),this.g.attachProtoVectorListener(\"handedness\",((t,e)=>{this.handedness.push(...Cc(t)),pa(this,e)})),this.g.attachEmptyPacketListener(\"handedness\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};function Nc(t){return{landmarks:t.landmarks,worldLandmarks:t.worldLandmarks,handednesses:t.handedness,handedness:t.handedness}}Oc.prototype.recognizeForVideo=Oc.prototype.Ia,Oc.prototype.recognize=Oc.prototype.Ha,Oc.prototype.setOptions=Oc.prototype.o,Oc.createFromModelPath=function(t,e){return fc(Oc,t,{baseOptions:{modelAssetPath:e}})},Oc.createFromModelBuffer=function(t,e){return fc(Oc,t,{baseOptions:{modelAssetBuffer:e}})},Oc.createFromOptions=function(t,e){return fc(Oc,t,e)},Oc.HAND_CONNECTIONS=Fc;var Uc=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!1),this.landmarks=[],this.worldLandmarks=[],this.handedness=[],kn(t=this.h=new ho,0,1,e=new Ks),this.u=new co,kn(this.h,0,3,this.u),this.j=new ao,kn(this.h,0,2,this.j),Mn(this.j,3,1),Pn(this.j,2,.5),Pn(this.u,2,.5),Pn(this.h,4,.5)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return\"numHands\"in t&&Mn(this.j,3,t.numHands??1),\"minHandDetectionConfidence\"in t&&Pn(this.j,2,t.minHandDetectionConfidence??.5),\"minTrackingConfidence\"in t&&Pn(this.h,4,t.minTrackingConfidence??.5),\"minHandPresenceConfidence\"in t&&Pn(this.u,2,t.minHandPresenceConfidence??.5),this.l(t)}F(t,e){return this.landmarks=[],this.worldLandmarks=[],this.handedness=[],pc(this,t,e),Nc(this)}G(t,e,n){return this.landmarks=[],this.worldLandmarks=[],this.handedness=[],gc(this,t,n,e),Nc(this)}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\"),ps(t,\"hand_landmarks\"),ps(t,\"world_hand_landmarks\"),ps(t,\"handedness\");const e=new rs;Mr(e,yo,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.hand_landmarker.HandLandmarkerGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"LANDMARKS:hand_landmarks\"),as(n,\"WORLD_LANDMARKS:world_hand_landmarks\"),as(n,\"HANDEDNESS:handedness\"),n.o(e),fs(t,n),this.g.attachProtoVectorListener(\"hand_landmarks\",((t,e)=>{for(const e of t)t=Rs(e),this.landmarks.push(Yo(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoVectorListener(\"world_hand_landmarks\",((t,e)=>{for(const e of t)t=xs(e),this.worldLandmarks.push(qo(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"world_hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoVectorListener(\"handedness\",((t,e)=>{var n=this.handedness,r=n.push;const i=[];for(const e of t){t=ws(e);const n=[];for(const e of t.g())n.push({score:Fn(e,2)??0,index:Rn(e,1)??0??-1,categoryName:ge(tn(e,3))??\"\"??\"\",displayName:ge(tn(e,4))??\"\"??\"\"});i.push(n)}r.call(n,...i),pa(this,e)})),this.g.attachEmptyPacketListener(\"handedness\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Uc.prototype.detectForVideo=Uc.prototype.G,Uc.prototype.detect=Uc.prototype.F,Uc.prototype.setOptions=Uc.prototype.o,Uc.createFromModelPath=function(t,e){return fc(Uc,t,{baseOptions:{modelAssetPath:e}})},Uc.createFromModelBuffer=function(t,e){return fc(Uc,t,{baseOptions:{modelAssetBuffer:e}})},Uc.createFromOptions=function(t,e){return fc(Uc,t,e)},Uc.HAND_CONNECTIONS=Fc;var Dc=cc([0,1],[1,2],[2,3],[3,7],[0,4],[4,5],[5,6],[6,8],[9,10],[11,12],[11,13],[13,15],[15,17],[15,19],[15,21],[17,19],[12,14],[14,16],[16,18],[16,20],[16,22],[18,20],[11,23],[12,24],[23,24],[23,25],[24,26],[25,27],[26,28],[27,29],[28,30],[29,31],[30,32],[27,31],[28,32]);function Bc(t){t.h={faceLandmarks:[],faceBlendshapes:[],poseLandmarks:[],poseWorldLandmarks:[],poseSegmentationMasks:[],leftHandLandmarks:[],leftHandWorldLandmarks:[],rightHandLandmarks:[],rightHandWorldLandmarks:[]}}function Gc(t){try{if(!t.D)return t.h;t.D(t.h)}finally{ya(t)}}function jc(t,e){t=Rs(t),e.push(Yo(t))}var Vc=class extends yc{constructor(t,e){super(new lc(t,e),\"input_frames_image\",null,!1),this.h={faceLandmarks:[],faceBlendshapes:[],poseLandmarks:[],poseWorldLandmarks:[],poseSegmentationMasks:[],leftHandLandmarks:[],leftHandWorldLandmarks:[],rightHandLandmarks:[],rightHandWorldLandmarks:[]},this.outputPoseSegmentationMasks=this.outputFaceBlendshapes=!1,kn(t=this.j=new wo,0,1,e=new Ks),this.I=new co,kn(this.j,0,2,this.I),this.W=new _o,kn(this.j,0,3,this.W),this.u=new $s,kn(this.j,0,4,this.u),this.O=new to,kn(this.j,0,5,this.O),this.A=new vo,kn(this.j,0,6,this.A),this.M=new Eo,kn(this.j,0,7,this.M),Pn(this.u,2,.5),Pn(this.u,3,.3),Pn(this.O,2,.5),Pn(this.A,2,.5),Pn(this.A,3,.3),Pn(this.M,2,.5),Pn(this.I,2,.5)}get baseOptions(){return wn(this.j,Ks,1)}set baseOptions(t){kn(this.j,0,1,t)}o(t){return\"minFaceDetectionConfidence\"in t&&Pn(this.u,2,t.minFaceDetectionConfidence??.5),\"minFaceSuppressionThreshold\"in t&&Pn(this.u,3,t.minFaceSuppressionThreshold??.3),\"minFacePresenceConfidence\"in t&&Pn(this.O,2,t.minFacePresenceConfidence??.5),\"outputFaceBlendshapes\"in t&&(this.outputFaceBlendshapes=!!t.outputFaceBlendshapes),\"minPoseDetectionConfidence\"in t&&Pn(this.A,2,t.minPoseDetectionConfidence??.5),\"minPoseSuppressionThreshold\"in t&&Pn(this.A,3,t.minPoseSuppressionThreshold??.3),\"minPosePresenceConfidence\"in t&&Pn(this.M,2,t.minPosePresenceConfidence??.5),\"outputPoseSegmentationMasks\"in t&&(this.outputPoseSegmentationMasks=!!t.outputPoseSegmentationMasks),\"minHandLandmarksConfidence\"in t&&Pn(this.I,2,t.minHandLandmarksConfidence??.5),this.l(t)}F(t,e,n){const r=\"function\"!=typeof e?e:{};return this.D=\"function\"==typeof e?e:n,Bc(this),pc(this,t,r),Gc(this)}G(t,e,n,r){const i=\"function\"!=typeof n?n:{};return this.D=\"function\"==typeof n?n:r,Bc(this),gc(this,t,i,e),Gc(this)}m(){var t=new gs;ds(t,\"input_frames_image\"),ps(t,\"pose_landmarks\"),ps(t,\"pose_world_landmarks\"),ps(t,\"face_landmarks\"),ps(t,\"left_hand_landmarks\"),ps(t,\"left_hand_world_landmarks\"),ps(t,\"right_hand_landmarks\"),ps(t,\"right_hand_world_landmarks\");const e=new rs,n=new Xi;Cn(n,1,\"type.googleapis.com/mediapipe.tasks.vision.holistic_landmarker.proto.HolisticLandmarkerGraphOptions\"),function(t,e){if(null!=e)if(Array.isArray(e))nn(t,2,Ce(e,0,Ne));else{if(!(\"string\"==typeof e||e instanceof P||R(e)))throw Error(\"invalid value in Any.value field: \"+e+\" expected a ByteString, a base64 encoded string, a Uint8Array or a jspb array\");dn(t,2,lt(e,!1),F())}}(n,this.j.g());const r=new cs;Cn(r,2,\"mediapipe.tasks.vision.holistic_landmarker.HolisticLandmarkerGraph\"),Ln(r,8,Xi,n),os(r,\"IMAGE:input_frames_image\"),as(r,\"POSE_LANDMARKS:pose_landmarks\"),as(r,\"POSE_WORLD_LANDMARKS:pose_world_landmarks\"),as(r,\"FACE_LANDMARKS:face_landmarks\"),as(r,\"LEFT_HAND_LANDMARKS:left_hand_landmarks\"),as(r,\"LEFT_HAND_WORLD_LANDMARKS:left_hand_world_landmarks\"),as(r,\"RIGHT_HAND_LANDMARKS:right_hand_landmarks\"),as(r,\"RIGHT_HAND_WORLD_LANDMARKS:right_hand_world_landmarks\"),r.o(e),fs(t,r),ga(this,t),this.g.attachProtoListener(\"pose_landmarks\",((t,e)=>{jc(t,this.h.poseLandmarks),pa(this,e)})),this.g.attachEmptyPacketListener(\"pose_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoListener(\"pose_world_landmarks\",((t,e)=>{var n=this.h.poseWorldLandmarks;t=xs(t),n.push(qo(t)),pa(this,e)})),this.g.attachEmptyPacketListener(\"pose_world_landmarks\",(t=>{pa(this,t)})),this.outputPoseSegmentationMasks&&(as(r,\"POSE_SEGMENTATION_MASK:pose_segmentation_mask\"),ma(this,\"pose_segmentation_mask\"),this.g.Z(\"pose_segmentation_mask\",((t,e)=>{this.h.poseSegmentationMasks=[mc(this,t,!0,!this.D)],pa(this,e)})),this.g.attachEmptyPacketListener(\"pose_segmentation_mask\",(t=>{this.h.poseSegmentationMasks=[],pa(this,t)}))),this.g.attachProtoListener(\"face_landmarks\",((t,e)=>{jc(t,this.h.faceLandmarks),pa(this,e)})),this.g.attachEmptyPacketListener(\"face_landmarks\",(t=>{pa(this,t)})),this.outputFaceBlendshapes&&(ps(t,\"extra_blendshapes\"),as(r,\"FACE_BLENDSHAPES:extra_blendshapes\"),this.g.attachProtoListener(\"extra_blendshapes\",((t,e)=>{var n=this.h.faceBlendshapes;this.outputFaceBlendshapes&&(t=ws(t),n.push(Wo(t.g()??[]))),pa(this,e)})),this.g.attachEmptyPacketListener(\"extra_blendshapes\",(t=>{pa(this,t)}))),this.g.attachProtoListener(\"left_hand_landmarks\",((t,e)=>{jc(t,this.h.leftHandLandmarks),pa(this,e)})),this.g.attachEmptyPacketListener(\"left_hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoListener(\"left_hand_world_landmarks\",((t,e)=>{var n=this.h.leftHandWorldLandmarks;t=xs(t),n.push(qo(t)),pa(this,e)})),this.g.attachEmptyPacketListener(\"left_hand_world_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoListener(\"right_hand_landmarks\",((t,e)=>{jc(t,this.h.rightHandLandmarks),pa(this,e)})),this.g.attachEmptyPacketListener(\"right_hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoListener(\"right_hand_world_landmarks\",((t,e)=>{var n=this.h.rightHandWorldLandmarks;t=xs(t),n.push(qo(t)),pa(this,e)})),this.g.attachEmptyPacketListener(\"right_hand_world_landmarks\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Vc.prototype.detectForVideo=Vc.prototype.G,Vc.prototype.detect=Vc.prototype.F,Vc.prototype.setOptions=Vc.prototype.o,Vc.createFromModelPath=function(t,e){return fc(Vc,t,{baseOptions:{modelAssetPath:e}})},Vc.createFromModelBuffer=function(t,e){return fc(Vc,t,{baseOptions:{modelAssetBuffer:e}})},Vc.createFromOptions=function(t,e){return fc(Vc,t,e)},Vc.HAND_CONNECTIONS=Fc,Vc.POSE_CONNECTIONS=Dc,Vc.FACE_LANDMARKS_LIPS=vc,Vc.FACE_LANDMARKS_LEFT_EYE=Ec,Vc.FACE_LANDMARKS_LEFT_EYEBROW=wc,Vc.FACE_LANDMARKS_LEFT_IRIS=Tc,Vc.FACE_LANDMARKS_RIGHT_EYE=Ac,Vc.FACE_LANDMARKS_RIGHT_EYEBROW=bc,Vc.FACE_LANDMARKS_RIGHT_IRIS=kc,Vc.FACE_LANDMARKS_FACE_OVAL=Sc,Vc.FACE_LANDMARKS_CONTOURS=xc,Vc.FACE_LANDMARKS_TESSELATION=Lc;var Xc=class extends yc{constructor(t,e){super(new lc(t,e),\"input_image\",\"norm_rect\",!0),this.j={classifications:[]},kn(t=this.h=new bo,0,1,e=new Ks)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return kn(this.h,0,2,Xo(t,wn(this.h,Gs,2))),this.l(t)}sa(t,e){return this.j={classifications:[]},pc(this,t,e),this.j}ta(t,e,n){return this.j={classifications:[]},gc(this,t,n,e),this.j}m(){var t=new gs;ds(t,\"input_image\"),ds(t,\"norm_rect\"),ps(t,\"classifications\");const e=new rs;Mr(e,ko,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.image_classifier.ImageClassifierGraph\"),os(n,\"IMAGE:input_image\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"CLASSIFICATIONS:classifications\"),n.o(e),fs(t,n),this.g.attachProtoListener(\"classifications\",((t,e)=>{this.j=zo(Cs(t)),pa(this,e)})),this.g.attachEmptyPacketListener(\"classifications\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Xc.prototype.classifyForVideo=Xc.prototype.ta,Xc.prototype.classify=Xc.prototype.sa,Xc.prototype.setOptions=Xc.prototype.o,Xc.createFromModelPath=function(t,e){return fc(Xc,t,{baseOptions:{modelAssetPath:e}})},Xc.createFromModelBuffer=function(t,e){return fc(Xc,t,{baseOptions:{modelAssetBuffer:e}})},Xc.createFromOptions=function(t,e){return fc(Xc,t,e)};var Hc=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!0),this.h=new So,this.embeddings={embeddings:[]},kn(t=this.h,0,1,e=new Ks)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){var e=this.h,n=wn(this.h,Vs,2);return n=n?n.clone():new Vs,void 0!==t.l2Normalize?nn(n,1,te(t.l2Normalize)):\"l2Normalize\"in t&&nn(n,1),void 0!==t.quantize?nn(n,2,te(t.quantize)):\"quantize\"in t&&nn(n,2),kn(e,0,2,n),this.l(t)}za(t,e){return pc(this,t,e),this.embeddings}Aa(t,e,n){return gc(this,t,n,e),this.embeddings}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\"),ps(t,\"embeddings_out\");const e=new rs;Mr(e,xo,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.image_embedder.ImageEmbedderGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"EMBEDDINGS:embeddings_out\"),n.o(e),fs(t,n),this.g.attachProtoListener(\"embeddings_out\",((t,e)=>{t=Bs(t),this.embeddings=function(t){return{embeddings:An(t,Us,1).map((t=>{const e={headIndex:Rn(t,3)??0??-1,headName:ge(tn(t,4))??\"\"??\"\"};var n=t.v;return void 0!==En(n,0|n[et],Os,gn(t,1))?(t=on(t=wn(t,Os,gn(t,1),void 0),1,Qt,sn()),e.floatEmbedding=t.slice()):(n=new Uint8Array(0),e.quantizedEmbedding=wn(t,Ns,gn(t,2),void 0)?.na()?.h()??n),e})),timestampMs:Ho(In(t))}}(t),pa(this,e)})),this.g.attachEmptyPacketListener(\"embeddings_out\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Hc.cosineSimilarity=function(t,e){if(t.floatEmbedding&&e.floatEmbedding)t=Jo(t.floatEmbedding,e.floatEmbedding);else{if(!t.quantizedEmbedding||!e.quantizedEmbedding)throw Error(\"Cannot compute cosine similarity between quantized and float embeddings.\");t=Jo($o(t.quantizedEmbedding),$o(e.quantizedEmbedding))}return t},Hc.prototype.embedForVideo=Hc.prototype.Aa,Hc.prototype.embed=Hc.prototype.za,Hc.prototype.setOptions=Hc.prototype.o,Hc.createFromModelPath=function(t,e){return fc(Hc,t,{baseOptions:{modelAssetPath:e}})},Hc.createFromModelBuffer=function(t,e){return fc(Hc,t,{baseOptions:{modelAssetBuffer:e}})},Hc.createFromOptions=function(t,e){return fc(Hc,t,e)};var Wc=class{constructor(t,e,n){this.confidenceMasks=t,this.categoryMask=e,this.qualityScores=n}close(){this.confidenceMasks?.forEach((t=>{t.close()})),this.categoryMask?.close()}};function zc(t){const e=function(t){return An(t,cs,1)}(t.ca()).filter((t=>(ge(tn(t,1))??\"\").includes(\"mediapipe.tasks.TensorsToSegmentationCalculator\")));if(t.u=[],e.length>1)throw Error(\"The graph has more than one mediapipe.tasks.TensorsToSegmentationCalculator.\");1===e.length&&(wn(e[0],rs,7)?.j()?.g()??new Map).forEach(((e,n)=>{t.u[Number(n)]=ge(tn(e,1))??\"\"}))}function Kc(t){t.categoryMask=void 0,t.confidenceMasks=void 0,t.qualityScores=void 0}function Yc(t){try{const e=new Wc(t.confidenceMasks,t.categoryMask,t.qualityScores);if(!t.j)return e;t.j(e)}finally{ya(t)}}Wc.prototype.close=Wc.prototype.close;var qc=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!1),this.u=[],this.outputCategoryMask=!1,this.outputConfidenceMasks=!0,this.h=new Mo,this.A=new Lo,kn(this.h,0,3,this.A),kn(t=this.h,0,1,e=new Ks)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return void 0!==t.displayNamesLocale?nn(this.h,2,pe(t.displayNamesLocale)):\"displayNamesLocale\"in t&&nn(this.h,2),\"outputCategoryMask\"in t&&(this.outputCategoryMask=t.outputCategoryMask??!1),\"outputConfidenceMasks\"in t&&(this.outputConfidenceMasks=t.outputConfidenceMasks??!0),super.l(t)}L(){zc(this)}segment(t,e,n){const r=\"function\"!=typeof e?e:{};return this.j=\"function\"==typeof e?e:n,Kc(this),pc(this,t,r),Yc(this)}La(t,e,n,r){const i=\"function\"!=typeof n?n:{};return this.j=\"function\"==typeof n?n:r,Kc(this),gc(this,t,i,e),Yc(this)}Da(){return this.u}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\");const e=new rs;Mr(e,Po,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.image_segmenter.ImageSegmenterGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),n.o(e),fs(t,n),ga(this,t),this.outputConfidenceMasks&&(ps(t,\"confidence_masks\"),as(n,\"CONFIDENCE_MASKS:confidence_masks\"),ma(this,\"confidence_masks\"),this.g.aa(\"confidence_masks\",((t,e)=>{this.confidenceMasks=t.map((t=>mc(this,t,!0,!this.j))),pa(this,e)})),this.g.attachEmptyPacketListener(\"confidence_masks\",(t=>{this.confidenceMasks=[],pa(this,t)}))),this.outputCategoryMask&&(ps(t,\"category_mask\"),as(n,\"CATEGORY_MASK:category_mask\"),ma(this,\"category_mask\"),this.g.Z(\"category_mask\",((t,e)=>{this.categoryMask=mc(this,t,!1,!this.j),pa(this,e)})),this.g.attachEmptyPacketListener(\"category_mask\",(t=>{this.categoryMask=void 0,pa(this,t)}))),ps(t,\"quality_scores\"),as(n,\"QUALITY_SCORES:quality_scores\"),this.g.attachFloatVectorListener(\"quality_scores\",((t,e)=>{this.qualityScores=t,pa(this,e)})),this.g.attachEmptyPacketListener(\"quality_scores\",(t=>{this.categoryMask=void 0,pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};qc.prototype.getLabels=qc.prototype.Da,qc.prototype.segmentForVideo=qc.prototype.La,qc.prototype.segment=qc.prototype.segment,qc.prototype.setOptions=qc.prototype.o,qc.createFromModelPath=function(t,e){return fc(qc,t,{baseOptions:{modelAssetPath:e}})},qc.createFromModelBuffer=function(t,e){return fc(qc,t,{baseOptions:{modelAssetBuffer:e}})},qc.createFromOptions=function(t,e){return fc(qc,t,e)};var $c=class{constructor(t,e,n){this.confidenceMasks=t,this.categoryMask=e,this.qualityScores=n}close(){this.confidenceMasks?.forEach((t=>{t.close()})),this.categoryMask?.close()}};$c.prototype.close=$c.prototype.close;var Jc=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect_in\",!1),this.outputCategoryMask=!1,this.outputConfidenceMasks=!0,this.h=new Mo,this.u=new Lo,kn(this.h,0,3,this.u),kn(t=this.h,0,1,e=new Ks)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return\"outputCategoryMask\"in t&&(this.outputCategoryMask=t.outputCategoryMask??!1),\"outputConfidenceMasks\"in t&&(this.outputConfidenceMasks=t.outputConfidenceMasks??!0),super.l(t)}segment(t,e,n,r){const i=\"function\"!=typeof n?n:{};if(this.j=\"function\"==typeof n?n:r,this.qualityScores=this.categoryMask=this.confidenceMasks=void 0,n=this.C+1,r=new Uo,e.keypoint&&e.scribble)throw Error(\"Cannot provide both keypoint and scribble.\");if(e.keypoint){var s=new Co;dn(s,3,te(!0),!1),dn(s,1,Zt(e.keypoint.x),0),dn(s,2,Zt(e.keypoint.y),0),Sn(r,1,Do,s)}else{if(!e.scribble)throw Error(\"Must provide either a keypoint or a scribble.\");{const t=new No;for(s of e.scribble)dn(e=new Co,3,te(!0),!1),dn(e,1,Zt(s.x),0),dn(e,2,Zt(s.y),0),Ln(t,1,Co,e);Sn(r,2,Do,t)}}this.g.addProtoToStream(r.g(),\"mediapipe.tasks.vision.interactive_segmenter.proto.RegionOfInterest\",\"roi_in\",n),pc(this,t,i);t:{try{const t=new $c(this.confidenceMasks,this.categoryMask,this.qualityScores);if(!this.j){var o=t;break t}this.j(t)}finally{ya(this)}o=void 0}return o}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"roi_in\"),ds(t,\"norm_rect_in\");const e=new rs;Mr(e,Po,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.interactive_segmenter.InteractiveSegmenterGraphV2\"),os(n,\"IMAGE:image_in\"),os(n,\"ROI:roi_in\"),os(n,\"NORM_RECT:norm_rect_in\"),n.o(e),fs(t,n),ga(this,t),this.outputConfidenceMasks&&(ps(t,\"confidence_masks\"),as(n,\"CONFIDENCE_MASKS:confidence_masks\"),ma(this,\"confidence_masks\"),this.g.aa(\"confidence_masks\",((t,e)=>{this.confidenceMasks=t.map((t=>mc(this,t,!0,!this.j))),pa(this,e)})),this.g.attachEmptyPacketListener(\"confidence_masks\",(t=>{this.confidenceMasks=[],pa(this,t)}))),this.outputCategoryMask&&(ps(t,\"category_mask\"),as(n,\"CATEGORY_MASK:category_mask\"),ma(this,\"category_mask\"),this.g.Z(\"category_mask\",((t,e)=>{this.categoryMask=mc(this,t,!1,!this.j),pa(this,e)})),this.g.attachEmptyPacketListener(\"category_mask\",(t=>{this.categoryMask=void 0,pa(this,t)}))),ps(t,\"quality_scores\"),as(n,\"QUALITY_SCORES:quality_scores\"),this.g.attachFloatVectorListener(\"quality_scores\",((t,e)=>{this.qualityScores=t,pa(this,e)})),this.g.attachEmptyPacketListener(\"quality_scores\",(t=>{this.categoryMask=void 0,pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Jc.prototype.segment=Jc.prototype.segment,Jc.prototype.setOptions=Jc.prototype.o,Jc.createFromModelPath=function(t,e){return fc(Jc,t,{baseOptions:{modelAssetPath:e}})},Jc.createFromModelBuffer=function(t,e){return fc(Jc,t,{baseOptions:{modelAssetBuffer:e}})},Jc.createFromOptions=function(t,e){return fc(Jc,t,e)};var Zc=class extends yc{constructor(t,e){super(new lc(t,e),\"input_frame_gpu\",\"norm_rect\",!1),this.j={detections:[]},kn(t=this.h=new Bo,0,1,e=new Ks)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return void 0!==t.displayNamesLocale?nn(this.h,2,pe(t.displayNamesLocale)):\"displayNamesLocale\"in t&&nn(this.h,2),void 0!==t.maxResults?Mn(this.h,3,t.maxResults):\"maxResults\"in t&&nn(this.h,3),void 0!==t.scoreThreshold?Pn(this.h,4,t.scoreThreshold):\"scoreThreshold\"in t&&nn(this.h,4),void 0!==t.categoryAllowlist?On(this.h,5,t.categoryAllowlist):\"categoryAllowlist\"in t&&nn(this.h,5),void 0!==t.categoryDenylist?On(this.h,6,t.categoryDenylist):\"categoryDenylist\"in t&&nn(this.h,6),this.l(t)}F(t,e){return this.j={detections:[]},pc(this,t,e),this.j}G(t,e,n){return this.j={detections:[]},gc(this,t,n,e),this.j}m(){var t=new gs;ds(t,\"input_frame_gpu\"),ds(t,\"norm_rect\"),ps(t,\"detections\");const e=new rs;Mr(e,Go,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.ObjectDetectorGraph\"),os(n,\"IMAGE:input_frame_gpu\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"DETECTIONS:detections\"),n.o(e),fs(t,n),this.g.attachProtoVectorListener(\"detections\",((t,e)=>{for(const e of t)t=ks(e),this.j.detections.push(Ko(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"detections\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Zc.prototype.detectForVideo=Zc.prototype.G,Zc.prototype.detect=Zc.prototype.F,Zc.prototype.setOptions=Zc.prototype.o,Zc.createFromModelPath=async function(t,e){return fc(Zc,t,{baseOptions:{modelAssetPath:e}})},Zc.createFromModelBuffer=function(t,e){return fc(Zc,t,{baseOptions:{modelAssetBuffer:e}})},Zc.createFromOptions=function(t,e){return fc(Zc,t,e)};var Qc=class{constructor(t,e,n){this.landmarks=t,this.worldLandmarks=e,this.segmentationMasks=n}close(){this.segmentationMasks?.forEach((t=>{t.close()}))}};function th(t){t.landmarks=[],t.worldLandmarks=[],t.segmentationMasks=void 0}function eh(t){try{const e=new Qc(t.landmarks,t.worldLandmarks,t.segmentationMasks);if(!t.u)return e;t.u(e)}finally{ya(t)}}Qc.prototype.close=Qc.prototype.close;var nh=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!1),this.landmarks=[],this.worldLandmarks=[],this.outputSegmentationMasks=!1,kn(t=this.h=new jo,0,1,e=new Ks),this.A=new Eo,kn(this.h,0,3,this.A),this.j=new vo,kn(this.h,0,2,this.j),Mn(this.j,4,1),Pn(this.j,2,.5),Pn(this.A,2,.5),Pn(this.h,4,.5)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return\"numPoses\"in t&&Mn(this.j,4,t.numPoses??1),\"minPoseDetectionConfidence\"in t&&Pn(this.j,2,t.minPoseDetectionConfidence??.5),\"minTrackingConfidence\"in t&&Pn(this.h,4,t.minTrackingConfidence??.5),\"minPosePresenceConfidence\"in t&&Pn(this.A,2,t.minPosePresenceConfidence??.5),\"outputSegmentationMasks\"in t&&(this.outputSegmentationMasks=t.outputSegmentationMasks??!1),this.l(t)}F(t,e,n){const r=\"function\"!=typeof e?e:{};return this.u=\"function\"==typeof e?e:n,th(this),pc(this,t,r),eh(this)}G(t,e,n,r){const i=\"function\"!=typeof n?n:{};return this.u=\"function\"==typeof n?n:r,th(this),gc(this,t,i,e),eh(this)}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\"),ps(t,\"normalized_landmarks\"),ps(t,\"world_landmarks\"),ps(t,\"segmentation_masks\");const e=new rs;Mr(e,Vo,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.pose_landmarker.PoseLandmarkerGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"NORM_LANDMARKS:normalized_landmarks\"),as(n,\"WORLD_LANDMARKS:world_landmarks\"),n.o(e),fs(t,n),ga(this,t),this.g.attachProtoVectorListener(\"normalized_landmarks\",((t,e)=>{this.landmarks=[];for(const e of t)t=Rs(e),this.landmarks.push(Yo(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"normalized_landmarks\",(t=>{this.landmarks=[],pa(this,t)})),this.g.attachProtoVectorListener(\"world_landmarks\",((t,e)=>{this.worldLandmarks=[];for(const e of t)t=xs(e),this.worldLandmarks.push(qo(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"world_landmarks\",(t=>{this.worldLandmarks=[],pa(this,t)})),this.outputSegmentationMasks&&(as(n,\"SEGMENTATION_MASK:segmentation_masks\"),ma(this,\"segmentation_masks\"),this.g.aa(\"segmentation_masks\",((t,e)=>{this.segmentationMasks=t.map((t=>mc(this,t,!0,!this.u))),pa(this,e)})),this.g.attachEmptyPacketListener(\"segmentation_masks\",(t=>{this.segmentationMasks=[],pa(this,t)}))),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};nh.prototype.detectForVideo=nh.prototype.G,nh.prototype.detect=nh.prototype.F,nh.prototype.setOptions=nh.prototype.o,nh.createFromModelPath=function(t,e){return fc(nh,t,{baseOptions:{modelAssetPath:e}})},nh.createFromModelBuffer=function(t,e){return fc(nh,t,{baseOptions:{modelAssetBuffer:e}})},nh.createFromOptions=function(t,e){return fc(nh,t,e)},nh.POSE_CONNECTIONS=Dc;export{Ja as DrawingUtils,_c as FaceDetector,Ic as FaceLandmarker,na as FilesetResolver,Oc as GestureRecognizer,Uc as HandLandmarker,Vc as HolisticLandmarker,Xc as ImageClassifier,Hc as ImageEmbedder,qc as ImageSegmenter,Wc as ImageSegmenterResult,Jc as InteractiveSegmenter,$c as InteractiveSegmenterResult,oc as MPImage,Ga as MPMask,Zc as ObjectDetector,nh as PoseLandmarker,_a as TaskRunner,yc as VisionTaskRunner};\n//# sourceMappingURL=vision_bundle_mjs.js.map\n", "import {\r\n FilesetResolver,\r\n FaceLandmarker,\r\n FaceLandmarkerResult,\r\n} from \"@mediapipe/tasks-vision\";\r\n\r\nconst WASM_CDN =\r\n \"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm\";\r\nconst MODEL_URL =\r\n \"https://storage.googleapis.com/mediapipe-models/face_landmarker/face_landmarker/float16/latest/face_landmarker.task\";\r\n\r\nexport interface FaceDetectionResult {\r\n faceDetected: boolean;\r\n blendshapes: Map<string, number>;\r\n transformMatrix: number[] | null;\r\n}\r\n\r\nexport class FaceDetectorEngine {\r\n private landmarker: FaceLandmarker | null = null;\r\n\r\n async init(): Promise<void> {\r\n const vision = await FilesetResolver.forVisionTasks(WASM_CDN);\r\n\r\n // Fetch model ourselves to avoid MediaPipe internal path resolution issues\r\n const modelResponse = await fetch(MODEL_URL);\r\n if (!modelResponse.ok) {\r\n throw new Error(`Failed to download face model (${modelResponse.status})`);\r\n }\r\n const modelBuffer = await modelResponse.arrayBuffer();\r\n\r\n this.landmarker = await FaceLandmarker.createFromOptions(vision, {\r\n baseOptions: {\r\n modelAssetBuffer: new Uint8Array(modelBuffer),\r\n },\r\n runningMode: \"VIDEO\",\r\n outputFaceBlendshapes: true,\r\n outputFacialTransformationMatrixes: true,\r\n numFaces: 1,\r\n });\r\n }\r\n\r\n detect(video: HTMLVideoElement, timestamp: number): FaceDetectionResult {\r\n if (!this.landmarker) {\r\n return { faceDetected: false, blendshapes: new Map(), transformMatrix: null };\r\n }\r\n\r\n const result: FaceLandmarkerResult = this.landmarker.detectForVideo(\r\n video,\r\n timestamp\r\n );\r\n\r\n if (!result.faceBlendshapes || result.faceBlendshapes.length === 0) {\r\n return { faceDetected: false, blendshapes: new Map(), transformMatrix: null };\r\n }\r\n\r\n const blendshapes = new Map<string, number>();\r\n for (const bs of result.faceBlendshapes[0].categories) {\r\n blendshapes.set(bs.categoryName, bs.score);\r\n }\r\n\r\n const transformMatrix =\r\n result.facialTransformationMatrixes &&\r\n result.facialTransformationMatrixes.length > 0\r\n ? Array.from(result.facialTransformationMatrixes[0].data) as number[]\r\n : null;\r\n\r\n return { faceDetected: true, blendshapes, transformMatrix };\r\n }\r\n\r\n destroy(): void {\r\n if (this.landmarker) {\r\n this.landmarker.close();\r\n this.landmarker = null;\r\n }\r\n }\r\n}\r\n", "import { FaceDetectionResult } from \"./FaceDetector\";\r\n\r\nexport interface ActionState {\r\n action: string;\r\n detected: boolean;\r\n active: boolean;\r\n confidence: number;\r\n}\r\n\r\n/**\r\n * Per-action detection tuning.\r\n * - threshold : minimum confidence score required to start counting.\r\n * - holdFrames: consecutive frames above threshold before action is confirmed.\r\n *\r\n * BLINK is a fast reflex (~100-200ms) so we use a low threshold and only 2\r\n * frames. Head-turn and mouth-open are sustained movements so they need a\r\n * slightly longer hold to avoid false positives.\r\n */\r\nconst ACTION_CONFIGS: Record<string, { threshold: number; holdFrames: number }> = {\r\n BLINK: { threshold: 0.30, holdFrames: 2 },\r\n TURN_LEFT: { threshold: 0.45, holdFrames: 6 },\r\n TURN_RIGHT: { threshold: 0.45, holdFrames: 6 },\r\n TURN_HEAD: { threshold: 0.45, holdFrames: 6 },\r\n OPEN_MOUTH: { threshold: 0.40, holdFrames: 3 },\r\n};\r\nconst DEFAULT_CONFIG = { threshold: 0.55, holdFrames: 8 };\r\n\r\n/**\r\n * Sequential action detector aligned with backend's 5 UPPERCASE actions:\r\n * BLINK, TURN_LEFT, TURN_RIGHT, TURN_HEAD, OPEN_MOUTH\r\n */\r\nexport class ActionDetector {\r\n private completedActions = new Set<string>();\r\n private holdCounters = new Map<string, number>();\r\n\r\n constructor(private requiredActions: string[]) {}\r\n\r\n check(result: FaceDetectionResult): ActionState[] {\r\n const currentAction = this.getCurrentAction();\r\n\r\n if (!result.faceDetected) {\r\n return this.buildStates(currentAction, 0);\r\n }\r\n\r\n const bs = result.blendshapes;\r\n\r\n // Only check the current active action (sequential flow)\r\n if (currentAction && !this.completedActions.has(currentAction)) {\r\n const conf = this.getConfidence(currentAction, bs, result.transformMatrix);\r\n const cfg = ACTION_CONFIGS[currentAction] ?? DEFAULT_CONFIG;\r\n\r\n if (conf >= cfg.threshold) {\r\n const count = (this.holdCounters.get(currentAction) || 0) + 1;\r\n this.holdCounters.set(currentAction, count);\r\n\r\n if (count >= cfg.holdFrames) {\r\n this.completedActions.add(currentAction);\r\n this.holdCounters.delete(currentAction);\r\n }\r\n } else {\r\n this.holdCounters.set(currentAction, 0);\r\n }\r\n\r\n return this.buildStates(currentAction, conf);\r\n }\r\n\r\n return this.buildStates(currentAction, 0);\r\n }\r\n\r\n getCurrentAction(): string | null {\r\n for (const action of this.requiredActions) {\r\n if (!this.completedActions.has(action)) return action;\r\n }\r\n return null;\r\n }\r\n\r\n private buildStates(\r\n currentAction: string | null,\r\n currentConf: number\r\n ): ActionState[] {\r\n return this.requiredActions.map((action) => ({\r\n action,\r\n detected: this.completedActions.has(action),\r\n active: action === currentAction,\r\n confidence: action === currentAction ? currentConf : 0,\r\n }));\r\n }\r\n\r\n private getConfidence(\r\n action: string,\r\n bs: Map<string, number>,\r\n matrix: number[] | null\r\n ): number {\r\n switch (action) {\r\n case \"BLINK\": {\r\n const left = bs.get(\"eyeBlinkLeft\") || 0;\r\n const right = bs.get(\"eyeBlinkRight\") || 0;\r\n return (left + right) / 2;\r\n }\r\n\r\n case \"TURN_LEFT\": {\r\n // Camera is mirrored \u2014 turning left in real life appears as positive yaw\r\n const yaw = this.getHeadYaw(matrix);\r\n return yaw > 12 ? Math.min(1, yaw / 30) : 0;\r\n }\r\n\r\n case \"TURN_RIGHT\": {\r\n // Camera is mirrored \u2014 turning right in real life appears as negative yaw\r\n const yaw = this.getHeadYaw(matrix);\r\n return yaw < -12 ? Math.min(1, Math.abs(yaw) / 30) : 0;\r\n }\r\n\r\n case \"TURN_HEAD\": {\r\n // Any significant yaw (left OR right) counts\r\n const yaw = Math.abs(this.getHeadYaw(matrix));\r\n return yaw > 15 ? Math.min(1, yaw / 30) : 0;\r\n }\r\n\r\n case \"OPEN_MOUTH\":\r\n return bs.get(\"jawOpen\") || 0;\r\n\r\n default:\r\n return 0;\r\n }\r\n }\r\n\r\n private getHeadYaw(matrix: number[] | null): number {\r\n if (!matrix || matrix.length < 16) return 0;\r\n // 4x4 column-major matrix from MediaPipe FaceLandmarker\r\n // Yaw (rotation around Y axis): atan2(-m20, m00) where m20=matrix[2], m00=matrix[0]\r\n return Math.atan2(-matrix[2], matrix[0]) * (180 / Math.PI);\r\n }\r\n\r\n allCompleted(): boolean {\r\n return this.requiredActions.every((a) => this.completedActions.has(a));\r\n }\r\n\r\n completedCount(): number {\r\n return this.completedActions.size;\r\n }\r\n\r\n reset(): void {\r\n this.completedActions.clear();\r\n this.holdCounters.clear();\r\n }\r\n}\r\n", "import { ActionState } from \"../../camera/ActionDetector\";\r\n\r\n/**\r\n * Icons for the 5 backend-supported challenge actions (UPPERCASE).\r\n */\r\nconst ICONS: Record<string, string> = {\r\n BLINK: \"\\uD83D\\uDE09\",\r\n TURN_LEFT: \"\\u2B05\",\r\n TURN_RIGHT: \"\\u27A1\",\r\n TURN_HEAD: \"\\uD83D\\uDE42\",\r\n OPEN_MOUTH: \"\\uD83D\\uDE2E\",\r\n};\r\n\r\n/**\r\n * Large animated SVG/HTML cues shown in the centre of the camera frame\r\n * so the user knows exactly what to do \u2014 like a real liveness test.\r\n */\r\nconst ACTION_CUES: Record<string, string> = {\r\n BLINK: `\r\n <div style=\"display:flex;flex-direction:column;align-items:center;gap:10px;\">\r\n <div style=\"font-size:64px;line-height:1;animation:sc-blink 1.2s ease-in-out infinite;\">\uD83D\uDC41\uFE0F</div>\r\n <div style=\"font-size:13px;font-weight:600;color:#fff;opacity:0.9;letter-spacing:0.5px;\">BLINK YOUR EYES</div>\r\n </div>`,\r\n TURN_LEFT: `\r\n <div style=\"display:flex;flex-direction:column;align-items:center;gap:10px;\">\r\n <div style=\"font-size:56px;line-height:1;animation:sc-slide-left 1s ease-in-out infinite;\">\u2B05\uFE0F</div>\r\n <div style=\"font-size:13px;font-weight:600;color:#fff;opacity:0.9;letter-spacing:0.5px;\">TURN HEAD RIGHT</div>\r\n </div>`,\r\n TURN_RIGHT: `\r\n <div style=\"display:flex;flex-direction:column;align-items:center;gap:10px;\">\r\n <div style=\"font-size:56px;line-height:1;animation:sc-slide-right 1s ease-in-out infinite;\">\u27A1\uFE0F</div>\r\n <div style=\"font-size:13px;font-weight:600;color:#fff;opacity:0.9;letter-spacing:0.5px;\">TURN HEAD LEFT</div>\r\n </div>`,\r\n TURN_HEAD: `\r\n <div style=\"display:flex;flex-direction:column;align-items:center;gap:10px;\">\r\n <div style=\"font-size:56px;line-height:1;animation:sc-turn-head 1.4s ease-in-out infinite;\">\u2194\uFE0F</div>\r\n <div style=\"font-size:13px;font-weight:600;color:#fff;opacity:0.9;letter-spacing:0.5px;\">TURN HEAD SIDE TO SIDE</div>\r\n </div>`,\r\n OPEN_MOUTH: `\r\n <div style=\"display:flex;flex-direction:column;align-items:center;gap:10px;\">\r\n <div style=\"font-size:64px;line-height:1;animation:sc-mouth 1.2s ease-in-out infinite;\">\uD83D\uDE2E</div>\r\n <div style=\"font-size:13px;font-weight:600;color:#fff;opacity:0.9;letter-spacing:0.5px;\">OPEN YOUR MOUTH</div>\r\n </div>`,\r\n};\r\n\r\n/** Keyframe CSS injected once */\r\nfunction injectLivenessKeyframes(): void {\r\n if (document.getElementById(\"sc-liveness-kf\")) return;\r\n const s = document.createElement(\"style\");\r\n s.id = \"sc-liveness-kf\";\r\n s.textContent = `\r\n @keyframes sc-blink {\r\n 0%,100% { transform:scaleY(1); }\r\n 40% { transform:scaleY(0.1); }\r\n 50% { transform:scaleY(1); }\r\n }\r\n @keyframes sc-slide-left {\r\n 0%,100% { transform:translateX(0); opacity:1; }\r\n 50% { transform:translateX(-14px); opacity:0.6; }\r\n }\r\n @keyframes sc-slide-right {\r\n 0%,100% { transform:translateX(0); opacity:1; }\r\n 50% { transform:translateX(14px); opacity:0.6; }\r\n }\r\n @keyframes sc-turn-head {\r\n 0%,100% { transform:translateX(0); }\r\n 25% { transform:translateX(-12px); }\r\n 75% { transform:translateX(12px); }\r\n }\r\n @keyframes sc-mouth {\r\n 0%,100% { transform:scaleY(1); }\r\n 40% { transform:scaleY(1.25); }\r\n 60% { transform:scaleY(1); }\r\n }\r\n @keyframes sc-pop-in {\r\n 0% { transform:scale(0.7); opacity:0; }\r\n 60% { transform:scale(1.05); }\r\n 100% { transform:scale(1); opacity:1; }\r\n }\r\n @keyframes sc-cue-fade {\r\n 0% { opacity:0; transform:translateY(8px); }\r\n 20% { opacity:1; transform:translateY(0); }\r\n 80% { opacity:1; transform:translateY(0); }\r\n 100% { opacity:0; transform:translateY(-8px); }\r\n }\r\n `;\r\n document.head.appendChild(s);\r\n}\r\n\r\n/**\r\n * Challenge shape used by LivenessUI.mount().\r\n */\r\nexport interface UIChallenge {\r\n actions: string[];\r\n time_limit_seconds: number;\r\n instruction: string;\r\n}\r\n\r\nexport class LivenessUI {\r\n private root: HTMLDivElement | null = null;\r\n private videoEl: HTMLVideoElement | null = null;\r\n private instructionEl: HTMLDivElement | null = null;\r\n private stepsEl: HTMLDivElement | null = null;\r\n private progressBarEl: HTMLDivElement | null = null;\r\n private confidenceRingEl: SVGCircleElement | null = null;\r\n private timerEl: HTMLDivElement | null = null;\r\n private overlayEl: HTMLDivElement | null = null;\r\n private actionCueEl: HTMLDivElement | null = null;\r\n private timerInterval: ReturnType<typeof setInterval> | null = null;\r\n private totalActions = 0;\r\n private currentCueAction: string | null = null;\r\n private docCaptureRoot: HTMLDivElement | null = null;\r\n\r\n mount(\r\n container: HTMLElement,\r\n challenge: UIChallenge\r\n ): HTMLVideoElement {\r\n injectLivenessKeyframes();\r\n this.totalActions = challenge.actions.length;\r\n\r\n this.root = document.createElement(\"div\");\r\n this.root.style.cssText = `\r\n position:relative;width:100%;max-width:420px;margin:0 auto;\r\n background:#0a0a0a;border-radius:16px;overflow:hidden;\r\n font-family:system-ui,-apple-system,sans-serif;\r\n box-shadow:0 8px 32px rgba(0,0,0,0.4);\r\n `;\r\n\r\n // Video\r\n this.videoEl = document.createElement(\"video\");\r\n this.videoEl.autoplay = true;\r\n this.videoEl.playsInline = true;\r\n this.videoEl.muted = true;\r\n this.videoEl.style.cssText =\r\n \"width:100%;display:block;transform:scaleX(-1);aspect-ratio:3/4;object-fit:cover;\";\r\n\r\n // Face guide \u2014 oval with confidence ring\r\n const guideWrap = document.createElement(\"div\");\r\n guideWrap.style.cssText = `\r\n position:absolute;top:8%;left:50%;transform:translateX(-50%);\r\n width:180px;height:240px;pointer-events:none;\r\n `;\r\n\r\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\r\n svg.setAttribute(\"viewBox\", \"0 0 180 240\");\r\n svg.style.cssText = \"width:100%;height:100%;\";\r\n\r\n // Background oval (guide)\r\n const bgOval = document.createElementNS(\r\n \"http://www.w3.org/2000/svg\",\r\n \"ellipse\"\r\n );\r\n bgOval.setAttribute(\"cx\", \"90\");\r\n bgOval.setAttribute(\"cy\", \"120\");\r\n bgOval.setAttribute(\"rx\", \"85\");\r\n bgOval.setAttribute(\"ry\", \"115\");\r\n bgOval.setAttribute(\"fill\", \"none\");\r\n bgOval.setAttribute(\"stroke\", \"rgba(255,255,255,0.25)\");\r\n bgOval.setAttribute(\"stroke-width\", \"2.5\");\r\n bgOval.setAttribute(\"stroke-dasharray\", \"8 4\");\r\n\r\n // Confidence progress ring\r\n const confOval = document.createElementNS(\r\n \"http://www.w3.org/2000/svg\",\r\n \"ellipse\"\r\n );\r\n confOval.setAttribute(\"cx\", \"90\");\r\n confOval.setAttribute(\"cy\", \"120\");\r\n confOval.setAttribute(\"rx\", \"85\");\r\n confOval.setAttribute(\"ry\", \"115\");\r\n confOval.setAttribute(\"fill\", \"none\");\r\n confOval.setAttribute(\"stroke\", \"#22c55e\");\r\n confOval.setAttribute(\"stroke-width\", \"3.5\");\r\n const circumference =\r\n 2 * Math.PI * Math.sqrt((85 * 85 + 115 * 115) / 2);\r\n confOval.setAttribute(\r\n \"stroke-dasharray\",\r\n `${circumference}`\r\n );\r\n confOval.setAttribute(\"stroke-dashoffset\", `${circumference}`);\r\n confOval.style.cssText =\r\n \"transition:stroke-dashoffset 0.15s ease;transform:rotate(-90deg);transform-origin:90px 120px;\";\r\n this.confidenceRingEl = confOval as unknown as SVGCircleElement;\r\n\r\n svg.appendChild(bgOval);\r\n svg.appendChild(confOval);\r\n guideWrap.appendChild(svg);\r\n\r\n // Top bar \u2014 instruction\r\n const topBar = document.createElement(\"div\");\r\n topBar.style.cssText = `\r\n position:absolute;top:0;left:0;right:0;\r\n background:linear-gradient(180deg,rgba(0,0,0,0.7) 0%,transparent 100%);\r\n padding:16px 16px 32px;\r\n `;\r\n\r\n this.instructionEl = document.createElement(\"div\");\r\n this.instructionEl.style.cssText = `\r\n color:#fff;font-size:15px;font-weight:600;text-align:center;\r\n line-height:1.4;\r\n `;\r\n this.instructionEl.textContent = challenge.instruction;\r\n topBar.appendChild(this.instructionEl);\r\n\r\n // Bottom panel\r\n const bottomPanel = document.createElement(\"div\");\r\n bottomPanel.style.cssText = `\r\n position:absolute;bottom:0;left:0;right:0;\r\n background:linear-gradient(0deg,rgba(0,0,0,0.85) 0%,rgba(0,0,0,0.6) 60%,transparent 100%);\r\n padding:24px 16px 16px;\r\n `;\r\n\r\n // Progress bar\r\n const progressWrap = document.createElement(\"div\");\r\n progressWrap.style.cssText = `\r\n height:3px;background:rgba(255,255,255,0.15);border-radius:2px;\r\n margin-bottom:14px;overflow:hidden;\r\n `;\r\n this.progressBarEl = document.createElement(\"div\");\r\n this.progressBarEl.style.cssText = `\r\n height:100%;width:0%;background:linear-gradient(90deg,#22c55e,#4ade80);\r\n border-radius:2px;transition:width 0.4s ease;\r\n `;\r\n progressWrap.appendChild(this.progressBarEl);\r\n bottomPanel.appendChild(progressWrap);\r\n\r\n // Steps list\r\n this.stepsEl = document.createElement(\"div\");\r\n this.stepsEl.style.cssText = `\r\n display:flex;flex-direction:column;gap:8px;margin-bottom:12px;\r\n `;\r\n\r\n for (let i = 0; i < challenge.actions.length; i++) {\r\n const action = challenge.actions[i];\r\n const step = document.createElement(\"div\");\r\n step.dataset.action = action;\r\n step.style.cssText = `\r\n display:flex;align-items:center;gap:10px;\r\n padding:8px 12px;border-radius:10px;\r\n background:rgba(255,255,255,0.06);\r\n transition:all 0.3s ease;\r\n opacity:${i === 0 ? \"1\" : \"0.4\"};\r\n `;\r\n\r\n const num = document.createElement(\"div\");\r\n num.className = \"sc-step-num\";\r\n num.style.cssText = `\r\n width:28px;height:28px;border-radius:50%;\r\n display:flex;align-items:center;justify-content:center;\r\n font-size:13px;font-weight:700;color:#fff;\r\n background:rgba(255,255,255,0.12);\r\n border:2px solid rgba(255,255,255,0.2);\r\n transition:all 0.3s ease;flex-shrink:0;\r\n `;\r\n num.textContent = String(i + 1);\r\n\r\n const label = document.createElement(\"div\");\r\n label.style.cssText = \"color:#fff;font-size:13px;flex:1;\";\r\n label.textContent = this.describeAction(action);\r\n\r\n const icon = document.createElement(\"div\");\r\n icon.className = \"sc-step-icon\";\r\n icon.style.cssText = \"font-size:18px;flex-shrink:0;\";\r\n icon.textContent = ICONS[action] || \"\";\r\n\r\n step.appendChild(num);\r\n step.appendChild(label);\r\n step.appendChild(icon);\r\n this.stepsEl.appendChild(step);\r\n }\r\n\r\n bottomPanel.appendChild(this.stepsEl);\r\n\r\n // Timer\r\n this.timerEl = document.createElement(\"div\");\r\n this.timerEl.style.cssText = `\r\n text-align:center;color:rgba(255,255,255,0.5);\r\n font-size:11px;font-variant-numeric:tabular-nums;\r\n `;\r\n bottomPanel.appendChild(this.timerEl);\r\n\r\n // Result overlay (used for success / failure / timeout)\r\n this.overlayEl = document.createElement(\"div\");\r\n this.overlayEl.style.cssText = `\r\n position:absolute;inset:0;display:none;align-items:center;\r\n justify-content:center;z-index:10;\r\n background:rgba(0,0,0,0.85);backdrop-filter:blur(8px);\r\n transition:opacity 0.3s ease;\r\n `;\r\n\r\n // Action cue \u2014 large centred animation shown when an action is active\r\n this.actionCueEl = document.createElement(\"div\");\r\n this.actionCueEl.style.cssText = `\r\n position:absolute;\r\n top:50%;left:50%;transform:translate(-50%,-50%);\r\n z-index:5;pointer-events:none;\r\n display:none;\r\n text-align:center;\r\n background:rgba(0,0,0,0.55);\r\n backdrop-filter:blur(4px);\r\n border-radius:20px;\r\n padding:18px 28px;\r\n min-width:160px;\r\n border:1.5px solid rgba(255,255,255,0.15);\r\n `;\r\n\r\n // Assemble\r\n this.root.appendChild(this.videoEl);\r\n this.root.appendChild(guideWrap);\r\n this.root.appendChild(topBar);\r\n this.root.appendChild(bottomPanel);\r\n this.root.appendChild(this.actionCueEl);\r\n this.root.appendChild(this.overlayEl);\r\n\r\n container.appendChild(this.root);\r\n this.startTimer(challenge.time_limit_seconds);\r\n\r\n return this.videoEl;\r\n }\r\n\r\n updateActions(states: ActionState[]): void {\r\n if (!this.stepsEl || !this.progressBarEl) return;\r\n\r\n let completed = 0;\r\n const activeState = states.find((s) => s.active && !s.detected) ?? null;\r\n const activeAction = activeState?.action ?? null;\r\n\r\n for (const state of states) {\r\n const step = this.stepsEl.querySelector(\r\n `[data-action=\"${state.action}\"]`\r\n ) as HTMLDivElement | null;\r\n if (!step) continue;\r\n\r\n const num = step.querySelector(\".sc-step-num\") as HTMLElement | null;\r\n\r\n if (state.detected) {\r\n completed++;\r\n step.style.opacity = \"1\";\r\n step.style.background = \"rgba(34,197,94,0.15)\";\r\n if (num) {\r\n num.style.background = \"#22c55e\";\r\n num.style.borderColor = \"#22c55e\";\r\n num.textContent = \"\\u2713\";\r\n }\r\n } else if (state.active) {\r\n step.style.opacity = \"1\";\r\n step.style.background = \"rgba(59,130,246,0.15)\";\r\n if (num) {\r\n num.style.borderColor = \"#3b82f6\";\r\n num.style.background = \"rgba(59,130,246,0.3)\";\r\n }\r\n }\r\n }\r\n\r\n // Update progress bar\r\n const pct = this.totalActions > 0 ? (completed / this.totalActions) * 100 : 0;\r\n this.progressBarEl.style.width = `${pct}%`;\r\n\r\n // Update confidence ring for the active action\r\n if (this.confidenceRingEl) {\r\n const circumference =\r\n 2 * Math.PI * Math.sqrt((85 * 85 + 115 * 115) / 2);\r\n const conf = activeState ? activeState.confidence : 0;\r\n const offset = circumference * (1 - conf);\r\n this.confidenceRingEl.setAttribute(\"stroke-dashoffset\", `${offset}`);\r\n this.confidenceRingEl.setAttribute(\r\n \"stroke\",\r\n conf > 0.6 ? \"#22c55e\" : \"#3b82f6\"\r\n );\r\n }\r\n\r\n // Show / switch large animated action cue\r\n this.updateActionCue(activeAction);\r\n }\r\n\r\n private updateActionCue(action: string | null): void {\r\n if (!this.actionCueEl) return;\r\n\r\n // No active action \u2192 hide cue\r\n if (!action) {\r\n this.actionCueEl.style.display = \"none\";\r\n this.currentCueAction = null;\r\n return;\r\n }\r\n\r\n // Same action already showing \u2014 no DOM thrash\r\n if (action === this.currentCueAction) return;\r\n\r\n this.currentCueAction = action;\r\n const cueHtml = ACTION_CUES[action];\r\n if (!cueHtml) {\r\n this.actionCueEl.style.display = \"none\";\r\n return;\r\n }\r\n\r\n // Inject content and animate in\r\n this.actionCueEl.innerHTML = cueHtml;\r\n this.actionCueEl.style.display = \"block\";\r\n this.actionCueEl.style.animation = \"none\";\r\n // Force reflow then trigger animation\r\n void this.actionCueEl.offsetWidth;\r\n this.actionCueEl.style.animation = \"sc-pop-in 0.3s ease forwards\";\r\n }\r\n\r\n updateInstruction(text: string): void {\r\n if (this.instructionEl) {\r\n this.instructionEl.textContent = text;\r\n }\r\n }\r\n\r\n stopTimer(): void {\r\n if (this.timerInterval) {\r\n clearInterval(this.timerInterval);\r\n this.timerInterval = null;\r\n }\r\n if (this.timerEl) {\r\n this.timerEl.textContent = \"\";\r\n }\r\n }\r\n\r\n showResult(status: \"processing\" | \"failed\", verificationId?: number): Promise<void> {\r\n return new Promise((resolve) => {\r\n if (!this.overlayEl) { resolve(); return; }\r\n\r\n if (this.actionCueEl) this.actionCueEl.style.display = \"none\";\r\n this.stopTimer();\r\n\r\n const isProcessing = status === \"processing\";\r\n this.overlayEl.style.display = \"flex\";\r\n\r\n this.overlayEl.innerHTML = `\r\n <div style=\"text-align:center;color:#fff;animation:sc-pop-in 0.35s ease;padding:24px;\">\r\n <div style=\"\r\n width:80px;height:80px;border-radius:50%;margin:0 auto 20px;\r\n display:flex;align-items:center;justify-content:center;\r\n font-size:36px;\r\n background:${isProcessing ? \"rgba(34,197,94,0.2)\" : \"rgba(239,68,68,0.2)\"};\r\n border:3px solid ${isProcessing ? \"#22c55e\" : \"#ef4444\"};\r\n \">${isProcessing ? \"\\u2713\" : \"\\u2717\"}</div>\r\n <div style=\"font-size:19px;font-weight:700;margin-bottom:8px;\">\r\n ${isProcessing ? \"Identity Check Submitted\" : \"Submission Failed\"}\r\n </div>\r\n <div style=\"font-size:13px;opacity:0.65;line-height:1.6;margin-bottom:${verificationId ? \"16px\" : \"0\"};\">\r\n ${isProcessing\r\n ? \"Your identity is being verified.<br>You\\'ll be notified of the outcome shortly.\"\r\n : \"Something went wrong. Please try again.\"}\r\n </div>\r\n ${verificationId ? `\r\n <div style=\"\r\n margin-top:4px;padding:8px 14px;border-radius:8px;\r\n background:rgba(255,255,255,0.08);display:inline-block;\r\n font-size:11px;color:rgba(255,255,255,0.5);letter-spacing:0.3px;\r\n \">Ref: #${verificationId}</div>` : \"\"}\r\n </div>\r\n `;\r\n\r\n setTimeout(resolve, 2800);\r\n });\r\n }\r\n\r\n /**\r\n * Show timeout screen with an optional retry callback.\r\n * Resolves immediately so the orchestrator can move to next step.\r\n */\r\n showTimeout(onRetry: () => void): Promise<void> {\r\n return new Promise((resolve) => {\r\n if (!this.overlayEl) { resolve(); return; }\r\n\r\n if (this.actionCueEl) this.actionCueEl.style.display = \"none\";\r\n this.stopTimer();\r\n\r\n this.overlayEl.style.display = \"flex\";\r\n this.overlayEl.innerHTML = `\r\n <div style=\"text-align:center;color:#fff;animation:sc-pop-in 0.35s ease;padding:24px;\">\r\n <div style=\"\r\n width:80px;height:80px;border-radius:50%;margin:0 auto 16px;\r\n display:flex;align-items:center;justify-content:center;\r\n font-size:36px;\r\n background:rgba(251,191,36,0.15);\r\n border:3px solid #fbbf24;\r\n \">\u23F1</div>\r\n <div style=\"font-size:18px;font-weight:700;margin-bottom:8px;\">Time's Up</div>\r\n <div style=\"font-size:13px;opacity:0.65;margin-bottom:20px;\">\r\n You ran out of time. Please try again.\r\n </div>\r\n <button id=\"sc-retry-btn\" style=\"\r\n padding:12px 28px;border-radius:10px;\r\n background:#3b82f6;color:#fff;\r\n border:none;cursor:pointer;\r\n font-size:14px;font-weight:600;\r\n width:100%;max-width:200px;\r\n \">Try Again</button>\r\n </div>\r\n `;\r\n\r\n // Wire retry button\r\n const retryBtn = this.overlayEl.querySelector(\"#sc-retry-btn\") as HTMLButtonElement | null;\r\n if (retryBtn) {\r\n retryBtn.addEventListener(\"click\", () => {\r\n onRetry();\r\n resolve();\r\n });\r\n } else {\r\n // fallback \u2014 auto-resolve after 5s\r\n setTimeout(resolve, 5000);\r\n }\r\n });\r\n }\r\n\r\n getVideoElement(): HTMLVideoElement | null {\r\n return this.videoEl;\r\n }\r\n\r\n /**\r\n * Mount a document scanning step before the liveness challenge.\r\n * Reuses the already-open camera stream \u2014 no second permission prompt.\r\n * Resolves with the captured document Blob.\r\n */\r\n mountDocumentCapture(container: HTMLElement, stream: MediaStream): Promise<Blob> {\r\n return new Promise((resolve, reject) => {\r\n injectLivenessKeyframes();\r\n\r\n const docRoot = document.createElement(\"div\");\r\n docRoot.style.cssText = `\r\n position:relative;width:100%;max-width:420px;margin:0 auto;\r\n background:#0a0a0a;border-radius:16px;overflow:hidden;\r\n font-family:system-ui,-apple-system,sans-serif;\r\n box-shadow:0 8px 32px rgba(0,0,0,0.4);\r\n `;\r\n this.docCaptureRoot = docRoot;\r\n\r\n const docVideo = document.createElement(\"video\");\r\n docVideo.autoplay = true;\r\n docVideo.playsInline = true;\r\n docVideo.muted = true;\r\n docVideo.style.cssText = \"width:100%;display:block;aspect-ratio:4/3;object-fit:cover;\";\r\n docVideo.srcObject = stream;\r\n\r\n // Rectangle guide with blue corner accents\r\n const guideOverlay = document.createElement(\"div\");\r\n guideOverlay.style.cssText = \"position:absolute;inset:0;pointer-events:none;display:flex;align-items:center;justify-content:center;\";\r\n guideOverlay.innerHTML = `\r\n <div style=\"width:83%;height:53%;border:2px dashed rgba(255,255,255,0.55);border-radius:10px;box-shadow:0 0 0 2000px rgba(0,0,0,0.45);position:relative;\">\r\n <div style=\"position:absolute;top:-2px;left:-2px;width:18px;height:18px;border-top:3px solid #3b82f6;border-left:3px solid #3b82f6;border-radius:4px 0 0 0;\"></div>\r\n <div style=\"position:absolute;top:-2px;right:-2px;width:18px;height:18px;border-top:3px solid #3b82f6;border-right:3px solid #3b82f6;border-radius:0 4px 0 0;\"></div>\r\n <div style=\"position:absolute;bottom:-2px;left:-2px;width:18px;height:18px;border-bottom:3px solid #3b82f6;border-left:3px solid #3b82f6;border-radius:0 0 0 4px;\"></div>\r\n <div style=\"position:absolute;bottom:-2px;right:-2px;width:18px;height:18px;border-bottom:3px solid #3b82f6;border-right:3px solid #3b82f6;border-radius:0 0 4px 0;\"></div>\r\n </div>\r\n `;\r\n\r\n const header = document.createElement(\"div\");\r\n header.style.cssText = \"position:absolute;top:0;left:0;right:0;background:linear-gradient(180deg,rgba(0,0,0,0.88) 0%,transparent 100%);padding:18px 16px 40px;text-align:center;\";\r\n header.innerHTML = `\r\n <div style=\"color:#fff;font-size:16px;font-weight:700;margin-bottom:6px;\">Scan Your ID Document</div>\r\n <div style=\"color:rgba(255,255,255,0.6);font-size:12px;line-height:1.6;\">\r\n Fit your document inside the frame.<br>Make sure all text and corners are visible.\r\n </div>\r\n `;\r\n\r\n const bottomPanel = document.createElement(\"div\");\r\n bottomPanel.style.cssText = \"position:absolute;bottom:0;left:0;right:0;background:linear-gradient(0deg,rgba(0,0,0,0.92) 0%,rgba(0,0,0,0.6) 70%,transparent 100%);padding:16px 16px;\";\r\n bottomPanel.innerHTML = `\r\n <div style=\"font-size:11px;color:rgba(255,255,255,0.4);text-align:center;margin-bottom:12px;\">\r\n \uD83D\uDCA1 Good lighting &nbsp;\u00B7&nbsp; No glare &nbsp;\u00B7&nbsp; All 4 corners visible\r\n </div>\r\n <button id=\"sc-capture-doc-btn\" style=\"width:100%;padding:12px;border-radius:12px;background:#3b82f6;color:#fff;border:none;cursor:pointer;font-size:15px;font-weight:700;margin-bottom:8px;\">\r\n Capture Document\r\n </button>\r\n <label style=\"width:100%;display:flex;align-items:center;justify-content:center;gap:6px;padding:9px;border-radius:12px;border:1.5px solid rgba(255,255,255,0.18);cursor:pointer;color:rgba(255,255,255,0.6);font-size:13px;font-weight:500;\">\r\n <span>\uD83D\uDCC1</span><span>Upload from gallery instead</span>\r\n <input id=\"sc-upload-doc-input\" type=\"file\" accept=\"image/*\" style=\"display:none;\" />\r\n </label>\r\n `;\r\n\r\n docRoot.appendChild(docVideo);\r\n docRoot.appendChild(guideOverlay);\r\n docRoot.appendChild(header);\r\n docRoot.appendChild(bottomPanel);\r\n container.appendChild(docRoot);\r\n\r\n docVideo.play().catch(() => {});\r\n\r\n const cleanup = () => {\r\n if (docRoot.parentElement) docRoot.parentElement.removeChild(docRoot);\r\n this.docCaptureRoot = null;\r\n };\r\n\r\n const captureBtn = bottomPanel.querySelector(\"#sc-capture-doc-btn\") as HTMLButtonElement;\r\n if (captureBtn) {\r\n captureBtn.addEventListener(\"click\", () => {\r\n try {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = docVideo.videoWidth || 1280;\r\n canvas.height = docVideo.videoHeight || 720;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) { reject(new Error(\"Canvas context unavailable\")); return; }\r\n ctx.drawImage(docVideo, 0, 0);\r\n canvas.toBlob((blob) => {\r\n if (blob) { cleanup(); resolve(blob); }\r\n else { reject(new Error(\"Failed to capture document image\")); }\r\n }, \"image/jpeg\", 0.92);\r\n } catch (err) { reject(err); }\r\n });\r\n }\r\n\r\n const uploadInput = bottomPanel.querySelector(\"#sc-upload-doc-input\") as HTMLInputElement;\r\n if (uploadInput) {\r\n uploadInput.addEventListener(\"change\", () => {\r\n const file = uploadInput.files?.[0];\r\n if (file) { cleanup(); resolve(file); }\r\n });\r\n }\r\n });\r\n }\r\n\r\n unmount(): void {\r\n this.stopTimer();\r\n if (this.docCaptureRoot && this.docCaptureRoot.parentElement) {\r\n this.docCaptureRoot.parentElement.removeChild(this.docCaptureRoot);\r\n this.docCaptureRoot = null;\r\n }\r\n if (this.root && this.root.parentElement) {\r\n this.root.parentElement.removeChild(this.root);\r\n }\r\n this.root = null;\r\n this.videoEl = null;\r\n this.instructionEl = null;\r\n this.stepsEl = null;\r\n this.progressBarEl = null;\r\n this.confidenceRingEl = null;\r\n this.timerEl = null;\r\n this.overlayEl = null;\r\n this.actionCueEl = null;\r\n }\r\n\r\n private startTimer(seconds: number): void {\r\n let remaining = seconds;\r\n\r\n const update = () => {\r\n if (!this.timerEl) return;\r\n const m = Math.floor(remaining / 60);\r\n const s = remaining % 60;\r\n const display = m > 0 ? `${m}:${String(s).padStart(2, \"0\")}` : `${s}s`;\r\n this.timerEl.textContent = `${display} remaining`;\r\n\r\n if (remaining <= 5) {\r\n this.timerEl.style.color = \"#ef4444\";\r\n }\r\n };\r\n\r\n update();\r\n this.timerInterval = setInterval(() => {\r\n remaining--;\r\n update();\r\n if (remaining <= 0 && this.timerInterval) {\r\n clearInterval(this.timerInterval);\r\n }\r\n }, 1000);\r\n }\r\n\r\n private describeAction(action: string): string {\r\n const labels: Record<string, string> = {\r\n BLINK: \"Blink your eyes\",\r\n TURN_LEFT: \"Turn your head right\", // camera-left = user's right (mirror)\r\n TURN_RIGHT: \"Turn your head left\", // camera-right = user's left (mirror)\r\n TURN_HEAD: \"Turn your head side to side\",\r\n OPEN_MOUTH: \"Open your mouth wide\",\r\n };\r\n return labels[action] || action.replace(/_/g, \" \").toLowerCase();\r\n }\r\n}\r\n", "import { HttpClient } from \"../../client/HttpClient\";\r\nimport {\r\n ChallengeAction,\r\n LivenessCreateRequest,\r\n LivenessCreateResponse,\r\n LivenessSubmitResponse,\r\n} from \"../../types/liveness\";\r\nimport { collectDeviceMetadata } from \"../../utils/device\";\r\nimport { CameraManager } from \"../../camera/CameraManager\";\r\nimport { VideoRecorder } from \"../../camera/VideoRecorder\";\r\nimport { FaceDetectorEngine } from \"../../camera/FaceDetector\";\r\nimport { ActionDetector } from \"../../camera/ActionDetector\";\r\nimport { LivenessUI } from \"./LivenessUI\";\r\n\r\n/**\r\n * Liveness module \u2014 3-step flow aligned with Adhere backend.\r\n *\r\n * Flow:\r\n * Step 1: liveness.create() \u2192 POST /v1/sdk/liveness/create/ (multipart)\r\n * Step 2: [camera runs, user performs challenge actions]\r\n * Step 3: liveness.submit() \u2192 POST /v1/sdk/liveness/submit/ (multipart)\r\n *\r\n * After submit, the backend returns status: \"processing\".\r\n * Final results are delivered via webhook (liveness.completed event).\r\n */\r\nexport class LivenessModule {\r\n constructor(private http: HttpClient) { }\r\n\r\n /**\r\n * Step 1: Create a liveness challenge entry.\r\n *\r\n * POST /v1/sdk/liveness/create/\r\n * Auth: x-access-token: <sessionToken>\r\n * Content-Type: multipart/form-data\r\n */\r\n async create(params: LivenessCreateRequest): Promise<LivenessCreateResponse> {\r\n const formData = new FormData();\r\n formData.append(\"identifier\", params.identifier);\r\n formData.append(\"identifier_type\", params.identifier_type);\r\n formData.append(\"country\", params.country);\r\n formData.append(\r\n \"challenge_actions\",\r\n JSON.stringify(params.challenge_actions)\r\n );\r\n if (params.autoshot_file) {\r\n formData.append(\"autoshot\", params.autoshot_file, \"autoshot.jpg\");\r\n }\r\n \r\n // Handle document upload - support both legacy and new front/back fields\r\n if (params.document) {\r\n formData.append(\"document\", params.document, \"document.jpg\");\r\n if (params.document_back) {\r\n formData.append(\"document_back\", params.document_back, \"document_back.jpg\");\r\n }\r\n } else if (params.document_front) {\r\n // Legacy support - map to document for backward compatibility\r\n formData.append(\"document\", params.document_front, \"document_front.jpg\");\r\n if (params.document_back) {\r\n formData.append(\"document_back\", params.document_back, \"document_back.jpg\");\r\n }\r\n } else if (params.id_file) {\r\n // Legacy support - map to document for backward compatibility\r\n formData.append(\"document\", params.id_file, \"id_document.jpg\");\r\n }\r\n \r\n if (params.identity_check) {\r\n formData.append(\"identity_check\", String(params.identity_check));\r\n }\r\n if (params.snapshot_file) {\r\n formData.append(\"snapshot\", params.snapshot_file, \"snapshot.jpg\");\r\n }\r\n if (params.device_type) {\r\n formData.append(\"device_type\", params.device_type);\r\n }\r\n if (params.os_name) {\r\n formData.append(\"os_name\", params.os_name);\r\n }\r\n if (params.browser_timezone) {\r\n formData.append(\"browser_timezone\", params.browser_timezone);\r\n }\r\n if (params.fingerprint_id) {\r\n formData.append(\"fingerprint_id\", params.fingerprint_id);\r\n }\r\n\r\n return this.http.uploadWithSession<LivenessCreateResponse>(\r\n \"/v1/sdk/liveness/create/\",\r\n formData\r\n );\r\n }\r\n\r\n /**\r\n * Step 3: Submit liveness video recording.\r\n *\r\n * POST /v1/sdk/liveness/submit/\r\n * Auth: x-access-token: <sessionToken>\r\n * Content-Type: multipart/form-data\r\n *\r\n * Note: After submission, the session is revoked (single-use).\r\n * The backend returns status: \"processing\" \u2014 results come via webhook.\r\n */\r\n async submit(\r\n entryId: number,\r\n videoBlob: Blob,\r\n snapshotBlob: Blob,\r\n autoshotBlob?: Blob,\r\n videoDurationSeconds?: number,\r\n videoSizeBytes?: number\r\n ): Promise<LivenessSubmitResponse> {\r\n const formData = new FormData();\r\n formData.append(\"entry\", String(entryId));\r\n formData.append(\"video\", videoBlob, \"liveness.webm\");\r\n formData.append(\"snapshot\", snapshotBlob, \"snapshot.jpg\");\r\n if (autoshotBlob) {\r\n formData.append(\"autoshot\", autoshotBlob, \"autoshot.jpg\");\r\n }\r\n if (videoDurationSeconds !== undefined) {\r\n formData.append(\"video_duration_seconds\", String(videoDurationSeconds));\r\n }\r\n if (videoSizeBytes !== undefined) {\r\n formData.append(\"video_size_bytes\", String(videoSizeBytes));\r\n }\r\n\r\n return this.http.uploadWithSession<LivenessSubmitResponse>(\r\n \"/v1/sdk/liveness/submit/\",\r\n formData\r\n );\r\n }\r\n\r\n /**\r\n * Poll the public SDK status endpoint for the final verification result.\r\n * Safe to call after the session has been revoked (no auth required).\r\n *\r\n * GET /v1/liveness/<entryId>/sdk-result/\r\n */\r\n async pollResult(entryId: number): Promise<{\r\n id: number;\r\n status: string;\r\n failure_reason: string | null;\r\n completed_at: string | null;\r\n }> {\r\n return (this.http as any).publicGet(`/v1/liveness/${entryId}/sdk-result/`);\r\n }\r\n\r\n /**\r\n * Full liveness check \u2014 orchestrates the entire flow:\r\n *\r\n * 1. Take autoshot selfie from camera\r\n * 2. Create liveness entry on backend (with challenge actions + selfie + optional doc)\r\n * 3. Run action detection loop (camera + MediaPipe)\r\n * 4. Record video and submit to backend\r\n * 5. Return submit response (status: \"processing\")\r\n *\r\n * @param container - DOM element to mount the liveness UI into\r\n * @param params - identifier info and optional document image\r\n * @param actions - override challenge actions (default: BLINK, TURN_LEFT, OPEN_MOUTH)\r\n */\r\n async startCheck(\r\n container: HTMLElement,\r\n params: {\r\n identifier: string;\r\n identifier_type: string;\r\n country: string;\r\n id_file?: File | Blob; // Legacy support\r\n document?: File | Blob; // Front document field (matches backend)\r\n document_front?: File | Blob; // Legacy support for backward compatibility\r\n document_back?: File | Blob; // Back document field (optional)\r\n identity_check?: number;\r\n verification_type?: \"data_verification\" | \"document_verification\" | \"liveness_only\";\r\n },\r\n actions?: ChallengeAction[],\r\n existingEntryId?: number\r\n ): Promise<LivenessSubmitResponse> {\r\n const camera = new CameraManager();\r\n const recorder = new VideoRecorder();\r\n const faceEngine = new FaceDetectorEngine();\r\n const ui = new LivenessUI();\r\n\r\n // Tracks whether cleanup has already been called (so the finally block\r\n // doesn't double-destroy when retry takes over).\r\n let cleanedUp = false;\r\n const cleanup = () => {\r\n if (cleanedUp) return;\r\n cleanedUp = true;\r\n faceEngine.destroy();\r\n camera.stop();\r\n ui.unmount();\r\n };\r\n\r\n try {\r\n // 1. Open camera (with permission error handling)\r\n let stream: MediaStream;\r\n try {\r\n stream = await camera.open();\r\n } catch (camErr: any) {\r\n if (camErr.name === \"NotAllowedError\" || camErr.name === \"PermissionDeniedError\") {\r\n throw new Error(\"Camera access denied. Please allow camera permission in your browser settings and try again.\");\r\n }\r\n if (camErr.name === \"NotFoundError\" || camErr.name === \"DevicesNotFoundError\") {\r\n throw new Error(\"No camera found. Please connect a camera and try again.\");\r\n }\r\n throw new Error(`Camera error: ${camErr.message || \"Unable to access camera\"}`);\r\n }\r\n\r\n // 2. Document capture step \u2014 document_verification only, when no id_file pre-supplied\r\n let capturedDocBlob: Blob | undefined = params.id_file as Blob | undefined;\r\n if (!capturedDocBlob && params.verification_type === \"document_verification\") {\r\n capturedDocBlob = await ui.mountDocumentCapture(container, stream);\r\n }\r\n\r\n // 3. Create a temporary video element to capture autoshot\r\n const tempVideo = document.createElement(\"video\");\r\n tempVideo.srcObject = stream;\r\n tempVideo.muted = true;\r\n tempVideo.playsInline = true;\r\n await tempVideo.play();\r\n\r\n // Wait for face to be detected before capturing autoshot\r\n ui.mount(container, { actions: [], time_limit_seconds: 0, instruction: \"Centre your face in the oval\" });\r\n const uiVideo = ui.getVideoElement();\r\n if (uiVideo) {\r\n uiVideo.srcObject = stream;\r\n await uiVideo.play();\r\n } else {\r\n tempVideo.style.cssText = \"width:100%;border-radius:12px;transform:scaleX(-1);\";\r\n container.appendChild(tempVideo);\r\n }\r\n\r\n await faceEngine.init();\r\n ui.updateInstruction(\"Centre your face in the oval\");\r\n\r\n // Wait until face is stably centred (5 consecutive detected frames, max 12 s)\r\n const videoForDetection = uiVideo || tempVideo;\r\n await new Promise<void>((resolve) => {\r\n let attempts = 0;\r\n let stableFrames = 0;\r\n const STABLE_REQUIRED = 5;\r\n const maxAttempts = 120; // 12 seconds at 100ms intervals\r\n const checkFace = () => {\r\n attempts++;\r\n if (videoForDetection.readyState >= 2) {\r\n const detection = faceEngine.detect(videoForDetection, performance.now());\r\n if (detection.faceDetected) {\r\n stableFrames++;\r\n if (stableFrames >= STABLE_REQUIRED) {\r\n resolve();\r\n return;\r\n }\r\n } else {\r\n stableFrames = 0; // reset on any lost-face frame\r\n ui.updateInstruction(\"Move your face into the oval\");\r\n }\r\n }\r\n if (attempts >= maxAttempts) {\r\n resolve(); // proceed anyway after timeout\r\n return;\r\n }\r\n setTimeout(checkFace, 100);\r\n };\r\n checkFace();\r\n });\r\n\r\n ui.updateInstruction(\"Hold still \u2014 capturing your selfie...\");\r\n await new Promise((r) => setTimeout(r, 700)); // wait for camera auto-focus\r\n\r\n // 3. Capture autoshot (selfie) \u2014 face stable, camera focused\r\n const autoshotBlob = await this.captureFrame(videoForDetection);\r\n tempVideo.pause();\r\n\r\n // Validate autoshot blob is not empty\r\n if (!autoshotBlob || autoshotBlob.size === 0) {\r\n throw new Error(\"Failed to capture autoshot selfie. Please ensure camera is working.\");\r\n }\r\n\r\n // 4. Create liveness entry on backend (skip if retrying with existing entry)\r\n const challengeActions = actions || [\"BLINK\", \"TURN_LEFT\", \"OPEN_MOUTH\"];\r\n let entry: LivenessCreateResponse;\r\n\r\n if (existingEntryId) {\r\n // Reuse existing entry on retry (D1: prevent duplicate wallet charges)\r\n entry = { id: existingEntryId, challenge_actions: challengeActions, status: \"pending\", client_id: \"\", expires_at: null };\r\n } else {\r\n const deviceMeta = collectDeviceMetadata();\r\n entry = await this.create({\r\n identifier: params.identifier,\r\n identifier_type: params.identifier_type,\r\n country: params.country,\r\n challenge_actions: challengeActions,\r\n autoshot_file: autoshotBlob,\r\n document: params.document || params.document_front || params.id_file || capturedDocBlob,\r\n document_back: params.document_back,\r\n identity_check: params.identity_check,\r\n device_type: deviceMeta.device_type,\r\n os_name: deviceMeta.os_name,\r\n browser_timezone: deviceMeta.browser_timezone,\r\n fingerprint_id: deviceMeta.fingerprint_id,\r\n });\r\n }\r\n\r\n // 5. Mount UI with challenge actions from backend\r\n const uiChallenge = {\r\n actions: entry.challenge_actions,\r\n time_limit_seconds: 45,\r\n instruction: \"Complete each action below to verify it's you\",\r\n // Use backend-provided instructions if available (mirror-corrected),\r\n // otherwise fall back to the frontend labels.\r\n instructions: (entry as any).challenge_instructions,\r\n };\r\n\r\n // Re-mount UI with challenge actions (face engine already initialized)\r\n ui.unmount();\r\n const videoEl = ui.mount(container, uiChallenge);\r\n videoEl.srcObject = stream;\r\n await videoEl.play();\r\n\r\n // 7. Start recording\r\n recorder.start(stream);\r\n ui.updateInstruction(uiChallenge.instruction);\r\n\r\n // 8. Run detection loop (sequential \u2014 one action at a time)\r\n const actionDetector = new ActionDetector(entry.challenge_actions);\r\n let lastAction: string | null = null;\r\n\r\n const detectionResult = await new Promise<\"completed\" | \"timeout\">(\r\n (resolve) => {\r\n let animFrameId: number;\r\n\r\n const timeout = setTimeout(() => {\r\n cancelAnimationFrame(animFrameId);\r\n resolve(\"timeout\");\r\n }, uiChallenge.time_limit_seconds * 1000);\r\n\r\n const detectLoop = () => {\r\n if (videoEl.readyState >= 2) {\r\n const detection = faceEngine.detect(\r\n videoEl,\r\n performance.now()\r\n );\r\n\r\n const states = actionDetector.check(detection);\r\n ui.updateActions(states);\r\n\r\n const current = actionDetector.getCurrentAction();\r\n\r\n if (!detection.faceDetected) {\r\n ui.updateInstruction(\"Move your face into the oval\");\r\n } else if (current) {\r\n if (current !== lastAction) {\r\n lastAction = current;\r\n // Use backend-provided instruction if available\r\n const label = (uiChallenge as any).instructions?.[current]\r\n || this.describeAction(current);\r\n ui.updateInstruction(label);\r\n }\r\n } else {\r\n ui.updateInstruction(\"All actions completed! \u2713\");\r\n }\r\n\r\n if (actionDetector.allCompleted()) {\r\n clearTimeout(timeout);\r\n cancelAnimationFrame(animFrameId);\r\n resolve(\"completed\");\r\n return;\r\n }\r\n }\r\n\r\n animFrameId = requestAnimationFrame(detectLoop);\r\n };\r\n\r\n detectLoop();\r\n }\r\n );\r\n\r\n // \u2500\u2500 On timeout: show retry screen, clean up, restart \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n if (detectionResult === \"timeout\") {\r\n // IMPORTANT: mark cleanedUp=true BEFORE returning the new Promise so\r\n // the outer `finally` block does NOT call cleanup() immediately \u2014\r\n // which would destroy the UI before the user sees the timeout screen.\r\n cleanedUp = true;\r\n\r\n recorder.stop().catch(() => { }); // discard partial recording\r\n\r\n return new Promise<LivenessSubmitResponse>((resolveRetry, rejectRetry) => {\r\n ui.showTimeout(() => {\r\n // User clicked \"Try Again\" \u2014 now it is safe to destroy this attempt\r\n faceEngine.destroy();\r\n camera.stop();\r\n ui.unmount();\r\n\r\n // Restart liveness with same entry ID to prevent duplicate charges (D1)\r\n // Pass capturedDocBlob forward so document scan step is not repeated\r\n this.startCheck(container, { ...params, id_file: capturedDocBlob }, actions, entry.id)\r\n .then(resolveRetry)\r\n .catch(rejectRetry);\r\n });\r\n // showTimeout waits for the user to click \u2014 the promise stays pending.\r\n });\r\n }\r\n\r\n // \u2500\u2500 On completion: stop recording, submit, show success \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n // Wait for user to return to neutral face after last action before\r\n // capturing snapshot \u2014 prevents mid-action pose from skewing DeepFace\r\n // embeddings (open mouth / head turned = high cosine distance).\r\n ui.updateInstruction(\"Almost done \u2014 hold still...\");\r\n await new Promise((r) => setTimeout(r, 800));\r\n\r\n // Capture a snapshot frame while the video is still playing\r\n const snapshotBlob = await this.captureFrame(videoEl);\r\n\r\n // 9. Stop recording\r\n const { blob: videoBlob, durationSeconds } = await recorder.stop();\r\n\r\n // 10. Submit to backend \u2014 always include autoshot so document-flow\r\n // entries (which bypassed create() via existingEntryId) still get it.\r\n const submitResult = await this.submit(\r\n entry.id,\r\n videoBlob,\r\n snapshotBlob,\r\n autoshotBlob,\r\n durationSeconds,\r\n videoBlob.size\r\n );\r\n\r\n // 11. Show success overlay briefly before the flow advances\r\n await ui.showResult(\r\n submitResult.status === \"failed\" ? \"failed\" : \"processing\",\r\n submitResult.id\r\n );\r\n\r\n return submitResult;\r\n\r\n } finally {\r\n cleanup();\r\n }\r\n }\r\n\r\n /**\r\n * Capture a single sharp frame from a video element as a JPEG Blob.\r\n * Retries up to maxAttempts times (300 ms apart) if the Laplacian blur\r\n * score is below threshold, then falls back to the best frame captured.\r\n */\r\n private async captureFrame(\r\n video: HTMLVideoElement,\r\n maxAttempts = 4\r\n ): Promise<Blob> {\r\n const MIN_BLUR_SCORE = 80; // Laplacian variance \u2014 above this = acceptably sharp\r\n const RETRY_DELAY_MS = 300;\r\n let bestBlob: Blob | null = null;\r\n let bestScore = -1;\r\n\r\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = video.videoWidth || 640;\r\n canvas.height = video.videoHeight || 480;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) throw new Error(\"Failed to get canvas context\");\r\n ctx.drawImage(video, 0, 0);\r\n\r\n const score = this._computeBlurScore(canvas);\r\n\r\n const blob = await new Promise<Blob | null>((res) =>\r\n canvas.toBlob((b) => res(b), \"image/jpeg\", 0.92)\r\n );\r\n\r\n if (blob && score > bestScore) {\r\n bestBlob = blob;\r\n bestScore = score;\r\n }\r\n\r\n if (score >= MIN_BLUR_SCORE) break; // sharp enough \u2014 stop early\r\n\r\n if (attempt < maxAttempts - 1) {\r\n await new Promise((r) => setTimeout(r, RETRY_DELAY_MS));\r\n }\r\n }\r\n\r\n if (bestBlob) return bestBlob;\r\n throw new Error(\"Failed to capture frame\");\r\n }\r\n\r\n /**\r\n * Laplacian variance blur metric on a centre-cropped region (320\u00D7240 max).\r\n * Higher score = sharper image. Score < 80 is considered blurry.\r\n */\r\n private _computeBlurScore(canvas: HTMLCanvasElement): number {\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return 0;\r\n\r\n // Sample a 320\u00D7240 centre crop for performance\r\n const sw = Math.min(canvas.width, 320);\r\n const sh = Math.min(canvas.height, 240);\r\n const sx = Math.floor((canvas.width - sw) / 2);\r\n const sy = Math.floor((canvas.height - sh) / 2);\r\n\r\n const { data, width, height } = ctx.getImageData(sx, sy, sw, sh);\r\n\r\n // Convert to greyscale\r\n const gray = new Float32Array(width * height);\r\n for (let i = 0; i < width * height; i++) {\r\n gray[i] =\r\n 0.299 * data[i * 4] +\r\n 0.587 * data[i * 4 + 1] +\r\n 0.114 * data[i * 4 + 2];\r\n }\r\n\r\n // Laplacian convolution [0,1,0 / 1,-4,1 / 0,1,0] \u2014 sum of squared responses\r\n let sum = 0;\r\n let n = 0;\r\n for (let y = 1; y < height - 1; y++) {\r\n for (let x = 1; x < width - 1; x++) {\r\n const l =\r\n gray[(y - 1) * width + x] +\r\n gray[(y + 1) * width + x] +\r\n gray[y * width + (x - 1)] +\r\n gray[y * width + (x + 1)] -\r\n 4 * gray[y * width + x];\r\n sum += l * l;\r\n n++;\r\n }\r\n }\r\n return n > 0 ? sum / n : 0;\r\n }\r\n\r\n private describeAction(action: string): string {\r\n const descriptions: Record<string, string> = {\r\n BLINK: \"Blink your eyes\",\r\n TURN_LEFT: \"Turn your head right\", // camera-left = user's right (mirror)\r\n TURN_RIGHT: \"Turn your head left\", // camera-right = user's left (mirror)\r\n TURN_HEAD: \"Turn your head side to side\",\r\n OPEN_MOUTH: \"Open your mouth wide\",\r\n };\r\n return descriptions[action] || action.replace(/_/g, \" \").toLowerCase();\r\n }\r\n}\r\n", "import { SDKConfig } from \"./Config\";\r\nimport { HttpClient } from \"./HttpClient\";\r\nimport { OnboardingModule } from \"../modules/onboarding/onboarding\";\r\nimport { LivenessModule } from \"../modules/liveness/liveness\";\r\nimport {\r\n SessionResponse,\r\n SDKInitConfig,\r\n} from \"../types/onboarding\";\r\n\r\n/**\r\n * SmartComply SDK \u2014 main entry point.\r\n *\r\n * Usage:\r\n * const sdk = new SmartComply({ apiKey: \"pk_...\", clientId: \"uuid-...\", environment: \"sandbox\" });\r\n * const session = await sdk.createSession();\r\n * const config = await sdk.initializeConfig();\r\n * // ... use sdk.onboarding and sdk.liveness modules\r\n */\r\nexport class SmartComply {\r\n private http: HttpClient;\r\n private clientId: string;\r\n private _sessionToken: string | null = null;\r\n private _sessionExpiresAt: string | null = null;\r\n private _sdkConfig: SDKInitConfig | null = null;\r\n\r\n public onboarding: OnboardingModule;\r\n public liveness: LivenessModule;\r\n\r\n constructor(config: SDKConfig) {\r\n if (!config.apiKey) {\r\n throw new Error(\"SmartComply: apiKey is required\");\r\n }\r\n if (!config.clientId) {\r\n throw new Error(\"SmartComply: clientId is required (UUID from your SDK config)\");\r\n }\r\n\r\n this.clientId = config.clientId;\r\n this.http = new HttpClient(config);\r\n\r\n this.onboarding = new OnboardingModule(this.http);\r\n this.liveness = new LivenessModule(this.http);\r\n }\r\n\r\n /** Current session token (null if not created yet) */\r\n get sessionToken(): string | null {\r\n return this._sessionToken;\r\n }\r\n\r\n /** Session expiration ISO timestamp */\r\n get sessionExpiresAt(): string | null {\r\n return this._sessionExpiresAt;\r\n }\r\n\r\n /** SDK config fetched from backend (null until initializeConfig() is called) */\r\n get sdkConfig(): SDKInitConfig | null {\r\n return this._sdkConfig;\r\n }\r\n\r\n /**\r\n * Create a new SDK session.\r\n *\r\n * POST /v1/session/create/\r\n * Auth: Authorization: Bearer <apiKey>\r\n * Body: { client_id: \"<uuid>\" }\r\n *\r\n * Returns: { token: \"...\", expires_at: \"...\" }\r\n */\r\n async createSession(): Promise<SessionResponse> {\r\n const response = await this.http.request<SessionResponse>(\r\n \"POST\",\r\n \"/v1/session/create/\",\r\n { client_id: this.clientId }\r\n );\r\n\r\n this._sessionToken = response.token;\r\n this._sessionExpiresAt = response.expires_at;\r\n\r\n // Set the session token on the HTTP client for subsequent requests\r\n this.http.setSessionToken(response.token);\r\n\r\n return response;\r\n }\r\n\r\n /**\r\n * Fetch SDK configuration from the backend.\r\n * Must be called after createSession().\r\n *\r\n * GET /v1/initialize/\r\n * Auth: x-access-token: <sessionToken>\r\n *\r\n * Returns: { brand_name, theme, verification_type, channels, redirect_url, ... }\r\n */\r\n async initializeConfig(): Promise<SDKInitConfig> {\r\n const config = await this.http.sessionRequest<SDKInitConfig>(\r\n \"GET\",\r\n \"/v1/initialize/\"\r\n );\r\n\r\n this._sdkConfig = config;\r\n return config;\r\n }\r\n}\r\n", "/**\r\n * Theme system for the SmartComply Flow widget.\r\n * Maps to backend's SDKConfig.THEME_CHOICES:\r\n * default, midnight_blue, sunset_gold, forest_emerald\r\n */\r\n\r\nexport interface ThemeColors {\r\n primary: string;\r\n primaryHover: string;\r\n primaryGlow: string;\r\n bg: string;\r\n cardBg: string;\r\n inputBg: string;\r\n text: string;\r\n textSecondary: string;\r\n textMuted: string;\r\n border: string;\r\n borderFocus: string;\r\n success: string;\r\n successBg: string;\r\n error: string;\r\n errorBg: string;\r\n warning: string;\r\n overlay: string;\r\n shimmer: string;\r\n shadow: string;\r\n isDark: boolean;\r\n}\r\n\r\nexport const THEMES: Record<string, ThemeColors> = {\r\n default: {\r\n primary: \"#3b82f6\",\r\n primaryHover: \"#2563eb\",\r\n primaryGlow: \"rgba(59, 130, 246, 0.25)\",\r\n bg: \"#ffffff\",\r\n cardBg: \"#f8fafc\",\r\n inputBg: \"#f1f5f9\",\r\n text: \"#0f172a\",\r\n textSecondary: \"#475569\",\r\n textMuted: \"#94a3b8\",\r\n border: \"#e2e8f0\",\r\n borderFocus: \"#3b82f6\",\r\n success: \"#22c55e\",\r\n successBg: \"rgba(34, 197, 94, 0.1)\",\r\n error: \"#ef4444\",\r\n errorBg: \"rgba(239, 68, 68, 0.1)\",\r\n warning: \"#f59e0b\",\r\n overlay: \"rgba(15, 23, 42, 0.6)\",\r\n shimmer: \"rgba(59, 130, 246, 0.08)\",\r\n shadow: \"0 20px 60px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(0, 0, 0, 0.05)\",\r\n isDark: false,\r\n },\r\n\r\n midnight_blue: {\r\n primary: \"#60a5fa\",\r\n primaryHover: \"#93bbfd\",\r\n primaryGlow: \"rgba(96, 165, 250, 0.2)\",\r\n bg: \"#0b1120\",\r\n cardBg: \"#111d33\",\r\n inputBg: \"#162032\",\r\n text: \"#f1f5f9\",\r\n textSecondary: \"#94a3b8\",\r\n textMuted: \"#64748b\",\r\n border: \"#1e3a5f\",\r\n borderFocus: \"#60a5fa\",\r\n success: \"#4ade80\",\r\n successBg: \"rgba(74, 222, 128, 0.1)\",\r\n error: \"#f87171\",\r\n errorBg: \"rgba(248, 113, 113, 0.1)\",\r\n warning: \"#fbbf24\",\r\n overlay: \"rgba(0, 0, 0, 0.75)\",\r\n shimmer: \"rgba(96, 165, 250, 0.06)\",\r\n shadow: \"0 20px 60px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(96, 165, 250, 0.1)\",\r\n isDark: true,\r\n },\r\n\r\n sunset_gold: {\r\n primary: \"#f59e0b\",\r\n primaryHover: \"#d97706\",\r\n primaryGlow: \"rgba(245, 158, 11, 0.2)\",\r\n bg: \"#fffdf7\",\r\n cardBg: \"#fef9ee\",\r\n inputBg: \"#fef3c7\",\r\n text: \"#1c1917\",\r\n textSecondary: \"#57534e\",\r\n textMuted: \"#a8a29e\",\r\n border: \"#fed7aa\",\r\n borderFocus: \"#f59e0b\",\r\n success: \"#22c55e\",\r\n successBg: \"rgba(34, 197, 94, 0.1)\",\r\n error: \"#ef4444\",\r\n errorBg: \"rgba(239, 68, 68, 0.1)\",\r\n warning: \"#f59e0b\",\r\n overlay: \"rgba(28, 25, 23, 0.6)\",\r\n shimmer: \"rgba(245, 158, 11, 0.08)\",\r\n shadow: \"0 20px 60px rgba(0, 0, 0, 0.12), 0 0 0 1px rgba(245, 158, 11, 0.1)\",\r\n isDark: false,\r\n },\r\n\r\n forest_emerald: {\r\n primary: \"#10b981\",\r\n primaryHover: \"#059669\",\r\n primaryGlow: \"rgba(16, 185, 129, 0.2)\",\r\n bg: \"#f7fdf9\",\r\n cardBg: \"#ecfdf5\",\r\n inputBg: \"#d1fae5\",\r\n text: \"#1a1a2e\",\r\n textSecondary: \"#4b5563\",\r\n textMuted: \"#9ca3af\",\r\n border: \"#a7f3d0\",\r\n borderFocus: \"#10b981\",\r\n success: \"#22c55e\",\r\n successBg: \"rgba(34, 197, 94, 0.1)\",\r\n error: \"#ef4444\",\r\n errorBg: \"rgba(239, 68, 68, 0.1)\",\r\n warning: \"#f59e0b\",\r\n overlay: \"rgba(26, 26, 46, 0.6)\",\r\n shimmer: \"rgba(16, 185, 129, 0.08)\",\r\n shadow: \"0 20px 60px rgba(0, 0, 0, 0.12), 0 0 0 1px rgba(16, 185, 129, 0.1)\",\r\n isDark: false,\r\n },\r\n};\r\n\r\nexport function getTheme(name: string): ThemeColors {\r\n return THEMES[name] || THEMES.default;\r\n}\r\n", "import { ThemeColors } from \"./theme\";\r\n\r\n/**\r\n * Document capture UI \u2014 camera-based or file-upload for ID documents.\r\n *\r\n * Supports:\r\n * - Camera capture (rear camera preferred on mobile)\r\n * - File upload fallback\r\n * - Preview with retake/confirm\r\n * - Front and back document capture for documents requiring both sides\r\n */\r\nexport interface DocumentCaptureResult {\r\n front: Blob;\r\n back?: Blob; // Optional for documents that don't require back side\r\n}\r\n\r\nexport class DocumentCapture {\r\n private root: HTMLDivElement | null = null;\r\n private videoEl: HTMLVideoElement | null = null;\r\n private stream: MediaStream | null = null;\r\n private resolveCapture: ((result: DocumentCaptureResult) => void) | null = null;\r\n private rejectCapture: ((err: Error) => void) | null = null;\r\n private frontBlob: Blob | null = null;\r\n private backBlob: Blob | null = null;\r\n private currentSide: 'front' | 'back' = 'front';\r\n\r\n /**\r\n * Mount the document capture UI and return a promise that resolves\r\n * with the captured document image(s).\r\n */\r\n capture(\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n documentType: string\r\n ): Promise<DocumentCaptureResult> {\r\n return new Promise((resolve, reject) => {\r\n // Validate input parameters\r\n if (!container) {\r\n reject(new Error(\"Container element is required\"));\r\n return;\r\n }\r\n if (!theme) {\r\n reject(new Error(\"Theme configuration is required\"));\r\n return;\r\n }\r\n if (!documentType || typeof documentType !== 'string') {\r\n reject(new Error(\"Document type is required and must be a string\"));\r\n return;\r\n }\r\n \r\n // Check if already capturing\r\n if (this.resolveCapture || this.rejectCapture) {\r\n reject(new Error(\"Document capture is already in progress\"));\r\n return;\r\n }\r\n\r\n this.resolveCapture = resolve;\r\n this.rejectCapture = reject;\r\n this.frontBlob = null;\r\n this.backBlob = null;\r\n this.currentSide = 'front';\r\n this.renderChoiceScreen(container, theme, documentType);\r\n });\r\n }\r\n\r\n destroy(): void {\r\n // Stop any ongoing camera streams\r\n this.stopCamera();\r\n \r\n // Clean up DOM elements\r\n if (this.root && this.root.parentElement) {\r\n this.root.parentElement.removeChild(this.root);\r\n }\r\n this.root = null;\r\n \r\n // Clean up any pending promises\r\n if (this.rejectCapture) {\r\n this.rejectCapture(new Error(\"Document capture was cancelled\"));\r\n this.rejectCapture = null;\r\n }\r\n this.resolveCapture = null;\r\n \r\n // Clean up blob data\r\n this.frontBlob = null;\r\n this.backBlob = null;\r\n this.currentSide = 'front';\r\n }\r\n\r\n private requiresBackSide(documentType: string): boolean {\r\n const type = documentType.toLowerCase();\r\n return type.includes(\"voter\") || \r\n type.includes(\"nin\") || \r\n type.includes(\"driver\") || \r\n type.includes(\"license\") || \r\n type.includes(\"national id\") ||\r\n type.includes(\"national id card\") ||\r\n type.includes(\"ghana\");\r\n }\r\n\r\n private renderChoiceScreen(\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n documentType: string\r\n ): void {\r\n this.root = document.createElement(\"div\");\r\n this.root.style.cssText = \"display:flex;flex-direction:column;align-items:center;gap:24px;padding:24px 20px;max-width:100%;\";\r\n\r\n const docLabel = this.getDocumentLabel(documentType);\r\n const requiresBack = this.requiresBackSide(documentType);\r\n const isCapturingFront = this.currentSide === 'front';\r\n\r\n // Header with enhanced illustration\r\n const header = document.createElement(\"div\");\r\n header.style.cssText = \"display:flex;flex-direction:column;align-items:center;gap:16px;text-align:center;\";\r\n \r\n // Enhanced illustration with gradient background\r\n const iconContainer = document.createElement(\"div\");\r\n iconContainer.style.cssText = `\r\n width:120px;height:120px;border-radius:24px;\r\n display:flex;align-items:center;justify-content:center;\r\n background:linear-gradient(135deg, ${theme.primary}15, ${theme.primary}05);\r\n border:3px solid ${theme.primary}30;\r\n position:relative;overflow:hidden;\r\n box-shadow:0 8px 32px ${theme.primary}20;\r\n `;\r\n \r\n const icon = document.createElement(\"div\");\r\n icon.style.cssText = \"font-size:48px;animation:float 3s ease-in-out infinite;\";\r\n icon.textContent = \"\uD83E\uDEAA\";\r\n iconContainer.appendChild(icon);\r\n \r\n // Add floating animation\r\n if (!document.head.querySelector('style[data-float-animation]')) {\r\n const style = document.createElement('style');\r\n style.setAttribute('data-float-animation', 'true');\r\n style.textContent = `\r\n @keyframes float {\r\n 0%, 100% { transform: translateY(0px); }\r\n 50% { transform: translateY(-10px); }\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n \r\n header.appendChild(iconContainer);\r\n\r\n // Enhanced title and subtitle\r\n const title = document.createElement(\"div\");\r\n title.style.cssText = `color:${theme.text};font-size:20px;font-weight:700;text-align:center;line-height:1.4;`;\r\n let labelText = `Capture your ${docLabel}`;\r\n if (requiresBack) {\r\n labelText += ` (${isCapturingFront ? 'Front Side' : 'Back Side'})`;\r\n }\r\n title.textContent = labelText;\r\n header.appendChild(title);\r\n\r\n const subtitle = document.createElement(\"div\");\r\n subtitle.style.cssText = `color:${theme.textSecondary};font-size:14px;text-align:center;line-height:1.5;max-width:280px;`;\r\n subtitle.textContent = \"Choose how you'd like to provide your document\";\r\n header.appendChild(subtitle);\r\n\r\n this.root.appendChild(header);\r\n\r\n // Enhanced progress indicator for multi-sided documents\r\n if (requiresBack) {\r\n const progress = document.createElement(\"div\");\r\n progress.style.cssText = `\r\n display:flex;flex-direction:column;align-items:center;gap:12px;\r\n padding:16px 20px;background:${theme.primary}08;border-radius:16px;\r\n border:1px solid ${theme.primary}20;width:100%;max-width:320px;\r\n `;\r\n progress.innerHTML = `\r\n <div style=\"display:flex;gap:8px;align-items:center;\">\r\n <div style=\"width:12px;height:12px;border-radius:50%;background:${isCapturingFront ? theme.primary : theme.border};transition:all 0.3s ease;\"></div>\r\n <div style=\"width:32px;height:2px;background:${theme.border};border-radius:1px;\"></div>\r\n <div style=\"width:12px;height:12px;border-radius:50%;background:${!isCapturingFront ? theme.primary : theme.border};transition:all 0.3s ease;\"></div>\r\n </div>\r\n <span style=\"color:${theme.text};font-size:13px;font-weight:600;\">${isCapturingFront ? 'Step 1 of 2' : 'Step 2 of 2'}</span>\r\n `;\r\n this.root.appendChild(progress);\r\n }\r\n\r\n // Enhanced action buttons container\r\n const actionsContainer = document.createElement(\"div\");\r\n actionsContainer.style.cssText = \"display:flex;flex-direction:column;gap:16px;width:100%;max-width:320px;\";\r\n\r\n // Camera button with enhanced design\r\n const cameraBtn = this.createEnhancedButton(\r\n \"\uD83D\uDCF7 Take Photo with Camera\",\r\n theme,\r\n true,\r\n \"Open camera to capture document\"\r\n );\r\n cameraBtn.addEventListener(\"click\", () => {\r\n this.showLoadingState(\"Opening camera...\", theme);\r\n this.root!.innerHTML = \"\";\r\n setTimeout(() => {\r\n this.renderCameraView(this.root!, theme, documentType);\r\n }, 500);\r\n });\r\n actionsContainer.appendChild(cameraBtn);\r\n\r\n // Upload button with enhanced design\r\n const uploadBtn = this.createEnhancedButton(\r\n \"\uD83D\uDCC1 Choose from Gallery\",\r\n theme,\r\n false,\r\n \"Upload document image from device\"\r\n );\r\n uploadBtn.addEventListener(\"click\", () => {\r\n this.handleFileUpload(container, theme);\r\n });\r\n actionsContainer.appendChild(uploadBtn);\r\n\r\n this.root.appendChild(actionsContainer);\r\n\r\n // Enhanced tips section\r\n const tips = document.createElement(\"div\");\r\n tips.style.cssText = `\r\n width:100%;padding:16px 20px;border-radius:16px;\r\n background:${theme.shimmer};border:1px solid ${theme.border};\r\n margin-top:8px;\r\n `;\r\n \r\n const tipsTitle = document.createElement(\"div\");\r\n tipsTitle.style.cssText = `font-weight:700;color:${theme.text};margin-bottom:12px;font-size:14px;display:flex;align-items:center;gap:8px;`;\r\n tipsTitle.innerHTML = `\uD83D\uDCA1 Tips for best results`;\r\n tips.appendChild(tipsTitle);\r\n \r\n const tipsList = document.createElement(\"div\");\r\n tipsList.style.cssText = `display:grid;gap:8px;font-size:13px;color:${theme.textSecondary};line-height:1.6;`;\r\n tipsList.innerHTML = `\r\n <div style=\"display:flex;gap:8px;align-items:flex-start;\">\r\n <span style=\"color:${theme.primary};font-weight:bold;\">\u2713</span>\r\n <span>Lay document flat on a solid surface</span>\r\n </div>\r\n <div style=\"display:flex;gap:8px;align-items:flex-start;\">\r\n <span style=\"color:${theme.primary};font-weight:bold;\">\u2713</span>\r\n <span>Ensure all four corners are visible</span>\r\n </div>\r\n <div style=\"display:flex;gap:8px;align-items:flex-start;\">\r\n <span style=\"color:${theme.primary};font-weight:bold;\">\u2713</span>\r\n <span>Use good lighting, avoid glare</span>\r\n </div>\r\n <div style=\"display:flex;gap:8px;align-items:flex-start;\">\r\n <span style=\"color:${theme.primary};font-weight:bold;\">\u2713</span>\r\n <span>Make sure all text is clearly readable</span>\r\n </div>\r\n `;\r\n tips.appendChild(tipsList);\r\n this.root.appendChild(tips);\r\n\r\n // File input (hidden)\r\n const fileInput = document.createElement(\"input\");\r\n fileInput.type = \"file\";\r\n fileInput.accept = \"image/jpeg,image/png\";\r\n fileInput.style.display = \"none\";\r\n fileInput.id = \"sc-doc-file-input\";\r\n fileInput.addEventListener(\"change\", (e) => {\r\n const file = (e.target as HTMLInputElement).files?.[0];\r\n if (file) {\r\n // Validate file\r\n const validationError = this.validateFile(file);\r\n if (validationError) {\r\n this.showError(validationError);\r\n return;\r\n }\r\n \r\n this.showLoadingState(\"Processing image...\", theme);\r\n this.compressImage(file, 1280, 960, 0.85)\r\n .then((compressed) => this.handleFileUploadComplete(compressed, container, theme, documentType))\r\n .catch(() => this.handleFileUploadComplete(file, container, theme, documentType)); // fallback to original if compress fails\r\n }\r\n });\r\n this.root.appendChild(fileInput);\r\n\r\n container.appendChild(this.root);\r\n }\r\n\r\n private renderCameraView(\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n documentType: string\r\n ): void {\r\n const wrapper = document.createElement(\"div\");\r\n wrapper.style.cssText = \"position:relative;width:100%;border-radius:12px;overflow:hidden;background:#000;\";\r\n\r\n this.videoEl = document.createElement(\"video\");\r\n this.videoEl.autoplay = true;\r\n this.videoEl.playsInline = true;\r\n this.videoEl.muted = true;\r\n this.videoEl.style.cssText = \"width:100%;display:block;aspect-ratio:4/3;object-fit:cover;\";\r\n wrapper.appendChild(this.videoEl);\r\n\r\n // Guide overlay \u2014 rectangular\r\n const guide = document.createElement(\"div\");\r\n guide.style.cssText = `\r\n position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\r\n pointer-events:none;\r\n `;\r\n const rect = document.createElement(\"div\");\r\n rect.style.cssText = `\r\n width:85%;height:60%;border:2px solid rgba(255,255,255,0.6);\r\n border-radius:12px;box-shadow:0 0 0 9999px rgba(0,0,0,0.4);\r\n `;\r\n guide.appendChild(rect);\r\n wrapper.appendChild(guide);\r\n\r\n // Guide label\r\n const guideLbl = document.createElement(\"div\");\r\n guideLbl.style.cssText = `\r\n position:absolute;bottom:60px;left:0;right:0;text-align:center;\r\n color:#fff;font-size:13px;font-weight:600;\r\n text-shadow:0 1px 3px rgba(0,0,0,0.5);\r\n `;\r\n guideLbl.textContent = `Align your ${this.getDocumentLabel(documentType)} within the frame`;\r\n wrapper.appendChild(guideLbl);\r\n\r\n container.appendChild(wrapper);\r\n\r\n // Capture button\r\n const captureBtn = document.createElement(\"button\");\r\n captureBtn.style.cssText = `\r\n display:block;margin:16px auto 0;width:64px;height:64px;\r\n border-radius:50%;border:4px solid ${theme.primary};\r\n background:transparent;cursor:pointer;position:relative;\r\n transition:all 0.2s ease;\r\n `;\r\n const inner = document.createElement(\"div\");\r\n inner.style.cssText = `\r\n width:48px;height:48px;border-radius:50%;background:${theme.primary};\r\n position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);\r\n transition:all 0.15s ease;\r\n `;\r\n captureBtn.appendChild(inner);\r\n captureBtn.addEventListener(\"mousedown\", () => {\r\n inner.style.transform = \"translate(-50%,-50%) scale(0.9)\";\r\n });\r\n captureBtn.addEventListener(\"mouseup\", () => {\r\n inner.style.transform = \"translate(-50%,-50%) scale(1)\";\r\n });\r\n captureBtn.addEventListener(\"click\", () => {\r\n this.captureFrame(container, theme, documentType);\r\n });\r\n container.appendChild(captureBtn);\r\n\r\n // Open camera\r\n this.openCamera();\r\n }\r\n\r\n private async openCamera(): Promise<void> {\r\n // Check browser compatibility\r\n if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {\r\n this.rejectCapture?.(new Error(\"Camera access is not supported in this browser. Please use a modern browser like Chrome, Firefox, or Safari.\"));\r\n return;\r\n }\r\n\r\n const maxRetries = 3;\r\n let retryCount = 0;\r\n\r\n const attemptCameraAccess = async (constraints: MediaStreamConstraints): Promise<MediaStream> => {\r\n try {\r\n return await navigator.mediaDevices.getUserMedia(constraints);\r\n } catch (err: any) {\r\n console.warn(`Camera access attempt ${retryCount + 1} failed:`, err);\r\n \r\n if (retryCount < maxRetries - 1) {\r\n retryCount++;\r\n await new Promise(resolve => setTimeout(resolve, 1000 * retryCount)); // Exponential backoff\r\n return attemptCameraAccess(constraints);\r\n }\r\n throw err;\r\n }\r\n };\r\n\r\n try {\r\n // Try rear camera first\r\n this.stream = await attemptCameraAccess({\r\n video: {\r\n facingMode: { ideal: \"environment\" },\r\n width: { ideal: 1280 },\r\n height: { ideal: 960 },\r\n },\r\n });\r\n } catch (err: any) {\r\n console.warn(\"Rear camera failed, trying any camera:\", err);\r\n \r\n // Fallback to any camera\r\n try {\r\n this.stream = await attemptCameraAccess({\r\n video: { width: { ideal: 1280 } },\r\n });\r\n } catch (fallbackErr: any) {\r\n const errorMessage = this.getCameraErrorMessage(fallbackErr);\r\n this.rejectCapture?.(new Error(errorMessage));\r\n return;\r\n }\r\n }\r\n\r\n if (this.videoEl) {\r\n this.videoEl.srcObject = this.stream;\r\n }\r\n }\r\n\r\n private getCameraErrorMessage(error: any): string {\r\n if (error.name === 'NotAllowedError') {\r\n return \"Camera access denied. Please allow camera permissions and try again.\";\r\n } else if (error.name === 'NotFoundError') {\r\n return \"No camera found. Please ensure your device has a working camera.\";\r\n } else if (error.name === 'NotReadableError') {\r\n return \"Camera is already in use by another application. Please close other apps using the camera and try again.\";\r\n } else if (error.name === 'OverconstrainedError') {\r\n return \"Camera constraints not supported. Trying with different settings...\";\r\n } else {\r\n return \"Camera access failed. Please check your camera permissions and try again.\";\r\n }\r\n }\r\n\r\n private captureFrame(container: HTMLElement, theme: ThemeColors, documentType: string): void {\r\n if (!this.videoEl) return;\r\n\r\n const MAX_W = 1280;\r\n const MAX_H = 960;\r\n const vw = this.videoEl.videoWidth || MAX_W;\r\n const vh = this.videoEl.videoHeight || MAX_H;\r\n const ratio = Math.min(MAX_W / vw, MAX_H / vh, 1);\r\n\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = Math.round(vw * ratio);\r\n canvas.height = Math.round(vh * ratio);\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return;\r\n\r\n ctx.drawImage(this.videoEl, 0, 0, canvas.width, canvas.height);\r\n\r\n canvas.toBlob(\r\n (blob) => {\r\n if (blob) {\r\n this.stopCamera();\r\n this.showPreview(container, theme, blob, documentType);\r\n }\r\n },\r\n \"image/jpeg\",\r\n 0.85\r\n );\r\n }\r\n\r\n private showPreview(\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n imageData: Blob | File,\r\n documentType: string\r\n ): void {\r\n if (this.root) this.root.innerHTML = \"\";\r\n else {\r\n this.root = document.createElement(\"div\");\r\n container.appendChild(this.root);\r\n }\r\n\r\n this.root.style.cssText = \"display:flex;flex-direction:column;align-items:center;gap:16px;\";\r\n\r\n // Preview image\r\n const img = document.createElement(\"img\");\r\n const imageUrl = URL.createObjectURL(imageData);\r\n img.src = imageUrl;\r\n img.style.cssText = `\r\n width:100%;max-height:300px;object-fit:contain;border-radius:12px;\r\n border:2px solid ${theme.border};\r\n `;\r\n this.root.appendChild(img);\r\n\r\n // Store URL for cleanup\r\n (img as any)._blobUrl = imageUrl;\r\n\r\n const label = document.createElement(\"div\");\r\n label.style.cssText = `color:${theme.textSecondary};font-size:13px;text-align:center;font-weight:500;`;\r\n label.textContent = \"Does the photo look clear?\";\r\n this.root.appendChild(label);\r\n\r\n const sublabel = document.createElement(\"div\");\r\n sublabel.style.cssText = `color:${theme.textMuted};font-size:11px;text-align:center;line-height:1.6;`;\r\n sublabel.textContent = \"All text must be readable and all four corners must be visible.\";\r\n this.root.appendChild(sublabel);\r\n\r\n // Buttons\r\n const btnRow = document.createElement(\"div\");\r\n btnRow.style.cssText = \"display:flex;gap:12px;width:100%;\";\r\n\r\n const retakeBtn = this.createButton(\"Retake\", theme, false);\r\n retakeBtn.style.flex = \"1\";\r\n retakeBtn.addEventListener(\"click\", () => {\r\n if ((img as any)._blobUrl) {\r\n URL.revokeObjectURL((img as any)._blobUrl);\r\n }\r\n this.root!.innerHTML = \"\";\r\n this.renderChoiceScreen(container, theme, documentType);\r\n });\r\n\r\n const useBtn = this.createButton(\"Use Photo \u2713\", theme, true);\r\n useBtn.style.flex = \"1\";\r\n useBtn.addEventListener(\"click\", () => {\r\n if ((img as any)._blobUrl) {\r\n URL.revokeObjectURL((img as any)._blobUrl);\r\n }\r\n useBtn.textContent = \"Processing...\";\r\n useBtn.disabled = true;\r\n this.compressImage(imageData, 1280, 960, 0.85)\r\n .then((compressed) => this.handleCaptureComplete(compressed, container, theme, documentType))\r\n .catch(() => this.handleCaptureComplete(imageData, container, theme, documentType)); // fallback to original\r\n });\r\n\r\n btnRow.appendChild(retakeBtn);\r\n btnRow.appendChild(useBtn);\r\n this.root.appendChild(btnRow);\r\n }\r\n\r\n private handleCaptureComplete(\r\n imageData: Blob,\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n documentType: string\r\n ): void {\r\n const requiresBack = this.requiresBackSide(documentType);\r\n const wasCapturingFront = this.currentSide === 'front';\r\n \r\n // Store the captured image\r\n if (wasCapturingFront) {\r\n this.frontBlob = imageData;\r\n } else {\r\n this.backBlob = imageData;\r\n }\r\n \r\n // If we need back side and haven't captured it yet, move to back side\r\n if (requiresBack && wasCapturingFront) {\r\n this.currentSide = 'back';\r\n this.root!.innerHTML = \"\";\r\n this.renderChoiceScreen(container, theme, documentType);\r\n return;\r\n }\r\n\r\n // All captures complete, resolve with result\r\n if (!this.frontBlob) {\r\n this.rejectCapture?.(new Error(\"No front image captured. Please try again.\"));\r\n return;\r\n }\r\n \r\n const result: DocumentCaptureResult = {\r\n front: this.frontBlob,\r\n back: this.backBlob || undefined\r\n };\r\n this.resolveCapture?.(result);\r\n }\r\n\r\n private handleFileUploadComplete(\r\n imageData: Blob,\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n documentType: string\r\n ): void {\r\n // Show preview first, then handle completion\r\n this.showPreview(container, theme, imageData, documentType);\r\n }\r\n\r\n private validateFile(file: File): string | null {\r\n // Check file type\r\n const allowedTypes = ['image/jpeg', 'image/jpg', 'image/png'];\r\n if (!allowedTypes.includes(file.type)) {\r\n return \"Invalid file type. Please upload a JPEG or PNG image.\";\r\n }\r\n \r\n // Check file size (max 10MB)\r\n const maxSize = 10 * 1024 * 1024;\r\n if (file.size > maxSize) {\r\n return \"File is too large. Please upload an image smaller than 10MB.\";\r\n }\r\n \r\n // Check minimum file size (at least 1KB to avoid empty files)\r\n if (file.size < 1024) {\r\n return \"File is too small. Please upload a valid image file.\";\r\n }\r\n \r\n return null;\r\n }\r\n\r\n private handleFileUpload(container: HTMLElement, theme: ThemeColors): void {\r\n const input = this.root?.querySelector(\"#sc-doc-file-input\") as HTMLInputElement;\r\n if (input) input.click();\r\n }\r\n\r\n private stopCamera(): void {\r\n if (this.stream) {\r\n this.stream.getTracks().forEach((t) => t.stop());\r\n this.stream = null;\r\n }\r\n if (this.videoEl) {\r\n this.videoEl.srcObject = null;\r\n this.videoEl = null;\r\n }\r\n }\r\n\r\n private createEnhancedButton(\r\n label: string,\r\n theme: ThemeColors,\r\n isPrimary: boolean,\r\n ariaLabel: string\r\n ): HTMLButtonElement {\r\n const btn = document.createElement(\"button\");\r\n btn.textContent = label;\r\n btn.setAttribute(\"aria-label\", ariaLabel);\r\n btn.style.cssText = `\r\n padding:18px 24px;border-radius:16px;font-size:16px;font-weight:600;\r\n cursor:pointer;transition:all 0.3s ease;border:none;width:100%;\r\n min-height:56px;touch-action:manipulation;-webkit-tap-highlight-color:transparent;\r\n position:relative;overflow:hidden;\r\n ${\r\n isPrimary\r\n ? `background:linear-gradient(135deg, ${theme.primary}, ${theme.primary}DD);color:#fff;box-shadow:0 8px 24px ${theme.primary}25, 0 4px 12px ${theme.primary}15;`\r\n : `background:${theme.inputBg};color:${theme.text};border:2px solid ${theme.border};box-shadow:0 2px 8px ${theme.border}20;`\r\n }\r\n `;\r\n \r\n // Add ripple effect\r\n btn.addEventListener(\"click\", (e) => {\r\n const ripple = document.createElement(\"span\");\r\n const rect = btn.getBoundingClientRect();\r\n const size = Math.max(rect.width, rect.height);\r\n const x = e.clientX - rect.left - size / 2;\r\n const y = e.clientY - rect.top - size / 2;\r\n \r\n ripple.style.cssText = `\r\n position:absolute;width:${size}px;height:${size}px;\r\n left:${x}px;top:${y}px;border-radius:50%;\r\n background:${isPrimary ? 'rgba(255,255,255,0.3)' : theme.primary + '20'};\r\n transform:scale(0);animation:ripple 0.6s ease-out;\r\n pointer-events:none;\r\n `;\r\n btn.appendChild(ripple);\r\n setTimeout(() => ripple.remove(), 600);\r\n });\r\n \r\n btn.addEventListener(\"mouseenter\", () => {\r\n btn.style.transform = \"translateY(-2px)\";\r\n if (isPrimary) {\r\n btn.style.boxShadow = `0 12px 32px ${theme.primary}30, 0 6px 16px ${theme.primary}20`;\r\n } else {\r\n btn.style.boxShadow = `0 4px 16px ${theme.border}30, 0 2px 8px ${theme.border}20`;\r\n btn.style.borderColor = theme.primary;\r\n }\r\n });\r\n btn.addEventListener(\"mouseleave\", () => {\r\n btn.style.transform = \"translateY(0)\";\r\n if (isPrimary) {\r\n btn.style.boxShadow = `0 8px 24px ${theme.primary}25, 0 4px 12px ${theme.primary}15`;\r\n } else {\r\n btn.style.boxShadow = `0 2px 8px ${theme.border}20`;\r\n btn.style.borderColor = theme.border;\r\n }\r\n });\r\n \r\n // Add ripple animation\r\n if (!document.head.querySelector('style[data-ripple-animation]')) {\r\n const style = document.createElement('style');\r\n style.setAttribute('data-ripple-animation', 'true');\r\n style.textContent = `\r\n @keyframes ripple {\r\n to { transform: scale(4); opacity: 0; }\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n \r\n return btn;\r\n }\r\n\r\n private showLoadingState(message: string, theme: ThemeColors): void {\r\n if (!this.root) return;\r\n \r\n this.root.innerHTML = \"\";\r\n this.root.style.cssText = \"display:flex;flex-direction:column;align-items:center;justify-content:center;gap:20px;padding:40px 20px;min-height:300px;\";\r\n \r\n // Enhanced loading spinner\r\n const spinnerContainer = document.createElement(\"div\");\r\n spinnerContainer.style.cssText = \"position:relative;width:80px;height:80px;\";\r\n \r\n const spinner = document.createElement(\"div\");\r\n spinner.style.cssText = `\r\n position:absolute;inset:0;border-radius:50%;\r\n border:4px solid ${theme.border};\r\n border-top-color:${theme.primary};\r\n animation:sc-spin 1s linear infinite;\r\n `;\r\n spinnerContainer.appendChild(spinner);\r\n \r\n const centerIcon = document.createElement(\"div\");\r\n centerIcon.style.cssText = `\r\n position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\r\n font-size:28px;animation:pulse 2s ease-in-out infinite;\r\n `;\r\n centerIcon.textContent = \"\uD83D\uDCC4\";\r\n spinnerContainer.appendChild(centerIcon);\r\n \r\n this.root.appendChild(spinnerContainer);\r\n \r\n // Loading message\r\n const loadingText = document.createElement(\"div\");\r\n loadingText.style.cssText = `\r\n color:${theme.text};font-size:16px;font-weight:600;text-align:center;\r\n animation:fadeIn 0.5s ease-out;\r\n `;\r\n loadingText.textContent = message;\r\n this.root.appendChild(loadingText);\r\n \r\n // Add pulse animation\r\n if (!document.head.querySelector('style[data-pulse-animation]')) {\r\n const style = document.createElement('style');\r\n style.setAttribute('data-pulse-animation', 'true');\r\n style.textContent = `\r\n @keyframes pulse {\r\n 0%, 100% { transform: scale(1); opacity: 1; }\r\n 50% { transform: scale(1.1); opacity: 0.8; }\r\n }\r\n @keyframes fadeIn {\r\n from { opacity: 0; transform: translateY(10px); }\r\n to { opacity: 1; transform: translateY(0); }\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n }\r\n\r\n private showError(message: string): void {\r\n if (!this.root) return;\r\n \r\n const errorContainer = document.createElement(\"div\");\r\n errorContainer.style.cssText = `\r\n display:flex;align-items:center;gap:12px;padding:16px;\r\n background:#ff444415;border:1px solid #ff444430;border-radius:12px;\r\n color:#ff4444;font-size:14px;margin-top:16px;animation:shake 0.5s ease-in-out;\r\n `;\r\n errorContainer.innerHTML = `\r\n <span style=\"font-size:18px;\">\u26A0\uFE0F</span>\r\n <span>${message}</span>\r\n `;\r\n \r\n // Add shake animation\r\n if (!document.head.querySelector('style[data-shake-animation]')) {\r\n const style = document.createElement('style');\r\n style.setAttribute('data-shake-animation', 'true');\r\n style.textContent = `\r\n @keyframes shake {\r\n 0%, 100% { transform: translateX(0); }\r\n 25% { transform: translateX(-5px); }\r\n 75% { transform: translateX(5px); }\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n \r\n this.root.appendChild(errorContainer);\r\n setTimeout(() => errorContainer.remove(), 5000);\r\n }\r\n\r\n private createButton(\r\n label: string,\r\n theme: ThemeColors,\r\n isPrimary: boolean\r\n ): HTMLButtonElement {\r\n const btn = document.createElement(\"button\");\r\n btn.textContent = label;\r\n btn.style.cssText = `\r\n padding:16px 24px;border-radius:12px;font-size:16px;font-weight:600;\r\n cursor:pointer;transition:all 0.2s ease;border:none;width:100%;\r\n min-height:52px;touch-action:manipulation;-webkit-tap-highlight-color:transparent;\r\n ${\r\n isPrimary\r\n ? `background:${theme.primary};color:#fff;box-shadow:0 4px 12px ${theme.primary}30;`\r\n : `background:${theme.inputBg};color:${theme.text};border:2px solid ${theme.border};`\r\n }\r\n `;\r\n btn.addEventListener(\"mouseenter\", () => {\r\n btn.style.transform = \"translateY(-1px)\";\r\n if (isPrimary) btn.style.background = theme.primaryHover;\r\n });\r\n btn.addEventListener(\"mouseleave\", () => {\r\n btn.style.transform = \"translateY(0)\";\r\n if (isPrimary) btn.style.background = theme.primary;\r\n });\r\n return btn;\r\n }\r\n\r\n private compressImage(\r\n source: Blob | File,\r\n maxWidth: number,\r\n maxHeight: number,\r\n quality: number\r\n ): Promise<Blob> {\r\n return new Promise((resolve, reject) => {\r\n // Read EXIF orientation FIRST so we can correct rotation before canvas draw.\r\n // Canvas ignores EXIF metadata \u2014 without this, phone uploads arrive rotated.\r\n this._readExifOrientation(source).then((orientation) => {\r\n const url = URL.createObjectURL(source);\r\n const imgEl = document.createElement(\"img\");\r\n imgEl.onload = () => {\r\n URL.revokeObjectURL(url);\r\n let { naturalWidth: w, naturalHeight: h } = imgEl;\r\n\r\n // For orientations 5-8 the image is rotated 90\u00B0/270\u00B0 \u2014 swap dimensions\r\n const swapped = orientation >= 5 && orientation <= 8;\r\n const srcW = swapped ? h : w;\r\n const srcH = swapped ? w : h;\r\n const ratio = Math.min(maxWidth / srcW, maxHeight / srcH, 1);\r\n const outW = Math.round(srcW * ratio);\r\n const outH = Math.round(srcH * ratio);\r\n\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = outW;\r\n canvas.height = outH;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) { reject(new Error(\"Canvas unavailable\")); return; }\r\n\r\n // Apply EXIF rotation transform before drawing\r\n ctx.save();\r\n if (orientation === 2) { ctx.transform(-1, 0, 0, 1, outW, 0); }\r\n else if (orientation === 3) { ctx.transform(-1, 0, 0, -1, outW, outH); }\r\n else if (orientation === 4) { ctx.transform( 1, 0, 0, -1, 0, outH); }\r\n else if (orientation === 5) { ctx.transform( 0, 1, 1, 0, 0, 0); }\r\n else if (orientation === 6) { ctx.transform( 0, 1, -1, 0, outH, 0); }\r\n else if (orientation === 7) { ctx.transform( 0, -1, -1, 0, outH, outW); }\r\n else if (orientation === 8) { ctx.transform( 0, -1, 1, 0, 0, outW); }\r\n ctx.drawImage(imgEl, 0, 0, swapped ? outH : outW, swapped ? outW : outH);\r\n ctx.restore();\r\n\r\n canvas.toBlob(\r\n (blob) => { blob ? resolve(blob) : reject(new Error(\"Compression failed\")); },\r\n \"image/jpeg\",\r\n quality\r\n );\r\n };\r\n imgEl.onerror = () => { URL.revokeObjectURL(url); reject(new Error(\"Image load failed\")); };\r\n imgEl.src = url;\r\n }).catch(() => {\r\n // If EXIF read fails, fall back to simple compression without rotation\r\n const url = URL.createObjectURL(source);\r\n const imgEl = document.createElement(\"img\");\r\n imgEl.onload = () => {\r\n URL.revokeObjectURL(url);\r\n let { naturalWidth: w, naturalHeight: h } = imgEl;\r\n const ratio = Math.min(maxWidth / w, maxHeight / h, 1);\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = Math.round(w * ratio);\r\n canvas.height = Math.round(h * ratio);\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) { reject(new Error(\"Canvas unavailable\")); return; }\r\n ctx.drawImage(imgEl, 0, 0, canvas.width, canvas.height);\r\n canvas.toBlob(\r\n (blob) => { blob ? resolve(blob) : reject(new Error(\"Compression failed\")); },\r\n \"image/jpeg\",\r\n quality\r\n );\r\n };\r\n imgEl.onerror = () => { URL.revokeObjectURL(url); reject(new Error(\"Image load failed\")); };\r\n imgEl.src = url;\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Read JPEG EXIF orientation tag (1\u20138) from a Blob/File.\r\n * Returns 1 (no rotation) if EXIF is absent or unreadable.\r\n */\r\n private _readExifOrientation(source: Blob | File): Promise<number> {\r\n return new Promise((resolve) => {\r\n const reader = new FileReader();\r\n reader.onload = (e) => {\r\n try {\r\n const buf = e.target?.result as ArrayBuffer;\r\n const view = new DataView(buf);\r\n if (view.getUint16(0, false) !== 0xFFD8) { resolve(1); return; } // not JPEG\r\n let offset = 2;\r\n while (offset < view.byteLength) {\r\n const marker = view.getUint16(offset, false);\r\n offset += 2;\r\n if (marker === 0xFFE1) { // APP1 \u2014 may contain EXIF\r\n if (view.getUint32(offset + 2, false) !== 0x45786966) { resolve(1); return; }\r\n const little = view.getUint16(offset + 8, false) === 0x4949;\r\n const ifdOff = offset + 8 + view.getUint32(offset + 12, little);\r\n const tags = view.getUint16(ifdOff, little);\r\n for (let i = 0; i < tags; i++) {\r\n if (view.getUint16(ifdOff + 2 + 12 * i, little) === 0x0112) {\r\n resolve(view.getUint16(ifdOff + 2 + 12 * i + 8, little));\r\n return;\r\n }\r\n }\r\n resolve(1); return;\r\n } else if ((marker & 0xFF00) !== 0xFF00) {\r\n break;\r\n } else {\r\n offset += view.getUint16(offset, false);\r\n }\r\n }\r\n resolve(1);\r\n } catch { resolve(1); }\r\n };\r\n reader.onerror = () => resolve(1);\r\n // Only need the first 64KB \u2014 EXIF is always in the first APP1 segment\r\n reader.readAsArrayBuffer(source.slice(0, 65536));\r\n });\r\n }\r\n\r\n private getDocumentLabel(type: string): string {\r\n const t = type.toLowerCase();\r\n if (t.includes(\"passport\")) return \"passport\";\r\n if (t.includes(\"driver\") || t.includes(\"licen\")) return \"driver's license\";\r\n if (t.includes(\"voter\") || t.includes(\"pvc\")) return \"voter's card\";\r\n if (t.includes(\"national\") || t.includes(\"nin\") || t.includes(\"national id\")) return \"national ID card\";\r\n if (t.includes(\"bvn\")) return \"BVN card\";\r\n return \"identity document\";\r\n }\r\n}\r\n", "import { SmartComply } from \"../client/Smartcomply\";\r\nimport { SDKInitConfig, VerifyIdentityResponse } from \"../types/onboarding\";\r\nimport { LivenessSubmitResponse, ChallengeAction } from \"../types/liveness\";\r\nimport { ThemeColors, getTheme } from \"./theme\";\r\nimport { DocumentCapture, DocumentCaptureResult } from \"./DocumentCapture\";\r\nimport { Environment } from \"../client/Config\";\r\nimport { collectDeviceMetadata } from \"../utils/device\";\r\n\r\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n// Public Types\r\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nexport interface FlowOptions {\r\n apiKey: string;\r\n clientId: string;\r\n environment?: Environment;\r\n timeout?: number;\r\n onComplete?: (result: FlowResult) => void;\r\n onError?: (error: Error) => void;\r\n onClose?: () => void;\r\n}\r\n\r\nexport interface FlowResult {\r\n entryId: number;\r\n sessionId: string | null;\r\n status: string;\r\n submittedAt: string | null;\r\n verificationResult?: VerifyIdentityResponse;\r\n}\r\n\r\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n// Step definitions\r\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\ntype StepName =\r\n | \"loading\"\r\n | \"welcome\"\r\n | \"country\"\r\n | \"id_type\"\r\n | \"id_input\"\r\n | \"document_capture\"\r\n | \"processing\"\r\n | \"liveness\"\r\n | \"result\"\r\n | \"error\";\r\n\r\nconst STEP_ORDER: StepName[] = [\r\n \"loading\",\r\n \"welcome\",\r\n \"country\",\r\n \"id_type\",\r\n \"id_input\", // or document_capture\r\n \"document_capture\",\r\n \"processing\",\r\n \"liveness\",\r\n \"result\",\r\n];\r\n\r\nconst COUNTRY_LABELS: Record<string, string> = {\r\n nigeria: \"\uD83C\uDDF3\uD83C\uDDEC Nigeria\",\r\n global: \"\uD83C\uDF0D Other Countries\",\r\n ghana: \"\uD83C\uDDEC\uD83C\uDDED Ghana\",\r\n kenya: \"\uD83C\uDDF0\uD83C\uDDEA Kenya\",\r\n south_africa: \"\uD83C\uDDFF\uD83C\uDDE6 South Africa\",\r\n united_states: \"\uD83C\uDDFA\uD83C\uDDF8 United States\",\r\n united_kingdom: \"\uD83C\uDDEC\uD83C\uDDE7 United Kingdom\",\r\n};\r\n\r\nfunction resolveIdTypeInfo(\r\n typeName: string,\r\n isDocumentFlow: boolean\r\n): { icon: string; desc: string; requiresBack?: boolean } {\r\n const u = typeName.toUpperCase();\r\n const withFace = u.includes(\"WITH FACE\") || u.includes(\"FACE\");\r\n const advanced = u.includes(\"ADVANCED\");\r\n\r\n // Helper function to check if document requires back side\r\n const requiresBackSide = (type: string): boolean => {\r\n const t = type.toLowerCase();\r\n return t.includes(\"voter\") || \r\n t.includes(\"nin\") || \r\n t.includes(\"driver\") || \r\n t.includes(\"license\") || \r\n t.includes(\"national id\") ||\r\n t.includes(\"national id card\");\r\n };\r\n\r\n // BVN \u2014 always 11 digits\r\n if (u.includes(\"BVN\") || u.includes(\"BANK VERIFICATION\")) {\r\n const extra = withFace ? \" + selfie photo\" : \"\";\r\n return { icon: \"\uD83C\uDFE6\", desc: `Enter your 11-digit BVN${extra}`, requiresBack: false };\r\n }\r\n\r\n // NIN \u2014 always 11 digits\r\n if (u.includes(\"NIN\") || u.includes(\"NATIONAL IDENTITY NUMBER\")) {\r\n const extra = withFace ? \" + selfie photo\" : \"\";\r\n return { icon: \"\uD83C\uDD94\", desc: `Enter your 11-digit NIN${extra}`, requiresBack: false };\r\n }\r\n\r\n // Ghana Card / Ghana National ID\r\n if (u.includes(\"GHANA\")) {\r\n if (isDocumentFlow) return { icon: \"\uD83E\uDEAA\", desc: \"Capture or upload your Ghana Card\", requiresBack: true };\r\n const extra = withFace ? \" + selfie photo\" : \"\";\r\n return { icon: \"\uD83E\uDEAA\", desc: `Enter your Ghana Card number${extra}`, requiresBack: false };\r\n }\r\n\r\n // SSNIT (Ghana social security)\r\n if (u.includes(\"SSNIT\"))\r\n return { icon: \"\uD83C\uDFDB\uFE0F\", desc: \"Enter your SSNIT number\", requiresBack: false };\r\n\r\n // Kenya National ID\r\n if (u.includes(\"KENYA\") || (u.includes(\"NATIONAL\") && u.includes(\"KENYA\")))\r\n return { icon: \"\uD83C\uDD94\", desc: \"Enter your Kenya National ID number\", requiresBack: false };\r\n\r\n // TIN\r\n if (u.includes(\"TIN\") || u.includes(\"TAX IDENTIFICATION\"))\r\n return { icon: \"\uD83E\uDDFE\", desc: \"Enter your Tax Identification Number (TIN)\", requiresBack: false };\r\n\r\n // CAC / Company registration\r\n if (u.includes(\"CAC\") || u.includes(\"CORPORATE AFFAIRS\") || u.includes(\"COMPANY\"))\r\n return { icon: \"\uD83C\uDFE2\", desc: advanced ? \"Enter RC number, company name & type\" : \"Enter your company registration number\", requiresBack: false };\r\n\r\n // Voter / PVC\r\n if (u.includes(\"VOTER\") || u.includes(\"PVC\")) {\r\n const requiresBack = requiresBackSide(typeName);\r\n return { \r\n icon: \"\uD83D\uDDF3\uFE0F\", \r\n desc: isDocumentFlow \r\n ? `Capture or upload your voter's card${requiresBack ? \" (front & back)\" : \"\"}` \r\n : \"Enter your voter ID number\",\r\n requiresBack: isDocumentFlow ? requiresBack : false\r\n };\r\n }\r\n\r\n // Passport\r\n if (u.includes(\"PASSPORT\"))\r\n return { icon: \"\uD83D\uDCD8\", desc: isDocumentFlow ? \"Capture or upload your passport\" : \"Enter your passport number\", requiresBack: false };\r\n\r\n // Driver's license\r\n if (u.includes(\"DRIVER\") || u.includes(\"LICENSE\") || u.includes(\"LICENCE\")) {\r\n const requiresBack = requiresBackSide(typeName);\r\n return { \r\n icon: \"\uD83D\uDE97\", \r\n desc: isDocumentFlow \r\n ? `Capture or upload your driver's license${requiresBack ? \" (front & back)\" : \"\"}` \r\n : \"Enter your driver's license number\",\r\n requiresBack: isDocumentFlow ? requiresBack : false\r\n };\r\n }\r\n\r\n // National ID card (generic)\r\n if (u.includes(\"NATIONAL ID\") || (u.includes(\"NATIONAL\") && u.includes(\"CARD\"))) {\r\n const requiresBack = requiresBackSide(typeName);\r\n return { \r\n icon: \"\uD83E\uDEAA\", \r\n desc: isDocumentFlow \r\n ? `Capture or upload your ID card${requiresBack ? \" (front & back)\" : \"\"}` \r\n : \"Enter your National ID number\",\r\n requiresBack: isDocumentFlow ? requiresBack : false\r\n };\r\n }\r\n\r\n // Face liveness / comparison\r\n if (u.includes(\"LIVENESS\") || u.includes(\"FACE COMPARISON\") || u.includes(\"FACE MATCH\"))\r\n return { icon: \"\uD83E\uDD33\", desc: \"We'll capture a short selfie video to verify you\", requiresBack: false };\r\n\r\n return {\r\n icon: isDocumentFlow ? \"\uD83D\uDCC4\" : \"\uD83C\uDD94\",\r\n desc: isDocumentFlow ? \"Capture or upload your document\" : \"Enter your ID number\",\r\n requiresBack: false,\r\n };\r\n}\r\n\r\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n// SmartComplyFlow\r\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n// Add CSS animation keyframes for spin animations\r\nconst style = document.createElement('style');\r\nstyle.textContent = `\r\n @keyframes sc-spin {\r\n 0% { transform: rotate(0deg); }\r\n 100% { transform: rotate(360deg); }\r\n }\r\n`;\r\nif (!document.head.querySelector('style[data-sc-animations]')) {\r\n style.setAttribute('data-sc-animations', 'true');\r\n document.head.appendChild(style);\r\n}\r\n\r\nexport class SmartComplyFlow {\r\n private sdk: SmartComply;\r\n private options: FlowOptions;\r\n private theme: ThemeColors = getTheme(\"default\");\r\n\r\n // DOM\r\n private overlay: HTMLDivElement | null = null;\r\n private modal: HTMLDivElement | null = null;\r\n private contentArea: HTMLDivElement | null = null;\r\n private progressBar: HTMLDivElement | null = null;\r\n private stepLabel: HTMLDivElement | null = null;\r\n private brandLabel: HTMLDivElement | null = null;\r\n\r\n // State\r\n private sdkConfig: SDKInitConfig | null = null;\r\n private currentStep: StepName = \"loading\";\r\n private selectedCountry: string = \"\";\r\n private selectedChannelId: number = 0;\r\n private selectedChannelFields: { type: string; label: string; options?: string[] }[] = [];\r\n private selectedIdType: string = \"\"; // Canonical code (e.g., \"national_id\", \"nin_with_face\")\r\n private selectedIdTypeName: string = \"\"; // Display name (e.g., \"National Identity Number with Face (NIN)\")\r\n private collectedFields: Record<string, string> = {};\r\n private idNumber: string = \"\";\r\n private documentBlob: Blob | null = null;\r\n private documentBackBlob: Blob | null = null;\r\n private identityCheckId: number | null = null;\r\n private verificationResult: VerifyIdentityResponse | null = null;\r\n private livenessEntryId: number | null = null;\r\n private isDestroyed = false;\r\n private headerBackBtn: HTMLButtonElement | null = null;\r\n\r\n // Session expiry\r\n private sessionExpiryTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n // Status polling (result screen)\r\n private _pollStatusTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n // Components\r\n private docCapture: DocumentCapture | null = null;\r\n\r\n private constructor(options: FlowOptions) {\r\n this.options = options;\r\n this.sdk = new SmartComply({\r\n apiKey: options.apiKey,\r\n clientId: options.clientId,\r\n environment: options.environment || \"sandbox\",\r\n timeout: options.timeout,\r\n });\r\n }\r\n\r\n /**\r\n * Open the SmartComply verification flow.\r\n *\r\n * Usage:\r\n * SmartComplyFlow.open({\r\n * apiKey: \"pk_live_...\",\r\n * clientId: \"uuid-...\",\r\n * environment: \"production\",\r\n * onComplete: (result) => console.log(\"Done!\", result),\r\n * onError: (err) => console.error(err),\r\n * onClose: () => console.log(\"Closed\"),\r\n * });\r\n */\r\n static open(options: FlowOptions): SmartComplyFlow {\r\n const flow = new SmartComplyFlow(options);\r\n flow.mount();\r\n flow.initialize();\r\n return flow;\r\n }\r\n\r\n /**\r\n * Close and destroy the flow widget.\r\n */\r\n close(): void {\r\n this.isDestroyed = true;\r\n this.docCapture?.destroy();\r\n if (this.sessionExpiryTimer) {\r\n clearTimeout(this.sessionExpiryTimer);\r\n this.sessionExpiryTimer = null;\r\n }\r\n if (this._pollStatusTimer) {\r\n clearTimeout(this._pollStatusTimer);\r\n this._pollStatusTimer = null;\r\n }\r\n\r\n if (this.overlay) {\r\n this.overlay.style.opacity = \"0\";\r\n setTimeout(() => {\r\n if (this.overlay?.parentElement) {\r\n this.overlay.parentElement.removeChild(this.overlay);\r\n }\r\n this.overlay = null;\r\n this.modal = null;\r\n this.contentArea = null;\r\n }, 300);\r\n }\r\n\r\n this.options.onClose?.();\r\n }\r\n\r\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n // Initialization\r\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private mount(): void {\r\n // Inject keyframes\r\n this.injectStyles();\r\n\r\n // Overlay\r\n this.overlay = document.createElement(\"div\");\r\n this.overlay.id = \"sc-flow-overlay\";\r\n this.overlay.style.cssText = `\r\n position:fixed;inset:0;z-index:99999;\r\n display:flex;align-items:center;justify-content:center;\r\n background:${this.theme.overlay};\r\n backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);\r\n opacity:0;transition:opacity 0.3s ease;\r\n font-family:'Inter','Segoe UI',system-ui,-apple-system,sans-serif;\r\n `;\r\n\r\n // Modal\r\n this.modal = document.createElement(\"div\");\r\n this.modal.id = \"sc-flow-modal\";\r\n this.modal.style.cssText = `\r\n width:100%;max-width:440px;max-height:92vh;\r\n background:${this.theme.bg};\r\n border-radius:20px;overflow:hidden;\r\n box-shadow:${this.theme.shadow};\r\n display:flex;flex-direction:column;\r\n transform:translateY(20px) scale(0.97);\r\n transition:transform 0.35s cubic-bezier(0.16,1,0.3,1);\r\n `;\r\n\r\n // Header\r\n const header = this.createHeader();\r\n this.modal.appendChild(header);\r\n\r\n // Progress bar\r\n const progressWrap = document.createElement(\"div\");\r\n progressWrap.style.cssText = `height:3px;background:${this.theme.shimmer};`;\r\n this.progressBar = document.createElement(\"div\");\r\n this.progressBar.style.cssText = `\r\n height:100%;width:0%;background:linear-gradient(90deg,${this.theme.primary},${this.theme.primaryHover});\r\n border-radius:0 2px 2px 0;transition:width 0.5s ease;\r\n `;\r\n progressWrap.appendChild(this.progressBar);\r\n this.modal.appendChild(progressWrap);\r\n\r\n // Content area (scrollable)\r\n this.contentArea = document.createElement(\"div\");\r\n this.contentArea.id = \"sc-flow-content\";\r\n this.contentArea.style.cssText = `\r\n flex:1;overflow-y:auto;padding:20px 24px;\r\n -webkit-overflow-scrolling:touch;\r\n `;\r\n this.modal.appendChild(this.contentArea);\r\n\r\n // Footer\r\n const footer = this.createFooter();\r\n this.modal.appendChild(footer);\r\n\r\n this.overlay.appendChild(this.modal);\r\n document.body.appendChild(this.overlay);\r\n\r\n // Animate in\r\n requestAnimationFrame(() => {\r\n if (this.overlay) this.overlay.style.opacity = \"1\";\r\n if (this.modal) this.modal.style.transform = \"translateY(0) scale(1)\";\r\n });\r\n }\r\n\r\n private async initialize(): Promise<void> {\r\n this.showStep(\"loading\");\r\n\r\n try {\r\n // Create session\r\n await this.sdk.createSession();\r\n\r\n // C4: Start session expiry timer (warn 2 min before 30-min expiry)\r\n const expiresAt = this.sdk.sessionExpiresAt;\r\n if (expiresAt) {\r\n const expiresMs = new Date(expiresAt).getTime() - Date.now();\r\n const warnMs = Math.max(expiresMs - 120000, 0); // warn 2 min before\r\n this.sessionExpiryTimer = setTimeout(() => {\r\n if (!this.isDestroyed && this.currentStep !== \"result\") {\r\n this.showErrorStep(\"Your session is about to expire. Please complete verification quickly or restart.\");\r\n }\r\n }, warnMs);\r\n }\r\n\r\n // Load config\r\n this.sdkConfig = await this.sdk.initializeConfig();\r\n\r\n // Apply theme from config\r\n if (this.sdkConfig.theme) {\r\n this.theme = getTheme(this.sdkConfig.theme);\r\n this.applyTheme();\r\n }\r\n\r\n // Update brand name\r\n if (this.brandLabel && this.sdkConfig.brand_name) {\r\n this.brandLabel.textContent = this.sdkConfig.brand_name;\r\n }\r\n\r\n if (this.isDestroyed) return;\r\n\r\n this.showStep(\"welcome\");\r\n\r\n } catch (err: any) {\r\n this.showErrorStep(err.message || \"Failed to initialize. Please try again.\");\r\n }\r\n }\r\n\r\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n // Step rendering\r\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private showStep(step: StepName): void {\r\n this.currentStep = step;\r\n if (!this.contentArea) return;\r\n\r\n // Update progress\r\n this.updateProgress();\r\n\r\n // Animate out current content\r\n const oldContent = this.contentArea.firstChild as HTMLElement | null;\r\n if (oldContent) {\r\n oldContent.style.cssText += \"opacity:0;transform:translateX(-20px);transition:all 0.2s ease;\";\r\n setTimeout(() => {\r\n if (this.contentArea) this.contentArea.innerHTML = \"\";\r\n this.renderStep(step);\r\n }, 200);\r\n } else {\r\n this.renderStep(step);\r\n }\r\n }\r\n\r\n private renderStep(step: StepName): void {\r\n if (!this.contentArea) return;\r\n\r\n const wrapper = document.createElement(\"div\");\r\n wrapper.style.cssText = \"opacity:0;transform:translateX(20px);transition:all 0.3s ease;\";\r\n\r\n switch (step) {\r\n case \"loading\":\r\n this.renderLoading(wrapper);\r\n break;\r\n case \"welcome\":\r\n this.renderWelcome(wrapper);\r\n break;\r\n case \"country\":\r\n this.renderCountrySelect(wrapper);\r\n break;\r\n case \"id_type\":\r\n this.renderIdTypeSelect(wrapper);\r\n break;\r\n case \"id_input\":\r\n this.renderIdInput(wrapper);\r\n break;\r\n case \"document_capture\":\r\n this.renderDocumentCapture(wrapper);\r\n break;\r\n case \"processing\":\r\n this.renderProcessing(wrapper);\r\n break;\r\n case \"liveness\":\r\n this.renderLiveness(wrapper);\r\n break;\r\n case \"result\":\r\n this.renderResult(wrapper);\r\n break;\r\n case \"error\":\r\n break; // handled separately\r\n }\r\n\r\n this.contentArea.appendChild(wrapper);\r\n\r\n // Animate in\r\n requestAnimationFrame(() => {\r\n wrapper.style.opacity = \"1\";\r\n wrapper.style.transform = \"translateX(0)\";\r\n });\r\n }\r\n\r\n // \u2500\u2500 Loading \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private renderLoading(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:300px;gap:16px;\";\r\n\r\n const spinnerWrap = document.createElement(\"div\");\r\n spinnerWrap.style.cssText = \"position:relative;width:60px;height:60px;flex-shrink:0;\";\r\n\r\n const ring = document.createElement(\"div\");\r\n ring.style.cssText = `\r\n position:absolute;inset:0;border-radius:50%;\r\n border:3px solid ${this.theme.border};\r\n border-top-color:${this.theme.primary};\r\n animation:sc-spin 0.9s linear infinite;\r\n `;\r\n const centre = document.createElement(\"div\");\r\n centre.style.cssText = `\r\n position:absolute;inset:0;\r\n display:flex;align-items:center;justify-content:center;\r\n font-size:22px;\r\n `;\r\n centre.textContent = \"\\uD83D\\uDEE1\\uFE0F\";\r\n spinnerWrap.appendChild(ring);\r\n spinnerWrap.appendChild(centre);\r\n container.appendChild(spinnerWrap);\r\n\r\n const label = document.createElement(\"div\");\r\n label.style.cssText = `color:${this.theme.text};font-size:15px;font-weight:600;`;\r\n label.textContent = \"Setting up secure session\";\r\n container.appendChild(label);\r\n\r\n const sub = document.createElement(\"div\");\r\n sub.style.cssText = `color:${this.theme.textMuted};font-size:12px;text-align:center;max-width:220px;line-height:1.5;`;\r\n sub.textContent = \"Connecting to the verification service...\";\r\n container.appendChild(sub);\r\n }\r\n\r\n // \u2500\u2500 Welcome \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private renderWelcome(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;text-align:center;gap:14px;\";\r\n\r\n const isDocFlow = this.isDocumentFlow();\r\n\r\n // Icon + badge row (side by side to save vertical space)\r\n const topRow = document.createElement(\"div\");\r\n topRow.style.cssText = \"display:flex;flex-direction:column;align-items:center;gap:10px;\";\r\n\r\n const iconWrap = document.createElement(\"div\");\r\n iconWrap.style.cssText = `\r\n width:58px;height:58px;border-radius:16px;\r\n display:flex;align-items:center;justify-content:center;\r\n font-size:26px;\r\n background:linear-gradient(135deg,${this.theme.primary}22,${this.theme.primaryGlow});\r\n border:1.5px solid ${this.theme.primary}33;\r\n `;\r\n iconWrap.textContent = isDocFlow ? \"\uD83E\uDEAA\" : \"\uD83D\uDEE1\uFE0F\";\r\n topRow.appendChild(iconWrap);\r\n\r\n const badge = document.createElement(\"div\");\r\n badge.style.cssText = `\r\n display:inline-flex;align-items:center;gap:5px;\r\n padding:3px 11px;border-radius:999px;\r\n font-size:10.5px;font-weight:600;letter-spacing:0.2px;\r\n background:${this.theme.primary}15;\r\n color:${this.theme.primary};\r\n border:1px solid ${this.theme.primary}30;\r\n `;\r\n badge.textContent = isDocFlow ? \"\uD83D\uDCC4 Document Verification\" : \"\uD83D\uDD0D Data Verification\";\r\n topRow.appendChild(badge);\r\n container.appendChild(topRow);\r\n\r\n // Title + subtitle (compact)\r\n const titleWrap = document.createElement(\"div\");\r\n titleWrap.style.cssText = \"display:flex;flex-direction:column;gap:5px;\";\r\n\r\n const title = document.createElement(\"h2\");\r\n title.style.cssText = `\r\n color:${this.theme.text};font-size:20px;font-weight:700;\r\n margin:0;line-height:1.2;\r\n `;\r\n title.textContent = \"Identity Verification\";\r\n titleWrap.appendChild(title);\r\n\r\n const desc = document.createElement(\"p\");\r\n desc.style.cssText = `\r\n color:${this.theme.textSecondary};font-size:13px;line-height:1.5;\r\n margin:0;max-width:300px;\r\n `;\r\n desc.textContent = isDocFlow\r\n ? \"Scan your ID document and take a quick selfie to confirm your identity.\"\r\n : \"Enter your ID details and take a quick selfie to confirm your identity.\";\r\n titleWrap.appendChild(desc);\r\n container.appendChild(titleWrap);\r\n\r\n // Steps preview \u2014 compact rows\r\n const steps = isDocFlow\r\n ? [\r\n { icon: \"\uD83E\uDEAA\", text: \"Choose your document type\", sub: \"Passport, National ID, Driver License\" },\r\n { icon: \"\uD83D\uDCF7\", text: \"Scan your document\", sub: \"Upload or capture a photo of your ID\" },\r\n { icon: \"\uD83E\uDD33\", text: \"Face check\", sub: \"Quick selfie to confirm it's you\" },\r\n ]\r\n : [\r\n { icon: \"\uD83C\uDD94\", text: \"Choose your ID type\", sub: \"NIN, BVN, Voter's Card and more\" },\r\n { icon: \"\uD83D\uDCDD\", text: \"Enter your ID details\", sub: \"Exactly as shown on your ID\" },\r\n { icon: \"\uD83E\uDD33\", text: \"Face check\", sub: \"Quick selfie to confirm it's you\" },\r\n ];\r\n\r\n const stepsWrap = document.createElement(\"div\");\r\n stepsWrap.style.cssText = `\r\n width:100%;display:flex;flex-direction:column;gap:0;\r\n border-radius:12px;overflow:hidden;\r\n border:1.5px solid ${this.theme.border};\r\n `;\r\n\r\n steps.forEach((step, i) => {\r\n const row = document.createElement(\"div\");\r\n row.style.cssText = `\r\n display:flex;align-items:center;gap:12px;\r\n padding:9px 14px;\r\n background:${this.theme.cardBg};\r\n ${i < steps.length - 1 ? `border-bottom:1px solid ${this.theme.border};` : \"\"}\r\n `;\r\n\r\n const iconEl = document.createElement(\"div\");\r\n iconEl.style.cssText = `\r\n width:28px;height:28px;border-radius:8px;flex-shrink:0;\r\n display:flex;align-items:center;justify-content:center;\r\n font-size:13px;\r\n background:${this.theme.primary}12;\r\n border:1px solid ${this.theme.primary}20;\r\n `;\r\n iconEl.textContent = step.icon;\r\n\r\n const textWrap = document.createElement(\"div\");\r\n textWrap.style.cssText = \"display:flex;flex-direction:column;gap:1px;text-align:left;\";\r\n\r\n const textEl = document.createElement(\"span\");\r\n textEl.style.cssText = `color:${this.theme.text};font-size:12.5px;font-weight:600;`;\r\n textEl.textContent = step.text;\r\n\r\n const subEl = document.createElement(\"span\");\r\n subEl.style.cssText = `color:${this.theme.textMuted};font-size:10.5px;`;\r\n subEl.textContent = step.sub;\r\n\r\n textWrap.appendChild(textEl);\r\n textWrap.appendChild(subEl);\r\n row.appendChild(iconEl);\r\n row.appendChild(textWrap);\r\n stepsWrap.appendChild(row);\r\n });\r\n\r\n container.appendChild(stepsWrap);\r\n\r\n // CTA\r\n const btn = this.createPrimaryButton(\"Get Started \u2192\");\r\n btn.style.cssText += \"margin-top:2px;\";\r\n btn.addEventListener(\"click\", () => this.showStep(\"country\"));\r\n container.appendChild(btn);\r\n\r\n // Trust badge\r\n const trust = document.createElement(\"div\");\r\n trust.style.cssText = `\r\n display:flex;align-items:center;gap:6px;\r\n color:${this.theme.textMuted};font-size:10.5px;\r\n `;\r\n trust.textContent = \"\uD83D\uDD12 End-to-end encrypted \u00B7 Powered by Adhere\";\r\n container.appendChild(trust);\r\n }\r\n\r\n // \u2500\u2500 Country Select \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private renderCountrySelect(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;gap:16px;\";\r\n\r\n const channels = this.sdkConfig?.channels || {};\r\n const countries = Object.keys(channels);\r\n\r\n // Auto-skip country selection if only one country available\r\n if (countries.length === 1) {\r\n this.selectedCountry = countries[0];\r\n this.showStep(\"id_type\");\r\n return;\r\n }\r\n\r\n const title = this.createStepTitle(\"Select your country\");\r\n container.appendChild(title);\r\n\r\n const subtitle = document.createElement(\"div\");\r\n subtitle.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin-top:-8px;`;\r\n subtitle.textContent = \"Choose the country that issued your ID\";\r\n container.appendChild(subtitle);\r\n\r\n for (const country of countries) {\r\n const card = this.createOptionCard(\r\n COUNTRY_LABELS[country] || country,\r\n `${channels[country].length} ID type${channels[country].length > 1 ? \"s\" : \"\"} available`,\r\n () => {\r\n this.selectedCountry = country;\r\n this.showStep(\"id_type\");\r\n }\r\n );\r\n container.appendChild(card);\r\n }\r\n }\r\n\r\n // \u2500\u2500 ID Type Select \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private renderIdTypeSelect(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;gap:16px;\";\r\n\r\n const globalDocFlow = this.isDocumentFlow();\r\n\r\n const title = this.createStepTitle(globalDocFlow ? \"Select document type\" : \"Select ID type\");\r\n container.appendChild(title);\r\n\r\n const subtitle = document.createElement(\"div\");\r\n subtitle.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin-top:-8px;`;\r\n subtitle.textContent = globalDocFlow\r\n ? \"Choose the document you want to scan\"\r\n : \"Choose the ID you want to verify\";\r\n container.appendChild(subtitle);\r\n\r\n const channels = this.sdkConfig?.channels || {};\r\n const idTypes = channels[this.selectedCountry] || [];\r\n\r\n for (const idType of idTypes) {\r\n const typeName = typeof idType === \"string\" ? idType : idType.name;\r\n // Use code (canonical) for API calls, fallback to name for backward compatibility\r\n const typeCode = typeof idType === \"string\" ? idType : (idType.code || idType.name);\r\n // Detect per-channel: does THIS specific channel have upload fields?\r\n const channelFields: any[] = typeof idType !== \"string\" ? (idType.fields || []) : [];\r\n const isThisDocFlow = channelFields.some((f: any) => f.type === \"upload\") || globalDocFlow;\r\n const info = resolveIdTypeInfo(typeName, isThisDocFlow);\r\n\r\n // Add back side indicator to subtitle if needed\r\n let subtitle = info.desc;\r\n if (info.requiresBack && isThisDocFlow) {\r\n subtitle += \" \u26A0\uFE0F Both sides required\";\r\n }\r\n\r\n const card = this.createOptionCard(\r\n `${info.icon} ${typeName}`,\r\n subtitle,\r\n () => {\r\n this.selectedIdType = typeCode; // Store canonical code for API\r\n this.selectedIdTypeName = typeName; // Keep display name for UI\r\n // Always reset first to avoid stale state when user goes back and changes selection\r\n this.selectedChannelId = 0;\r\n this.selectedChannelFields = [];\r\n if (typeof idType !== \"string\") {\r\n this.selectedChannelId = idType.id;\r\n this.selectedChannelFields = idType.fields || []; // guard null/undefined from backend\r\n }\r\n this.collectedFields = {};\r\n // Route: use explicit verification_type when set (more reliable than inspecting all channels)\r\n // Fallback to per-channel upload field check for mixed / unconfigured setups\r\n const hasUpload = (this.selectedChannelFields).some((f: any) => f.type === \"upload\");\r\n const vType = this.sdkConfig?.verification_type;\r\n const vTypes: string[] = vType ? (Array.isArray(vType) ? vType : [vType]) : [];\r\n const isDocChannel = hasUpload || (vTypes.length > 0 && vTypes.includes(\"document_verification\"));\r\n this.showStep(isDocChannel ? \"document_capture\" : \"id_input\");\r\n }\r\n );\r\n container.appendChild(card);\r\n }\r\n\r\n }\r\n\r\n // \u2500\u2500 ID Input (data verification \u2014 dynamic fields) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private renderIdInput(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;gap:16px;\";\r\n\r\n const dataFields = this.selectedChannelFields.filter((f) => f.type !== \"upload\");\r\n const info = resolveIdTypeInfo(this.selectedIdTypeName || this.selectedIdType, false);\r\n\r\n const title = this.createStepTitle(`${info.icon} ${this.selectedIdTypeName || this.selectedIdType}`);\r\n container.appendChild(title);\r\n\r\n const subtitle = document.createElement(\"div\");\r\n subtitle.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin-top:-8px;`;\r\n subtitle.textContent = dataFields.length > 0\r\n ? `Enter your ${this.selectedIdTypeName || this.selectedIdType} details exactly as they appear on your ID.`\r\n : \"Fill in the fields below to continue.\";\r\n container.appendChild(subtitle);\r\n\r\n // Edge case: no data fields configured \u2014 show fallback and allow submission\r\n if (dataFields.length === 0) {\r\n const empty = document.createElement(\"div\");\r\n empty.style.cssText = `\r\n padding:16px;border-radius:10px;\r\n background:${this.theme.cardBg};border:1px solid ${this.theme.border};\r\n color:${this.theme.textSecondary};font-size:13px;text-align:center;\r\n `;\r\n empty.textContent = \"No additional details required. Click below to continue.\";\r\n container.appendChild(empty);\r\n const autoBtn = this.createPrimaryButton(\"Continue\");\r\n autoBtn.addEventListener(\"click\", () => this.showStep(\"liveness\"));\r\n container.appendChild(autoBtn);\r\n return;\r\n }\r\n\r\n // Track input elements for validation\r\n const inputEls: { field: any; el: HTMLInputElement | HTMLSelectElement }[] = [];\r\n\r\n for (const field of dataFields) {\r\n const fieldKey = field.label.toLowerCase().replace(/[^a-z0-9]+/g, \"_\");\r\n\r\n const fieldWrap = document.createElement(\"div\");\r\n fieldWrap.style.cssText = \"display:flex;flex-direction:column;gap:6px;\";\r\n\r\n const label = document.createElement(\"label\");\r\n label.style.cssText = `color:${this.theme.textMuted};font-size:10px;font-weight:700;letter-spacing:0.6px;text-transform:uppercase;`;\r\n label.textContent = field.label;\r\n fieldWrap.appendChild(label);\r\n\r\n if (field.type === \"dropdown\" || field.type === \"select\") {\r\n // Dropdown field\r\n const select = document.createElement(\"select\");\r\n select.style.cssText = `\r\n width:100%;padding:13px 16px;border-radius:12px;\r\n font-size:15px;\r\n background:${this.theme.inputBg};\r\n color:${this.theme.text};\r\n border:2px solid ${this.theme.border};\r\n outline:none;box-sizing:border-box;\r\n cursor:pointer;transition:border-color 0.2s ease;\r\n `;\r\n const placeholder = document.createElement(\"option\");\r\n placeholder.value = \"\";\r\n placeholder.textContent = `Select ${field.label}`;\r\n placeholder.disabled = true;\r\n placeholder.selected = true;\r\n select.appendChild(placeholder);\r\n\r\n for (const opt of field.options || []) {\r\n const option = document.createElement(\"option\");\r\n option.value = opt;\r\n option.textContent = opt;\r\n select.appendChild(option);\r\n }\r\n\r\n select.addEventListener(\"focus\", () => { select.style.borderColor = this.theme.primary; });\r\n select.addEventListener(\"blur\", () => { select.style.borderColor = this.theme.border; });\r\n select.addEventListener(\"change\", () => {\r\n this.collectedFields[fieldKey] = select.value;\r\n updateSubmitState();\r\n });\r\n fieldWrap.appendChild(select);\r\n inputEls.push({ field, el: select });\r\n } else if (field.type === \"image\" || field.type === \"file\") {\r\n // File upload field \u2014 converts to base64 for API submission\r\n const fileInput = document.createElement(\"input\");\r\n fileInput.type = \"file\";\r\n fileInput.accept = \"image/*\";\r\n fileInput.style.cssText = `\r\n width:100%;padding:12px 16px;border-radius:12px;\r\n font-size:14px;font-weight:500;\r\n background:${this.theme.inputBg};\r\n color:${this.theme.text};\r\n border:2px dashed ${this.theme.border};\r\n outline:none;transition:border-color 0.2s ease;\r\n box-sizing:border-box;cursor:pointer;\r\n `;\r\n fileInput.addEventListener(\"focus\", () => {\r\n fileInput.style.borderColor = this.theme.primary;\r\n });\r\n fileInput.addEventListener(\"blur\", () => {\r\n fileInput.style.borderColor = this.theme.border;\r\n });\r\n fileInput.addEventListener(\"change\", () => {\r\n const file = fileInput.files?.[0];\r\n if (file) {\r\n const reader = new FileReader();\r\n reader.onload = () => {\r\n const base64 = (reader.result as string).split(\",\")[1] || \"\";\r\n this.collectedFields[fieldKey] = base64;\r\n updateSubmitState();\r\n };\r\n reader.readAsDataURL(file);\r\n }\r\n });\r\n fieldWrap.appendChild(fileInput);\r\n inputEls.push({ field, el: fileInput as any });\r\n } else {\r\n // Text input field\r\n const input = document.createElement(\"input\");\r\n input.type = \"text\";\r\n input.placeholder = `Enter ${field.label}`;\r\n input.maxLength = 50;\r\n input.style.cssText = `\r\n width:100%;padding:14px 16px;border-radius:12px;\r\n font-size:16px;font-weight:500;\r\n background:${this.theme.inputBg};\r\n color:${this.theme.text};\r\n border:2px solid ${this.theme.border};\r\n outline:none;transition:border-color 0.2s ease;\r\n box-sizing:border-box;\r\n letter-spacing:0.5px;\r\n `;\r\n input.addEventListener(\"focus\", () => {\r\n input.style.borderColor = this.theme.primary;\r\n });\r\n input.addEventListener(\"blur\", () => {\r\n input.style.borderColor = this.theme.border;\r\n });\r\n input.addEventListener(\"input\", () => {\r\n this.collectedFields[fieldKey] = input.value.trim();\r\n updateSubmitState();\r\n });\r\n fieldWrap.appendChild(input);\r\n inputEls.push({ field, el: input });\r\n }\r\n container.appendChild(fieldWrap);\r\n }\r\n\r\n // Error area\r\n const errorEl = document.createElement(\"div\");\r\n errorEl.id = \"sc-id-error\";\r\n errorEl.style.cssText = `\r\n color:${this.theme.error};font-size:13px;display:none;\r\n padding:8px 12px;border-radius:8px;background:${this.theme.errorBg};\r\n `;\r\n container.appendChild(errorEl);\r\n\r\n // Submit\r\n const submitBtn = this.createPrimaryButton(\"Verify & Continue\");\r\n submitBtn.disabled = true;\r\n submitBtn.style.opacity = \"0.5\";\r\n\r\n const updateSubmitState = () => {\r\n const allFilled = inputEls.every(({ el }) => el.value.trim().length > 0);\r\n submitBtn.disabled = !allFilled;\r\n submitBtn.style.opacity = allFilled ? \"1\" : \"0.5\";\r\n };\r\n\r\n submitBtn.addEventListener(\"click\", async () => {\r\n submitBtn.disabled = true;\r\n submitBtn.innerHTML = `<span style=\"display:inline-flex;align-items:center;justify-content:center;gap:8px;\"><span style=\"width:13px;height:13px;border-radius:50%;border:2px solid rgba(255,255,255,0.3);border-top-color:#fff;animation:sc-spin 0.6s linear infinite;display:inline-block;flex-shrink:0;\"></span>Verifying...</span>`;\r\n errorEl.style.display = \"none\";\r\n\r\n try {\r\n this.verificationResult = await this.sdk.onboarding.verify({\r\n identity_type_id: this.selectedChannelId,\r\n fields: { ...this.collectedFields },\r\n });\r\n\r\n if (this.verificationResult.status === \"verified\" || this.verificationResult.status === \"success\") {\r\n // Save the first collected field value as identifier for liveness\r\n const fieldValues = Object.values(this.collectedFields);\r\n this.idNumber = fieldValues[0] || \"\";\r\n // A4: Save identity_check_id from verify response to pass to liveness\r\n this.identityCheckId = (this.verificationResult as any).data?.identity_check_id || null;\r\n this.showStep(\"liveness\");\r\n } else {\r\n errorEl.textContent = this.verificationResult.message || \"Verification failed. Please check your details.\";\r\n errorEl.style.display = \"block\";\r\n submitBtn.textContent = \"Verify & Continue\";\r\n submitBtn.disabled = false;\r\n submitBtn.style.opacity = \"1\";\r\n }\r\n } catch (err: any) {\r\n // C3: Show field-level errors if available\r\n const fieldErrors = err.data?.errors;\r\n if (Array.isArray(fieldErrors) && fieldErrors.length > 0) {\r\n const messages = fieldErrors.map((e: any) => `${e.field}: ${e.message}`).join(\"\\n\");\r\n errorEl.textContent = messages;\r\n } else {\r\n errorEl.textContent = err.message || \"Verification failed\";\r\n }\r\n errorEl.style.display = \"block\";\r\n submitBtn.textContent = \"Verify & Continue\";\r\n submitBtn.disabled = false;\r\n submitBtn.style.opacity = \"1\";\r\n }\r\n });\r\n container.appendChild(submitBtn);\r\n\r\n\r\n // Focus first input\r\n const firstInput = inputEls[0]?.el;\r\n if (firstInput && firstInput instanceof HTMLInputElement) {\r\n setTimeout(() => firstInput.focus(), 350);\r\n }\r\n }\r\n\r\n // \u2500\u2500 Document Capture \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n \r\n private renderDocumentCapture(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;gap:16px;\";\r\n\r\n const title = this.createStepTitle(`Capture ${this.selectedIdTypeName || this.selectedIdType || \"your document\"}`);\r\n container.appendChild(title);\r\n\r\n const subtitle = document.createElement(\"div\");\r\n subtitle.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin-top:-8px;`;\r\n subtitle.textContent = \"Upload or capture your document photo. Ensure it's clear and readable.\";\r\n container.appendChild(subtitle);\r\n\r\n const captureContainer = document.createElement(\"div\");\r\n captureContainer.style.cssText = `\r\n width: 100%;\r\n max-width: 400px;\r\n margin: 0 auto;\r\n position: relative;\r\n overflow: hidden;\r\n border-radius: 12px;\r\n background: ${this.theme.cardBg};\r\n border: 2px solid ${this.theme.border};\r\n `;\r\n container.appendChild(captureContainer);\r\n\r\n // Use the new DocumentCapture component with front/back support\r\n this.docCapture = new DocumentCapture();\r\n this.docCapture\r\n .capture(captureContainer, this.theme, this.selectedIdTypeName || this.selectedIdType)\r\n .then(async (result: DocumentCaptureResult) => {\r\n await this.processDocumentCaptureResult(result, captureContainer, container);\r\n })\r\n .catch((err: any) => {\r\n console.error(\"Document capture failed:\", err);\r\n this.showErrorStep(err.message || \"Document capture failed. Please try again.\");\r\n });\r\n }\r\n\r\n // \u2500\u2500 Processing \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private renderProcessing(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;gap:20px;padding:20px 16px;min-height:400px;\";\r\n\r\n // Processing animation\r\n const animationWrap = document.createElement(\"div\");\r\n animationWrap.style.cssText = \"position:relative;width:80px;height:80px;\";\r\n\r\n const spinner = document.createElement(\"div\");\r\n spinner.style.cssText = `\r\n position:absolute;inset:0;border-radius:50%;\r\n border:4px solid ${this.theme.border};\r\n border-top-color:${this.theme.primary};\r\n animation:sc-spin 1s linear infinite;\r\n `;\r\n animationWrap.appendChild(spinner);\r\n\r\n const centerIcon = document.createElement(\"div\");\r\n centerIcon.style.cssText = `\r\n position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\r\n font-size:28px;\r\n `;\r\n centerIcon.textContent = \"\uD83D\uDD0D\";\r\n animationWrap.appendChild(centerIcon);\r\n container.appendChild(animationWrap);\r\n\r\n // Processing text\r\n const title = document.createElement(\"div\");\r\n title.style.cssText = `color:${this.theme.text};font-size:18px;font-weight:600;text-align:center;`;\r\n title.textContent = \"Processing Your Documents\";\r\n container.appendChild(title);\r\n\r\n const subtitle = document.createElement(\"div\");\r\n subtitle.style.cssText = `color:${this.theme.textSecondary};font-size:13px;text-align:center;max-width:280px;line-height:1.5;`;\r\n subtitle.textContent = \"Scanning and verifying your identity documents. This may take a few moments.\";\r\n container.appendChild(subtitle);\r\n\r\n // Processing steps\r\n const stepsContainer = document.createElement(\"div\");\r\n stepsContainer.style.cssText = `\r\n width:100%;max-width:400px;display:flex;flex-direction:column;gap:12px;\r\n margin-top:16px;\r\n `;\r\n\r\n const steps = [\r\n { id: 'uploading', text: 'Uploading documents', icon: '\uD83D\uDCE4' },\r\n { id: 'scanning', text: 'Scanning for information', icon: '\uD83D\uDD0D' },\r\n { id: 'verifying', text: 'Verifying authenticity', icon: '\u2713' },\r\n { id: 'analyzing', text: 'Analyzing document quality', icon: '\uD83D\uDD2C' }\r\n ];\r\n\r\n steps.forEach((step, index) => {\r\n const stepEl = document.createElement(\"div\");\r\n stepEl.style.cssText = `\r\n display:flex;align-items:center;gap:12px;padding:12px;border-radius:10px;\r\n background:${this.theme.cardBg};border:1px solid ${this.theme.border};\r\n transition:all 0.3s ease;\r\n `;\r\n stepEl.id = `processing-step-${step.id}`;\r\n\r\n const iconEl = document.createElement(\"div\");\r\n iconEl.style.cssText = `\r\n width:32px;height:32px;border-radius:8px;display:flex;align-items:center;justify-content:center;\r\n font-size:14px;background:${this.theme.shimmer};border:1px solid ${this.theme.border};\r\n `;\r\n iconEl.textContent = step.icon;\r\n iconEl.id = `step-icon-${step.id}`;\r\n\r\n const textEl = document.createElement(\"div\");\r\n textEl.style.cssText = `flex:1;color:${this.theme.textSecondary};font-size:13px;font-weight:500;`;\r\n textEl.textContent = step.text;\r\n textEl.id = `step-text-${step.id}`;\r\n\r\n const statusEl = document.createElement(\"div\");\r\n statusEl.style.cssText = `\r\n width:20px;height:20px;border-radius:50%;\r\n border:2px solid ${this.theme.border};\r\n position:relative;\r\n `;\r\n statusEl.id = `step-status-${step.id}`;\r\n\r\n stepEl.appendChild(iconEl);\r\n stepEl.appendChild(textEl);\r\n stepEl.appendChild(statusEl);\r\n stepsContainer.appendChild(stepEl);\r\n });\r\n\r\n container.appendChild(stepsContainer);\r\n\r\n // Start processing animation\r\n this.startProcessingAnimation();\r\n }\r\n\r\n private startProcessingAnimation(): void {\r\n const steps = ['uploading', 'scanning', 'verifying', 'analyzing'];\r\n let currentStepIndex = 0;\r\n\r\n const animateStep = (stepId: string) => {\r\n // Update step appearance\r\n const stepEl = document.getElementById(`processing-step-${stepId}`);\r\n const iconEl = document.getElementById(`step-icon-${stepId}`);\r\n const textEl = document.getElementById(`step-text-${stepId}`);\r\n const statusEl = document.getElementById(`step-status-${stepId}`);\r\n\r\n if (stepEl && iconEl && textEl && statusEl) {\r\n // Active state\r\n stepEl.style.borderColor = this.theme.primary;\r\n stepEl.style.background = `${this.theme.primary}10`;\r\n iconEl.style.background = this.theme.primary;\r\n iconEl.style.color = 'white';\r\n textEl.style.color = this.theme.text;\r\n textEl.style.fontWeight = '600';\r\n\r\n // Add spinner to status\r\n statusEl.innerHTML = `\r\n <div style=\"\r\n position:absolute;inset:2px;border-radius:50%;\r\n border:2px solid ${this.theme.border};\r\n border-top-color:${this.theme.primary};\r\n animation:sc-spin 0.8s linear infinite;\r\n \"></div>\r\n `;\r\n }\r\n\r\n // Move to next step after delay\r\n setTimeout(() => {\r\n // Complete current step\r\n if (stepEl && iconEl && textEl && statusEl) {\r\n stepEl.style.borderColor = this.theme.success;\r\n stepEl.style.background = `${this.theme.success}10`;\r\n iconEl.style.background = this.theme.success;\r\n statusEl.innerHTML = `\r\n <div style=\"\r\n position:absolute;inset:3px;border-radius:50%;\r\n background:${this.theme.success};\r\n display:flex;align-items:center;justify-content:center;\r\n color:white;font-size:10px;font-weight:bold;\r\n \">\u2713</div>\r\n `;\r\n }\r\n\r\n currentStepIndex++;\r\n if (currentStepIndex < steps.length) {\r\n animateStep(steps[currentStepIndex]);\r\n }\r\n }, 2000); // 2 seconds per step\r\n };\r\n\r\n // Start animation\r\n setTimeout(() => animateStep(steps[0]), 500);\r\n }\r\n\r\n \r\n /**\r\n * Process document capture result with front/back support\r\n */\r\n private async processDocumentCaptureResult(\r\n result: DocumentCaptureResult,\r\n captureContainer: HTMLElement,\r\n container: HTMLElement\r\n ): Promise<void> {\r\n // Store both front and back blobs\r\n this.documentBlob = result.front;\r\n this.documentBackBlob = result.back || null;\r\n \r\n // Process the front image through the existing flow\r\n await this.processDocumentBlob(result.front, captureContainer, container);\r\n \r\n // Log back image capture\r\n if (result.back) {\r\n console.log(\"Back image captured, size:\", result.back.size);\r\n }\r\n }\r\n\r\n /**\r\n * Process document blob - common method for both CameraView and DocumentCapture\r\n */\r\n private async processDocumentBlob(\r\n blob: Blob,\r\n captureContainer: HTMLElement,\r\n container: HTMLElement\r\n ): Promise<void> {\r\n const maxRetries = 2;\r\n let retryCount = 0;\r\n\r\n const attemptProcessing = async (): Promise<void> => {\r\n try {\r\n // Validate blob\r\n if (!blob || blob.size === 0) {\r\n throw new Error(\"Failed to capture document. Please try again.\");\r\n }\r\n if (blob.size > 2 * 1024 * 1024) {\r\n throw new Error(\"Document image is too large. Please retake in better lighting or use a clearer photo.\");\r\n }\r\n \r\n this.documentBlob = blob;\r\n\r\n // Show scanning state\r\n captureContainer.innerHTML = `\r\n <div style=\"display:flex;flex-direction:column;align-items:center;gap:14px;padding:28px 20px;\">\r\n <div style=\"position:relative;width:52px;height:52px;\">\r\n <div style=\"position:absolute;inset:0;border-radius:50%;border:3px solid ${this.theme.border};border-top-color:${this.theme.primary};animation:sc-spin 0.8s linear infinite;\"></div>\r\n <div style=\"position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:20px;\">\uD83D\uDD0D</div>\r\n </div>\r\n <div style=\"color:${this.theme.text};font-size:14px;font-weight:600;\">Scanning document...</div>\r\n <div style=\"color:${this.theme.textSecondary};font-size:12px;text-align:center;max-width:200px;line-height:1.5;\">Running OCR and verifying your identity</div>\r\n </div>`;\r\n\r\n // Create liveness entry with document\r\n const identifier = `DOC-${Date.now()}`;\r\n const COUNTRY_CODES: Record<string, string> = {\r\n nigeria: \"NG\", ghana: \"GH\", kenya: \"KE\",\r\n south_africa: \"ZA\", united_states: \"US\", united_kingdom: \"GB\", global: \"US\",\r\n };\r\n const country = COUNTRY_CODES[this.selectedCountry] || this.selectedCountry.toUpperCase().slice(0, 2);\r\n\r\n const deviceMeta = collectDeviceMetadata();\r\n let createResult;\r\n try {\r\n createResult = await this.sdk.liveness.create({\r\n identifier,\r\n identifier_type: this.selectedIdType,\r\n country,\r\n challenge_actions: [\"BLINK\", \"TURN_LEFT\", \"OPEN_MOUTH\"],\r\n document: blob,\r\n document_back: this.documentBackBlob || undefined,\r\n device_type: deviceMeta.device_type,\r\n os_name: deviceMeta.os_name,\r\n browser_timezone: deviceMeta.browser_timezone,\r\n fingerprint_id: deviceMeta.fingerprint_id,\r\n });\r\n } catch (apiError: any) {\r\n // Handle specific network and API errors\r\n if (apiError.message?.includes('fetch') || apiError.message?.includes('network') || apiError.code === 'NETWORK_ERROR') {\r\n throw new Error(\"Network connection failed. Please check your internet connection and try again.\");\r\n } else if (apiError.message?.includes('413') || apiError.message?.includes('too large')) {\r\n throw new Error(\"Document image is too large. Please use a smaller image or retake the photo.\");\r\n } else if (apiError.message?.includes('415') || apiError.message?.includes('format')) {\r\n throw new Error(\"Unsupported image format. Please use JPEG or PNG images.\");\r\n } else if (apiError.message?.includes('401') || apiError.message?.includes('unauthorized')) {\r\n throw new Error(\"Session expired. Please refresh the page and try again.\");\r\n } else if (apiError.message?.includes('429') || apiError.message?.includes('rate limit')) {\r\n throw new Error(\"Too many requests. Please wait a moment and try again.\");\r\n } else {\r\n throw new Error(apiError.message || \"Failed to process document. Please try again.\");\r\n }\r\n }\r\n\r\n this.livenessEntryId = createResult.id;\r\n\r\n // Check if document was expired\r\n const docOcr = (createResult as any).document_ocr;\r\n if (docOcr && docOcr.status === \"expired\") {\r\n throw new Error(docOcr.message || \"Document has expired. Please use a valid document.\");\r\n }\r\n\r\n // Check image quality\r\n const imgQuality = docOcr?.image_quality;\r\n const isBlurry = imgQuality?.is_blurry === true;\r\n const lowConfidence = imgQuality?.ocr_confidence !== undefined && imgQuality.ocr_confidence < 0.45;\r\n if (isBlurry || lowConfidence) {\r\n throw new Error(\"Image quality too low. Please ensure the document is well-lit and clearly visible.\");\r\n }\r\n\r\n // Show processing step instead of immediate success\r\n this.showStep(\"processing\");\r\n \r\n // Simulate processing time and then proceed to liveness\r\n setTimeout(() => {\r\n this.showStep(\"liveness\");\r\n }, 8000); // 8 seconds total processing time (4 steps \u00D7 2 seconds each)\r\n\r\n } catch (err: any) {\r\n console.error(\"Document processing failed:\", err);\r\n \r\n if (retryCount < maxRetries) {\r\n retryCount++;\r\n console.log(`Retrying document processing (attempt ${retryCount}/${maxRetries})`);\r\n \r\n // Show retry message\r\n if (captureContainer) {\r\n captureContainer.innerHTML = `\r\n <div style=\"display:flex;flex-direction:column;align-items:center;gap:16px;padding:28px 20px;text-align:center;\">\r\n <div style=\"position:relative;width:52px;height:52px;\">\r\n <div style=\"position:absolute;inset:0;border-radius:50%;border:3px solid ${this.theme.border};border-top-color:${this.theme.primary};animation:sc-spin 0.8s linear infinite;\"></div>\r\n <div style=\"position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:20px;\">\uD83D\uDD04</div>\r\n </div>\r\n <div style=\"color:${this.theme.text};font-size:14px;font-weight:600;\">Retrying...</div>\r\n <div style=\"color:${this.theme.textSecondary};font-size:12px;max-width:240px;line-height:1.5;\">Attempt ${retryCount} of ${maxRetries}</div>\r\n </div>`;\r\n }\r\n \r\n // Wait before retry\r\n await new Promise(resolve => setTimeout(resolve, 2000));\r\n return attemptProcessing();\r\n } else {\r\n // Final retry failed, show detailed error\r\n this.handleDocumentProcessingError(err, captureContainer);\r\n }\r\n }\r\n };\r\n\r\n await attemptProcessing();\r\n }\r\n\r\n private handleDocumentProcessingError(error: any, captureContainer: HTMLElement): void {\r\n let errorMessage = \"Document verification failed. Please try again.\";\r\n let canRetry = true;\r\n\r\n if (error.message) {\r\n if (error.message.includes(\"expired\")) {\r\n errorMessage = \"Document has expired. Please use a valid document.\";\r\n canRetry = false;\r\n } else if (error.message.includes(\"quality too low\")) {\r\n errorMessage = \"Image quality too low. Please ensure the document is well-lit and clearly visible.\";\r\n } else if (error.message.includes(\"Network\") || error.message.includes(\"fetch\")) {\r\n errorMessage = \"Network connection failed. Please check your internet connection and try again.\";\r\n } else if (error.message.includes(\"413\") || error.message.includes(\"too large\")) {\r\n errorMessage = \"Document image is too large. Please use a smaller image or retake the photo.\";\r\n } else if (error.message.includes(\"415\") || error.message.includes(\"format\")) {\r\n errorMessage = \"Unsupported image format. Please use JPEG or PNG images.\";\r\n }\r\n }\r\n\r\n if (captureContainer) {\r\n captureContainer.innerHTML = `\r\n <div style=\"display:flex;flex-direction:column;align-items:center;gap:16px;padding:28px 20px;text-align:center;\">\r\n <div style=\"width:56px;height:56px;border-radius:50%;background:${this.theme.errorBg || '#FEE'};border:3px solid ${this.theme.error || '#DC3545'};display:flex;align-items:center;justify-content:center;font-size:26px;\">\u274C</div>\r\n <div style=\"color:${this.theme.text};font-size:14px;font-weight:700;\">Verification Failed</div>\r\n <div style=\"color:${this.theme.textSecondary};font-size:13px;max-width:240px;line-height:1.6;\">${errorMessage}</div>\r\n ${canRetry ? `\r\n <button id=\"retry-btn\" style=\"\r\n margin-top:8px;padding:12px 24px;border-radius:8px;\r\n background:${this.theme.primary};color:white;\r\n border:none;font-size:14px;font-weight:600;cursor:pointer;\r\n transition:all 0.2s ease;\r\n \">Try Again</button>\r\n ` : ''}\r\n </div>`;\r\n\r\n if (canRetry) {\r\n const retryBtn = captureContainer.querySelector(\"#retry-btn\") as HTMLButtonElement;\r\n if (retryBtn) {\r\n retryBtn.addEventListener(\"click\", () => {\r\n this.showStep(\"document_capture\");\r\n });\r\n }\r\n }\r\n } else {\r\n this.showErrorStep(errorMessage);\r\n }\r\n }\r\n\r\n // \u2500\u2500 Liveness \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private renderLiveness(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;gap:16px;\";\r\n\r\n const title = this.createStepTitle(\"Face verification\");\r\n container.appendChild(title);\r\n\r\n const desc = document.createElement(\"div\");\r\n desc.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin-top:-8px;line-height:1.5;`;\r\n desc.textContent = \"Position your face in the oval and follow the on-screen instructions.\";\r\n container.appendChild(desc);\r\n\r\n // Liveness mount point\r\n const livenessContainer = document.createElement(\"div\");\r\n livenessContainer.style.cssText = \"margin:8px 0;\";\r\n container.appendChild(livenessContainer);\r\n\r\n const identifier = this.idNumber || `DOC-${Date.now()}`;\r\n const COUNTRY_CODES: Record<string, string> = {\r\n nigeria: \"NG\",\r\n ghana: \"GH\",\r\n kenya: \"KE\",\r\n south_africa: \"ZA\",\r\n united_states: \"US\",\r\n united_kingdom: \"GB\",\r\n global: \"US\",\r\n };\r\n const country = COUNTRY_CODES[this.selectedCountry] || this.selectedCountry.toUpperCase().slice(0, 2);\r\n\r\n // Start liveness check (this handles camera, detection, recording, submission)\r\n // If livenessEntryId exists (document flow), reuse it instead of creating a new one\r\n this.sdk.liveness\r\n .startCheck(\r\n livenessContainer,\r\n {\r\n identifier,\r\n identifier_type: this.selectedIdType,\r\n country,\r\n document: this.documentBlob || undefined,\r\n document_back: this.documentBackBlob || undefined,\r\n identity_check: this.identityCheckId || undefined,\r\n },\r\n [\"BLINK\", \"TURN_LEFT\", \"OPEN_MOUTH\"] as ChallengeAction[],\r\n this.livenessEntryId || undefined\r\n )\r\n .then((result) => {\r\n this.showResult(result);\r\n })\r\n .catch((err) => {\r\n this.showErrorStep(err.message || \"Liveness verification failed. Please try again.\");\r\n });\r\n }\r\n\r\n // \u2500\u2500 Result \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private showResult(submitResult: LivenessSubmitResponse): void {\r\n this.currentStep = \"result\";\r\n this.updateProgress();\r\n\r\n if (!this.contentArea) return;\r\n this.contentArea.innerHTML = \"\";\r\n\r\n const wrapper = document.createElement(\"div\");\r\n wrapper.style.cssText = `\r\n display:flex;flex-direction:column;align-items:center;\r\n text-align:center;gap:16px;padding:20px 0;\r\n opacity:0;transform:scale(0.95);transition:all 0.4s ease;\r\n `;\r\n\r\n // Icon \u2014 starts as a spinner, updates when status resolves\r\n const iconWrap = document.createElement(\"div\");\r\n iconWrap.style.cssText = `\r\n width:80px;height:80px;border-radius:50%;\r\n display:flex;align-items:center;justify-content:center;\r\n font-size:36px;\r\n background:${this.theme.cardBg};\r\n border:3px solid ${this.theme.border};\r\n `;\r\n iconWrap.innerHTML = `<div style=\"width:32px;height:32px;border-radius:50%;border:3px solid ${this.theme.border};border-top-color:${this.theme.primary};animation:sc-spin 0.9s linear infinite;\"></div>`;\r\n wrapper.appendChild(iconWrap);\r\n\r\n const title = document.createElement(\"h2\");\r\n title.style.cssText = `color:${this.theme.text};font-size:20px;font-weight:700;margin:0;`;\r\n title.textContent = \"Verification Submitted\";\r\n wrapper.appendChild(title);\r\n\r\n const desc = document.createElement(\"p\");\r\n desc.style.cssText = `color:${this.theme.textSecondary};font-size:14px;line-height:1.6;margin:0;max-width:300px;`;\r\n desc.textContent = \"Processing your identity check. This takes around 30 seconds.\";\r\n wrapper.appendChild(desc);\r\n\r\n // Details card\r\n const details = document.createElement(\"div\");\r\n details.style.cssText = `\r\n width:100%;padding:16px;border-radius:12px;\r\n background:${this.theme.cardBg};border:1px solid ${this.theme.border};\r\n text-align:left;\r\n `;\r\n // Status badge \u2014 mutable DOM node so polling can update it\r\n const statusBadge = document.createElement(\"span\");\r\n statusBadge.style.cssText = `font-size:12px;font-weight:600;color:${this.theme.warning};`;\r\n statusBadge.textContent = \"Processing\u2026\";\r\n\r\n const statusRow = document.createElement(\"div\");\r\n statusRow.style.cssText = \"display:flex;justify-content:space-between;margin-bottom:8px;\";\r\n statusRow.innerHTML = `<span style=\"color:${this.theme.textMuted};font-size:12px;\">Status</span>`;\r\n statusRow.appendChild(statusBadge);\r\n\r\n // Build rows via DOM (not innerHTML+=) to keep statusBadge live in the document\r\n const entryRow = document.createElement(\"div\");\r\n entryRow.style.cssText = \"display:flex;justify-content:space-between;margin-bottom:8px;\";\r\n entryRow.innerHTML = `\r\n <span style=\"color:${this.theme.textMuted};font-size:12px;\">Entry ID</span>\r\n <span style=\"color:${this.theme.text};font-size:12px;font-weight:600;\">${submitResult.id}</span>\r\n `;\r\n details.appendChild(entryRow);\r\n details.appendChild(statusRow);\r\n\r\n const submittedRow = document.createElement(\"div\");\r\n submittedRow.style.cssText = \"display:flex;justify-content:space-between;margin-top:8px;\";\r\n submittedRow.innerHTML = `\r\n <span style=\"color:${this.theme.textMuted};font-size:12px;\">Submitted</span>\r\n <span style=\"color:${this.theme.text};font-size:12px;\">${submitResult.submitted_at ? new Date(submitResult.submitted_at).toLocaleString() : \"Just now\"}</span>\r\n `;\r\n details.appendChild(submittedRow);\r\n wrapper.appendChild(details);\r\n\r\n // Failure reason \u2014 hidden until status = failed\r\n const failureMsg = document.createElement(\"div\");\r\n failureMsg.style.cssText = `\r\n display:none;width:100%;padding:12px 14px;border-radius:10px;\r\n background:${this.theme.errorBg};border:1px solid ${this.theme.error};\r\n color:${this.theme.error};font-size:12px;text-align:left;line-height:1.5;\r\n `;\r\n wrapper.appendChild(failureMsg);\r\n\r\n // Done button\r\n const doneBtn = this.createPrimaryButton(\"Done\");\r\n let finalStatus = submitResult.status as string;\r\n doneBtn.addEventListener(\"click\", () => {\r\n if (this._pollStatusTimer) { clearTimeout(this._pollStatusTimer); this._pollStatusTimer = null; }\r\n this.options.onComplete?.({\r\n entryId: submitResult.id,\r\n sessionId: this.sdk.sessionToken,\r\n status: finalStatus,\r\n submittedAt: submitResult.submitted_at,\r\n verificationResult: this.verificationResult || undefined,\r\n });\r\n this.close();\r\n });\r\n wrapper.appendChild(doneBtn);\r\n\r\n this.contentArea.appendChild(wrapper);\r\n\r\n requestAnimationFrame(() => {\r\n wrapper.style.opacity = \"1\";\r\n wrapper.style.transform = \"scale(1)\";\r\n });\r\n\r\n // Start polling for the async result\r\n this._startStatusPolling(\r\n submitResult.id,\r\n iconWrap,\r\n statusBadge,\r\n title,\r\n desc,\r\n failureMsg,\r\n (resolved) => { finalStatus = resolved; }\r\n );\r\n }\r\n\r\n private _startStatusPolling(\r\n entryId: number,\r\n iconWrap: HTMLElement,\r\n statusBadge: HTMLElement,\r\n title: HTMLElement,\r\n desc: HTMLElement,\r\n failureMsg: HTMLElement,\r\n onResolved: (status: string) => void\r\n ): void {\r\n const MAX_POLLS = 25; // 25 \u00D7 3 s = 75 s + 4 s initial = ~79 s max\r\n let polls = 0;\r\n\r\n // Hard 30 s UI timer \u2014 stops spinner even if backend is still processing\r\n let uiTimeoutId: ReturnType<typeof setTimeout> | null = setTimeout(() => {\r\n if (!this.isDestroyed) applyTimeout();\r\n }, 30000);\r\n const clearUiTimeout = () => { if (uiTimeoutId) { clearTimeout(uiTimeoutId); uiTimeoutId = null; } };\r\n\r\n const applyTimeout = () => {\r\n iconWrap.innerHTML = \"\u23F1\";\r\n iconWrap.style.background = this.theme.cardBg;\r\n iconWrap.style.border = `3px solid ${this.theme.warning}`;\r\n iconWrap.style.color = this.theme.warning;\r\n iconWrap.style.fontSize = \"30px\";\r\n statusBadge.style.color = this.theme.textMuted;\r\n statusBadge.textContent = \"Still processing\u2026\";\r\n title.textContent = \"Verification In Progress\";\r\n desc.textContent = \"Your verification is being processed. Your result will be delivered via your dashboard or webhook. You can safely close this.\";\r\n };\r\n\r\n const applyPassed = () => {\r\n clearUiTimeout();\r\n iconWrap.innerHTML = \"\u2713\";\r\n iconWrap.style.background = this.theme.successBg;\r\n iconWrap.style.border = `3px solid ${this.theme.success}`;\r\n iconWrap.style.color = this.theme.success;\r\n iconWrap.style.fontSize = \"36px\";\r\n statusBadge.style.color = this.theme.success;\r\n statusBadge.textContent = \"Verified \u2713\";\r\n title.textContent = \"Identity Verified\";\r\n desc.textContent = \"Your identity check passed successfully.\";\r\n };\r\n\r\n const applyFailed = (reason: string | null) => {\r\n clearUiTimeout();\r\n iconWrap.innerHTML = \"\u2715\";\r\n iconWrap.style.background = this.theme.errorBg;\r\n iconWrap.style.border = `3px solid ${this.theme.error}`;\r\n iconWrap.style.color = this.theme.error;\r\n iconWrap.style.fontSize = \"32px\";\r\n statusBadge.style.color = this.theme.error;\r\n statusBadge.textContent = \"Failed\";\r\n title.textContent = \"Verification Failed\";\r\n desc.textContent = \"Your identity check could not be completed.\";\r\n if (reason) {\r\n failureMsg.textContent = reason;\r\n failureMsg.style.display = \"block\";\r\n }\r\n };\r\n\r\n const poll = async () => {\r\n if (this.isDestroyed) return;\r\n polls++;\r\n try {\r\n const result = await this.sdk.liveness.pollResult(entryId);\r\n if (result.status === \"passed\") {\r\n onResolved(\"passed\");\r\n applyPassed();\r\n return;\r\n }\r\n if (result.status === \"failed\" || result.status === \"expired_document\") {\r\n onResolved(result.status);\r\n // Use backend failure_reason directly \u2014 it now contains clear actionable messages\r\n // e.g. \"ID photo quality too low \u2014 please retake in good lighting\"\r\n // or \"Your selfie does not match the photo on your ID\"\r\n const reason = result.failure_reason || (\r\n result.status === \"expired_document\"\r\n ? \"Your document has expired. Please use a valid ID.\"\r\n : \"Verification could not be completed. Please try again.\"\r\n );\r\n applyFailed(reason);\r\n return;\r\n }\r\n // Still pending/processing \u2014 schedule next poll if budget remains\r\n if (polls < MAX_POLLS && !this.isDestroyed) {\r\n this._pollStatusTimer = setTimeout(poll, 3000);\r\n } else if (!this.isDestroyed) {\r\n applyTimeout(); // budget exhausted \u2014 stop spinner, show timeout state\r\n }\r\n } catch {\r\n // Network hiccup \u2014 retry with a slightly longer delay\r\n if (polls < MAX_POLLS && !this.isDestroyed) {\r\n this._pollStatusTimer = setTimeout(poll, 5000);\r\n } else if (!this.isDestroyed) {\r\n applyTimeout(); // budget exhausted \u2014 stop spinner\r\n }\r\n }\r\n };\r\n\r\n // First poll after 4 s \u2014 gives Celery task time to complete\r\n this._pollStatusTimer = setTimeout(poll, 4000);\r\n }\r\n\r\n private renderResult(_container: HTMLElement): void {\r\n // Handled by showResult() directly\r\n }\r\n\r\n // \u2500\u2500 Error \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private showErrorStep(message: string): void {\r\n this.currentStep = \"error\";\r\n if (!this.contentArea) return;\r\n this.contentArea.innerHTML = \"\";\r\n\r\n const wrapper = document.createElement(\"div\");\r\n wrapper.style.cssText = `\r\n display:flex;flex-direction:column;align-items:center;\r\n text-align:center;gap:16px;padding:20px 0;\r\n `;\r\n\r\n const isCameraErr = /camera|permission|notallowed|notfound/i.test(message);\r\n const isNetworkErr = /network|timeout|connection|fetch/i.test(message);\r\n const isAuthErr = /session|token|expired|authentication/i.test(message);\r\n const errorIcon = isCameraErr ? \"\\uD83D\\uDCF7\" : isNetworkErr ? \"\\uD83D\\uDCE1\" : isAuthErr ? \"\\u23F1\" : \"\\u2717\";\r\n const errorTitle = isCameraErr ? \"Camera Access Required\"\r\n : isNetworkErr ? \"Connection Problem\"\r\n : isAuthErr ? \"Session Expired\"\r\n : \"Verification Failed\";\r\n\r\n const iconWrap = document.createElement(\"div\");\r\n iconWrap.style.cssText = `\r\n width:72px;height:72px;border-radius:50%;\r\n display:flex;align-items:center;justify-content:center;\r\n font-size:${errorIcon === \"\\u2717\" ? \"32px\" : \"28px\"};\r\n background:${this.theme.errorBg};\r\n border:3px solid ${this.theme.error};\r\n `;\r\n iconWrap.textContent = errorIcon;\r\n wrapper.appendChild(iconWrap);\r\n\r\n const title = document.createElement(\"h2\");\r\n title.style.cssText = `color:${this.theme.text};font-size:18px;font-weight:700;margin:0;`;\r\n title.textContent = errorTitle;\r\n wrapper.appendChild(title);\r\n\r\n const desc = document.createElement(\"p\");\r\n desc.style.cssText = `color:${this.theme.textSecondary};font-size:14px;line-height:1.6;margin:0;max-width:300px;`;\r\n desc.textContent = message;\r\n wrapper.appendChild(desc);\r\n\r\n const retryBtn = this.createPrimaryButton(\"Try Again\");\r\n retryBtn.addEventListener(\"click\", () => {\r\n // If session already exists, go back to welcome without re-initializing\r\n // (re-initializing would fail with CLIENT_ID_ALREADY_USED)\r\n if (this.sdk.sessionToken && this.sdkConfig) {\r\n this.showStep(\"welcome\");\r\n } else {\r\n // Only re-initialize if session was never created\r\n this.initialize();\r\n }\r\n });\r\n wrapper.appendChild(retryBtn);\r\n\r\n const closeBtn = this.createSecondaryButton(\"Close\");\r\n closeBtn.addEventListener(\"click\", () => {\r\n this.options.onError?.(new Error(message));\r\n this.close();\r\n });\r\n wrapper.appendChild(closeBtn);\r\n\r\n this.contentArea.appendChild(wrapper);\r\n }\r\n\r\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n // UI Helpers\r\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private createHeader(): HTMLElement {\r\n const header = document.createElement(\"div\");\r\n header.style.cssText = `\r\n display:flex;align-items:center;justify-content:space-between;\r\n padding:14px 20px;border-bottom:1px solid ${this.theme.border};\r\n `;\r\n\r\n // Left: back button + brand\r\n const leftArea = document.createElement(\"div\");\r\n leftArea.style.cssText = \"display:flex;align-items:center;gap:8px;min-width:0;\";\r\n\r\n this.headerBackBtn = document.createElement(\"button\");\r\n this.headerBackBtn.innerHTML = \"&#8592;\";\r\n this.headerBackBtn.style.cssText = `\r\n width:30px;height:30px;border-radius:8px;flex-shrink:0;\r\n display:none;align-items:center;justify-content:center;\r\n border:1.5px solid ${this.theme.border};cursor:pointer;\r\n font-size:16px;line-height:1;\r\n background:${this.theme.cardBg};color:${this.theme.text};\r\n transition:all 0.2s ease;\r\n `;\r\n this.headerBackBtn.addEventListener(\"mouseenter\", () => {\r\n if (this.headerBackBtn) {\r\n this.headerBackBtn.style.background = this.theme.shimmer;\r\n }\r\n });\r\n this.headerBackBtn.addEventListener(\"mouseleave\", () => {\r\n if (this.headerBackBtn) {\r\n this.headerBackBtn.style.background = this.theme.cardBg;\r\n }\r\n });\r\n leftArea.appendChild(this.headerBackBtn);\r\n\r\n this.brandLabel = document.createElement(\"div\");\r\n this.brandLabel.style.cssText = `\r\n font-size:15px;font-weight:700;color:${this.theme.text};\r\n white-space:nowrap;overflow:hidden;text-overflow:ellipsis;\r\n `;\r\n this.brandLabel.textContent = this.sdkConfig?.brand_name || \"SmartComply\";\r\n leftArea.appendChild(this.brandLabel);\r\n header.appendChild(leftArea);\r\n\r\n // Step indicator\r\n this.stepLabel = document.createElement(\"div\");\r\n this.stepLabel.style.cssText = `\r\n font-size:12px;color:${this.theme.textMuted};\r\n font-variant-numeric:tabular-nums;flex-shrink:0;\r\n `;\r\n header.appendChild(this.stepLabel);\r\n\r\n // Close button\r\n const closeBtn = document.createElement(\"button\");\r\n closeBtn.innerHTML = \"\u2715\";\r\n closeBtn.style.cssText = `\r\n width:32px;height:32px;border-radius:8px;flex-shrink:0;\r\n display:flex;align-items:center;justify-content:center;\r\n border:none;cursor:pointer;font-size:16px;\r\n background:${this.theme.shimmer};color:${this.theme.textMuted};\r\n transition:all 0.2s ease;\r\n `;\r\n closeBtn.addEventListener(\"mouseenter\", () => {\r\n closeBtn.style.background = this.theme.errorBg;\r\n closeBtn.style.color = this.theme.error;\r\n });\r\n closeBtn.addEventListener(\"mouseleave\", () => {\r\n closeBtn.style.background = this.theme.shimmer;\r\n closeBtn.style.color = this.theme.textMuted;\r\n });\r\n closeBtn.addEventListener(\"click\", () => this.close());\r\n header.appendChild(closeBtn);\r\n\r\n return header;\r\n }\r\n\r\n private createFooter(): HTMLElement {\r\n const footer = document.createElement(\"div\");\r\n footer.style.cssText = `\r\n padding:12px 20px;border-top:1px solid ${this.theme.border};\r\n display:flex;align-items:center;justify-content:center;gap:6px;\r\n `;\r\n\r\n const powered = document.createElement(\"span\");\r\n powered.style.cssText = `font-size:11px;color:${this.theme.textMuted};`;\r\n powered.textContent = \"Powered by \";\r\n\r\n const brand = document.createElement(\"span\");\r\n brand.style.cssText = `font-size:11px;font-weight:700;color:${this.theme.primary};`;\r\n brand.textContent = \"Adhere\";\r\n\r\n footer.appendChild(powered);\r\n footer.appendChild(brand);\r\n return footer;\r\n }\r\n\r\n private createStepTitle(text: string): HTMLElement {\r\n const el = document.createElement(\"h3\");\r\n el.style.cssText = `\r\n color:${this.theme.text};font-size:18px;font-weight:700;\r\n margin:0;\r\n `;\r\n el.textContent = text;\r\n return el;\r\n }\r\n\r\n private createOptionCard(\r\n title: string,\r\n subtitle: string,\r\n onClick: () => void\r\n ): HTMLElement {\r\n const card = document.createElement(\"button\");\r\n card.style.cssText = `\r\n width:100%;padding:16px;border-radius:12px;\r\n background:${this.theme.cardBg};\r\n border:2px solid ${this.theme.border};\r\n cursor:pointer;text-align:left;\r\n display:flex;align-items:center;justify-content:space-between;\r\n transition:all 0.2s ease;\r\n `;\r\n card.addEventListener(\"mouseenter\", () => {\r\n card.style.borderColor = this.theme.primary;\r\n card.style.background = this.theme.shimmer;\r\n card.style.transform = \"translateY(-1px)\";\r\n });\r\n card.addEventListener(\"mouseleave\", () => {\r\n card.style.borderColor = this.theme.border;\r\n card.style.background = this.theme.cardBg;\r\n card.style.transform = \"translateY(0)\";\r\n });\r\n card.addEventListener(\"click\", onClick);\r\n\r\n const textWrap = document.createElement(\"div\");\r\n\r\n const titleEl = document.createElement(\"div\");\r\n titleEl.style.cssText = `color:${this.theme.text};font-size:14px;font-weight:600;`;\r\n titleEl.textContent = title;\r\n textWrap.appendChild(titleEl);\r\n\r\n if (subtitle) {\r\n const subEl = document.createElement(\"div\");\r\n subEl.style.cssText = `color:${this.theme.textMuted};font-size:12px;margin-top:2px;`;\r\n subEl.textContent = subtitle;\r\n textWrap.appendChild(subEl);\r\n }\r\n\r\n const arrow = document.createElement(\"span\");\r\n arrow.style.cssText = `color:${this.theme.textMuted};font-size:18px;flex-shrink:0;`;\r\n arrow.textContent = \"\u2192\";\r\n\r\n card.appendChild(textWrap);\r\n card.appendChild(arrow);\r\n return card;\r\n }\r\n\r\n private createPrimaryButton(text: string): HTMLButtonElement {\r\n const btn = document.createElement(\"button\");\r\n btn.textContent = text;\r\n btn.style.cssText = `\r\n width:100%;padding:14px;border-radius:12px;\r\n font-size:15px;font-weight:600;\r\n background:${this.theme.primary};color:#fff;\r\n border:none;cursor:pointer;\r\n transition:all 0.2s ease;\r\n box-shadow:0 2px 8px ${this.theme.primaryGlow};\r\n `;\r\n btn.addEventListener(\"mouseenter\", () => {\r\n btn.style.background = this.theme.primaryHover;\r\n btn.style.transform = \"translateY(-1px)\";\r\n });\r\n btn.addEventListener(\"mouseleave\", () => {\r\n btn.style.background = this.theme.primary;\r\n btn.style.transform = \"translateY(0)\";\r\n });\r\n return btn;\r\n }\r\n\r\n private createSecondaryButton(text: string): HTMLButtonElement {\r\n const btn = document.createElement(\"button\");\r\n btn.textContent = text;\r\n btn.style.cssText = `\r\n width:100%;padding:12px;border-radius:12px;\r\n font-size:14px;font-weight:500;\r\n background:transparent;color:${this.theme.textSecondary};\r\n border:none;cursor:pointer;\r\n transition:all 0.2s ease;\r\n `;\r\n btn.addEventListener(\"mouseenter\", () => {\r\n btn.style.color = this.theme.text;\r\n });\r\n btn.addEventListener(\"mouseleave\", () => {\r\n btn.style.color = this.theme.textSecondary;\r\n });\r\n return btn;\r\n }\r\n\r\n private isDocumentFlow(): boolean {\r\n // 1. Check verification_type \u2014 handle both string and array from backend\r\n const vType = this.sdkConfig?.verification_type;\r\n if (vType) {\r\n const types: string[] = Array.isArray(vType) ? vType : [vType];\r\n if (types.includes(\"document_verification\")) return true;\r\n if (types.includes(\"data_verification\")) return false;\r\n }\r\n // 2. Fallback: inspect channel fields \u2014 any upload field = document flow\r\n const channels = this.sdkConfig?.channels || {};\r\n const allFields = (Object.values(channels) as any[])\r\n .flat()\r\n .flatMap((ch: any) => ch.fields || []);\r\n return allFields.some((f: any) => f.type === \"upload\");\r\n }\r\n\r\n private updateProgress(): void {\r\n const isDocFlow = this.isDocumentFlow();\r\n const countries = Object.keys(this.sdkConfig?.channels || {});\r\n const singleCountry = countries.length <= 1;\r\n\r\n // User-action steps only (what the user actually does \u2014 no loading/welcome/result)\r\n const actionSteps: StepName[] = (\r\n [\"country\", \"id_type\", isDocFlow ? \"document_capture\" : \"id_input\", \"liveness\"] as StepName[]\r\n ).filter((s) => !(s === \"country\" && singleCountry));\r\n\r\n const totalSteps = actionSteps.length;\r\n const actionIndex = actionSteps.indexOf(this.currentStep);\r\n\r\n const pct =\r\n this.currentStep === \"result\" ? 100\r\n : actionIndex >= 0 ? ((actionIndex + 1) / totalSteps) * 100\r\n : 0;\r\n\r\n if (this.progressBar) {\r\n this.progressBar.style.width = `${pct}%`;\r\n }\r\n if (this.stepLabel) {\r\n if (this.currentStep === \"loading\" || this.currentStep === \"welcome\") {\r\n this.stepLabel.textContent = \"\";\r\n } else if (this.currentStep === \"result\") {\r\n this.stepLabel.textContent = \"Complete \u2713\";\r\n } else if (actionIndex >= 0) {\r\n this.stepLabel.textContent = `Step ${actionIndex + 1} of ${totalSteps}`;\r\n } else {\r\n this.stepLabel.textContent = \"\";\r\n }\r\n }\r\n\r\n // Back button \u2014 show in header for navigable steps, hidden elsewhere\r\n if (this.headerBackBtn) {\r\n const countries = Object.keys(this.sdkConfig?.channels || {});\r\n const backTargets: Partial<Record<StepName, () => void>> = {\r\n id_type: () => this.showStep(countries.length > 1 ? \"country\" : \"welcome\"),\r\n country: () => this.showStep(\"welcome\"),\r\n id_input: () => this.showStep(\"id_type\"),\r\n document_capture: () => { this.docCapture?.destroy(); this.showStep(\"id_type\"); },\r\n };\r\n const backAction = backTargets[this.currentStep];\r\n if (backAction) {\r\n this.headerBackBtn.style.display = \"flex\";\r\n const newBtn = this.headerBackBtn.cloneNode(true) as HTMLButtonElement;\r\n newBtn.style.cssText = this.headerBackBtn.style.cssText;\r\n this.headerBackBtn.parentNode?.replaceChild(newBtn, this.headerBackBtn);\r\n this.headerBackBtn = newBtn;\r\n this.headerBackBtn.addEventListener(\"mouseenter\", () => {\r\n if (this.headerBackBtn) this.headerBackBtn.style.background = this.theme.shimmer;\r\n });\r\n this.headerBackBtn.addEventListener(\"mouseleave\", () => {\r\n if (this.headerBackBtn) this.headerBackBtn.style.background = this.theme.cardBg;\r\n });\r\n this.headerBackBtn.addEventListener(\"click\", backAction);\r\n } else {\r\n this.headerBackBtn.style.display = \"none\";\r\n }\r\n }\r\n }\r\n\r\n private applyTheme(): void {\r\n if (this.overlay) {\r\n this.overlay.style.background = this.theme.overlay;\r\n }\r\n if (this.modal) {\r\n this.modal.style.background = this.theme.bg;\r\n this.modal.style.boxShadow = this.theme.shadow;\r\n }\r\n }\r\n\r\n private injectStyles(): void {\r\n if (document.getElementById(\"sc-flow-styles\")) return;\r\n\r\n const style = document.createElement(\"style\");\r\n style.id = \"sc-flow-styles\";\r\n style.textContent = `\r\n @keyframes sc-spin {\r\n to { transform: rotate(360deg); }\r\n }\r\n @keyframes sc-pop {\r\n 0% { transform: scale(0.8); opacity: 0; }\r\n 50% { transform: scale(1.05); }\r\n 100% { transform: scale(1); opacity: 1; }\r\n }\r\n #sc-flow-modal * {\r\n box-sizing: border-box;\r\n }\r\n #sc-flow-modal::-webkit-scrollbar {\r\n width: 4px;\r\n }\r\n #sc-flow-content::-webkit-scrollbar {\r\n width: 4px;\r\n }\r\n #sc-flow-content::-webkit-scrollbar-thumb {\r\n background: rgba(128,128,128,0.3);\r\n border-radius: 4px;\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n}\r\n", "/**\r\n * Lightweight SDK logger.\r\n *\r\n * Debug output is suppressed in production. Enable verbose logging by calling\r\n * SDKLogger.setDebug(true) before initialising the SDK, or by setting the\r\n * global flag: window.__SC_DEBUG__ = true\r\n */\r\n\r\nconst PREFIX = \"[SmartComply SDK]\";\r\n\r\nfunction isDebugEnabled(): boolean {\r\n try {\r\n return !!(window as any).__SC_DEBUG__;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nexport const SDKLogger = {\r\n /** Emit an informational message (debug mode only). */\r\n info(message: string, ...args: unknown[]): void {\r\n if (!isDebugEnabled()) return;\r\n console.info(`${PREFIX} \u2139 ${message}`, ...args);\r\n },\r\n\r\n /** Emit a warning (always visible). */\r\n warn(message: string, ...args: unknown[]): void {\r\n console.warn(`${PREFIX} \u26A0 ${message}`, ...args);\r\n },\r\n\r\n /** Emit an error (always visible). */\r\n error(message: string, ...args: unknown[]): void {\r\n console.error(`${PREFIX} \u2716 ${message}`, ...args);\r\n },\r\n\r\n /** Emit a debug trace (debug mode only \u2014 lowest priority). */\r\n debug(message: string, ...args: unknown[]): void {\r\n if (!isDebugEnabled()) return;\r\n console.debug(`${PREFIX} \u2B21 ${message}`, ...args);\r\n },\r\n\r\n /** Log a timed group of related messages (debug mode only). */\r\n group(label: string, fn: () => void): void {\r\n if (!isDebugEnabled()) { fn(); return; }\r\n console.group(`${PREFIX} ${label}`);\r\n fn();\r\n console.groupEnd();\r\n },\r\n\r\n /**\r\n * Enable or disable verbose debug output at runtime.\r\n *\r\n * Example:\r\n * import { SDKLogger } from \"smartcomply-web-sdk\";\r\n * SDKLogger.setDebug(true);\r\n */\r\n setDebug(enabled: boolean): void {\r\n try {\r\n (window as any).__SC_DEBUG__ = enabled;\r\n } catch {\r\n /* no-op in non-browser environments */\r\n }\r\n },\r\n};\r\n", "/**\r\n * Camera permission utilities.\r\n *\r\n * Provides helpers to check, request and handle camera permissions in a\r\n * browser-consistent way. All functions are purely async and do NOT throw \u2014\r\n * they return a typed result so callers can handle each case explicitly.\r\n */\r\n\r\nexport type PermissionStatus =\r\n | \"granted\" // camera already accessible\r\n | \"prompt\" // permission dialog will appear on request\r\n | \"denied\" // user previously denied; cannot request again\r\n | \"unsupported\" // Permissions API or getUserMedia not available\r\n | \"unknown\"; // couldn't determine status\r\n\r\nexport interface CameraPermissionResult {\r\n status: PermissionStatus;\r\n /** Human-readable reason (populated on denied / unsupported). */\r\n reason?: string;\r\n}\r\n\r\n/**\r\n * Query the current camera permission state without prompting the user.\r\n *\r\n * Uses the Permissions API when available, falls back to \"unknown\" on older\r\n * browsers (e.g. Safari < 16).\r\n */\r\nexport async function queryCameraPermission(): Promise<CameraPermissionResult> {\r\n if (typeof navigator === \"undefined\" || !navigator.mediaDevices) {\r\n return { status: \"unsupported\", reason: \"getUserMedia is not supported in this browser.\" };\r\n }\r\n\r\n if (!navigator.permissions?.query) {\r\n return { status: \"unknown\" };\r\n }\r\n\r\n try {\r\n const result = await navigator.permissions.query({ name: \"camera\" as PermissionName });\r\n return { status: result.state as PermissionStatus };\r\n } catch {\r\n return { status: \"unknown\" };\r\n }\r\n}\r\n\r\n/**\r\n * Request camera access and return the resulting MediaStream.\r\n *\r\n * Maps browser-specific errors onto actionable `CameraPermissionResult`\r\n * values so callers can show the right UI instead of catching raw DOMExceptions.\r\n *\r\n * @param constraints - Optional MediaStreamConstraints override.\r\n */\r\nexport async function requestCameraAccess(\r\n constraints?: MediaStreamConstraints\r\n): Promise<{ stream: MediaStream; permission: CameraPermissionResult }> {\r\n const defaults: MediaStreamConstraints = {\r\n video: { facingMode: \"user\", width: { ideal: 640 }, height: { ideal: 480 } },\r\n audio: false,\r\n };\r\n\r\n try {\r\n const stream = await navigator.mediaDevices.getUserMedia(constraints ?? defaults);\r\n return { stream, permission: { status: \"granted\" } };\r\n } catch (err: any) {\r\n const name: string = err?.name ?? \"\";\r\n\r\n if (name === \"NotAllowedError\" || name === \"PermissionDeniedError\") {\r\n return {\r\n stream: null as any,\r\n permission: {\r\n status: \"denied\",\r\n reason: \"Camera access was denied. Please allow camera permissions in your browser settings and try again.\",\r\n },\r\n };\r\n }\r\n\r\n if (name === \"NotFoundError\" || name === \"DevicesNotFoundError\") {\r\n return {\r\n stream: null as any,\r\n permission: {\r\n status: \"unsupported\",\r\n reason: \"No camera was found. Please connect a camera and try again.\",\r\n },\r\n };\r\n }\r\n\r\n if (name === \"NotReadableError\" || name === \"TrackStartError\") {\r\n return {\r\n stream: null as any,\r\n permission: {\r\n status: \"unknown\",\r\n reason: \"Camera is already in use by another application. Please close it and try again.\",\r\n },\r\n };\r\n }\r\n\r\n return {\r\n stream: null as any,\r\n permission: {\r\n status: \"unknown\",\r\n reason: err?.message ?? \"Unable to access the camera.\",\r\n },\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Stop all tracks on a MediaStream and release the camera.\r\n * Safe to call with null/undefined.\r\n */\r\nexport function releaseCameraStream(stream: MediaStream | null | undefined): void {\r\n if (!stream) return;\r\n stream.getTracks().forEach((t) => t.stop());\r\n}\r\n\r\n/**\r\n * Returns true if the browser supports the camera APIs needed by the SDK.\r\n */\r\nexport function isCameraSupported(): boolean {\r\n return (\r\n typeof navigator !== \"undefined\" &&\r\n !!navigator.mediaDevices?.getUserMedia &&\r\n typeof MediaRecorder !== \"undefined\"\r\n );\r\n}\r\n", "/**\r\n * SDK-wide constants \u2014 single source of truth for limits, defaults and\r\n * backend-defined magic values.\r\n */\r\n\r\n// \u2500\u2500 API endpoints \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nexport const ENDPOINTS = {\r\n SESSION_CREATE: \"/v1/session/create/\",\r\n SDK_INITIALIZE: \"/v1/initialize/\",\r\n ONBOARDING_VERIFY: \"/v1/onboarding/verify/\",\r\n LIVENESS_CREATE: \"/v1/sdk/liveness/create/\",\r\n LIVENESS_SUBMIT: \"/v1/sdk/liveness/submit/\",\r\n AVAILABLE_CHANNELS: \"/v1/available-channels/\",\r\n} as const;\r\n\r\n// \u2500\u2500 Session \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n/** Backend session TTL in milliseconds (30 minutes). */\r\nexport const SESSION_TTL_MS = 30 * 60 * 1000;\r\n\r\n/** Warn the user this many ms before session expires. */\r\nexport const SESSION_WARN_BEFORE_MS = 2 * 60 * 1000;\r\n\r\n// \u2500\u2500 Network \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n/** Default request timeout in milliseconds. */\r\nexport const DEFAULT_TIMEOUT_MS = 30_000;\r\n\r\n/** Number of automatic retries on transient network errors. */\r\nexport const MAX_RETRIES = 2;\r\n\r\n/** Delay between retries in milliseconds. */\r\nexport const RETRY_DELAY_MS = 1_000;\r\n\r\n// \u2500\u2500 File uploads \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n/** Maximum document image size the backend accepts (5 MB). */\r\nexport const MAX_DOCUMENT_BYTES = 5 * 1024 * 1024;\r\n\r\n/** Maximum video size the backend accepts (50 MB). */\r\nexport const MAX_VIDEO_BYTES = 50 * 1024 * 1024;\r\n\r\n/** Maximum snapshot / autoshot size (2 MB). */\r\nexport const MAX_SNAPSHOT_BYTES = 2 * 1024 * 1024;\r\n\r\n/** Accepted MIME types for document images. */\r\nexport const ACCEPTED_IMAGE_TYPES = [\"image/jpeg\", \"image/png\", \"image/webp\"] as const;\r\n\r\n/** JPEG quality used when encoding captured frames (0\u20131). */\r\nexport const CAPTURE_JPEG_QUALITY = 0.92;\r\n\r\n// \u2500\u2500 Liveness challenge \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n/** Backend-accepted challenge actions (UPPERCASE). */\r\nexport const CHALLENGE_ACTIONS = [\"BLINK\", \"TURN_LEFT\", \"TURN_RIGHT\", \"TURN_HEAD\", \"OPEN_MOUTH\"] as const;\r\n\r\n/** Default set sent when the caller does not specify actions. */\r\nexport const DEFAULT_CHALLENGE_ACTIONS = [\"BLINK\", \"TURN_LEFT\", \"OPEN_MOUTH\"] as const;\r\n\r\n/** Time limit per liveness attempt in seconds. */\r\nexport const LIVENESS_TIME_LIMIT_SECONDS = 45;\r\n\r\n/** Milliseconds to pause after all actions before capturing the final snapshot. */\r\nexport const POST_ACTION_SETTLE_MS = 800;\r\n\r\n// \u2500\u2500 Camera \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n/** Ideal resolution for the front-facing liveness camera. */\r\nexport const CAMERA_IDEAL_WIDTH = 640;\r\nexport const CAMERA_IDEAL_HEIGHT = 480;\r\n\r\n/** Ideal resolution for rear-facing document capture camera. */\r\nexport const DOC_CAMERA_IDEAL_WIDTH = 1280;\r\nexport const DOC_CAMERA_IDEAL_HEIGHT = 960;\r\n\r\n/** Video bitrate used by MediaRecorder for liveness recordings (~1.4 MB / 45 s). */\r\nexport const RECORDING_BITS_PER_SECOND = 250_000;\r\n\r\n// \u2500\u2500 Face detection \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n/** Max milliseconds to wait for an initial face detection before proceeding. */\r\nexport const FACE_DETECT_TIMEOUT_MS = 10_000;\r\n\r\n/** Polling interval for the face-present check (ms). */\r\nexport const FACE_DETECT_POLL_MS = 100;\r\n\r\n// \u2500\u2500 UI / UX \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n/** How long (ms) the success overlay is shown before the flow advances. */\r\nexport const RESULT_OVERLAY_DURATION_MS = 2_800;\r\n\r\n/** localStorage key used to persist the browser fingerprint ID. */\r\nexport const FINGERPRINT_STORAGE_KEY = \"_adhere_fid\";\r\n\r\n/** z-index for the SDK overlay \u2014 high enough to sit above any app content. */\r\nexport const OVERLAY_Z_INDEX = 99_999;\r\n", "/**\r\n * LivenessUploader \u2014 thin wrapper around the HttpClient's uploadWithSession()\r\n * that adds:\r\n * - Progress callbacks (onProgress)\r\n * - Upload cancellation via AbortController\r\n * - Automatic retry on transient network failure (configurable)\r\n *\r\n * Used internally by LivenessModule.create() and LivenessModule.submit() when\r\n * the caller needs progress reporting (e.g. for a progress bar during video\r\n * upload on slow connections).\r\n */\r\n\r\nimport { HttpClient } from \"../../client/HttpClient\";\r\nimport { MAX_RETRIES, RETRY_DELAY_MS } from \"../../utils/constants\";\r\nimport { SDKLogger } from \"../../utils/logger\";\r\n\r\nexport interface UploadOptions {\r\n /** Called with a value 0\u20131 as the upload progresses. */\r\n onProgress?: (fraction: number) => void;\r\n\r\n /** Optional AbortSignal to cancel the upload mid-flight. */\r\n signal?: AbortSignal;\r\n\r\n /** Override the default number of retries on transient errors. */\r\n retries?: number;\r\n}\r\n\r\nexport class LivenessUploader {\r\n constructor(private http: HttpClient) {}\r\n\r\n /**\r\n * Upload a FormData payload to `path` with optional progress and\r\n * cancellation support.\r\n *\r\n * Falls back to the standard `uploadWithSession()` on browsers that do not\r\n * support XMLHttpRequest upload progress (very rare).\r\n */\r\n async upload<T>(\r\n path: string,\r\n formData: FormData,\r\n options: UploadOptions = {}\r\n ): Promise<T> {\r\n const { onProgress, signal, retries = MAX_RETRIES } = options;\r\n\r\n // If no progress callback is needed, delegate straight to HttpClient\r\n // which already has retry logic built in.\r\n if (!onProgress) {\r\n return this.http.uploadWithSession<T>(path, formData);\r\n }\r\n\r\n return this.uploadWithProgress<T>(path, formData, onProgress, signal, retries);\r\n }\r\n\r\n // \u2500\u2500 Private \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private async uploadWithProgress<T>(\r\n path: string,\r\n formData: FormData,\r\n onProgress: (fraction: number) => void,\r\n signal: AbortSignal | undefined,\r\n retriesLeft: number\r\n ): Promise<T> {\r\n const sessionToken = (this.http as any).sessionToken as string | null;\r\n if (!sessionToken) {\r\n throw new Error(\"SDK: No session token. Call sdk.createSession() first.\");\r\n }\r\n\r\n const baseUrl: string = (this.http as any).baseUrl as string;\r\n\r\n return new Promise<T>((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n\r\n // Propagate AbortSignal to XHR\r\n if (signal) {\r\n if (signal.aborted) {\r\n reject(new DOMException(\"Upload cancelled\", \"AbortError\"));\r\n return;\r\n }\r\n signal.addEventListener(\"abort\", () => xhr.abort(), { once: true });\r\n }\r\n\r\n xhr.open(\"POST\", `${baseUrl}${path}`, true);\r\n xhr.setRequestHeader(\"x-access-token\", sessionToken);\r\n\r\n xhr.upload.onprogress = (evt) => {\r\n if (evt.lengthComputable) {\r\n onProgress(evt.loaded / evt.total);\r\n }\r\n };\r\n\r\n xhr.onload = () => {\r\n onProgress(1);\r\n\r\n let envelope: any;\r\n try {\r\n envelope = JSON.parse(xhr.responseText);\r\n } catch {\r\n reject(new Error(`SDK: Non-JSON response from ${path} (${xhr.status})`));\r\n return;\r\n }\r\n\r\n if (xhr.status >= 200 && xhr.status < 300 && envelope.status !== \"error\") {\r\n SDKLogger.info(`Upload to ${path} succeeded`, { status: xhr.status });\r\n resolve(envelope.data as T);\r\n } else {\r\n const err = new Error(envelope.message || `Upload to ${path} failed (${xhr.status})`);\r\n (err as any).statusCode = xhr.status;\r\n (err as any).code = envelope.code;\r\n reject(err);\r\n }\r\n };\r\n\r\n xhr.onerror = async () => {\r\n SDKLogger.warn(`Upload to ${path} failed \u2014 network error`, { retriesLeft });\r\n\r\n if (retriesLeft > 0) {\r\n await new Promise((r) => setTimeout(r, RETRY_DELAY_MS));\r\n try {\r\n const result = await this.uploadWithProgress<T>(\r\n path, formData, onProgress, signal, retriesLeft - 1\r\n );\r\n resolve(result);\r\n } catch (retryErr) {\r\n reject(retryErr);\r\n }\r\n } else {\r\n reject(new Error(`SDK: Upload to ${path} failed after all retries.`));\r\n }\r\n };\r\n\r\n xhr.onabort = () => {\r\n reject(new DOMException(\"Upload cancelled by user\", \"AbortError\"));\r\n };\r\n\r\n xhr.send(formData);\r\n });\r\n }\r\n}\r\n"],
5
+ "mappings": "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GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,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",
6
6
  "names": ["r", "ua", "e", "e", "n", "r", "i", "s", "t", "o", "a", "c", "h", "u", "l", "f", "bs", "bs", "a", "s", "i", "m", "ui", "r", "RETRY_DELAY_MS", "b", "i", "n", "y", "x", "l", "style", "e", "t", "x", "y", "w", "h", "i", "u", "t", "i", "f", "subtitle", "e", "s", "countries", "style", "fn", "t", "r"]
7
7
  }