@pasko70/pibo 1.4.6 → 1.6.0
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/apps/chat/chat-settings-routes.js +24 -1
- package/dist/apps/chat/data/project-service.js +15 -5
- package/dist/apps/chat/telemetry-retention-service.js +69 -0
- package/dist/apps/chat/web-app.js +18 -8
- package/dist/apps/chat-ui/assets/{dist-Bns-O5iY.js → dist-B0i7AU1O.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-DuM9PL5k.js → dist-BbCXk-v9.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-Dj3uUYqF.js → dist-BwZj_mI4.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-D4CEl91a.js → dist-C-UobPQQ.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-B6kzRv2_.js → dist-CFoGUjhX.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-DWA7BIr3.js → dist-D87he9he.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-CVcI9eYD.js → dist-DYqJWYtm.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-DqaKPP5Y.js → dist-Dm6UhVM6.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-D9K0kHT0.js → dist-Yx8i6oQ1.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-DvPgMX-r.js → dist-aLS3alom.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-CqkKCn6l.js → dist-wyhLeLW6.js} +1 -1
- package/dist/apps/chat-ui/assets/index-CNDX-4Kp.js +166 -0
- package/dist/apps/chat-ui/assets/index-DvBWSeIO.css +1 -0
- package/dist/apps/chat-ui/index.html +2 -2
- package/dist/apps/chat-vscode-web/assets/{index-CjOC7zYy.js → index-lA76A7Pc.js} +1 -1
- package/dist/apps/chat-vscode-web/index.html +1 -1
- package/dist/apps/vscode-artifacts/latest.vsix +0 -0
- package/dist/apps/vscode-artifacts/{pibo-vscode-ext-1.4.6.vsix → pibo-vscode-ext-1.6.0.vsix} +0 -0
- package/dist/core/runtime-telemetry.js +11 -3
- package/dist/core/session-router.js +7 -1
- package/dist/core/telemetry-retention-settings.js +34 -0
- package/dist/core/user-settings.js +11 -0
- package/dist/data/telemetry.js +11 -0
- package/package.json +1 -1
- package/dist/apps/chat-ui/assets/index-B-qaya1G.css +0 -1
- package/dist/apps/chat-ui/assets/index-Baxj7Erc.js +0 -166
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { readPiboBasePrompt, savePiboCustomBasePrompt, setPiboBasePromptMode } from "../../core/base-prompt.js";
|
|
2
2
|
import { readPiboCompactionPrompt, savePiboCustomCompactionPrompt, setPiboCompactionPromptMode } from "../../core/compaction-prompt.js";
|
|
3
|
-
import {
|
|
3
|
+
import { sanitizeTelemetryRetentionDays, sanitizeTelemetryRetentionSettings } from "../../core/telemetry-retention-settings.js";
|
|
4
|
+
import { loadPiboUserSettings, sanitizeShortcutSettings, sanitizeTimezone, updatePiboUserSettings, updateTelemetryRetentionLastPrunedAt } from "../../core/user-settings.js";
|
|
4
5
|
import { PiboWebHttpError, readJsonBody, responseJson } from "../../web/http.js";
|
|
5
6
|
import { CHAT_WEB_API_PREFIX } from "./chat-api-routes.js";
|
|
6
7
|
import { normalizeBasePromptMarkdown, normalizeBasePromptMode, normalizeCompactionPromptMarkdown, normalizeCompactionPromptMode, updateChatModelDefaults, } from "./chat-request-normalizers.js";
|
|
8
|
+
import { pruneTelemetryOlderThan } from "./telemetry-retention-service.js";
|
|
7
9
|
export function chatSettingsRoute(pathname, method) {
|
|
8
10
|
if (pathname === `${CHAT_WEB_API_PREFIX}/model-defaults` && method === "PATCH")
|
|
9
11
|
return { kind: "model-defaults" };
|
|
@@ -11,6 +13,8 @@ export function chatSettingsRoute(pathname, method) {
|
|
|
11
13
|
return { kind: "user-settings", action: "read" };
|
|
12
14
|
if (pathname === `${CHAT_WEB_API_PREFIX}/user-settings` && method === "PATCH")
|
|
13
15
|
return { kind: "user-settings", action: "update" };
|
|
16
|
+
if (pathname === `${CHAT_WEB_API_PREFIX}/telemetry-retention/prune` && method === "POST")
|
|
17
|
+
return { kind: "telemetry-retention", action: "prune" };
|
|
14
18
|
if (pathname === `${CHAT_WEB_API_PREFIX}/base-prompt` && method === "GET")
|
|
15
19
|
return { kind: "base-prompt", action: "read" };
|
|
16
20
|
if (pathname === `${CHAT_WEB_API_PREFIX}/base-prompt` && method === "PATCH")
|
|
@@ -44,6 +48,18 @@ export async function handleChatSettingsRoute(input) {
|
|
|
44
48
|
const body = await readJsonBody(request);
|
|
45
49
|
return responseJson({ userSettings: updatePiboUserSettings(userSettingsPatch(body)) });
|
|
46
50
|
}
|
|
51
|
+
if (route.kind === "telemetry-retention") {
|
|
52
|
+
if (!input.dataStore)
|
|
53
|
+
throw new PiboWebHttpError("Telemetry retention store unavailable", 503);
|
|
54
|
+
const body = await readJsonBody(request);
|
|
55
|
+
const days = sanitizeTelemetryRetentionDays(body.days);
|
|
56
|
+
if (!days)
|
|
57
|
+
throw new PiboWebHttpError("Invalid telemetry retention days", 400);
|
|
58
|
+
const result = pruneTelemetryOlderThan({ dataStore: input.dataStore, days, apply: body.dryRun !== true });
|
|
59
|
+
if (result.applied)
|
|
60
|
+
updateTelemetryRetentionLastPrunedAt(new Date().toISOString());
|
|
61
|
+
return responseJson({ telemetryRetention: result });
|
|
62
|
+
}
|
|
47
63
|
if (route.kind === "base-prompt") {
|
|
48
64
|
if (route.action === "read")
|
|
49
65
|
return responseJson({ basePrompt: await readPiboBasePrompt(cwd) });
|
|
@@ -71,5 +87,12 @@ function userSettingsPatch(body) {
|
|
|
71
87
|
}
|
|
72
88
|
if (body.shortcuts !== undefined)
|
|
73
89
|
patch.shortcuts = sanitizeShortcutSettings(body.shortcuts);
|
|
90
|
+
if (body.telemetryRetention !== undefined) {
|
|
91
|
+
const current = loadPiboUserSettings().telemetryRetention;
|
|
92
|
+
patch.telemetryRetention = {
|
|
93
|
+
...sanitizeTelemetryRetentionSettings(body.telemetryRetention),
|
|
94
|
+
...(current.lastPrunedAt ? { lastPrunedAt: current.lastPrunedAt } : {}),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
74
97
|
return patch;
|
|
75
98
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
|
-
import { mkdirSync, rmSync } from "node:fs";
|
|
2
|
+
import { mkdirSync, rmSync, statSync } from "node:fs";
|
|
3
3
|
import { dirname, isAbsolute, resolve } from "node:path";
|
|
4
4
|
import { DatabaseSync } from "node:sqlite";
|
|
5
5
|
import { piboHomePath } from "../../../core/pibo-home.js";
|
|
@@ -27,11 +27,11 @@ export class ChatProjectService {
|
|
|
27
27
|
mkdirSync(folder, { recursive: true });
|
|
28
28
|
const now = new Date().toISOString();
|
|
29
29
|
this.db.prepare(`INSERT INTO projects (id, name, description, project_folder, configuration_status, metadata_json, created_at, updated_at)
|
|
30
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`).run(id, "
|
|
30
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`).run(id, "Project Manager", null, folder, "configured", JSON.stringify({ default: true }), now, now);
|
|
31
31
|
return this.requireProject(id);
|
|
32
32
|
}
|
|
33
33
|
listProjects(options = {}) {
|
|
34
|
-
const rows = this.db.prepare(`SELECT * FROM projects WHERE json_extract(metadata_json, '$.personal') IS NOT 1 ${options.includeArchived ? "" : "AND archived_at IS NULL"} ORDER BY lower(name), created_at`).all();
|
|
34
|
+
const rows = this.db.prepare(`SELECT * FROM projects WHERE json_extract(metadata_json, '$.personal') IS NOT 1 AND json_extract(metadata_json, '$.default') IS NOT 1 ${options.includeArchived ? "" : "AND archived_at IS NULL"} ORDER BY lower(name), created_at`).all();
|
|
35
35
|
return rows.map(projectFromRow);
|
|
36
36
|
}
|
|
37
37
|
getProject(id, options = {}) {
|
|
@@ -49,8 +49,7 @@ export class ChatProjectService {
|
|
|
49
49
|
const projectFolder = resolve(normalizeProjectFolder(input.projectFolder));
|
|
50
50
|
this.assertNameAvailable(name);
|
|
51
51
|
this.assertFolderAvailable(projectFolder);
|
|
52
|
-
|
|
53
|
-
mkdirSync(projectFolder, { recursive: true });
|
|
52
|
+
this.ensureProjectFolderUsable(projectFolder);
|
|
54
53
|
const now = new Date().toISOString();
|
|
55
54
|
const id = `prj_${randomUUID()}`;
|
|
56
55
|
this.db.prepare(`INSERT INTO projects (id, name, description, project_folder, configuration_status, metadata_json, created_at, updated_at)
|
|
@@ -577,6 +576,17 @@ export class ChatProjectService {
|
|
|
577
576
|
if (existing)
|
|
578
577
|
throw new Error("Project folder already exists");
|
|
579
578
|
}
|
|
579
|
+
ensureProjectFolderUsable(folder) {
|
|
580
|
+
try {
|
|
581
|
+
mkdirSync(folder, { recursive: true });
|
|
582
|
+
if (!statSync(folder).isDirectory())
|
|
583
|
+
throw new Error("Project folder is not a directory");
|
|
584
|
+
}
|
|
585
|
+
catch (error) {
|
|
586
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
587
|
+
throw new Error(`Project folder cannot be created or used: ${message}`);
|
|
588
|
+
}
|
|
589
|
+
}
|
|
580
590
|
}
|
|
581
591
|
function projectFromRow(row) {
|
|
582
592
|
return {
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { telemetryRetentionCutoff, } from "../../core/telemetry-retention-settings.js";
|
|
2
|
+
export const TELEMETRY_RETENTION_CLASSES = [
|
|
3
|
+
"live",
|
|
4
|
+
"diagnostic",
|
|
5
|
+
"provider_event",
|
|
6
|
+
"payload_preview",
|
|
7
|
+
"incident",
|
|
8
|
+
];
|
|
9
|
+
export const DEFAULT_TELEMETRY_RETENTION_MAINTENANCE_INTERVAL_MS = 24 * 60 * 60 * 1000;
|
|
10
|
+
export function pruneTelemetryOlderThan(input) {
|
|
11
|
+
const cutoff = telemetryRetentionCutoff(input.days, input.now);
|
|
12
|
+
const results = TELEMETRY_RETENTION_CLASSES.map((retentionClass) => input.dataStore.telemetry.prune({ retentionClass, before: cutoff, apply: input.apply }));
|
|
13
|
+
return {
|
|
14
|
+
cutoff,
|
|
15
|
+
days: input.days,
|
|
16
|
+
applied: input.apply === true,
|
|
17
|
+
results,
|
|
18
|
+
rowsDeleted: results.reduce((sum, result) => sum + result.rowsDeleted, 0),
|
|
19
|
+
bytesMatched: results.reduce((sum, result) => sum + result.bytesMatched, 0),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export function isTelemetryRetentionMaintenanceDue(input) {
|
|
23
|
+
if (input.state.running)
|
|
24
|
+
return false;
|
|
25
|
+
const now = input.now ?? new Date();
|
|
26
|
+
const intervalMs = input.intervalMs ?? DEFAULT_TELEMETRY_RETENTION_MAINTENANCE_INTERVAL_MS;
|
|
27
|
+
return !(input.state.lastCheckedAt && now.getTime() - input.state.lastCheckedAt < intervalMs);
|
|
28
|
+
}
|
|
29
|
+
export function maybeRunTelemetryRetentionMaintenance(input) {
|
|
30
|
+
if (!input.settings.enabled)
|
|
31
|
+
return;
|
|
32
|
+
if (input.state.running)
|
|
33
|
+
return;
|
|
34
|
+
const now = input.now ?? new Date();
|
|
35
|
+
const intervalMs = input.intervalMs ?? DEFAULT_TELEMETRY_RETENTION_MAINTENANCE_INTERVAL_MS;
|
|
36
|
+
if (input.state.lastCheckedAt && now.getTime() - input.state.lastCheckedAt < intervalMs)
|
|
37
|
+
return;
|
|
38
|
+
if (!isPersistentRetentionDue(input.settings.lastPrunedAt, now, intervalMs)) {
|
|
39
|
+
input.state.lastCheckedAt = now.getTime();
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (hasActiveRuntimeWork(input.context))
|
|
43
|
+
return;
|
|
44
|
+
input.state.lastCheckedAt = now.getTime();
|
|
45
|
+
input.state.running = true;
|
|
46
|
+
setTimeout(() => {
|
|
47
|
+
try {
|
|
48
|
+
pruneTelemetryOlderThan({ dataStore: input.dataStore, days: input.settings.days, now, apply: true });
|
|
49
|
+
input.onPruned?.(now.toISOString());
|
|
50
|
+
}
|
|
51
|
+
finally {
|
|
52
|
+
input.state.running = false;
|
|
53
|
+
}
|
|
54
|
+
}, 0).unref?.();
|
|
55
|
+
}
|
|
56
|
+
export function isPersistentRetentionDue(lastPrunedAt, now, intervalMs) {
|
|
57
|
+
if (!lastPrunedAt)
|
|
58
|
+
return true;
|
|
59
|
+
const lastPrunedMs = Date.parse(lastPrunedAt);
|
|
60
|
+
if (!Number.isFinite(lastPrunedMs))
|
|
61
|
+
return true;
|
|
62
|
+
return now.getTime() - lastPrunedMs >= intervalMs;
|
|
63
|
+
}
|
|
64
|
+
export function hasActiveRuntimeWork(context) {
|
|
65
|
+
const statuses = context.channelContext.listSessionRuntimeStatuses?.()
|
|
66
|
+
?? context.channelContext.listSessions?.().map((session) => context.channelContext.getSessionRuntimeStatus?.(session.id)).filter((status) => status !== undefined)
|
|
67
|
+
?? [];
|
|
68
|
+
return statuses.some((status) => Boolean(status?.processing || status?.streaming || (status?.queuedMessages ?? 0) > 0));
|
|
69
|
+
}
|
|
@@ -12,7 +12,8 @@ import { withWorkflowSessionKind } from "../../sessions/workflow-session-kind.js
|
|
|
12
12
|
import { CustomAgentStore, createDefaultCustomAgentStore, } from "./agent-store.js";
|
|
13
13
|
import { loadPiboModelDefaults, } from "../../core/model-defaults.js";
|
|
14
14
|
import { inspectPiboContextBuild } from "../../core/context-build.js";
|
|
15
|
-
import { loadPiboUserSettings } from "../../core/user-settings.js";
|
|
15
|
+
import { loadPiboUserSettings, updateTelemetryRetentionLastPrunedAt } from "../../core/user-settings.js";
|
|
16
|
+
import { isTelemetryRetentionMaintenanceDue, maybeRunTelemetryRetentionMaintenance } from "./telemetry-retention-service.js";
|
|
16
17
|
import { loadModelCatalog } from "./model-catalog.js";
|
|
17
18
|
import { createCustomAgentProfileDefinition } from "./agent-profiles.js";
|
|
18
19
|
import { createDefaultPiboReliabilityStore, PiboReliabilityStore } from "../../reliability/store.js";
|
|
@@ -2203,7 +2204,9 @@ function createEventStream(input) {
|
|
|
2203
2204
|
async function buildProjectsBootstrap(input) {
|
|
2204
2205
|
const sharedDefaultProject = input.state.projectService.ensureSharedDefaultProject();
|
|
2205
2206
|
const selectedProject = input.projectId ? requireSharedProject(input.state, input.webSession, input.projectId, { includeArchived: true }) : sharedDefaultProject;
|
|
2206
|
-
let storedProjectSessions = input.state.projectService
|
|
2207
|
+
let storedProjectSessions = input.state.projectService
|
|
2208
|
+
.listProjectSessions(selectedProject.id, { includeArchived: input.includeArchived })
|
|
2209
|
+
.filter((projectSession) => projectSession.workflowId === "simple-chat");
|
|
2207
2210
|
if (selectedProject.id === sharedDefaultProject.id && storedProjectSessions.length === 0) {
|
|
2208
2211
|
const session = createProjectChatSession({
|
|
2209
2212
|
state: input.state,
|
|
@@ -2215,7 +2218,7 @@ async function buildProjectsBootstrap(input) {
|
|
|
2215
2218
|
});
|
|
2216
2219
|
storedProjectSessions = [input.state.projectService.getProjectSession(session.id)];
|
|
2217
2220
|
}
|
|
2218
|
-
const projectSessions = storedProjectSessions
|
|
2221
|
+
const projectSessions = storedProjectSessions;
|
|
2219
2222
|
const rootSessions = projectSessions
|
|
2220
2223
|
.map((projectSession) => input.context.channelContext.getSession(projectSession.piboSessionId))
|
|
2221
2224
|
.filter((session) => Boolean(session));
|
|
@@ -2225,17 +2228,13 @@ async function buildProjectsBootstrap(input) {
|
|
|
2225
2228
|
indexSharedSessions(input.state.sessionQuery, sessions);
|
|
2226
2229
|
const nodes = await buildSessionNodes(sessions, input.state.sessionQuery.listSessions(), selectedProject.projectFolder, new Map(), { skipPiMetadataFallback: true });
|
|
2227
2230
|
applyProjectSessionArchiveState(nodes, new Map(projectSessions.map((projectSession) => [projectSession.piboSessionId, Boolean(projectSession.archived)])));
|
|
2228
|
-
const workflowLifecycleEvents = input.state.workflowLifecycleEventStore.listEvents({
|
|
2229
|
-
projectId: selectedProject.id,
|
|
2230
|
-
limit: 100,
|
|
2231
|
-
});
|
|
2232
2231
|
return {
|
|
2233
2232
|
identity: input.webSession.authSession.identity,
|
|
2234
2233
|
sharedDefaultProject,
|
|
2235
2234
|
project: selectedProject,
|
|
2236
2235
|
projects: listSharedProjects(input.state, input.webSession, { includeArchived: input.includeArchived }),
|
|
2237
2236
|
projectSessions,
|
|
2238
|
-
workflowLifecycleEvents,
|
|
2237
|
+
workflowLifecycleEvents: [],
|
|
2239
2238
|
...(selectedSession ? { session: selectedSession, selectedPiboSessionId: selectedSession.id } : {}),
|
|
2240
2239
|
selectedProjectId: selectedProject.id,
|
|
2241
2240
|
sessions: nodes,
|
|
@@ -2689,6 +2688,7 @@ export function createChatWebApp(options = {}) {
|
|
|
2689
2688
|
workflowTombstoneStore: new ChatWorkflowTombstoneStore(dataStore),
|
|
2690
2689
|
workflowLifecycleEventStore: new ChatWorkflowLifecycleEventStore(dataStore),
|
|
2691
2690
|
workflowPromptAssetStore: new ChatWorkflowPromptAssetStore(dataStore),
|
|
2691
|
+
telemetryRetentionMaintenance: {},
|
|
2692
2692
|
};
|
|
2693
2693
|
const requireSession = (request, context) => context.requireSession({
|
|
2694
2694
|
request,
|
|
@@ -2699,6 +2699,15 @@ export function createChatWebApp(options = {}) {
|
|
|
2699
2699
|
apiPrefix: CHAT_WEB_API_PREFIX,
|
|
2700
2700
|
async handleRequest(request, context) {
|
|
2701
2701
|
const url = new URL(request.url);
|
|
2702
|
+
if (isTelemetryRetentionMaintenanceDue({ state: state.telemetryRetentionMaintenance })) {
|
|
2703
|
+
maybeRunTelemetryRetentionMaintenance({
|
|
2704
|
+
state: state.telemetryRetentionMaintenance,
|
|
2705
|
+
dataStore: state.dataStore,
|
|
2706
|
+
settings: loadPiboUserSettings().telemetryRetention,
|
|
2707
|
+
context,
|
|
2708
|
+
onPruned: updateTelemetryRetentionLastPrunedAt,
|
|
2709
|
+
});
|
|
2710
|
+
}
|
|
2702
2711
|
ensureEventIndexing(state, context);
|
|
2703
2712
|
ensureCustomAgentProfiles(state, context);
|
|
2704
2713
|
syncChatUserSkills({
|
|
@@ -3418,6 +3427,7 @@ export function createChatWebApp(options = {}) {
|
|
|
3418
3427
|
route: settingsRoute,
|
|
3419
3428
|
request,
|
|
3420
3429
|
cwd: process.cwd(),
|
|
3430
|
+
dataStore: state.dataStore,
|
|
3421
3431
|
});
|
|
3422
3432
|
if (chatSettingsRouteInvalidatesBootstrapCatalog(settingsRoute))
|
|
3423
3433
|
invalidateBootstrapCatalogCache(state);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{C as e,K as t,N as n,P as r,U as i,_t as a,j as o,m as s,o as c,r as l,y as u}from"./dist-SVPsM5Oi.js";import{i as d,n as f,r as p}from"./dist-tGfufz3b.js";import{html as m}from"./dist-DWA7BIr3.js";var h=1,g=2,_=3,v=155,y=4,b=156;function x(e){return e>=65&&e<=90||e>=97&&e<=122}var S=new f(e=>{let t=e.pos;for(;;){let{next:n}=e;if(n<0)break;if(n==123){let n=e.peek(1);if(n==123){if(e.pos>t)break;e.acceptToken(h,2);return}else if(n==35){if(e.pos>t)break;e.acceptToken(g,2);return}else if(n==37){if(e.pos>t)break;let n=2,r=2;for(;;){let t=e.peek(n);if(t==32||t==10)++n;else if(t==35)for(++n;;){let t=e.peek(n);if(t<0||t==10)break;n++}else if(t==45&&r==2)r=++n;else{e.acceptToken(_,r);return}}}}if(e.advance(),n==10)break}e.pos>t&&e.acceptToken(v)});function C(e,t,n){return new f(r=>{let i=r.pos;for(;;){let{next:t}=r;if(t==123&&r.peek(1)==37){let t=2;for(;;t++){let e=r.peek(t);if(e!=32&&e!=10)break}let a=``;for(;;t++){let e=r.peek(t);if(!x(e))break;a+=String.fromCharCode(e)}if(a==e){if(r.pos>i)break;r.acceptToken(n,2);break}}else if(t<0)break;if(r.advance(),t==10)break}r.pos>i&&r.acceptToken(t)})}var w=C(`endraw`,b,y),T={__proto__:null,in:38,is:40,and:46,or:48,not:52,if:78,else:80,true:98,false:98,self:100,super:102,loop:104,recursive:136,scoped:160,required:162,as:256,import:260,ignore:268,missing:270,with:272,without:274,context:276},E={__proto__:null,if:112,elif:118,else:122,endif:126,for:132,endfor:140,raw:146,endraw:152,block:158,endblock:166,macro:172,endmacro:182,call:188,endcall:192,filter:198,endfilter:202,set:208,endset:212,trans:218,pluralize:222,endtrans:226,with:232,endwith:236,autoescape:242,endautoescape:246,import:254,from:258,include:266},D=p.deserialize({version:14,states:"!*dQVOPOOOOOP'#F`'#F`OeOTO'#CbOvQSO'#CdO!kOPO'#DcO!yOPO'#DnO#XOQO'#DuO#^OPO'#D{O#lOPO'#ESO#zOPO'#E[O$YOPO'#EaO$hOPO'#EfO$vOPO'#EkO%UOPO'#ErO%dOPO'#EwOOOP'#F|'#F|O%rQWO'#E|O&sO#tO'#F]OOOP'#Fq'#FqOOOP'#F_'#F_QVOPOOOOOP-E9^-E9^OOQO'#Ce'#CeO'sQSO,59OO'zQSO'#DWO(RQSO'#DXO(YQ`O'#DZOOQO'#Fr'#FrOvQSO'#CuO(aOPO'#CbOOOP'#Fd'#FdO!kOPO,59}OOOP,59},59}O(oOPO,59}O(}QWO'#E|OOOP,5:Y,5:YO)[OPO,5:YO!yOPO,5:YO)jQWO'#E|OOOQ'#Ff'#FfO)tOQO'#DxO)|OQO,5:aOOOP,5:g,5:gO#^OPO,5:gO*RQWO'#E|OOOP,5:n,5:nO#lOPO,5:nO*YQWO'#E|OOOP,5:v,5:vO#zOPO,5:vO*aQWO'#E|OOOP,5:{,5:{O$YOPO,5:{O*hQWO'#E|OOOP,5;Q,5;QO$hOPO,5;QO*oQWO'#E|OOOP,5;V,5;VO*vOPO,5;VO$vOPO,5;VO+UQWO'#E|OOOP,5;^,5;^O%UOPO,5;^O+`QWO'#E|OOOP,5;c,5;cO%dOPO,5;cO+gQWO'#E|O+nQSO,5;hOvQSO,5:OO+uQSO,5:ZO+zQSO,5:bO+uQSO,5:hO+uQSO,5:oO,PQSO,5:wO,XQpO,5:|O+uQSO,5;RO,^QSO,5;WO,fQSO,5;_OvQSO,5;dOvQSO,5;jOvQSO,5;jOvQSO,5;pOOOO'#Fk'#FkO,nO#tO,5;wOOOP-E9]-E9]O,vQ!bO,59QOvQSO,59TOvQSO,59UOvQSO,59UOvQSO,59UOvQSO,59UO,{QSO'#C}O,XQpO,59cOOQO,59q,59qOOOP1G.j1G.jOvQSO,59UO-SQSO,59UOvQSO,59UOvQSO,59UOvQSO,59nO-wQSO'#FxO.RQSO,59rO.WQSO,59tOOQO,59s,59sO.bQSO'#D[O.iQWO'#F{O.qQWO,59uO0WQSO,59aOOOP-E9b-E9bOOOP1G/i1G/iO(oOPO1G/iO(oOPO1G/iO)TQWO'#E|OvQSO,5:SO0nQSO,5:UO0sQSO,5:WOOOP1G/t1G/tO)[OPO1G/tO)mQWO'#E|O)[OPO1G/tO0xQSO,5:_OOOQ-E9d-E9dOOOP1G/{1G/{O0}QWO'#DyOOOP1G0R1G0RO1SQSO,5:lOOOP1G0Y1G0YO1[QSO,5:tOOOP1G0b1G0bO1aQSO,5:yOOOP1G0g1G0gO1fQSO,5;OOOOP1G0l1G0lO1kQSO,5;TOOOP1G0q1G0qO*vOPO1G0qO+XQWO'#E|O*vOPO1G0qOvQSO,5;YO1pQSO,5;[OOOP1G0x1G0xO1uQSO,5;aOOOP1G0}1G0}O1zQSO,5;fO2PQSO1G1SOOOP1G1S1G1SO2WQSO1G/jOOQO'#Dq'#DqO2_QSO1G/uOOOQ1G/|1G/|O2gQSO1G0SO2rQSO1G0ZO2zQSO'#EVO3SQSO1G0cO,SQSO1G0cO4fQSO'#FvOOQO'#Fv'#FvO5]QSO1G0hO5bQSO1G0mOOOP1G0r1G0rO5mQSO1G0rO5rQSO'#GOO5zQSO1G0yO6PQSO1G1OO6WQSO1G1UO6_QSO1G1UO6fQSO1G1[OOOO-E9i-E9iOOOP1G1c1G1cOOQO1G.l1G.lO6vQSO1G.oO8wQSO1G.pO:oQSO1G.pO:vQSO1G.pO<nQSO1G.pO<uQSO'#FwO>QQSO'#FrO>XQSO'#FwO>aQSO,59iOOQO1G.}1G.}O>fQSO1G.pO@aQSO1G.pOB_QSO1G.pOBfQSO1G.pOD^QSO1G/YOvQSO'#FbODeQSO,5<dOOQO1G/^1G/^ODmQSO1G/_OOQO1G/`1G/`ODuQSO,59vOvQSO'#FcOEjQWO,5<gOOQO1G/a1G/aPErQWO'#E|OOOP7+%T7+%TO(oOPO7+%TOEyQSO1G/nOOOP1G/p1G/pOOOP1G/r1G/rOOOP7+%`7+%`O)[OPO7+%`OOOP1G/y1G/yOFQQSO,5:eOOOP1G0W1G0WOFVQSO1G0WOOOP1G0`1G0`OOOP1G0e1G0eOOOP1G0j1G0jOOOP1G0o1G0oOOOP7+&]7+&]O*vOPO7+&]OF[QSO1G0tOOOP1G0v1G0vOOOP1G0{1G0{OOOP1G1Q1G1QOOOP7+&n7+&nOOOP7+%U7+%UO+uQSO'#FeOFcQSO7+%aOvQSO7+%aOOOP7+%n7+%nOFkQSO7+%nOFpQSO7+%nOOOP7+%u7+%uOFxQSO7+%uOF}QSO'#F}OGQQSO'#F}OGYQSO,5:qOOOP7+%}7+%}OG_QSO7+%}OGdQSO7+%}OOQO,59f,59fOOOP7+&S7+&SOGlQSO7+&oOOOP7+&X7+&XOvQSO7+&oOvQSO7+&^OGtQSO,5<jOvQSO,5<jOOOP7+&e7+&eOOOP7+&j7+&jO+uQSO7+&pOG|QSO7+&pOOOP7+&v7+&vOHRQSO7+&vOHWQSO7+&vOOQO7+$Z7+$ZOvQSO'#FaOH]QSO,5<cOvQSO,59jOOQO1G/T1G/TOOQO7+$[7+$[OvQSO7+$tOHeQSO,5;|OOQO-E9`-E9`OOQO7+$y7+$yOImQ`O1G/bOIwQSO'#D^OOQO,5;},5;}OOQO-E9a-E9aOOOP<<Ho<<HoOOOP7+%Y7+%YOOOP<<Hz<<HzOOOP1G0P1G0POOOP7+%r7+%rOOOP<<Iw<<IwOOOP7+&`7+&`OOQO,5<P,5<POOQO-E9c-E9cOvQSO<<H{OJOQSO<<H{OOOP<<IY<<IYOJYQSO<<IYOOOP<<Ia<<IaOvQSO,5:rO+uQSO'#FgOJ_QSO,5<iOOQO1G0]1G0]OOOP<<Ii<<IiOJgQSO<<IiOvQSO<<JZOJlQSO<<JZOJsQSO<<IxOvQSO1G2UOJ}QSO1G2UOKXQSO<<J[OK^QSO'#CeOOQO'#FT'#FTOKiQSO'#FTOKnQSO<<J[OKvQSO<<JbOK{QSO<<JbOLWQSO,5;{OLbQSO'#FrOOQO,5;{,5;{OOQO-E9_-E9_OLiQSO1G/UOM}QSO<<H`O! ]Q`O,59aODuQSO,59xO! sQSOAN>gOOOPAN>gAN>gO! }QSOAN>gOOOPAN>tAN>tO!!SQSO1G0^O!!^QSO,5<ROOQO,5<R,5<ROOQO-E9e-E9eOOOPAN?TAN?TO!!iQSOAN?uOOOPAN?uAN?uO+uQSO'#FhO!!pQSOAN?dOOOPAN?dAN?dO!!xQSO7+'pO+uQSO'#FiO!#SQSO7+'pOOOPAN?vAN?vO+uQSO,5;oOG|QSO'#FjO!#[QSOAN?vOOOPAN?|AN?|O!#dQSOAN?|OvQSO,59mO!$sQ`O1G.pO!%{Q`O1G.pO!&SQ`O1G.pO!'[Q`O1G.pO!'cQ`O'#FvO!'jQ`O1G.pO!(uQ`O1G.pO!*TQ`O1G.pO!*[Q`O1G.pO!+dQ`O1G/YO!+kQ`O1G/dOOOPG24RG24RO!+uQSOG24ROvQSO,5:sOOOPG25aG25aO!+zQSO,5<SOOQO-E9f-E9fOOOPG25OG25OO!,PQSO<<K[O!,XQSO,5<TOOQO-E9g-E9gOOQO1G1Z1G1ZOOQO,5<U,5<UOOQO-E9h-E9hOOOPG25bG25bO!,aQSOG25hO!,fQSO1G/XOOOPLD)mLD)mO!,pQSO1G0_OvQSO1G1nO!,zQSO1G1oOvQSO1G1oOOOPLD+SLD+SO!-wQ`O<<H`O!.[QSO7+'YOvQSO7+'ZO!.fQSO7+'ZO!.pQSO<<JuODuQSO'#CuODuQSO,59UODuQSO,59UODuQSO,59UODuQSO,59UO!.zQpO,59cODuQSO,59UO!/PQSO,59UODuQSO,59UODuQSO,59UODuQSO,59nO!/tQSO1G.pP!0RQSO1G/YODuQSO7+$tO!0YQ`O1G.pP!0gQ`O1G/YO-SQSO,59UPvQSO,59nO!0nQSO,59aP!3XQSO1G.pP!3`QSO1G.pP!5aQSO1G/YP!5hQSO<<H`O!/PQSO,59UPDuQSO,59nP!6_QSO1G/YP!7pQ`O1G/YO-SQSO'#CuO-SQSO,59UO-SQSO,59UO-SQSO,59UO-SQSO,59UO-SQSO,59UP-SQSO,59UP-SQSO,59UP-SQSO,59nO!7wQSO1G.pO!9xQSO1G.pO!:PQSO1G.pO!;UQSO1G.pP-SQSO7+$tO!<XQ`O,59aP!>SQ`O1G.pP!>ZQ`O1G.pP!>bQ`O1G/YP!?QQ`O<<H`O!/PQSO'#CuO!/PQSO,59UO!/PQSO,59UO!/PQSO,59UO!/PQSO,59UO!/PQSO,59UP!/PQSO,59UP!/PQSO,59UP!/PQSO,59nP!/PQSO7+$tP-SQSO,59nP!/PQSO,59nO!?zQ`O1G.pO!@RQ`O1G.pO!@fQ`O1G.pO!@yQ`O1G.p",stateData:"!Ac~O$dOS~OPROQaOR`O$aPO~O$aPOPUXQUXRUX$`UX~OekOfkOjlOpiO!RkO!SkO!TkO!UkO$gfO$ihO$njO~OPROQaORrO$aPO~OPROQaORvO$aPO~O$bwO~OPROQaOR|O$aPO~OPROQaOR!PO$aPO~OPROQaOR!SO$aPO~OPROQaOR!VO$aPO~OPROQaOR!YO$aPO~OPROQaOR!^O$aPO~OPROQaOR!aO$aPO~OPROQaOR!dO$aPO~O!X!eO!Y!fO!d!gO!k!hO!q!iO!x!jO#Q!kO#V!lO#[!mO#a!nO#h!oO#m!pO#s!qO#u!rO#y!sO~O$s!tO~OZ!wO_!yO`!zOa!{Ob!|Oc#ROd#SOg#TOh#UOl#OOp!}Ow#VO$i!xO~OV#QO~P&xO$h$lP~PvOo#ZO~PvO$m$oP~PvO$aPOPUXQUXRUX~OPROQaOR#dO$aPO~O!]#eO!_#fO!a#gO~P%rOPROQaOR#jO$aPO~O!_#fO!h#lO~P%rO$bwOS!lX~OS#oO~O!u#qO~P%rO!}#sO~P%rO#S#uO~P%rO#X#wO~P%rO#^#yO~P%rOPROQaOR#|O$aPO~O#c$OO#e$PO~P%rO#j$RO~P%rO#o$TO~P%rO!Z$VO~PvO$g$XO~O!Z$ZO~Op$^O$gfO~Om$aO~O!Z$eO$g$XO~O$g$XO!Z$rP~O$Q$nO$s!tO~O[$oO~Oo$kP~PvOekOfkOj)fOpiO!RkO!SkO!TkO!UkO$gfO$ihO$njO~Ot%PO$h$lX~P&xO$h%RO~Oo%TOt%PO~P&xO!P%UO~P&xOt%VO$m$oX~O$m%XO~OZ!wOp!}O$i!xOViagiahialiawiatia$hiaoia!Pia!Zia#tia#via#zia#|ia#}iaxia!fia~O_!yO`!zOa!{Ob!|Oc#ROd#SO~P.vO!Z%^O~O!Z%_O~O!Z%bO~O!n%cO~O!Z%dO$g$XO~O!Z%fO~O!Z%gO~O!Z%hO~O!Z%iO~O!Z%mO~O!Z%nO~O!Z%oO~O!Z%pO~P&xO!Z%qO~P&xOc%tOt%rO~O!Z%uO!r%wO!s%vO~Op$^O!Z%xO~O$g$XOo$qP~Op!}O!Z%}O~Op!}OZ$jX_$jX`$jXa$jXb$jXc$jXd$jXg$jXh$jXl$jXw$jX$i$jXt$jXe$jXf$jX$g$jXx$jX~O!Z$jXV$jX$h$jXo$jX!P$jX#t$jX#v$jX#z$jX#|$jX#}$jX!f$jX~P3[O!Z&RO~Os&UOt%rO!Z&TO~Os&VO~Os&XOt%rO~O!Z&YO~O!Z&ZO~P&xO#t&[O~P&xO#v&]O~P&xO!Z&^O#z&`O#|&_O#}&_O~P&xO$h&aO~P&xOZ!wOp!}O$i!xOV^i`^ia^ib^ic^id^ig^ih^il^iw^it^i$h^io^i!P^i!Z^i#t^i#v^i#z^i#|^i#}^ie^if^i$g^ix^i!f^i~O_^i~P6}OZ!wO_!yOp!}O$i!xOV^ia^ib^ic^id^ig^ih^il^iw^it^i$h^io^i!P^i!Z^i#t^i#v^i#z^i#|^i#}^ix^i!f^i~O`^i~P9OO`!zO~P9OOZ!wO_!yO`!zOa!{Op!}O$i!xOV^ic^id^ig^ih^il^iw^it^i$h^io^i!P^i!Z^i#t^i#v^i#z^i#|^i#}^ix^i!f^i~Ob^i~P:}Ot&bOo$kX~P&xOZ$fX_$fX`$fXa$fXb$fXc$fXd$fXg$fXh$fXl$fXo$fXp$fXt$fXw$fX$i$fX~Os&dO~P=POt&bOo$kX~Oo&eO~Ob!|O~P:}OZ!wO_)gO`)hOa)iOb)jOc)kOp!}O$i!xOV^id^ig^ih^il^iw^it^i$h^io^i!P^i!Z^i#t^i#v^i#z^i#|^i#}^ix^i!f^i~Oe&fOf&fO$gfO~P>mOZ!wO_!yO`!zOa!{Ob!|Oc#ROd#SOp!}O$i!xOV^ih^il^iw^it^i$h^io^i!P^i!Z^i#t^i#v^i#z^i#|^i#}^ix^i!f^i~Og^i~P@nOg#TO~P@nOZ!wO_!yO`!zOa!{Ob!|Oc#ROd#SOg#TOh#UOp!}O$i!xOVvilviwvitvi$hviovi!Pvi!Zvi#tvi#vvi#zvi#|vi#}vi!fvi~Ox&gO~PBmOt%PO$h$la~Oo&jOt%PO~OekOfkOj(yOpiO!RkO!SkO!TkO!UkO$gfO$ihO$njO~Ot%VO$m$oa~O!]#eO~P%rO!Z&pO~P&xO!Z&rO~O!Z&sO~O!Z&uO~P&xOc&xOt%rO~O!Z&zO~O!Z&zO!s&{O~O!Z&|O~Os&}Ot'OOo$qX~Oo'QO~O!Z'RO~Op!}O!Z'RO~Os'TOt%rO~Os'WOt%rO~O$g'ZO~O$O'_O~O#{'`O~Ot&bOo$ka~Ot$Ua$h$Uao$Ua~P&xOZ!wO_(zO`({Oa(|Ob(}Oc)POd)QOg)ROh)SOl)OOp!}Ow)TO$i!xO~Ot!Oi$m!Oi~PHrO!P'hO~P&xO!Z'jO!f'kO~P&xO!Z'lO~Ot'OOo$qa~O!Z'qO~O!Z'sO~P&xOt'tO!Z'vO~P&xOt'xO!Z$ri~P&xO!Z'zO~Ot!eX!Z!eX#tXX~O#t'{O~Ot'|O!Z'zO~O!Z(OO~O!Z(OO#|(PO#}(PO~Oo$Tat$Ta~P&xOs(QO~P=POoritri~P&xOZ!wOp!}O$i!xOVvylvywvytvy$hvyovy!Pvy!Zvy#tvy#vvy#zvy#|vy#}vyxvy!fvy~O_!yO`!zOa!{Ob!|Oc#ROd#SOg#TOh#UO~PLsOZ!wOp!}O$i!xOgiahialiatiawia$miaxia~O_(zO`({Oa(|Ob(}Oc)POd)QO~PNkO!Z(^O!f(_O~P&xO!Z(^O~Oo!zit!zi~P&xOs(`Oo$Zat$Za~O!Z(aO~P&xOt'tO!Z(dO~Ot'xO!Z$rq~P&xOt'xO!Z$rq~Ot'|O!Z(kO~O$O(lO~OZ!wOp!}O$i!xO`^ia^ib^ic^id^ig^ih^il^it^iw^i$m^ie^if^i$g^ix^i~O_^i~P!#iOZ!wO_(zOp!}O$i!xOa^ib^ic^id^ig^ih^il^it^iw^i$m^ix^i~O`^i~P!$zO`({O~P!$zOZ!wO_(zO`({Oa(|Op!}O$i!xOc^id^ig^ih^il^it^iw^i$m^ix^i~Ob^i~P!&ZO$m$jX~P3[Ob(}O~P!&ZOZ!wO_)zO`){Oa)|Ob)}Oc*OOp!}O$i!xOd^ig^ih^il^it^iw^i$m^ix^i~Oe&fOf&fO$gfO~P!'qOZ!wO_(zO`({Oa(|Ob(}Oc)POd)QOp!}O$i!xOh^il^it^iw^i$m^ix^i~Og^i~P!)SOg)RO~P!)SOZ!wO_(zO`({Oa(|Ob(}Oc)POd)QOg)ROh)SOp!}O$i!xOlvitviwvi$mvi~Ox)WO~P!*cOt!Qi$m!Qi~PHrO!Z(nO~Os(pO~Ot'xO!Z$ry~Os(rOt%rO~O!Z(sO~Oouitui~P&xOo!{it!{i~P&xOs(vOt%rO~OZ!wO_(zO`({Oa(|Ob(}Oc)POd)QOg)ROh)SOp!}O$i!xO~Olvytvywvy$mvyxvy~P!-SOt$[q!Z$[q~P&xOt$]q!Z$]q~P&xOt$]y!Z$]y~P&xOm(VO~OekOfkOj)yOpiO!RkO!SkO!TkO!UkO$gfO$ihO$njO~Oe^if^i$g^i~P>mOxvi~PBmOe^if^i$g^i~P!'qOxvi~P!*cO_)gO`)hOa)iOb)jOc)kOd)ZOeiafia$gia~P.vOZ!wO_)gO`)hOa)iOb)jOc)kOd)ZOp!}O$i!xOV^ie^if^ih^il^iw^i$g^it^i$h^io^i!P^i!Z^i#t^i#v^i#z^i#|^i#}^ix^i!f^i~Og^i~P!1_Og)lO~P!1_OZ!wO_)gO`)hOa)iOb)jOc)kOd)ZOg)lOh)mOp!}O$i!xOVvievifvilviwvi$gvitvi$hviovi!Pvi!Zvi#tvi#vvi#zvi#|vi#}vi!fvi~Ox)sO~P!3gO_)gO`)hOa)iOb)jOc)kOd)ZOg)lOh)mOevyfvy$gvy~PLsOxvi~P!3gOZ!wO_)zO`){Oa)|Ob)}Oc*OOd)bOg*POh*QOp!}O$i!xOevifvilvitviwvi$gvi$mvi~Oxvi~P!6fO_)gO~P6}OZ!wO_)gO`)hOp!}O$i!xOV^ib^ic^id^ie^if^ig^ih^il^iw^i$g^it^i$h^io^i!P^i!Z^i#t^i#v^i#z^i#|^i#}^ix^i!f^i~Oa^i~P!8OOa)iO~P!8OOZ!wOp!}O$i!xOc^id^ie^if^ig^ih^il^iw^i$g^it^ix^i~O_)gO`)hOa)iOb)jOV^i$h^io^i!P^i!Z^i#t^i#v^i#z^i#|^i#}^i!f^i~P!:WO_)zO`){Oa)|Ob)}Oc*OOd)bOeiafia$gia~PNkOZ!wO_)zO`){Oa)|Ob)}Oc*OOd)bOp!}O$i!xOe^if^ih^il^it^iw^i$g^i$m^ix^i~Og^i~P!<xOg*PO~P!<xOx*SO~P!6fOZ!wO_)zO`){Oa)|Ob)}Op!}O$i!xO~Oc*OOd)bOg*POh*QOevyfvylvytvywvy$gvy$mvyxvy~P!>iO_)zO~P!#iO_)zO`){Oa^ib^i$m^i~P!:WO_)zO`){Oa)|Ob^i$m^i~P!:WO_)zO`){Oa)|Ob)}O$m^i~P!:WOfaZa~",goto:"Cy$sPPPPPP$tP$t%j'sPP's'sPPPPPPPPPP'sP'sPP)jPP)o+nPP+q'sPP's's's's's+tP+wPPPP+z,pPPP-fP-jP-vP+z.UP.zP/zP+z0YP1O1RP+z1UPPP1zP+z2QP2v2|3P3SP+z3YP4OP+z4UP4zP+z5QP5vP+z5|P6rP6xP+z7WP7|P+z8SP8xP$t$t$tPPPP9O$tPPPPPP$tP9U:j;f;m;w;}<T<g<m<t<z=U=[PPPPP=b>YPPPCcCjCmPPCp$tCsCv!gbOSTVWXYZ[]^doqtu{!O!R!U!X![!]!`!c#b#c#i#k#{#}%[%a%k$dkRhijl!e!f!p!q!r!s!x!y!z!{!|#R#S#T#U#V#e$O%P%U%V%t&U&V&X&d&g&x&}'T'W'h(Q(`(p(r(v(y(z({(|(})P)Q)R)S)T)W)Z)[)b)c)f)g)h)i)j)k)l)m)n)s)y)z){)|)}*O*P*Q*R*S*T*UQ$_!kQ$v!}Q&P$`S&f${(XS']&]'|R'b&b$ikRhijl!e!f!p!q!r!s!x!y!z!{!|!}#R#S#T#U#V#e$O%P%U%V%t&U&V&X&b&d&g&x&}'T'W'h(Q(`(p(r(v(y(z({(|(})P)Q)R)S)T)W)Z)[)b)c)f)g)h)i)j)k)l)m)n)s)y)z){)|)}*O*P*Q*R*S*T*UV$b!l#O)O$d#Pg#W#Y#[#_$U$W$i$j$k$l$p$q$r$s$t$u$z${$|$}%O%]%l&h&k&l&y'U'V'X'a'e'f'g'i'm'r'w(R(S(T(U(W(X(Y(Z([(](m(o(t(u(w(x)U)V)X)Y)])^)_)`)a)d)e)o)p)q)r)t)u)v)w)x*V*W*X*YQ&O$_S&Q$a(VR'S&PR$w!}R'c&bR#]jR&m%V!g_OSTVWXYZ[]^doqtu{!O!R!U!X![!]!`!c#b#c#i#k#{#}%[%a%k!gSOSTVWXYZ[]^doqtu{!O!R!U!X![!]!`!c#b#c#i#k#{#}%[%a%kTnSoQqSQtTQ#boR#kuQpSS#aoqS%Z#b#cR&o%[!gTOSTVWXYZ[]^doqtu{!O!R!U!X![!]!`!c#b#c#i#k#{#}%[%a%kQ$Y!gQ$[!iQ$]!jQ$d!mQ$f!nQ$g!oQ%e#qQ%z$^Q&v%rQ'Y&[S'[&]'|Q'n'OQ(b'tQ(f'xR(h'{QsTS#htuS%`#i#kR&q%a!gUOSTVWXYZ[]^doqtu{!O!R!U!X![!]!`!c#b#c#i#k#{#}%[%a%kRyUR#ny!gVOSTVWXYZ[]^doqtu{!O!R!U!X![!]!`!c#b#c#i#k#{#}%[%a%kQzVR#p{!gWOSTVWXYZ[]^doqtu{!O!R!U!X![!]!`!c#b#c#i#k#{#}%[%a%kQ$`!kR%y$]R%{$^R'o'OQ}WR#r!O!gXOSTVWXYZ[]^doqtu{!O!R!U!X![!]!`!c#b#c#i#k#{#}%[%a%kQ!QXR#t!R!gYOSTVWXYZ[]^doqtu{!O!R!U!X![!]!`!c#b#c#i#k#{#}%[%a%kQ!TYR#v!U!gZOSTVWXYZ[]^doqtu{!O!R!U!X![!]!`!c#b#c#i#k#{#}%[%a%kQ!WZR#x!X!g[OSTVWXYZ[]^doqtu{!O!R!U!X![!]!`!c#b#c#i#k#{#}%[%a%kQ![[R#}!]Q!Z[S#z![!]S%j#{#}R&t%k!g]OSTVWXYZ[]^doqtu{!O!R!U!X![!]!`!c#b#c#i#k#{#}%[%a%kQ!_]R$Q!`!g^OSTVWXYZ[]^doqtu{!O!R!U!X![!]!`!c#b#c#i#k#{#}%[%a%kQ!b^R$S!cQ'^&]R(i'|QdOQuTQ{VQ!OWQ!RXQ!UYQ!XZQ!][Q!`]Q!c^p!vdu{!O!R!U!X!]!`!c#c#i#{%[%a%kQ#cqQ#itQ#{![Q%[#bQ%a#kR%k#}SQOdSeQm!cmSTVWXYZ[]^oqtu{!O!R!U!X![!]!`!c#b#c#i#k#{#}%[%a%kS&c$u$wR'd&cQ%Q#WQ%S#YT&i%Q%SQ%W#]R&n%WQoSR#`oQ%s$YQ&S$dQ&W$gW&w%s&S&W(qR(q(fQxUR#mxS'P%z%{R'p'PQ'u'VR(c'uQ'y'XQ(e'wT(g'y(eQ'}'^R(j'}Q!uaR$m!u!bcOTVWXYZ[]^dqtu{!O!R!U!X![!]!`!c#b#c#i#k#{#}%[%a%kTnSoQgRQ#WhQ#YiQ#[jQ#_lQ$U!eQ$W!fQ$i!pQ$j!qQ$k!rQ$l!sQ$p!xS$q!y)gQ$r!zQ$s!{Q$t!|Q$u!}Q$z#RQ${#SQ$|#TQ$}#UQ%O#VQ%]#eQ%l$OQ&h%PQ&k%UQ&l%VQ&y%tQ'U&UQ'V&VQ'X&XQ'a&bQ'e&dQ'f&gQ'g(yQ'i&xQ'm&}Q'r'TQ'w'WS(R(z)zQ(S({Q(T(|Q(U(}Q(W)PQ(X)QQ(Y)RQ(Z)SQ([)TQ(]'hQ(m(QQ(o(`Q(t)WQ(u(pQ(w(rQ(x(vQ)U)ZQ)V)[Q)X)bQ)Y)cQ)])fQ)^)lQ)_)mQ)`)nQ)a)sQ)d*TQ)e*UQ)o)hQ)p)iQ)q)jQ)r)kQ)t)yQ)u*PQ)v*QQ)w*RQ)x*SQ*V){Q*W)|Q*X)}R*Y*OQ$c!lT$y#O)OR$x!}R#XhR#^jR%|$^R$h!o",nodeNames:`⚠ {{ {# {% {% Template Text }} Interpolation VariableName MemberExpression . PropertyName SubscriptExpression BinaryExpression ConcatOp ArithOp ArithOp CompareOp in is StringLiteral NumberLiteral and or NotExpression not FilterExpression FilterOp FilterName FilterCall ) ( ArgumentList NamedArgument AssignOp , NamedArgument ConditionalExpression if else CallExpression ArrayExpression TupleExpression ParenthesizedExpression DictExpression Entry : Entry BooleanLiteral self super loop IfStatement Tag TagName if %} Tag elif Tag else EndTag endif ForStatement Tag for Definition recursive EndTag endfor RawStatement Tag raw RawText EndTag endraw BlockStatement Tag block scoped required EndTag endblock MacroStatement Tag macro ParamList OptionalParameter OptionalParameter EndTag endmacro CallStatement Tag call EndTag endcall FilterStatement Tag filter EndTag endfilter SetStatement Tag set EndTag endset TransStatement Tag trans Tag pluralize EndTag endtrans WithStatement Tag with EndTag endwith AutoescapeStatement Tag autoescape EndTag endautoescape Tag Tag Tag import as from import ImportItem Tag include ignore missing with without context Comment #}`,maxTerm:173,nodeProps:[[`closedBy`,1,`}}`,2,`#}`,-2,3,4,`%}`,32,`)`],[`openedBy`,7,`{{`,31,`(`,57,`{%`,140,`{#`],[`group`,-18,9,10,13,14,21,22,25,27,38,41,42,43,44,45,49,50,51,52,`Expression`,-11,53,64,71,77,84,92,97,102,107,114,119,`Statement`]],skippedNodes:[0],repeatNodeCount:13,tokenData:".|~RqXY#YYZ#Y]^#Ypq#Yqr#krs#vuv&nwx&{xy)nyz)sz{)x{|*V|}+|}!O,R!O!P,g!P!Q,o!Q![+h![!],w!^!_,|!_!`-U!`!a,|!c!}-^!}#O.U#P#Q.Z#R#S-^#T#o-^#o#p.`#p#q.e#q#r.j#r#s.w%W;'S-^;'S;:j.O<%lO-^~#_S$d~XY#YYZ#Y]^#Ypq#Y~#nP!_!`#q~#vOb~~#yWOY#vZr#vrs$cs#O#v#O#P$h#P;'S#v;'S;=`%x<%lO#v~$hOe~~$kYOY#vYZ#vZr#vrs%Zs#O#v#O#P$h#P;'S#v;'S;=`&O;=`<%l#v<%lO#v~%`We~OY#vZr#vrs$cs#O#v#O#P$h#P;'S#v;'S;=`%x<%lO#v~%{P;=`<%l#v~&RXOY#vZr#vrs$cs#O#v#O#P$h#P;'S#v;'S;=`%x;=`<%l#v<%lO#v~&sP`~#q#r&v~&{O!Z~~'OWOY&{Zw&{wx$cx#O&{#O#P'h#P;'S&{;'S;=`(x<%lO&{~'kYOY&{YZ&{Zw&{wx(Zx#O&{#O#P'h#P;'S&{;'S;=`)O;=`<%l&{<%lO&{~(`We~OY&{Zw&{wx$cx#O&{#O#P'h#P;'S&{;'S;=`(x<%lO&{~({P;=`<%l&{~)RXOY&{Zw&{wx$cx#O&{#O#P'h#P;'S&{;'S;=`(x;=`<%l&{<%lO&{~)sOp~~)xOo~~)}P`~z{*Q~*VO`~~*[Qa~!O!P*b!Q![+h~*eP!Q![*h~*mSf~!Q![*h!g!h*y#R#S*h#X#Y*y~*|R{|+V}!O+V!Q![+]~+YP!Q![+]~+bQf~!Q![+]#R#S+]~+mTf~!O!P*b!Q![+h!g!h*y#R#S+h#X#Y*y~,ROt~~,WRa~uv,a!O!P*b!Q![+h~,dP#q#r&v~,lPZ~!Q![*h~,tP`~!P!Q*Q~,|O!P~~-RPb~!_!`#q~-ZPs~!_!`#q!`-iVm`[p!XS$gY!Q![-^!c!}-^#R#S-^#T#o-^%W;'S-^;'S;:j.O<%lO-^!`.RP;=`<%l-^~.ZO$i~~.`O$h~~.eO$n~~.jOl~^.oP$m[#q#r.rQ.wOVQ~.|O_~",tokenizers:[S,w,1,2,3,4,5,new d(`b~RPstU~XP#q#r[~aO$Q~~`,17,173)],topRules:{Template:[0,5]},specialized:[{term:161,get:e=>T[e]||-1},{term:55,get:e=>E[e]||-1}],tokenPrec:3602});function O(e,t){return e.split(` `).map(e=>({label:e,type:t}))}var k=O(`abs attr batch capitalize center default dictsort escape filesizeformat first float forceescape format groupby indent int items join last length list lower map max min pprint random reject rejectattr replace reverse round safe select selectattr slice sort string striptags sum title tojson trim truncate unique upper urlencode urlize wordcount wordwrap xmlattr`,`function`),A=O(`boolean callable defined divisibleby eq escaped even filter float ge gt in integer iterable le lower lt mapping ne none number odd sameas sequence string test undefined upper range lipsum dict joiner namespace`,`function`),j=O(`loop super self true false varargs kwargs caller name arguments catch_kwargs catch_varargs caller`,`keyword`),M=A.concat(j),N=O(`raw endraw filter endfilter trans pluralize endtrans with endwith autoescape endautoescape if elif else endif for endfor call endcall block endblock set endset macro endmacro import include break continue debug do extends`,`keyword`);function P(e){let{state:t,pos:n}=e,r=o(t).resolveInner(n,-1).enterUnfinishedNodesBefore(n),i=r.childBefore(n)?.name||r.name;if(r.name==`FilterName`)return{type:`filter`,node:r};if(e.explicit&&(i==`FilterOp`||i==`filter`))return{type:`filter`};if(r.name==`TagName`)return{type:`tag`,node:r};if(e.explicit&&i==`{%`)return{type:`tag`};if(r.name==`PropertyName`&&r.parent.name==`MemberExpression`)return{type:`prop`,node:r,target:r.parent};if(r.name==`.`&&r.parent.name==`MemberExpression`)return{type:`prop`,target:r.parent};if(r.name==`MemberExpression`&&i==`.`)return{type:`prop`,target:r};if(r.name==`VariableName`)return{type:`expr`,from:r.from};if(r.name==`Comment`||r.name==`StringLiteral`||r.name==`NumberLiteral`)return null;let a=e.matchBefore(/[\w\u00c0-\uffff]+$/);return a?{type:`expr`,from:a.from}:e.explicit?{type:`expr`}:null}function F(e,t,n,r){let i=[];for(;;){let n=t.getChild(`Expression`);if(!n)return[];if(n.name==`VariableName`){i.unshift(e.sliceDoc(n.from,n.to));break}else if(n.name==`MemberExpression`){let r=n.getChild(`PropertyName`);r&&i.unshift(e.sliceDoc(r.from,r.to)),t=n}else return[]}return r(i,e,n)}function I(e={}){let t=e.tags?e.tags.concat(N):N,n=e.variables?e.variables.concat(M):M,{properties:r}=e;return e=>{let i=P(e);if(!i)return null;let a=i.from??(i.node?i.node.from:e.pos),o;return o=i.type==`filter`?k:i.type==`tag`?t:i.type==`expr`?n:r?F(e.state,i.target,e,r):[],o.length?{options:o,from:a,validFor:/^[\w\u00c0-\uffff]*$/}:null}}var L=t.inputHandler.of((e,t,n,r)=>r!=`%`||t!=n||e.state.doc.sliceString(t-1,n+1)!=`{}`?!1:(e.dispatch(e.state.changeByRange(e=>({changes:{from:e.from,to:e.to,insert:`%%`},range:a.cursor(e.from+1)})),{scrollIntoView:!0,userEvent:`input.type`}),!0));function R(e){return t=>{let n=e.test(t.textAfter);return t.lineIndent(t.node.from)+(n?0:t.unit)}}var z=l.define({name:`jinja`,parser:D.configure({props:[n({"TagName raw endraw filter endfilter as trans pluralize endtrans with endwith autoescape endautoescape":r.keyword,"required scoped recursive with without context ignore missing":r.modifier,self:r.self,"loop super":r.standard(r.variableName),"if elif else endif for endfor call endcall":r.controlKeyword,"block endblock set endset macro endmacro import from include":r.definitionKeyword,"Comment/...":r.blockComment,VariableName:r.variableName,Definition:r.definition(r.variableName),PropertyName:r.propertyName,FilterName:r.special(r.variableName),ArithOp:r.arithmeticOperator,AssignOp:r.definitionOperator,"not and or":r.logicOperator,CompareOp:r.compareOperator,"in is":r.operatorKeyword,"FilterOp ConcatOp":r.operator,StringLiteral:r.string,NumberLiteral:r.number,BooleanLiteral:r.bool,"{% %} {# #} {{ }} { }":r.brace,"( )":r.paren,".":r.derefOperator,": , .":r.punctuation}),e.add({Tag:s({closing:`%}`}),"IfStatement ForStatement":R(/^\s*(\{%-?\s*)?(endif|endfor|else|elif)\b/),Statement:R(/^\s*(\{%-?\s*)?end\w/)}),u.add({"Statement Comment"(e){let t=e.firstChild,n=e.lastChild;return!t||t.name!=`Tag`&&t.name!=`{#`?null:{from:t.to,to:n.name==`EndTag`||n.name==`#}`?n.from:e.to}}})]}),languageData:{indentOnInput:/^\s*{%-?\s*(?:end|elif|else)$/}}),B=m();function V(e){return z.configure({wrap:i(t=>t.type.isTop?{parser:e.parser,overlay:e=>e.name==`Text`||e.name==`RawText`}:null)},`jinja`)}var H=V(B.language);function U(e={}){let t=e.base||B,n=t.language==B.language?H:V(t.language);return new c(n,[t.support,n.data.of({autocomplete:I(e)}),t.language.data.of({closeBrackets:{brackets:[`{`]}}),L])}export{U as jinja};
|
|
1
|
+
import{C as e,K as t,N as n,P as r,U as i,_t as a,j as o,m as s,o as c,r as l,y as u}from"./dist-SVPsM5Oi.js";import{i as d,n as f,r as p}from"./dist-tGfufz3b.js";import{html as m}from"./dist-D87he9he.js";var h=1,g=2,_=3,v=155,y=4,b=156;function x(e){return e>=65&&e<=90||e>=97&&e<=122}var S=new f(e=>{let t=e.pos;for(;;){let{next:n}=e;if(n<0)break;if(n==123){let n=e.peek(1);if(n==123){if(e.pos>t)break;e.acceptToken(h,2);return}else if(n==35){if(e.pos>t)break;e.acceptToken(g,2);return}else if(n==37){if(e.pos>t)break;let n=2,r=2;for(;;){let t=e.peek(n);if(t==32||t==10)++n;else if(t==35)for(++n;;){let t=e.peek(n);if(t<0||t==10)break;n++}else if(t==45&&r==2)r=++n;else{e.acceptToken(_,r);return}}}}if(e.advance(),n==10)break}e.pos>t&&e.acceptToken(v)});function C(e,t,n){return new f(r=>{let i=r.pos;for(;;){let{next:t}=r;if(t==123&&r.peek(1)==37){let t=2;for(;;t++){let e=r.peek(t);if(e!=32&&e!=10)break}let a=``;for(;;t++){let e=r.peek(t);if(!x(e))break;a+=String.fromCharCode(e)}if(a==e){if(r.pos>i)break;r.acceptToken(n,2);break}}else if(t<0)break;if(r.advance(),t==10)break}r.pos>i&&r.acceptToken(t)})}var w=C(`endraw`,b,y),T={__proto__:null,in:38,is:40,and:46,or:48,not:52,if:78,else:80,true:98,false:98,self:100,super:102,loop:104,recursive:136,scoped:160,required:162,as:256,import:260,ignore:268,missing:270,with:272,without:274,context:276},E={__proto__:null,if:112,elif:118,else:122,endif:126,for:132,endfor:140,raw:146,endraw:152,block:158,endblock:166,macro:172,endmacro:182,call:188,endcall:192,filter:198,endfilter:202,set:208,endset:212,trans:218,pluralize:222,endtrans:226,with:232,endwith:236,autoescape:242,endautoescape:246,import:254,from:258,include:266},D=p.deserialize({version:14,states:"!*dQVOPOOOOOP'#F`'#F`OeOTO'#CbOvQSO'#CdO!kOPO'#DcO!yOPO'#DnO#XOQO'#DuO#^OPO'#D{O#lOPO'#ESO#zOPO'#E[O$YOPO'#EaO$hOPO'#EfO$vOPO'#EkO%UOPO'#ErO%dOPO'#EwOOOP'#F|'#F|O%rQWO'#E|O&sO#tO'#F]OOOP'#Fq'#FqOOOP'#F_'#F_QVOPOOOOOP-E9^-E9^OOQO'#Ce'#CeO'sQSO,59OO'zQSO'#DWO(RQSO'#DXO(YQ`O'#DZOOQO'#Fr'#FrOvQSO'#CuO(aOPO'#CbOOOP'#Fd'#FdO!kOPO,59}OOOP,59},59}O(oOPO,59}O(}QWO'#E|OOOP,5:Y,5:YO)[OPO,5:YO!yOPO,5:YO)jQWO'#E|OOOQ'#Ff'#FfO)tOQO'#DxO)|OQO,5:aOOOP,5:g,5:gO#^OPO,5:gO*RQWO'#E|OOOP,5:n,5:nO#lOPO,5:nO*YQWO'#E|OOOP,5:v,5:vO#zOPO,5:vO*aQWO'#E|OOOP,5:{,5:{O$YOPO,5:{O*hQWO'#E|OOOP,5;Q,5;QO$hOPO,5;QO*oQWO'#E|OOOP,5;V,5;VO*vOPO,5;VO$vOPO,5;VO+UQWO'#E|OOOP,5;^,5;^O%UOPO,5;^O+`QWO'#E|OOOP,5;c,5;cO%dOPO,5;cO+gQWO'#E|O+nQSO,5;hOvQSO,5:OO+uQSO,5:ZO+zQSO,5:bO+uQSO,5:hO+uQSO,5:oO,PQSO,5:wO,XQpO,5:|O+uQSO,5;RO,^QSO,5;WO,fQSO,5;_OvQSO,5;dOvQSO,5;jOvQSO,5;jOvQSO,5;pOOOO'#Fk'#FkO,nO#tO,5;wOOOP-E9]-E9]O,vQ!bO,59QOvQSO,59TOvQSO,59UOvQSO,59UOvQSO,59UOvQSO,59UO,{QSO'#C}O,XQpO,59cOOQO,59q,59qOOOP1G.j1G.jOvQSO,59UO-SQSO,59UOvQSO,59UOvQSO,59UOvQSO,59nO-wQSO'#FxO.RQSO,59rO.WQSO,59tOOQO,59s,59sO.bQSO'#D[O.iQWO'#F{O.qQWO,59uO0WQSO,59aOOOP-E9b-E9bOOOP1G/i1G/iO(oOPO1G/iO(oOPO1G/iO)TQWO'#E|OvQSO,5:SO0nQSO,5:UO0sQSO,5:WOOOP1G/t1G/tO)[OPO1G/tO)mQWO'#E|O)[OPO1G/tO0xQSO,5:_OOOQ-E9d-E9dOOOP1G/{1G/{O0}QWO'#DyOOOP1G0R1G0RO1SQSO,5:lOOOP1G0Y1G0YO1[QSO,5:tOOOP1G0b1G0bO1aQSO,5:yOOOP1G0g1G0gO1fQSO,5;OOOOP1G0l1G0lO1kQSO,5;TOOOP1G0q1G0qO*vOPO1G0qO+XQWO'#E|O*vOPO1G0qOvQSO,5;YO1pQSO,5;[OOOP1G0x1G0xO1uQSO,5;aOOOP1G0}1G0}O1zQSO,5;fO2PQSO1G1SOOOP1G1S1G1SO2WQSO1G/jOOQO'#Dq'#DqO2_QSO1G/uOOOQ1G/|1G/|O2gQSO1G0SO2rQSO1G0ZO2zQSO'#EVO3SQSO1G0cO,SQSO1G0cO4fQSO'#FvOOQO'#Fv'#FvO5]QSO1G0hO5bQSO1G0mOOOP1G0r1G0rO5mQSO1G0rO5rQSO'#GOO5zQSO1G0yO6PQSO1G1OO6WQSO1G1UO6_QSO1G1UO6fQSO1G1[OOOO-E9i-E9iOOOP1G1c1G1cOOQO1G.l1G.lO6vQSO1G.oO8wQSO1G.pO:oQSO1G.pO:vQSO1G.pO<nQSO1G.pO<uQSO'#FwO>QQSO'#FrO>XQSO'#FwO>aQSO,59iOOQO1G.}1G.}O>fQSO1G.pO@aQSO1G.pOB_QSO1G.pOBfQSO1G.pOD^QSO1G/YOvQSO'#FbODeQSO,5<dOOQO1G/^1G/^ODmQSO1G/_OOQO1G/`1G/`ODuQSO,59vOvQSO'#FcOEjQWO,5<gOOQO1G/a1G/aPErQWO'#E|OOOP7+%T7+%TO(oOPO7+%TOEyQSO1G/nOOOP1G/p1G/pOOOP1G/r1G/rOOOP7+%`7+%`O)[OPO7+%`OOOP1G/y1G/yOFQQSO,5:eOOOP1G0W1G0WOFVQSO1G0WOOOP1G0`1G0`OOOP1G0e1G0eOOOP1G0j1G0jOOOP1G0o1G0oOOOP7+&]7+&]O*vOPO7+&]OF[QSO1G0tOOOP1G0v1G0vOOOP1G0{1G0{OOOP1G1Q1G1QOOOP7+&n7+&nOOOP7+%U7+%UO+uQSO'#FeOFcQSO7+%aOvQSO7+%aOOOP7+%n7+%nOFkQSO7+%nOFpQSO7+%nOOOP7+%u7+%uOFxQSO7+%uOF}QSO'#F}OGQQSO'#F}OGYQSO,5:qOOOP7+%}7+%}OG_QSO7+%}OGdQSO7+%}OOQO,59f,59fOOOP7+&S7+&SOGlQSO7+&oOOOP7+&X7+&XOvQSO7+&oOvQSO7+&^OGtQSO,5<jOvQSO,5<jOOOP7+&e7+&eOOOP7+&j7+&jO+uQSO7+&pOG|QSO7+&pOOOP7+&v7+&vOHRQSO7+&vOHWQSO7+&vOOQO7+$Z7+$ZOvQSO'#FaOH]QSO,5<cOvQSO,59jOOQO1G/T1G/TOOQO7+$[7+$[OvQSO7+$tOHeQSO,5;|OOQO-E9`-E9`OOQO7+$y7+$yOImQ`O1G/bOIwQSO'#D^OOQO,5;},5;}OOQO-E9a-E9aOOOP<<Ho<<HoOOOP7+%Y7+%YOOOP<<Hz<<HzOOOP1G0P1G0POOOP7+%r7+%rOOOP<<Iw<<IwOOOP7+&`7+&`OOQO,5<P,5<POOQO-E9c-E9cOvQSO<<H{OJOQSO<<H{OOOP<<IY<<IYOJYQSO<<IYOOOP<<Ia<<IaOvQSO,5:rO+uQSO'#FgOJ_QSO,5<iOOQO1G0]1G0]OOOP<<Ii<<IiOJgQSO<<IiOvQSO<<JZOJlQSO<<JZOJsQSO<<IxOvQSO1G2UOJ}QSO1G2UOKXQSO<<J[OK^QSO'#CeOOQO'#FT'#FTOKiQSO'#FTOKnQSO<<J[OKvQSO<<JbOK{QSO<<JbOLWQSO,5;{OLbQSO'#FrOOQO,5;{,5;{OOQO-E9_-E9_OLiQSO1G/UOM}QSO<<H`O! ]Q`O,59aODuQSO,59xO! sQSOAN>gOOOPAN>gAN>gO! }QSOAN>gOOOPAN>tAN>tO!!SQSO1G0^O!!^QSO,5<ROOQO,5<R,5<ROOQO-E9e-E9eOOOPAN?TAN?TO!!iQSOAN?uOOOPAN?uAN?uO+uQSO'#FhO!!pQSOAN?dOOOPAN?dAN?dO!!xQSO7+'pO+uQSO'#FiO!#SQSO7+'pOOOPAN?vAN?vO+uQSO,5;oOG|QSO'#FjO!#[QSOAN?vOOOPAN?|AN?|O!#dQSOAN?|OvQSO,59mO!$sQ`O1G.pO!%{Q`O1G.pO!&SQ`O1G.pO!'[Q`O1G.pO!'cQ`O'#FvO!'jQ`O1G.pO!(uQ`O1G.pO!*TQ`O1G.pO!*[Q`O1G.pO!+dQ`O1G/YO!+kQ`O1G/dOOOPG24RG24RO!+uQSOG24ROvQSO,5:sOOOPG25aG25aO!+zQSO,5<SOOQO-E9f-E9fOOOPG25OG25OO!,PQSO<<K[O!,XQSO,5<TOOQO-E9g-E9gOOQO1G1Z1G1ZOOQO,5<U,5<UOOQO-E9h-E9hOOOPG25bG25bO!,aQSOG25hO!,fQSO1G/XOOOPLD)mLD)mO!,pQSO1G0_OvQSO1G1nO!,zQSO1G1oOvQSO1G1oOOOPLD+SLD+SO!-wQ`O<<H`O!.[QSO7+'YOvQSO7+'ZO!.fQSO7+'ZO!.pQSO<<JuODuQSO'#CuODuQSO,59UODuQSO,59UODuQSO,59UODuQSO,59UO!.zQpO,59cODuQSO,59UO!/PQSO,59UODuQSO,59UODuQSO,59UODuQSO,59nO!/tQSO1G.pP!0RQSO1G/YODuQSO7+$tO!0YQ`O1G.pP!0gQ`O1G/YO-SQSO,59UPvQSO,59nO!0nQSO,59aP!3XQSO1G.pP!3`QSO1G.pP!5aQSO1G/YP!5hQSO<<H`O!/PQSO,59UPDuQSO,59nP!6_QSO1G/YP!7pQ`O1G/YO-SQSO'#CuO-SQSO,59UO-SQSO,59UO-SQSO,59UO-SQSO,59UO-SQSO,59UP-SQSO,59UP-SQSO,59UP-SQSO,59nO!7wQSO1G.pO!9xQSO1G.pO!:PQSO1G.pO!;UQSO1G.pP-SQSO7+$tO!<XQ`O,59aP!>SQ`O1G.pP!>ZQ`O1G.pP!>bQ`O1G/YP!?QQ`O<<H`O!/PQSO'#CuO!/PQSO,59UO!/PQSO,59UO!/PQSO,59UO!/PQSO,59UO!/PQSO,59UP!/PQSO,59UP!/PQSO,59UP!/PQSO,59nP!/PQSO7+$tP-SQSO,59nP!/PQSO,59nO!?zQ`O1G.pO!@RQ`O1G.pO!@fQ`O1G.pO!@yQ`O1G.p",stateData:"!Ac~O$dOS~OPROQaOR`O$aPO~O$aPOPUXQUXRUX$`UX~OekOfkOjlOpiO!RkO!SkO!TkO!UkO$gfO$ihO$njO~OPROQaORrO$aPO~OPROQaORvO$aPO~O$bwO~OPROQaOR|O$aPO~OPROQaOR!PO$aPO~OPROQaOR!SO$aPO~OPROQaOR!VO$aPO~OPROQaOR!YO$aPO~OPROQaOR!^O$aPO~OPROQaOR!aO$aPO~OPROQaOR!dO$aPO~O!X!eO!Y!fO!d!gO!k!hO!q!iO!x!jO#Q!kO#V!lO#[!mO#a!nO#h!oO#m!pO#s!qO#u!rO#y!sO~O$s!tO~OZ!wO_!yO`!zOa!{Ob!|Oc#ROd#SOg#TOh#UOl#OOp!}Ow#VO$i!xO~OV#QO~P&xO$h$lP~PvOo#ZO~PvO$m$oP~PvO$aPOPUXQUXRUX~OPROQaOR#dO$aPO~O!]#eO!_#fO!a#gO~P%rOPROQaOR#jO$aPO~O!_#fO!h#lO~P%rO$bwOS!lX~OS#oO~O!u#qO~P%rO!}#sO~P%rO#S#uO~P%rO#X#wO~P%rO#^#yO~P%rOPROQaOR#|O$aPO~O#c$OO#e$PO~P%rO#j$RO~P%rO#o$TO~P%rO!Z$VO~PvO$g$XO~O!Z$ZO~Op$^O$gfO~Om$aO~O!Z$eO$g$XO~O$g$XO!Z$rP~O$Q$nO$s!tO~O[$oO~Oo$kP~PvOekOfkOj)fOpiO!RkO!SkO!TkO!UkO$gfO$ihO$njO~Ot%PO$h$lX~P&xO$h%RO~Oo%TOt%PO~P&xO!P%UO~P&xOt%VO$m$oX~O$m%XO~OZ!wOp!}O$i!xOViagiahialiawiatia$hiaoia!Pia!Zia#tia#via#zia#|ia#}iaxia!fia~O_!yO`!zOa!{Ob!|Oc#ROd#SO~P.vO!Z%^O~O!Z%_O~O!Z%bO~O!n%cO~O!Z%dO$g$XO~O!Z%fO~O!Z%gO~O!Z%hO~O!Z%iO~O!Z%mO~O!Z%nO~O!Z%oO~O!Z%pO~P&xO!Z%qO~P&xOc%tOt%rO~O!Z%uO!r%wO!s%vO~Op$^O!Z%xO~O$g$XOo$qP~Op!}O!Z%}O~Op!}OZ$jX_$jX`$jXa$jXb$jXc$jXd$jXg$jXh$jXl$jXw$jX$i$jXt$jXe$jXf$jX$g$jXx$jX~O!Z$jXV$jX$h$jXo$jX!P$jX#t$jX#v$jX#z$jX#|$jX#}$jX!f$jX~P3[O!Z&RO~Os&UOt%rO!Z&TO~Os&VO~Os&XOt%rO~O!Z&YO~O!Z&ZO~P&xO#t&[O~P&xO#v&]O~P&xO!Z&^O#z&`O#|&_O#}&_O~P&xO$h&aO~P&xOZ!wOp!}O$i!xOV^i`^ia^ib^ic^id^ig^ih^il^iw^it^i$h^io^i!P^i!Z^i#t^i#v^i#z^i#|^i#}^ie^if^i$g^ix^i!f^i~O_^i~P6}OZ!wO_!yOp!}O$i!xOV^ia^ib^ic^id^ig^ih^il^iw^it^i$h^io^i!P^i!Z^i#t^i#v^i#z^i#|^i#}^ix^i!f^i~O`^i~P9OO`!zO~P9OOZ!wO_!yO`!zOa!{Op!}O$i!xOV^ic^id^ig^ih^il^iw^it^i$h^io^i!P^i!Z^i#t^i#v^i#z^i#|^i#}^ix^i!f^i~Ob^i~P:}Ot&bOo$kX~P&xOZ$fX_$fX`$fXa$fXb$fXc$fXd$fXg$fXh$fXl$fXo$fXp$fXt$fXw$fX$i$fX~Os&dO~P=POt&bOo$kX~Oo&eO~Ob!|O~P:}OZ!wO_)gO`)hOa)iOb)jOc)kOp!}O$i!xOV^id^ig^ih^il^iw^it^i$h^io^i!P^i!Z^i#t^i#v^i#z^i#|^i#}^ix^i!f^i~Oe&fOf&fO$gfO~P>mOZ!wO_!yO`!zOa!{Ob!|Oc#ROd#SOp!}O$i!xOV^ih^il^iw^it^i$h^io^i!P^i!Z^i#t^i#v^i#z^i#|^i#}^ix^i!f^i~Og^i~P@nOg#TO~P@nOZ!wO_!yO`!zOa!{Ob!|Oc#ROd#SOg#TOh#UOp!}O$i!xOVvilviwvitvi$hviovi!Pvi!Zvi#tvi#vvi#zvi#|vi#}vi!fvi~Ox&gO~PBmOt%PO$h$la~Oo&jOt%PO~OekOfkOj(yOpiO!RkO!SkO!TkO!UkO$gfO$ihO$njO~Ot%VO$m$oa~O!]#eO~P%rO!Z&pO~P&xO!Z&rO~O!Z&sO~O!Z&uO~P&xOc&xOt%rO~O!Z&zO~O!Z&zO!s&{O~O!Z&|O~Os&}Ot'OOo$qX~Oo'QO~O!Z'RO~Op!}O!Z'RO~Os'TOt%rO~Os'WOt%rO~O$g'ZO~O$O'_O~O#{'`O~Ot&bOo$ka~Ot$Ua$h$Uao$Ua~P&xOZ!wO_(zO`({Oa(|Ob(}Oc)POd)QOg)ROh)SOl)OOp!}Ow)TO$i!xO~Ot!Oi$m!Oi~PHrO!P'hO~P&xO!Z'jO!f'kO~P&xO!Z'lO~Ot'OOo$qa~O!Z'qO~O!Z'sO~P&xOt'tO!Z'vO~P&xOt'xO!Z$ri~P&xO!Z'zO~Ot!eX!Z!eX#tXX~O#t'{O~Ot'|O!Z'zO~O!Z(OO~O!Z(OO#|(PO#}(PO~Oo$Tat$Ta~P&xOs(QO~P=POoritri~P&xOZ!wOp!}O$i!xOVvylvywvytvy$hvyovy!Pvy!Zvy#tvy#vvy#zvy#|vy#}vyxvy!fvy~O_!yO`!zOa!{Ob!|Oc#ROd#SOg#TOh#UO~PLsOZ!wOp!}O$i!xOgiahialiatiawia$miaxia~O_(zO`({Oa(|Ob(}Oc)POd)QO~PNkO!Z(^O!f(_O~P&xO!Z(^O~Oo!zit!zi~P&xOs(`Oo$Zat$Za~O!Z(aO~P&xOt'tO!Z(dO~Ot'xO!Z$rq~P&xOt'xO!Z$rq~Ot'|O!Z(kO~O$O(lO~OZ!wOp!}O$i!xO`^ia^ib^ic^id^ig^ih^il^it^iw^i$m^ie^if^i$g^ix^i~O_^i~P!#iOZ!wO_(zOp!}O$i!xOa^ib^ic^id^ig^ih^il^it^iw^i$m^ix^i~O`^i~P!$zO`({O~P!$zOZ!wO_(zO`({Oa(|Op!}O$i!xOc^id^ig^ih^il^it^iw^i$m^ix^i~Ob^i~P!&ZO$m$jX~P3[Ob(}O~P!&ZOZ!wO_)zO`){Oa)|Ob)}Oc*OOp!}O$i!xOd^ig^ih^il^it^iw^i$m^ix^i~Oe&fOf&fO$gfO~P!'qOZ!wO_(zO`({Oa(|Ob(}Oc)POd)QOp!}O$i!xOh^il^it^iw^i$m^ix^i~Og^i~P!)SOg)RO~P!)SOZ!wO_(zO`({Oa(|Ob(}Oc)POd)QOg)ROh)SOp!}O$i!xOlvitviwvi$mvi~Ox)WO~P!*cOt!Qi$m!Qi~PHrO!Z(nO~Os(pO~Ot'xO!Z$ry~Os(rOt%rO~O!Z(sO~Oouitui~P&xOo!{it!{i~P&xOs(vOt%rO~OZ!wO_(zO`({Oa(|Ob(}Oc)POd)QOg)ROh)SOp!}O$i!xO~Olvytvywvy$mvyxvy~P!-SOt$[q!Z$[q~P&xOt$]q!Z$]q~P&xOt$]y!Z$]y~P&xOm(VO~OekOfkOj)yOpiO!RkO!SkO!TkO!UkO$gfO$ihO$njO~Oe^if^i$g^i~P>mOxvi~PBmOe^if^i$g^i~P!'qOxvi~P!*cO_)gO`)hOa)iOb)jOc)kOd)ZOeiafia$gia~P.vOZ!wO_)gO`)hOa)iOb)jOc)kOd)ZOp!}O$i!xOV^ie^if^ih^il^iw^i$g^it^i$h^io^i!P^i!Z^i#t^i#v^i#z^i#|^i#}^ix^i!f^i~Og^i~P!1_Og)lO~P!1_OZ!wO_)gO`)hOa)iOb)jOc)kOd)ZOg)lOh)mOp!}O$i!xOVvievifvilviwvi$gvitvi$hviovi!Pvi!Zvi#tvi#vvi#zvi#|vi#}vi!fvi~Ox)sO~P!3gO_)gO`)hOa)iOb)jOc)kOd)ZOg)lOh)mOevyfvy$gvy~PLsOxvi~P!3gOZ!wO_)zO`){Oa)|Ob)}Oc*OOd)bOg*POh*QOp!}O$i!xOevifvilvitviwvi$gvi$mvi~Oxvi~P!6fO_)gO~P6}OZ!wO_)gO`)hOp!}O$i!xOV^ib^ic^id^ie^if^ig^ih^il^iw^i$g^it^i$h^io^i!P^i!Z^i#t^i#v^i#z^i#|^i#}^ix^i!f^i~Oa^i~P!8OOa)iO~P!8OOZ!wOp!}O$i!xOc^id^ie^if^ig^ih^il^iw^i$g^it^ix^i~O_)gO`)hOa)iOb)jOV^i$h^io^i!P^i!Z^i#t^i#v^i#z^i#|^i#}^i!f^i~P!:WO_)zO`){Oa)|Ob)}Oc*OOd)bOeiafia$gia~PNkOZ!wO_)zO`){Oa)|Ob)}Oc*OOd)bOp!}O$i!xOe^if^ih^il^it^iw^i$g^i$m^ix^i~Og^i~P!<xOg*PO~P!<xOx*SO~P!6fOZ!wO_)zO`){Oa)|Ob)}Op!}O$i!xO~Oc*OOd)bOg*POh*QOevyfvylvytvywvy$gvy$mvyxvy~P!>iO_)zO~P!#iO_)zO`){Oa^ib^i$m^i~P!:WO_)zO`){Oa)|Ob^i$m^i~P!:WO_)zO`){Oa)|Ob)}O$m^i~P!:WOfaZa~",goto:"Cy$sPPPPPP$tP$t%j'sPP's'sPPPPPPPPPP'sP'sPP)jPP)o+nPP+q'sPP's's's's's+tP+wPPPP+z,pPPP-fP-jP-vP+z.UP.zP/zP+z0YP1O1RP+z1UPPP1zP+z2QP2v2|3P3SP+z3YP4OP+z4UP4zP+z5QP5vP+z5|P6rP6xP+z7WP7|P+z8SP8xP$t$t$tPPPP9O$tPPPPPP$tP9U:j;f;m;w;}<T<g<m<t<z=U=[PPPPP=b>YPPPCcCjCmPPCp$tCsCv!gbOSTVWXYZ[]^doqtu{!O!R!U!X![!]!`!c#b#c#i#k#{#}%[%a%k$dkRhijl!e!f!p!q!r!s!x!y!z!{!|#R#S#T#U#V#e$O%P%U%V%t&U&V&X&d&g&x&}'T'W'h(Q(`(p(r(v(y(z({(|(})P)Q)R)S)T)W)Z)[)b)c)f)g)h)i)j)k)l)m)n)s)y)z){)|)}*O*P*Q*R*S*T*UQ$_!kQ$v!}Q&P$`S&f${(XS']&]'|R'b&b$ikRhijl!e!f!p!q!r!s!x!y!z!{!|!}#R#S#T#U#V#e$O%P%U%V%t&U&V&X&b&d&g&x&}'T'W'h(Q(`(p(r(v(y(z({(|(})P)Q)R)S)T)W)Z)[)b)c)f)g)h)i)j)k)l)m)n)s)y)z){)|)}*O*P*Q*R*S*T*UV$b!l#O)O$d#Pg#W#Y#[#_$U$W$i$j$k$l$p$q$r$s$t$u$z${$|$}%O%]%l&h&k&l&y'U'V'X'a'e'f'g'i'm'r'w(R(S(T(U(W(X(Y(Z([(](m(o(t(u(w(x)U)V)X)Y)])^)_)`)a)d)e)o)p)q)r)t)u)v)w)x*V*W*X*YQ&O$_S&Q$a(VR'S&PR$w!}R'c&bR#]jR&m%V!g_OSTVWXYZ[]^doqtu{!O!R!U!X![!]!`!c#b#c#i#k#{#}%[%a%k!gSOSTVWXYZ[]^doqtu{!O!R!U!X![!]!`!c#b#c#i#k#{#}%[%a%kTnSoQqSQtTQ#boR#kuQpSS#aoqS%Z#b#cR&o%[!gTOSTVWXYZ[]^doqtu{!O!R!U!X![!]!`!c#b#c#i#k#{#}%[%a%kQ$Y!gQ$[!iQ$]!jQ$d!mQ$f!nQ$g!oQ%e#qQ%z$^Q&v%rQ'Y&[S'[&]'|Q'n'OQ(b'tQ(f'xR(h'{QsTS#htuS%`#i#kR&q%a!gUOSTVWXYZ[]^doqtu{!O!R!U!X![!]!`!c#b#c#i#k#{#}%[%a%kRyUR#ny!gVOSTVWXYZ[]^doqtu{!O!R!U!X![!]!`!c#b#c#i#k#{#}%[%a%kQzVR#p{!gWOSTVWXYZ[]^doqtu{!O!R!U!X![!]!`!c#b#c#i#k#{#}%[%a%kQ$`!kR%y$]R%{$^R'o'OQ}WR#r!O!gXOSTVWXYZ[]^doqtu{!O!R!U!X![!]!`!c#b#c#i#k#{#}%[%a%kQ!QXR#t!R!gYOSTVWXYZ[]^doqtu{!O!R!U!X![!]!`!c#b#c#i#k#{#}%[%a%kQ!TYR#v!U!gZOSTVWXYZ[]^doqtu{!O!R!U!X![!]!`!c#b#c#i#k#{#}%[%a%kQ!WZR#x!X!g[OSTVWXYZ[]^doqtu{!O!R!U!X![!]!`!c#b#c#i#k#{#}%[%a%kQ![[R#}!]Q!Z[S#z![!]S%j#{#}R&t%k!g]OSTVWXYZ[]^doqtu{!O!R!U!X![!]!`!c#b#c#i#k#{#}%[%a%kQ!_]R$Q!`!g^OSTVWXYZ[]^doqtu{!O!R!U!X![!]!`!c#b#c#i#k#{#}%[%a%kQ!b^R$S!cQ'^&]R(i'|QdOQuTQ{VQ!OWQ!RXQ!UYQ!XZQ!][Q!`]Q!c^p!vdu{!O!R!U!X!]!`!c#c#i#{%[%a%kQ#cqQ#itQ#{![Q%[#bQ%a#kR%k#}SQOdSeQm!cmSTVWXYZ[]^oqtu{!O!R!U!X![!]!`!c#b#c#i#k#{#}%[%a%kS&c$u$wR'd&cQ%Q#WQ%S#YT&i%Q%SQ%W#]R&n%WQoSR#`oQ%s$YQ&S$dQ&W$gW&w%s&S&W(qR(q(fQxUR#mxS'P%z%{R'p'PQ'u'VR(c'uQ'y'XQ(e'wT(g'y(eQ'}'^R(j'}Q!uaR$m!u!bcOTVWXYZ[]^dqtu{!O!R!U!X![!]!`!c#b#c#i#k#{#}%[%a%kTnSoQgRQ#WhQ#YiQ#[jQ#_lQ$U!eQ$W!fQ$i!pQ$j!qQ$k!rQ$l!sQ$p!xS$q!y)gQ$r!zQ$s!{Q$t!|Q$u!}Q$z#RQ${#SQ$|#TQ$}#UQ%O#VQ%]#eQ%l$OQ&h%PQ&k%UQ&l%VQ&y%tQ'U&UQ'V&VQ'X&XQ'a&bQ'e&dQ'f&gQ'g(yQ'i&xQ'm&}Q'r'TQ'w'WS(R(z)zQ(S({Q(T(|Q(U(}Q(W)PQ(X)QQ(Y)RQ(Z)SQ([)TQ(]'hQ(m(QQ(o(`Q(t)WQ(u(pQ(w(rQ(x(vQ)U)ZQ)V)[Q)X)bQ)Y)cQ)])fQ)^)lQ)_)mQ)`)nQ)a)sQ)d*TQ)e*UQ)o)hQ)p)iQ)q)jQ)r)kQ)t)yQ)u*PQ)v*QQ)w*RQ)x*SQ*V){Q*W)|Q*X)}R*Y*OQ$c!lT$y#O)OR$x!}R#XhR#^jR%|$^R$h!o",nodeNames:`⚠ {{ {# {% {% Template Text }} Interpolation VariableName MemberExpression . PropertyName SubscriptExpression BinaryExpression ConcatOp ArithOp ArithOp CompareOp in is StringLiteral NumberLiteral and or NotExpression not FilterExpression FilterOp FilterName FilterCall ) ( ArgumentList NamedArgument AssignOp , NamedArgument ConditionalExpression if else CallExpression ArrayExpression TupleExpression ParenthesizedExpression DictExpression Entry : Entry BooleanLiteral self super loop IfStatement Tag TagName if %} Tag elif Tag else EndTag endif ForStatement Tag for Definition recursive EndTag endfor RawStatement Tag raw RawText EndTag endraw BlockStatement Tag block scoped required EndTag endblock MacroStatement Tag macro ParamList OptionalParameter OptionalParameter EndTag endmacro CallStatement Tag call EndTag endcall FilterStatement Tag filter EndTag endfilter SetStatement Tag set EndTag endset TransStatement Tag trans Tag pluralize EndTag endtrans WithStatement Tag with EndTag endwith AutoescapeStatement Tag autoescape EndTag endautoescape Tag Tag Tag import as from import ImportItem Tag include ignore missing with without context Comment #}`,maxTerm:173,nodeProps:[[`closedBy`,1,`}}`,2,`#}`,-2,3,4,`%}`,32,`)`],[`openedBy`,7,`{{`,31,`(`,57,`{%`,140,`{#`],[`group`,-18,9,10,13,14,21,22,25,27,38,41,42,43,44,45,49,50,51,52,`Expression`,-11,53,64,71,77,84,92,97,102,107,114,119,`Statement`]],skippedNodes:[0],repeatNodeCount:13,tokenData:".|~RqXY#YYZ#Y]^#Ypq#Yqr#krs#vuv&nwx&{xy)nyz)sz{)x{|*V|}+|}!O,R!O!P,g!P!Q,o!Q![+h![!],w!^!_,|!_!`-U!`!a,|!c!}-^!}#O.U#P#Q.Z#R#S-^#T#o-^#o#p.`#p#q.e#q#r.j#r#s.w%W;'S-^;'S;:j.O<%lO-^~#_S$d~XY#YYZ#Y]^#Ypq#Y~#nP!_!`#q~#vOb~~#yWOY#vZr#vrs$cs#O#v#O#P$h#P;'S#v;'S;=`%x<%lO#v~$hOe~~$kYOY#vYZ#vZr#vrs%Zs#O#v#O#P$h#P;'S#v;'S;=`&O;=`<%l#v<%lO#v~%`We~OY#vZr#vrs$cs#O#v#O#P$h#P;'S#v;'S;=`%x<%lO#v~%{P;=`<%l#v~&RXOY#vZr#vrs$cs#O#v#O#P$h#P;'S#v;'S;=`%x;=`<%l#v<%lO#v~&sP`~#q#r&v~&{O!Z~~'OWOY&{Zw&{wx$cx#O&{#O#P'h#P;'S&{;'S;=`(x<%lO&{~'kYOY&{YZ&{Zw&{wx(Zx#O&{#O#P'h#P;'S&{;'S;=`)O;=`<%l&{<%lO&{~(`We~OY&{Zw&{wx$cx#O&{#O#P'h#P;'S&{;'S;=`(x<%lO&{~({P;=`<%l&{~)RXOY&{Zw&{wx$cx#O&{#O#P'h#P;'S&{;'S;=`(x;=`<%l&{<%lO&{~)sOp~~)xOo~~)}P`~z{*Q~*VO`~~*[Qa~!O!P*b!Q![+h~*eP!Q![*h~*mSf~!Q![*h!g!h*y#R#S*h#X#Y*y~*|R{|+V}!O+V!Q![+]~+YP!Q![+]~+bQf~!Q![+]#R#S+]~+mTf~!O!P*b!Q![+h!g!h*y#R#S+h#X#Y*y~,ROt~~,WRa~uv,a!O!P*b!Q![+h~,dP#q#r&v~,lPZ~!Q![*h~,tP`~!P!Q*Q~,|O!P~~-RPb~!_!`#q~-ZPs~!_!`#q!`-iVm`[p!XS$gY!Q![-^!c!}-^#R#S-^#T#o-^%W;'S-^;'S;:j.O<%lO-^!`.RP;=`<%l-^~.ZO$i~~.`O$h~~.eO$n~~.jOl~^.oP$m[#q#r.rQ.wOVQ~.|O_~",tokenizers:[S,w,1,2,3,4,5,new d(`b~RPstU~XP#q#r[~aO$Q~~`,17,173)],topRules:{Template:[0,5]},specialized:[{term:161,get:e=>T[e]||-1},{term:55,get:e=>E[e]||-1}],tokenPrec:3602});function O(e,t){return e.split(` `).map(e=>({label:e,type:t}))}var k=O(`abs attr batch capitalize center default dictsort escape filesizeformat first float forceescape format groupby indent int items join last length list lower map max min pprint random reject rejectattr replace reverse round safe select selectattr slice sort string striptags sum title tojson trim truncate unique upper urlencode urlize wordcount wordwrap xmlattr`,`function`),A=O(`boolean callable defined divisibleby eq escaped even filter float ge gt in integer iterable le lower lt mapping ne none number odd sameas sequence string test undefined upper range lipsum dict joiner namespace`,`function`),j=O(`loop super self true false varargs kwargs caller name arguments catch_kwargs catch_varargs caller`,`keyword`),M=A.concat(j),N=O(`raw endraw filter endfilter trans pluralize endtrans with endwith autoescape endautoescape if elif else endif for endfor call endcall block endblock set endset macro endmacro import include break continue debug do extends`,`keyword`);function P(e){let{state:t,pos:n}=e,r=o(t).resolveInner(n,-1).enterUnfinishedNodesBefore(n),i=r.childBefore(n)?.name||r.name;if(r.name==`FilterName`)return{type:`filter`,node:r};if(e.explicit&&(i==`FilterOp`||i==`filter`))return{type:`filter`};if(r.name==`TagName`)return{type:`tag`,node:r};if(e.explicit&&i==`{%`)return{type:`tag`};if(r.name==`PropertyName`&&r.parent.name==`MemberExpression`)return{type:`prop`,node:r,target:r.parent};if(r.name==`.`&&r.parent.name==`MemberExpression`)return{type:`prop`,target:r.parent};if(r.name==`MemberExpression`&&i==`.`)return{type:`prop`,target:r};if(r.name==`VariableName`)return{type:`expr`,from:r.from};if(r.name==`Comment`||r.name==`StringLiteral`||r.name==`NumberLiteral`)return null;let a=e.matchBefore(/[\w\u00c0-\uffff]+$/);return a?{type:`expr`,from:a.from}:e.explicit?{type:`expr`}:null}function F(e,t,n,r){let i=[];for(;;){let n=t.getChild(`Expression`);if(!n)return[];if(n.name==`VariableName`){i.unshift(e.sliceDoc(n.from,n.to));break}else if(n.name==`MemberExpression`){let r=n.getChild(`PropertyName`);r&&i.unshift(e.sliceDoc(r.from,r.to)),t=n}else return[]}return r(i,e,n)}function I(e={}){let t=e.tags?e.tags.concat(N):N,n=e.variables?e.variables.concat(M):M,{properties:r}=e;return e=>{let i=P(e);if(!i)return null;let a=i.from??(i.node?i.node.from:e.pos),o;return o=i.type==`filter`?k:i.type==`tag`?t:i.type==`expr`?n:r?F(e.state,i.target,e,r):[],o.length?{options:o,from:a,validFor:/^[\w\u00c0-\uffff]*$/}:null}}var L=t.inputHandler.of((e,t,n,r)=>r!=`%`||t!=n||e.state.doc.sliceString(t-1,n+1)!=`{}`?!1:(e.dispatch(e.state.changeByRange(e=>({changes:{from:e.from,to:e.to,insert:`%%`},range:a.cursor(e.from+1)})),{scrollIntoView:!0,userEvent:`input.type`}),!0));function R(e){return t=>{let n=e.test(t.textAfter);return t.lineIndent(t.node.from)+(n?0:t.unit)}}var z=l.define({name:`jinja`,parser:D.configure({props:[n({"TagName raw endraw filter endfilter as trans pluralize endtrans with endwith autoescape endautoescape":r.keyword,"required scoped recursive with without context ignore missing":r.modifier,self:r.self,"loop super":r.standard(r.variableName),"if elif else endif for endfor call endcall":r.controlKeyword,"block endblock set endset macro endmacro import from include":r.definitionKeyword,"Comment/...":r.blockComment,VariableName:r.variableName,Definition:r.definition(r.variableName),PropertyName:r.propertyName,FilterName:r.special(r.variableName),ArithOp:r.arithmeticOperator,AssignOp:r.definitionOperator,"not and or":r.logicOperator,CompareOp:r.compareOperator,"in is":r.operatorKeyword,"FilterOp ConcatOp":r.operator,StringLiteral:r.string,NumberLiteral:r.number,BooleanLiteral:r.bool,"{% %} {# #} {{ }} { }":r.brace,"( )":r.paren,".":r.derefOperator,": , .":r.punctuation}),e.add({Tag:s({closing:`%}`}),"IfStatement ForStatement":R(/^\s*(\{%-?\s*)?(endif|endfor|else|elif)\b/),Statement:R(/^\s*(\{%-?\s*)?end\w/)}),u.add({"Statement Comment"(e){let t=e.firstChild,n=e.lastChild;return!t||t.name!=`Tag`&&t.name!=`{#`?null:{from:t.to,to:n.name==`EndTag`||n.name==`#}`?n.from:e.to}}})]}),languageData:{indentOnInput:/^\s*{%-?\s*(?:end|elif|else)$/}}),B=m();function V(e){return z.configure({wrap:i(t=>t.type.isTop?{parser:e.parser,overlay:e=>e.name==`Text`||e.name==`RawText`}:null)},`jinja`)}var H=V(B.language);function U(e={}){let t=e.base||B,n=t.language==B.language?H:V(t.language);return new c(n,[t.support,n.data.of({autocomplete:I(e)}),t.language.data.of({closeBrackets:{brackets:[`{`]}}),L])}export{U as jinja};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{N as e,P as t,U as n,o as r,r as i}from"./dist-SVPsM5Oi.js";import{i as a,r as o}from"./dist-tGfufz3b.js";import{r as s}from"./dist-
|
|
1
|
+
import{N as e,P as t,U as n,o as r,r as i}from"./dist-SVPsM5Oi.js";import{i as a,r as o}from"./dist-tGfufz3b.js";import{r as s}from"./dist-BwZj_mI4.js";import{html as c}from"./dist-D87he9he.js";var l=o.deserialize({version:14,states:"%pOVOWOOObQPOOOpOSO'#C_OOOO'#Cp'#CpQVOWOOQxQPOOO!TQQOOQ!YQPOOOOOO,58y,58yO!_OSO,58yOOOO-E6n-E6nO!dQQO'#CqQ{QPOOO!iQPOOQ{QPOOO!qQPOOOOOO1G.e1G.eOOQO,59],59]OOQO-E6o-E6oO!yOpO'#CiO#RO`O'#CiQOQPOOO#ZO#tO'#CmO#fO!bO'#CmOOQO,59T,59TO#qOpO,59TO#vO`O,59TOOOO'#Cr'#CrO#{O#tO,59XOOQO,59X,59XOOOO'#Cs'#CsO$WO!bO,59XOOQO1G.o1G.oOOOO-E6p-E6pOOQO1G.s1G.sOOOO-E6q-E6q",stateData:"$g~OjOS~OQROUROkQO~OWTOXUOZUO`VO~OSXOTWO~OXUO[]OlZO~OY^O~O[_O~OT`O~OYaO~OmcOodO~OmfOogO~O^iOnhO~O_jOphO~ObkOqkOrmO~OcnOsnOtmO~OnpO~OppO~ObkOqkOrrO~OcnOsnOtrO~OWX`~",goto:`!^hPPPiPPPPPPPPPmPPPpPPsy!Q!WTROSRe]Re_QSORYSS[T^Rb[QlfRqlQogRso`,nodeNames:`⚠ Content Text Interpolation InterpolationContent }} Entity Attribute VueAttributeName : Identifier @ Is ScriptAttributeValue AttributeScript AttributeScript AttributeName AttributeValue Entity Entity`,maxTerm:36,nodeProps:[[`isolate`,-3,3,13,17,``]],skippedNodes:[0],repeatNodeCount:4,tokenData:"'y~RdXY!aYZ!a]^!apq!ars!rwx!w}!O!|!O!P#t!Q![#y![!]$s!_!`%g!b!c%l!c!}#y#R#S#y#T#j#y#j#k%q#k#o#y%W;'S#y;'S;:j$m<%lO#y~!fSj~XY!aYZ!a]^!apq!a~!wOm~~!|Oo~!b#RX`!b}!O!|!Q![!|![!]!|!c!}!|#R#S!|#T#o!|%W;'S!|;'S;:j#n<%lO!|!b#qP;=`<%l!|~#yOl~%W$QXY#t`!b}!O!|!Q![#y![!]!|!c!}#y#R#S#y#T#o#y%W;'S#y;'S;:j$m<%lO#y%W$pP;=`<%l#y~$zXX~`!b}!O!|!Q![!|![!]!|!c!}!|#R#S!|#T#o!|%W;'S!|;'S;:j#n<%lO!|~%lO[~~%qOZ~%W%xXY#t`!b}!O&e!Q![#y![!]!|!c!}#y#R#S#y#T#o#y%W;'S#y;'S;:j$m<%lO#y!b&jX`!b}!O!|!Q![!|![!]!|!c!}'V#R#S!|#T#o'V%W;'S!|;'S;:j#n<%lO!|!b'^XW!b`!b}!O!|!Q![!|![!]!|!c!}'V#R#S!|#T#o'V%W;'S!|;'S;:j#n<%lO!|",tokenizers:[6,7,new a(`b~RP#q#rU~XP#q#r[~aOT~~`,17,4),new a("!k~RQvwX#o#p!_~^TU~Opmq!]m!^;'Sm;'S;=`!X<%lOm~pUOpmq!]m!]!^!S!^;'Sm;'S;=`!X<%lOm~!XOU~~![P;=`<%lm~!bP#o#p!e~!jOk~~",72,2),new a(`[~RPwxU~ZOp~~`,11,15),new a(`[~RPrsU~ZOn~~`,11,14),new a("!e~RQvwXwx!_~^Tc~Opmq!]m!^;'Sm;'S;=`!X<%lOm~pUOpmq!]m!]!^!S!^;'Sm;'S;=`!X<%lOm~!XOc~~![P;=`<%lm~!dOt~~",66,35),new a("!e~RQrsXvw^~^Or~~cTb~Oprq!]r!^;'Sr;'S;=`!^<%lOr~uUOprq!]r!]!^!X!^;'Sr;'S;=`!^<%lOr~!^Ob~~!aP;=`<%lr~",66,33)],topRules:{Content:[0,1],Attribute:[1,7]},tokenPrec:157}),u=s.parser.configure({top:`SingleExpression`}),d=l.configure({props:[e({Text:t.content,Is:t.definitionOperator,AttributeName:t.attributeName,VueAttributeName:t.keyword,Identifier:t.variableName,"AttributeValue ScriptAttributeValue":t.attributeValue,Entity:t.character,"{{ }}":t.brace,"@ :":t.punctuation})]}),f={parser:u},p=d.configure({wrap:n((e,t)=>e.name==`InterpolationContent`?f:null)}),m=d.configure({wrap:n((e,t)=>e.name==`AttributeScript`?f:null),top:`Attribute`}),h={parser:p},g={parser:m},_=c();function v(e){return e.configure({dialect:`selfClosing`,wrap:n(b)},`vue`)}var y=v(_.language);function b(e,t){switch(e.name){case`Attribute`:return/^(@|:|v-)/.test(t.read(e.from,e.from+2))?g:null;case`Text`:return h}return null}function x(e={}){let t=_;if(e.base){if(e.base.language.name!=`html`||!(e.base.language instanceof i))throw RangeError(`The base option must be the result of calling html(...)`);t=e.base}return new r(t.language==_.language?y:v(t.language),[t.support,t.language.data.of({closeBrackets:{brackets:[`{`,`"`]}})])}export{x as vue};
|