@willbooster/shared-lib 10.10.0 → 10.11.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/index.cjs +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -1
- package/dist/parseIsoDate.cjs +2 -0
- package/dist/parseIsoDate.cjs.map +1 -0
- package/dist/parseIsoDate.d.ts +18 -0
- package/dist/parseIsoDate.js +2 -0
- package/dist/parseIsoDate.js.map +1 -0
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./appEnv.cjs"),t=require("./assert.cjs"),n=require("./githubTemplates.cjs"),r=require("./sleep.cjs"),i=require("./error.cjs"),a=require("./humanize.cjs"),o=require("./mail.cjs"),s=require("./markdown.cjs"),c=require("./
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./appEnv.cjs"),t=require("./assert.cjs"),n=require("./githubTemplates.cjs"),r=require("./sleep.cjs"),i=require("./error.cjs"),a=require("./humanize.cjs"),o=require("./mail.cjs"),s=require("./markdown.cjs"),c=require("./parseIsoDate.cjs"),l=require("./parseCommandLineArgs.cjs"),u=require("./text.cjs"),d=require("./prompt.cjs"),f=require("./promptFormatters.cjs"),p=require("./shuffle.cjs"),m=require("./recoverJson.cjs"),h=require("./sqlite.cjs"),g=require("./testingRules.cjs"),_=require("./zenkaku.cjs");exports.BUG_ISSUE_SECTIONS=n.BUG_ISSUE_SECTIONS,exports.CHANGE_ISSUE_SECTIONS=n.CHANGE_ISSUE_SECTIONS,exports.ISSUE_TEMPLATE_RULES=n.ISSUE_TEMPLATE_RULES,exports.PULL_REQUEST_BODY_RULES=n.PULL_REQUEST_BODY_RULES,exports.PULL_REQUEST_REQUIREMENTS_RULES=n.PULL_REQUEST_REQUIREMENTS_RULES,exports.PULL_REQUEST_SECTIONS=n.PULL_REQUEST_SECTIONS,exports.TEST_WRITING_RULES=g.TEST_WRITING_RULES,exports.ensureTruthy=t.ensureTruthy,exports.errorify=i.errorify,exports.escapePromptTag=d.escapePromptTag,exports.escapeRegExp=u.escapeRegExp,exports.extractCodeBlocks=s.extractCodeBlocks,exports.extractIfSingleOutermostCodeBlock=s.extractIfSingleOutermostCodeBlock,exports.extractSections=s.extractSections,exports.formatFilesForPrompt=f.formatFilesForPrompt,exports.formatMessagesForPrompt=f.formatMessagesForPrompt,exports.formatPrompt=d.formatPrompt,exports.getAppEnv=e.getAppEnv,exports.getConnectionLevelSqlitePragmas=h.getConnectionLevelSqlitePragmas,exports.getPersistentSqlitePragmas=h.getPersistentSqlitePragmas,exports.humanizeNumber=a.humanizeNumber,exports.ignoreEnoent=i.ignoreEnoent,exports.ignoreEnoentAsync=i.ignoreEnoentAsync,exports.ignoreError=i.ignoreError,exports.ignoreErrorAsync=i.ignoreErrorAsync,exports.mailTemplates=o.mailTemplates,exports.parseCommandLineArgs=l.parseCommandLineArgs,exports.parseIsoDate=c.parseIsoDate,exports.parseMarkdownSections=s.parseMarkdownSections,exports.quoteForShell=u.quoteForShell,exports.recoverJson=m.recoverJson,exports.renderSectionChecklist=n.renderSectionChecklist,exports.renderSectionTemplate=n.renderSectionTemplate,exports.serializeForPrompt=d.serializeForPrompt,exports.serializeForPromptInTag=d.serializeForPromptInTag,exports.shuffle=p.shuffle,exports.sleep=r.sleep,exports.toCodeBlock=u.toCodeBlock,exports.toTildeCodeBlock=u.toTildeCodeBlock,exports.truncateForPrompt=d.truncateForPrompt,exports.withRetry=i.withRetry,exports.zenkakuAlphanumericalsToHankaku=_.zenkakuAlphanumericalsToHankaku;
|
package/dist/index.d.ts
CHANGED
|
@@ -5,6 +5,8 @@ export { errorify, ignoreError, ignoreEnoent, ignoreErrorAsync, ignoreEnoentAsyn
|
|
|
5
5
|
export { humanizeNumber } from './humanize.js';
|
|
6
6
|
export { mailTemplates } from './mail.js';
|
|
7
7
|
export { extractCodeBlocks, extractIfSingleOutermostCodeBlock, extractSections, parseMarkdownSections, } from './markdown.js';
|
|
8
|
+
export { parseIsoDate } from './parseIsoDate.js';
|
|
9
|
+
export type { ParsedIsoDate } from './parseIsoDate.js';
|
|
8
10
|
export { parseCommandLineArgs } from './parseCommandLineArgs.js';
|
|
9
11
|
export { escapePromptTag, formatPrompt, serializeForPrompt, serializeForPromptInTag, truncateForPrompt, } from './prompt.js';
|
|
10
12
|
export { formatFilesForPrompt, formatMessagesForPrompt } from './promptFormatters.js';
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{getAppEnv as e}from"./appEnv.js";import{ensureTruthy as t}from"./assert.js";import{BUG_ISSUE_SECTIONS as n,CHANGE_ISSUE_SECTIONS as r,ISSUE_TEMPLATE_RULES as i,PULL_REQUEST_BODY_RULES as a,PULL_REQUEST_REQUIREMENTS_RULES as o,PULL_REQUEST_SECTIONS as s,renderSectionChecklist as c,renderSectionTemplate as l}from"./githubTemplates.js";import{sleep as u}from"./sleep.js";import{errorify as d,ignoreEnoent as f,ignoreEnoentAsync as p,ignoreError as m,ignoreErrorAsync as h,withRetry as g}from"./error.js";import{humanizeNumber as _}from"./humanize.js";import{mailTemplates as v}from"./mail.js";import{extractCodeBlocks as y,extractIfSingleOutermostCodeBlock as b,extractSections as x,parseMarkdownSections as S}from"./markdown.js";import{
|
|
1
|
+
import{getAppEnv as e}from"./appEnv.js";import{ensureTruthy as t}from"./assert.js";import{BUG_ISSUE_SECTIONS as n,CHANGE_ISSUE_SECTIONS as r,ISSUE_TEMPLATE_RULES as i,PULL_REQUEST_BODY_RULES as a,PULL_REQUEST_REQUIREMENTS_RULES as o,PULL_REQUEST_SECTIONS as s,renderSectionChecklist as c,renderSectionTemplate as l}from"./githubTemplates.js";import{sleep as u}from"./sleep.js";import{errorify as d,ignoreEnoent as f,ignoreEnoentAsync as p,ignoreError as m,ignoreErrorAsync as h,withRetry as g}from"./error.js";import{humanizeNumber as _}from"./humanize.js";import{mailTemplates as v}from"./mail.js";import{extractCodeBlocks as y,extractIfSingleOutermostCodeBlock as b,extractSections as x,parseMarkdownSections as S}from"./markdown.js";import{parseIsoDate as C}from"./parseIsoDate.js";import{parseCommandLineArgs as w}from"./parseCommandLineArgs.js";import{escapeRegExp as T,quoteForShell as E,toCodeBlock as D,toTildeCodeBlock as O}from"./text.js";import{escapePromptTag as k,formatPrompt as A,serializeForPrompt as j,serializeForPromptInTag as M,truncateForPrompt as N}from"./prompt.js";import{formatFilesForPrompt as P,formatMessagesForPrompt as F}from"./promptFormatters.js";import{shuffle as I}from"./shuffle.js";import{recoverJson as L}from"./recoverJson.js";import{getConnectionLevelSqlitePragmas as R,getPersistentSqlitePragmas as z}from"./sqlite.js";import{TEST_WRITING_RULES as B}from"./testingRules.js";import{zenkakuAlphanumericalsToHankaku as V}from"./zenkaku.js";export{n as BUG_ISSUE_SECTIONS,r as CHANGE_ISSUE_SECTIONS,i as ISSUE_TEMPLATE_RULES,a as PULL_REQUEST_BODY_RULES,o as PULL_REQUEST_REQUIREMENTS_RULES,s as PULL_REQUEST_SECTIONS,B as TEST_WRITING_RULES,t as ensureTruthy,d as errorify,k as escapePromptTag,T as escapeRegExp,y as extractCodeBlocks,b as extractIfSingleOutermostCodeBlock,x as extractSections,P as formatFilesForPrompt,F as formatMessagesForPrompt,A as formatPrompt,e as getAppEnv,R as getConnectionLevelSqlitePragmas,z as getPersistentSqlitePragmas,_ as humanizeNumber,f as ignoreEnoent,p as ignoreEnoentAsync,m as ignoreError,h as ignoreErrorAsync,v as mailTemplates,w as parseCommandLineArgs,C as parseIsoDate,S as parseMarkdownSections,E as quoteForShell,L as recoverJson,c as renderSectionChecklist,l as renderSectionTemplate,j as serializeForPrompt,M as serializeForPromptInTag,I as shuffle,u as sleep,D as toCodeBlock,O as toTildeCodeBlock,N as truncateForPrompt,g as withRetry,V as zenkakuAlphanumericalsToHankaku};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";function e(e){if(typeof e!=`string`)return;let n=e.trim(),r=/^(\d{4})-(\d{2})-(\d{2})(?:T(\d{2}):(\d{2})(?::(\d{2})(\.\d+)?)?(Z|[+-]\d{2}:?\d{2}))?$/u.exec(n);if(!r)return;let[,i,a,o,s,c,l,u,d]=r,f=Number(i),p=Number(a),m=Number(o),h=new Date(0);if(h.setUTCFullYear(f,p-1,m),h.getUTCFullYear()!==f||h.getUTCMonth()!==p-1||h.getUTCDate()!==m)return;if(s===void 0)return{kind:`date`,value:n};let g=Number(s),_=Number(c),v=Number(l??0);if(g>23||_>59||v>59)return;let y=t(d);if(y!==void 0&&(h.setUTCHours(g,_-y,v),!(h.getUTCFullYear()<0||h.getUTCFullYear()>9999)))return{kind:`datetime`,value:`${h.toISOString().slice(0,19)}${u??``}Z`}}function t(e){if(e===`Z`)return 0;let t=e.slice(1).replace(`:`,``),n=Number(t.slice(0,2)),r=Number(t.slice(2));if(!(n>23||r>59||e.startsWith(`-`)&&n===0&&r===0))return(e.startsWith(`-`)?-1:1)*(n*60+r)}exports.parseIsoDate=e;
|
|
2
|
+
//# sourceMappingURL=parseIsoDate.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseIsoDate.cjs","names":[],"sources":["../src/parseIsoDate.ts"],"sourcesContent":["export type ParsedIsoDate = { kind: 'date'; value: string } | { kind: 'datetime'; value: string };\n\n/**\n * Parses an ISO calendar date or a timestamp with an explicit UTC offset, without guessing\n * a timezone or rolling invalid calendar dates forward. Returns undefined for unsupported input.\n *\n * Accepts YYYY-MM-DD and YYYY-MM-DDTHH:mm[:ss[.fraction]] followed by Z or ±HH:mm\n * (±HHmm also works). Surrounding whitespace is ignored. Date-only values stay date-only;\n * timestamps become UTC strings, retaining all fractional digits. Local timestamps, unknown\n * offsets (-00:00/-0000), leap seconds, and input or normalized UTC years outside 0000–9999\n * are unsupported.\n */\nexport function parseIsoDate(input: unknown): ParsedIsoDate | undefined {\n if (typeof input !== 'string') return undefined;\n const value = input.trim();\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(\\.\\d+)?)?(Z|[+-]\\d{2}:?\\d{2}))?$/u.exec(value);\n if (!match) return undefined;\n const [, yearText, monthText, dayText, hourText, minuteText, secondText, fraction, zone] = match;\n const year = Number(yearText);\n const month = Number(monthText);\n const day = Number(dayText);\n const local = new Date(0);\n local.setUTCFullYear(year, month - 1, day);\n if (local.getUTCFullYear() !== year || local.getUTCMonth() !== month - 1 || local.getUTCDate() !== day) {\n return undefined;\n }\n if (hourText === undefined) return { kind: 'date', value };\n const hour = Number(hourText);\n const minute = Number(minuteText);\n const second = Number(secondText ?? 0);\n if (hour > 23 || minute > 59 || second > 59) return undefined;\n const offset = parseOffset(zone!);\n if (offset === undefined) return undefined;\n local.setUTCHours(hour, minute - offset, second);\n if (local.getUTCFullYear() < 0 || local.getUTCFullYear() > 9999) return undefined;\n return { kind: 'datetime', value: `${local.toISOString().slice(0, 19)}${fraction ?? ''}Z` };\n}\n\nfunction parseOffset(zone: string): number | undefined {\n if (zone === 'Z') return 0;\n const digits = zone.slice(1).replace(':', '');\n const hours = Number(digits.slice(0, 2));\n const minutes = Number(digits.slice(2));\n if (hours > 23 || minutes > 59 || (zone.startsWith('-') && hours === 0 && minutes === 0)) return undefined;\n return (zone.startsWith('-') ? -1 : 1) * (hours * 60 + minutes);\n}\n"],"mappings":"aAYA,SAAgB,EAAa,EAA2C,CACtE,GAAI,OAAO,GAAU,SAAU,OAC/B,IAAM,EAAQ,EAAM,KAAK,EACnB,EAAQ,2FAA2F,KAAK,CAAK,EACnH,GAAI,CAAC,EAAO,OACZ,GAAM,EAAG,EAAU,EAAW,EAAS,EAAU,EAAY,EAAY,EAAU,GAAQ,EACrF,EAAO,OAAO,CAAQ,EACtB,EAAQ,OAAO,CAAS,EACxB,EAAM,OAAO,CAAO,EACpB,EAAQ,IAAI,KAAK,CAAC,EAExB,GADA,EAAM,eAAe,EAAM,EAAQ,EAAG,CAAG,EACrC,EAAM,eAAe,IAAM,GAAQ,EAAM,YAAY,IAAM,EAAQ,GAAK,EAAM,WAAW,IAAM,EACjG,OAEF,GAAI,IAAa,IAAA,GAAW,MAAO,CAAE,KAAM,OAAQ,OAAM,EACzD,IAAM,EAAO,OAAO,CAAQ,EACtB,EAAS,OAAO,CAAU,EAC1B,EAAS,OAAO,GAAc,CAAC,EACrC,GAAI,EAAO,IAAM,EAAS,IAAM,EAAS,GAAI,OAC7C,IAAM,EAAS,EAAY,CAAK,EAC5B,OAAW,IAAA,KACf,EAAM,YAAY,EAAM,EAAS,EAAQ,CAAM,EAC3C,IAAM,eAAe,EAAI,GAAK,EAAM,eAAe,EAAI,OAC3D,MAAO,CAAE,KAAM,WAAY,MAAO,GAAG,EAAM,YAAY,CAAC,CAAC,MAAM,EAAG,EAAE,IAAI,GAAY,GAAG,EAAG,CAC5F,CAEA,SAAS,EAAY,EAAkC,CACrD,GAAI,IAAS,IAAK,MAAO,GACzB,IAAM,EAAS,EAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAK,EAAE,EACtC,EAAQ,OAAO,EAAO,MAAM,EAAG,CAAC,CAAC,EACjC,EAAU,OAAO,EAAO,MAAM,CAAC,CAAC,EAClC,OAAQ,IAAM,EAAU,IAAO,EAAK,WAAW,GAAG,GAAK,IAAU,GAAK,IAAY,GACtF,OAAQ,EAAK,WAAW,GAAG,EAAI,GAAK,IAAM,EAAQ,GAAK,EACzD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type ParsedIsoDate = {
|
|
2
|
+
kind: 'date';
|
|
3
|
+
value: string;
|
|
4
|
+
} | {
|
|
5
|
+
kind: 'datetime';
|
|
6
|
+
value: string;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Parses an ISO calendar date or a timestamp with an explicit UTC offset, without guessing
|
|
10
|
+
* a timezone or rolling invalid calendar dates forward. Returns undefined for unsupported input.
|
|
11
|
+
*
|
|
12
|
+
* Accepts YYYY-MM-DD and YYYY-MM-DDTHH:mm[:ss[.fraction]] followed by Z or ±HH:mm
|
|
13
|
+
* (±HHmm also works). Surrounding whitespace is ignored. Date-only values stay date-only;
|
|
14
|
+
* timestamps become UTC strings, retaining all fractional digits. Local timestamps, unknown
|
|
15
|
+
* offsets (-00:00/-0000), leap seconds, and input or normalized UTC years outside 0000–9999
|
|
16
|
+
* are unsupported.
|
|
17
|
+
*/
|
|
18
|
+
export declare function parseIsoDate(input: unknown): ParsedIsoDate | undefined;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function e(e){if(typeof e!=`string`)return;let n=e.trim(),r=/^(\d{4})-(\d{2})-(\d{2})(?:T(\d{2}):(\d{2})(?::(\d{2})(\.\d+)?)?(Z|[+-]\d{2}:?\d{2}))?$/u.exec(n);if(!r)return;let[,i,a,o,s,c,l,u,d]=r,f=Number(i),p=Number(a),m=Number(o),h=new Date(0);if(h.setUTCFullYear(f,p-1,m),h.getUTCFullYear()!==f||h.getUTCMonth()!==p-1||h.getUTCDate()!==m)return;if(s===void 0)return{kind:`date`,value:n};let g=Number(s),_=Number(c),v=Number(l??0);if(g>23||_>59||v>59)return;let y=t(d);if(y!==void 0&&(h.setUTCHours(g,_-y,v),!(h.getUTCFullYear()<0||h.getUTCFullYear()>9999)))return{kind:`datetime`,value:`${h.toISOString().slice(0,19)}${u??``}Z`}}function t(e){if(e===`Z`)return 0;let t=e.slice(1).replace(`:`,``),n=Number(t.slice(0,2)),r=Number(t.slice(2));if(!(n>23||r>59||e.startsWith(`-`)&&n===0&&r===0))return(e.startsWith(`-`)?-1:1)*(n*60+r)}export{e as parseIsoDate};
|
|
2
|
+
//# sourceMappingURL=parseIsoDate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseIsoDate.js","names":[],"sources":["../src/parseIsoDate.ts"],"sourcesContent":["export type ParsedIsoDate = { kind: 'date'; value: string } | { kind: 'datetime'; value: string };\n\n/**\n * Parses an ISO calendar date or a timestamp with an explicit UTC offset, without guessing\n * a timezone or rolling invalid calendar dates forward. Returns undefined for unsupported input.\n *\n * Accepts YYYY-MM-DD and YYYY-MM-DDTHH:mm[:ss[.fraction]] followed by Z or ±HH:mm\n * (±HHmm also works). Surrounding whitespace is ignored. Date-only values stay date-only;\n * timestamps become UTC strings, retaining all fractional digits. Local timestamps, unknown\n * offsets (-00:00/-0000), leap seconds, and input or normalized UTC years outside 0000–9999\n * are unsupported.\n */\nexport function parseIsoDate(input: unknown): ParsedIsoDate | undefined {\n if (typeof input !== 'string') return undefined;\n const value = input.trim();\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(\\.\\d+)?)?(Z|[+-]\\d{2}:?\\d{2}))?$/u.exec(value);\n if (!match) return undefined;\n const [, yearText, monthText, dayText, hourText, minuteText, secondText, fraction, zone] = match;\n const year = Number(yearText);\n const month = Number(monthText);\n const day = Number(dayText);\n const local = new Date(0);\n local.setUTCFullYear(year, month - 1, day);\n if (local.getUTCFullYear() !== year || local.getUTCMonth() !== month - 1 || local.getUTCDate() !== day) {\n return undefined;\n }\n if (hourText === undefined) return { kind: 'date', value };\n const hour = Number(hourText);\n const minute = Number(minuteText);\n const second = Number(secondText ?? 0);\n if (hour > 23 || minute > 59 || second > 59) return undefined;\n const offset = parseOffset(zone!);\n if (offset === undefined) return undefined;\n local.setUTCHours(hour, minute - offset, second);\n if (local.getUTCFullYear() < 0 || local.getUTCFullYear() > 9999) return undefined;\n return { kind: 'datetime', value: `${local.toISOString().slice(0, 19)}${fraction ?? ''}Z` };\n}\n\nfunction parseOffset(zone: string): number | undefined {\n if (zone === 'Z') return 0;\n const digits = zone.slice(1).replace(':', '');\n const hours = Number(digits.slice(0, 2));\n const minutes = Number(digits.slice(2));\n if (hours > 23 || minutes > 59 || (zone.startsWith('-') && hours === 0 && minutes === 0)) return undefined;\n return (zone.startsWith('-') ? -1 : 1) * (hours * 60 + minutes);\n}\n"],"mappings":"AAYA,SAAgB,EAAa,EAA2C,CACtE,GAAI,OAAO,GAAU,SAAU,OAC/B,IAAM,EAAQ,EAAM,KAAK,EACnB,EAAQ,2FAA2F,KAAK,CAAK,EACnH,GAAI,CAAC,EAAO,OACZ,GAAM,EAAG,EAAU,EAAW,EAAS,EAAU,EAAY,EAAY,EAAU,GAAQ,EACrF,EAAO,OAAO,CAAQ,EACtB,EAAQ,OAAO,CAAS,EACxB,EAAM,OAAO,CAAO,EACpB,EAAQ,IAAI,KAAK,CAAC,EAExB,GADA,EAAM,eAAe,EAAM,EAAQ,EAAG,CAAG,EACrC,EAAM,eAAe,IAAM,GAAQ,EAAM,YAAY,IAAM,EAAQ,GAAK,EAAM,WAAW,IAAM,EACjG,OAEF,GAAI,IAAa,IAAA,GAAW,MAAO,CAAE,KAAM,OAAQ,OAAM,EACzD,IAAM,EAAO,OAAO,CAAQ,EACtB,EAAS,OAAO,CAAU,EAC1B,EAAS,OAAO,GAAc,CAAC,EACrC,GAAI,EAAO,IAAM,EAAS,IAAM,EAAS,GAAI,OAC7C,IAAM,EAAS,EAAY,CAAK,EAC5B,OAAW,IAAA,KACf,EAAM,YAAY,EAAM,EAAS,EAAQ,CAAM,EAC3C,IAAM,eAAe,EAAI,GAAK,EAAM,eAAe,EAAI,OAC3D,MAAO,CAAE,KAAM,WAAY,MAAO,GAAG,EAAM,YAAY,CAAC,CAAC,MAAM,EAAG,EAAE,IAAI,GAAY,GAAG,EAAG,CAC5F,CAEA,SAAS,EAAY,EAAkC,CACrD,GAAI,IAAS,IAAK,MAAO,GACzB,IAAM,EAAS,EAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAK,EAAE,EACtC,EAAQ,OAAO,EAAO,MAAM,EAAG,CAAC,CAAC,EACjC,EAAU,OAAO,EAAO,MAAM,CAAC,CAAC,EAClC,OAAQ,IAAM,EAAU,IAAO,EAAK,WAAW,GAAG,GAAK,IAAU,GAAK,IAAY,GACtF,OAAQ,EAAK,WAAW,GAAG,EAAI,GAAK,IAAM,EAAQ,GAAK,EACzD"}
|