claude-coach 0.0.2 → 0.0.4

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.
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
- import { configExists, loadConfig, promptForConfig, saveConfig, getDbPath, createConfig, } from "./lib/config.js";
1
+ import { configExists, loadConfig, promptForConfig, saveConfig, saveTokens, getDbPath, createConfig, } from "./lib/config.js";
2
2
  import { log } from "./lib/logging.js";
3
3
  import { migrate } from "./db/migrate.js";
4
- import { execute } from "./db/client.js";
4
+ import { execute, initDatabase, query, queryJson } from "./db/client.js";
5
5
  import { getValidTokens } from "./strava/oauth.js";
6
6
  import { getAllActivities, getAthlete } from "./strava/api.js";
7
7
  import { readFileSync, writeFileSync } from "fs";
@@ -20,6 +20,12 @@ function parseArgs() {
20
20
  else if (arg.startsWith("--client-secret=")) {
21
21
  syncArgs.clientSecret = arg.split("=")[1];
22
22
  }
23
+ else if (arg.startsWith("--access-token=")) {
24
+ syncArgs.accessToken = arg.split("=")[1];
25
+ }
26
+ else if (arg.startsWith("--refresh-token=")) {
27
+ syncArgs.refreshToken = arg.split("=")[1];
28
+ }
23
29
  else if (arg.startsWith("--days=")) {
24
30
  syncArgs.days = parseInt(arg.split("=")[1]);
25
31
  }
@@ -46,6 +52,33 @@ function parseArgs() {
46
52
  }
47
53
  return renderArgs;
48
54
  }
55
+ if (args[0] === "query") {
56
+ if (!args[1]) {
57
+ log.error("query command requires a SQL statement");
58
+ process.exit(1);
59
+ }
60
+ const queryArgs = {
61
+ command: "query",
62
+ sql: args[1],
63
+ json: args.includes("--json"),
64
+ };
65
+ return queryArgs;
66
+ }
67
+ if (args[0] === "auth") {
68
+ const authArgs = { command: "auth" };
69
+ for (const arg of args) {
70
+ if (arg.startsWith("--client-id=")) {
71
+ authArgs.clientId = arg.split("=")[1];
72
+ }
73
+ else if (arg.startsWith("--client-secret=")) {
74
+ authArgs.clientSecret = arg.split("=")[1];
75
+ }
76
+ else if (arg.startsWith("--code=")) {
77
+ authArgs.code = arg.split("=")[1];
78
+ }
79
+ }
80
+ return authArgs;
81
+ }
49
82
  if (args[0] === "--help" || args[0] === "-h" || args[0] === "help") {
50
83
  return { command: "help" };
51
84
  }
@@ -59,33 +92,136 @@ Claude Coach - Training Plan Tools
59
92
  Usage: npx claude-coach <command> [options]
60
93
 
61
94
  Commands:
62
- sync Sync activities from Strava (default)
95
+ sync Sync activities from Strava
96
+ auth Get Strava authorization URL or exchange code for tokens
63
97
  render <file> Render a training plan JSON to HTML
98
+ query <sql> Run a SQL query against the database
64
99
  help Show this help message
65
100
 
66
- Sync Options:
101
+ Auth Options (for headless/Claude environments):
67
102
  --client-id=ID Strava API client ID
68
103
  --client-secret=SEC Strava API client secret
104
+ --code=URL_OR_CODE Full redirect URL or just the authorization code
105
+
106
+ Step 1: Run 'auth' with credentials to get authorization URL
107
+ Step 2: User clicks URL, authorizes, copies entire redirect URL
108
+ Step 3: Run 'auth --code=URL' to exchange for tokens
109
+ Step 4: Run 'sync' to fetch activities
110
+
111
+ Sync Options:
112
+ --client-id=ID Strava API client ID (for OAuth flow)
113
+ --client-secret=SEC Strava API client secret (for OAuth flow)
69
114
  --days=N Days of history to sync (default: 730)
70
115
 
71
116
  Render Options:
72
117
  --output, -o FILE Output HTML file (default: <input>.html)
73
118
 
119
+ Query Options:
120
+ --json Output as JSON (default: plain text)
121
+
74
122
  Examples:
75
- # Sync from Strava (interactive)
76
- npx claude-coach
123
+ # Headless auth flow (for Claude/automated environments)
124
+ npx claude-coach auth --client-id=12345 --client-secret=abc123
125
+ # User clicks URL, copies code from failed redirect
126
+ npx claude-coach auth --code=AUTHORIZATION_CODE
127
+ npx claude-coach sync
77
128
 
78
- # Sync with credentials
129
+ # Interactive auth flow (opens browser)
79
130
  npx claude-coach sync --client-id=12345 --client-secret=abc123
80
131
 
81
132
  # Render a training plan to HTML
82
133
  npx claude-coach render plan.json --output my-plan.html
83
134
 
84
- # Render to stdout
85
- npx claude-coach render plan.json
135
+ # Query the database
136
+ npx claude-coach query "SELECT * FROM weekly_volume LIMIT 5"
86
137
  `);
87
138
  }
88
139
  // ============================================================================
140
+ // Auth Command (for headless/Claude environments)
141
+ // ============================================================================
142
+ const REDIRECT_PORT = 8765;
143
+ const REDIRECT_URI = `http://localhost:${REDIRECT_PORT}/callback`;
144
+ const AUTHORIZE_URL = "https://www.strava.com/oauth/authorize";
145
+ const TOKEN_URL = "https://www.strava.com/oauth/token";
146
+ async function runAuth(args) {
147
+ // If code is provided, exchange it for tokens
148
+ if (args.code) {
149
+ if (!configExists()) {
150
+ log.error("No configuration found. Run 'auth' with --client-id and --client-secret first.");
151
+ process.exit(1);
152
+ }
153
+ // Extract code from full URL if user pasted the entire redirect URL
154
+ let code = args.code;
155
+ if (code.includes("localhost") || code.startsWith("http")) {
156
+ try {
157
+ const url = new URL(code);
158
+ const extractedCode = url.searchParams.get("code");
159
+ if (extractedCode) {
160
+ code = extractedCode;
161
+ }
162
+ else {
163
+ log.error("Could not find 'code' parameter in URL");
164
+ process.exit(1);
165
+ }
166
+ }
167
+ catch {
168
+ // Not a valid URL, use as-is
169
+ }
170
+ }
171
+ const config = loadConfig();
172
+ log.start("Exchanging authorization code for tokens...");
173
+ const tokenResponse = await fetch(TOKEN_URL, {
174
+ method: "POST",
175
+ headers: { "Content-Type": "application/json" },
176
+ body: JSON.stringify({
177
+ client_id: config.strava.client_id,
178
+ client_secret: config.strava.client_secret,
179
+ code: code,
180
+ grant_type: "authorization_code",
181
+ }),
182
+ });
183
+ if (!tokenResponse.ok) {
184
+ const error = await tokenResponse.text();
185
+ log.error(`Token exchange failed: ${error}`);
186
+ process.exit(1);
187
+ }
188
+ const data = await tokenResponse.json();
189
+ const tokens = {
190
+ access_token: data.access_token,
191
+ refresh_token: data.refresh_token,
192
+ expires_at: data.expires_at,
193
+ athlete_id: data.athlete.id,
194
+ };
195
+ saveTokens(tokens);
196
+ log.success(`Authenticated as ${data.athlete.firstname} ${data.athlete.lastname}`);
197
+ log.ready("Now run: npx claude-coach sync");
198
+ return;
199
+ }
200
+ // Otherwise, generate and print the authorization URL
201
+ if (!args.clientId || !args.clientSecret) {
202
+ log.error("Required: --client-id and --client-secret");
203
+ log.info("Get these from: https://www.strava.com/settings/api");
204
+ process.exit(1);
205
+ }
206
+ // Save config for later use
207
+ const config = createConfig(args.clientId, args.clientSecret, 730);
208
+ saveConfig(config);
209
+ const authUrl = new URL(AUTHORIZE_URL);
210
+ authUrl.searchParams.set("client_id", args.clientId);
211
+ authUrl.searchParams.set("response_type", "code");
212
+ authUrl.searchParams.set("redirect_uri", REDIRECT_URI);
213
+ authUrl.searchParams.set("scope", "activity:read_all");
214
+ authUrl.searchParams.set("approval_prompt", "auto");
215
+ console.log("\n📋 AUTHORIZATION URL:\n");
216
+ console.log(authUrl.toString());
217
+ console.log("\n📝 INSTRUCTIONS:");
218
+ console.log("1. Open the URL above in a browser");
219
+ console.log("2. Click 'Authorize' on Strava");
220
+ console.log("3. You'll be redirected to a page that won't load (that's OK!)");
221
+ console.log("4. Copy the ENTIRE URL from your browser's address bar");
222
+ console.log("5. Paste it back to Claude\n");
223
+ }
224
+ // ============================================================================
89
225
  // Sync Command
90
226
  // ============================================================================
91
227
  function escapeString(str) {
@@ -147,11 +283,67 @@ function insertAthlete(athlete) {
147
283
  }
148
284
  async function runSync(args) {
149
285
  log.box("Claude Coach - Strava Sync");
150
- // Step 1: Check/create config
286
+ // Step 0: Initialize SQLite backend
287
+ await initDatabase();
288
+ const syncDays = args.days || 730;
289
+ // Step 1: Handle token-based auth (no browser needed)
290
+ if (args.accessToken && args.refreshToken) {
291
+ log.info("Using provided access tokens...");
292
+ // Save tokens - we'll get athlete_id after fetching profile
293
+ // Set expiry to 1 hour from now (we have refresh token for renewal)
294
+ const tempTokens = {
295
+ access_token: args.accessToken,
296
+ refresh_token: args.refreshToken,
297
+ expires_at: Math.floor(Date.now() / 1000) + 3600,
298
+ athlete_id: 0, // Will be updated after fetching athlete
299
+ };
300
+ saveTokens(tempTokens);
301
+ // Create minimal config if needed
302
+ if (!configExists()) {
303
+ // Token-based auth doesn't need client credentials for initial sync
304
+ // but we need them for token refresh - use placeholders
305
+ const config = createConfig("token-auth", "token-auth", syncDays);
306
+ saveConfig(config);
307
+ }
308
+ // Initialize database
309
+ migrate();
310
+ // Fetch athlete to get ID and validate tokens
311
+ log.start("Validating tokens and fetching athlete profile...");
312
+ const athlete = await getAthlete(tempTokens);
313
+ // Update tokens with real athlete ID
314
+ const tokens = { ...tempTokens, athlete_id: athlete.id };
315
+ saveTokens(tokens);
316
+ insertAthlete(athlete);
317
+ log.success(`Authenticated as ${athlete.firstname} ${athlete.lastname}`);
318
+ // Fetch activities
319
+ const afterDate = new Date();
320
+ afterDate.setDate(afterDate.getDate() - syncDays);
321
+ const activities = await getAllActivities(tokens, afterDate);
322
+ // Store activities
323
+ log.start("Storing activities in database...");
324
+ let count = 0;
325
+ for (const activity of activities) {
326
+ insertActivity(activity);
327
+ count++;
328
+ if (count % 50 === 0) {
329
+ log.progress(` Stored ${count}/${activities.length}...`);
330
+ }
331
+ }
332
+ log.progressEnd();
333
+ log.success(`Stored ${activities.length} activities`);
334
+ execute(`
335
+ INSERT INTO sync_log (started_at, completed_at, activities_synced, status)
336
+ VALUES (datetime('now'), datetime('now'), ${activities.length}, 'success');
337
+ `);
338
+ log.info(`Database: ${getDbPath()}`);
339
+ log.ready("Sync complete! You can now create training plans.");
340
+ return;
341
+ }
342
+ // Step 2: OAuth-based auth (requires browser)
151
343
  if (!configExists()) {
152
344
  if (args.clientId && args.clientSecret) {
153
345
  log.info("Creating configuration from command line arguments...");
154
- const config = createConfig(args.clientId, args.clientSecret, args.days || 730);
346
+ const config = createConfig(args.clientId, args.clientSecret, syncDays);
155
347
  saveConfig(config);
156
348
  log.success("Configuration saved");
157
349
  }
@@ -163,10 +355,10 @@ async function runSync(args) {
163
355
  }
164
356
  }
165
357
  const config = loadConfig();
166
- const syncDays = args.days || config.sync_days || 730;
167
- // Step 2: Initialize database
358
+ const configSyncDays = args.days || config.sync_days || 730;
359
+ // Initialize database
168
360
  migrate();
169
- // Step 3: Authenticate with Strava
361
+ // Authenticate with Strava (opens browser)
170
362
  const tokens = await getValidTokens();
171
363
  // Step 4: Fetch and store athlete profile
172
364
  log.start("Fetching athlete profile...");
@@ -175,7 +367,7 @@ async function runSync(args) {
175
367
  log.success(`Athlete: ${athlete.firstname} ${athlete.lastname}`);
176
368
  // Step 5: Fetch activities
177
369
  const afterDate = new Date();
178
- afterDate.setDate(afterDate.getDate() - syncDays);
370
+ afterDate.setDate(afterDate.getDate() - configSyncDays);
179
371
  const activities = await getAllActivities(tokens, afterDate);
180
372
  // Step 6: Store activities
181
373
  log.start("Storing activities in database...");
@@ -255,6 +447,20 @@ function runRender(args) {
255
447
  }
256
448
  }
257
449
  // ============================================================================
450
+ // Query Command
451
+ // ============================================================================
452
+ async function runQuery(args) {
453
+ await initDatabase();
454
+ if (args.json) {
455
+ const results = queryJson(args.sql);
456
+ console.log(JSON.stringify(results, null, 2));
457
+ }
458
+ else {
459
+ const result = query(args.sql);
460
+ console.log(result);
461
+ }
462
+ }
463
+ // ============================================================================
258
464
  // Main
259
465
  // ============================================================================
260
466
  async function main() {
@@ -263,12 +469,18 @@ async function main() {
263
469
  case "help":
264
470
  printHelp();
265
471
  break;
472
+ case "auth":
473
+ await runAuth(args);
474
+ break;
266
475
  case "sync":
267
476
  await runSync(args);
268
477
  break;
269
478
  case "render":
270
479
  runRender(args);
271
480
  break;
481
+ case "query":
482
+ await runQuery(args);
483
+ break;
272
484
  }
273
485
  }
274
486
  main().catch((err) => {
@@ -1,3 +1,7 @@
1
+ /**
2
+ * Initialize the SQLite backend. Must be called before using other functions.
3
+ */
4
+ export declare function initDatabase(): Promise<void>;
1
5
  export declare function query(sql: string): string;
2
6
  export declare function queryJson<T>(sql: string): T[];
3
7
  export declare function execute(sql: string): void;
package/dist/db/client.js CHANGED
@@ -1,44 +1,110 @@
1
1
  import { execSync, spawnSync } from "child_process";
2
2
  import { getDbPath } from "../lib/config.js";
3
- export function query(sql) {
4
- const dbPath = getDbPath();
3
+ let cachedBackend = null;
4
+ /**
5
+ * Try to use Node's built-in SQLite module (Node 22.5+).
6
+ * Falls back to shelling out to sqlite3 CLI if not available.
7
+ */
8
+ async function detectBackend() {
9
+ // Try Node.js built-in SQLite first (Node 22.5+)
5
10
  try {
6
- return execSync(`sqlite3 "${dbPath}" "${sql.replace(/"/g, '\\"')}"`, {
7
- encoding: "utf-8",
8
- });
11
+ // Dynamic import to avoid syntax errors on older Node versions
12
+ const sqlite = await import("node:sqlite");
13
+ const dbPath = getDbPath();
14
+ const db = new sqlite.DatabaseSync(dbPath);
15
+ return {
16
+ query(sql) {
17
+ const stmt = db.prepare(sql);
18
+ const rows = stmt.all();
19
+ if (rows.length === 0)
20
+ return "";
21
+ // Format as simple text output (column values separated by |)
22
+ return rows
23
+ .map((row) => Object.values(row)
24
+ .map((v) => (v === null ? "" : String(v)))
25
+ .join("|"))
26
+ .join("\n");
27
+ },
28
+ queryJson(sql) {
29
+ const stmt = db.prepare(sql);
30
+ return stmt.all();
31
+ },
32
+ execute(sql) {
33
+ db.exec(sql);
34
+ },
35
+ };
9
36
  }
10
- catch (error) {
11
- const err = error;
12
- throw new Error(`SQLite error: ${err.stderr || err.message}`);
37
+ catch {
38
+ // Node.js built-in SQLite not available, try CLI
13
39
  }
14
- }
15
- export function queryJson(sql) {
16
- const dbPath = getDbPath();
40
+ // Fallback: Use sqlite3 CLI
17
41
  try {
18
- const result = execSync(`sqlite3 -json "${dbPath}" "${sql.replace(/"/g, '\\"')}"`, {
19
- encoding: "utf-8",
20
- });
21
- if (!result.trim())
22
- return [];
23
- return JSON.parse(result);
42
+ // Check if sqlite3 is available
43
+ execSync("sqlite3 --version", { stdio: "ignore" });
44
+ return {
45
+ query(sql) {
46
+ const dbPath = getDbPath();
47
+ return execSync(`sqlite3 "${dbPath}" "${sql.replace(/"/g, '\\"')}"`, {
48
+ encoding: "utf-8",
49
+ });
50
+ },
51
+ queryJson(sql) {
52
+ const dbPath = getDbPath();
53
+ const result = execSync(`sqlite3 -json "${dbPath}" "${sql.replace(/"/g, '\\"')}"`, {
54
+ encoding: "utf-8",
55
+ });
56
+ if (!result.trim())
57
+ return [];
58
+ return JSON.parse(result);
59
+ },
60
+ execute(sql) {
61
+ const dbPath = getDbPath();
62
+ const result = spawnSync("sqlite3", [dbPath], {
63
+ input: sql,
64
+ encoding: "utf-8",
65
+ });
66
+ if (result.error)
67
+ throw result.error;
68
+ if (result.status !== 0) {
69
+ throw new Error(`SQLite error: ${result.stderr}`);
70
+ }
71
+ },
72
+ };
24
73
  }
25
- catch (error) {
26
- const err = error;
27
- throw new Error(`SQLite error: ${err.stderr || err.message}`);
74
+ catch {
75
+ throw new Error("SQLite is not available. Please either:\n" +
76
+ " 1. Use Node.js 22.5+ (has built-in SQLite)\n" +
77
+ " 2. Install sqlite3 CLI (brew install sqlite3 / apt install sqlite3)");
28
78
  }
29
79
  }
30
- export function execute(sql) {
31
- const dbPath = getDbPath();
32
- const result = spawnSync("sqlite3", [dbPath], {
33
- input: sql,
34
- encoding: "utf-8",
35
- });
36
- if (result.error) {
37
- throw result.error;
80
+ /**
81
+ * Initialize the SQLite backend. Must be called before using other functions.
82
+ */
83
+ export async function initDatabase() {
84
+ if (!cachedBackend) {
85
+ cachedBackend = await detectBackend();
38
86
  }
39
- if (result.status !== 0) {
40
- throw new Error(`SQLite error: ${result.stderr}`);
87
+ }
88
+ /**
89
+ * Get the backend, throwing if not initialized.
90
+ */
91
+ function getBackend() {
92
+ if (!cachedBackend) {
93
+ throw new Error("Database not initialized. Call initDatabase() first.");
41
94
  }
95
+ return cachedBackend;
96
+ }
97
+ // ============================================================================
98
+ // Public API (synchronous after initialization)
99
+ // ============================================================================
100
+ export function query(sql) {
101
+ return getBackend().query(sql);
102
+ }
103
+ export function queryJson(sql) {
104
+ return getBackend().queryJson(sql);
105
+ }
106
+ export function execute(sql) {
107
+ getBackend().execute(sql);
42
108
  }
43
109
  export function runScript(script) {
44
110
  execute(script);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-coach",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "author": "Felix Rieseberg <felix@felixrieseberg.com> (https://felixrieseberg.com)",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -35,7 +35,7 @@ ${a.join(`
35
35
  `)+`\r
36
36
  `+"END:VCALENDAR"}var vt=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Hl(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function Tt(e){throw new Error('Could not dynamically require "'+e+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var Mt={exports:{}};var Aa;function jl(){return Aa||(Aa=1,(function(e,s){(function(t){e.exports=t()})(function(){return(function t(a,i,n){function l(c,v){if(!i[c]){if(!a[c]){var y=typeof Tt=="function"&&Tt;if(!v&&y)return y(c,!0);if(o)return o(c,!0);var b=new Error("Cannot find module '"+c+"'");throw b.code="MODULE_NOT_FOUND",b}var m=i[c]={exports:{}};a[c][0].call(m.exports,function(C){var p=a[c][1][C];return l(p||C)},m,m.exports,t,a,i,n)}return i[c].exports}for(var o=typeof Tt=="function"&&Tt,u=0;u<n.length;u++)l(n[u]);return l})({1:[function(t,a,i){var n=t("./utils"),l=t("./support"),o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";i.encode=function(u){for(var c,v,y,b,m,C,p,d=[],h=0,w=u.length,k=w,x=n.getTypeOf(u)!=="string";h<u.length;)k=w-h,y=x?(c=u[h++],v=h<w?u[h++]:0,h<w?u[h++]:0):(c=u.charCodeAt(h++),v=h<w?u.charCodeAt(h++):0,h<w?u.charCodeAt(h++):0),b=c>>2,m=(3&c)<<4|v>>4,C=1<k?(15&v)<<2|y>>6:64,p=2<k?63&y:64,d.push(o.charAt(b)+o.charAt(m)+o.charAt(C)+o.charAt(p));return d.join("")},i.decode=function(u){var c,v,y,b,m,C,p=0,d=0,h="data:";if(u.substr(0,h.length)===h)throw new Error("Invalid base64 input, it looks like a data url.");var w,k=3*(u=u.replace(/[^A-Za-z0-9+/=]/g,"")).length/4;if(u.charAt(u.length-1)===o.charAt(64)&&k--,u.charAt(u.length-2)===o.charAt(64)&&k--,k%1!=0)throw new Error("Invalid base64 input, bad content length.");for(w=l.uint8array?new Uint8Array(0|k):new Array(0|k);p<u.length;)c=o.indexOf(u.charAt(p++))<<2|(b=o.indexOf(u.charAt(p++)))>>4,v=(15&b)<<4|(m=o.indexOf(u.charAt(p++)))>>2,y=(3&m)<<6|(C=o.indexOf(u.charAt(p++))),w[d++]=c,m!==64&&(w[d++]=v),C!==64&&(w[d++]=y);return w}},{"./support":30,"./utils":32}],2:[function(t,a,i){var n=t("./external"),l=t("./stream/DataWorker"),o=t("./stream/Crc32Probe"),u=t("./stream/DataLengthProbe");function c(v,y,b,m,C){this.compressedSize=v,this.uncompressedSize=y,this.crc32=b,this.compression=m,this.compressedContent=C}c.prototype={getContentWorker:function(){var v=new l(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new u("data_length")),y=this;return v.on("end",function(){if(this.streamInfo.data_length!==y.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),v},getCompressedWorker:function(){return new l(n.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},c.createWorkerFrom=function(v,y,b){return v.pipe(new o).pipe(new u("uncompressedSize")).pipe(y.compressWorker(b)).pipe(new u("compressedSize")).withStreamInfo("compression",y)},a.exports=c},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(t,a,i){var n=t("./stream/GenericWorker");i.STORE={magic:"\0\0",compressWorker:function(){return new n("STORE compression")},uncompressWorker:function(){return new n("STORE decompression")}},i.DEFLATE=t("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(t,a,i){var n=t("./utils"),l=(function(){for(var o,u=[],c=0;c<256;c++){o=c;for(var v=0;v<8;v++)o=1&o?3988292384^o>>>1:o>>>1;u[c]=o}return u})();a.exports=function(o,u){return o!==void 0&&o.length?n.getTypeOf(o)!=="string"?(function(c,v,y,b){var m=l,C=b+y;c^=-1;for(var p=b;p<C;p++)c=c>>>8^m[255&(c^v[p])];return-1^c})(0|u,o,o.length,0):(function(c,v,y,b){var m=l,C=b+y;c^=-1;for(var p=b;p<C;p++)c=c>>>8^m[255&(c^v.charCodeAt(p))];return-1^c})(0|u,o,o.length,0):0}},{"./utils":32}],5:[function(t,a,i){i.base64=!1,i.binary=!1,i.dir=!1,i.createFolders=!0,i.date=null,i.compression=null,i.compressionOptions=null,i.comment=null,i.unixPermissions=null,i.dosPermissions=null},{}],6:[function(t,a,i){var n=null;n=typeof Promise<"u"?Promise:t("lie"),a.exports={Promise:n}},{lie:37}],7:[function(t,a,i){var n=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Uint32Array<"u",l=t("pako"),o=t("./utils"),u=t("./stream/GenericWorker"),c=n?"uint8array":"array";function v(y,b){u.call(this,"FlateWorker/"+y),this._pako=null,this._pakoAction=y,this._pakoOptions=b,this.meta={}}i.magic="\b\0",o.inherits(v,u),v.prototype.processChunk=function(y){this.meta=y.meta,this._pako===null&&this._createPako(),this._pako.push(o.transformTo(c,y.data),!1)},v.prototype.flush=function(){u.prototype.flush.call(this),this._pako===null&&this._createPako(),this._pako.push([],!0)},v.prototype.cleanUp=function(){u.prototype.cleanUp.call(this),this._pako=null},v.prototype._createPako=function(){this._pako=new l[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var y=this;this._pako.onData=function(b){y.push({data:b,meta:y.meta})}},i.compressWorker=function(y){return new v("Deflate",y)},i.uncompressWorker=function(){return new v("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(t,a,i){function n(m,C){var p,d="";for(p=0;p<C;p++)d+=String.fromCharCode(255&m),m>>>=8;return d}function l(m,C,p,d,h,w){var k,x,_=m.file,W=m.compression,P=w!==c.utf8encode,H=o.transformTo("string",w(_.name)),z=o.transformTo("string",c.utf8encode(_.name)),Z=_.comment,ne=o.transformTo("string",w(Z)),F=o.transformTo("string",c.utf8encode(Z)),G=z.length!==_.name.length,f=F.length!==Z.length,q="",pe="",O="",le=_.dir,Y=_.date,ie={crc32:0,compressedSize:0,uncompressedSize:0};C&&!p||(ie.crc32=m.crc32,ie.compressedSize=m.compressedSize,ie.uncompressedSize=m.uncompressedSize);var E=0;C&&(E|=8),P||!G&&!f||(E|=2048);var I=0,$=0;le&&(I|=16),h==="UNIX"?($=798,I|=(function(V,be){var ge=V;return V||(ge=be?16893:33204),(65535&ge)<<16})(_.unixPermissions,le)):($=20,I|=(function(V){return 63&(V||0)})(_.dosPermissions)),k=Y.getUTCHours(),k<<=6,k|=Y.getUTCMinutes(),k<<=5,k|=Y.getUTCSeconds()/2,x=Y.getUTCFullYear()-1980,x<<=4,x|=Y.getUTCMonth()+1,x<<=5,x|=Y.getUTCDate(),G&&(pe=n(1,1)+n(v(H),4)+z,q+="up"+n(pe.length,2)+pe),f&&(O=n(1,1)+n(v(ne),4)+F,q+="uc"+n(O.length,2)+O);var X="";return X+=`
37
37
  \0`,X+=n(E,2),X+=W.magic,X+=n(k,2),X+=n(x,2),X+=n(ie.crc32,4),X+=n(ie.compressedSize,4),X+=n(ie.uncompressedSize,4),X+=n(H.length,2),X+=n(q.length,2),{fileRecord:y.LOCAL_FILE_HEADER+X+H+q,dirRecord:y.CENTRAL_FILE_HEADER+n($,2)+X+n(ne.length,2)+"\0\0\0\0"+n(I,4)+n(d,4)+H+q+ne}}var o=t("../utils"),u=t("../stream/GenericWorker"),c=t("../utf8"),v=t("../crc32"),y=t("../signature");function b(m,C,p,d){u.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=C,this.zipPlatform=p,this.encodeFileName=d,this.streamFiles=m,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}o.inherits(b,u),b.prototype.push=function(m){var C=m.meta.percent||0,p=this.entriesCount,d=this._sources.length;this.accumulate?this.contentBuffer.push(m):(this.bytesWritten+=m.data.length,u.prototype.push.call(this,{data:m.data,meta:{currentFile:this.currentFile,percent:p?(C+100*(p-d-1))/p:100}}))},b.prototype.openedSource=function(m){this.currentSourceOffset=this.bytesWritten,this.currentFile=m.file.name;var C=this.streamFiles&&!m.file.dir;if(C){var p=l(m,C,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:p.fileRecord,meta:{percent:0}})}else this.accumulate=!0},b.prototype.closedSource=function(m){this.accumulate=!1;var C=this.streamFiles&&!m.file.dir,p=l(m,C,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(p.dirRecord),C)this.push({data:(function(d){return y.DATA_DESCRIPTOR+n(d.crc32,4)+n(d.compressedSize,4)+n(d.uncompressedSize,4)})(m),meta:{percent:100}});else for(this.push({data:p.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},b.prototype.flush=function(){for(var m=this.bytesWritten,C=0;C<this.dirRecords.length;C++)this.push({data:this.dirRecords[C],meta:{percent:100}});var p=this.bytesWritten-m,d=(function(h,w,k,x,_){var W=o.transformTo("string",_(x));return y.CENTRAL_DIRECTORY_END+"\0\0\0\0"+n(h,2)+n(h,2)+n(w,4)+n(k,4)+n(W.length,2)+W})(this.dirRecords.length,p,m,this.zipComment,this.encodeFileName);this.push({data:d,meta:{percent:100}})},b.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},b.prototype.registerPrevious=function(m){this._sources.push(m);var C=this;return m.on("data",function(p){C.processChunk(p)}),m.on("end",function(){C.closedSource(C.previous.streamInfo),C._sources.length?C.prepareNextSource():C.end()}),m.on("error",function(p){C.error(p)}),this},b.prototype.resume=function(){return!!u.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},b.prototype.error=function(m){var C=this._sources;if(!u.prototype.error.call(this,m))return!1;for(var p=0;p<C.length;p++)try{C[p].error(m)}catch{}return!0},b.prototype.lock=function(){u.prototype.lock.call(this);for(var m=this._sources,C=0;C<m.length;C++)m[C].lock()},a.exports=b},{"../crc32":4,"../signature":23,"../stream/GenericWorker":28,"../utf8":31,"../utils":32}],9:[function(t,a,i){var n=t("../compressions"),l=t("./ZipFileWorker");i.generateWorker=function(o,u,c){var v=new l(u.streamFiles,c,u.platform,u.encodeFileName),y=0;try{o.forEach(function(b,m){y++;var C=(function(w,k){var x=w||k,_=n[x];if(!_)throw new Error(x+" is not a valid compression method !");return _})(m.options.compression,u.compression),p=m.options.compressionOptions||u.compressionOptions||{},d=m.dir,h=m.date;m._compressWorker(C,p).withStreamInfo("file",{name:b,dir:d,date:h,comment:m.comment||"",unixPermissions:m.unixPermissions,dosPermissions:m.dosPermissions}).pipe(v)}),v.entriesCount=y}catch(b){v.error(b)}return v}},{"../compressions":3,"./ZipFileWorker":8}],10:[function(t,a,i){function n(){if(!(this instanceof n))return new n;if(arguments.length)throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.");this.files=Object.create(null),this.comment=null,this.root="",this.clone=function(){var l=new n;for(var o in this)typeof this[o]!="function"&&(l[o]=this[o]);return l}}(n.prototype=t("./object")).loadAsync=t("./load"),n.support=t("./support"),n.defaults=t("./defaults"),n.version="3.10.1",n.loadAsync=function(l,o){return new n().loadAsync(l,o)},n.external=t("./external"),a.exports=n},{"./defaults":5,"./external":6,"./load":11,"./object":15,"./support":30}],11:[function(t,a,i){var n=t("./utils"),l=t("./external"),o=t("./utf8"),u=t("./zipEntries"),c=t("./stream/Crc32Probe"),v=t("./nodejsUtils");function y(b){return new l.Promise(function(m,C){var p=b.decompressed.getContentWorker().pipe(new c);p.on("error",function(d){C(d)}).on("end",function(){p.streamInfo.crc32!==b.decompressed.crc32?C(new Error("Corrupted zip : CRC32 mismatch")):m()}).resume()})}a.exports=function(b,m){var C=this;return m=n.extend(m||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:o.utf8decode}),v.isNode&&v.isStream(b)?l.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")):n.prepareContent("the loaded zip file",b,!0,m.optimizedBinaryString,m.base64).then(function(p){var d=new u(m);return d.load(p),d}).then(function(p){var d=[l.Promise.resolve(p)],h=p.files;if(m.checkCRC32)for(var w=0;w<h.length;w++)d.push(y(h[w]));return l.Promise.all(d)}).then(function(p){for(var d=p.shift(),h=d.files,w=0;w<h.length;w++){var k=h[w],x=k.fileNameStr,_=n.resolve(k.fileNameStr);C.file(_,k.decompressed,{binary:!0,optimizedBinaryString:!0,date:k.date,dir:k.dir,comment:k.fileCommentStr.length?k.fileCommentStr:null,unixPermissions:k.unixPermissions,dosPermissions:k.dosPermissions,createFolders:m.createFolders}),k.dir||(C.file(_).unsafeOriginalName=x)}return d.zipComment.length&&(C.comment=d.zipComment),C})}},{"./external":6,"./nodejsUtils":14,"./stream/Crc32Probe":25,"./utf8":31,"./utils":32,"./zipEntries":33}],12:[function(t,a,i){var n=t("../utils"),l=t("../stream/GenericWorker");function o(u,c){l.call(this,"Nodejs stream input adapter for "+u),this._upstreamEnded=!1,this._bindStream(c)}n.inherits(o,l),o.prototype._bindStream=function(u){var c=this;(this._stream=u).pause(),u.on("data",function(v){c.push({data:v,meta:{percent:0}})}).on("error",function(v){c.isPaused?this.generatedError=v:c.error(v)}).on("end",function(){c.isPaused?c._upstreamEnded=!0:c.end()})},o.prototype.pause=function(){return!!l.prototype.pause.call(this)&&(this._stream.pause(),!0)},o.prototype.resume=function(){return!!l.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},a.exports=o},{"../stream/GenericWorker":28,"../utils":32}],13:[function(t,a,i){var n=t("readable-stream").Readable;function l(o,u,c){n.call(this,u),this._helper=o;var v=this;o.on("data",function(y,b){v.push(y)||v._helper.pause(),c&&c(b)}).on("error",function(y){v.emit("error",y)}).on("end",function(){v.push(null)})}t("../utils").inherits(l,n),l.prototype._read=function(){this._helper.resume()},a.exports=l},{"../utils":32,"readable-stream":16}],14:[function(t,a,i){a.exports={isNode:typeof Buffer<"u",newBufferFrom:function(n,l){if(Buffer.from&&Buffer.from!==Uint8Array.from)return Buffer.from(n,l);if(typeof n=="number")throw new Error('The "data" argument must not be a number');return new Buffer(n,l)},allocBuffer:function(n){if(Buffer.alloc)return Buffer.alloc(n);var l=new Buffer(n);return l.fill(0),l},isBuffer:function(n){return Buffer.isBuffer(n)},isStream:function(n){return n&&typeof n.on=="function"&&typeof n.pause=="function"&&typeof n.resume=="function"}}},{}],15:[function(t,a,i){function n(_,W,P){var H,z=o.getTypeOf(W),Z=o.extend(P||{},v);Z.date=Z.date||new Date,Z.compression!==null&&(Z.compression=Z.compression.toUpperCase()),typeof Z.unixPermissions=="string"&&(Z.unixPermissions=parseInt(Z.unixPermissions,8)),Z.unixPermissions&&16384&Z.unixPermissions&&(Z.dir=!0),Z.dosPermissions&&16&Z.dosPermissions&&(Z.dir=!0),Z.dir&&(_=h(_)),Z.createFolders&&(H=d(_))&&w.call(this,H,!0);var ne=z==="string"&&Z.binary===!1&&Z.base64===!1;P&&P.binary!==void 0||(Z.binary=!ne),(W instanceof y&&W.uncompressedSize===0||Z.dir||!W||W.length===0)&&(Z.base64=!1,Z.binary=!0,W="",Z.compression="STORE",z="string");var F=null;F=W instanceof y||W instanceof u?W:C.isNode&&C.isStream(W)?new p(_,W):o.prepareContent(_,W,Z.binary,Z.optimizedBinaryString,Z.base64);var G=new b(_,F,Z);this.files[_]=G}var l=t("./utf8"),o=t("./utils"),u=t("./stream/GenericWorker"),c=t("./stream/StreamHelper"),v=t("./defaults"),y=t("./compressedObject"),b=t("./zipObject"),m=t("./generate"),C=t("./nodejsUtils"),p=t("./nodejs/NodejsStreamInputAdapter"),d=function(_){_.slice(-1)==="/"&&(_=_.substring(0,_.length-1));var W=_.lastIndexOf("/");return 0<W?_.substring(0,W):""},h=function(_){return _.slice(-1)!=="/"&&(_+="/"),_},w=function(_,W){return W=W!==void 0?W:v.createFolders,_=h(_),this.files[_]||n.call(this,_,null,{dir:!0,createFolders:W}),this.files[_]};function k(_){return Object.prototype.toString.call(_)==="[object RegExp]"}var x={load:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},forEach:function(_){var W,P,H;for(W in this.files)H=this.files[W],(P=W.slice(this.root.length,W.length))&&W.slice(0,this.root.length)===this.root&&_(P,H)},filter:function(_){var W=[];return this.forEach(function(P,H){_(P,H)&&W.push(H)}),W},file:function(_,W,P){if(arguments.length!==1)return _=this.root+_,n.call(this,_,W,P),this;if(k(_)){var H=_;return this.filter(function(Z,ne){return!ne.dir&&H.test(Z)})}var z=this.files[this.root+_];return z&&!z.dir?z:null},folder:function(_){if(!_)return this;if(k(_))return this.filter(function(z,Z){return Z.dir&&_.test(z)});var W=this.root+_,P=w.call(this,W),H=this.clone();return H.root=P.name,H},remove:function(_){_=this.root+_;var W=this.files[_];if(W||(_.slice(-1)!=="/"&&(_+="/"),W=this.files[_]),W&&!W.dir)delete this.files[_];else for(var P=this.filter(function(z,Z){return Z.name.slice(0,_.length)===_}),H=0;H<P.length;H++)delete this.files[P[H].name];return this},generate:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},generateInternalStream:function(_){var W,P={};try{if((P=o.extend(_||{},{streamFiles:!1,compression:"STORE",compressionOptions:null,type:"",platform:"DOS",comment:null,mimeType:"application/zip",encodeFileName:l.utf8encode})).type=P.type.toLowerCase(),P.compression=P.compression.toUpperCase(),P.type==="binarystring"&&(P.type="string"),!P.type)throw new Error("No output type specified.");o.checkSupport(P.type),P.platform!=="darwin"&&P.platform!=="freebsd"&&P.platform!=="linux"&&P.platform!=="sunos"||(P.platform="UNIX"),P.platform==="win32"&&(P.platform="DOS");var H=P.comment||this.comment||"";W=m.generateWorker(this,P,H)}catch(z){(W=new u("error")).error(z)}return new c(W,P.type||"string",P.mimeType)},generateAsync:function(_,W){return this.generateInternalStream(_).accumulate(W)},generateNodeStream:function(_,W){return(_=_||{}).type||(_.type="nodebuffer"),this.generateInternalStream(_).toNodejsStream(W)}};a.exports=x},{"./compressedObject":2,"./defaults":5,"./generate":9,"./nodejs/NodejsStreamInputAdapter":12,"./nodejsUtils":14,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31,"./utils":32,"./zipObject":35}],16:[function(t,a,i){a.exports=t("stream")},{stream:void 0}],17:[function(t,a,i){var n=t("./DataReader");function l(o){n.call(this,o);for(var u=0;u<this.data.length;u++)o[u]=255&o[u]}t("../utils").inherits(l,n),l.prototype.byteAt=function(o){return this.data[this.zero+o]},l.prototype.lastIndexOfSignature=function(o){for(var u=o.charCodeAt(0),c=o.charCodeAt(1),v=o.charCodeAt(2),y=o.charCodeAt(3),b=this.length-4;0<=b;--b)if(this.data[b]===u&&this.data[b+1]===c&&this.data[b+2]===v&&this.data[b+3]===y)return b-this.zero;return-1},l.prototype.readAndCheckSignature=function(o){var u=o.charCodeAt(0),c=o.charCodeAt(1),v=o.charCodeAt(2),y=o.charCodeAt(3),b=this.readData(4);return u===b[0]&&c===b[1]&&v===b[2]&&y===b[3]},l.prototype.readData=function(o){if(this.checkOffset(o),o===0)return[];var u=this.data.slice(this.zero+this.index,this.zero+this.index+o);return this.index+=o,u},a.exports=l},{"../utils":32,"./DataReader":18}],18:[function(t,a,i){var n=t("../utils");function l(o){this.data=o,this.length=o.length,this.index=0,this.zero=0}l.prototype={checkOffset:function(o){this.checkIndex(this.index+o)},checkIndex:function(o){if(this.length<this.zero+o||o<0)throw new Error("End of data reached (data length = "+this.length+", asked index = "+o+"). Corrupted zip ?")},setIndex:function(o){this.checkIndex(o),this.index=o},skip:function(o){this.setIndex(this.index+o)},byteAt:function(){},readInt:function(o){var u,c=0;for(this.checkOffset(o),u=this.index+o-1;u>=this.index;u--)c=(c<<8)+this.byteAt(u);return this.index+=o,c},readString:function(o){return n.transformTo("string",this.readData(o))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var o=this.readInt(4);return new Date(Date.UTC(1980+(o>>25&127),(o>>21&15)-1,o>>16&31,o>>11&31,o>>5&63,(31&o)<<1))}},a.exports=l},{"../utils":32}],19:[function(t,a,i){var n=t("./Uint8ArrayReader");function l(o){n.call(this,o)}t("../utils").inherits(l,n),l.prototype.readData=function(o){this.checkOffset(o);var u=this.data.slice(this.zero+this.index,this.zero+this.index+o);return this.index+=o,u},a.exports=l},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(t,a,i){var n=t("./DataReader");function l(o){n.call(this,o)}t("../utils").inherits(l,n),l.prototype.byteAt=function(o){return this.data.charCodeAt(this.zero+o)},l.prototype.lastIndexOfSignature=function(o){return this.data.lastIndexOf(o)-this.zero},l.prototype.readAndCheckSignature=function(o){return o===this.readData(4)},l.prototype.readData=function(o){this.checkOffset(o);var u=this.data.slice(this.zero+this.index,this.zero+this.index+o);return this.index+=o,u},a.exports=l},{"../utils":32,"./DataReader":18}],21:[function(t,a,i){var n=t("./ArrayReader");function l(o){n.call(this,o)}t("../utils").inherits(l,n),l.prototype.readData=function(o){if(this.checkOffset(o),o===0)return new Uint8Array(0);var u=this.data.subarray(this.zero+this.index,this.zero+this.index+o);return this.index+=o,u},a.exports=l},{"../utils":32,"./ArrayReader":17}],22:[function(t,a,i){var n=t("../utils"),l=t("../support"),o=t("./ArrayReader"),u=t("./StringReader"),c=t("./NodeBufferReader"),v=t("./Uint8ArrayReader");a.exports=function(y){var b=n.getTypeOf(y);return n.checkSupport(b),b!=="string"||l.uint8array?b==="nodebuffer"?new c(y):l.uint8array?new v(n.transformTo("uint8array",y)):new o(n.transformTo("array",y)):new u(y)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(t,a,i){i.LOCAL_FILE_HEADER="PK",i.CENTRAL_FILE_HEADER="PK",i.CENTRAL_DIRECTORY_END="PK",i.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK\x07",i.ZIP64_CENTRAL_DIRECTORY_END="PK",i.DATA_DESCRIPTOR="PK\x07\b"},{}],24:[function(t,a,i){var n=t("./GenericWorker"),l=t("../utils");function o(u){n.call(this,"ConvertWorker to "+u),this.destType=u}l.inherits(o,n),o.prototype.processChunk=function(u){this.push({data:l.transformTo(this.destType,u.data),meta:u.meta})},a.exports=o},{"../utils":32,"./GenericWorker":28}],25:[function(t,a,i){var n=t("./GenericWorker"),l=t("../crc32");function o(){n.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}t("../utils").inherits(o,n),o.prototype.processChunk=function(u){this.streamInfo.crc32=l(u.data,this.streamInfo.crc32||0),this.push(u)},a.exports=o},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(t,a,i){var n=t("../utils"),l=t("./GenericWorker");function o(u){l.call(this,"DataLengthProbe for "+u),this.propName=u,this.withStreamInfo(u,0)}n.inherits(o,l),o.prototype.processChunk=function(u){if(u){var c=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=c+u.data.length}l.prototype.processChunk.call(this,u)},a.exports=o},{"../utils":32,"./GenericWorker":28}],27:[function(t,a,i){var n=t("../utils"),l=t("./GenericWorker");function o(u){l.call(this,"DataWorker");var c=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,u.then(function(v){c.dataIsReady=!0,c.data=v,c.max=v&&v.length||0,c.type=n.getTypeOf(v),c.isPaused||c._tickAndRepeat()},function(v){c.error(v)})}n.inherits(o,l),o.prototype.cleanUp=function(){l.prototype.cleanUp.call(this),this.data=null},o.prototype.resume=function(){return!!l.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},o.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},o.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var u=null,c=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":u=this.data.substring(this.index,c);break;case"uint8array":u=this.data.subarray(this.index,c);break;case"array":case"nodebuffer":u=this.data.slice(this.index,c)}return this.index=c,this.push({data:u,meta:{percent:this.max?this.index/this.max*100:0}})},a.exports=o},{"../utils":32,"./GenericWorker":28}],28:[function(t,a,i){function n(l){this.name=l||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(l){this.emit("data",l)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(l){this.emit("error",l)}return!0},error:function(l){return!this.isFinished&&(this.isPaused?this.generatedError=l:(this.isFinished=!0,this.emit("error",l),this.previous&&this.previous.error(l),this.cleanUp()),!0)},on:function(l,o){return this._listeners[l].push(o),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(l,o){if(this._listeners[l])for(var u=0;u<this._listeners[l].length;u++)this._listeners[l][u].call(this,o)},pipe:function(l){return l.registerPrevious(this)},registerPrevious:function(l){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.streamInfo=l.streamInfo,this.mergeStreamInfo(),this.previous=l;var o=this;return l.on("data",function(u){o.processChunk(u)}),l.on("end",function(){o.end()}),l.on("error",function(u){o.error(u)}),this},pause:function(){return!this.isPaused&&!this.isFinished&&(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;var l=this.isPaused=!1;return this.generatedError&&(this.error(this.generatedError),l=!0),this.previous&&this.previous.resume(),!l},flush:function(){},processChunk:function(l){this.push(l)},withStreamInfo:function(l,o){return this.extraStreamInfo[l]=o,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var l in this.extraStreamInfo)Object.prototype.hasOwnProperty.call(this.extraStreamInfo,l)&&(this.streamInfo[l]=this.extraStreamInfo[l])},lock:function(){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var l="Worker "+this.name;return this.previous?this.previous+" -> "+l:l}},a.exports=n},{}],29:[function(t,a,i){var n=t("../utils"),l=t("./ConvertWorker"),o=t("./GenericWorker"),u=t("../base64"),c=t("../support"),v=t("../external"),y=null;if(c.nodestream)try{y=t("../nodejs/NodejsStreamOutputAdapter")}catch{}function b(C,p){return new v.Promise(function(d,h){var w=[],k=C._internalType,x=C._outputType,_=C._mimeType;C.on("data",function(W,P){w.push(W),p&&p(P)}).on("error",function(W){w=[],h(W)}).on("end",function(){try{var W=(function(P,H,z){switch(P){case"blob":return n.newBlob(n.transformTo("arraybuffer",H),z);case"base64":return u.encode(H);default:return n.transformTo(P,H)}})(x,(function(P,H){var z,Z=0,ne=null,F=0;for(z=0;z<H.length;z++)F+=H[z].length;switch(P){case"string":return H.join("");case"array":return Array.prototype.concat.apply([],H);case"uint8array":for(ne=new Uint8Array(F),z=0;z<H.length;z++)ne.set(H[z],Z),Z+=H[z].length;return ne;case"nodebuffer":return Buffer.concat(H);default:throw new Error("concat : unsupported type '"+P+"'")}})(k,w),_);d(W)}catch(P){h(P)}w=[]}).resume()})}function m(C,p,d){var h=p;switch(p){case"blob":case"arraybuffer":h="uint8array";break;case"base64":h="string"}try{this._internalType=h,this._outputType=p,this._mimeType=d,n.checkSupport(h),this._worker=C.pipe(new l(h)),C.lock()}catch(w){this._worker=new o("error"),this._worker.error(w)}}m.prototype={accumulate:function(C){return b(this,C)},on:function(C,p){var d=this;return C==="data"?this._worker.on(C,function(h){p.call(d,h.data,h.meta)}):this._worker.on(C,function(){n.delay(p,arguments,d)}),this},resume:function(){return n.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(C){if(n.checkSupport("nodestream"),this._outputType!=="nodebuffer")throw new Error(this._outputType+" is not supported by this method");return new y(this,{objectMode:this._outputType!=="nodebuffer"},C)}},a.exports=m},{"../base64":1,"../external":6,"../nodejs/NodejsStreamOutputAdapter":13,"../support":30,"../utils":32,"./ConvertWorker":24,"./GenericWorker":28}],30:[function(t,a,i){if(i.base64=!0,i.array=!0,i.string=!0,i.arraybuffer=typeof ArrayBuffer<"u"&&typeof Uint8Array<"u",i.nodebuffer=typeof Buffer<"u",i.uint8array=typeof Uint8Array<"u",typeof ArrayBuffer>"u")i.blob=!1;else{var n=new ArrayBuffer(0);try{i.blob=new Blob([n],{type:"application/zip"}).size===0}catch{try{var l=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);l.append(n),i.blob=l.getBlob("application/zip").size===0}catch{i.blob=!1}}}try{i.nodestream=!!t("readable-stream").Readable}catch{i.nodestream=!1}},{"readable-stream":16}],31:[function(t,a,i){for(var n=t("./utils"),l=t("./support"),o=t("./nodejsUtils"),u=t("./stream/GenericWorker"),c=new Array(256),v=0;v<256;v++)c[v]=252<=v?6:248<=v?5:240<=v?4:224<=v?3:192<=v?2:1;c[254]=c[254]=1;function y(){u.call(this,"utf-8 decode"),this.leftOver=null}function b(){u.call(this,"utf-8 encode")}i.utf8encode=function(m){return l.nodebuffer?o.newBufferFrom(m,"utf-8"):(function(C){var p,d,h,w,k,x=C.length,_=0;for(w=0;w<x;w++)(64512&(d=C.charCodeAt(w)))==55296&&w+1<x&&(64512&(h=C.charCodeAt(w+1)))==56320&&(d=65536+(d-55296<<10)+(h-56320),w++),_+=d<128?1:d<2048?2:d<65536?3:4;for(p=l.uint8array?new Uint8Array(_):new Array(_),w=k=0;k<_;w++)(64512&(d=C.charCodeAt(w)))==55296&&w+1<x&&(64512&(h=C.charCodeAt(w+1)))==56320&&(d=65536+(d-55296<<10)+(h-56320),w++),d<128?p[k++]=d:(d<2048?p[k++]=192|d>>>6:(d<65536?p[k++]=224|d>>>12:(p[k++]=240|d>>>18,p[k++]=128|d>>>12&63),p[k++]=128|d>>>6&63),p[k++]=128|63&d);return p})(m)},i.utf8decode=function(m){return l.nodebuffer?n.transformTo("nodebuffer",m).toString("utf-8"):(function(C){var p,d,h,w,k=C.length,x=new Array(2*k);for(p=d=0;p<k;)if((h=C[p++])<128)x[d++]=h;else if(4<(w=c[h]))x[d++]=65533,p+=w-1;else{for(h&=w===2?31:w===3?15:7;1<w&&p<k;)h=h<<6|63&C[p++],w--;1<w?x[d++]=65533:h<65536?x[d++]=h:(h-=65536,x[d++]=55296|h>>10&1023,x[d++]=56320|1023&h)}return x.length!==d&&(x.subarray?x=x.subarray(0,d):x.length=d),n.applyFromCharCode(x)})(m=n.transformTo(l.uint8array?"uint8array":"array",m))},n.inherits(y,u),y.prototype.processChunk=function(m){var C=n.transformTo(l.uint8array?"uint8array":"array",m.data);if(this.leftOver&&this.leftOver.length){if(l.uint8array){var p=C;(C=new Uint8Array(p.length+this.leftOver.length)).set(this.leftOver,0),C.set(p,this.leftOver.length)}else C=this.leftOver.concat(C);this.leftOver=null}var d=(function(w,k){var x;for((k=k||w.length)>w.length&&(k=w.length),x=k-1;0<=x&&(192&w[x])==128;)x--;return x<0||x===0?k:x+c[w[x]]>k?x:k})(C),h=C;d!==C.length&&(l.uint8array?(h=C.subarray(0,d),this.leftOver=C.subarray(d,C.length)):(h=C.slice(0,d),this.leftOver=C.slice(d,C.length))),this.push({data:i.utf8decode(h),meta:m.meta})},y.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:i.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},i.Utf8DecodeWorker=y,n.inherits(b,u),b.prototype.processChunk=function(m){this.push({data:i.utf8encode(m.data),meta:m.meta})},i.Utf8EncodeWorker=b},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(t,a,i){var n=t("./support"),l=t("./base64"),o=t("./nodejsUtils"),u=t("./external");function c(p){return p}function v(p,d){for(var h=0;h<p.length;++h)d[h]=255&p.charCodeAt(h);return d}t("setimmediate"),i.newBlob=function(p,d){i.checkSupport("blob");try{return new Blob([p],{type:d})}catch{try{var h=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return h.append(p),h.getBlob(d)}catch{throw new Error("Bug : can't construct the Blob.")}}};var y={stringifyByChunk:function(p,d,h){var w=[],k=0,x=p.length;if(x<=h)return String.fromCharCode.apply(null,p);for(;k<x;)d==="array"||d==="nodebuffer"?w.push(String.fromCharCode.apply(null,p.slice(k,Math.min(k+h,x)))):w.push(String.fromCharCode.apply(null,p.subarray(k,Math.min(k+h,x)))),k+=h;return w.join("")},stringifyByChar:function(p){for(var d="",h=0;h<p.length;h++)d+=String.fromCharCode(p[h]);return d},applyCanBeUsed:{uint8array:(function(){try{return n.uint8array&&String.fromCharCode.apply(null,new Uint8Array(1)).length===1}catch{return!1}})(),nodebuffer:(function(){try{return n.nodebuffer&&String.fromCharCode.apply(null,o.allocBuffer(1)).length===1}catch{return!1}})()}};function b(p){var d=65536,h=i.getTypeOf(p),w=!0;if(h==="uint8array"?w=y.applyCanBeUsed.uint8array:h==="nodebuffer"&&(w=y.applyCanBeUsed.nodebuffer),w)for(;1<d;)try{return y.stringifyByChunk(p,h,d)}catch{d=Math.floor(d/2)}return y.stringifyByChar(p)}function m(p,d){for(var h=0;h<p.length;h++)d[h]=p[h];return d}i.applyFromCharCode=b;var C={};C.string={string:c,array:function(p){return v(p,new Array(p.length))},arraybuffer:function(p){return C.string.uint8array(p).buffer},uint8array:function(p){return v(p,new Uint8Array(p.length))},nodebuffer:function(p){return v(p,o.allocBuffer(p.length))}},C.array={string:b,array:c,arraybuffer:function(p){return new Uint8Array(p).buffer},uint8array:function(p){return new Uint8Array(p)},nodebuffer:function(p){return o.newBufferFrom(p)}},C.arraybuffer={string:function(p){return b(new Uint8Array(p))},array:function(p){return m(new Uint8Array(p),new Array(p.byteLength))},arraybuffer:c,uint8array:function(p){return new Uint8Array(p)},nodebuffer:function(p){return o.newBufferFrom(new Uint8Array(p))}},C.uint8array={string:b,array:function(p){return m(p,new Array(p.length))},arraybuffer:function(p){return p.buffer},uint8array:c,nodebuffer:function(p){return o.newBufferFrom(p)}},C.nodebuffer={string:b,array:function(p){return m(p,new Array(p.length))},arraybuffer:function(p){return C.nodebuffer.uint8array(p).buffer},uint8array:function(p){return m(p,new Uint8Array(p.length))},nodebuffer:c},i.transformTo=function(p,d){if(d=d||"",!p)return d;i.checkSupport(p);var h=i.getTypeOf(d);return C[h][p](d)},i.resolve=function(p){for(var d=p.split("/"),h=[],w=0;w<d.length;w++){var k=d[w];k==="."||k===""&&w!==0&&w!==d.length-1||(k===".."?h.pop():h.push(k))}return h.join("/")},i.getTypeOf=function(p){return typeof p=="string"?"string":Object.prototype.toString.call(p)==="[object Array]"?"array":n.nodebuffer&&o.isBuffer(p)?"nodebuffer":n.uint8array&&p instanceof Uint8Array?"uint8array":n.arraybuffer&&p instanceof ArrayBuffer?"arraybuffer":void 0},i.checkSupport=function(p){if(!n[p.toLowerCase()])throw new Error(p+" is not supported by this platform")},i.MAX_VALUE_16BITS=65535,i.MAX_VALUE_32BITS=-1,i.pretty=function(p){var d,h,w="";for(h=0;h<(p||"").length;h++)w+="\\x"+((d=p.charCodeAt(h))<16?"0":"")+d.toString(16).toUpperCase();return w},i.delay=function(p,d,h){setImmediate(function(){p.apply(h||null,d||[])})},i.inherits=function(p,d){function h(){}h.prototype=d.prototype,p.prototype=new h},i.extend=function(){var p,d,h={};for(p=0;p<arguments.length;p++)for(d in arguments[p])Object.prototype.hasOwnProperty.call(arguments[p],d)&&h[d]===void 0&&(h[d]=arguments[p][d]);return h},i.prepareContent=function(p,d,h,w,k){return u.Promise.resolve(d).then(function(x){return n.blob&&(x instanceof Blob||["[object File]","[object Blob]"].indexOf(Object.prototype.toString.call(x))!==-1)&&typeof FileReader<"u"?new u.Promise(function(_,W){var P=new FileReader;P.onload=function(H){_(H.target.result)},P.onerror=function(H){W(H.target.error)},P.readAsArrayBuffer(x)}):x}).then(function(x){var _=i.getTypeOf(x);return _?(_==="arraybuffer"?x=i.transformTo("uint8array",x):_==="string"&&(k?x=l.decode(x):h&&w!==!0&&(x=(function(W){return v(W,n.uint8array?new Uint8Array(W.length):new Array(W.length))})(x))),x):u.Promise.reject(new Error("Can't read the data of '"+p+"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?"))})}},{"./base64":1,"./external":6,"./nodejsUtils":14,"./support":30,setimmediate:54}],33:[function(t,a,i){var n=t("./reader/readerFor"),l=t("./utils"),o=t("./signature"),u=t("./zipEntry"),c=t("./support");function v(y){this.files=[],this.loadOptions=y}v.prototype={checkSignature:function(y){if(!this.reader.readAndCheckSignature(y)){this.reader.index-=4;var b=this.reader.readString(4);throw new Error("Corrupted zip or bug: unexpected signature ("+l.pretty(b)+", expected "+l.pretty(y)+")")}},isSignature:function(y,b){var m=this.reader.index;this.reader.setIndex(y);var C=this.reader.readString(4)===b;return this.reader.setIndex(m),C},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var y=this.reader.readData(this.zipCommentLength),b=c.uint8array?"uint8array":"array",m=l.transformTo(b,y);this.zipComment=this.loadOptions.decodeFileName(m)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var y,b,m,C=this.zip64EndOfCentralSize-44;0<C;)y=this.reader.readInt(2),b=this.reader.readInt(4),m=this.reader.readData(b),this.zip64ExtensibleData[y]={id:y,length:b,value:m}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),1<this.disksCount)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var y,b;for(y=0;y<this.files.length;y++)b=this.files[y],this.reader.setIndex(b.localHeaderOffset),this.checkSignature(o.LOCAL_FILE_HEADER),b.readLocalPart(this.reader),b.handleUTF8(),b.processAttributes()},readCentralDir:function(){var y;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(o.CENTRAL_FILE_HEADER);)(y=new u({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(y);if(this.centralDirRecords!==this.files.length&&this.centralDirRecords!==0&&this.files.length===0)throw new Error("Corrupted zip or bug: expected "+this.centralDirRecords+" records in central dir, got "+this.files.length)},readEndOfCentral:function(){var y=this.reader.lastIndexOfSignature(o.CENTRAL_DIRECTORY_END);if(y<0)throw this.isSignature(0,o.LOCAL_FILE_HEADER)?new Error("Corrupted zip: can't find end of central directory"):new Error("Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html");this.reader.setIndex(y);var b=y;if(this.checkSignature(o.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===l.MAX_VALUE_16BITS||this.diskWithCentralDirStart===l.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===l.MAX_VALUE_16BITS||this.centralDirRecords===l.MAX_VALUE_16BITS||this.centralDirSize===l.MAX_VALUE_32BITS||this.centralDirOffset===l.MAX_VALUE_32BITS){if(this.zip64=!0,(y=this.reader.lastIndexOfSignature(o.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator");if(this.reader.setIndex(y),this.checkSignature(o.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,o.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(o.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error("Corrupted zip: can't find the ZIP64 end of central directory");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(o.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var m=this.centralDirOffset+this.centralDirSize;this.zip64&&(m+=20,m+=12+this.zip64EndOfCentralSize);var C=b-m;if(0<C)this.isSignature(b,o.CENTRAL_FILE_HEADER)||(this.reader.zero=C);else if(C<0)throw new Error("Corrupted zip: missing "+Math.abs(C)+" bytes.")},prepareReader:function(y){this.reader=n(y)},load:function(y){this.prepareReader(y),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},a.exports=v},{"./reader/readerFor":22,"./signature":23,"./support":30,"./utils":32,"./zipEntry":34}],34:[function(t,a,i){var n=t("./reader/readerFor"),l=t("./utils"),o=t("./compressedObject"),u=t("./crc32"),c=t("./utf8"),v=t("./compressions"),y=t("./support");function b(m,C){this.options=m,this.loadOptions=C}b.prototype={isEncrypted:function(){return(1&this.bitFlag)==1},useUTF8:function(){return(2048&this.bitFlag)==2048},readLocalPart:function(m){var C,p;if(m.skip(22),this.fileNameLength=m.readInt(2),p=m.readInt(2),this.fileName=m.readData(this.fileNameLength),m.skip(p),this.compressedSize===-1||this.uncompressedSize===-1)throw new Error("Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)");if((C=(function(d){for(var h in v)if(Object.prototype.hasOwnProperty.call(v,h)&&v[h].magic===d)return v[h];return null})(this.compressionMethod))===null)throw new Error("Corrupted zip : compression "+l.pretty(this.compressionMethod)+" unknown (inner file : "+l.transformTo("string",this.fileName)+")");this.decompressed=new o(this.compressedSize,this.uncompressedSize,this.crc32,C,m.readData(this.compressedSize))},readCentralPart:function(m){this.versionMadeBy=m.readInt(2),m.skip(2),this.bitFlag=m.readInt(2),this.compressionMethod=m.readString(2),this.date=m.readDate(),this.crc32=m.readInt(4),this.compressedSize=m.readInt(4),this.uncompressedSize=m.readInt(4);var C=m.readInt(2);if(this.extraFieldsLength=m.readInt(2),this.fileCommentLength=m.readInt(2),this.diskNumberStart=m.readInt(2),this.internalFileAttributes=m.readInt(2),this.externalFileAttributes=m.readInt(4),this.localHeaderOffset=m.readInt(4),this.isEncrypted())throw new Error("Encrypted zip are not supported");m.skip(C),this.readExtraFields(m),this.parseZIP64ExtraField(m),this.fileComment=m.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var m=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),m==0&&(this.dosPermissions=63&this.externalFileAttributes),m==3&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||this.fileNameStr.slice(-1)!=="/"||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var m=n(this.extraFields[1].value);this.uncompressedSize===l.MAX_VALUE_32BITS&&(this.uncompressedSize=m.readInt(8)),this.compressedSize===l.MAX_VALUE_32BITS&&(this.compressedSize=m.readInt(8)),this.localHeaderOffset===l.MAX_VALUE_32BITS&&(this.localHeaderOffset=m.readInt(8)),this.diskNumberStart===l.MAX_VALUE_32BITS&&(this.diskNumberStart=m.readInt(4))}},readExtraFields:function(m){var C,p,d,h=m.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});m.index+4<h;)C=m.readInt(2),p=m.readInt(2),d=m.readData(p),this.extraFields[C]={id:C,length:p,value:d};m.setIndex(h)},handleUTF8:function(){var m=y.uint8array?"uint8array":"array";if(this.useUTF8())this.fileNameStr=c.utf8decode(this.fileName),this.fileCommentStr=c.utf8decode(this.fileComment);else{var C=this.findExtraFieldUnicodePath();if(C!==null)this.fileNameStr=C;else{var p=l.transformTo(m,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(p)}var d=this.findExtraFieldUnicodeComment();if(d!==null)this.fileCommentStr=d;else{var h=l.transformTo(m,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(h)}}},findExtraFieldUnicodePath:function(){var m=this.extraFields[28789];if(m){var C=n(m.value);return C.readInt(1)!==1||u(this.fileName)!==C.readInt(4)?null:c.utf8decode(C.readData(m.length-5))}return null},findExtraFieldUnicodeComment:function(){var m=this.extraFields[25461];if(m){var C=n(m.value);return C.readInt(1)!==1||u(this.fileComment)!==C.readInt(4)?null:c.utf8decode(C.readData(m.length-5))}return null}},a.exports=b},{"./compressedObject":2,"./compressions":3,"./crc32":4,"./reader/readerFor":22,"./support":30,"./utf8":31,"./utils":32}],35:[function(t,a,i){function n(C,p,d){this.name=C,this.dir=d.dir,this.date=d.date,this.comment=d.comment,this.unixPermissions=d.unixPermissions,this.dosPermissions=d.dosPermissions,this._data=p,this._dataBinary=d.binary,this.options={compression:d.compression,compressionOptions:d.compressionOptions}}var l=t("./stream/StreamHelper"),o=t("./stream/DataWorker"),u=t("./utf8"),c=t("./compressedObject"),v=t("./stream/GenericWorker");n.prototype={internalStream:function(C){var p=null,d="string";try{if(!C)throw new Error("No output type specified.");var h=(d=C.toLowerCase())==="string"||d==="text";d!=="binarystring"&&d!=="text"||(d="string"),p=this._decompressWorker();var w=!this._dataBinary;w&&!h&&(p=p.pipe(new u.Utf8EncodeWorker)),!w&&h&&(p=p.pipe(new u.Utf8DecodeWorker))}catch(k){(p=new v("error")).error(k)}return new l(p,d,"")},async:function(C,p){return this.internalStream(C).accumulate(p)},nodeStream:function(C,p){return this.internalStream(C||"nodebuffer").toNodejsStream(p)},_compressWorker:function(C,p){if(this._data instanceof c&&this._data.compression.magic===C.magic)return this._data.getCompressedWorker();var d=this._decompressWorker();return this._dataBinary||(d=d.pipe(new u.Utf8EncodeWorker)),c.createWorkerFrom(d,C,p)},_decompressWorker:function(){return this._data instanceof c?this._data.getContentWorker():this._data instanceof v?this._data:new o(this._data)}};for(var y=["asText","asBinary","asNodeBuffer","asUint8Array","asArrayBuffer"],b=function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},m=0;m<y.length;m++)n.prototype[y[m]]=b;a.exports=n},{"./compressedObject":2,"./stream/DataWorker":27,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31}],36:[function(t,a,i){(function(n){var l,o,u=n.MutationObserver||n.WebKitMutationObserver;if(u){var c=0,v=new u(C),y=n.document.createTextNode("");v.observe(y,{characterData:!0}),l=function(){y.data=c=++c%2}}else if(n.setImmediate||n.MessageChannel===void 0)l="document"in n&&"onreadystatechange"in n.document.createElement("script")?function(){var p=n.document.createElement("script");p.onreadystatechange=function(){C(),p.onreadystatechange=null,p.parentNode.removeChild(p),p=null},n.document.documentElement.appendChild(p)}:function(){setTimeout(C,0)};else{var b=new n.MessageChannel;b.port1.onmessage=C,l=function(){b.port2.postMessage(0)}}var m=[];function C(){var p,d;o=!0;for(var h=m.length;h;){for(d=m,m=[],p=-1;++p<h;)d[p]();h=m.length}o=!1}a.exports=function(p){m.push(p)!==1||o||l()}}).call(this,typeof vt<"u"?vt:typeof self<"u"?self:typeof window<"u"?window:{})},{}],37:[function(t,a,i){var n=t("immediate");function l(){}var o={},u=["REJECTED"],c=["FULFILLED"],v=["PENDING"];function y(h){if(typeof h!="function")throw new TypeError("resolver must be a function");this.state=v,this.queue=[],this.outcome=void 0,h!==l&&p(this,h)}function b(h,w,k){this.promise=h,typeof w=="function"&&(this.onFulfilled=w,this.callFulfilled=this.otherCallFulfilled),typeof k=="function"&&(this.onRejected=k,this.callRejected=this.otherCallRejected)}function m(h,w,k){n(function(){var x;try{x=w(k)}catch(_){return o.reject(h,_)}x===h?o.reject(h,new TypeError("Cannot resolve promise with itself")):o.resolve(h,x)})}function C(h){var w=h&&h.then;if(h&&(typeof h=="object"||typeof h=="function")&&typeof w=="function")return function(){w.apply(h,arguments)}}function p(h,w){var k=!1;function x(P){k||(k=!0,o.reject(h,P))}function _(P){k||(k=!0,o.resolve(h,P))}var W=d(function(){w(_,x)});W.status==="error"&&x(W.value)}function d(h,w){var k={};try{k.value=h(w),k.status="success"}catch(x){k.status="error",k.value=x}return k}(a.exports=y).prototype.finally=function(h){if(typeof h!="function")return this;var w=this.constructor;return this.then(function(k){return w.resolve(h()).then(function(){return k})},function(k){return w.resolve(h()).then(function(){throw k})})},y.prototype.catch=function(h){return this.then(null,h)},y.prototype.then=function(h,w){if(typeof h!="function"&&this.state===c||typeof w!="function"&&this.state===u)return this;var k=new this.constructor(l);return this.state!==v?m(k,this.state===c?h:w,this.outcome):this.queue.push(new b(k,h,w)),k},b.prototype.callFulfilled=function(h){o.resolve(this.promise,h)},b.prototype.otherCallFulfilled=function(h){m(this.promise,this.onFulfilled,h)},b.prototype.callRejected=function(h){o.reject(this.promise,h)},b.prototype.otherCallRejected=function(h){m(this.promise,this.onRejected,h)},o.resolve=function(h,w){var k=d(C,w);if(k.status==="error")return o.reject(h,k.value);var x=k.value;if(x)p(h,x);else{h.state=c,h.outcome=w;for(var _=-1,W=h.queue.length;++_<W;)h.queue[_].callFulfilled(w)}return h},o.reject=function(h,w){h.state=u,h.outcome=w;for(var k=-1,x=h.queue.length;++k<x;)h.queue[k].callRejected(w);return h},y.resolve=function(h){return h instanceof this?h:o.resolve(new this(l),h)},y.reject=function(h){var w=new this(l);return o.reject(w,h)},y.all=function(h){var w=this;if(Object.prototype.toString.call(h)!=="[object Array]")return this.reject(new TypeError("must be an array"));var k=h.length,x=!1;if(!k)return this.resolve([]);for(var _=new Array(k),W=0,P=-1,H=new this(l);++P<k;)z(h[P],P);return H;function z(Z,ne){w.resolve(Z).then(function(F){_[ne]=F,++W!==k||x||(x=!0,o.resolve(H,_))},function(F){x||(x=!0,o.reject(H,F))})}},y.race=function(h){var w=this;if(Object.prototype.toString.call(h)!=="[object Array]")return this.reject(new TypeError("must be an array"));var k=h.length,x=!1;if(!k)return this.resolve([]);for(var _=-1,W=new this(l);++_<k;)P=h[_],w.resolve(P).then(function(H){x||(x=!0,o.resolve(W,H))},function(H){x||(x=!0,o.reject(W,H))});var P;return W}},{immediate:36}],38:[function(t,a,i){var n={};(0,t("./lib/utils/common").assign)(n,t("./lib/deflate"),t("./lib/inflate"),t("./lib/zlib/constants")),a.exports=n},{"./lib/deflate":39,"./lib/inflate":40,"./lib/utils/common":41,"./lib/zlib/constants":44}],39:[function(t,a,i){var n=t("./zlib/deflate"),l=t("./utils/common"),o=t("./utils/strings"),u=t("./zlib/messages"),c=t("./zlib/zstream"),v=Object.prototype.toString,y=0,b=-1,m=0,C=8;function p(h){if(!(this instanceof p))return new p(h);this.options=l.assign({level:b,method:C,chunkSize:16384,windowBits:15,memLevel:8,strategy:m,to:""},h||{});var w=this.options;w.raw&&0<w.windowBits?w.windowBits=-w.windowBits:w.gzip&&0<w.windowBits&&w.windowBits<16&&(w.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new c,this.strm.avail_out=0;var k=n.deflateInit2(this.strm,w.level,w.method,w.windowBits,w.memLevel,w.strategy);if(k!==y)throw new Error(u[k]);if(w.header&&n.deflateSetHeader(this.strm,w.header),w.dictionary){var x;if(x=typeof w.dictionary=="string"?o.string2buf(w.dictionary):v.call(w.dictionary)==="[object ArrayBuffer]"?new Uint8Array(w.dictionary):w.dictionary,(k=n.deflateSetDictionary(this.strm,x))!==y)throw new Error(u[k]);this._dict_set=!0}}function d(h,w){var k=new p(w);if(k.push(h,!0),k.err)throw k.msg||u[k.err];return k.result}p.prototype.push=function(h,w){var k,x,_=this.strm,W=this.options.chunkSize;if(this.ended)return!1;x=w===~~w?w:w===!0?4:0,typeof h=="string"?_.input=o.string2buf(h):v.call(h)==="[object ArrayBuffer]"?_.input=new Uint8Array(h):_.input=h,_.next_in=0,_.avail_in=_.input.length;do{if(_.avail_out===0&&(_.output=new l.Buf8(W),_.next_out=0,_.avail_out=W),(k=n.deflate(_,x))!==1&&k!==y)return this.onEnd(k),!(this.ended=!0);_.avail_out!==0&&(_.avail_in!==0||x!==4&&x!==2)||(this.options.to==="string"?this.onData(o.buf2binstring(l.shrinkBuf(_.output,_.next_out))):this.onData(l.shrinkBuf(_.output,_.next_out)))}while((0<_.avail_in||_.avail_out===0)&&k!==1);return x===4?(k=n.deflateEnd(this.strm),this.onEnd(k),this.ended=!0,k===y):x!==2||(this.onEnd(y),!(_.avail_out=0))},p.prototype.onData=function(h){this.chunks.push(h)},p.prototype.onEnd=function(h){h===y&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=l.flattenChunks(this.chunks)),this.chunks=[],this.err=h,this.msg=this.strm.msg},i.Deflate=p,i.deflate=d,i.deflateRaw=function(h,w){return(w=w||{}).raw=!0,d(h,w)},i.gzip=function(h,w){return(w=w||{}).gzip=!0,d(h,w)}},{"./utils/common":41,"./utils/strings":42,"./zlib/deflate":46,"./zlib/messages":51,"./zlib/zstream":53}],40:[function(t,a,i){var n=t("./zlib/inflate"),l=t("./utils/common"),o=t("./utils/strings"),u=t("./zlib/constants"),c=t("./zlib/messages"),v=t("./zlib/zstream"),y=t("./zlib/gzheader"),b=Object.prototype.toString;function m(p){if(!(this instanceof m))return new m(p);this.options=l.assign({chunkSize:16384,windowBits:0,to:""},p||{});var d=this.options;d.raw&&0<=d.windowBits&&d.windowBits<16&&(d.windowBits=-d.windowBits,d.windowBits===0&&(d.windowBits=-15)),!(0<=d.windowBits&&d.windowBits<16)||p&&p.windowBits||(d.windowBits+=32),15<d.windowBits&&d.windowBits<48&&(15&d.windowBits)==0&&(d.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new v,this.strm.avail_out=0;var h=n.inflateInit2(this.strm,d.windowBits);if(h!==u.Z_OK)throw new Error(c[h]);this.header=new y,n.inflateGetHeader(this.strm,this.header)}function C(p,d){var h=new m(d);if(h.push(p,!0),h.err)throw h.msg||c[h.err];return h.result}m.prototype.push=function(p,d){var h,w,k,x,_,W,P=this.strm,H=this.options.chunkSize,z=this.options.dictionary,Z=!1;if(this.ended)return!1;w=d===~~d?d:d===!0?u.Z_FINISH:u.Z_NO_FLUSH,typeof p=="string"?P.input=o.binstring2buf(p):b.call(p)==="[object ArrayBuffer]"?P.input=new Uint8Array(p):P.input=p,P.next_in=0,P.avail_in=P.input.length;do{if(P.avail_out===0&&(P.output=new l.Buf8(H),P.next_out=0,P.avail_out=H),(h=n.inflate(P,u.Z_NO_FLUSH))===u.Z_NEED_DICT&&z&&(W=typeof z=="string"?o.string2buf(z):b.call(z)==="[object ArrayBuffer]"?new Uint8Array(z):z,h=n.inflateSetDictionary(this.strm,W)),h===u.Z_BUF_ERROR&&Z===!0&&(h=u.Z_OK,Z=!1),h!==u.Z_STREAM_END&&h!==u.Z_OK)return this.onEnd(h),!(this.ended=!0);P.next_out&&(P.avail_out!==0&&h!==u.Z_STREAM_END&&(P.avail_in!==0||w!==u.Z_FINISH&&w!==u.Z_SYNC_FLUSH)||(this.options.to==="string"?(k=o.utf8border(P.output,P.next_out),x=P.next_out-k,_=o.buf2string(P.output,k),P.next_out=x,P.avail_out=H-x,x&&l.arraySet(P.output,P.output,k,x,0),this.onData(_)):this.onData(l.shrinkBuf(P.output,P.next_out)))),P.avail_in===0&&P.avail_out===0&&(Z=!0)}while((0<P.avail_in||P.avail_out===0)&&h!==u.Z_STREAM_END);return h===u.Z_STREAM_END&&(w=u.Z_FINISH),w===u.Z_FINISH?(h=n.inflateEnd(this.strm),this.onEnd(h),this.ended=!0,h===u.Z_OK):w!==u.Z_SYNC_FLUSH||(this.onEnd(u.Z_OK),!(P.avail_out=0))},m.prototype.onData=function(p){this.chunks.push(p)},m.prototype.onEnd=function(p){p===u.Z_OK&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=l.flattenChunks(this.chunks)),this.chunks=[],this.err=p,this.msg=this.strm.msg},i.Inflate=m,i.inflate=C,i.inflateRaw=function(p,d){return(d=d||{}).raw=!0,C(p,d)},i.ungzip=C},{"./utils/common":41,"./utils/strings":42,"./zlib/constants":44,"./zlib/gzheader":47,"./zlib/inflate":49,"./zlib/messages":51,"./zlib/zstream":53}],41:[function(t,a,i){var n=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Int32Array<"u";i.assign=function(u){for(var c=Array.prototype.slice.call(arguments,1);c.length;){var v=c.shift();if(v){if(typeof v!="object")throw new TypeError(v+"must be non-object");for(var y in v)v.hasOwnProperty(y)&&(u[y]=v[y])}}return u},i.shrinkBuf=function(u,c){return u.length===c?u:u.subarray?u.subarray(0,c):(u.length=c,u)};var l={arraySet:function(u,c,v,y,b){if(c.subarray&&u.subarray)u.set(c.subarray(v,v+y),b);else for(var m=0;m<y;m++)u[b+m]=c[v+m]},flattenChunks:function(u){var c,v,y,b,m,C;for(c=y=0,v=u.length;c<v;c++)y+=u[c].length;for(C=new Uint8Array(y),c=b=0,v=u.length;c<v;c++)m=u[c],C.set(m,b),b+=m.length;return C}},o={arraySet:function(u,c,v,y,b){for(var m=0;m<y;m++)u[b+m]=c[v+m]},flattenChunks:function(u){return[].concat.apply([],u)}};i.setTyped=function(u){u?(i.Buf8=Uint8Array,i.Buf16=Uint16Array,i.Buf32=Int32Array,i.assign(i,l)):(i.Buf8=Array,i.Buf16=Array,i.Buf32=Array,i.assign(i,o))},i.setTyped(n)},{}],42:[function(t,a,i){var n=t("./common"),l=!0,o=!0;try{String.fromCharCode.apply(null,[0])}catch{l=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{o=!1}for(var u=new n.Buf8(256),c=0;c<256;c++)u[c]=252<=c?6:248<=c?5:240<=c?4:224<=c?3:192<=c?2:1;function v(y,b){if(b<65537&&(y.subarray&&o||!y.subarray&&l))return String.fromCharCode.apply(null,n.shrinkBuf(y,b));for(var m="",C=0;C<b;C++)m+=String.fromCharCode(y[C]);return m}u[254]=u[254]=1,i.string2buf=function(y){var b,m,C,p,d,h=y.length,w=0;for(p=0;p<h;p++)(64512&(m=y.charCodeAt(p)))==55296&&p+1<h&&(64512&(C=y.charCodeAt(p+1)))==56320&&(m=65536+(m-55296<<10)+(C-56320),p++),w+=m<128?1:m<2048?2:m<65536?3:4;for(b=new n.Buf8(w),p=d=0;d<w;p++)(64512&(m=y.charCodeAt(p)))==55296&&p+1<h&&(64512&(C=y.charCodeAt(p+1)))==56320&&(m=65536+(m-55296<<10)+(C-56320),p++),m<128?b[d++]=m:(m<2048?b[d++]=192|m>>>6:(m<65536?b[d++]=224|m>>>12:(b[d++]=240|m>>>18,b[d++]=128|m>>>12&63),b[d++]=128|m>>>6&63),b[d++]=128|63&m);return b},i.buf2binstring=function(y){return v(y,y.length)},i.binstring2buf=function(y){for(var b=new n.Buf8(y.length),m=0,C=b.length;m<C;m++)b[m]=y.charCodeAt(m);return b},i.buf2string=function(y,b){var m,C,p,d,h=b||y.length,w=new Array(2*h);for(m=C=0;m<h;)if((p=y[m++])<128)w[C++]=p;else if(4<(d=u[p]))w[C++]=65533,m+=d-1;else{for(p&=d===2?31:d===3?15:7;1<d&&m<h;)p=p<<6|63&y[m++],d--;1<d?w[C++]=65533:p<65536?w[C++]=p:(p-=65536,w[C++]=55296|p>>10&1023,w[C++]=56320|1023&p)}return v(w,C)},i.utf8border=function(y,b){var m;for((b=b||y.length)>y.length&&(b=y.length),m=b-1;0<=m&&(192&y[m])==128;)m--;return m<0||m===0?b:m+u[y[m]]>b?m:b}},{"./common":41}],43:[function(t,a,i){a.exports=function(n,l,o,u){for(var c=65535&n|0,v=n>>>16&65535|0,y=0;o!==0;){for(o-=y=2e3<o?2e3:o;v=v+(c=c+l[u++]|0)|0,--y;);c%=65521,v%=65521}return c|v<<16|0}},{}],44:[function(t,a,i){a.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],45:[function(t,a,i){var n=(function(){for(var l,o=[],u=0;u<256;u++){l=u;for(var c=0;c<8;c++)l=1&l?3988292384^l>>>1:l>>>1;o[u]=l}return o})();a.exports=function(l,o,u,c){var v=n,y=c+u;l^=-1;for(var b=c;b<y;b++)l=l>>>8^v[255&(l^o[b])];return-1^l}},{}],46:[function(t,a,i){var n,l=t("../utils/common"),o=t("./trees"),u=t("./adler32"),c=t("./crc32"),v=t("./messages"),y=0,b=4,m=0,C=-2,p=-1,d=4,h=2,w=8,k=9,x=286,_=30,W=19,P=2*x+1,H=15,z=3,Z=258,ne=Z+z+1,F=42,G=113,f=1,q=2,pe=3,O=4;function le(r,N){return r.msg=v[N],N}function Y(r){return(r<<1)-(4<r?9:0)}function ie(r){for(var N=r.length;0<=--N;)r[N]=0}function E(r){var N=r.state,B=N.pending;B>r.avail_out&&(B=r.avail_out),B!==0&&(l.arraySet(r.output,N.pending_buf,N.pending_out,B,r.next_out),r.next_out+=B,N.pending_out+=B,r.total_out+=B,r.avail_out-=B,N.pending-=B,N.pending===0&&(N.pending_out=0))}function I(r,N){o._tr_flush_block(r,0<=r.block_start?r.block_start:-1,r.strstart-r.block_start,N),r.block_start=r.strstart,E(r.strm)}function $(r,N){r.pending_buf[r.pending++]=N}function X(r,N){r.pending_buf[r.pending++]=N>>>8&255,r.pending_buf[r.pending++]=255&N}function V(r,N){var B,T,g=r.max_chain_length,S=r.strstart,K=r.prev_length,U=r.nice_match,R=r.strstart>r.w_size-ne?r.strstart-(r.w_size-ne):0,j=r.window,J=r.w_mask,M=r.prev,Q=r.strstart+Z,fe=j[S+K-1],te=j[S+K];r.prev_length>=r.good_match&&(g>>=2),U>r.lookahead&&(U=r.lookahead);do if(j[(B=N)+K]===te&&j[B+K-1]===fe&&j[B]===j[S]&&j[++B]===j[S+1]){S+=2,B++;do;while(j[++S]===j[++B]&&j[++S]===j[++B]&&j[++S]===j[++B]&&j[++S]===j[++B]&&j[++S]===j[++B]&&j[++S]===j[++B]&&j[++S]===j[++B]&&j[++S]===j[++B]&&S<Q);if(T=Z-(Q-S),S=Q-Z,K<T){if(r.match_start=N,U<=(K=T))break;fe=j[S+K-1],te=j[S+K]}}while((N=M[N&J])>R&&--g!=0);return K<=r.lookahead?K:r.lookahead}function be(r){var N,B,T,g,S,K,U,R,j,J,M=r.w_size;do{if(g=r.window_size-r.lookahead-r.strstart,r.strstart>=M+(M-ne)){for(l.arraySet(r.window,r.window,M,M,0),r.match_start-=M,r.strstart-=M,r.block_start-=M,N=B=r.hash_size;T=r.head[--N],r.head[N]=M<=T?T-M:0,--B;);for(N=B=M;T=r.prev[--N],r.prev[N]=M<=T?T-M:0,--B;);g+=M}if(r.strm.avail_in===0)break;if(K=r.strm,U=r.window,R=r.strstart+r.lookahead,j=g,J=void 0,J=K.avail_in,j<J&&(J=j),B=J===0?0:(K.avail_in-=J,l.arraySet(U,K.input,K.next_in,J,R),K.state.wrap===1?K.adler=u(K.adler,U,J,R):K.state.wrap===2&&(K.adler=c(K.adler,U,J,R)),K.next_in+=J,K.total_in+=J,J),r.lookahead+=B,r.lookahead+r.insert>=z)for(S=r.strstart-r.insert,r.ins_h=r.window[S],r.ins_h=(r.ins_h<<r.hash_shift^r.window[S+1])&r.hash_mask;r.insert&&(r.ins_h=(r.ins_h<<r.hash_shift^r.window[S+z-1])&r.hash_mask,r.prev[S&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=S,S++,r.insert--,!(r.lookahead+r.insert<z)););}while(r.lookahead<ne&&r.strm.avail_in!==0)}function ge(r,N){for(var B,T;;){if(r.lookahead<ne){if(be(r),r.lookahead<ne&&N===y)return f;if(r.lookahead===0)break}if(B=0,r.lookahead>=z&&(r.ins_h=(r.ins_h<<r.hash_shift^r.window[r.strstart+z-1])&r.hash_mask,B=r.prev[r.strstart&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=r.strstart),B!==0&&r.strstart-B<=r.w_size-ne&&(r.match_length=V(r,B)),r.match_length>=z)if(T=o._tr_tally(r,r.strstart-r.match_start,r.match_length-z),r.lookahead-=r.match_length,r.match_length<=r.max_lazy_match&&r.lookahead>=z){for(r.match_length--;r.strstart++,r.ins_h=(r.ins_h<<r.hash_shift^r.window[r.strstart+z-1])&r.hash_mask,B=r.prev[r.strstart&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=r.strstart,--r.match_length!=0;);r.strstart++}else r.strstart+=r.match_length,r.match_length=0,r.ins_h=r.window[r.strstart],r.ins_h=(r.ins_h<<r.hash_shift^r.window[r.strstart+1])&r.hash_mask;else T=o._tr_tally(r,0,r.window[r.strstart]),r.lookahead--,r.strstart++;if(T&&(I(r,!1),r.strm.avail_out===0))return f}return r.insert=r.strstart<z-1?r.strstart:z-1,N===b?(I(r,!0),r.strm.avail_out===0?pe:O):r.last_lit&&(I(r,!1),r.strm.avail_out===0)?f:q}function ee(r,N){for(var B,T,g;;){if(r.lookahead<ne){if(be(r),r.lookahead<ne&&N===y)return f;if(r.lookahead===0)break}if(B=0,r.lookahead>=z&&(r.ins_h=(r.ins_h<<r.hash_shift^r.window[r.strstart+z-1])&r.hash_mask,B=r.prev[r.strstart&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=r.strstart),r.prev_length=r.match_length,r.prev_match=r.match_start,r.match_length=z-1,B!==0&&r.prev_length<r.max_lazy_match&&r.strstart-B<=r.w_size-ne&&(r.match_length=V(r,B),r.match_length<=5&&(r.strategy===1||r.match_length===z&&4096<r.strstart-r.match_start)&&(r.match_length=z-1)),r.prev_length>=z&&r.match_length<=r.prev_length){for(g=r.strstart+r.lookahead-z,T=o._tr_tally(r,r.strstart-1-r.prev_match,r.prev_length-z),r.lookahead-=r.prev_length-1,r.prev_length-=2;++r.strstart<=g&&(r.ins_h=(r.ins_h<<r.hash_shift^r.window[r.strstart+z-1])&r.hash_mask,B=r.prev[r.strstart&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=r.strstart),--r.prev_length!=0;);if(r.match_available=0,r.match_length=z-1,r.strstart++,T&&(I(r,!1),r.strm.avail_out===0))return f}else if(r.match_available){if((T=o._tr_tally(r,0,r.window[r.strstart-1]))&&I(r,!1),r.strstart++,r.lookahead--,r.strm.avail_out===0)return f}else r.match_available=1,r.strstart++,r.lookahead--}return r.match_available&&(T=o._tr_tally(r,0,r.window[r.strstart-1]),r.match_available=0),r.insert=r.strstart<z-1?r.strstart:z-1,N===b?(I(r,!0),r.strm.avail_out===0?pe:O):r.last_lit&&(I(r,!1),r.strm.avail_out===0)?f:q}function ae(r,N,B,T,g){this.good_length=r,this.max_lazy=N,this.nice_length=B,this.max_chain=T,this.func=g}function me(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=w,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new l.Buf16(2*P),this.dyn_dtree=new l.Buf16(2*(2*_+1)),this.bl_tree=new l.Buf16(2*(2*W+1)),ie(this.dyn_ltree),ie(this.dyn_dtree),ie(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new l.Buf16(H+1),this.heap=new l.Buf16(2*x+1),ie(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new l.Buf16(2*x+1),ie(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function ce(r){var N;return r&&r.state?(r.total_in=r.total_out=0,r.data_type=h,(N=r.state).pending=0,N.pending_out=0,N.wrap<0&&(N.wrap=-N.wrap),N.status=N.wrap?F:G,r.adler=N.wrap===2?0:1,N.last_flush=y,o._tr_init(N),m):le(r,C)}function ye(r){var N=ce(r);return N===m&&(function(B){B.window_size=2*B.w_size,ie(B.head),B.max_lazy_match=n[B.level].max_lazy,B.good_match=n[B.level].good_length,B.nice_match=n[B.level].nice_length,B.max_chain_length=n[B.level].max_chain,B.strstart=0,B.block_start=0,B.lookahead=0,B.insert=0,B.match_length=B.prev_length=z-1,B.match_available=0,B.ins_h=0})(r.state),N}function Te(r,N,B,T,g,S){if(!r)return C;var K=1;if(N===p&&(N=6),T<0?(K=0,T=-T):15<T&&(K=2,T-=16),g<1||k<g||B!==w||T<8||15<T||N<0||9<N||S<0||d<S)return le(r,C);T===8&&(T=9);var U=new me;return(r.state=U).strm=r,U.wrap=K,U.gzhead=null,U.w_bits=T,U.w_size=1<<U.w_bits,U.w_mask=U.w_size-1,U.hash_bits=g+7,U.hash_size=1<<U.hash_bits,U.hash_mask=U.hash_size-1,U.hash_shift=~~((U.hash_bits+z-1)/z),U.window=new l.Buf8(2*U.w_size),U.head=new l.Buf16(U.hash_size),U.prev=new l.Buf16(U.w_size),U.lit_bufsize=1<<g+6,U.pending_buf_size=4*U.lit_bufsize,U.pending_buf=new l.Buf8(U.pending_buf_size),U.d_buf=1*U.lit_bufsize,U.l_buf=3*U.lit_bufsize,U.level=N,U.strategy=S,U.method=B,ye(r)}n=[new ae(0,0,0,0,function(r,N){var B=65535;for(B>r.pending_buf_size-5&&(B=r.pending_buf_size-5);;){if(r.lookahead<=1){if(be(r),r.lookahead===0&&N===y)return f;if(r.lookahead===0)break}r.strstart+=r.lookahead,r.lookahead=0;var T=r.block_start+B;if((r.strstart===0||r.strstart>=T)&&(r.lookahead=r.strstart-T,r.strstart=T,I(r,!1),r.strm.avail_out===0)||r.strstart-r.block_start>=r.w_size-ne&&(I(r,!1),r.strm.avail_out===0))return f}return r.insert=0,N===b?(I(r,!0),r.strm.avail_out===0?pe:O):(r.strstart>r.block_start&&(I(r,!1),r.strm.avail_out),f)}),new ae(4,4,8,4,ge),new ae(4,5,16,8,ge),new ae(4,6,32,32,ge),new ae(4,4,16,16,ee),new ae(8,16,32,32,ee),new ae(8,16,128,128,ee),new ae(8,32,128,256,ee),new ae(32,128,258,1024,ee),new ae(32,258,258,4096,ee)],i.deflateInit=function(r,N){return Te(r,N,w,15,8,0)},i.deflateInit2=Te,i.deflateReset=ye,i.deflateResetKeep=ce,i.deflateSetHeader=function(r,N){return r&&r.state?r.state.wrap!==2?C:(r.state.gzhead=N,m):C},i.deflate=function(r,N){var B,T,g,S;if(!r||!r.state||5<N||N<0)return r?le(r,C):C;if(T=r.state,!r.output||!r.input&&r.avail_in!==0||T.status===666&&N!==b)return le(r,r.avail_out===0?-5:C);if(T.strm=r,B=T.last_flush,T.last_flush=N,T.status===F)if(T.wrap===2)r.adler=0,$(T,31),$(T,139),$(T,8),T.gzhead?($(T,(T.gzhead.text?1:0)+(T.gzhead.hcrc?2:0)+(T.gzhead.extra?4:0)+(T.gzhead.name?8:0)+(T.gzhead.comment?16:0)),$(T,255&T.gzhead.time),$(T,T.gzhead.time>>8&255),$(T,T.gzhead.time>>16&255),$(T,T.gzhead.time>>24&255),$(T,T.level===9?2:2<=T.strategy||T.level<2?4:0),$(T,255&T.gzhead.os),T.gzhead.extra&&T.gzhead.extra.length&&($(T,255&T.gzhead.extra.length),$(T,T.gzhead.extra.length>>8&255)),T.gzhead.hcrc&&(r.adler=c(r.adler,T.pending_buf,T.pending,0)),T.gzindex=0,T.status=69):($(T,0),$(T,0),$(T,0),$(T,0),$(T,0),$(T,T.level===9?2:2<=T.strategy||T.level<2?4:0),$(T,3),T.status=G);else{var K=w+(T.w_bits-8<<4)<<8;K|=(2<=T.strategy||T.level<2?0:T.level<6?1:T.level===6?2:3)<<6,T.strstart!==0&&(K|=32),K+=31-K%31,T.status=G,X(T,K),T.strstart!==0&&(X(T,r.adler>>>16),X(T,65535&r.adler)),r.adler=1}if(T.status===69)if(T.gzhead.extra){for(g=T.pending;T.gzindex<(65535&T.gzhead.extra.length)&&(T.pending!==T.pending_buf_size||(T.gzhead.hcrc&&T.pending>g&&(r.adler=c(r.adler,T.pending_buf,T.pending-g,g)),E(r),g=T.pending,T.pending!==T.pending_buf_size));)$(T,255&T.gzhead.extra[T.gzindex]),T.gzindex++;T.gzhead.hcrc&&T.pending>g&&(r.adler=c(r.adler,T.pending_buf,T.pending-g,g)),T.gzindex===T.gzhead.extra.length&&(T.gzindex=0,T.status=73)}else T.status=73;if(T.status===73)if(T.gzhead.name){g=T.pending;do{if(T.pending===T.pending_buf_size&&(T.gzhead.hcrc&&T.pending>g&&(r.adler=c(r.adler,T.pending_buf,T.pending-g,g)),E(r),g=T.pending,T.pending===T.pending_buf_size)){S=1;break}S=T.gzindex<T.gzhead.name.length?255&T.gzhead.name.charCodeAt(T.gzindex++):0,$(T,S)}while(S!==0);T.gzhead.hcrc&&T.pending>g&&(r.adler=c(r.adler,T.pending_buf,T.pending-g,g)),S===0&&(T.gzindex=0,T.status=91)}else T.status=91;if(T.status===91)if(T.gzhead.comment){g=T.pending;do{if(T.pending===T.pending_buf_size&&(T.gzhead.hcrc&&T.pending>g&&(r.adler=c(r.adler,T.pending_buf,T.pending-g,g)),E(r),g=T.pending,T.pending===T.pending_buf_size)){S=1;break}S=T.gzindex<T.gzhead.comment.length?255&T.gzhead.comment.charCodeAt(T.gzindex++):0,$(T,S)}while(S!==0);T.gzhead.hcrc&&T.pending>g&&(r.adler=c(r.adler,T.pending_buf,T.pending-g,g)),S===0&&(T.status=103)}else T.status=103;if(T.status===103&&(T.gzhead.hcrc?(T.pending+2>T.pending_buf_size&&E(r),T.pending+2<=T.pending_buf_size&&($(T,255&r.adler),$(T,r.adler>>8&255),r.adler=0,T.status=G)):T.status=G),T.pending!==0){if(E(r),r.avail_out===0)return T.last_flush=-1,m}else if(r.avail_in===0&&Y(N)<=Y(B)&&N!==b)return le(r,-5);if(T.status===666&&r.avail_in!==0)return le(r,-5);if(r.avail_in!==0||T.lookahead!==0||N!==y&&T.status!==666){var U=T.strategy===2?(function(R,j){for(var J;;){if(R.lookahead===0&&(be(R),R.lookahead===0)){if(j===y)return f;break}if(R.match_length=0,J=o._tr_tally(R,0,R.window[R.strstart]),R.lookahead--,R.strstart++,J&&(I(R,!1),R.strm.avail_out===0))return f}return R.insert=0,j===b?(I(R,!0),R.strm.avail_out===0?pe:O):R.last_lit&&(I(R,!1),R.strm.avail_out===0)?f:q})(T,N):T.strategy===3?(function(R,j){for(var J,M,Q,fe,te=R.window;;){if(R.lookahead<=Z){if(be(R),R.lookahead<=Z&&j===y)return f;if(R.lookahead===0)break}if(R.match_length=0,R.lookahead>=z&&0<R.strstart&&(M=te[Q=R.strstart-1])===te[++Q]&&M===te[++Q]&&M===te[++Q]){fe=R.strstart+Z;do;while(M===te[++Q]&&M===te[++Q]&&M===te[++Q]&&M===te[++Q]&&M===te[++Q]&&M===te[++Q]&&M===te[++Q]&&M===te[++Q]&&Q<fe);R.match_length=Z-(fe-Q),R.match_length>R.lookahead&&(R.match_length=R.lookahead)}if(R.match_length>=z?(J=o._tr_tally(R,1,R.match_length-z),R.lookahead-=R.match_length,R.strstart+=R.match_length,R.match_length=0):(J=o._tr_tally(R,0,R.window[R.strstart]),R.lookahead--,R.strstart++),J&&(I(R,!1),R.strm.avail_out===0))return f}return R.insert=0,j===b?(I(R,!0),R.strm.avail_out===0?pe:O):R.last_lit&&(I(R,!1),R.strm.avail_out===0)?f:q})(T,N):n[T.level].func(T,N);if(U!==pe&&U!==O||(T.status=666),U===f||U===pe)return r.avail_out===0&&(T.last_flush=-1),m;if(U===q&&(N===1?o._tr_align(T):N!==5&&(o._tr_stored_block(T,0,0,!1),N===3&&(ie(T.head),T.lookahead===0&&(T.strstart=0,T.block_start=0,T.insert=0))),E(r),r.avail_out===0))return T.last_flush=-1,m}return N!==b?m:T.wrap<=0?1:(T.wrap===2?($(T,255&r.adler),$(T,r.adler>>8&255),$(T,r.adler>>16&255),$(T,r.adler>>24&255),$(T,255&r.total_in),$(T,r.total_in>>8&255),$(T,r.total_in>>16&255),$(T,r.total_in>>24&255)):(X(T,r.adler>>>16),X(T,65535&r.adler)),E(r),0<T.wrap&&(T.wrap=-T.wrap),T.pending!==0?m:1)},i.deflateEnd=function(r){var N;return r&&r.state?(N=r.state.status)!==F&&N!==69&&N!==73&&N!==91&&N!==103&&N!==G&&N!==666?le(r,C):(r.state=null,N===G?le(r,-3):m):C},i.deflateSetDictionary=function(r,N){var B,T,g,S,K,U,R,j,J=N.length;if(!r||!r.state||(S=(B=r.state).wrap)===2||S===1&&B.status!==F||B.lookahead)return C;for(S===1&&(r.adler=u(r.adler,N,J,0)),B.wrap=0,J>=B.w_size&&(S===0&&(ie(B.head),B.strstart=0,B.block_start=0,B.insert=0),j=new l.Buf8(B.w_size),l.arraySet(j,N,J-B.w_size,B.w_size,0),N=j,J=B.w_size),K=r.avail_in,U=r.next_in,R=r.input,r.avail_in=J,r.next_in=0,r.input=N,be(B);B.lookahead>=z;){for(T=B.strstart,g=B.lookahead-(z-1);B.ins_h=(B.ins_h<<B.hash_shift^B.window[T+z-1])&B.hash_mask,B.prev[T&B.w_mask]=B.head[B.ins_h],B.head[B.ins_h]=T,T++,--g;);B.strstart=T,B.lookahead=z-1,be(B)}return B.strstart+=B.lookahead,B.block_start=B.strstart,B.insert=B.lookahead,B.lookahead=0,B.match_length=B.prev_length=z-1,B.match_available=0,r.next_in=U,r.input=R,r.avail_in=K,B.wrap=S,m},i.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./messages":51,"./trees":52}],47:[function(t,a,i){a.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}},{}],48:[function(t,a,i){a.exports=function(n,l){var o,u,c,v,y,b,m,C,p,d,h,w,k,x,_,W,P,H,z,Z,ne,F,G,f,q;o=n.state,u=n.next_in,f=n.input,c=u+(n.avail_in-5),v=n.next_out,q=n.output,y=v-(l-n.avail_out),b=v+(n.avail_out-257),m=o.dmax,C=o.wsize,p=o.whave,d=o.wnext,h=o.window,w=o.hold,k=o.bits,x=o.lencode,_=o.distcode,W=(1<<o.lenbits)-1,P=(1<<o.distbits)-1;e:do{k<15&&(w+=f[u++]<<k,k+=8,w+=f[u++]<<k,k+=8),H=x[w&W];s:for(;;){if(w>>>=z=H>>>24,k-=z,(z=H>>>16&255)===0)q[v++]=65535&H;else{if(!(16&z)){if((64&z)==0){H=x[(65535&H)+(w&(1<<z)-1)];continue s}if(32&z){o.mode=12;break e}n.msg="invalid literal/length code",o.mode=30;break e}Z=65535&H,(z&=15)&&(k<z&&(w+=f[u++]<<k,k+=8),Z+=w&(1<<z)-1,w>>>=z,k-=z),k<15&&(w+=f[u++]<<k,k+=8,w+=f[u++]<<k,k+=8),H=_[w&P];t:for(;;){if(w>>>=z=H>>>24,k-=z,!(16&(z=H>>>16&255))){if((64&z)==0){H=_[(65535&H)+(w&(1<<z)-1)];continue t}n.msg="invalid distance code",o.mode=30;break e}if(ne=65535&H,k<(z&=15)&&(w+=f[u++]<<k,(k+=8)<z&&(w+=f[u++]<<k,k+=8)),m<(ne+=w&(1<<z)-1)){n.msg="invalid distance too far back",o.mode=30;break e}if(w>>>=z,k-=z,(z=v-y)<ne){if(p<(z=ne-z)&&o.sane){n.msg="invalid distance too far back",o.mode=30;break e}if(G=h,(F=0)===d){if(F+=C-z,z<Z){for(Z-=z;q[v++]=h[F++],--z;);F=v-ne,G=q}}else if(d<z){if(F+=C+d-z,(z-=d)<Z){for(Z-=z;q[v++]=h[F++],--z;);if(F=0,d<Z){for(Z-=z=d;q[v++]=h[F++],--z;);F=v-ne,G=q}}}else if(F+=d-z,z<Z){for(Z-=z;q[v++]=h[F++],--z;);F=v-ne,G=q}for(;2<Z;)q[v++]=G[F++],q[v++]=G[F++],q[v++]=G[F++],Z-=3;Z&&(q[v++]=G[F++],1<Z&&(q[v++]=G[F++]))}else{for(F=v-ne;q[v++]=q[F++],q[v++]=q[F++],q[v++]=q[F++],2<(Z-=3););Z&&(q[v++]=q[F++],1<Z&&(q[v++]=q[F++]))}break}}break}}while(u<c&&v<b);u-=Z=k>>3,w&=(1<<(k-=Z<<3))-1,n.next_in=u,n.next_out=v,n.avail_in=u<c?c-u+5:5-(u-c),n.avail_out=v<b?b-v+257:257-(v-b),o.hold=w,o.bits=k}},{}],49:[function(t,a,i){var n=t("../utils/common"),l=t("./adler32"),o=t("./crc32"),u=t("./inffast"),c=t("./inftrees"),v=1,y=2,b=0,m=-2,C=1,p=852,d=592;function h(F){return(F>>>24&255)+(F>>>8&65280)+((65280&F)<<8)+((255&F)<<24)}function w(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new n.Buf16(320),this.work=new n.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function k(F){var G;return F&&F.state?(G=F.state,F.total_in=F.total_out=G.total=0,F.msg="",G.wrap&&(F.adler=1&G.wrap),G.mode=C,G.last=0,G.havedict=0,G.dmax=32768,G.head=null,G.hold=0,G.bits=0,G.lencode=G.lendyn=new n.Buf32(p),G.distcode=G.distdyn=new n.Buf32(d),G.sane=1,G.back=-1,b):m}function x(F){var G;return F&&F.state?((G=F.state).wsize=0,G.whave=0,G.wnext=0,k(F)):m}function _(F,G){var f,q;return F&&F.state?(q=F.state,G<0?(f=0,G=-G):(f=1+(G>>4),G<48&&(G&=15)),G&&(G<8||15<G)?m:(q.window!==null&&q.wbits!==G&&(q.window=null),q.wrap=f,q.wbits=G,x(F))):m}function W(F,G){var f,q;return F?(q=new w,(F.state=q).window=null,(f=_(F,G))!==b&&(F.state=null),f):m}var P,H,z=!0;function Z(F){if(z){var G;for(P=new n.Buf32(512),H=new n.Buf32(32),G=0;G<144;)F.lens[G++]=8;for(;G<256;)F.lens[G++]=9;for(;G<280;)F.lens[G++]=7;for(;G<288;)F.lens[G++]=8;for(c(v,F.lens,0,288,P,0,F.work,{bits:9}),G=0;G<32;)F.lens[G++]=5;c(y,F.lens,0,32,H,0,F.work,{bits:5}),z=!1}F.lencode=P,F.lenbits=9,F.distcode=H,F.distbits=5}function ne(F,G,f,q){var pe,O=F.state;return O.window===null&&(O.wsize=1<<O.wbits,O.wnext=0,O.whave=0,O.window=new n.Buf8(O.wsize)),q>=O.wsize?(n.arraySet(O.window,G,f-O.wsize,O.wsize,0),O.wnext=0,O.whave=O.wsize):(q<(pe=O.wsize-O.wnext)&&(pe=q),n.arraySet(O.window,G,f-q,pe,O.wnext),(q-=pe)?(n.arraySet(O.window,G,f-q,q,0),O.wnext=q,O.whave=O.wsize):(O.wnext+=pe,O.wnext===O.wsize&&(O.wnext=0),O.whave<O.wsize&&(O.whave+=pe))),0}i.inflateReset=x,i.inflateReset2=_,i.inflateResetKeep=k,i.inflateInit=function(F){return W(F,15)},i.inflateInit2=W,i.inflate=function(F,G){var f,q,pe,O,le,Y,ie,E,I,$,X,V,be,ge,ee,ae,me,ce,ye,Te,r,N,B,T,g=0,S=new n.Buf8(4),K=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!F||!F.state||!F.output||!F.input&&F.avail_in!==0)return m;(f=F.state).mode===12&&(f.mode=13),le=F.next_out,pe=F.output,ie=F.avail_out,O=F.next_in,q=F.input,Y=F.avail_in,E=f.hold,I=f.bits,$=Y,X=ie,N=b;e:for(;;)switch(f.mode){case C:if(f.wrap===0){f.mode=13;break}for(;I<16;){if(Y===0)break e;Y--,E+=q[O++]<<I,I+=8}if(2&f.wrap&&E===35615){S[f.check=0]=255&E,S[1]=E>>>8&255,f.check=o(f.check,S,2,0),I=E=0,f.mode=2;break}if(f.flags=0,f.head&&(f.head.done=!1),!(1&f.wrap)||(((255&E)<<8)+(E>>8))%31){F.msg="incorrect header check",f.mode=30;break}if((15&E)!=8){F.msg="unknown compression method",f.mode=30;break}if(I-=4,r=8+(15&(E>>>=4)),f.wbits===0)f.wbits=r;else if(r>f.wbits){F.msg="invalid window size",f.mode=30;break}f.dmax=1<<r,F.adler=f.check=1,f.mode=512&E?10:12,I=E=0;break;case 2:for(;I<16;){if(Y===0)break e;Y--,E+=q[O++]<<I,I+=8}if(f.flags=E,(255&f.flags)!=8){F.msg="unknown compression method",f.mode=30;break}if(57344&f.flags){F.msg="unknown header flags set",f.mode=30;break}f.head&&(f.head.text=E>>8&1),512&f.flags&&(S[0]=255&E,S[1]=E>>>8&255,f.check=o(f.check,S,2,0)),I=E=0,f.mode=3;case 3:for(;I<32;){if(Y===0)break e;Y--,E+=q[O++]<<I,I+=8}f.head&&(f.head.time=E),512&f.flags&&(S[0]=255&E,S[1]=E>>>8&255,S[2]=E>>>16&255,S[3]=E>>>24&255,f.check=o(f.check,S,4,0)),I=E=0,f.mode=4;case 4:for(;I<16;){if(Y===0)break e;Y--,E+=q[O++]<<I,I+=8}f.head&&(f.head.xflags=255&E,f.head.os=E>>8),512&f.flags&&(S[0]=255&E,S[1]=E>>>8&255,f.check=o(f.check,S,2,0)),I=E=0,f.mode=5;case 5:if(1024&f.flags){for(;I<16;){if(Y===0)break e;Y--,E+=q[O++]<<I,I+=8}f.length=E,f.head&&(f.head.extra_len=E),512&f.flags&&(S[0]=255&E,S[1]=E>>>8&255,f.check=o(f.check,S,2,0)),I=E=0}else f.head&&(f.head.extra=null);f.mode=6;case 6:if(1024&f.flags&&(Y<(V=f.length)&&(V=Y),V&&(f.head&&(r=f.head.extra_len-f.length,f.head.extra||(f.head.extra=new Array(f.head.extra_len)),n.arraySet(f.head.extra,q,O,V,r)),512&f.flags&&(f.check=o(f.check,q,V,O)),Y-=V,O+=V,f.length-=V),f.length))break e;f.length=0,f.mode=7;case 7:if(2048&f.flags){if(Y===0)break e;for(V=0;r=q[O+V++],f.head&&r&&f.length<65536&&(f.head.name+=String.fromCharCode(r)),r&&V<Y;);if(512&f.flags&&(f.check=o(f.check,q,V,O)),Y-=V,O+=V,r)break e}else f.head&&(f.head.name=null);f.length=0,f.mode=8;case 8:if(4096&f.flags){if(Y===0)break e;for(V=0;r=q[O+V++],f.head&&r&&f.length<65536&&(f.head.comment+=String.fromCharCode(r)),r&&V<Y;);if(512&f.flags&&(f.check=o(f.check,q,V,O)),Y-=V,O+=V,r)break e}else f.head&&(f.head.comment=null);f.mode=9;case 9:if(512&f.flags){for(;I<16;){if(Y===0)break e;Y--,E+=q[O++]<<I,I+=8}if(E!==(65535&f.check)){F.msg="header crc mismatch",f.mode=30;break}I=E=0}f.head&&(f.head.hcrc=f.flags>>9&1,f.head.done=!0),F.adler=f.check=0,f.mode=12;break;case 10:for(;I<32;){if(Y===0)break e;Y--,E+=q[O++]<<I,I+=8}F.adler=f.check=h(E),I=E=0,f.mode=11;case 11:if(f.havedict===0)return F.next_out=le,F.avail_out=ie,F.next_in=O,F.avail_in=Y,f.hold=E,f.bits=I,2;F.adler=f.check=1,f.mode=12;case 12:if(G===5||G===6)break e;case 13:if(f.last){E>>>=7&I,I-=7&I,f.mode=27;break}for(;I<3;){if(Y===0)break e;Y--,E+=q[O++]<<I,I+=8}switch(f.last=1&E,I-=1,3&(E>>>=1)){case 0:f.mode=14;break;case 1:if(Z(f),f.mode=20,G!==6)break;E>>>=2,I-=2;break e;case 2:f.mode=17;break;case 3:F.msg="invalid block type",f.mode=30}E>>>=2,I-=2;break;case 14:for(E>>>=7&I,I-=7&I;I<32;){if(Y===0)break e;Y--,E+=q[O++]<<I,I+=8}if((65535&E)!=(E>>>16^65535)){F.msg="invalid stored block lengths",f.mode=30;break}if(f.length=65535&E,I=E=0,f.mode=15,G===6)break e;case 15:f.mode=16;case 16:if(V=f.length){if(Y<V&&(V=Y),ie<V&&(V=ie),V===0)break e;n.arraySet(pe,q,O,V,le),Y-=V,O+=V,ie-=V,le+=V,f.length-=V;break}f.mode=12;break;case 17:for(;I<14;){if(Y===0)break e;Y--,E+=q[O++]<<I,I+=8}if(f.nlen=257+(31&E),E>>>=5,I-=5,f.ndist=1+(31&E),E>>>=5,I-=5,f.ncode=4+(15&E),E>>>=4,I-=4,286<f.nlen||30<f.ndist){F.msg="too many length or distance symbols",f.mode=30;break}f.have=0,f.mode=18;case 18:for(;f.have<f.ncode;){for(;I<3;){if(Y===0)break e;Y--,E+=q[O++]<<I,I+=8}f.lens[K[f.have++]]=7&E,E>>>=3,I-=3}for(;f.have<19;)f.lens[K[f.have++]]=0;if(f.lencode=f.lendyn,f.lenbits=7,B={bits:f.lenbits},N=c(0,f.lens,0,19,f.lencode,0,f.work,B),f.lenbits=B.bits,N){F.msg="invalid code lengths set",f.mode=30;break}f.have=0,f.mode=19;case 19:for(;f.have<f.nlen+f.ndist;){for(;ae=(g=f.lencode[E&(1<<f.lenbits)-1])>>>16&255,me=65535&g,!((ee=g>>>24)<=I);){if(Y===0)break e;Y--,E+=q[O++]<<I,I+=8}if(me<16)E>>>=ee,I-=ee,f.lens[f.have++]=me;else{if(me===16){for(T=ee+2;I<T;){if(Y===0)break e;Y--,E+=q[O++]<<I,I+=8}if(E>>>=ee,I-=ee,f.have===0){F.msg="invalid bit length repeat",f.mode=30;break}r=f.lens[f.have-1],V=3+(3&E),E>>>=2,I-=2}else if(me===17){for(T=ee+3;I<T;){if(Y===0)break e;Y--,E+=q[O++]<<I,I+=8}I-=ee,r=0,V=3+(7&(E>>>=ee)),E>>>=3,I-=3}else{for(T=ee+7;I<T;){if(Y===0)break e;Y--,E+=q[O++]<<I,I+=8}I-=ee,r=0,V=11+(127&(E>>>=ee)),E>>>=7,I-=7}if(f.have+V>f.nlen+f.ndist){F.msg="invalid bit length repeat",f.mode=30;break}for(;V--;)f.lens[f.have++]=r}}if(f.mode===30)break;if(f.lens[256]===0){F.msg="invalid code -- missing end-of-block",f.mode=30;break}if(f.lenbits=9,B={bits:f.lenbits},N=c(v,f.lens,0,f.nlen,f.lencode,0,f.work,B),f.lenbits=B.bits,N){F.msg="invalid literal/lengths set",f.mode=30;break}if(f.distbits=6,f.distcode=f.distdyn,B={bits:f.distbits},N=c(y,f.lens,f.nlen,f.ndist,f.distcode,0,f.work,B),f.distbits=B.bits,N){F.msg="invalid distances set",f.mode=30;break}if(f.mode=20,G===6)break e;case 20:f.mode=21;case 21:if(6<=Y&&258<=ie){F.next_out=le,F.avail_out=ie,F.next_in=O,F.avail_in=Y,f.hold=E,f.bits=I,u(F,X),le=F.next_out,pe=F.output,ie=F.avail_out,O=F.next_in,q=F.input,Y=F.avail_in,E=f.hold,I=f.bits,f.mode===12&&(f.back=-1);break}for(f.back=0;ae=(g=f.lencode[E&(1<<f.lenbits)-1])>>>16&255,me=65535&g,!((ee=g>>>24)<=I);){if(Y===0)break e;Y--,E+=q[O++]<<I,I+=8}if(ae&&(240&ae)==0){for(ce=ee,ye=ae,Te=me;ae=(g=f.lencode[Te+((E&(1<<ce+ye)-1)>>ce)])>>>16&255,me=65535&g,!(ce+(ee=g>>>24)<=I);){if(Y===0)break e;Y--,E+=q[O++]<<I,I+=8}E>>>=ce,I-=ce,f.back+=ce}if(E>>>=ee,I-=ee,f.back+=ee,f.length=me,ae===0){f.mode=26;break}if(32&ae){f.back=-1,f.mode=12;break}if(64&ae){F.msg="invalid literal/length code",f.mode=30;break}f.extra=15&ae,f.mode=22;case 22:if(f.extra){for(T=f.extra;I<T;){if(Y===0)break e;Y--,E+=q[O++]<<I,I+=8}f.length+=E&(1<<f.extra)-1,E>>>=f.extra,I-=f.extra,f.back+=f.extra}f.was=f.length,f.mode=23;case 23:for(;ae=(g=f.distcode[E&(1<<f.distbits)-1])>>>16&255,me=65535&g,!((ee=g>>>24)<=I);){if(Y===0)break e;Y--,E+=q[O++]<<I,I+=8}if((240&ae)==0){for(ce=ee,ye=ae,Te=me;ae=(g=f.distcode[Te+((E&(1<<ce+ye)-1)>>ce)])>>>16&255,me=65535&g,!(ce+(ee=g>>>24)<=I);){if(Y===0)break e;Y--,E+=q[O++]<<I,I+=8}E>>>=ce,I-=ce,f.back+=ce}if(E>>>=ee,I-=ee,f.back+=ee,64&ae){F.msg="invalid distance code",f.mode=30;break}f.offset=me,f.extra=15&ae,f.mode=24;case 24:if(f.extra){for(T=f.extra;I<T;){if(Y===0)break e;Y--,E+=q[O++]<<I,I+=8}f.offset+=E&(1<<f.extra)-1,E>>>=f.extra,I-=f.extra,f.back+=f.extra}if(f.offset>f.dmax){F.msg="invalid distance too far back",f.mode=30;break}f.mode=25;case 25:if(ie===0)break e;if(V=X-ie,f.offset>V){if((V=f.offset-V)>f.whave&&f.sane){F.msg="invalid distance too far back",f.mode=30;break}be=V>f.wnext?(V-=f.wnext,f.wsize-V):f.wnext-V,V>f.length&&(V=f.length),ge=f.window}else ge=pe,be=le-f.offset,V=f.length;for(ie<V&&(V=ie),ie-=V,f.length-=V;pe[le++]=ge[be++],--V;);f.length===0&&(f.mode=21);break;case 26:if(ie===0)break e;pe[le++]=f.length,ie--,f.mode=21;break;case 27:if(f.wrap){for(;I<32;){if(Y===0)break e;Y--,E|=q[O++]<<I,I+=8}if(X-=ie,F.total_out+=X,f.total+=X,X&&(F.adler=f.check=f.flags?o(f.check,pe,X,le-X):l(f.check,pe,X,le-X)),X=ie,(f.flags?E:h(E))!==f.check){F.msg="incorrect data check",f.mode=30;break}I=E=0}f.mode=28;case 28:if(f.wrap&&f.flags){for(;I<32;){if(Y===0)break e;Y--,E+=q[O++]<<I,I+=8}if(E!==(4294967295&f.total)){F.msg="incorrect length check",f.mode=30;break}I=E=0}f.mode=29;case 29:N=1;break e;case 30:N=-3;break e;case 31:return-4;default:return m}return F.next_out=le,F.avail_out=ie,F.next_in=O,F.avail_in=Y,f.hold=E,f.bits=I,(f.wsize||X!==F.avail_out&&f.mode<30&&(f.mode<27||G!==4))&&ne(F,F.output,F.next_out,X-F.avail_out)?(f.mode=31,-4):($-=F.avail_in,X-=F.avail_out,F.total_in+=$,F.total_out+=X,f.total+=X,f.wrap&&X&&(F.adler=f.check=f.flags?o(f.check,pe,X,F.next_out-X):l(f.check,pe,X,F.next_out-X)),F.data_type=f.bits+(f.last?64:0)+(f.mode===12?128:0)+(f.mode===20||f.mode===15?256:0),($==0&&X===0||G===4)&&N===b&&(N=-5),N)},i.inflateEnd=function(F){if(!F||!F.state)return m;var G=F.state;return G.window&&(G.window=null),F.state=null,b},i.inflateGetHeader=function(F,G){var f;return F&&F.state?(2&(f=F.state).wrap)==0?m:((f.head=G).done=!1,b):m},i.inflateSetDictionary=function(F,G){var f,q=G.length;return F&&F.state?(f=F.state).wrap!==0&&f.mode!==11?m:f.mode===11&&l(1,G,q,0)!==f.check?-3:ne(F,G,q,q)?(f.mode=31,-4):(f.havedict=1,b):m},i.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./inffast":48,"./inftrees":50}],50:[function(t,a,i){var n=t("../utils/common"),l=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],o=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],u=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],c=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];a.exports=function(v,y,b,m,C,p,d,h){var w,k,x,_,W,P,H,z,Z,ne=h.bits,F=0,G=0,f=0,q=0,pe=0,O=0,le=0,Y=0,ie=0,E=0,I=null,$=0,X=new n.Buf16(16),V=new n.Buf16(16),be=null,ge=0;for(F=0;F<=15;F++)X[F]=0;for(G=0;G<m;G++)X[y[b+G]]++;for(pe=ne,q=15;1<=q&&X[q]===0;q--);if(q<pe&&(pe=q),q===0)return C[p++]=20971520,C[p++]=20971520,h.bits=1,0;for(f=1;f<q&&X[f]===0;f++);for(pe<f&&(pe=f),F=Y=1;F<=15;F++)if(Y<<=1,(Y-=X[F])<0)return-1;if(0<Y&&(v===0||q!==1))return-1;for(V[1]=0,F=1;F<15;F++)V[F+1]=V[F]+X[F];for(G=0;G<m;G++)y[b+G]!==0&&(d[V[y[b+G]]++]=G);if(P=v===0?(I=be=d,19):v===1?(I=l,$-=257,be=o,ge-=257,256):(I=u,be=c,-1),F=f,W=p,le=G=E=0,x=-1,_=(ie=1<<(O=pe))-1,v===1&&852<ie||v===2&&592<ie)return 1;for(;;){for(H=F-le,Z=d[G]<P?(z=0,d[G]):d[G]>P?(z=be[ge+d[G]],I[$+d[G]]):(z=96,0),w=1<<F-le,f=k=1<<O;C[W+(E>>le)+(k-=w)]=H<<24|z<<16|Z|0,k!==0;);for(w=1<<F-1;E&w;)w>>=1;if(w!==0?(E&=w-1,E+=w):E=0,G++,--X[F]==0){if(F===q)break;F=y[b+d[G]]}if(pe<F&&(E&_)!==x){for(le===0&&(le=pe),W+=f,Y=1<<(O=F-le);O+le<q&&!((Y-=X[O+le])<=0);)O++,Y<<=1;if(ie+=1<<O,v===1&&852<ie||v===2&&592<ie)return 1;C[x=E&_]=pe<<24|O<<16|W-p|0}}return E!==0&&(C[W+E]=F-le<<24|64<<16|0),h.bits=pe,0}},{"../utils/common":41}],51:[function(t,a,i){a.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],52:[function(t,a,i){var n=t("../utils/common"),l=0,o=1;function u(g){for(var S=g.length;0<=--S;)g[S]=0}var c=0,v=29,y=256,b=y+1+v,m=30,C=19,p=2*b+1,d=15,h=16,w=7,k=256,x=16,_=17,W=18,P=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],H=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],z=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],Z=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],ne=new Array(2*(b+2));u(ne);var F=new Array(2*m);u(F);var G=new Array(512);u(G);var f=new Array(256);u(f);var q=new Array(v);u(q);var pe,O,le,Y=new Array(m);function ie(g,S,K,U,R){this.static_tree=g,this.extra_bits=S,this.extra_base=K,this.elems=U,this.max_length=R,this.has_stree=g&&g.length}function E(g,S){this.dyn_tree=g,this.max_code=0,this.stat_desc=S}function I(g){return g<256?G[g]:G[256+(g>>>7)]}function $(g,S){g.pending_buf[g.pending++]=255&S,g.pending_buf[g.pending++]=S>>>8&255}function X(g,S,K){g.bi_valid>h-K?(g.bi_buf|=S<<g.bi_valid&65535,$(g,g.bi_buf),g.bi_buf=S>>h-g.bi_valid,g.bi_valid+=K-h):(g.bi_buf|=S<<g.bi_valid&65535,g.bi_valid+=K)}function V(g,S,K){X(g,K[2*S],K[2*S+1])}function be(g,S){for(var K=0;K|=1&g,g>>>=1,K<<=1,0<--S;);return K>>>1}function ge(g,S,K){var U,R,j=new Array(d+1),J=0;for(U=1;U<=d;U++)j[U]=J=J+K[U-1]<<1;for(R=0;R<=S;R++){var M=g[2*R+1];M!==0&&(g[2*R]=be(j[M]++,M))}}function ee(g){var S;for(S=0;S<b;S++)g.dyn_ltree[2*S]=0;for(S=0;S<m;S++)g.dyn_dtree[2*S]=0;for(S=0;S<C;S++)g.bl_tree[2*S]=0;g.dyn_ltree[2*k]=1,g.opt_len=g.static_len=0,g.last_lit=g.matches=0}function ae(g){8<g.bi_valid?$(g,g.bi_buf):0<g.bi_valid&&(g.pending_buf[g.pending++]=g.bi_buf),g.bi_buf=0,g.bi_valid=0}function me(g,S,K,U){var R=2*S,j=2*K;return g[R]<g[j]||g[R]===g[j]&&U[S]<=U[K]}function ce(g,S,K){for(var U=g.heap[K],R=K<<1;R<=g.heap_len&&(R<g.heap_len&&me(S,g.heap[R+1],g.heap[R],g.depth)&&R++,!me(S,U,g.heap[R],g.depth));)g.heap[K]=g.heap[R],K=R,R<<=1;g.heap[K]=U}function ye(g,S,K){var U,R,j,J,M=0;if(g.last_lit!==0)for(;U=g.pending_buf[g.d_buf+2*M]<<8|g.pending_buf[g.d_buf+2*M+1],R=g.pending_buf[g.l_buf+M],M++,U===0?V(g,R,S):(V(g,(j=f[R])+y+1,S),(J=P[j])!==0&&X(g,R-=q[j],J),V(g,j=I(--U),K),(J=H[j])!==0&&X(g,U-=Y[j],J)),M<g.last_lit;);V(g,k,S)}function Te(g,S){var K,U,R,j=S.dyn_tree,J=S.stat_desc.static_tree,M=S.stat_desc.has_stree,Q=S.stat_desc.elems,fe=-1;for(g.heap_len=0,g.heap_max=p,K=0;K<Q;K++)j[2*K]!==0?(g.heap[++g.heap_len]=fe=K,g.depth[K]=0):j[2*K+1]=0;for(;g.heap_len<2;)j[2*(R=g.heap[++g.heap_len]=fe<2?++fe:0)]=1,g.depth[R]=0,g.opt_len--,M&&(g.static_len-=J[2*R+1]);for(S.max_code=fe,K=g.heap_len>>1;1<=K;K--)ce(g,j,K);for(R=Q;K=g.heap[1],g.heap[1]=g.heap[g.heap_len--],ce(g,j,1),U=g.heap[1],g.heap[--g.heap_max]=K,g.heap[--g.heap_max]=U,j[2*R]=j[2*K]+j[2*U],g.depth[R]=(g.depth[K]>=g.depth[U]?g.depth[K]:g.depth[U])+1,j[2*K+1]=j[2*U+1]=R,g.heap[1]=R++,ce(g,j,1),2<=g.heap_len;);g.heap[--g.heap_max]=g.heap[1],(function(te,we){var Ee,ke,Re,Se,us,Ss,Ke=we.dyn_tree,Be=we.max_code,Oe=we.stat_desc.static_tree,Qs=we.stat_desc.has_stree,Dt=we.stat_desc.extra_bits,ia=we.stat_desc.extra_base,$s=we.stat_desc.max_length,ht=0;for(Se=0;Se<=d;Se++)te.bl_count[Se]=0;for(Ke[2*te.heap[te.heap_max]+1]=0,Ee=te.heap_max+1;Ee<p;Ee++)$s<(Se=Ke[2*Ke[2*(ke=te.heap[Ee])+1]+1]+1)&&(Se=$s,ht++),Ke[2*ke+1]=Se,Be<ke||(te.bl_count[Se]++,us=0,ia<=ke&&(us=Dt[ke-ia]),Ss=Ke[2*ke],te.opt_len+=Ss*(Se+us),Qs&&(te.static_len+=Ss*(Oe[2*ke+1]+us)));if(ht!==0){do{for(Se=$s-1;te.bl_count[Se]===0;)Se--;te.bl_count[Se]--,te.bl_count[Se+1]+=2,te.bl_count[$s]--,ht-=2}while(0<ht);for(Se=$s;Se!==0;Se--)for(ke=te.bl_count[Se];ke!==0;)Be<(Re=te.heap[--Ee])||(Ke[2*Re+1]!==Se&&(te.opt_len+=(Se-Ke[2*Re+1])*Ke[2*Re],Ke[2*Re+1]=Se),ke--)}})(g,S),ge(j,fe,g.bl_count)}function r(g,S,K){var U,R,j=-1,J=S[1],M=0,Q=7,fe=4;for(J===0&&(Q=138,fe=3),S[2*(K+1)+1]=65535,U=0;U<=K;U++)R=J,J=S[2*(U+1)+1],++M<Q&&R===J||(M<fe?g.bl_tree[2*R]+=M:R!==0?(R!==j&&g.bl_tree[2*R]++,g.bl_tree[2*x]++):M<=10?g.bl_tree[2*_]++:g.bl_tree[2*W]++,j=R,fe=(M=0)===J?(Q=138,3):R===J?(Q=6,3):(Q=7,4))}function N(g,S,K){var U,R,j=-1,J=S[1],M=0,Q=7,fe=4;for(J===0&&(Q=138,fe=3),U=0;U<=K;U++)if(R=J,J=S[2*(U+1)+1],!(++M<Q&&R===J)){if(M<fe)for(;V(g,R,g.bl_tree),--M!=0;);else R!==0?(R!==j&&(V(g,R,g.bl_tree),M--),V(g,x,g.bl_tree),X(g,M-3,2)):M<=10?(V(g,_,g.bl_tree),X(g,M-3,3)):(V(g,W,g.bl_tree),X(g,M-11,7));j=R,fe=(M=0)===J?(Q=138,3):R===J?(Q=6,3):(Q=7,4)}}u(Y);var B=!1;function T(g,S,K,U){X(g,(c<<1)+(U?1:0),3),(function(R,j,J,M){ae(R),$(R,J),$(R,~J),n.arraySet(R.pending_buf,R.window,j,J,R.pending),R.pending+=J})(g,S,K)}i._tr_init=function(g){B||((function(){var S,K,U,R,j,J=new Array(d+1);for(R=U=0;R<v-1;R++)for(q[R]=U,S=0;S<1<<P[R];S++)f[U++]=R;for(f[U-1]=R,R=j=0;R<16;R++)for(Y[R]=j,S=0;S<1<<H[R];S++)G[j++]=R;for(j>>=7;R<m;R++)for(Y[R]=j<<7,S=0;S<1<<H[R]-7;S++)G[256+j++]=R;for(K=0;K<=d;K++)J[K]=0;for(S=0;S<=143;)ne[2*S+1]=8,S++,J[8]++;for(;S<=255;)ne[2*S+1]=9,S++,J[9]++;for(;S<=279;)ne[2*S+1]=7,S++,J[7]++;for(;S<=287;)ne[2*S+1]=8,S++,J[8]++;for(ge(ne,b+1,J),S=0;S<m;S++)F[2*S+1]=5,F[2*S]=be(S,5);pe=new ie(ne,P,y+1,b,d),O=new ie(F,H,0,m,d),le=new ie(new Array(0),z,0,C,w)})(),B=!0),g.l_desc=new E(g.dyn_ltree,pe),g.d_desc=new E(g.dyn_dtree,O),g.bl_desc=new E(g.bl_tree,le),g.bi_buf=0,g.bi_valid=0,ee(g)},i._tr_stored_block=T,i._tr_flush_block=function(g,S,K,U){var R,j,J=0;0<g.level?(g.strm.data_type===2&&(g.strm.data_type=(function(M){var Q,fe=4093624447;for(Q=0;Q<=31;Q++,fe>>>=1)if(1&fe&&M.dyn_ltree[2*Q]!==0)return l;if(M.dyn_ltree[18]!==0||M.dyn_ltree[20]!==0||M.dyn_ltree[26]!==0)return o;for(Q=32;Q<y;Q++)if(M.dyn_ltree[2*Q]!==0)return o;return l})(g)),Te(g,g.l_desc),Te(g,g.d_desc),J=(function(M){var Q;for(r(M,M.dyn_ltree,M.l_desc.max_code),r(M,M.dyn_dtree,M.d_desc.max_code),Te(M,M.bl_desc),Q=C-1;3<=Q&&M.bl_tree[2*Z[Q]+1]===0;Q--);return M.opt_len+=3*(Q+1)+5+5+4,Q})(g),R=g.opt_len+3+7>>>3,(j=g.static_len+3+7>>>3)<=R&&(R=j)):R=j=K+5,K+4<=R&&S!==-1?T(g,S,K,U):g.strategy===4||j===R?(X(g,2+(U?1:0),3),ye(g,ne,F)):(X(g,4+(U?1:0),3),(function(M,Q,fe,te){var we;for(X(M,Q-257,5),X(M,fe-1,5),X(M,te-4,4),we=0;we<te;we++)X(M,M.bl_tree[2*Z[we]+1],3);N(M,M.dyn_ltree,Q-1),N(M,M.dyn_dtree,fe-1)})(g,g.l_desc.max_code+1,g.d_desc.max_code+1,J+1),ye(g,g.dyn_ltree,g.dyn_dtree)),ee(g),U&&ae(g)},i._tr_tally=function(g,S,K){return g.pending_buf[g.d_buf+2*g.last_lit]=S>>>8&255,g.pending_buf[g.d_buf+2*g.last_lit+1]=255&S,g.pending_buf[g.l_buf+g.last_lit]=255&K,g.last_lit++,S===0?g.dyn_ltree[2*K]++:(g.matches++,S--,g.dyn_ltree[2*(f[K]+y+1)]++,g.dyn_dtree[2*I(S)]++),g.last_lit===g.lit_bufsize-1},i._tr_align=function(g){X(g,2,3),V(g,k,ne),(function(S){S.bi_valid===16?($(S,S.bi_buf),S.bi_buf=0,S.bi_valid=0):8<=S.bi_valid&&(S.pending_buf[S.pending++]=255&S.bi_buf,S.bi_buf>>=8,S.bi_valid-=8)})(g)}},{"../utils/common":41}],53:[function(t,a,i){a.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(t,a,i){(function(n){(function(l,o){if(!l.setImmediate){var u,c,v,y,b=1,m={},C=!1,p=l.document,d=Object.getPrototypeOf&&Object.getPrototypeOf(l);d=d&&d.setTimeout?d:l,u={}.toString.call(l.process)==="[object process]"?function(x){process.nextTick(function(){w(x)})}:(function(){if(l.postMessage&&!l.importScripts){var x=!0,_=l.onmessage;return l.onmessage=function(){x=!1},l.postMessage("","*"),l.onmessage=_,x}})()?(y="setImmediate$"+Math.random()+"$",l.addEventListener?l.addEventListener("message",k,!1):l.attachEvent("onmessage",k),function(x){l.postMessage(y+x,"*")}):l.MessageChannel?((v=new MessageChannel).port1.onmessage=function(x){w(x.data)},function(x){v.port2.postMessage(x)}):p&&"onreadystatechange"in p.createElement("script")?(c=p.documentElement,function(x){var _=p.createElement("script");_.onreadystatechange=function(){w(x),_.onreadystatechange=null,c.removeChild(_),_=null},c.appendChild(_)}):function(x){setTimeout(w,0,x)},d.setImmediate=function(x){typeof x!="function"&&(x=new Function(""+x));for(var _=new Array(arguments.length-1),W=0;W<_.length;W++)_[W]=arguments[W+1];var P={callback:x,args:_};return m[b]=P,u(b),b++},d.clearImmediate=h}function h(x){delete m[x]}function w(x){if(C)setTimeout(w,0,x);else{var _=m[x];if(_){C=!0;try{(function(W){var P=W.callback,H=W.args;switch(H.length){case 0:P();break;case 1:P(H[0]);break;case 2:P(H[0],H[1]);break;case 3:P(H[0],H[1],H[2]);break;default:P.apply(o,H)}})(_)}finally{h(x),C=!1}}}}function k(x){x.source===l&&typeof x.data=="string"&&x.data.indexOf(y)===0&&w(+x.data.slice(y.length))}})(typeof self>"u"?n===void 0?this:n:self)}).call(this,typeof vt<"u"?vt:typeof self<"u"?self:typeof window<"u"?window:{})},{}]},{},[10])(10)})})(Mt)),Mt.exports}var Gl=jl();const Zl=Hl(Gl);function ot(e,s,t){const a=e instanceof Uint8Array?new Blob([new Uint8Array(e)],{type:t}):new Blob([e],{type:t}),i=URL.createObjectURL(a),n=document.createElement("a");n.href=i,n.download=s,document.body.appendChild(n),n.click(),document.body.removeChild(n),URL.revokeObjectURL(i)}function It(e){return e.replace(/[<>:"/\\|?*]/g,"").replace(/\s+/g,"_").substring(0,100)}function Kl(e){const s=[];return Js(e)&&s.push("zwo"),Ys(e)&&s.push("fit"),Xs(e)&&s.push("mrc"),s}async function ql(e,s,t){const a=It(e.name);try{switch(s){case"zwo":{if(!Js(e.sport))return{success:!1,filename:"",error:"Zwift export only supports bike and run workouts"};const i=hn(e,t),n=`${a}.zwo`;return ot(i,n,"application/xml"),{success:!0,filename:n}}case"fit":{if(!Ys(e.sport))return{success:!1,filename:"",error:`FIT export not supported for ${e.sport} workouts`};const i=await An(e,t),n=`${a}.fit`;return ot(i,n,"application/vnd.ant.fit"),{success:!0,filename:n}}case"mrc":{if(!Xs(e.sport))return{success:!1,filename:"",error:"MRC export only supports bike workouts"};const i=Fn(e,t),n=`${a}.mrc`;return ot(i,n,"text/plain"),{success:!0,filename:n}}default:return{success:!1,filename:"",error:`Unknown format: ${s}`}}}catch(i){return{success:!1,filename:"",error:i instanceof Error?i.message:"Unknown error"}}}function Vl(e){try{const s=Ul(e),a=`${It(e.meta.event)}_training_plan.ics`;return ot(s,a,"text/calendar"),{success:!0,filename:a}}catch(s){return{success:!1,filename:"",error:s instanceof Error?s.message:"Unknown error"}}}async function Jl(e,s,t){const a=It(e.name);try{switch(s){case"zwo":return Js(e.sport)?{content:hn(e,t),filename:`${a}.zwo`}:null;case"fit":return Ys(e.sport)?{content:await An(e,t),filename:`${a}.fit`}:null;case"mrc":return Xs(e.sport)?{content:Fn(e,t),filename:`${a}.mrc`}:null;default:return null}}catch{return null}}async function Yl(e,s,t){const a=[];let i=0,n=0;const l=new Zl;for(const o of e.weeks)for(const u of o.days)for(const c of u.workouts){if(c.sport==="rest"){n++;continue}if(s==="zwo"&&!Js(c.sport)){n++;continue}if(s==="fit"&&!Ys(c.sport)){n++;continue}if(s==="mrc"&&!Xs(c.sport)){n++;continue}try{const v=await Jl(c,s,t);v?(l.file(v.filename,v.content),i++):n++}catch(v){a.push(`${c.name}: ${v instanceof Error?v.message:"Unknown error"}`)}}if(i>0){const o=await l.generateAsync({type:"uint8array"}),c=`${It(e.meta.event)}_workouts_${s}.zip`;ot(o,c,"application/zip")}return{exported:i,skipped:n,errors:a}}var Xl=ue("<div> </div>"),Ql=ue('<div class="export-menu svelte-dkgmtr"><button class="export-option svelte-dkgmtr"><span class="export-icon svelte-dkgmtr">Z</span> <div><div class="export-name svelte-dkgmtr">Zwift (.zwo)</div> <div class="export-desc svelte-dkgmtr">Bike & run workouts</div></div></button> <button class="export-option svelte-dkgmtr"><span class="export-icon svelte-dkgmtr">G</span> <div><div class="export-name svelte-dkgmtr">Garmin (.fit)</div> <div class="export-desc svelte-dkgmtr">All workout types</div></div></button> <button class="export-option svelte-dkgmtr"><span class="export-icon svelte-dkgmtr">E</span> <div><div class="export-name svelte-dkgmtr">ERG/MRC (.mrc)</div> <div class="export-desc svelte-dkgmtr">Bike workouts only</div></div></button></div>'),$l=ue('<button class="clear-filter svelte-dkgmtr">Clear</button>'),eo=ue('<div class="check-icon svelte-dkgmtr">✓</div>'),so=ue('<button><div> </div> <div class="sport-info svelte-dkgmtr"><div class="sport-name svelte-dkgmtr"> </div> <div class="sport-hours svelte-dkgmtr"> </div></div> <!></button>'),to=ue("<button> </button>"),ao=ue('<aside><div class="event-header svelte-dkgmtr"><h1 class="event-name svelte-dkgmtr"> </h1> <div class="event-date svelte-dkgmtr"> </div> <div class="athlete-name svelte-dkgmtr"> </div></div> <div class="progress-section svelte-dkgmtr"><div class="progress-ring-container svelte-dkgmtr"><svg class="progress-ring svelte-dkgmtr" width="140" height="140"><defs><linearGradient id="progressGradient" x1="0%" y1="0%" x2="100%" y2="0%"><stop offset="0%" style="stop-color: var(--accent)"></stop><stop offset="100%" style="stop-color: var(--run)"></stop></linearGradient></defs><circle class="progress-ring-bg svelte-dkgmtr" cx="70" cy="70" r="60"></circle><circle class="progress-ring-fill svelte-dkgmtr" cx="70" cy="70" r="60"></circle></svg> <div class="progress-text svelte-dkgmtr"><div class="progress-percent svelte-dkgmtr"> </div> <div class="progress-label svelte-dkgmtr">Complete</div></div></div></div> <div class="stats-grid svelte-dkgmtr"><div class="stat-card svelte-dkgmtr"><div class="stat-value svelte-dkgmtr"> </div> <div class="stat-label svelte-dkgmtr">Weeks</div></div> <div class="stat-card svelte-dkgmtr"><div class="stat-value svelte-dkgmtr"> </div> <div class="stat-label svelte-dkgmtr">Hours</div></div> <div class="stat-card svelte-dkgmtr"><div class="stat-value svelte-dkgmtr"> </div> <div class="stat-label svelte-dkgmtr">Workouts</div></div> <div class="stat-card svelte-dkgmtr"><div class="stat-value svelte-dkgmtr"> </div> <div class="stat-label svelte-dkgmtr">Days Left</div></div></div> <button class="settings-btn svelte-dkgmtr"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" class="svelte-dkgmtr"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"></path><circle cx="12" cy="12" r="3"></circle></svg> Settings</button> <div class="export-section svelte-dkgmtr"><!> <button class="calendar-export-btn svelte-dkgmtr"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" class="svelte-dkgmtr"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg> <div class="calendar-export-text svelte-dkgmtr"><span class="calendar-export-title svelte-dkgmtr">Export to Calendar</span> <span class="calendar-export-desc svelte-dkgmtr">Download .ics file for Apple, Google, Outlook</span></div></button> <div class="export-workouts svelte-dkgmtr"><div class="export-header svelte-dkgmtr"><h3 class="svelte-dkgmtr">Export Workouts</h3></div> <div class="export-dropdown svelte-dkgmtr"><button class="export-btn svelte-dkgmtr"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" class="svelte-dkgmtr"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg> All Workouts <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg></button> <!></div></div> <button class="import-help-link svelte-dkgmtr"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" class="svelte-dkgmtr"><circle cx="12" cy="12" r="10"></circle><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path><line x1="12" y1="17" x2="12.01" y2="17"></line></svg> How to import to other apps</button></div> <div class="sport-stats svelte-dkgmtr"><div class="sport-stats-header svelte-dkgmtr"><h3 class="svelte-dkgmtr">Filter by Sport</h3> <!></div> <!></div> <div class="filters-section svelte-dkgmtr"><h3 class="svelte-dkgmtr">Filter by Status</h3> <div class="filter-group svelte-dkgmtr"></div></div></aside>');function no(e,s){bs(s,!0);const t=Le(()=>()=>{let M=0,Q=0,fe=0;const te={swim:0,bike:0,run:0,strength:0,brick:0,race:0};return s.plan.weeks.forEach(we=>{we.days.forEach(Ee=>{Ee.workouts.forEach(ke=>{ke.sport!=="rest"&&(M++,s.completed[ke.id]&&Q++,ke.durationMinutes&&(fe+=ke.durationMinutes,te[ke.sport]!==void 0&&(te[ke.sport]+=ke.durationMinutes/60)))})})}),{totalWorkouts:M,completedCount:Q,totalHours:Math.round(fe/60),sportHours:te,progress:M>0?Math.round(Q/M*100):0}}),a=Le(()=>377-A(t)().progress/100*377),i=Le(()=>il(s.plan.meta.eventDate)),n=Le(()=>Object.entries(A(t)().sportHours).filter(([M,Q])=>Q>0).map(([M])=>M));function l(M){s.filters.sport===M?s.onFilterChange({...s.filters,sport:"all"}):s.onFilterChange({...s.filters,sport:M})}function o(M){s.onFilterChange({...s.filters,status:M})}let u=Ce(!1),c=Ce(null);function v(){se(u,!1),se(c,{message:"Exporting calendar...",isError:!1},!0);const M=Vl(s.plan);M.success?se(c,{message:`Downloaded ${M.filename}`,isError:!1},!0):se(c,{message:M.error||"Export failed",isError:!0},!0),setTimeout(()=>{se(c,null)},3e3)}async function y(M){se(u,!1),se(c,{message:`Exporting ${M.toUpperCase()} files...`,isError:!1},!0);const Q=await Yl(s.plan,M,s.settings);Q.errors.length===0?se(c,{message:`Exported ${Q.exported} workouts (${Q.skipped} skipped)`,isError:!1},!0):se(c,{message:`Exported ${Q.exported}, ${Q.errors.length} errors`,isError:!0},!0),setTimeout(()=>{se(c,null)},4e3)}var b=ao();let m;var C=L(b),p=L(C),d=L(p),h=D(p,2),w=L(h),k=D(h,2),x=L(k),_=D(C,2),W=L(_),P=L(W),H=D(L(P),2),z=D(P,2),Z=L(z),ne=L(Z),F=D(_,2),G=L(F),f=L(G),q=L(f),pe=D(G,2),O=L(pe),le=L(O),Y=D(pe,2),ie=L(Y),E=L(ie),I=D(Y,2),$=L(I),X=L($),V=D(F,2);V.__click=function(...M){s.onSettingsClick?.apply(this,M)};var be=D(V,2),ge=L(be);{var ee=M=>{var Q=Xl();let fe;var te=L(Q);Ae(()=>{fe=Pe(Q,1,"export-status svelte-dkgmtr",null,fe,{error:A(c).isError}),de(te,A(c).message)}),re(M,Q)};ve(ge,M=>{A(c)&&M(ee)})}var ae=D(ge,2);ae.__click=v;var me=D(ae,2),ce=D(L(me),2),ye=L(ce);ye.__click=()=>se(u,!A(u));var Te=D(L(ye),2);let r;var N=D(ye,2);{var B=M=>{var Q=Ql(),fe=L(Q);fe.__click=()=>y("zwo");var te=D(fe,2);te.__click=()=>y("fit");var we=D(te,2);we.__click=()=>y("mrc"),re(M,Q)};ve(N,M=>{A(u)&&M(B)})}var T=D(me,2);T.__click=function(...M){s.onImportHelpClick?.apply(this,M)};var g=D(be,2),S=L(g),K=D(L(S),2);{var U=M=>{var Q=$l();Q.__click=()=>s.onFilterChange({...s.filters,sport:"all"}),re(M,Q)};ve(K,M=>{s.filters.sport!=="all"&&M(U)})}var R=D(S,2);He(R,17,()=>A(n),ss,(M,Q)=>{var fe=so();let te;fe.__click=()=>l(A(Q));var we=L(fe),Ee=L(we),ke=D(we,2),Re=L(ke),Se=L(Re),us=D(Re,2),Ss=L(us),Ke=D(ke,2);{var Be=Oe=>{var Qs=eo();re(Oe,Qs)};ve(Ke,Oe=>{s.filters.sport===A(Q)&&Oe(Be)})}Ae((Oe,Qs,Dt)=>{te=Pe(fe,1,`sport-stat ${A(Q)??""}`,"svelte-dkgmtr",te,{active:s.filters.sport===A(Q)}),Pe(we,1,`sport-icon ${A(Q)??""}`,"svelte-dkgmtr"),de(Ee,Oe),de(Se,Qs),de(Ss,`${Dt??""} hours`)},[()=>dn(A(Q)),()=>A(Q).charAt(0).toUpperCase()+A(Q).slice(1),()=>A(t)().sportHours[A(Q)].toFixed(1)]),re(M,fe)});var j=D(g,2),J=D(L(j),2);He(J,20,()=>[["all","All"],["pending","Pending"],["completed","Completed"]],ss,(M,Q)=>{var fe=Le(()=>Ea(Q,2));let te=()=>A(fe)[0],we=()=>A(fe)[1];var Ee=to();let ke;Ee.__click=()=>o(te());var Re=L(Ee);Ae(()=>{ke=Pe(Ee,1,"filter-chip svelte-dkgmtr",null,ke,{active:s.filters.status===te()}),de(Re,we())}),re(M,Ee)}),Ae((M,Q,fe,te)=>{m=Pe(b,1,"sidebar svelte-dkgmtr",null,m,{open:s.open}),de(d,s.plan.meta.event),de(w,M),de(x,s.plan.meta.athlete),ta(H,`stroke-dashoffset: ${A(a)??""}`),de(ne,`${Q??""}%`),de(q,s.plan.meta.totalWeeks),de(le,fe),de(E,te),de(X,A(i)),r=Pe(Te,0,"dropdown-arrow svelte-dkgmtr",null,r,{open:A(u)})},[()=>al(s.plan.meta.eventDate),()=>A(t)().progress,()=>A(t)().totalHours,()=>A(t)().totalWorkouts]),re(e,b),ys()}ks(["click"]);function io(){const e=document.getElementById("plan-data");if(!e)throw new Error("Plan data not found");return JSON.parse(e.textContent||"{}")}const Je=io(),_n=`plan-${Je.meta.id}-completed`;function lo(){const e=localStorage.getItem(_n);return e?JSON.parse(e):{}}function oo(e){localStorage.setItem(_n,JSON.stringify(e))}const kn=`plan-${Je.meta.id}-changes`;function Fa(){return{moved:{},edited:{},deleted:[],added:{}}}function ro(){const e=localStorage.getItem(kn);if(!e)return Fa();try{const s=JSON.parse(e);return{moved:s.moved||{},edited:s.edited||{},deleted:s.deleted||[],added:s.added||{}}}catch{return Fa()}}function Ct(e){localStorage.setItem(kn,JSON.stringify(e))}function uo(){return`user-${Date.now()}-${Math.random().toString(36).slice(2,8)}`}function co(e,s){const t=s.edited[e.id];return t?{...e,...t}:e}function _a(e,s){return s.deleted.includes(e)}var mo=ue('<div class="workout-duration svelte-ynjai0"> </div>'),fo=ue('<button draggable="true"><div class="workout-sport svelte-ynjai0"> </div> <div class="workout-name svelte-ynjai0"> </div> <!></button>');function po(e,s){bs(s,!0);let t=Ce(!1);function a(m){se(t,!0),m.dataTransfer.setData("text/plain",s.workout.id),m.dataTransfer.effectAllowed="move"}function i(){se(t,!1)}var n=fo();let l;n.__click=function(...m){s.onClick?.apply(this,m)};var o=L(n),u=L(o),c=D(o,2),v=L(c),y=D(c,2);{var b=m=>{var C=mo(),p=L(C);Ae(d=>de(p,d),[()=>aa(s.workout.durationMinutes)]),re(m,C)};ve(y,m=>{s.workout.durationMinutes&&m(b)})}Ae(()=>{l=Pe(n,1,`workout-card ${s.workout.sport??""}`,"svelte-ynjai0",l,{completed:s.isCompleted,dragging:A(t)}),de(u,s.workout.sport),de(v,s.workout.name)}),_s("dragstart",n,a),_s("dragend",n,i),re(e,n),ys()}ks(["click"]);var ho=ue('<div class="empty-day svelte-ldqnzx">Rest</div>'),bo=ue('<div role="listbox" tabindex="0"><div class="day-header svelte-ldqnzx"><span class="day-name svelte-ldqnzx"> </span> <span class="day-date svelte-ldqnzx"> </span></div> <!> <button class="add-workout-btn svelte-ldqnzx" title="Add workout"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" class="svelte-ldqnzx"><path d="M12 5v14M5 12h14"></path></svg></button></div>'),yo=ue('<div class="week-card svelte-ldqnzx"><div class="week-header svelte-ldqnzx"><div class="week-title svelte-ldqnzx"><span class="week-number svelte-ldqnzx"> </span> <span> </span> <span class="week-focus svelte-ldqnzx"> </span></div> <div class="week-hours svelte-ldqnzx"><span class="svelte-ldqnzx"> </span> hrs</div></div> <div class="days-grid svelte-ldqnzx"></div></div>');function go(e,s){bs(s,!0);let t=Ce(null);const a=Le(()=>s.week.phase.toLowerCase());function i(x,_){x.preventDefault(),se(t,_,!0)}function n(){se(t,null)}function l(x,_){x.preventDefault(),se(t,null);const W=x.dataTransfer?.getData("text/plain");W&&s.onDrop(W,_)}var o=yo(),u=L(o),c=L(u),v=L(c),y=L(v),b=D(v,2),m=L(b),C=D(b,2),p=L(C),d=D(c,2),h=L(d),w=L(h),k=D(u,2);He(k,21,()=>s.fullWeek,x=>x.date,(x,_)=>{const W=Le(()=>A(_).date===s.today),P=Le(()=>A(_).workouts.filter(s.filterWorkout)),H=Le(()=>A(t)===A(_).date);var z=bo();let Z;var ne=L(z),F=L(ne),G=L(F),f=D(F,2),q=L(f),pe=D(ne,2);{var O=ie=>{var E=ha(),I=Ye(E);He(I,17,()=>A(P),$=>$.id,($,X)=>{{let V=Le(()=>!!s.completed[A(X).id]);po($,{get workout(){return A(X)},get day(){return A(_)},get settings(){return s.settings},get isCompleted(){return A(V)},onClick:()=>s.onWorkoutClick(A(X),A(_))})}}),re(ie,E)},le=ie=>{var E=ha(),I=Ye(E);{var $=X=>{var V=ho();re(X,V)};ve(I,X=>{A(_).workouts.length===0&&X($)},!0)}re(ie,E)};ve(pe,ie=>{A(P).length>0?ie(O):ie(le,!1)})}var Y=D(pe,2);Y.__click=()=>s.onAddWorkout(A(_)),Ae((ie,E)=>{Z=Pe(z,1,"day-column svelte-ldqnzx",null,Z,{today:A(W),"drag-over":A(H)}),de(G,ie),de(q,E)},[()=>A(_).dayOfWeek.slice(0,3),()=>pn(A(_).date).getDate()]),_s("dragover",z,ie=>i(ie,A(_).date)),_s("dragleave",z,n),_s("drop",z,ie=>l(ie,A(_).date)),re(x,z)}),Ae(()=>{ta(o,`animation-delay: ${s.animationDelay??""}s`),de(y,`W${s.week.weekNumber??""}`),Pe(b,1,`week-phase ${A(a)??""}`,"svelte-ldqnzx"),de(m,s.week.phase),de(p,s.week.focus),de(w,s.week.targetHours)}),re(e,o),ys()}ks(["click"]);var vo=ue('<button><span class="phase-label svelte-aq400f"> </span></button>'),To=ue("<div><!></div>"),Co=ue('<div class="phase-timeline svelte-aq400f"></div> <div class="weeks-container svelte-aq400f"></div>',1);function wo(e,s){bs(s,!0);const t=ol();function a(y,b){return s.changes.moved[y]||b}function i(y){const b=ll(s.settings.firstDayOfWeek),m=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],C={};y.days.forEach(_=>{C[_.dayOfWeek]=_});const p=y.days[0],d=pn(p.date),h=m.indexOf(p.dayOfWeek);function w(_){let P=m.indexOf(_)-h;P<-3&&(P+=7),P>3&&(P-=7);const H=new Date(d);return H.setDate(H.getDate()+P),fn(H)}const k=b.map(_=>{const W=C[_];return W?W.date:w(_)}),x={};return k.forEach(_=>x[_]=[]),s.plan.weeks.forEach(_=>{_.days.forEach(W=>{W.workouts.forEach(P=>{if(_a(P.id,s.changes))return;const H=a(P.id,W.date);if(k.includes(H)){const z=co(P,s.changes);x[H].push(z)}})})}),Object.entries(s.changes.added).forEach(([_,{date:W,workout:P}])=>{k.includes(W)&&!_a(_,s.changes)&&x[W].push(P)}),b.map((_,W)=>{const P=k[W];return{date:P,dayOfWeek:_,workouts:x[P]||[]}})}function n(y){return!(s.filters.sport!=="all"&&y.sport!==s.filters.sport||s.filters.status==="completed"&&!s.completed[y.id]||s.filters.status==="pending"&&s.completed[y.id])}function l(y){if(s.changes.added[y])return s.changes.added[y].date;for(const b of s.plan.weeks)for(const m of b.days)for(const C of m.workouts)if(C.id===y)return m.date;return""}function o(y,b){const m=l(y);s.onWorkoutMove(y,m,b)}var u=Co(),c=Ye(u);He(c,21,()=>s.plan.phases,ss,(y,b)=>{const m=Le(()=>A(b).endWeek-A(b).startWeek+1),C=Le(()=>A(b).name.toLowerCase());var p=vo();p.__click=()=>{document.querySelector(`[data-week="${A(b).startWeek}"]`)?.scrollIntoView({behavior:"smooth",block:"start"})};var d=L(p),h=L(d);Ae(()=>{Pe(p,1,`phase-segment ${A(C)??""}`,"svelte-aq400f"),ta(p,`flex: ${A(m)??""}`),de(h,A(b).name)}),re(y,p)});var v=D(c,2);He(v,23,()=>s.plan.weeks,y=>y.weekNumber,(y,b,m)=>{var C=To(),p=L(C);{let d=Le(()=>i(A(b))),h=Le(()=>A(m)*.05);go(p,{get week(){return A(b)},get fullWeek(){return A(d)},get settings(){return s.settings},get today(){return t},get completed(){return s.completed},filterWorkout:n,get onWorkoutClick(){return s.onWorkoutClick},onDrop:o,get onAddWorkout(){return s.onAddWorkout},get animationDelay(){return A(h)}})}Ae(()=>Ji(C,"data-week",A(b).weekNumber)),re(y,C)}),re(e,u),ys()}ks(["click"]);var Ao=ue('<div><div> </div> <h2 class="modal-title svelte-12rtkin"> </h2> <div class="modal-date svelte-12rtkin"> </div></div>'),Fo=ue('<div><h2 class="modal-title svelte-12rtkin"> </h2> <div class="modal-date svelte-12rtkin"> </div></div>'),_o=ue('<div class="modal-stat svelte-12rtkin"><div class="modal-stat-value svelte-12rtkin"> </div> <div class="modal-stat-label svelte-12rtkin">Duration</div></div>'),ko=ue('<div class="modal-stat svelte-12rtkin"><div class="modal-stat-value svelte-12rtkin"> </div> <div class="modal-stat-label svelte-12rtkin">Distance</div></div>'),So=ue('<div class="modal-stat svelte-12rtkin"><div class="modal-stat-value svelte-12rtkin"> </div> <div class="modal-stat-label svelte-12rtkin">Target Zone</div></div>'),xo=ue('<div class="modal-section svelte-12rtkin"><h4 class="modal-section-title svelte-12rtkin">Description</h4> <p class="modal-description svelte-12rtkin"> </p></div>'),Eo=ue('<div class="modal-section svelte-12rtkin"><h4 class="modal-section-title svelte-12rtkin">Workout Structure</h4> <pre class="workout-structure svelte-12rtkin"> </pre></div>'),Po=ue('<div class="modal-stats svelte-12rtkin"><!> <!> <!></div> <!> <!>',1),Ro=ue("<option> </option>"),Io=ue("<option> </option>"),Do=ue('<div class="form-grid svelte-12rtkin"><div class="form-row svelte-12rtkin"><label class="form-label svelte-12rtkin" for="edit-sport">Sport</label> <select id="edit-sport" class="form-select svelte-12rtkin"></select></div> <div class="form-row svelte-12rtkin"><label class="form-label svelte-12rtkin" for="edit-type">Type</label> <select id="edit-type" class="form-select svelte-12rtkin"></select></div></div> <div class="form-row full svelte-12rtkin"><label class="form-label svelte-12rtkin" for="edit-name">Name</label> <input id="edit-name" type="text" class="form-input svelte-12rtkin" placeholder="Easy Run"/></div> <div class="form-row full svelte-12rtkin"><label class="form-label svelte-12rtkin" for="edit-description">Description</label> <textarea id="edit-description" class="form-textarea svelte-12rtkin" placeholder="Conversational pace, focus on form" rows="2"></textarea></div> <div class="form-grid svelte-12rtkin"><div class="form-row svelte-12rtkin"><label class="form-label svelte-12rtkin" for="edit-duration">Duration (minutes)</label> <input id="edit-duration" type="number" class="form-input svelte-12rtkin" placeholder="60"/></div> <div class="form-row svelte-12rtkin"><label class="form-label svelte-12rtkin" for="edit-distance">Distance (meters)</label> <input id="edit-distance" type="number" class="form-input svelte-12rtkin" placeholder="10000"/></div></div> <div class="form-row full svelte-12rtkin"><label class="form-label svelte-12rtkin" for="edit-zone">Target Zone</label> <input id="edit-zone" type="text" class="form-input svelte-12rtkin" placeholder="Zone 2"/></div> <div class="form-row full svelte-12rtkin"><label class="form-label svelte-12rtkin" for="edit-structure">Workout Structure</label> <textarea id="edit-structure" class="form-textarea mono svelte-12rtkin" placeholder="Warm-up: 10min easy Main: 4x1km @ threshold Cool-down: 10min easy" rows="5"></textarea></div>',1),Lo=ue('<button class="export-option svelte-12rtkin"><span class="export-icon svelte-12rtkin">Z</span> <div class="export-info svelte-12rtkin"><div class="export-name svelte-12rtkin">Zwift (.zwo)</div> <div class="export-desc svelte-12rtkin">For Zwift indoor training</div></div></button>'),Bo=ue('<button class="export-option svelte-12rtkin"><span class="export-icon svelte-12rtkin">G</span> <div class="export-info svelte-12rtkin"><div class="export-name svelte-12rtkin">Garmin (.fit)</div> <div class="export-desc svelte-12rtkin">For Garmin Connect</div></div></button>'),Mo=ue('<button class="export-option svelte-12rtkin"><span class="export-icon svelte-12rtkin">E</span> <div class="export-info svelte-12rtkin"><div class="export-name svelte-12rtkin">ERG/MRC (.mrc)</div> <div class="export-desc svelte-12rtkin">For TrainerRoad, etc.</div></div></button>'),Oo=ue('<div class="export-menu svelte-12rtkin"><!> <!> <!> <div class="export-divider svelte-12rtkin"></div> <button class="export-help-link svelte-12rtkin"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" class="svelte-12rtkin"><circle cx="12" cy="12" r="10"></circle><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path><line x1="12" y1="17" x2="12.01" y2="17"></line></svg> How to import files</button></div>'),zo=ue('<div class="export-dropdown svelte-12rtkin"><button class="icon-btn export svelte-12rtkin" title="Export"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" class="svelte-12rtkin"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></button> <!></div>'),No=ue("<div> </div>"),Wo=ue("<span>↩</span> Mark Incomplete",1),Uo=ue("<span>✓</span> Mark Complete",1),Ho=ue('<div class="footer-left svelte-12rtkin"><button class="icon-btn edit svelte-12rtkin" title="Edit"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" class="svelte-12rtkin"><path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"></path><path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"></path></svg></button> <button class="icon-btn delete svelte-12rtkin" title="Delete"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" class="svelte-12rtkin"><path d="M3 6h18M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"></path></svg></button> <!></div> <div class="footer-right svelte-12rtkin"><!> <button><!></button></div>',1),jo=ue('<button class="cancel-btn svelte-12rtkin">Cancel</button> <button class="save-btn svelte-12rtkin"> </button>',1),Go=ue('<div class="confirm-overlay svelte-12rtkin"><div class="confirm-dialog svelte-12rtkin"><p class="svelte-12rtkin">Delete this workout?</p> <div class="confirm-actions svelte-12rtkin"><button class="cancel-btn svelte-12rtkin">Cancel</button> <button class="delete-btn svelte-12rtkin">Delete</button></div></div></div>'),Zo=ue('<div class="modal-overlay active svelte-12rtkin" role="dialog" aria-modal="true" tabindex="-1"><div class="modal svelte-12rtkin"><div class="modal-header svelte-12rtkin"><!> <button class="modal-close svelte-12rtkin">×</button></div> <div class="modal-body svelte-12rtkin"><!></div> <div class="modal-footer svelte-12rtkin"><!></div> <!></div></div>');function Ko(e,s){bs(s,!0);let t=$i(s,"mode",3,"view"),a=Ce(De(Ve(()=>t()))),i=Ce(!1),n=Ce(!1),l=Ce(null),o=Ce(De(Ve(()=>s.workout?.sport||"run"))),u=Ce(De(Ve(()=>s.workout?.type||"endurance"))),c=Ce(De(Ve(()=>s.workout?.name||""))),v=Ce(De(Ve(()=>s.workout?.description||""))),y=Ce(De(Ve(()=>s.workout?.durationMinutes?.toString()||""))),b=Ce(De(Ve(()=>s.workout?.distanceMeters?.toString()||""))),m=Ce(De(Ve(()=>s.workout?.primaryZone||""))),C=Ce(De(Ve(()=>s.workout?.humanReadable||"")));const p=["swim","bike","run","strength","brick","race","rest"],d=["rest","recovery","endurance","tempo","threshold","intervals","vo2max","sprint","race","brick","technique","openwater","hills","long"];function h(ee){ee.key==="Escape"&&(A(i)?se(i,!1):A(a)!=="view"?(se(a,(s.workout,"view"),!0),s.workout||s.onClose()):s.onClose())}function w(ee){ee.target.classList.contains("modal-overlay")&&s.onClose()}function k(){se(o,s.workout?.sport||"run",!0),se(u,s.workout?.type||"endurance",!0),se(c,s.workout?.name||"",!0),se(v,s.workout?.description||"",!0),se(y,s.workout?.durationMinutes?.toString()||"",!0),se(b,s.workout?.distanceMeters?.toString()||"",!0),se(m,s.workout?.primaryZone||"",!0),se(C,s.workout?.humanReadable||"",!0),se(a,"edit")}function x(){t()==="create"?s.onClose():se(a,"view")}function _(){const ee={sport:A(o),type:A(u),name:A(c),description:A(v),durationMinutes:A(y)?parseInt(A(y)):void 0,distanceMeters:A(b)?parseInt(A(b)):void 0,primaryZone:A(m)||void 0,humanReadable:A(C)||void 0};s.onSave(ee),t()!=="create"&&se(a,"view")}function W(){s.workout&&s.onDelete(s.workout.id)}async function P(ee){if(!s.workout)return;se(n,!1),se(l,{message:"Exporting...",isError:!1},!0);const ae=await ql(s.workout,ee,s.settings);ae.success?se(l,{message:`Downloaded ${ae.filename}`,isError:!1},!0):se(l,{message:ae.error||"Export failed",isError:!0},!0),setTimeout(()=>{se(l,null)},3e3)}const H=Le(()=>s.workout?Kl(s.workout.sport):[]),z=Le(()=>A(H).length>0),Z=Le(()=>s.workout||{id:"",sport:A(o),type:A(u),name:A(c),description:A(v),durationMinutes:A(y)?parseInt(A(y)):void 0,distanceMeters:A(b)?parseInt(A(b)):void 0,primaryZone:A(m),humanReadable:A(C),completed:!1});var ne=Zo();_s("keydown",rt,h),ne.__click=w,ne.__keydown=h;var F=L(ne),G=L(F),f=L(G);{var q=ee=>{var ae=Ao(),me=L(ae),ce=L(me),ye=D(me,2),Te=L(ye),r=D(ye,2),N=L(r);Ae((B,T)=>{Pe(me,1,`modal-sport-badge ${A(Z).sport??""}`,"svelte-12rtkin"),de(ce,B),de(Te,A(Z).name),de(N,T)},[()=>A(Z).sport.toUpperCase(),()=>Ta(s.day.date)]),re(ee,ae)},pe=ee=>{var ae=Fo(),me=L(ae),ce=L(me),ye=D(me,2),Te=L(ye);Ae(r=>{de(ce,A(a)==="create"?"New Workout":"Edit Workout"),de(Te,r)},[()=>Ta(s.day.date)]),re(ee,ae)};ve(f,ee=>{A(a)==="view"?ee(q):ee(pe,!1)})}var O=D(f,2);O.__click=function(...ee){s.onClose?.apply(this,ee)};var le=D(G,2),Y=L(le);{var ie=ee=>{var ae=Po(),me=Ye(ae),ce=L(me);{var ye=U=>{var R=_o(),j=L(R),J=L(j);Ae(M=>de(J,M),[()=>aa(A(Z).durationMinutes)]),re(U,R)};ve(ce,U=>{A(Z).durationMinutes&&U(ye)})}var Te=D(ce,2);{var r=U=>{var R=ko(),j=L(R),J=L(j);Ae(M=>de(J,M),[()=>tl(A(Z).distanceMeters,A(Z).sport,s.settings)]),re(U,R)};ve(Te,U=>{A(Z).distanceMeters&&U(r)})}var N=D(Te,2);{var B=U=>{var R=So(),j=L(R),J=L(j);Ae(M=>de(J,M),[()=>nl(A(Z).sport,A(Z).primaryZone,s.settings)]),re(U,R)};ve(N,U=>{A(Z).primaryZone&&U(B)})}var T=D(me,2);{var g=U=>{var R=xo(),j=D(L(R),2),J=L(j);Ae(()=>de(J,A(Z).description)),re(U,R)};ve(T,U=>{A(Z).description&&U(g)})}var S=D(T,2);{var K=U=>{var R=Eo(),j=D(L(R),2),J=L(j);Ae(M=>de(J,M),[()=>A(Z).humanReadable.replace(/\\n/g,`
38
- `)]),re(U,R)};ve(S,U=>{A(Z).humanReadable&&U(K)})}re(ee,ae)},E=ee=>{var ae=Do(),me=Ye(ae),ce=L(me),ye=D(L(ce),2);He(ye,21,()=>p,ss,(te,we)=>{var Ee=Ro(),ke=L(Ee),Re={};Ae(Se=>{de(ke,Se),Re!==(Re=A(we))&&(Ee.value=(Ee.__value=A(we))??"")},[()=>A(we).charAt(0).toUpperCase()+A(we).slice(1)]),re(te,Ee)});var Te=D(ce,2),r=D(L(Te),2);He(r,21,()=>d,ss,(te,we)=>{var Ee=Io(),ke=L(Ee),Re={};Ae(Se=>{de(ke,Se),Re!==(Re=A(we))&&(Ee.value=(Ee.__value=A(we))??"")},[()=>A(we).charAt(0).toUpperCase()+A(we).slice(1)]),re(te,Ee)});var N=D(me,2),B=D(L(N),2),T=D(N,2),g=D(L(T),2),S=D(T,2),K=L(S),U=D(L(K),2),R=D(K,2),j=D(L(R),2),J=D(S,2),M=D(L(J),2),Q=D(J,2),fe=D(L(Q),2);Ns(ye,()=>A(o),te=>se(o,te)),Ns(r,()=>A(u),te=>se(u,te)),Ie(B,()=>A(c),te=>se(c,te)),Ie(g,()=>A(v),te=>se(v,te)),Ie(U,()=>A(y),te=>se(y,te)),Ie(j,()=>A(b),te=>se(b,te)),Ie(M,()=>A(m),te=>se(m,te)),Ie(fe,()=>A(C),te=>se(C,te)),re(ee,ae)};ve(Y,ee=>{A(a)==="view"?ee(ie):ee(E,!1)})}var I=D(le,2),$=L(I);{var X=ee=>{var ae=Ho(),me=Ye(ae),ce=L(me);ce.__click=k;var ye=D(ce,2);ye.__click=()=>se(i,!0);var Te=D(ye,2);{var r=j=>{var J=zo(),M=L(J);M.__click=()=>se(n,!A(n));var Q=D(M,2);{var fe=te=>{var we=Oo(),Ee=L(we);{var ke=Be=>{var Oe=Lo();Oe.__click=()=>P("zwo"),re(Be,Oe)};ve(Ee,Be=>{Js(A(Z).sport)&&Be(ke)})}var Re=D(Ee,2);{var Se=Be=>{var Oe=Bo();Oe.__click=()=>P("fit"),re(Be,Oe)};ve(Re,Be=>{Ys(A(Z).sport)&&Be(Se)})}var us=D(Re,2);{var Ss=Be=>{var Oe=Mo();Oe.__click=()=>P("mrc"),re(Be,Oe)};ve(us,Be=>{Xs(A(Z).sport)&&Be(Ss)})}var Ke=D(us,4);Ke.__click=function(...Be){s.onImportHelpClick?.apply(this,Be)},re(te,we)};ve(Q,te=>{A(n)&&te(fe)})}re(j,J)};ve(Te,j=>{A(z)&&j(r)})}var N=D(me,2),B=L(N);{var T=j=>{var J=No();let M;var Q=L(J);Ae(()=>{M=Pe(J,1,"export-status svelte-12rtkin",null,M,{error:A(l).isError}),de(Q,A(l).message)}),re(j,J)};ve(B,j=>{A(l)&&j(T)})}var g=D(B,2);let S;g.__click=()=>s.onToggleComplete(A(Z).id);var K=L(g);{var U=j=>{var J=Wo();re(j,J)},R=j=>{var J=Uo();re(j,J)};ve(K,j=>{A(Z).completed?j(U):j(R,!1)})}Ae(()=>S=Pe(g,1,"complete-btn svelte-12rtkin",null,S,{mark:!A(Z).completed,unmark:A(Z).completed})),re(ee,ae)},V=ee=>{var ae=jo(),me=Ye(ae);me.__click=x;var ce=D(me,2);ce.__click=_;var ye=L(ce);Ae(()=>{ce.disabled=!A(c),de(ye,A(a)==="create"?"Add Workout":"Save Changes")}),re(ee,ae)};ve($,ee=>{A(a)==="view"?ee(X):ee(V,!1)})}var be=D(I,2);{var ge=ee=>{var ae=Go(),me=L(ae),ce=D(L(me),2),ye=L(ce);ye.__click=()=>se(i,!1);var Te=D(ye,2);Te.__click=W,re(ee,ae)};ve(be,ee=>{A(i)&&ee(ge)})}re(e,ne),ys()}ks(["click","keydown"]);const qo={theme:"dark",units:{swim:"meters",bike:"kilometers",run:"kilometers"},firstDayOfWeek:"monday",run:{lthr:165,hrZones:[{zone:1,name:"Recovery",low:0,high:134},{zone:2,name:"Aerobic",low:134,high:147},{zone:3,name:"Tempo",low:147,high:156},{zone:4,name:"Threshold",low:156,high:165},{zone:5,name:"VO2max",low:165,high:180}],thresholdPace:"4:30",paceZones:[{zone:"E",name:"Easy",pace:"5:20"},{zone:"M",name:"Marathon",pace:"4:50"},{zone:"T",name:"Threshold",pace:"4:30"},{zone:"I",name:"Interval",pace:"4:00"},{zone:"R",name:"Repetition",pace:"3:40"}]},bike:{lthr:160,hrZones:[{zone:1,name:"Recovery",low:0,high:130},{zone:2,name:"Aerobic",low:130,high:142},{zone:3,name:"Tempo",low:142,high:151},{zone:4,name:"Threshold",low:151,high:160},{zone:5,name:"VO2max",low:160,high:175}],ftp:200,powerZones:[{zone:1,name:"Active Recovery",low:0,high:110},{zone:2,name:"Endurance",low:110,high:150},{zone:3,name:"Tempo",low:150,high:180},{zone:4,name:"Threshold",low:180,high:210},{zone:5,name:"VO2max",low:210,high:240}]},swim:{css:"1:50",cssSeconds:110,paceZones:[{zone:1,name:"Recovery",offset:20,pace:"2:10"},{zone:2,name:"Aerobic",offset:10,pace:"2:00"},{zone:3,name:"Tempo",offset:5,pace:"1:55"},{zone:4,name:"Threshold",offset:0,pace:"1:50"},{zone:5,name:"VO2max",offset:-5,pace:"1:45"}]}},Sn=`plan-${Je.meta.id}-settings`;function Vo(){const e=JSON.parse(JSON.stringify(qo));Je.preferences&&(e.units.swim=Je.preferences.swim||e.units.swim,e.units.bike=Je.preferences.bike||e.units.bike,e.units.run=Je.preferences.run||e.units.run,e.firstDayOfWeek=Je.preferences.firstDayOfWeek||e.firstDayOfWeek);const s=Je.zones;s?.run?.hr&&(e.run.lthr=s.run.hr.lthr,e.run.hrZones=s.run.hr.zones.map(a=>({zone:a.zone,name:a.name,low:a.hrLow,high:a.hrHigh}))),s?.run?.pace&&(e.run.thresholdPace=s.run.pace.thresholdPace||e.run.thresholdPace,s.run.pace.zones&&(e.run.paceZones=s.run.pace.zones.map(a=>({zone:a.zone,name:a.name,pace:a.pace})))),s?.bike?.hr&&(e.bike.lthr=s.bike.hr.lthr,e.bike.hrZones=s.bike.hr.zones.map(a=>({zone:a.zone,name:a.name,low:a.hrLow,high:a.hrHigh}))),s?.bike?.power&&(e.bike.ftp=s.bike.power.ftp,e.bike.powerZones=s.bike.power.zones.map(a=>({zone:a.zone,name:a.name,low:a.wattsLow,high:a.wattsHigh}))),s?.swim&&(e.swim.css=s.swim.css||e.swim.css,e.swim.cssSeconds=s.swim.cssSeconds||e.swim.cssSeconds,s.swim.zones&&(e.swim.paceZones=s.swim.zones.map(a=>({zone:a.zone,name:a.name,offset:a.paceOffset,pace:a.pace}))));const t=localStorage.getItem(Sn);if(t){const a=JSON.parse(t);a.theme&&(e.theme=a.theme),a.units&&(e.units={...e.units,...a.units}),a.firstDayOfWeek&&(e.firstDayOfWeek=a.firstDayOfWeek),a.run&&(e.run={...e.run,...a.run}),a.bike&&(e.bike={...e.bike,...a.bike}),a.swim&&(e.swim={...e.swim,...a.swim})}return e}function Jo(e){localStorage.setItem(Sn,JSON.stringify(e))}function xn(e){const s=e.split(":");return parseInt(s[0])*60+parseInt(s[1]||"0")}function En(e){const s=Math.floor(e/60),t=Math.round(e%60);return`${s}:${t.toString().padStart(2,"0")}`}function Yo(e){return[{zone:1,name:"Recovery",lowPct:0,highPct:81},{zone:2,name:"Aerobic",lowPct:81,highPct:89},{zone:3,name:"Tempo",lowPct:89,highPct:94},{zone:4,name:"Threshold",lowPct:94,highPct:100},{zone:5,name:"VO2max",lowPct:100,highPct:106}].map(t=>({zone:t.zone,name:t.name,low:Math.round(e*t.lowPct/100),high:Math.round(e*t.highPct/100)}))}function Xo(e){return[{zone:1,name:"Active Recovery",lowPct:0,highPct:55},{zone:2,name:"Endurance",lowPct:55,highPct:75},{zone:3,name:"Tempo",lowPct:75,highPct:90},{zone:4,name:"Threshold",lowPct:90,highPct:105},{zone:5,name:"VO2max",lowPct:105,highPct:120}].map(t=>({zone:t.zone,name:t.name,low:Math.round(e*t.lowPct/100),high:Math.round(e*t.highPct/100)}))}function Qo(e){const s=xn(e);return[{zone:"E",name:"Easy",factor:1.18},{zone:"M",name:"Marathon",factor:1.07},{zone:"T",name:"Threshold",factor:1},{zone:"I",name:"Interval",factor:.89},{zone:"R",name:"Repetition",factor:.82}].map(a=>({zone:a.zone,name:a.name,pace:En(Math.round(s*a.factor))}))}function $o(e){const s=xn(e);return[{zone:1,name:"Recovery",offset:20},{zone:2,name:"Aerobic",offset:10},{zone:3,name:"Tempo",offset:5},{zone:4,name:"Threshold",offset:0},{zone:5,name:"VO2max",offset:-5}].map(a=>({zone:a.zone,name:a.name,offset:a.offset,pace:En(s+a.offset)}))}const er="0.0.2";var sr=ue("<button> </button>"),tr=ue('<div class="settings-section svelte-1uhipit"><h4 class="settings-section-title svelte-1uhipit">Appearance</h4> <div class="theme-toggle svelte-1uhipit"><button><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" class="svelte-1uhipit"><circle cx="12" cy="12" r="5"></circle><path d="M12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42"></path></svg> Light</button> <button><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" class="svelte-1uhipit"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path></svg> Dark</button></div></div> <div class="settings-section svelte-1uhipit"><h4 class="settings-section-title svelte-1uhipit">Distance Units</h4> <div class="settings-row svelte-1uhipit"><span class="settings-label svelte-1uhipit">Swim</span> <select class="settings-select svelte-1uhipit"><option>Meters</option><option>Yards</option></select></div> <div class="settings-row svelte-1uhipit"><span class="settings-label svelte-1uhipit">Bike</span> <select class="settings-select svelte-1uhipit"><option>Kilometers</option><option>Miles</option></select></div> <div class="settings-row svelte-1uhipit"><span class="settings-label svelte-1uhipit">Run</span> <select class="settings-select svelte-1uhipit"><option>Kilometers</option><option>Miles</option></select></div></div> <div class="settings-section svelte-1uhipit"><h4 class="settings-section-title svelte-1uhipit">Calendar</h4> <div class="settings-row svelte-1uhipit"><span class="settings-label svelte-1uhipit">First day of week</span> <select class="settings-select svelte-1uhipit"><option>Monday</option><option>Sunday</option></select></div></div>',1),ar=ue('<div class="zone-row svelte-1uhipit"><span> </span> <span class="zone-name svelte-1uhipit"> </span> <input type="number" class="zone-input svelte-1uhipit"/> <input type="number" class="zone-input svelte-1uhipit"/></div>'),nr=ue('<div class="zone-row svelte-1uhipit"><span> </span> <span class="zone-name svelte-1uhipit"> </span> <input type="text" class="pace-input svelte-1uhipit"/></div>'),ir=ue('<div class="settings-section svelte-1uhipit"><h4 class="settings-section-title svelte-1uhipit">Heart Rate Zones</h4> <div class="threshold-row svelte-1uhipit"><span class="threshold-label svelte-1uhipit">Run LTHR</span> <input type="number" class="threshold-input svelte-1uhipit" min="100" max="220"/> <button class="recalc-btn svelte-1uhipit">Recalculate</button></div> <div class="zones-grid svelte-1uhipit"><div class="zone-row header svelte-1uhipit"><span>Zone</span><span>Name</span><span>Low</span><span>High</span></div> <!></div> <details class="help-details svelte-1uhipit"><summary class="svelte-1uhipit">How to find your LTHR</summary> <div class="help-content svelte-1uhipit"><p class="svelte-1uhipit"><strong>30-Minute Test:</strong></p> <ol class="svelte-1uhipit"><li class="svelte-1uhipit">Warm up for 15 minutes</li> <li class="svelte-1uhipit">Run as hard as you can sustain for 30 minutes</li> <li class="svelte-1uhipit">Your average HR for the last 20 minutes is your LTHR</li></ol></div></details></div> <div class="settings-section svelte-1uhipit"><h4 class="settings-section-title svelte-1uhipit">Pace Zones</h4> <div class="threshold-row svelte-1uhipit"><span class="threshold-label svelte-1uhipit">Threshold Pace</span> <input type="text" class="threshold-input svelte-1uhipit" placeholder="4:30"/> <button class="recalc-btn svelte-1uhipit">Recalculate</button></div> <div class="zones-grid svelte-1uhipit"><div class="zone-row header svelte-1uhipit"><span>Zone</span><span>Name</span><span colspan="2">Pace/km</span></div> <!></div> <details class="help-details svelte-1uhipit"><summary class="svelte-1uhipit">How to find your Threshold Pace</summary> <div class="help-content svelte-1uhipit"><p class="svelte-1uhipit"><strong>Option 1: Race-Based</strong></p> <ul class="svelte-1uhipit"><li class="svelte-1uhipit">Recent 5K race pace + 15-20 sec/km</li> <li class="svelte-1uhipit">Recent 10K race pace + 5-10 sec/km</li></ul> <p class="svelte-1uhipit"><strong>Option 2: 30-Minute Test</strong></p> <p class="svelte-1uhipit">Run 30 minutes at max sustainable effort. Average pace = threshold.</p></div></details></div>',1),lr=ue('<div class="zone-row svelte-1uhipit"><span> </span> <span class="zone-name svelte-1uhipit"> </span> <input type="number" class="zone-input svelte-1uhipit"/> <input type="number" class="zone-input svelte-1uhipit"/></div>'),or=ue('<div class="zone-row svelte-1uhipit"><span> </span> <span class="zone-name svelte-1uhipit"> </span> <input type="number" class="zone-input svelte-1uhipit"/> <input type="number" class="zone-input svelte-1uhipit"/></div>'),rr=ue('<div class="settings-section svelte-1uhipit"><h4 class="settings-section-title svelte-1uhipit">Heart Rate Zones</h4> <div class="threshold-row svelte-1uhipit"><span class="threshold-label svelte-1uhipit">Bike LTHR</span> <input type="number" class="threshold-input svelte-1uhipit" min="100" max="220"/> <button class="recalc-btn svelte-1uhipit">Recalculate</button></div> <div class="zones-grid svelte-1uhipit"><div class="zone-row header svelte-1uhipit"><span>Zone</span><span>Name</span><span>Low</span><span>High</span></div> <!></div> <details class="help-details svelte-1uhipit"><summary class="svelte-1uhipit">How to find your LTHR</summary> <div class="help-content svelte-1uhipit"><p class="svelte-1uhipit"><strong>30-Minute Test:</strong></p> <ol class="svelte-1uhipit"><li class="svelte-1uhipit">Warm up for 15 minutes</li> <li class="svelte-1uhipit">Bike as hard as you can sustain for 30 minutes</li> <li class="svelte-1uhipit">Your average HR for the last 20 minutes is your LTHR</li></ol> <p class="help-note svelte-1uhipit">Bike LTHR is typically 5-10 bpm lower than run.</p></div></details></div> <div class="settings-section svelte-1uhipit"><h4 class="settings-section-title svelte-1uhipit">Power Zones</h4> <div class="threshold-row svelte-1uhipit"><span class="threshold-label svelte-1uhipit">FTP (watts)</span> <input type="number" class="threshold-input svelte-1uhipit" min="50" max="500"/> <button class="recalc-btn svelte-1uhipit">Recalculate</button></div> <div class="zones-grid svelte-1uhipit"><div class="zone-row header svelte-1uhipit"><span>Zone</span><span>Name</span><span>Low W</span><span>High W</span></div> <!></div> <details class="help-details svelte-1uhipit"><summary class="svelte-1uhipit">How to find your FTP</summary> <div class="help-content svelte-1uhipit"><p class="svelte-1uhipit"><strong>20-Minute Test:</strong></p> <ol class="svelte-1uhipit"><li class="svelte-1uhipit">Warm up for 20 minutes including a few hard efforts</li> <li class="svelte-1uhipit">Ride as hard as you can sustain for 20 minutes</li> <li class="svelte-1uhipit">FTP = Average power × 0.95</li></ol> <p class="svelte-1uhipit"><strong>Ramp Test:</strong> Most trainer apps (Zwift, TrainerRoad) have built-in FTP tests.</p></div></details></div>',1),ur=ue('<div class="zone-row svelte-1uhipit"><span> </span> <span class="zone-name svelte-1uhipit"> </span> <span class="zone-name svelte-1uhipit"> </span> <input type="text" class="pace-input svelte-1uhipit"/></div>'),cr=ue('<div class="settings-section svelte-1uhipit"><h4 class="settings-section-title svelte-1uhipit">Pace Zones</h4> <div class="threshold-row svelte-1uhipit"><span class="threshold-label svelte-1uhipit">CSS (per 100m)</span> <input type="text" class="threshold-input svelte-1uhipit" placeholder="1:45"/> <button class="recalc-btn svelte-1uhipit">Recalculate</button></div> <div class="zones-grid svelte-1uhipit"><div class="zone-row header svelte-1uhipit"><span>Zone</span><span>Name</span><span>Offset</span><span>Pace/100</span></div> <!></div> <details class="help-details svelte-1uhipit"><summary class="svelte-1uhipit">How to find your CSS</summary> <div class="help-content svelte-1uhipit"><p class="svelte-1uhipit"><strong>CSS Test (Critical Swim Speed):</strong></p> <ol class="svelte-1uhipit"><li class="svelte-1uhipit">Warm up for 10 minutes</li> <li class="svelte-1uhipit">Swim 400m all-out, record time (T400)</li> <li class="svelte-1uhipit">Rest 5-10 minutes</li> <li class="svelte-1uhipit">Swim 200m all-out, record time (T200)</li> <li class="svelte-1uhipit">CSS = (T400 - T200) ÷ 2 = pace per 100m</li></ol> <p class="svelte-1uhipit"><strong>Example:</strong> 400m in 6:40 (400s), 200m in 3:00 (180s)<br/> CSS = (400 - 180) ÷ 2 = 110 sec/100m = 1:50/100m</p></div></details></div>'),mr=ue("<div> </div>"),fr=ue(`<div class="settings-section svelte-1uhipit"><h4 class="settings-section-title svelte-1uhipit">Your Data</h4> <div class="data-explainer svelte-1uhipit"><p class="svelte-1uhipit">Your training data is stored <strong>only on this device</strong>, in your browser's
38
+ `)]),re(U,R)};ve(S,U=>{A(Z).humanReadable&&U(K)})}re(ee,ae)},E=ee=>{var ae=Do(),me=Ye(ae),ce=L(me),ye=D(L(ce),2);He(ye,21,()=>p,ss,(te,we)=>{var Ee=Ro(),ke=L(Ee),Re={};Ae(Se=>{de(ke,Se),Re!==(Re=A(we))&&(Ee.value=(Ee.__value=A(we))??"")},[()=>A(we).charAt(0).toUpperCase()+A(we).slice(1)]),re(te,Ee)});var Te=D(ce,2),r=D(L(Te),2);He(r,21,()=>d,ss,(te,we)=>{var Ee=Io(),ke=L(Ee),Re={};Ae(Se=>{de(ke,Se),Re!==(Re=A(we))&&(Ee.value=(Ee.__value=A(we))??"")},[()=>A(we).charAt(0).toUpperCase()+A(we).slice(1)]),re(te,Ee)});var N=D(me,2),B=D(L(N),2),T=D(N,2),g=D(L(T),2),S=D(T,2),K=L(S),U=D(L(K),2),R=D(K,2),j=D(L(R),2),J=D(S,2),M=D(L(J),2),Q=D(J,2),fe=D(L(Q),2);Ns(ye,()=>A(o),te=>se(o,te)),Ns(r,()=>A(u),te=>se(u,te)),Ie(B,()=>A(c),te=>se(c,te)),Ie(g,()=>A(v),te=>se(v,te)),Ie(U,()=>A(y),te=>se(y,te)),Ie(j,()=>A(b),te=>se(b,te)),Ie(M,()=>A(m),te=>se(m,te)),Ie(fe,()=>A(C),te=>se(C,te)),re(ee,ae)};ve(Y,ee=>{A(a)==="view"?ee(ie):ee(E,!1)})}var I=D(le,2),$=L(I);{var X=ee=>{var ae=Ho(),me=Ye(ae),ce=L(me);ce.__click=k;var ye=D(ce,2);ye.__click=()=>se(i,!0);var Te=D(ye,2);{var r=j=>{var J=zo(),M=L(J);M.__click=()=>se(n,!A(n));var Q=D(M,2);{var fe=te=>{var we=Oo(),Ee=L(we);{var ke=Be=>{var Oe=Lo();Oe.__click=()=>P("zwo"),re(Be,Oe)};ve(Ee,Be=>{Js(A(Z).sport)&&Be(ke)})}var Re=D(Ee,2);{var Se=Be=>{var Oe=Bo();Oe.__click=()=>P("fit"),re(Be,Oe)};ve(Re,Be=>{Ys(A(Z).sport)&&Be(Se)})}var us=D(Re,2);{var Ss=Be=>{var Oe=Mo();Oe.__click=()=>P("mrc"),re(Be,Oe)};ve(us,Be=>{Xs(A(Z).sport)&&Be(Ss)})}var Ke=D(us,4);Ke.__click=function(...Be){s.onImportHelpClick?.apply(this,Be)},re(te,we)};ve(Q,te=>{A(n)&&te(fe)})}re(j,J)};ve(Te,j=>{A(z)&&j(r)})}var N=D(me,2),B=L(N);{var T=j=>{var J=No();let M;var Q=L(J);Ae(()=>{M=Pe(J,1,"export-status svelte-12rtkin",null,M,{error:A(l).isError}),de(Q,A(l).message)}),re(j,J)};ve(B,j=>{A(l)&&j(T)})}var g=D(B,2);let S;g.__click=()=>s.onToggleComplete(A(Z).id);var K=L(g);{var U=j=>{var J=Wo();re(j,J)},R=j=>{var J=Uo();re(j,J)};ve(K,j=>{A(Z).completed?j(U):j(R,!1)})}Ae(()=>S=Pe(g,1,"complete-btn svelte-12rtkin",null,S,{mark:!A(Z).completed,unmark:A(Z).completed})),re(ee,ae)},V=ee=>{var ae=jo(),me=Ye(ae);me.__click=x;var ce=D(me,2);ce.__click=_;var ye=L(ce);Ae(()=>{ce.disabled=!A(c),de(ye,A(a)==="create"?"Add Workout":"Save Changes")}),re(ee,ae)};ve($,ee=>{A(a)==="view"?ee(X):ee(V,!1)})}var be=D(I,2);{var ge=ee=>{var ae=Go(),me=L(ae),ce=D(L(me),2),ye=L(ce);ye.__click=()=>se(i,!1);var Te=D(ye,2);Te.__click=W,re(ee,ae)};ve(be,ee=>{A(i)&&ee(ge)})}re(e,ne),ys()}ks(["click","keydown"]);const qo={theme:"dark",units:{swim:"meters",bike:"kilometers",run:"kilometers"},firstDayOfWeek:"monday",run:{lthr:165,hrZones:[{zone:1,name:"Recovery",low:0,high:134},{zone:2,name:"Aerobic",low:134,high:147},{zone:3,name:"Tempo",low:147,high:156},{zone:4,name:"Threshold",low:156,high:165},{zone:5,name:"VO2max",low:165,high:180}],thresholdPace:"4:30",paceZones:[{zone:"E",name:"Easy",pace:"5:20"},{zone:"M",name:"Marathon",pace:"4:50"},{zone:"T",name:"Threshold",pace:"4:30"},{zone:"I",name:"Interval",pace:"4:00"},{zone:"R",name:"Repetition",pace:"3:40"}]},bike:{lthr:160,hrZones:[{zone:1,name:"Recovery",low:0,high:130},{zone:2,name:"Aerobic",low:130,high:142},{zone:3,name:"Tempo",low:142,high:151},{zone:4,name:"Threshold",low:151,high:160},{zone:5,name:"VO2max",low:160,high:175}],ftp:200,powerZones:[{zone:1,name:"Active Recovery",low:0,high:110},{zone:2,name:"Endurance",low:110,high:150},{zone:3,name:"Tempo",low:150,high:180},{zone:4,name:"Threshold",low:180,high:210},{zone:5,name:"VO2max",low:210,high:240}]},swim:{css:"1:50",cssSeconds:110,paceZones:[{zone:1,name:"Recovery",offset:20,pace:"2:10"},{zone:2,name:"Aerobic",offset:10,pace:"2:00"},{zone:3,name:"Tempo",offset:5,pace:"1:55"},{zone:4,name:"Threshold",offset:0,pace:"1:50"},{zone:5,name:"VO2max",offset:-5,pace:"1:45"}]}},Sn=`plan-${Je.meta.id}-settings`;function Vo(){const e=JSON.parse(JSON.stringify(qo));Je.preferences&&(e.units.swim=Je.preferences.swim||e.units.swim,e.units.bike=Je.preferences.bike||e.units.bike,e.units.run=Je.preferences.run||e.units.run,e.firstDayOfWeek=Je.preferences.firstDayOfWeek||e.firstDayOfWeek);const s=Je.zones;s?.run?.hr&&(e.run.lthr=s.run.hr.lthr,e.run.hrZones=s.run.hr.zones.map(a=>({zone:a.zone,name:a.name,low:a.hrLow,high:a.hrHigh}))),s?.run?.pace&&(e.run.thresholdPace=s.run.pace.thresholdPace||e.run.thresholdPace,s.run.pace.zones&&(e.run.paceZones=s.run.pace.zones.map(a=>({zone:a.zone,name:a.name,pace:a.pace})))),s?.bike?.hr&&(e.bike.lthr=s.bike.hr.lthr,e.bike.hrZones=s.bike.hr.zones.map(a=>({zone:a.zone,name:a.name,low:a.hrLow,high:a.hrHigh}))),s?.bike?.power&&(e.bike.ftp=s.bike.power.ftp,e.bike.powerZones=s.bike.power.zones.map(a=>({zone:a.zone,name:a.name,low:a.wattsLow,high:a.wattsHigh}))),s?.swim&&(e.swim.css=s.swim.css||e.swim.css,e.swim.cssSeconds=s.swim.cssSeconds||e.swim.cssSeconds,s.swim.zones&&(e.swim.paceZones=s.swim.zones.map(a=>({zone:a.zone,name:a.name,offset:a.paceOffset,pace:a.pace}))));const t=localStorage.getItem(Sn);if(t){const a=JSON.parse(t);a.theme&&(e.theme=a.theme),a.units&&(e.units={...e.units,...a.units}),a.firstDayOfWeek&&(e.firstDayOfWeek=a.firstDayOfWeek),a.run&&(e.run={...e.run,...a.run}),a.bike&&(e.bike={...e.bike,...a.bike}),a.swim&&(e.swim={...e.swim,...a.swim})}return e}function Jo(e){localStorage.setItem(Sn,JSON.stringify(e))}function xn(e){const s=e.split(":");return parseInt(s[0])*60+parseInt(s[1]||"0")}function En(e){const s=Math.floor(e/60),t=Math.round(e%60);return`${s}:${t.toString().padStart(2,"0")}`}function Yo(e){return[{zone:1,name:"Recovery",lowPct:0,highPct:81},{zone:2,name:"Aerobic",lowPct:81,highPct:89},{zone:3,name:"Tempo",lowPct:89,highPct:94},{zone:4,name:"Threshold",lowPct:94,highPct:100},{zone:5,name:"VO2max",lowPct:100,highPct:106}].map(t=>({zone:t.zone,name:t.name,low:Math.round(e*t.lowPct/100),high:Math.round(e*t.highPct/100)}))}function Xo(e){return[{zone:1,name:"Active Recovery",lowPct:0,highPct:55},{zone:2,name:"Endurance",lowPct:55,highPct:75},{zone:3,name:"Tempo",lowPct:75,highPct:90},{zone:4,name:"Threshold",lowPct:90,highPct:105},{zone:5,name:"VO2max",lowPct:105,highPct:120}].map(t=>({zone:t.zone,name:t.name,low:Math.round(e*t.lowPct/100),high:Math.round(e*t.highPct/100)}))}function Qo(e){const s=xn(e);return[{zone:"E",name:"Easy",factor:1.18},{zone:"M",name:"Marathon",factor:1.07},{zone:"T",name:"Threshold",factor:1},{zone:"I",name:"Interval",factor:.89},{zone:"R",name:"Repetition",factor:.82}].map(a=>({zone:a.zone,name:a.name,pace:En(Math.round(s*a.factor))}))}function $o(e){const s=xn(e);return[{zone:1,name:"Recovery",offset:20},{zone:2,name:"Aerobic",offset:10},{zone:3,name:"Tempo",offset:5},{zone:4,name:"Threshold",offset:0},{zone:5,name:"VO2max",offset:-5}].map(a=>({zone:a.zone,name:a.name,offset:a.offset,pace:En(s+a.offset)}))}const er="0.0.4";var sr=ue("<button> </button>"),tr=ue('<div class="settings-section svelte-1uhipit"><h4 class="settings-section-title svelte-1uhipit">Appearance</h4> <div class="theme-toggle svelte-1uhipit"><button><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" class="svelte-1uhipit"><circle cx="12" cy="12" r="5"></circle><path d="M12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42"></path></svg> Light</button> <button><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" class="svelte-1uhipit"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path></svg> Dark</button></div></div> <div class="settings-section svelte-1uhipit"><h4 class="settings-section-title svelte-1uhipit">Distance Units</h4> <div class="settings-row svelte-1uhipit"><span class="settings-label svelte-1uhipit">Swim</span> <select class="settings-select svelte-1uhipit"><option>Meters</option><option>Yards</option></select></div> <div class="settings-row svelte-1uhipit"><span class="settings-label svelte-1uhipit">Bike</span> <select class="settings-select svelte-1uhipit"><option>Kilometers</option><option>Miles</option></select></div> <div class="settings-row svelte-1uhipit"><span class="settings-label svelte-1uhipit">Run</span> <select class="settings-select svelte-1uhipit"><option>Kilometers</option><option>Miles</option></select></div></div> <div class="settings-section svelte-1uhipit"><h4 class="settings-section-title svelte-1uhipit">Calendar</h4> <div class="settings-row svelte-1uhipit"><span class="settings-label svelte-1uhipit">First day of week</span> <select class="settings-select svelte-1uhipit"><option>Monday</option><option>Sunday</option></select></div></div>',1),ar=ue('<div class="zone-row svelte-1uhipit"><span> </span> <span class="zone-name svelte-1uhipit"> </span> <input type="number" class="zone-input svelte-1uhipit"/> <input type="number" class="zone-input svelte-1uhipit"/></div>'),nr=ue('<div class="zone-row svelte-1uhipit"><span> </span> <span class="zone-name svelte-1uhipit"> </span> <input type="text" class="pace-input svelte-1uhipit"/></div>'),ir=ue('<div class="settings-section svelte-1uhipit"><h4 class="settings-section-title svelte-1uhipit">Heart Rate Zones</h4> <div class="threshold-row svelte-1uhipit"><span class="threshold-label svelte-1uhipit">Run LTHR</span> <input type="number" class="threshold-input svelte-1uhipit" min="100" max="220"/> <button class="recalc-btn svelte-1uhipit">Recalculate</button></div> <div class="zones-grid svelte-1uhipit"><div class="zone-row header svelte-1uhipit"><span>Zone</span><span>Name</span><span>Low</span><span>High</span></div> <!></div> <details class="help-details svelte-1uhipit"><summary class="svelte-1uhipit">How to find your LTHR</summary> <div class="help-content svelte-1uhipit"><p class="svelte-1uhipit"><strong>30-Minute Test:</strong></p> <ol class="svelte-1uhipit"><li class="svelte-1uhipit">Warm up for 15 minutes</li> <li class="svelte-1uhipit">Run as hard as you can sustain for 30 minutes</li> <li class="svelte-1uhipit">Your average HR for the last 20 minutes is your LTHR</li></ol></div></details></div> <div class="settings-section svelte-1uhipit"><h4 class="settings-section-title svelte-1uhipit">Pace Zones</h4> <div class="threshold-row svelte-1uhipit"><span class="threshold-label svelte-1uhipit">Threshold Pace</span> <input type="text" class="threshold-input svelte-1uhipit" placeholder="4:30"/> <button class="recalc-btn svelte-1uhipit">Recalculate</button></div> <div class="zones-grid svelte-1uhipit"><div class="zone-row header svelte-1uhipit"><span>Zone</span><span>Name</span><span colspan="2">Pace/km</span></div> <!></div> <details class="help-details svelte-1uhipit"><summary class="svelte-1uhipit">How to find your Threshold Pace</summary> <div class="help-content svelte-1uhipit"><p class="svelte-1uhipit"><strong>Option 1: Race-Based</strong></p> <ul class="svelte-1uhipit"><li class="svelte-1uhipit">Recent 5K race pace + 15-20 sec/km</li> <li class="svelte-1uhipit">Recent 10K race pace + 5-10 sec/km</li></ul> <p class="svelte-1uhipit"><strong>Option 2: 30-Minute Test</strong></p> <p class="svelte-1uhipit">Run 30 minutes at max sustainable effort. Average pace = threshold.</p></div></details></div>',1),lr=ue('<div class="zone-row svelte-1uhipit"><span> </span> <span class="zone-name svelte-1uhipit"> </span> <input type="number" class="zone-input svelte-1uhipit"/> <input type="number" class="zone-input svelte-1uhipit"/></div>'),or=ue('<div class="zone-row svelte-1uhipit"><span> </span> <span class="zone-name svelte-1uhipit"> </span> <input type="number" class="zone-input svelte-1uhipit"/> <input type="number" class="zone-input svelte-1uhipit"/></div>'),rr=ue('<div class="settings-section svelte-1uhipit"><h4 class="settings-section-title svelte-1uhipit">Heart Rate Zones</h4> <div class="threshold-row svelte-1uhipit"><span class="threshold-label svelte-1uhipit">Bike LTHR</span> <input type="number" class="threshold-input svelte-1uhipit" min="100" max="220"/> <button class="recalc-btn svelte-1uhipit">Recalculate</button></div> <div class="zones-grid svelte-1uhipit"><div class="zone-row header svelte-1uhipit"><span>Zone</span><span>Name</span><span>Low</span><span>High</span></div> <!></div> <details class="help-details svelte-1uhipit"><summary class="svelte-1uhipit">How to find your LTHR</summary> <div class="help-content svelte-1uhipit"><p class="svelte-1uhipit"><strong>30-Minute Test:</strong></p> <ol class="svelte-1uhipit"><li class="svelte-1uhipit">Warm up for 15 minutes</li> <li class="svelte-1uhipit">Bike as hard as you can sustain for 30 minutes</li> <li class="svelte-1uhipit">Your average HR for the last 20 minutes is your LTHR</li></ol> <p class="help-note svelte-1uhipit">Bike LTHR is typically 5-10 bpm lower than run.</p></div></details></div> <div class="settings-section svelte-1uhipit"><h4 class="settings-section-title svelte-1uhipit">Power Zones</h4> <div class="threshold-row svelte-1uhipit"><span class="threshold-label svelte-1uhipit">FTP (watts)</span> <input type="number" class="threshold-input svelte-1uhipit" min="50" max="500"/> <button class="recalc-btn svelte-1uhipit">Recalculate</button></div> <div class="zones-grid svelte-1uhipit"><div class="zone-row header svelte-1uhipit"><span>Zone</span><span>Name</span><span>Low W</span><span>High W</span></div> <!></div> <details class="help-details svelte-1uhipit"><summary class="svelte-1uhipit">How to find your FTP</summary> <div class="help-content svelte-1uhipit"><p class="svelte-1uhipit"><strong>20-Minute Test:</strong></p> <ol class="svelte-1uhipit"><li class="svelte-1uhipit">Warm up for 20 minutes including a few hard efforts</li> <li class="svelte-1uhipit">Ride as hard as you can sustain for 20 minutes</li> <li class="svelte-1uhipit">FTP = Average power × 0.95</li></ol> <p class="svelte-1uhipit"><strong>Ramp Test:</strong> Most trainer apps (Zwift, TrainerRoad) have built-in FTP tests.</p></div></details></div>',1),ur=ue('<div class="zone-row svelte-1uhipit"><span> </span> <span class="zone-name svelte-1uhipit"> </span> <span class="zone-name svelte-1uhipit"> </span> <input type="text" class="pace-input svelte-1uhipit"/></div>'),cr=ue('<div class="settings-section svelte-1uhipit"><h4 class="settings-section-title svelte-1uhipit">Pace Zones</h4> <div class="threshold-row svelte-1uhipit"><span class="threshold-label svelte-1uhipit">CSS (per 100m)</span> <input type="text" class="threshold-input svelte-1uhipit" placeholder="1:45"/> <button class="recalc-btn svelte-1uhipit">Recalculate</button></div> <div class="zones-grid svelte-1uhipit"><div class="zone-row header svelte-1uhipit"><span>Zone</span><span>Name</span><span>Offset</span><span>Pace/100</span></div> <!></div> <details class="help-details svelte-1uhipit"><summary class="svelte-1uhipit">How to find your CSS</summary> <div class="help-content svelte-1uhipit"><p class="svelte-1uhipit"><strong>CSS Test (Critical Swim Speed):</strong></p> <ol class="svelte-1uhipit"><li class="svelte-1uhipit">Warm up for 10 minutes</li> <li class="svelte-1uhipit">Swim 400m all-out, record time (T400)</li> <li class="svelte-1uhipit">Rest 5-10 minutes</li> <li class="svelte-1uhipit">Swim 200m all-out, record time (T200)</li> <li class="svelte-1uhipit">CSS = (T400 - T200) ÷ 2 = pace per 100m</li></ol> <p class="svelte-1uhipit"><strong>Example:</strong> 400m in 6:40 (400s), 200m in 3:00 (180s)<br/> CSS = (400 - 180) ÷ 2 = 110 sec/100m = 1:50/100m</p></div></details></div>'),mr=ue("<div> </div>"),fr=ue(`<div class="settings-section svelte-1uhipit"><h4 class="settings-section-title svelte-1uhipit">Your Data</h4> <div class="data-explainer svelte-1uhipit"><p class="svelte-1uhipit">Your training data is stored <strong>only on this device</strong>, in your browser's
39
39
  local storage. This includes your settings, completed workouts, and any changes you've
40
40
  made to your plan.</p> <p class="svelte-1uhipit">If you clear your browser data, switch browsers, or use a different device, your
41
41
  progress won't be there. Use the backup feature below to save your data and restore it